TX2控制器, 没有后备电池, 每天上午或下午工作时间开机, 从GPS(ZED-F9P)同步时间, 开机自启动一个ros节点, 存为时间命名的log文件, 测试人员反应:
- reboot系统, 文件可以更新
- 断电再上电, 文件没有更新
文件名是年月日-时分秒
的格式, 类似于
$ time=$(date "+%Y%m%d-%H%M%S")
$ echo $time
20211208-171709
这牵涉到GPS的热启动和冷启动的问题, 查ZED-F9P datasheet
发现热启动2s, 冷启动25s以上.
每次开机都是2018年的一个时间, 等GPS同步后才变为正常的2021年.
而自启脚本里面只sleep 10
后启动ros节点, dmesg
打的log中看到18秒多的时候节点就起来了, 这就导致:
- 断电后启动(因为没有任何后备电池, 是冷启动需25s), 时间还没有同步节点就起来了, 还是2018年, 文件几乎一直都是或者在覆盖
2018xxxx
命名的log文件, 而测试人员看着一大片log文件, 直接就奔最新的去看, 当然没看到更新… - 重启Linux系统这里算是热启动, 时间2s就更新了, 直接就是2021年现在的时间, 当然就没问题
临时解决方法也很简单:
- 自启动脚本中sleep更长的时间, 如100s后, 再启动ros节点存文件
- 或者 脚本里面判断时间不是(或者超过)2018年, 再启动ros节点.
# 示例
time=2018
while [[ "$time" == "2018" ]]
do
time=$(date "+%Y")
sleep 1
done
# roslaunch ...
欢迎扫描二维码关注本人微信公众号, 及时获取最新文章: