笔记本电脑和树莓派系统上安装Uuntu18.04系统,通过ROS系统建立局域网实现机器人多机通信,笔记本电脑作为终端对带有树莓派系统的机器人控制,由于没有与外网连接在进行ROS开发的过程中,这两个系统时间不同步带来了很多问题,解决方法是:树莓派断电后没有电池给系统时钟供电,因此将笔记本设置为ntp服务器,树莓派设置为ntp客户端。
下面介绍如何通过ntp来对局域网内的两台电脑进行时间同步。
刚开始没主要两个系统之间的时间差,用ROS系统进行多机通信时出现了如下的错误:
运行卡尔曼滤波融合代码出现如下错误"Could not transform imu message from imu_link to base_footprint. Imu will not be activated yet.":
1.在树莓派系统和笔记本电脑上安装ntp服务器,笔记本电脑和树莓派系统ntp、ntpdate
这两个包是都需要安装
sudo apt-get install ntp
sudo apt-get install ntpdate
2.在笔记本电脑(服务端)运行sudo gedit /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服务进行时间同步。
3.在笔记本电脑设置好之后,重启ntp服务
sudo /etc/init.d/ntp restart
服务器端设置完成,下面开始客户端的设置:
4.在客户端(树莓派)系统上运行sudo gedit /etc/ntp.conf
在文件末尾加入一行代码:
server 192.168.1.xxx
把ip改成服务器端的ip地址即可
5.重启客户端(树莓派)ntp服务
sudo /etc/init.d/ntp restart
ntp和ntpdate程序在树莓派安装完成并且设置完成之后,接下去就可以实现系统间同步。
1、笔记本电脑(服务器端)开机之后会自动启动ntp服务器,如果不确定笔记本电脑端是否启动ntp服务可输入如下命令查看是否有启动ntp服务。这边需要注意的是:如果重启ntp守护进程后,服务器端有可能无法立即更新时间,这是因为每次重启ntp服务器之后大约要3-5分钟客户端才能与服务器建立正常的通讯连接,客服端需要等待3-5分钟左右再发送命令更新即可。
service ntp status
如果打印出以下信息说明ntp启动成功:
2、关闭树莓派的ntp服务,只需打开服务器的ntp服务即可,如果没有把树莓派ntp关闭则会出现冲突
sudo /etc/init.d/ntp stop
3、在树莓派端输入如下命令实现树莓派系统与服务器端的时间同步
sudo ntpdate 192.168.1.xxx
启动192.168.1.xxx为服务器的IP,如果输入该命令之后出现如下错误提示
提示错误“no server suitable for synchronization found”,出现这种错误提示一般是服务器的ntp服务没打开或者是等待的时间不够长(服务端ntp需要启动5分钟左右才能进行时间同步)
时间同步成功如下所示:
在终端输入date命令可以查看系统当前时间