ROS多机通讯/时间同步
ros玩到进阶阶段,在机器人调试的时候,不太方便查看信息以及进行一些界面操作,这时候自然要使用ros的多机通讯功能,本文分多机通讯设置以及时间同步两个部分。
多机通讯
多机通讯网上一大堆说ip、用户名改来改去的,那样做的确可以,但是太麻烦了,其实只需要在主从机~/.bashrc文件中加入ROS_MASTER_URI以及ROS_HOSTNAME的配置就可以了。
主机
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
从机
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 ntpsudo apt-get install ntpdate
服务器端
-
运行
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服务进行时间同步 -
改好后,重启ntp服务
sudo /etc/init.d/ntp restart
服务器端设置完成,下面开始客户端的设置
客户端
-
运行
sudo vim /etc/ntp.conf在文件末尾加入一行代码:
server 192.168.1.xxx
把ip改成服务器端的ip地址即可 -
重启ntp服务
sudo /etc/init.d/ntp restart -
时间同步
- 进行时间同步的时候先执行下面的代码查看服务器端的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服务,再执行
上面的时间同步代码
至此时间同步也完成了,可以开心的进行主从机控制了,妈妈再也不用担心我的超时警告了。
更多推荐
所有评论(0)