mapOptimization函数是LEGO-LOAM算法中的一个关键函数,用于进行建图和位姿优化的迭代优化过程。下面详细解释mapOptimization函数的主要步骤: 1.匹配点云:首先,输入的点云数据将分为地图点云和当前帧点云。mapOptimization函数将对当前帧点云进行特征提取,并与地图点云进行匹配,以估计当前帧的位姿。 2.匹配点云滤波:为...
不同的是,LeGO-LOAM将LOAM中负责点云特征提取的scanRegistration节点和负责scan-to-scan匹配的laserOdometry节点整合为featureAssociation节点,增加imageProjection节点,同时在mapOptimization节点中开辟闭环检测与全局优化线程。各节点的具体功能如下: imageProjection节点负责将原始点云投影为深度图,并利用深度图进行快速的地面点...
不同的是,LeGO-LOAM将LOAM中负责点云特征提取的 scanRegistration 节点和负责scan-to-scan匹配的 laserOdometry 节点整合为 featureAssociation 节点,增加 imageProjection 节点,同时在 mapOptimization 节点中开辟闭环检测与全局优化线程。各节点的具体功能如下: 2、主要方法及代码实现2.1 点云投影与目标分割 LiDAR直接输出...
主要的功能是在run函数里面 intmain(intargc,char** argv){ros::init(argc, argv,"lego_loam");ROS_INFO("\033[1;32m--->\033[0m Map Optimization Started.");mapOptimization MO;// 1.进行闭环检测与闭环的功能std::threadloopthread(...
首先又是构造了一个lego_loam::mapOptimization MO,然后开了两个新线程分别进行ScanContext回环检测和可视化,接下来又是一个死循环执行MO.run()。 先来看lego_loam::mapOptimization的构造函数: mapOptimization::mapOptimization():nh("~"){// 用于闭环图优化的参数设置,使用gtsam库ISAM2Paramsparameters;parameters...
transformFusion节点负责将高频运行的featureAssociation节点和低频运行的mapOptimization节点估计的位姿进行整合输出,保证高频的位姿输出。 2.代码 相比于Aloam,Lego-Loam的输入会多一个imu数据,这里首先介绍imu数据预处理 imu数据输入及预处理 imu数据主要用于做lidar点云去畸变以及odometry位姿估计; 首先对输入的imu数据去重...
void mapOptimization::performLoopClosure(void) { if (cloudKeyPoses3D->points.empty() == true) return; // try to find close key frame if there are any if (potentialLoopFlag == false) { if (detectLoopClosure() == true) { std::cout << std::endl; ...
Difference map storage method, can use pose graph optimization and use loop closure. 另外LeGO LOAM需要对激光设备的标定。应该是在预处理中,使用了将激光数据转化为range image的步骤中需要这些数据,只有正确的设定才能正确执行算法。 在源代码中对Velodyne的一些设备都有完整的参数设置,但是对速腾(rslidar)并没...
LEGO LOAM – map optimization the maximum time is : 0.427468 the mean of time is : 0.30585172524 For one input scan, it takes 0.0249s in average. It is about 25% faster than ALOAM. 对于每一个输入的扫描帧,处理时间大约是0.025秒,相对于ALOAM快了25%左右。另外由于在LeGO LOAM中使用了另外的...
根据闭环条件更新2d map 闭环条件由lego-loam 3d slam 触发和后端优化,根据3d位置更新 2d投影位置。 // 若存在闭环处理,则需要对位姿进行修正,将历史的的位姿用优化后的数据进行更新 void MapOptimization::correctPoses() { if (aLoopIsClosed == true) { ...