一次成功流水账-ros系统多机通信

假如机器人主机robot跑的是ros系统,笔记上也是ros系统,当调试时就需要从笔记上查看主机的topic或其他信息的时候,或者发布指令,这时就需要使用ros的多机通信功能。

主要步骤如下:

1. 查看和记下robot和笔记本的ip

2.编辑bashrc文件

1. robot作为主机,笔记本为从机,两台设备连接至同一局域网,网段要一样。查看ip地址

ifconfig

如果报错'ifconfig' not found... ...",表示没有安装工具,安装一下

sudo apt install net-tools

笔记本端,使用的是无线,查看wlan0这一段,记下inet字段后面的地址为:10.60.72.251

robot端,假如使用的是网线,查看eno1这一段,记下inet字段后面的地址为:10.60.2.158

在robot端:

打开bashrc文件,gedit ~/.bashrc,在末尾加上如下内容

export ROS_MASTER_URI=http://10.60.2.158:11311
export ROS_IP=10.60.2.158

或者使用localhost代替ip,二选一即可

export ROS_MASTER_URI=http://localhost:11311
export ROS_IP=10.60.2.158

在笔记本端:

export ROS_MASTER_URI=http://10.60.2.158:11311
export ROS_IP=10.60.72.251

总结:就是要将两台设备的ROS_MASTER_URI变量都设置为主机的ip,必须要相同。ROS_IP变量都设置为本机的ip。实现笔记本和robot间的通信。

测试

robot端:

roscore
rosrun turtlesim turtlesim_node

是可以正常启动roscore的

笔记本端:

source ~/.bashrc
rostopic list

即可以看到robot端发布的topic,从笔记本端发布指令,循环发送,10Hz指令,到类型为 geometry_msgs/Twist的,主题/turtle1/cmd_vel上,在robot端可以看到小乌龟在倒着移动。

rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist  "linear:
  x: -1.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0"

运行:

在本地端打开新的乌龟仿真器,由于是运行的是名字相同的节点,查看robot主机端,发现robot端的小乌龟已经终止了。

rosrun turtlesim turtlesim_node

笔记本端运行

roscore

提示错误,roscore cannot run as another roscore/master is already running,笔记本端已经无法启动roscore了。

要想恢复原来的设置

只需要在两端的bashrc文件中的那两行删除,或者在前面加#号注释掉就可以了。

ROS多机通信机制

 

我们简单梳理一下,在消息通信时,什么时候会用到ROS_MASTER_URI和ROS_IP这两个环境变量。

  • Talker启动,通过ROS_MASTER_URI连接到ROS Master,注册发布者的信息,包含所要发布的话题名称(bar)和消息类型;ROS Master会将该发布者的注册信息存储到发布者注册列表中,等待接收者。

  • Listener启动,通过ROS_MASTER_URI连接到ROS Master,将其订阅的话题名bar和消息类型在ROS Master上注册(实际上也包括自己的地址和端口信息)。

  • ROS Master根据Listener所需的订阅话题在发布者注册列表寻找与之匹配的话题,并返回Talker的XML-RPC地址信息,即foo:1234。Listener根据alker的XML-RPC地址向Talker请求TCP的连接地址,Talker的地址就是图中所示的foo:2345。其中foo就是在执行talker时的环境变量ROS_IP的。

因此,如果需要正确接收到Talker发布的消息,必须在Talker和Listener上都正确设置ROS_MASTER_URI,同时必须正确设置Talker的ROS_IP,一般情况下,都是双向互通,所以listener的ROS_IP也要正确设置。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值