基于ROS Ranger Mini构建一个自主移动机器人
扫描二维码
随时随地手机看文章
自主移动机器人(amr)在工业、农业和教育领域提供了变革潜力,在这些领域,低成本、可扩展的自动化至关重要。这项研究提出了ROS Ranger Mini,这是一种紧凑型ROS AMR,集成了深度摄像头、超声波传感器和雷达,具有强大的环境感知和避障能力。该系统结合了用于高级处理的树莓派和Particle Photon 2开发板,可通过Wi-Fi实现远程控制和自主导航的双重操作模式。传感器和状态数据通过Particle Cloud实时传输和存储,实现远程监控和系统分析。该设计强调了可访问的技术,经过深思熟虑的整合,可以为各种现场应用创建适应性强且高效的机器人平台。
粒子云介绍
粒子云是一个物联网平台,可以实现安全的设备连接、实时数据存储和互联网远程控制。该项目促进了AMR和远程用户界面之间的无缝通信。
我们使用粒子光子2,一个强大的支持wi - fi的微控制器,很容易与粒子云集成。主要规格包括:
•处理器:200 MHz ARM Cortex-M33 (Realtek RTL8721DM)
•Wi-Fi: 802.11 b/g/n, 2.4 GHz
•内存:2mb
•Flash: 4mb
•Gpio: 20+可配置引脚
安全启动和OTA更新支持
该板处理实时数据传输,支持自主和远程控制功能。
硬件部分
在本节中,建立了电机驱动器,执行器,相机,超声波传感器,Particle Photon 2和树莓派之间的所有连接,以实现通信和反馈交换。我还在电路中加入了一个5A降压助推器,因为我们通常使用2S LiPo电池或2S 18650电池,产生7.4伏。由于Photon 2只能接受高达5.5伏特,如数据表中所述,降压升压器是必要的,以安全地调节电压。
这是我用Fusion EDA为这个机器人设计的电路图。
该电路有三个主要部分:粒子光子2,树莓派HAT和5-15V到5V降压电压转换器。摄像头通过USB端口或15针CSI连接器连接到树莓派。该图还包括两个超声波传感器,它们复制了激光雷达传感器的功能,有助于降低机器人的总体成本。Photon 2的D1和D2引脚连接到树莓派进行通信,发送确认和接收反馈。
集成光子2
首先,您需要在Particle网站上注册。之后,您可以检查设备是否已连接。我的设备出现在他们的平台上。
为了集成Photon,你首先需要下载VS Code并安装Particle CLI命令行。然后,你可以使用VS Code中的终端直接发送命令。
在使用粒子光子2编程时,请记住它有多种模式。了解RGB LED指示灯的含义很重要。
粒子光子上的标准RGB LED模式
然后,我们有两个选择:在VS code中编写代码或使用Particle Web IDE。最初,我使用VS Code,但遇到了一些问题,所以我决定切换到粒子Web IDE。它有一个非常容易理解的用户界面。我只是编写了代码,由于Web IDE已经连接到Particle Cloud,因此不需要编写任何额外的代码来连接Wi-Fi或云。
整合MIT App Inventor
MIT App Inventor是麻省理工学院开发的一个免费的、初学者友好的平台,用于使用可视化的、基于块的编程界面创建移动应用程序。
用于:
•开发无需编码的Android应用程序
•物联网接口原型
•教育项目和快速应用程序开发
下面是使用MIT app Inventor发明一个简单应用程序的简短分步指南:
•访问appinventor.mit.edu,用谷歌账户登录。
•点击“创建应用程序”→开始一个新项目。
•通过将组件(按钮、标签等)拖到手机屏幕来设计UI。
•转到块部分→通过连接代码块创建逻辑。
•使用MIT AI2 Companion应用程序通过USB或Wi-Fi连接手机。
•在手机上测试你的应用。
•导出或构建APK来安装或共享应用程序。
完成设计后,您可以进入Blocks部分。所有后端逻辑都是通过基于块的系统处理的,该系统充当应用程序和硬件之间的中介。
图片中的粉色块是MIT App Inventor中的文本块,其中包含web请求的URL和POST数据。
URL包含您的设备ID (0a10aced20219…)。
POST文本包含访问令牌(b648206178aff3a71dcdd8e3f3…)以及一些命令参数(arg=right, arg=left等)。
这个令牌和设备ID是唯一的标识符,允许你的应用程序通过粒子API与你的特定设备进行通信。
例子:
这是我的Photon2的设备ID:“0a10aced202194944a056838”在上面的URL
对于应用程序中的每个按钮,我使用了相应的参数:
•转发:参数= forward&access_token = b648206178aff3a71dcdd8e3f32db6b99dac6d98
•向后:参数= backward&access_token = b648206178aff3a71dcdd8e3f32db6b99dac6d98
•左:参数= left&access_token = b648206178aff3a71dcdd8e3f32db6b99dac6d98
•右:参数= right&access_token = b648206178aff3a71dcdd8e3f32db6b99dac6d98
•站:参数= stop&access_token = b648206178aff3a71dcdd8e3f32db6b99dac6d98
对于每个按钮,我们使用一个令牌ID。这是我的设备的令牌ID:b648206178aff3a71dcdd8e3f32db6b99dac6d98
问题是,你在哪里可以找到你的令牌ID和设备ID
对于令牌ID,请进入粒子CLI并键入
请输入您在Particle注册时使用的邮箱和密码。
这是代币
我们已经完成了AMR的一部分
这就是它在这之后的样子!!
相机和超声波传感器与ROS的集成
本文介绍了一对安装在伺服电机上的HC-SR04超声波传感器如何与ROS 2一起使用,以执行2D环境映射。该系统从不同角度收集距离数据,并在RViz中可视化。
系统概述
Arduino使用伺服电机以小步(例如,每5°)从0°到180°旋转超声波传感器。
在每个角度,两个超声波传感器测量距离。
Arduino通过串行发送一行数据,格式如下:
角度:distance_left: distance_right
在Pi上运行的ROS 2节点:
读取这个串行数据。
将传感器读数作为ROS消息发布。
可选地将它们转换为二维笛卡尔坐标。
数据在RViz中可视化,以构建2D占用地图。
Arduino代码职责
扫描伺服电机从0°到180°。
触发超声波传感器并读取距离。
每隔X毫秒通过Serial.print()发送角度和距离。
ROS 2节点职责-
使用pyserial读取串行数据。
解析传入的字符串。
使用sensor_msgs/msg/PointCloud2或自定义消息(例如Point2D[])发布数据。
发布点/超声扫描或类似的主题。
可视化的RViz
可视化:
使用订阅扫描主题的配置启动RViz。
PointCloud2用于分散的点。
用于可视化标记的MarkerArray。
ROS 2包
1. serial_comms
用途:从Arduino读取和解析串行数据(距离,角度)
节点:serial_reader_node
发布:
/ sensor_data (custom_msgs / SensorData)
依赖关系:rclpy, pyserial
2. sensor_fusion_node
用途:融合超声波范围,伺服角度和里程计数据
节点:fusion_node
订阅:
/ sensor_data
/奥多姆
发布:
/ fused_scan (sensor_msgs /提升)
/ amr_pose (geometry_msgs / PoseStamped)
3. mapping_visualizer
目的:在RViz2中可视化融合数据
节点:rviz_mapper
订阅:
/ fused_scan
/ amr_pose
4. teleop_interface
用途:用于云命令的粒子光子板接口
节点:teleop_bridge_node
发布:
/ cmd_vel (geometry_msgs /扭曲)
特点:
•粒子云REST集成
•紧急停车命令
•安全模式回退
•系统工作流程
Arduino通过串口发送距离+伺服角度。
Serial_comms节点读取它并发布到/sensor_data。
sensor_fusion_node将此与odometry/IMU结合起来,并将伪扫描发布为/fused_scan。
mapping_visualizer在RViz2中显示了这一点。
teleop_interface监听Particle Cloud和issue /cmd_vel来控制机器人的运动。
本文编译自hackster.io