最小搜索范围在基于网格的雷达扫描匹配使用IMU

这个例子展示了如何使用惯性测量单元(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和激光雷达以不同的采样速率更新。创建一个将激光雷达映射到IMU索引的数组。

lidarToIMUIndices =零(大小(tLidar));对于I = 1:numel(tLidar)[〜,lidarToIMUIndices(I)] =分钟(ABS(tLidar(ⅰ) -  tIMU));结束

估计偏航从IMU

使用四元数从加速度计和陀螺仪读数中估计方位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金宝搏官方网站Solutions1。然而,在这个例子中,两种不同的选择之间的姿势的差异并不明显。

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'“西塔”