JokerJohn / LIO_SAM_6AXIS

LIO_SAM for 6-axis IMU and GNSS.
565 stars 115 forks source link

origin.txt的经纬度是指点云地图的原点吗? #55

Closed Terrensou closed 9 months ago

Terrensou commented 10 months ago

使用save map service导出的点云pcd与origin.txt。将origin.txt的经纬度作为pcd的原点,将实际GNSS轨迹转换至点云中,发现有3米左右的偏移。 我将simpleGpsOdom.cpp中的初始化经纬度作为pcd的原点,发现偏移几乎没有偏移。分析发现gtsam中的GPS因子使用simpleGpsOdom.cpp输出的东北天坐标,我认为gtsam优化计算后的坐标应该是不会脱离东北天的原点坐标。mapOptizationGps.cpp的saveMapService函数中保存的origin.txt经纬度是gtsam优化后第一关键帧的东北天转经纬度,转换参考的原点经纬度是updateInitialGuess在第一帧点云输入时对应的GPS坐标,但实际加入GPS因子的东北天坐标信息仍是来源于simpleGpsOdom.cpp输出的坐标,而非基于第一帧点云经纬度坐标。

JokerJohn commented 10 months ago

使用save map service导出的点云pcd与origin.txt。将origin.txt的经纬度作为pcd的原点,将实际GNSS轨迹转换至点云中,发现有3米左右的偏移。 我将simpleGpsOdom.cpp中的初始化经纬度作为pcd的原点,发现偏移几乎没有偏移。分析发现gtsam中的GPS因子使用simpleGpsOdom.cpp输出的东北天坐标,我认为gtsam优化计算后的坐标应该是不会脱离东北天的原点坐标。mapOptizationGps.cpp的saveMapService函数中保存的origin.txt经纬度是gtsam优化后第一关键帧的东北天转经纬度,转换参考的原点经纬度是updateInitialGuess在第一帧点云输入时对应的GPS坐标,但实际加入GPS因子的东北天坐标信息仍是来源于simpleGpsOdom.cpp输出的坐标,而非基于第一帧点云经纬度坐标。

你说的对,确实如此。加入因子图中的GNSS观测应该是接收到稳定的WGS84数据时初始化的原点经纬高坐标。

Terrensou commented 10 months ago

按照我的说法,如果打算将点云地图坐标原点对应至经纬度中,应该使用simpleGpsOdom.cpp的gpsTools的初始点经纬度。那导出的origin.txt经纬度坐标是指什么点呢?我原本以为origin.txt就是指点云地图坐标原点的经纬度,但实际上没有对齐。

Terrensou commented 10 months ago

由于simpleGpsOdom.cpp有初始化过程,初始化结束后才输出坐标信息至mapOptizationGps.cpp用于初始化gpsTools的坐标点。这导致两者的gpsTools初始化点是不一致的。mapOptizationGps.cpp中有关转换回经纬度的输出,如保存origin.txt、输出NavsatFix消息都是基于mapOptizationGps.cpp的gpsTools,但mapOptizationGps.cpp中关于东北天的数据却来源于simpleGpsOdom.cpp的gpsTools的转换。我认为两个cpp的gpsTools不一样,导致了mapOptizationGps.cpp输出的经纬度信息并非实际预期的信息。

JokerJohn commented 10 months ago

对,simpleGpsOdom初始化的原点坐标,这部分信息原来是计划publish出来的,(在mapOptizationGps接收),下一波更新会修复这个问题。

image
Terrensou commented 10 months ago

非常感谢!您的工作给我带来了很大的帮助