ROS的多机通信 pc端 (主机) 树莓派 (从机)//hosts文件自动还原的解决方案

目录

1. pc和树莓派同时连在同个局域网下,wifi或者手机热点

2. ifconfig 分别获取二者的ip地址​编辑

3. hostname 分别获取二者的用户名        

 4. 分别在树莓派和pc端中的hosts文件中添加对方的ip与用户名

5. 测试是否成功连接

6. 更改pc和树莓派的bash文件

7.  运行测试

8. hosts文件自动还原的解决


1. pc和树莓派同时连在同个局域网下,wifi或者手机热点

2. ifconfig 分别获取二者的ip地址

3. hostname 分别获取二者的用户名        

 4. 分别在树莓派和pc端中的hosts文件中添加对方的ip与用户名

sudo gedit /etc/hosts

5. 测试是否成功连接

 在pc端输入 ping (树莓派用户名),树莓派输入ping (pc用户名)

6. 更改pc和树莓派的bash文件

sudo gedit ~/.bashrc

二者分别添加下面语句,这里设置pc为主机,树莓派为从机,第一行中本机用户名需要根据情况而定

export ROS_HOSTNAME=wh #本机用户名
export ROS_MASTER_URI=http://192.168.31.80:11311 #主机ip:11311
export ROS_IP=192.168.31.234 #从机ip

更改完成后,点击保存,并且 source ~/.bashrc

7.  运行测试

pc端运行 roscore,树莓派运行  rosrun rosserial_python serial_node.py, pc端运行 rosrun arduino_pkg arduino_node,经测试,树莓派也可运行 rosrun arduino_pkg arduino_node

ROS多机通讯(unable to communicate with master 解决)

ROS分布式多机通信

8. hosts文件自动还原的解决

如果发现每次重启后,配置的hosts文件被还原,那么

sudo gedit /etc/cloud/templates/hosts.debian.tmpl

在文件中加入和hosts文件中同样的“对方的ip与用户名”,即可解决

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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系统的稳定运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值