推荐学习教程:深蓝学院 机器人操作系统ROS理论与实践学习
在学习到第2讲ROS基础的分布式通信时,一直卡在这里,主机开启小海龟后,从机虽然可以通过
rostopic list
列出当前的所有topic列表,但是订阅不成功,后来经过一天的各种找资料,找到一篇博文(ROS多机的通讯配置:https://www.jianshu.com/p/69815d79d37f),终于找到问题所在,和ROS_IP的配置有关系,特此记录下!!!
下面开始搬砖了
多机通讯
想在PC上直接按键控制树莓派上的乌龟运动,要如何操作呢?
主机与树莓派信息如下:
Item | IP | Hostname |
---|---|---|
PC | 192.168.31.111 | robot-dekstop |
树莓派 | 192.168.31.107 | pi-desktop |
相互ip可以通,因为未添加hostname ip映射,相互无法通过hostname联系
1.在树莓派上运行roscore
和启动turtlesim_node
2.PC上想要与之通讯首先必须设置ROS_MASTER_URI
,export ROS_MASTER_URI='http:192.168.31.107:11311'
即可,在PC中断输入rostopic
list即可看到当前的所有topic列表,说明PC已经可以与ROS_MASTER建立通讯了
3.这时PC端启动rosrun turtlesim turtle_teleop_key
无法控制乌龟运动,为什么呢?这里明明rostopic
明明可以看到/turtle/cmd_vel
。 键入rostopic info /turtle/cmd_vel
显示如下
这就明显了,主机从master里面取到的node发送/订阅的topic
信息,node
地址为http://pi-desktop:46395
, PC根本不认识pi-desktop
为何物,自然无法发送数据。
4.如何修改?自然有2个方法:
- 这个我不认识换个我认识的来,修改树莓派端的
ROS_IP
环境变量export ROS_IP=192.168.31.107
再次查看topic
信息,
![](https://i-blog.csdnimg.cn/blog_migrate/3c3ee15b29fd25b82dd6cb8570cc87e2.png)
- 现在就认识了,启动
rosrun turtlesim turtle_teleop_key
节点,发现仍然无法控制。问题是我认识你,可是你不认我啊,所有本地PC也需要export ROS_IP=192.168.31.111
,现在就正常了 - 这个我不认识,我现在认识下不就行了,PC端修改
/etc/hosts
添加一个192.168.31.107 pi-desktop
,同时树莓派端一样修改/etc/hosts
添加192.168.31.111 robot-desktop