简单整理阅读LOAM论文后对LOAM SLAM的理解,以供自己以后参考。
只需要3d激光点云
数据,低漂移,低计算量,
SLAM分为两个部分:10Hz
的激光里程计
和1Hz
的建图
激光里程计
使用基于特征点进行相邻点云
帧数据匹配
,
激光建图
使用基于特征点进行校正后输入
点云数据和地图
拼接。
使用的特征点
和对应的特征区域
有两类:
边缘点
以及边缘点所在边缘线
,平面点
以及平面点所在平面
。在KITTI上里程计排行很高
。
sweep
表示一次完整的数据,一帧点云数据,是多次scan
之后得到的点云数据,对应于现在的多线
激光雷达,一线代表一个scan
,16线激光雷达一次获得的数据就是一次sweep
,包含16个scan
数据.对于3维点云数据,每次处理的都是一次sweep数据,这样才叫三维
,否则不就是二维
了吗?仅限于此论文的机械结构,如果使用多线激光,一般一帧数据称为scan。这里是因为二维雷达的原因,术语含义发生了变化,但是本质都是一次完整扫描过程称为scan
。
评论区有小伙伴提出疑问,这里我再解释一下,首先明确二维激光雷达只是水平方向旋转扫描,此时一次水平扫描完成的数据为一次scan;三维激光雷达(多线雷达,激光束在垂直方向按照时间间隔依次发射)先垂直扫描再水平旋转实现三维扫描,此时一次三维扫描称为一次scan。虽然二维激光和三维激光都有一次scan的术语,但是对应的含义只是说明一次完整的扫描过程,实际表示的数据并不一样。原论文作者使用二维激光实现三维激光,需要添加机械结构实现垂直扫描,这样就会导致多个scan才是我们需要的三维扫描,那么这多个scan称为一次sweep。也就是,这里的一次sweep对应于三维激光中的一次scan,二维激光的一次scan不等于三维激光的一次scan。
评论区有小伙伴对激光束发射提出疑问,此问题针对vlp16激光雷达,具体请转LOAM源代码分析附公式推导,这里我解释一下,激光束是间断发射的16束垂直方向的激光,不是同时发射的,但是间断时间很短,你可以认为是同时发射的,只是认为。可以想一个问题,激光如果是同时发射的,如何根据反射的激光区分他们呢,所以一次只能发射一束激光。根据官方资料,在垂直方向发射激光时,相邻激光束时间差为 2.304 μ s 2.304{\mu}s 2.304μs微秒,16束激光发射完成时会有 18.43 μ s 18.43{\mu}s 18.43μs微秒的空闲时间,一次16束激光完成发射需要花费 16 ∗ 2.034 μ s + 18.43 μ s = 55.296 μ s 16*2.034{\mu}s+18.43{\mu}s=55.296{\mu}s 16∗2.034μs+18.43μs=55.296μs微秒。当水平旋转频率为600RPM时,对应的水平方向分辨率为 A z i m u t h r e s o l u t i o n = 10 r e v / s ∗ 360 ° / r e v ∗ 55.296 × 1 0 − 6 s / f i r i n g c y c l e = 0.199 ° / f i r i n g c y c l e Azimuth_{resolution}=10rev/s*360\degree/rev*55.296\times10^{-6}s/firing cycle=0.199\degree/firingcycle Azimuthresolution=10rev/s∗360°/rev∗55.296×10−6s/firingcycle=0.199°/firingcycle,这下应该都明白了吧。
k
表示第几次sweep
P k P_k Pk表示第k
次sweep的点云数据
L
表示激光雷达坐标系,左上前
右手坐标系, X k , i L X^L_{k,i} Xk,iL表示 P k P_k Pk中点 i i i在激光雷达坐标系L
下的坐标
W
表示三维世界坐标 ,左上前
右手坐标系, X k , i W X^W_{k,i} Xk,iW表示 P k P_k Pk中点 i {\textit{i}} i在世界坐标系W
下的坐标
需要解决的问题
给定点云数据序列
P k P_k Pk,计算激光雷达在sweep之间的运动
并对历史轨迹的周围环境进行建图
。
作者使用单线
激光雷达和电机
构成了一个多线激光雷达。
激光雷达具体信息:
型号为UTM-30LX 2维
激光雷达 25msec/scan
,每秒进行40次扫描。
获得的点云数据
水平范围是180°,分辨率为0.25°
使用电机实现垂直扫描,角速度为180°/s。垂直范围为180°,
一次完整的帧数据(sweep)就是水平范围180°,垂直范围180°。耗时1s。
单纯的激光数据会出现畸变
,这是为什么呢?
开始
时激光处于A
位置,当sweep结束
时激光处于B
位置,因为激光扫描时间较长,如果是一堵平行的墙面,理想状况下激光处于A或者B位置测量的距离应该一样,但是实际中激光处于A位置测量的距离和处于B位置的测量的距离一定会出现差异,失去了原始平行墙面的特征,进行激光SLAM时,AB位置的差距必须要考虑,或者说激光在这期间的运动必须要考虑,对应到点云数据会发现,点云数据出现较大的偏移。因此在数据处理时需要构造激光运动模型来消除点云畸变带来的影响。特征点包括边缘点
和平面点
S S S是第 k k k帧点云数据中点 i i i对应 X k i L X^L_{ki} XkiL附近的一个连续点集合,下式表示的含义:
根据点 i i i和 S S S中点的归一化矢量和的模
来判断点i的类型,如果模大
,则为边缘点,模小
则为平面点。 ∣ S ∣ |S| ∣S∣表示 S S S中点的数量。
如下图所示,边缘点的矢量和的模一般较大
,矢量和不为零
向量,而对应平面点的矢量和的模一般较小
,矢量和为零
向量。
将每次scan扫描得到的点云数据均匀分为四个
区域,每个区域最多包含2个边缘点,4个平面点。
需要丢弃不可靠点
,例如下面a中的B点,所在平面和激光束平行
;下面b中的A点,实际中处于平面特征,由于被遮挡的原因可能被视为边缘点,因此不是真正的边缘点,在相邻帧数据中可能不会再次观测
到。这两类点需要进行排除。
还有离群点
:某点与左右相邻
两个点的距离过大
。
因此选择特征点时需要满足条件:
最大值
,每个子区域的特征点数目是一定的,防止过多的特征点。周围点不能再次被选择
,本来每个子区域的特征点数量就比较少了,进一步防止特征点集中分布。非平行激光束的平面点
,非被遮挡的平面点
,非离群点
。这些都是不可靠的点云数据,不能在连续两帧点云数据中得到,不能作为特征点。下图就是找到的边缘点
(黄色),平面点
(红色),由于激光雷达处于运动中,这个时候还存在点云畸变,未进行校正,暂时也不能进行校正。
对于边缘点,寻找边缘点和边缘点所在直线的关系,对于平面点,寻找平面点和平面的关系。
P k P_k Pk开始的时间戳为 t k t_k tk,结束的时间戳为 t k + 1 t_{k+1} tk+1,经过畸变校正
之后将 P k P_k Pk重投影到 t k + 1 t_{k+1} tk+1得到 P ˉ k \bar{P}_k Pˉk。
估计激光雷达运动时,使用的是
重投影点云数据(经过畸变校正)
P ˉ k \bar{P}_k Pˉk和新的点云数据(未经过畸变校正)
P k + 1 P_{k+1} Pk+1。
E k + 1 {E}_{k+1} Ek+1和 H k + 1 H_{k+1} Hk+1分别表示在 P k + 1 P_{k+1} Pk+1(未经过畸变校正)中找到的边缘点和平面点集合。对应的,我们需要在 P ˉ k \bar{P}_k Pˉk中找到与 E k + 1 {E}_{k+1} Ek+1中边缘点对应的边缘线
和与 H k + 1 H_{k+1} Hk+1中平面点对应的平面
。
没有畸变
,激光雷达在短时间里获取的相邻帧数据
是含有大量同一特征点
的,就是 P k + 1 P_{k+1} Pk+1和 P k P_{k} Pk中很多特征点只是雷达在不同位置下观察的同一个点
。(前面已经去除了不可靠的特征点),那么现在只要找到一个变换关系
T T T使 P k + 1 P_{k+1} Pk+1和 P k P_{k} Pk中对应的点重合,那这个 T T T实际上表示了激光雷达的帧间运动
。为了减少计算量,增加鲁棒性,不直接使用点与点的匹配,而是使用边缘点和对应的线特征,平面点和对应的面特征
,这样也可以得到变换关系 T T T。然而现在的点云数据是含有畸变
的,并且将矫正
的 P k P_{k} Pk也重投影
到了 t k + 1 t_{k+1} tk+1时刻,那么现在就是一边进行矫正,一边进行匹配
。直到所有点和对应特征区域距离和最小
。这就是一个迭代的过程,迭代时,变换关系 T T T一直在发生变化, T T T的变换使 所 有 点 和 对 应 特 征 区 域 距 离 和 所有点和对应特征区域距离和 所有点和对应特征区域距离和一直朝着最小的方向前进。每次迭代计算进行时都会将 E k + 1 {E}_{k+1} Ek+1和 H k + 1 H_{k+1} Hk+1中的特征点重投影到 k + 1 k+1 k+1次sweep开始 t k + 1 t_{k+1} tk+1(这是因为我们可以参考的只有 上一帧 矫正后 重投影
到 t k + 1 t_{k+1} tk+1的数据 P ˉ k \bar{P}_k Pˉk),使用 E ~ k + 1 \widetilde{E} _{k+1} E k+1和 H ~ k + 1 \widetilde{H} _{k+1} H k+1表示迭代
过程中重投影到 k + 1 k+1 k+1次sweep开始 t k + 1 t_{k+1} tk+1的点集合。对于 E ~ k + 1 \widetilde{E} _{k+1} E k+1和 H ~ k + 1 \widetilde{H} _{k+1} H k+1中的每个点,我们需要在 P ˉ k \bar{P}_k Pˉk中找到最近邻点(这个时候他们的时间戳都是 t k + 1 t_{k+1} tk+1,因此可以进行匹配)。
下图表示了如何寻找边缘点构成边缘线
以及如何寻找平面点构成平面
。
边缘点与边缘线:在a中, i i i是 E ~ k + 1 \widetilde{E}_{k+1} E k+1中的一个点, j j j是 P ˉ k \bar{P}_k Pˉk中与 i i i最近邻点
, l l l是 j j j相邻两次扫描
中与 i i i最近邻的点
,也就是 j j j和 l l l不是同一次
scan扫描得到的点(一次scan扫描只能包含边缘线中的一个点,否则它就不是边缘线了,相邻两次扫描是为了防止运动畸变过大导致边缘线特征提取不正确
,因为构造的问题,使用的激光在不同的scan下同一方位角对应时间戳的差距还是挺大的,近似一个scan周期)。因此 j j j和 l l l构成了 i i i对应的边缘线,并且他们均为 P ˉ k \bar{P}_k Pˉk中的边缘点。
点 i , j , l i,j,l i,j,l分别所在的集合
: i i i属于 E ~ k + 1 \widetilde{E}_{k+1} E k+1, j j j和 l l l属于 P ˉ k \bar{P}_k Pˉk,并且不同的scan线中。
平面点与平面:在图b中, i i i是 H ~ k + 1 \widetilde{H}_{k+1} H k+1中的一个点, j j j是 P ˉ k \bar{P}_k Pˉk中与 i i i最近邻点
,为了确定一个平面,至少需要三个不在同一直线上的点
。 l l l是与 j j j同一次scan扫描中与 i i i最相邻的点, m m m是 j j j相邻两次scan扫描中与 i i i最近邻的点,也就是 j j j和 m m m不是同一次scan扫描得到的点, j j j和 l l l是同一次scan扫描的点。 j j j、 l l l和 m m m构成了 i i i对应的平面,并且他们均为 P ˉ k \bar{P}_k Pˉk中的平面点。
点 i , j , l , m i,j,l,m i,j,l,m分别所在的集合
: i i i属于 E ~ k + 1 \widetilde{E}_{k+1} E k+1, j j j、 l l l和 m m m属于 P ˉ k \bar{P}_k Pˉk,对应的scan前面分析过了。
根据匹配的原理,可以构造优化问题:求解变换关系 T T T使边缘点和边缘线距离最短,平面点和平面距离最短
对于点与线的距离计算有:
叉乘表示向量组成的平行四边形面积,面积/边 = 高。这里的高就是距离
公式计算如下
X ~ k + 1 , i L \widetilde{X}^L_{k+1,i} X k+1,iL表示迭代过程中重投影的第 k + 1 k+1 k+1帧数据中的点,时间戳由 t X k + 1 , i t_{X_{k+1,i}} tXk+1,i变换到第 k + 1 k+1 k+1帧数据的开始 t k + 1 t_{k+1} tk+1,使用了匀速运动模型。
X ˉ k , j L \bar{X}^L_{k,j} Xˉk,jL表示经过校正的第 k k k帧数据,经过重投影之后所有点的时间戳均为第 k k k帧数据的末尾 t k + 1 t_{k+1} tk+1。
d E = ∣ ( X ~ k + 1 , i L − X ˉ k , j L ) × ( X ˉ k + 1 , i L − X ˉ k , l L ) ∣ ( X ˉ k , j L − X ˉ k , l L ) d_E=\frac { |(\widetilde{X}^L_{k+1,i}-\bar{X}^L_{k,j}) \times(\bar{X}^L_{k+1,i}-\bar{X}^L_{k,l})| } { (\bar{X}^L_{k,j}-\bar{X}^L_{k,l}) } dE=(Xˉk,jL−Xˉk,lL)∣(X k+1,iL−Xˉk,jL)×(Xˉk+1,iL−Xˉk,lL)∣
对于点和平面距离有:
叉乘表示向量组成的平行四边形面积,叉乘再点乘表示立体的体积,体积/面积 = 高。这里的高就是距离。
公式如下,说一下每个点所处的时间戳吧,
X ~ k + 1 , i L \widetilde{X}^L_{k+1,i} X k+1,iL表示迭代过程中重投影的第 k + 1 k+1 k+1帧数据中的点,时间戳由 t X k + 1 , i t_{X_{k+1,i}} tXk+1,i变换到第 k + 1 k+1 k+1帧数据的开始 t k + 1 t_{k+1} tk+1,使用了匀速运动模型。
X ˉ k , j L \bar{X}^L_{k,j} Xˉk,jL表示经过校正的第 k k k帧数据,经过重投影之后所有点的时间戳均为第 k k k帧数据的末尾 t k + 1 t_{k+1} tk+1。
d H = ∣ ( X ~ k + 1 , i L − X ˉ k , j L ) ( ( X ˉ k , j L − X ˉ k , l L ) × ( X ˉ k , j L − X ˉ k , m L ) ) ∣ ( X ˉ k , j L − X ˉ k , l L ) × ( X ˉ k , j L − X ˉ k , m L ) d_H=\frac{|(\widetilde{X}^L_{k+1,i}-\bar{X}^L_{k,j}) ((\bar{X}^L_{k,j}-\bar{X}^L_{k,l}) \times{(\bar{X}^L_{k,j}-\bar{X}^L_{k,m})})|} {(\bar{X}^L_{k,j}-\bar{X}^L_{k,l}) \times{(\bar{X}^L_{k,j}-\bar{X}^L_{k,m})}} dH=(Xˉk,jL−Xˉk,lL)×(Xˉk,jL−Xˉk,mL)∣(X k+1,iL−Xˉk,jL)((Xˉk,jL−Xˉk,lL)×(Xˉk,jL−Xˉk,mL))∣
可以参考下面的图理解
理想下,距离均为0,也就是边缘点位于边缘线,平面点位于平面。但这是不可能的。只能找到一个不为0的最小值。
根据特征点可以进行运动估计,这个运动估计是通过相邻两帧激光雷达点云数据估计两帧激光雷达之间的运动,这个运动其实就是我们前面多次提到的变换关系 T T T,它描述了相邻两帧点云数据(注意畸变校正与否的问题,时间戳)的变换关系,其实就对应着在获取到相邻两帧点云数据时激光的位姿变换
,也就是所谓的运动,经过累积,就可以形成从开始到当前的激光运动,构成激光里程计。
假设激光处于匀速线运动、角运动状态
。
下面的表示方法和论文中稍有不同,请注意
t k t_{k} tk表示第 k k k次sweep的开始时间。
T k , k + 1 L T^L_{k,k+1} Tk,k+1L表示激光点云数据在 [ t k , t k + 1 ] [t_{k},t_{k+1}] [tk,tk+1]之间的位姿变换。该位姿变换处于3维空间,拥有6个自由度,包含了平移和旋转
。 T k , k + 1 L T^L_{k,k+1} Tk,k+1L的定义如下
T k , k + 1 L = [ θ x , θ y , θ z , t x , t y , t z ] T T^L_{k,k+1}=[\theta_x,\theta_y,\theta_z,t_x,t_y,t_z]^T Tk,k+1L=[θx,θy,θz,tx,ty,tz]T
给第 i i i个点 X k , i X_{k,i} Xk,i,属于 P k P_{k} Pk,时间戳为 t a t_a ta。对应的位姿变换为 T k , a L T^L_{k,a} Tk,aL(这个量和激光的位姿变换是存在一定转换的,不一定直接相等),表示激光点云数据在 [ t k , t a ] [t_{k},t_a] [tk,ta]之间的位姿变换。通过线性插值, T k , a L T^L_{k,a} Tk,aL可以由 T k , k + 1 L T^L_{k,k+1} Tk,k+1L得到
T k , a L = t a − t k t k + 1 − t k T k , k + 1 L T^L_{k,a}=\frac{t_{a}-t_k}{t_{k+1}-t_k}T^L_{k,k+1} Tk,aL=tk+1−tkta−tkTk,k+1L
根据假设的匀速运动模型,因此可以得到
时间戳为 t a t_a ta的点 X k , i X_{k,i} Xk,i 和 投影到第 k k k次sweep开始的点 X ~ k , i \widetilde{X}_{k,i} X k,i(时间戳为 t k t_k tk)变换关系。这里和前面的定义能稍稍不一样,但是都一样,只不过为了方便表示,投影到 t k t_k tk时刻。
那么可以得到关系式如下,这里的点 X k , i X_{k,i} Xk,i均为 P k P_{k} Pk中的特征点,也就是进一步属于 E k E_k Ek, H k H_k Hk,对应时刻为 t a t_a ta,而点 X ~ k , i \widetilde{X}_{k,i} X k,i为 E ~ k \widetilde{E}_k E k, H ~ k \widetilde{H}_k H k中的特征点,对应时刻为 t k t_k tk。
X k , i L = R k , a L X ~ k , i + t k , a L X^L_{k,i}=R^L_{k,a}\widetilde{X}_{k,i}+t^L_{k,a} Xk,iL=Rk,aLX k,i+tk,aL
上面的 R k , a L R^L_{k,a} Rk,aL和 t k , a L t^L_{k,a} tk,aL可以通过 T k , a L T^L_{k,a} Tk,aL得到。分别表示旋转(使用RPY欧拉角构造)和平移(直接对应)。
对应的点云坐标转换表示图如下
刚才是不是谈到了 T a , k L T^L_{a,k} Ta,kL,这个是干嘛的呢?
根据 X k , i L = R k , a L X ~ k , i + t k , a L X^L_{k,i}=R^L_{k,a}\widetilde{X}_{k,i}+t^L_{k,a} Xk,iL=Rk,aLX k,i+tk,aL
可以得到 R a , k L ( X k , i L − t k , a L ) = X ~ k , i R^L_{a,k}(X^L_{k,i}-t^L_{k,a})=\widetilde{X}_{k,i} Ra,kL(Xk,iL−tk,aL)=X k,i
上面的 R a , k L R^L_{a,k} Ra,kL和 t k , a L t^L_{k,a} tk,aL可以通过 T a , k L T^L_{a,k} Ta,kL得到。 T a , k L T^L_{a,k} Ta,kL和 T k , a L T^L_{k,a} Tk,aL是一组逆运算。平移量可以直接反,但是旋转需要角度和变换顺序同时取反。
因此可以将之前的边缘点和边缘线距离计算,平面点和平面距离计算简化为下面的公式
f E ( X k , i L , T k , k + 1 L ) = d E , X k , i L ∈ E k + 1 f_E(X^L_{k,i},T^L_{k,k+1})=d_E,X^L_{k,i}\in{E_{k+1}} fE(Xk,iL,Tk,k+1L)=dE,Xk,iL∈Ek+1
f H ( X k , i L , T k , k + 1 L ) = d H , X k , i L ∈ H k + 1 f_H(X^L_{k,i},T^L_{k,k+1})=d_H,X^L_{k,i}\in{H_{k+1}} fH(Xk,iL,Tk,k+1L)=dH,Xk,iL∈Hk+1
将所有的特征点和对应的区域距离公式组合,可以得到一个
f ( T k , k + 1 L ) = [ f E ( X k , a 1 L , T k , a 1 L ) f E ( X k , a 2 L , T k , a 2 L ) . . . . . . f H ( X k , a 1 L , T k , a 1 L ) f H ( X k , a 2 L , T k , a 2 L ) ] = [ d E , a 1 d E , a 2 . . . . . . d H , a 1 d H , a 2 ] = d f(T^L_{k,k+1})=\begin{bmatrix}f_E(X^L_{k,a_1},T^L_{k,a_1}) \\f_E(X^L_{k,a_2},T^L_{k,a_2}) \\...... \\f_H(X^L_{k,a_1},T^L_{k,a_1}) \\f_H(X^L_{k,a_2},T^L_{k,a_2}) \end{bmatrix}=\begin{bmatrix}d_{E,a1} \\d_{E,a2} \\...... \\d_{H,a1} \\d_{H,a2} \end{bmatrix}={d} f(Tk,k+1L)=⎣⎢⎢⎢⎢⎡fE(Xk,a1L,Tk,a1L)fE(Xk,a2L,Tk,a2L)......fH(Xk,a1L,Tk,a1L)fH(Xk,a2L,Tk,a2L)⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡dE,a1dE,a2......dH,a1dH,a2⎦⎥⎥⎥⎥⎤=d
这是一个非线性优化问题,可以通过GN求解,直到d最小化。
J = ∂ f / ∂ T k , k + 1 L J=\partial{f}/\partial{T^L_{k,k+1}} J=∂f/∂Tk,k+1L
J T J Δ T k , k + 1 L = − J T d J^TJ\Delta{T^L_{k,k+1}}=-J^Td JTJΔTk,k+1L=−JTd
基本上都是我们之前介绍的流程,多说一句,对于第 k k k帧数据 P k P_{k} Pk,会使用估计的位姿变换投影到 t k + 1 t_{k+1} tk+1时刻得到 P ˉ k \bar{P}_{k} Pˉk,供下一次估计帧间运动使用。
累计一定帧数目的点云数据才会进行建图,频率较低,但是精度很高。
目的:将点云数据融入到世界地图中,精确估计激光在世界坐标系的位姿。
与里程计相比,这里构建边缘线,平面时使用的点数大大增加,因此需要采用其他方法得到线
向量,法
向量。
根据数学知识,可以得到一个区域的三维点坐标分布与这些点三维坐标形成的协方差矩阵是存在一定关系的。对应的话就是
对于在近似一条线上的点,它们的协方差矩阵中特征值存在两小一大
( λ 1 > > λ 2 > λ 3 \lambda_1>>\lambda_2>\lambda_3 λ1>>λ2>λ3),其中 λ 1 \lambda_1 λ1对应的特征向量就是这些点所在的线
向量。
对于在近似平面的点,它们的协方差矩阵中特征值存在两大一小
( λ 1 > λ 2 > > λ 3 \lambda_1>\lambda_2>>\lambda_3 λ1>λ2>>λ3),其中 λ 3 \lambda_3 λ3对应的特征向量就是这些点所在平面的法
向量。
然后可以建立 P ˉ k \bar{P}_{k} Pˉk中点和地图中点形成线, P ˉ k \bar{P}_{k} Pˉk中点和地图中点形成面的距离关系,使用非线性优化同样可以进一步得到更精确的位姿变换。
P ˉ k \bar{P}_{k} Pˉk的点都含有同一个时间戳,已经经过校正,暂时不需要再使用匀速运动模型,但是得到精确化位姿之后会将 P ˉ k \bar{P}_{k} Pˉk进一步通过 T k W T^{W}_{k} TkW(表示第 k k k帧点云数据从局部坐标系 L L L到世界坐标系 W W W的变换关系)转换到地图中,并且使用体素滤波器对点云数据进行下采样。
位姿的组合如下面所示,蓝色
表示建图算法得到的位姿变换 T k W T^W_k TkW。橘色
表示通过里程计算法计算得到粗略的位姿变换 T k + 1 L T^L_{k+1} Tk+1L。
LOAM整体框架如下
点云注册 :构造匀速
模型,去除不可靠
点,提取点云特征
。
里程计 :帧
点云配准,计算里程计
信息。
建图 :局部
点云融合到全局
地图,计算精确
位姿。
坐标发布 :发布坐标
信息,供显示使用。每个节点程序同样也在发布坐标转换!
LOAM的优点:
将里程计和建图分隔开,一个高频低精
(处理每次帧数据),一个低频高精
(累积一定次数)
整理框架是串行结构,将整个问题逐步划分为多个层次
。
可实时建图的开源3D Lidar SLAM
LOAM的缺点:
点云特征处理
可进一步改善:运动的人等物体
回环
检测
假设匀速
运动模型
Zhang J , Singh S . Low-drift and real-time lidar odometry and mapping[J]. Autonomous Robots, 2017, 41(2):401-416.
Zhang J , Singh S . LOAM: Lidar Odometry and Mapping in Real-time[C]// Robotics: Science and Systems Conference. 2014.