这个例子展示了如何使用惯性测量单元(IMU)来最小化扫描匹配算法旋转角度的搜索范围。IMU传感器读数用于估计车辆的方向,并指定为初始猜测matchScansGrid
功能。初始姿态估计的该方法是相对于基座算法假定的初始猜测(0 0 0)
。
加载MAT文件,loggedLidarAndIMUData.mat
这个文件包含llidar扫描、加速计读数和陀螺仪读数,以及相应的时间戳。
rng (1);修正了RNG种子的重复率加载('loggedLidarAndIMUData',...'tLidar','lidarScans',...'imuFs','tIMU',“加速度”,“陀螺”);startIdx = 1;endIdx = numel(lidarScans)-1;
IMU和激光雷达以不同的采样速率更新。创建一个将激光雷达映射到IMU索引的数组。
lidarToIMUIndices =零(大小(tLidar));对于I = 1:numel(tLidar)[〜,lidarToIMUIndices(I)] =分钟(ABS(tLidar(ⅰ) - tIMU));结束
使用四元数从加速度计和陀螺仪读数中估计方位imufilter
宾语。然后,通过coverting的四元数来欧拉角计算连续激光雷达扫描之间的相对雅司病。
orientFilt = imufilter ('采样率',imuFs);q = orientFilt(accel,陀螺仪);计算相对yawseulerAngs =欧拉(q (lidarToIMUIndices (1 + (startIdx: endIdx)))...*缀(Q(lidarToIMUIndices(startIdx:endIdx))),'ZYX','帧');imuYaws = eulerAngs(:,1);
跑过matchScansGrid
有两种不同的选择功能:
默认INTIAL猜测和SEACH范围
基于IMU传感器读数与一个小的搜索范围内的初始猜测
迭代通过所有的激光雷达扫描读数,运行matchScansGrid
与每对顺序扫描。登录的处理时间为每个函数调用,从扫描匹配的相对姿势输出。为了形象基础上的解决方案,集转化扫描plot金宝搏官方网站Solutions
至1
。然而,在这个例子中,两种不同的选择之间的姿势的差异并不明显。
smallSearchRange = PI / 8;plot金宝搏官方网站Solutions = 0;%初始化时间值和相对姿态阵列timeDefaultSearch = NaN的(endIdx - startIdx + 1,1);timeSmallSearchWithIMU = NaN的(endIdx - startIdx + 1,1);allRelPosesDefault = NaN的(endIdx - startIdx + 1,3);allRelPosesIMU = NaN的(endIdx - startIdx + 1,3);对于IDX = startIdx:endIdx SCAN1 = lidarScans(IDX);SCAN2 = lidarScans(IDX + 1);偏航= imuYaws(IDX);initGuess = [0 0偏航];%运行使用默认值扫描匹配。抽动;relPose = matchScansGrid(SCAN2,SCAN1);timeDefaultSearch(IDX)= TOC;allRelPosesDefault(IDX,:) = relPose;%运行扫描匹配基于imu的初始偏航和小搜索范围。抽动;relPose = matchScansGrid(SCAN2,SCAN1,'InitialPose',initGuess,...'RotationSearchRange',smallSearchRange);timeSmallSearchWithIMU(IDX)= TOC;allRelPosesIMU(IDX,:) = relPose;%设定情节解决方案1要金宝搏官方网站打开扫描可视化。如果figu金宝搏官方网站re(cfg,“分享”,'上')图(SCAN1)保持在图(transformScan(SCAN2,allRelPosesDefault(IDX,:)))图(transformScan(SCAN2,allRelPosesIMU(IDX,:)))保持离传说(“参考扫描”,“默认”,...“小搜索范围+ IMU”,...“位置”,'西北')标题(sprintf (“匹配激光雷达扫描%d和%d”,I,I + 1))结束结束
可视化和比较扫描匹配结果。展现给总处理时间为条形图。然后,每个迭代的时间进行比较。
图题(“扫描匹配的处理时间”)酒吧(分类({“默认”,“IMU +小的搜索”}),...[总和(timeDefaultSearch),总和(timeSmallSearchWithIMU)])ylabel('时间(s)')
图题(“差异互为作用时间”) plot(startIdx:endIdx,(timeDefaultSearch - timeSmallSearchWithIMU)) ylabel(的时间(秒))包含(“迭代”)
根据定时结果,指定IMU传感器读数作为扫描匹配算法的估计,提高了每次迭代的时间。最后一步,你可以验证预估姿态的差异是否显著。在这个例子中,所有的姿势都来自matchScansGrid
都是一样的。
图题(“差异姿态价值观”)图(allRelPosesDefault-allRelPosesIMU)传奇('X','Y',“西塔”)