Time Synchronization (NTP)
What PAL's /usr/bin/roscore.sh does at every boot: 1. It runs a one-shot sync, ntpd -gq, before starting roscore. This works: it reached the internet pool servers. 2. But /etc/ntp.conf contains tinker step 900, so any offset under 900 s is slewed (corrected gradually) instead of stepped. The log shows it: 15:49:39 ntpd: time slew -91.231173 s 15:49:39 roscore.sh: INFO: NTP synchronized Slewing corrects at most 0.5 ms per second, so 91 s would take about 50 hours. 3. /etc/pal/roscore.conf has ALWAYS_STOP=True, so ntpd is stopped right after (this is the "disabled because of ROS1" part). 4. Then hwclock --systohc writes the still wrong system time into the hardware clock. The next boot starts from the wrong time again.
So the error never goes away. The log reports "NTP synchronized" anyway, which is why it looks like it works. It's probably the same on the other robot you mentioned. The camera computer (316 s off) likely runs the same script.
Suggested fix (needs sudo on the robot, so I haven't done it): sudo sed -i 's/^tinker step 900/tinker step 0.128/' /etc/ntp.conf # step at boot instead of slewing sudo systemctl stop ntp; sudo ntpd -gq; sudo hwclock -w # fix it now Stepping at boot is safe for ROS 1, because the sync runs before roscore starts. That's why PAL does it there. And with ALWAYS_STOP=True there's no daemon afterwards that could step the clock while ROS runs. Right now the robot is about 0.4 s behind, so the step moves the clock forward, which doesn't stall any timers.