Livox-SDK / livox_ros_driver

Livox device driver under ros, support Lidar Mid-40, Mid-70, Tele-15, Horizon, Avia.
Other
363 stars 203 forks source link

GPS定位信号丢失后激光雷达立刻无法及时同步时间 #121

Open likegogogo opened 2 years ago

likegogogo commented 2 years ago

目前我们采用的是GPS时间同步方法,即这种: GPS:为了实现GPS同步,雷达/Hub需要同时接收PPS和UTC时间戳。对于Horizon/Tele-15/Mid-70/Avia,雷达单元可以通过以太网在控制指令中获得UTC时间戳。Livox Hub可以通过RS485串口在$GPRMC信息中获得UTC时间戳。

测试设备: Horizon 和 Tele 15

我们进行了如下测试: GPS定位信号良好(3D FIX) -> 把GPS天线拔掉而无GPS定位信号(此时依然会输出GNRMC报文,只是报文中的定位字段为空) ->GPS定位信号良好(3D FIX) 。 问题:把GPS天线拔掉而无GPS定位信号时,激光雷达的时间同步立刻失败。

---日志: rmc:$GNRMC,134841.00,A,2233.55684,N,11323.47981,E,0.108,,150422,3.02,W,A,V*55[2022-04-15 21:48:41.410] [console] [info] Send Command: Set 1 Id 10 Seq 91 [command_channel.cpp] [Send] [243] [2022-04-15 21:48:41.411] [console] [info] Send Command: Set 1 Id 10 Seq 92 [command_channel.cpp] [Send] [243] [2022-04-15 21:48:41.431] [console] [info] Recieve Ack: Set 1 Id 10 Seq 91 [command_handler.cpp] [OnCommand] [118] Set lidar[0] sync time status[0] response[0] [2022-04-15 21:48:41.432] [console] [info] Recieve Ack: Set 1 Id 10 Seq 92 [command_handler.cpp] [OnCommand] [118] Set lidar[1] sync time status[0] response[0]

rmc:$GNRMC,134842.00,A,2233.55679,N,11323.47980,E,0.147,,150422,3.02,W,A,V*5E[2022-04-15 21:48:42.411] [console] [info] Send Command: Set 1 Id 10 Seq 95 [command_channel.cpp] [Send] [243] [2022-04-15 21:48:42.411] [console] [info] Send Command: Set 1 Id 10 Seq 96 [command_channel.cpp] [Send] [243] [2022-04-15 21:48:42.415] [console] [info] Recieve Ack: Set 1 Id 10 Seq 95 [command_handler.cpp] [OnCommand] [118] Set lidar[0] sync time status[0] response[0] [2022-04-15 21:48:42.416] [console] [info] Recieve Ack: Set 1 Id 10 Seq 96 [command_handler.cpp] [OnCommand] [118] Set lidar[1] sync time status[0] response[0]

rmc:$GNRMC,134843.00,V,,,,,,,150422,3.02,W,N,V*58Set GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134844.00,V,,,,,,,150422,3.02,W,N,V*5FSet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134845.00,V,,,,,,,150422,3.02,W,N,V*5ESet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134846.00,V,,,,,,,150422,3.02,W,N,V*5DSet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134847.00,V,,,,,,,150422,3.02,W,N,V*5CSet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134848.00,V,,,,,,,150422,3.02,W,N,V*53Set GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134849.00,V,,,,,,,150422,3.02,W,N,V*52Set GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134850.00,V,,,,,,,150422,3.02,W,N,V*5ASet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134851.00,V,,,,,,,150422,3.02,W,N,V*5BSet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134852.00,V,,,,,,,150422,3.02,W,N,V*58Set GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134853.00,V,,,,,,,150422,3.02,W,N,V*59Set GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134854.00,V,,,,,,,150422,3.02,W,N,V*5ESet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134855.00,V,,,,,,,150422,3.02,W,N,V*5FSet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134856.00,V,,,,,,,150422,3.02,W,N,V*5CSet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134857.00,V,,,,,,,150422,3.02,W,N,V*5DSet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134858.00,V,,,,,,,150422,3.02,W,N,V*52Set GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134859.00,V,,,,,,,150422,3.02,W,N,V*53Set GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134900.00,V,,,,,,,150422,3.02,W,N,V*5ESet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134901.00,V,,,,,,,150422,3.02,W,N,V*5FSet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134902.00,V,,,,,,,150422,3.02,W,N,V*5CSet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134903.00,V,,,,,,,150422,3.02,W,N,V*5DSet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134904.00,V,,,,,,,150422,3.02,W,N,V*5ASet GPRMC synchronization time error code: -1. Set GPRMC synchronization time error code: -1.

rmc:$GNRMC,134905.00,A,2233.55738,N,11323.48119,E,0.215,,150422,3.02,W,A,V*5B[2022-04-15 21:49:05.426] [console] [info] Send Command: Set 1 Id 10 Seq 155 [command_channel.cpp] [Send] [243] [2022-04-15 21:49:05.426] [console] [info] Send Command: Set 1 Id 10 Seq 156 [command_channel.cpp] [Send] [243] [2022-04-15 21:49:05.431] [console] [info] Recieve Ack: Set 1 Id 10 Seq 155 [command_handler.cpp] [OnCommand] [118] Set lidar[0] sync time status[0] response[0] [2022-04-15 21:49:05.432] [console] [info] Recieve Ack: Set 1 Id 10 Seq 156 [command_handler.cpp] [OnCommand] [118] Set lidar[1] sync time status[0] response[0]

rmc:$GNRMC,134906.00,A,2233.51133,N,11323.45839,E,0.301,,150422,3.01,W,A,V*50[2022-04-15 21:49:06.426] [console] [info] Send Command: Set 1 Id 10 Seq 159 [command_channel.cpp] [Send] [243] [2022-04-15 21:49:06.427] [console] [info] Send Command: Set 1 Id 10 Seq 160 [command_channel.cpp] [Send] [243] [2022-04-15 21:49:06.439] [console] [info] Recieve Ack: Set 1 Id 10 Seq 159 [command_handler.cpp] [OnCommand] [118] Set lidar[0] sync time status[0] response[0] [2022-04-15 21:49:06.440] [console] [info] Recieve Ack: Set 1 Id 10 Seq 160 [command_handler.cpp] [OnCommand] [118] Set lidar[1] sync time status[0] response[0]

期望: 把GPS天线拔掉而无GPS定位信号,但此时GPS依然会输出GNRMC报文,只是报文中的定位字段为空,但GNRMC中的时间信息是正确的,此时激光雷达的时间同步应该正常进行才行。 例如在隧道等地方,GPS定位信号是很可能会丢失的,这也是比较常见的。

我们追踪了,目测是ParseRmcTime 这个函数出了问题。 https://github.com/Livox-SDK/Livox-SDK/blob/05cc408e54bce90863cd4f160992a92ddea1fd29/sdk_core/src/command_handler/command_impl.cpp#L147

请求Livox的工作人员跟进处理,谢谢。

eleboss commented 1 year ago

解决了吗?