1 input:点云数据 ,里程计数据 2 output:一帧点云扫描期间的机器人位姿变换信息矩阵 3 begin: 4 do 5 //将轮式里程计数据和点云数据存入对应的双端队列 6 while( .size<2)//防止没有对应的里程计数据,缓存两帧雷达数据程序再继续执行 7 FindCorrespondPose ( , , , ) //按每帧点云的开始和结束的时间戳 Math_140#在 中寻找对应的里程计位姿,若没有对应位姿则利用附近时刻的位姿通过式(6)进行线性位姿插值。 8 //位姿矩阵变换 9 //计算相对位姿变换即 时刻机器人在 时刻机器人坐标系下的位姿 10 //得到点云配准初值 11 if( ) delete //数据预处理去除无效点 12 do 13 num1=VoxelFilter(Cj,lmax,lmin) //利用体素滤波对点云进行下采样num1、num2分别表示滤波后的激光点数和目标激光点数 14 mid=(lmax + lmin)/2 15 if(num1 16 Whilenum1 17 Sort(Cj) //利用选择排序将滤波后的激光点按照角度递增的关系进行排序 18 do 19 fori= 1:n 20 FindClosePoint(Cj, Cj−1) 21 22 ; ; 23 while //直到配准误差小于设定的值停止迭代 24 return 25 end |