亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Roomberry 监控机器人:Roomba + Pi Zero + 摄像头

Roomberry 是基于 Roomba 的监控机器人,使用 Raspberry Pi Zero W 和摄像头模块。几年前,我开始进行一些测试,使用带有 RN-VX WiFly 模块的 Arduino One 远程控制 Roomba。

上个月,我决定重振这个想法,但有了一个新目标:将 Roomba 变成一个能够拍摄照片和视频的监控机器人。第一个想法是继续使用 Arduino 作为微控制器,使用 Arducam 模块来捕捉图片。然而我很快发现 Arduino 的图像处理能力对于我的兴趣来说太有限了。第二种选择是更改平台并使用带有摄像头模块的 Raspberry Pi Zero W。这种替代方案意味着一些挑战,特别是在供电方面,但也提供了更多的可能性。在这篇文章中,我将解释如何使用 Raspberry Pi Zero W 和摄像头模块构建 Roomberry,这是一个基于 Roomba 的监控机器人。

Roomberry 功能和网络界面的演示 可以在下面的视频中看到与之交互的开发。

iRobot Roomba

iRobot 的 Roomba 提供了一个开放式界面 (OI) 通过微型 DIN 连接器与机器人交互。 OI 是为 Roomba creator 2(600 系列的改编版)设计的软件界面。但是,它也与 500 和 700 系列完全兼容。然而,根据所使用的平台和固件版本,仍有一些错误。软件界面可让您操纵 Roomba 的行为并读取其传感器。可以在本文档中找到对其功能的完整说明。

迷你 DIN 连接器

Roomba 迷你 DIN 连接器 位于 Roomba serie 700 的右前方,有 7 个引脚。它的位置在 600 系列中略有不同,它的位置在 Roomba 的右后方,在一个可拆卸的塑料护罩下。 迷你 DIN 7 公连接器购买起来很复杂,但是更常见的迷你DIN 8 针公连接器 也兼容。

为了确保端口的连接/断开顺畅可靠,我使用针脚 1-2 将带有母连接器的 5 针电缆(专为 LED 灯条设计)焊接到迷你 DIN 8 针公连接器(电源)、6-7(接地)、3 (RxD)、4 (TxD) 和 5 (BRC)。但是,正如稍后评论的那样,最终不需要电源/接地连接。由此产生的电缆可以在下面的图片中看到。


Roomba 串口

要使用 OI,命令 应该通过双向串行通信发送 在迷你 DIN 7 针脚 3 (RxD) 和 4 (TxD) 中创建。此 UART 端口在 TTL 级别工作 (0 – 5 V)。这个电压非常适合使用 5V 逻辑的微控制器,就像大多数 Arduino 板一样。但是对于低电压逻辑电平的人(比如树莓派)来说,这并不好。

理论上,pin 3 (RxD) 会取 3.3 V 作为高逻辑电平。但是 Roomba 将在其引脚 4 (TxD) 上输出 5V,这可能会损坏 Raspberry Pi Zero。为了保证硬件安全,逻辑电平转换器 应该使用。最简单的方法是使用电阻分压器,我之前的项目 Calduino 中已经实现了这一点,但这可能无法在高速下工作(Roomba 的串行端口工作在 115200 波特)。

取而代之的是有源电平转换器。如果您想构建自己的电路,请使用此处说明的场效应晶体管 AN10441。一个更简单的选择是使用现有的双向逻辑电平转换器之一,例如来自 Adafruit 的转换器。该设备最多可以管理 4 个信号,并将它们从 5V 安全地降压到 3.3V。同时将信号从3.3V升至5V。

从 Roomba 为 Raspberry Pi 供电

有几种替代方案可以通过 Roomba 的电池供电:

由 Mini DIN 7 供电

迷你 DIN 7 提供不受管制的直接连接 在引脚 1/2 (Vcc) – 6/7 (Gnd) 到 Roomba 的电池。连接限制为 200 mA 虽然 PTC 自恢复保险丝 .它提供 20.5 到 10V 之间的电压,限制为 0.2A,功率为 2W。从这两个引脚连续汲取的电流不应超过 200 mA。绘制大于 500 mA 的峰值将重置保险丝。

Raspberry Pi Zero W 应该能够使用此电源工作。 Raspberry Pi Foundation 将典型的裸板有源电流消耗定为 150 mA。此基准将其置于 120 mA 之间 空闲 状态和180 mA 压力 (例如播放全高清视频)。但是,这里没有考虑相机的额外消耗。根据我的测量,相机(我使用这个相机,使用与版本 1 官方 Pi 相机相同的传感器)将功耗增加到 300 mA 以上,峰值为 450 mA。在我的测试过程中,保险丝在录制视频时多次跳闸。

总而言之,现有的热熔丝拒绝使用此连接为 Raspberry Pi Zero W 供电。我无法确定从电路板上取下保险丝是否可行且安全不损坏其他组件。

从外部移动电源供电

有一些替代方法可以避免这种保险丝限制。一方面,更简单的解决方案是使用移动电源 为 Raspberry Pi Zero 提供外部电源。但是,它将要求用户定期充电。另一种选择是在 mini DIN 7 电源和移动电源之间设计串行连接。通过几个电子元件,应该可以使用 Roomba 电池为移动电源充电。为了简化我的设计,我决定避免使用任何额外的电源。

电池供电

我终于决定绕过 保险丝 通过建立直接连接电池组 .此选项的对应之处是您必须部分拆卸机器人 .在 Roomba 600 系列中,底座按钮下方有两个直接连接到电池组的大垫子。在 Roomba 700/800 系列中,您将需要更多地拆卸几个组件。观看以下视频直到第 6 分钟,逐步了解如何访问机器人的主板 .完成后,只需将几根电缆焊接到电池垫上,如下图所示。


这些电缆将提供与电池的直接连接,不受任何保险丝的限制。它们提供 20.5 到 10V 之间的电压,具体取决于电池充电水平。但是,Raspberry Pi Zero W 需要 稳压的 5 V 电源。 要降低电压降低 用来。有很多选择可以做到这一点,包括使用廉价的线性稳压器 (例如 7805 TO-220)与几个电容器安装开关稳压器 .

由于其更高的效率 ,并且考虑到它会一直连接,我建议使用/购买质量好的 (避免中国仿制品)降压开关稳压器 .我使用了 Pololu D24V5F5 降压稳压器,它接受高达 36 V 的输入并将其降低到 5V,最大输出电流为 500 mA。它的额定效率在 85% 到 90% 之间,并且具有非常低的压差。您还可以使用 UBEC(通用电池消除电路),例如 RC 世界中常用的一种。我将电压调节器放在机器人右侧中心的一个自由空间中。

连接被热缩管妥善保护,D24V5F5 模块被绝缘塑料覆盖(我没有拍任何照片)。我将模块输出焊接到微型 USB 电缆上,这样我就可以将其直接连接到 Raspberry Pi 零 W 电源输入。


使用旋转钻孔工具和砂纸,我在 Roomba 的上盖上创建了一个小凹口,以使 micro USB 电缆的出口干净,如图所示下图。

Roomba OI 模式

Roomba OI 有四种操作模式:关闭、被动、安全和完整。

关闭模式 :更换电池后或首次通电时,OI 处于关闭模式。在此状态下,Roomba 以默认波特率 (115200) 侦听端口,等待启动命令。可以随时发送重置和停止命令,并且也会在关闭模式下关闭 OI。

被动模式: 发送开始命令后,Roomba 进入被动模式 .在此状态下,您可以使用任何传感器命令请求和接收传感器数据。但是,您不能更改执行器(电机、扬声器、灯、低侧驱动器、数字输出)的当前命令参数。 Roomba 将进入被动模式 如果发送了清洁模式命令之一(Spot、Clean、Seek Dock 等),也会如此。

在被动模式下 Roomba 将进入关闭模式 5 分钟不活动后,以节省电量并保护电池。根据 iRobot 文档,只需在这五分钟到期之前定期将 BRC 引脚脉冲为低电平即可禁用睡眠。每个脉冲都应该重置这个五分钟计数器。在我执行的测试中(使用 Roomba 780),拉低 BRC 只会唤醒机器人,但不会阻止它进入省电模式。机器人醒来时会发出哔哔声(如果它不在充电站充电)。

安全模式 :Roomba 将进入安全模式 如果发送了安全命令。安全模式可让您完全控制机器人并关闭所有电机和 LED。但是,如果不满足安全相关条件,机器人将自动进入被动模式 .这些安全条件是:在前进时检测到悬崖、车轮掉落和充电器连接。在此模式下,Roomba 不会充电(尽管在充电座上)并且不会在 5 分钟不活动后切换到关闭模式来节省电量。这一点非常重要:如果您不切换到被动或关闭模式,最终可能会耗尽机器人的电池并损坏它。

全模式 :当您向 OI 发送完整命令时,Roomba 进入完整模式 .机器人的行为与安全模式完全相同,但不会考虑之前评论的安全相关条件,因此请注意风险!

电池注意事项 :如前所述,在被动模式下,Roomba 将在 5 分钟不活动后休眠以节省电池电量。在安全和完整模式下,Roomba 永远不会休眠,如果长时间处于这种状态,即使插入充电器,它也会将电池深度放电。充电器会在所有模式下为 Roomba 供电,但不会在安全或完整模式下为电池充电。完成工作后和/或电池电量低时,必须将 Roomba 恢复到被动或关闭模式以保护它。

树莓派零 W

Raspberry Pi 零 W 是 Raspberry Pi Zero 的更新版本,带有 无线局域网蓝牙 .该型号包括一个 1 GHz 单核 CPU、512MB RAM、迷你 HDMI、一个微型 USB OTG 端口、用于供电的微型 USB、40 针接头、复合视频、复位接头、一个相机连接器,以及新的无线功能。它使用支持 802.11b/g/n Wi-Fi(仅 2.4GHz)和蓝牙 4.0(与 Raspberry Pi 3 Model B 相同的芯片)的 Cypress CYW43438 无线芯片。我在 Pimoroni 购买了带有接头(未焊接)和适配器的 16 欧元。

相机

Raspberry Pi Zero W CSI 摄像头连接器比 Pi 3 小。如果您已有相机,则必须购买适配器才能使用它。否则,我会建议购买此相机模块,它包含一个 5MP 传感器(与版本 1 官方 Pi 相机相同)并且可以以 1080p 录制视频。费用为 18 欧元。我选择了带红外切割的广角相机。我知道晚上我将看不到任何东西,但使用 IR LED 会增加能耗,我希望将能耗保持在较低水平。您可以随时使用飞利浦 HUE 灯远程控制您的家居灯。

为树莓派供电零 W

关于 Pi Zero 的电源需要考虑几个因素。首先,与较大型号不同的是,Pi Zero 没有任何调节器或保险丝 以保护它免受过电压或电流尖峰的影响。这意味着您应该提供稳定的电源 5 V。电源可以连接到右侧微型 USB (Pwr In) 或 GPIO 接头上的 5V 引脚。两者是同一条线。请确保如果施加的电压不正确或线路中出现电流尖峰,您可能会损坏 您的 Raspberry Pi 永久 .

正如已经评论过的那样,在运行压力测试时测量了连接摄像头的 400 mA 消耗峰值。树莓派基金会推荐至少1.2A的电源,不过buck调节器提供的0.5A对我来说已经足够了。到目前为止,我没有发现任何与电源有关的问题。

降低功耗

考虑到 Raspberry 需要使用 Roomba 的电池,减少会很有趣 功耗 越多越好。例如,知道 Pi Zero 将无头运行(没有连接显示器)并且只能通过 SSH 访问,因此无需为显示电路供电。禁用 HDMI 端口最多可节省 25 mA。为此,只需运行 /usr/bin/tvservice -o(或使用 -p 重新启用)。我在 /etc/rc.local 中放置了一个简短的脚本,用于检查 HDMI 电缆是否已连接并相应地禁用 HDMI 端口。

# 获取当前视频输出类型并去掉不重要的部分
video=“$(tvservice -s | sed “s/^.*\[\([^ ]*\) .*$/\1/ ”)“

if [“$video”!=“HDMI”];然后
printf“未检测到HDMI。正在关闭。\n”
tvservice -off> /dev/null
else
printf “检测到 HDMI。\n”
fi

另一种降低功耗的方法是禁用 Pi 的 LED。 Raspberry Pi Zero 只有一个活动 LED,每次访问 SD 卡时都会闪烁。其消耗约为 5 mA。要完全禁用它,请在您的 /etc/rc.local 文件中添加以下行:

# 将 Pi Zero ACT LED 触发器设置为‘none’
echo none |须藤三通/sys/class/leds/led0/trigger

# 关闭 Pi Zero ACT LED
echo 1 |须藤三通/sys/class/leds/led0/brightness

您也可以通过编辑 /etc/config.txt 文件来执行此操作:

# 禁用 Pi Zero 上的 ACT LED

dtparam=act_led_trigger=none
dtparam=act_led_activelow=on

我不确定这是否会转化为真正的消耗减少,但由于它不会被使用,您可以通过在 /etc/config 中添加以下行来禁用 Pi Zero 的蓝牙模块.txt:

# 在 Pi Zero 上禁用蓝牙

dtoverlay=pi3-disable-bt

最后,尽量减少Pi Zero中安装和运行的软件。例如,使用 Raspbian lite 而不是桌面版本,除非您真的需要,否则不要安装额外的软件。机器上运行的进程越多,它的消耗就越多。

其他注意事项

构建Roomberry

描述完所有部分后,让我们看看如何构建和运行 Roomberry,您的 Raspberry 与 Roomba 的接口。

我的目标是将组件(Raspberry Pi Zero、摄像头模块、逻辑电平转换器和开关按钮)封装在一个稳定的外壳中,便于访问所有端口和 SD 卡。除了打印我自己的 3D 设计之外,我发现的唯一选择就是这个。这个案例满足所有要求,并允许我附加一个 HAT(硬件附加在顶部),一个带有几个所需电子元件的附加板。下图显示了 PCB 架构。请注意,Run 引脚位于 Pi Zero 中而不是 HAT 中。要构建它,一块 12 x 10 引脚的 PCB 板就足够了。为了切割 PCB,我使用了旋转工具。

逻辑电平转换器 将需要高电压和低电压,这可以从 GPIO 获得(Pi Zero 包括一个从 5 到 3.3 V 的降压转换器,名为 PAM2306AYPKE)。我已经放置了切换按钮 在 Pi Zero 的中间,因为它是 HAT 的延伸。通过这样做,按钮的杆突出了外壳,因此可以从外部按下。您必须在外壳上钻几个孔:一个用于按钮蒸汽,另一个(更大)孔用于相机。此外,我必须仔细打磨为 CSI 连接器设计的外壳空间,以便为电缆 180 度旋转腾出空间。结果如下图所示:


配置 Raspbian Stretch

在将 Roomberry 连接到 Roomba 的 mini DIN 7 连接器之前,应执行一些配置步骤。假设 Raspberry Pi Zero W 正在运行最新版本的 Raspbian 并且已经设置为无头。

连接微型 USB 电源 之前构建于 Pi Zero。几秒钟后,系统应该启动并运行。打开到您的 pi Zero 的 SSH 连接。

默认情况下,Pi 的串行端口配置为用于控制台输入/输出 .要通过此端口与 Roomba 通信,需要禁用串行控制台登录。您可以使用 raspi-configchoosing 菜单 5 – 接口选项和 P6 – 串行来完成。回答 到问题“您想登录 shell 以便通过串行访问吗?”并且 到“您要启用串口硬件吗?”。暂时不要重启系统。或者,您也可以注释控制台定义并将以下行添加到文件 /boot/config 的末尾:

#查找并评论控制台定义
#console=serial0,115200
...
enable_uart=1

如果您还没有这样做,请启用相机模块 .同样,您可以通过 raspi-config 选择菜单 5 和 P1 选项来实现。另一方面,您还可以编辑文件 /boot/config 并包含这些更改(不需要禁用摄像头 LED,但建议使用以节省电量):

start_x=1
gpu_mem=128
disable_camera_led=1

我不确定在使用相机模块时分配给 gpu_memory 的最佳 RAM 数量是多少。到目前为止,我在使用相机时还没有发现任何“资源不足”错误,因此我认为 128 Mb 是一个不错的选择。

禁用所有交换 并将 /tmp 目录挂载到具有 50 兆字节空间的 RAM 磁盘中。此位置将用于存储临时文件,例如相机快照和 Roomba 状态文件。将 etc/fstab 中的提交时间增加到 30 分钟,并在 SD 分区中包含 noatime 选项。在这篇文章中找到命令。

现在是测试一切是否正常的时候了。关闭您的 Pi 并将串行端口连接到 Roomba。将 Roomba 放在充电座 .启动系统并检查一切是否按预期工作(并且机器人没有做任何奇怪的事情)。

测试串口读取 :我已经使用 minicom 读取 Roomba 发送的数据。要安装它,只需键入:

sudo apt-get minicom

通过以下方式连接Roomba的串口:

minicom –b 115200 -o -D /dev/serial0

如果您的 Roomba 正在充电,您应该会看到类似于下图的文本,每秒钟报告 Roomba 的充电状态。按 CTRL + A 和 X 退出 minicom。

阅读更多细节:Roomberry 监控机器人:Roomba + Pi Zero + 摄像头


制造工艺

  1. 相机
  2. 如何制作 Arduino+Raspberry Pi 机器人平台
  3. BrickPi Bookreader
  4. Raspberry Pi CD Box Robot
  5. 滚动报警机器人
  6. 制作 Minecraft Creeper Robot
  7. 阿基米德:人工智能机器人猫头鹰
  8. Roomberry 监控机器人:Roomba + Pi Zero + 摄像头
  9. 打开简历机器人
  10. ROS 机器人
  11. 简单的 Pi 机器人
  12. 机器人爬墙进行监视、检查、维护工作