本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于FRDM-K82F的停车助手

发布时间:2022-06-16
分享到:

基于FRDM-K82F的停车助手

发布时间:2022-06-16
分享到:

使用计算机视觉制作停车助手,让您可以始终如一地将汽车完美对齐地停放在车库中。

间接传感
在传感器领域,为了简化和降低传感成本,进行间接测量是很常见的。例如,为了检测人的存在以发出警报,超声波或热传感设备用于检测运动。然而,人类不是这样工作的。虽然我们可能可以使用声音来检测周围是否有人,但视觉是我们确定周围事物的最佳方式。一般来说,视觉可能是我们最有价值和最有能力的感觉,它使我们能够理解世界。

通过计算机视觉感知
最近,计算机视觉取得了很大进展。与机器学习相结合的新算法使我们能够从视频捕获中确定大量信息。然而,这些解决方案的成本远远高于其他类型的传感,因此其用途仅限于监控和工业应用。成本主要来自捕获和分析视频所需的强大计算机。

廉价的计算机视觉 (CV) 传感器可能会成为传感技术的一项突破,原因有很多:

  • 它可以做得比间接传感器更智能。例如,在占用传感器中,当占用者不移动时,间接传感器会失效。即使没有移动,真正的计算机视觉占用传感器也可以检测占用情况。
  • 只需一个视觉传感器就可以检测到许多不同的事物。例如,同一设备可用于检测位置、占用情况(即使现在很多人都在一个房间里)、火情、光照水平、设备状态(灯是否亮着?电视是否开着?)、手势控制,你的名字。如果您可以用自己的眼睛看到它,那么计算机视觉传感器也可以检测到它。
  • 一旦开始使用,价格就会自行降低。基本上,这是大规模生产的结果。如果不生产占用传感器、火灾传感器、位置传感器,甚至墙壁开关,用基于摄像头的手势检测代替,一切都只用一个 CV 传感器完成,那么价格将比现在间接感应的价格降低得多。

基于摄像头的停车助手
由于上述原因,我想使用 FRDM-K82F 创建某种基于计算机视觉的传感器。虽然我想到了很多想法,但只有一个是实用的、有用的,并且可以在比赛截止日期前完成。

将汽车始终停在车库内的同一位置是非常困难的。您最终会在侧面过多,或者在前面或后面没有留下足够的空间。或者,也许你非常小心,但你的另一半却不是,如果你像我一样,那会让你发疯。目前有解决方案,从低技术到“伪高科技”。这些是其中的一些:

我的想法是创建对用户更友好的完全不同的东西。这个想法是使用计算机视觉制作一个系统,可以始终指导您正确停车。比现有解决方案更类似于此:

如何运作?
使用视频图像中的运动检测,系统应该能够指示车辆是否需要左移、右移或停止。

对用户的指示必须来自一个非常简单的基于灯光的界面,如下所示:

左右箭头将指示汽车是否必须向左或向右转向。中间的灯会显示三种颜色,绿色表示前进,黄色表示谨慎前进,红色表示停止。

为什么选择带有 FlexIO 的 FRDM-K82F?
像 UV7670 这样的相机之前已经连接到其他类型的微处理器。然而,在大多数这些实现中,微处理器积极参与从图像中捕获数据。这需要微处理器的大量处理能力。一旦图像被获取并在 RAM 中,真正的工作就从图像处理功能开始。

Kinetis FlexIO 允许从 UV7670 传感器中检索图像,几乎无需微处理器进行处理。一旦图像被完全捕获,中断指示图像已准备好并在内存中。在处理图像时,将同时捕获下一张图像。

这使得 FRDM-K82F 成为该项目目标的理想平台:一个非常低成本的图像处理平台。

为什么选择 OV7670 摄像头模块?
OV7670 是一款 300Kpixels 相机。分辨率对于这个应用程序来说并不那么重要,实际上在撰写本文时,程序以最低分辨率 (120x160) 使用它。OV7670 的关键是规模经济。因为它在小型项目中被大量使用,所以在包含镜头的分线板上组装相机的成本约为 10 美元。它还具有其他优点,例如没有红外滤光片,使其适合使用红外照明进行应用。

构建说明
摄像头组装:FRDM-K82F 平台的设计人员很高兴能包含一个用于 FlexIO 的连接器,其引脚与 OV7670 完全相同。可以将 OV7670 直接焊接到 FRDM-K82F 板上,但是,我将 0.1” 插座焊接到板上。这样我以后可以将其他相机或设备连接到 FlexIO 接口。

指示灯:这是项目中唯一需要一些人工来复制它的部分。指示灯是使用带控制器的 WS2812B RGB LED 制成的,并使用泡沫板进行安装。使用 WS2812B LED 的原因是因为它们提供了很大的灵活性(可以自定义颜色,并且可以连接任意数量的 LED),只需使用微控制器中的一个简单 GPIO。指示灯示意图如下:

LED 安装在双面原型穿孔板上,作为三个单独的板。三块板用扁平电缆连接。第一个板是唯一不同的,因为它包含上拉电阻。

 如果有可用的 WS2812B 分线板,使用起来会更容易。 

在泡沫板上切割灯的形状。小心不要完全切开。也就是说,将纸板背面留在一侧。剩余的纸板为 LED 提供了很好的扩散器。这样做两次,并使用锐器为内部边界着色,以避免光线扩散到创建的形状之外。LED 板安装在其中一块泡沫板上,并使用双面胶带将所有东西放在一个组件中。

灯总成数据线连接到Port C pin 12,即FRDM-K82F板子中的PTC12:

软件

至此,硬件准备就绪,是时候在软件中工作了。

首先安装 Kinetis Design Studio。就我而言,我将它安装在我的 MacBook Pro 上,虽然文档不能保证它会起作用,但它对我来说完美无缺。

要刷新 FRDM-K82F 板,到处都使用 JLink JTAG 适配器,但是,我使用了 OpenSDAv2.1 接口,或者最常见的 mbed 接口。将 OpenSDA 端口连接到 MAC 后,它将显示为 USB 驱动器,其中复制了 KDS 生成的 .bin 文件。

我这样做只有一个问题。在某些时候,由于某种无法解释的原因,配套的微处理器(实现 OpenSDA 接口的那个)不知何故被擦除了。它没有作为名为 mbed 的 USB 驱动器出现,而是显示为 BOOTLOADER。

只需将固件复制到 USB 驱动器中,几分钟后我就可以重新启动并运行。

我根据安装 Kinetis Design Studio 时复制到示例文件夹中的 dev_video_flexio_ov7670_lite 示例启动了我的软件。有一段时间,我计划完全删除代码的 USB 部分,但我没有这样做很好,因为它有助于调试应用程序。

通常在计算机视觉应用中,不是使用 RGB,而是使用黑白视频。但是,从 RGB 转换为基于强度的视频需要太多的处理器时间,我想为图像处理留下尽可能多的处理能力,所以我更改了演示程序,以便从 OV7670 传感器捕获的图像在 YUV422 中完成。YUV 422 格式再次使用每像素 16 位,一个字节用于强度,另一个字节用于颜色信息。

这很容易在 flexio_ov7670.h 文件中更改,只需更改以下行:

.outputFormat = (ov7670_output_format_config_t*)&OV7670_FORMAT_RGB565,

.outputFormat = (ov7670_output_format_config_t *)&OV7670_FORMAT_YUV422, 
然而,正如预期的那样,这搞砸了通过 USB 发送的视频。我尝试了一段时间将东西的USB端更改为YUV422格式,但我没有成功,所以为了保持USB视频可用,我将Intensity转换为RGB图像,很多比将 RGB 转换为强度更简单。

在通过 USB 发送图像之前,我还在图像中添加了一些信息,以帮助调试应用程序。这是我的视频在带有调试信息的 PC 端的外观:

停车助手所需的软件在parkasst.c文件中,基本上需要用YUV422图像的缓冲区调用。所以这很容易迁移到其他平台。然而,要复制整个项目,只需在 FRDM-K82F 板中加载项目中包含的 .bin 文件并按照项目中的说明添加 LED。

总结
这不算是一个尽如人意的项目。但是,还是有一些今后可以进行拓展完善的功能。这些是完成该项目的下一个功能步骤:

  • 使用蓝牙低功耗将图像上传到手机,这样用户就可以准确地配置停车限制
  • 将停车区更改为三角形而不是正方形。它需要是一个三角形来考虑相机的视角

本文中所用到的一些代码

如果您对此项目有任何想法、意见或问题,请在下方留言。

以上内容翻译自网络,原作者:Inaki Zuloaga,如涉及侵权,可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论