(2)设置了IMU预积分参数,以及gtsam中进行IMU预积分的类。 IMUPreintegration(){//订阅高频率的IMU原始数据subImu=nh.subscribe<sensor_msgs::Imu>(imuTopic,2000,&IMUPreintegration::imuHandler,this,ros::TransportHints().tcpNoDelay());//订阅低频率的激光雷达里程计数据(来自mapoptimzation)subOdometry=nh.subsc...
IMU预积分模块无论在VIO或者LIO中都是一个非常重要的模块。VIO或者LIO中的I,也就是Inertial指的是惯性,基本上在这类SLAM框架里指的就是IMU里程计。 IMU可以输出车辆坐标系下的三轴加速度、三轴角速度、三轴地磁计(九轴IMU)。我们都知道,加速度的积分是速度、速度的积分是距离,角速度的积分是角度,地磁计可以计...
if(!imuQueImu.empty()){imuIntegratorImu_->resetIntegrationAndSetBias(prevBiasOdom); 使用 现在 最优的bias 估计 重置 预积分 for(int i=0;i<(int)imuQueImu.size();++i){//步骤跟之前一致// 利用imuQueImu中的数据进行预积分 主要区别旧在于上一行的更新了biassensor_msgs::Imu*thisImu=&imuQueImu...
(lio_sam/mapping/odometry), 和预积分节点的增量位姿("odometry/imu_incremental") subLaserOdometry = nh.subscribe("lio_sam/mapping/odometry", 5, &TransformFusion::lidarOdometryHandler, this, ros::TransportHints().tcpNoDelay()); subImuOdometry = nh.subscribe(odomTopic+"_incremental", 2000, &Transf...
本篇博客重点解读LIO-SAM框架下IMU预积分功能数据初始化代码部分 LIO-SAM 的代码主要在其主目录内的src文件夹下的四个cpp文件,分别是: featureExtraction.cpp imageProjection.cpp imuPreintegration.cpp mapOptmization.cpp 每个cpp文件是一个独立的ROS节...
LIO-SAM利用IMU的测量数据,基于其运动学模型,对两帧激光雷达数据之间的IMU测量进行预积分。预积分的目的是将IMU的高频测量信息整合起来,得到在激光雷达帧间的相对位姿、速度变化。 误差状态卡尔曼滤波(ESKF):为了提高IMU预积分的精度和稳定性,LIO-SAM采用误差状态卡尔曼滤波。该滤波器可以对IMU测量中的噪声和误差进行...
│ imuPreintegration.cpp #IMU预积分,订阅雷达里程计和IMU数据,估计IMU偏置,进行雷达里程计、IMU预积分因子的图优化,输出IMU里程计。 │ mapOptmization.cpp #订阅雷达前端信息、GPS信息,进行点云配准,进行雷达里程计、全局GPS、回环检测因子的图优化。
IMU的预积分原理基于微分和积分的关系,通过对加速度计和陀螺仪的输出进行积分,可以估计出姿态的变化、速度和位置等信息。在实际应用中,由于IMU传感器输出的离散时间序列数据存在噪声和漂移等问题,直接对其进行积分会导致误差的累积。而预积分原理则是通过对IMU输出数据进行离散化处理,将连续的积分变为离散的求和,从而有效...
│ imuPreintegration.cpp#IMU预积分,订阅雷达里程计和IMU数据,估计IMU偏置,进行雷达里程计、IMU预积分因子的图优化,输出IMU里程计。 │ mapOptmization.cpp #订阅雷达前端信息、GPS信息,进行点云配准,进行雷达里程计、全局GPS、回环检测因子的图优化。
在imu预积分的节点中,在main函数里面 还有一个类的实例对象,那就是TransformFusionTF。 其主要功能是做位姿融合输出,最终输出imu的预测结果,与上节中的imu预测结果的区别就是: 该对象的融合输出是基于全局位姿的基础上再进行imu的预测输出。全局位姿就是 经过回环检测后的lidar位姿。