原文章
在原作者的odometry.cpp文件中,话题“velodyne_cloud_map”输出的点云信息用于后端的scan2map操作,但是作者对该点云信息进行了TransformToStart的操作(即:将当前帧点云变换到上一帧坐标系下),为觉得这个操作是多余的,并且事实证明也确实降低了建图精度,相关代码如下:
TransformToStart(&laserCloudIn_plane.points[i], &point_in_odom);
后端的坐标系有三个,里程计传递过来的相对里程计原点的坐标系q_wodom_curr,t_wodom_curr,后端坐标系q_w_curr,t_w_curr,后端相对里程计的坐标系q_wmap_wodom,t_wmap_wodom,整个系统接收里程计,使用后端相对里程计的坐标系计算后端坐标系。在map.cpp里当前帧转换到后端坐标系与后端坐标系下的全部地图匹配,以点面匹配的方式,ceres优化修改后端坐标系q_w_curr,t_w_curr
效果
原代码效果(建图误差很大):
去掉TransformToStart变换效果(精度明显提高):
补充说明:
在rosbagregist.cpp文件中,计算曲率那一块:
laserCloudall -> points.push_back(laserCloudScans[i].points[j]);也可以写成:
laserCloudall -> push_back(laserCloudScans[i].points[j]);代表的是一个意思:添加新的点。