ROS多车协同
本文介绍的系统是ROS1架构下的多无人车协同。和ROS2相比,会有大量的不同。
我们要实现的任务很简单,多辆无人车同时运行时变直线运动。
系统架构
采取单主控节点的分布式架构,指定其中一台小车作为“主”(Master),运行核心的roscore程序。其他所有小车(“从”)都连接到这个主节点,从而形成一个统一的ROS网络。这样,网络中的任何一个节点都可以与其他节点进行通信。
实现步骤
1. 网络配置
首先,确保所有小车都连接到同一个局域网(LAN),小车之间能够互相ping通。
1 | ifconfig # 查看当前IP地址 |
2. 设置主从机
主控机上打开 ~/.bashrc 文件,在文件末尾添加以下两行:
1 | export ROS_MASTER_URI=http://<master_ip>:11311 |
将 <master_ip> 替换为主控机的实际IP地址,X.X.X.X 替换为当前小车的IP地址。
保存并关闭文件,然后运行:
1 | source ~/.bashrc |
在每一台从机上也同样修改 ~/.bashrc 文件。
1 | export ROS_MASTER_URI=http://<master_ip>:11311 |
将 <master_ip> 替换为主控机的实际IP地址,Y.Y.Y.Y 替换为对应从机的IP地址。
保存关闭,并source。
接着在主控机上启动roscore:
1 | roscore |
从机上可以通过以下命令测试与主控机的连接:
1 | rostopic list |
如果能够看到主控机上发布的主题列表,说明连接成功。
3. 使用命名空间区分小车
为了能够独立控制每台小车,同时避免节点和话题名称冲突,我们需要为每台小车设置唯一的命名空间。
这往往在小车的launch文件中进行设置。例如:
1 | <launch> |
如此一来,车1的所有节点和话题都会被自动加上 car1/ 前缀。其他小车同理,只需更改命名空间即可。
4. 中央控制节点
需要编写一个单独的ROS节点,作为中央控制节点,负责向各个小车发布运动指令。
之后我们就可以开始控制多车协同运动了。
- 主控机启动roscore
- 所有小车启动各自的launch文件,确保它们都连接到主控机
- 启动中央控制节点,向各个小车发布运动指令
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 哈基窝!
