覚え書きブログ

ROSの覚え書き(ローカルNTPサーバ)

前回、ロボット座標(TF)付きでオドメトリを配信できるようになったが、実はオドメトリのトピックの配信元と先で時刻に大分差があり、地図構築などに支障きたしていた。
hirotaka-hachiya.hatenablog.com

そこで、今回はロボットの周辺のPC間で時刻の同期をとるために、ローカル(インターネットには接続していない)のNTPサーバを立ち上げた。

サーバ側(192.168.0.25)の/etc/ntp.confのserverに、ローカルのIPアドレスを設定する。

server 127.127.1.0 prefer
fudge 127.127.1.0 stratum 10
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap

通常、TCP/IPでは、ローカルのIPアドレスは、127.0.0.1だが、NTPの世界ではローカルは127.127.1.0で識別しているとのこと。

クライアント側(192.168.0.30)の/etc/ntp.confの設定にて、サーバのIPアドレスを設定する。

# You do need to talk to an NTP server or two (or three).
#server ntp.your-provider.example
server 192.168.0.25 prefer

サーバおよびクライアントそれぞれで、ntpdを再起動する。

> /etc/init.d/ntp restart

また、sysv-rc-conf(chkconfigのubuntu版)で起動時に自動的に実行されるように設定する。

> sudo sysv-rc-conf

f:id:hirotaka_hachiya:20170725191735p:plain

ここで、ntpqを用いて時刻同期が出来ているかを確認する。
【サーバにて】

 remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*LOCAL(0)        .LOCL.          10 l   17   64  377    0.000    0.000   0.000

【クライアントにて】

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*192.168.0.25    LOCAL(0)        11 u   18   64  377    0.356  -12.967  17.698

ある程度同期が出来ているが、まだ、クライアントがサーバより0.356秒(deleyの値)遅れている。
これでは、ロボットのようなセンサー値と連動して制御するようなシステムではまだ使えない。。。
TFを見てみると、やはり(0.036 sec old)となっている。。。
f:id:hirotaka_hachiya:20170725193342p:plain

そこで、ntpdは同期をとるのに起動してから時間がかかるとのことなので、
瞬時に同期をとるために、ntpdをやめてntpdateコマンドを利用してみた。

【クライアントにて】

> sudo /etc/init.d/ntp stop
> sudo ntpdate -v 192.168.0.25
25 Jul 17:59:15 ntpdate[4245]: ntpdate 4.2.6p5@1.2349-o Wed Jun 28 18:06:27 UTC 2017 (1)
25 Jul 17:59:21 ntpdate[4245]: adjust time server 192.168.0.25 offset -0.047859 sec

これにより、delayは0.047859secまで減らせたようだ。
もう一度、TFを見てみると、(0.055 sec old)まで時刻差が減少していた、これなら何とかなりそうである。
f:id:hirotaka_hachiya:20170725193354p:plain