ROS多机通信

本文详细指导如何在两台电脑间通过绑定IP和主机名、安装必要的软件包、设置SSH服务、ROS_MASTER_URI等步骤实现主从机通信,包括下载包、网络检测、ROS环境配置和小乌龟历程测试,证明主从机间的通信是双向的。
摘要由CSDN通过智能技术生成

一.绑定ip和主机名

首先要求主从机连接同一个局域网,然后分别打开自己终端获得IP地址和主机名

1.1获取ip和主机名

终端输入ifconfig查看IP地址;输入hostname查看主机名。

ifconfig

设置主机为lm-MPG,192.168.43.96;从机为wyh,192.168.43.136

其中一台主机IP地址如上图所示是:192.168.43.96 ;另一台为 192.168.43.136

hostname

用于查看用户名,主机为lm-MPG,从机为wyh

1.2进行绑定

修改hosts文件的目的是将两电脑的ip和主机名绑定,两台电脑之间通过hostname就能找到对方。没有这一步的时候,你直接去ping 对方主机名时,结果是无法解析对方主机名。
分别再两台电脑的hosts文件中,从第三行开始插入刚刚查到的对方电脑的ip地址和主机名hostname,注意中间用按tap隔开。
进入hosts文件的命令:

vim /etc/hosts

或是

sudo gedit /etc/hosts

后面就要执行vim相关命令输入ip地址和主机名hostname,然后保存退出。

主机为lm-MPG,从机为wyh,因此对应修改的主机和从机文件如下所示

1.3重启网络

sudo /etc/init.d/networking restart

二、下载包和解决报错

2.1输入以下命令进行下载

两台电脑都要下载以下两个包。
第一个是下载同步包;第二个是下载ssh服务器。

sudo apt-get install chrony
sudo apt-get install openssh-server

2.2查看ssh是否启动

在两台电脑的终端输入以下命令检查是否启动启动了ssh

ps -e|grep ssh

看到sshd那说明ssh-server已经启动了,没启动就输入下面命令进行重启。

 sudo /etc/init.d/ssh restart

三、开始通信并检测

3.1检测通信

设置完成后,在两台电脑上分别使用ping命令测试网络是否联通。
其中ping是用来检测本机与网络中另一主机之间网络是否联通的命令,如果两台主机之间ping不通,则表明这两台主机不能建立起连接。

指令为ping 对方ip

主机侧
ping 192.168.43.136
从机侧
ping 192.168.43.96

出现如下说明网络通了。

或是在各自终端输入对方的电脑名,例如

主机侧
ping wyh
从机侧
ping lm-MPG

两台电脑上都出现了上面这样的数据传输,说明双向网络能正常联通,底层网络的通信就可以实现。

当然,如果碰到输入ping hostname而一直无法相应时,说明没有ping通,检查一下该hostname对应的ip地址是否变动了。

3.2设置ROS_MASTER_URI

在两台电脑中选择其中一台作为主机器人,并设置一个ROS master,从机器人上需要对该Master进行定义才能找到它的位置。因此在从机上使用如下命令设置ROS_MASTER_URI。

为了实现所有终端都能识别Master的位置,最好使用如下命令在配置文件中添加环境变量。配置文件位于主文件的下,名为“.bashrc”打开该文件,在最后输入以下两行环境变量。

1.主机上设置

export ROS_HOSTNAME=192.168.43.96 #主机IP或名称
export ROS_MASTER_URI=http://192.168.43.96:11311 #主机ip或名称

source ~/.bashrc

2.从机上设置

export ROS_HOSTNAME=192.168.43.136 #从机IP或名称
export ROS_MASTER_URI=http://192.168.43.96:11311 #主机ip或名称

source ~/.bashrc

别忘记source

四、多机器人通信测试

4.1用小乌龟历程进行测试

上面的步骤都设置完成后,下面使用小乌龟历程进行测试。
首先在主机上运行小乌龟的仿真器。

roscore
rosrun turtlesim turtlesim_nod

然后在从机上使用“rostopic list”命令查看ROS系统中的话题列表。

rostopic list

从机上打开小乌龟键盘控制节点,然后控制小乌龟运动。

rosrun turtlesim turtle_teleop_key

4.2说明

通过实验证明,所谓的主机从机,并不是主机只能控制从机,从机不能控制主机,上面的设置的主机从机代表roscore的位置是在主机上运行的,而主从机之间的通信是相互的从机也可以控制主机上的小海龟移动,所以主从机的说法只是概念上的,通信是相互的。

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ROS通信的情况下,如果ROS Master节点重启或断开连接,从节点可以通过以下步骤检测ROS Master并自动重启节点: 1. 在从节点中,创建一个名为`check_master.py`的Python脚本,用于检测ROS Master是否可用。可以使用ROS Master的命名空间和话题来检测,如下所示: ```python #!/usr/bin/env python import rospy import rosgraph if __name__ == '__main__': rospy.init_node('check_master_node') while not rospy.is_shutdown(): try: master = rosgraph.Master('/rostopic') master.getSystemState() rospy.sleep(1) except: rospy.logwarn('ROS Master is not available!') break ``` 2. 在从节点的启动脚本中,启动`check_master.py`脚本,并在检测到ROS Master不可用时自动重启从节点。可以使用`roslaunch`来启动节点,如下所示: ```xml <launch> <node pkg="my_package" type="check_master.py" name="check_master" output="screen"/> <group ns="my_namespace"> <node pkg="my_package" type="my_node.py" name="my_node" output="screen" respawn="true"> <!-- node parameters here --> </node> </group> </launch> ``` 在上面的示例中,`check_master.py`脚本和从节点`my_node.py`都包含在同一个ROS包中。`check_master.py`脚本将在后台运行,检测ROS Master是否可用。如果检测到ROS Master不可用,则会触发节点的重启功能。 3. 在从节点的Python脚本中,可以使用`rospy.sleep()`函数等待ROS Master重新连接。可以使用以下代码来等待ROS Master重新连接: ```python #!/usr/bin/env python import rospy import rosgraph if __name__ == '__main__': rospy.init_node('my_node') rate = rospy.Rate(10) # 10hz while not rospy.is_shutdown(): try: master = rosgraph.Master('/rostopic') master.getSystemState() # do something here except: rospy.logwarn('ROS Master is not available!') rospy.sleep(5) continue # do something here rate.sleep() ``` 在上面的示例中,`my_node.py`节点将在后台运行,等待ROS Master重新连接。如果ROS Master不可用,则使用`rospy.sleep()`函数等待5秒,并在重新连接后继续执行节点的任务。 使用以上方法,从节点可以检测ROS Master的可用性并自动重启节点,确保ROS系统的稳定运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值