如何制作一个带声呐障碍物检测和具有跟车功能的机器人
简而言之,这个机器人会在20-50厘米范围内跟踪任何靠近它的物体;如果未发现目标,它会先使用超声波模块在左右两侧寻找丢失的物品。若再次无果,则转向右方,尝试锁定附近的目标物体。我希望能进一步改进,比如让车辆学会绕过障碍物的驾驶方式,但目前只要能在某些情况下找到物体,我就已经感到满意了。
通过这些信息,我们可以指导机器人相应地转向,从而避免丢失目标物体。我不确定是否已有类似装置被制造出来,我只是想对智能汽车制造商提供的示例代码进行调整。我之前使用声呐传感器的方式导致了信号干扰问题(我确信是时序问题),幸运的是我已经解决了这个问题。
你需要什么
对于这个项目,我们只需要一个四轮机器人、合适的电机驱动器、一块Arduino Uno板、一个微型舵机以及一个HC-SR04超声波传感器。
使用现成的底盘可以快速搭建出一个可运行的模型。如果你购买了包含底盘、车轮、电机及其他机械部件的“Robot Smart Car Kit”套件,那么在组装机器人时,我们只需添加少量额外的电子元件来控制电机并检测障碍物即可。整个电子设计均基于Arduino Uno完成。
最后,我们再连接电池和充电器,为机器人供电,所有设备就准备就绪,可以开始使用了。
制作底盘
超声波传感器SRF05的工作原理是什么?
这是一个非常简单且实用的超声波传感器,其测距范围为2-450厘米,测量精度高达0.2厘米。该传感器有四个引脚用于与之接口连接:VCC(电源正极)、Trig(触发信号输出引脚)、Echo(回波信号输入引脚)和GND(地线)。
在光滑平整的表面上进行反射时,可以获得最佳的测量效果。在最远1米的距离内,表面材质对测量结果影响较小。在短距离范围内,传感器与物体之间的角度可小于1米,约为45°。即使非常细小的物体也能可靠检测到。在最大距离3米时,需精确对准目标,且在15°的发射锥内不应有其他物体处于相近距离。
为实现传感器旋转,可使用微型伺服电机,从而能够监控整个房间前方区域。图中展示了传感器以直角(90°)和65°、115°(粉红和灰色区域)安装时覆盖的房间情况。
我们的机器人会尽量保持在目标物体后方20厘米的位置,并根据目标位置前后移动。若一侧比另一侧远出三厘米,机器人将朝该方向转向,以遵循预测路径。
如果物体检测范围限制在0.5米以内,且考虑到近距离(小于1米)时物体的角度约为45°,那么机器人车前的空间便能被良好监控。如图所示,当超声波传感器以55°(左侧)角度定位时,监控范围从32.5°至77.5°;而115°(右侧)时,监控范围也类似,整个房间的监控角度超过120°。
在物体搜索过程中,超声波传感器可分别向左旋转10°、向右旋转170°,此时覆盖的范围接近210°。若要进行更广的物体搜索,需将机器人车转向以使目标物体进入视野。一旦物体进入视线,机器人车必须保持与物体一定距离,我将其设定为一个固定值。通常距离设为30厘米(NOMDISTANCE = 30),最小距离设定为20厘米(MINDISTANCE = 20),危险距离则定为约10厘米(CRITDISTANCE = 10)。同时,半径50厘米内的空间被监控(MAXDISTANCE = 50)。
以上仅能满足物体跟踪的需求,但尚不足以实现物体识别。此外,机器人车对周围环境缺乏感知,因此无法避开障碍物。当然,也可以先通过环境程序学习并显示房间图像,但随后朝向物体方向的定位仍不够精确,因为这取决于地面面积。
使用摄像头可以解决这一问题,但这属于我们下一期教程的主题内容。
代码
我们的机器人可以执行四种动作:
• 前进
• 向左
• 向右
• 停止
流程图和程序
根据这些功能,我编写了以下子程序:
保持距离:使机器人与物体之间的距离保持在20至30厘米之间。如果物体太远,机器人向前移动;如果过近,则向后移动。
跟随物体:检测前方房间内的物体。
搜索物体:当视线中没有物体时,开始搜索。仅在前厅边缘(传感器位置10°和170°)进行搜索,若未找到则继续绕行搜索。
我已为你准备了Arduino程序示例(所有代码均可在GitHub上获取)。该程序使机器人能够自主地跟随物体移动。
“跟随我”程序包含“保持距离”部分,其他子程序将在此基础上调用,如图所示。
const int nomDistance=30, minDistance=20, maxDistance=50, kritDistance=10;
int distance;
如果你想搜索最近的物体,需对“物体搜索”程序做出相应修改,但在实际应用中这可能会导致程序运行变慢。
物体搜索程序中的对应修改已在图中展示。你也可以从距离最远的点开始,而不是探索所有物体,直到最接近的距离。一个简单的程序更容易集成到更复杂、更大的程序中。
最后
附带的程序可用于测试带有传感器和执行器的“跟随我”程序。但如果您希望自行控制机器人,可使用现成的程序,进行相应修改后直接上传到您的机器人上。
本文编译自hackster.io





