最常见的是由机器人本体运动产生的畸变
如:机器人运动的比较快、机器人旋转的幅度比较大。
一、IMU对点云的运动畸变进行去除
IMU主要提供角速度信息(加速度信息积分发散,不够可靠)。
在一帧点云时间内(雷达转一圈)对所有的IMU角速度进行积分得到IMU的旋转角度,再转换到激光雷达上,对雷达的姿态进行姿态四元数球面线性插值,将对应点云转换到末状态的姿态上实现去点云运动畸变去除。
注意:
激光雷达的频率远低于IMU的频率;
话句话说:雷达的一个周期内(一帧点云),IMU会产生十几个或几十个周期。(具体看频率)
我们要做的是:
(1)对IMU的每一个周期计算它的角度变化(角度=角速度X时间);
(2)把这十几个周期的角度变化值进行累加,累加后的结果作为雷达一个周期内的角度变化。
1.对IMU进行角速度积分
2.使用四元数表示
四元数概念:
四元数:只是用来表示机器人3D姿态的一种表达方式
第1种表示方法:一个四元数拥有一个实部和三个虚部(i、j、k):
第2种表示方法:一个标量(scalar)+ 一个向量(vector):
用四元数表示旋转:
原文链接:https://blog.csdn.net/weixin_41681988/article/details/124378390
IMU中如下:
IMU测量x,y,z三个轴的变化角度,分别为αx, αy, αz;
qt为t时刻的姿态四元数,qt0为前一时刻姿态四元数,qdt为t——t0时间段内四元数变化值(IMU单个周期)
二、相关概念
运动补偿的目的:把所有的点云补偿到某一时刻,这样就可以把本身在过去100ms内收集的点云统一到一个时间点上去 ,这个时间点可以是起始时刻,也可以是结束时刻,也可以是中间的任意时刻;常见的是补偿到起始时刻
畸变校准方法
因此运动补偿需要知道每个点时刻对应的位姿 T_start_current 通常有几种做法
1 如果有高频里程计,可以比较方便的获取每个点相对起始扫描时刻的位姿
2 如果有imu,可以方便的求出每个点相对起始点的旋转
3 如果没有其它传感器,可以使用匀速模型假设,使用上一帧间里程计的结果,作为当前两帧之间的运动,同时假设当前帧也是匀速运动,也可以估计出每个点相对起始时刻的位姿
k-1 到 k 帧 和 k到k+1帧的运动是一至的,用k-1到k帧的位姿变换当做k到k+1帧的位姿变换, 可以求到k到k+1帧的每个点的位姿变换
原文链接:https://blog.csdn.net/qq_32761549/article/details/120738568
线性插值则意味这机器人在要插值的这一小段内直接做匀速运动
二次插值则意味这机器人在要插值的这一小段内直接做匀(加、减)速运动;图像为二次函数