Hdl_graph_slam论文及代码解析_后端优化

1. 针对性设计的平面提取方法

​ 因为这里使用的传感器其实一个组装的VLP16型多线激光雷达+相机+imu的背包激光扫描仪,作者考虑到LiDAR有一定的安置误差(提前肯定标定了的,e.g.倾角),而本文使用的又是室内场景平面,因此需要根据一个仪器安装的先验确定z轴方向指向哪里(默认传感器的坐标系为右前上,z轴指向天空)。得到这个倾角主要是为了修正LiDAR坐标系的z轴方向。这对后续的高度滤波和地面点判断都有一定的影响。

​ 在提取平面时,为了提升效率,首先基于扫描仪的高度,通过高度滤波将一定高度之外的点去掉,同时对剩下的点云计算法向量(通过提前性的点云剔除,可以提升这里的计算效率)进行过滤,和z方向进行比较,保留地面点(和z轴夹角小就说明方向近似),用RANSAC的方式拟合平面参数方程。 这样就可以以较快的速度从单帧点云中提取出一个合适的平面。注意:原文中写的是直接用RANSAC提取平面的,这个非常的费时间,实际操作并不是这样子来的。

B-Spline探秘

B-Spline(=Basic Spline)

需求

  • 需要利用样条函数拟合时相连续的数据,e.g. IMU data。
  • 利用样条函数拟合散点,做表面拟合,e.g. 构建mesh或者其他光滑的表面。
  • 路径规划中使用样条线对A*算法进行优化,得到更加平滑的路径。
  • 多传感器融合任务中,e.g.多传感器标定时,为了内插任意时刻的状态,实现多传感器的时间对齐,使用B-spline做内插。

IMU

IMU主要由加速度计和陀螺仪构成,因此IMU中包含的原始数据是角速度和线加速度,包含timestamp ang_vel_x ang_vel_y ang_vel_z lin_acc_x lin_acc_y lin_acc_z,然后通过积分的方式得到__orientation__,position,__velocity__信息。

  • 3轴IMU即只有3轴陀螺仪的IMU,其因为只有一个3轴陀螺仪,所以只能感知载体roll、pitch、yawl共3个自由度的姿态信息。
  • 6轴IMU在3轴IMU的基础上加装了3轴加速度计,因此在感知载体姿态的基础上,还能感知载体3个自由度上的加速度信息。
  • 9轴IMU在6轴IMu的基础上加装了3轴磁强计,由于3轴陀螺仪只能估计载体自身的相对位姿变化(通过加速度计也可获得载体的绝对roll和pitch),单凭3轴陀螺仪无法获取载体的全部姿态信息,而通过3轴磁强计就可以,本质上磁强计的感知原理类似于指南针。

激光雷达传感器

记录几种常见的激光雷达类型

机械式、固态式、半固态、单线激光雷达

loss functions

一些常见的损失函数调包就行,复杂的得自己写。损失函数中没有可训练的参数,因此通常直接使用torch.nn.functional中的函数即可。例如一些简单的损失函数:

1
2
3
4
import torch.nn as nn
cls_criterion = nn.CrossEntropyLoss()
dist_criterion = nn.MSELoss() # Use L2 loss function
hinge_criterion = nn.HingeEmbeddingLoss()

还可以参照pytorch-metric-learning这个库

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×