[ROS] ROS下的多计算机通信中的时间同步问题
前言:
实验室的AGV平台搭载了工控机,很多底层的驱动直接安装在工控机上。当我们想要借助AGV平台实现一些算法的验证时,直接把程序拷入工控机是一种思路,另一种思路是直接拿自己的笔记本,与工控机实现通信。通过强大的ROS平台,可以便捷的实现这个操作。
具体的操作按照上述参考链接实现就可以。
问题:
在Master和Host共享了一个roscore后,两台主机之间可以互相访问全部的rostopic。然而发现了一个时间同步上的问题。对于直接连接在工控机(Master)上的设备,例如IMU,和直接连接在Pc(HOST)上的相机,这两个设备所发出的rostopic echo出来的时间戳是不一致的。如果直接rosbag录制数据的话,录制下来的时间戳也是不同步的。
上半部分的命令行窗口是ssh的工控机的,下面一个窗口是笔记本的命令行,可以看出stamp不一致。
解决问题:
尝试一种方法:
安装ntpdate软件,然后运行以下命令:
1、sudo /usr/sbin/ntpdate -u 192.168.1.102
2、sudo /sbin/hwclock -w
这个命令是在需要调整时间的设备上运行的,1中的ip地址为另一台时间正确的设备的ip;
注:
特别注意,需要在自己的笔记本端,sudo apt-get install ntp;需要安装这个让自己的笔记本能够给工控机提供时间。
如果不安装的话,会出现如下问题
no server suitable for synchronization found
出现这个问题以后,通过命令行输入:
ntpdate -d 192.168.1.xxx(此处替换为笔记本的ip)
然后会发现是
Server dropped:No Data
于是网上搜了一大票答案,全是复制粘贴的,有两种可能可行的解决办法:
1.在/etc/ntp.conf中找到notrust相对应的项,把它去掉(博主这是4.2版本的,发现这个并没有问题)
2.打开123端口
在自己的笔记本安装好ntp以后,再运行之前的两条命令:
1、sudo /usr/sbin/ntpdate -u 192.168.1.102
2、sudo /sbin/hwclock -w
就能够同步时间了,一点不差。