ros玩到进阶阶段,在机器人调试的时候,不太方便查看信息以及进行一些界面操作,这时候自然要使用ros的多机通讯功能,本文分多机通讯设置以及时间同步两个部分。

多机通讯

多机通讯网上一大堆说ip、用户名改来改去的,那样做的确可以,但是太麻烦了,其实只需要在主从机~/.bashrc文件中加入ROS_MASTER_URI以及ROS_HOSTNAME的配置就可以了。

主机
  1. sudo gedit ~/.bashrc打开主机的.bashrc文件中加入以下两行
    export ROS_MASTER_URI=http://127.0.0.1:11311
    export ROS_HOSTNAME=主机ip地址
    其中127.0.0.1为本机ip地址,也可以写成主机的ip地址
    主机ip地址即为主机的ip地址,一般为192.168.1.xxx
从机
  1. sudo gedit ~/.bashrc打开从机的.bashrc文件中加入以下两行
    export ROS_MASTER_URI=http://主机ip地址:11311
    export ROS_HOSTNAME=从机ip地址
    从机ip地址为从机的ip地址,一般形式同上
    如果有多个从机,在所有的从机中都加上如上的两行代码即可

注意:

ROS_HOSTNAME是所在机器的ip地址
ROS_MASTER_URI为主机的ip地址,主机设置自己的ip地址可以是ip地址也可以是127.0.0.1

至此,主从机以及可以通信了,talker、listener可以跑起来了,小乌龟也可以控制了。
但是博主在跑导航的过程中,老师遇到通信延迟,导致tf关系断开,速度指令失灵或者其他超时错误,这些都是由于主从机的时间不同步造成的。

时间同步
  • 正经的时间同步自然是去同步ubuntu官方或者一些其他在线的服务器,但是实际调试的时候不一定有网络,所以面临的问题是怎么同步局域网内的两台电脑,思路和多机通信的思路相似,一个电脑作为时间服务器,其他电脑来和他进行时间同步,可以参考这位博主的教程看一下大概流程。
  • 博主在进行时间同步的时候遇到的最大的一个坑就是ntp、ntpdate这两个包是都需要安装的,不然或遇到一些奇奇怪怪的问题,所以先运行以下代码安装包(主从机都需要安装):
  • sudo apt-get install ntp
  • sudo apt-get install ntpdate
服务器端
  1. 运行sudo vim /etc/ntp.conf在文件末尾加入如下几行代码:
    restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
    server 127.127.1.0 # local clock
    fudge 127.127.1.0 stratum 10
    第一行是为了能让192.168.1.xxx网段上的机器能和本机进行时间同步(具体看你的ip是不是192.168.1.xxx,如果不一样的话,改成你实际的格式)
    第二行和第三行是为了让本机的硬件时间和本机的ntp服务进行时间同步

  2. 改好后,重启ntp服务
    sudo /etc/init.d/ntp restart
    服务器端设置完成,下面开始客户端的设置

客户端
  1. 运行sudo vim /etc/ntp.conf在文件末尾加入一行代码:
    server 192.168.1.xxx
    把ip改成服务器端的ip地址即可

  2. 重启ntp服务
    sudo /etc/init.d/ntp restart

  3. 时间同步

  • 进行时间同步的时候先执行下面的代码查看服务器端的ntp服务是否在运行
    service ntp status
    下图这种是未启动的在这里插入图片描述
    需要执行sudo /etc/init.d/ntp restart启动ntp服务,启动后,再次执行service ntp status查看状态
    这样的就是启动成功了
    在这里插入图片描述
  • 客户端进行时间同步
    执行sudo ntpdate 192.168.1.101,如果遇到如下错误(ip地址为你的服务器端的ip地址)
    在这里插入图片描述
    说明你的客户端的ntp也开启了,需要先执行sudo /etc/init.d/ntp stop关闭ntp服务,再执行
    上面的时间同步代码在这里插入图片描述

至此时间同步也完成了,可以开心的进行主从机控制了,妈妈再也不用担心我的超时警告了。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐