以读“pcd”:
读取4个激光雷达数据,input
       estimator.inputCloud(cloud_time, laser_cloud_list);
inputCloud展开:
 给每个激光雷达的三维点赋⼀个0-1值,为这个点的时间戳相对于这⼀帧点云的相对时
 间,这个与A-LOAM⼀致
	 f_extract_.calTimestamp(v_laser_cloud_in[i], laser_cloud);
聚类分割
 ⽤类似Lego LOAM的⽅法,给点云⽣成深度图
 深度优先搜索对上述深度图进⾏聚类 去除聚类中尺⼨过小或者过⼤的。
 ⽣成⼀个与上述图同样⼤的label_mat。
根据label_mat来去除点云中的⽆效点
	img_segment_.segmentCloud(laser_cloud, laser_cloud_segment, laser_cloud_outlier, scan_info);
特征提取
    f_extract_.extractCloud(laser_cloud_segment, scan_info, *feature_frame_ptr[i]);
求出的特征都保存到cloudFeature这样一个数据结构里
std::queue > > feature_buf_;
 feature_buf_报错了当前4个激光雷达的特征和时间戳,以队列+pair形式
 cloudFeature是字符串-点云对应格式,相当于给点云打一个label
typedef std::map cloudFeature;
 然后就是数据处理:
        processMeasurements();
展开里面有一个 process();和 pubOdometry(*this, cur_time_);
process()展开:
 如果没有先验外参,对于每个激光雷达,trackCloud以获得每帧的相对位移与绝对位姿,同每个激光雷达单独计算里程计
        pose_rlt_[n] = lidar_tracker_.trackCloud(prev_cloud_feature, cur_cloud_feature, pose_rlt_[n], cur_feature_.first, n);
pose_rlt_ 保存存了第i时刻 全部雷达的运动增量数据
 将上⾯得到的每个激光雷达的相对位姿加⼊到待优化队列中
		if (initial_extrinsics_.addPose(pose_rlt_) && (cir_buf_cnt_ == WINDOW_SIZE))//将上⾯得到的每个激光雷达的相对位姿加⼊到待优化队列中
对于每⼀个激光雷达,标定其到主激光雷达的外参的旋转
        if (initial_extrinsics_.calibExRotation(IDX_REF, n, calib_result)) // 标定其到主激光雷达的外参的旋转
成功则标定其到主激光雷达的外参的平移
        if (initial_extrinsics_.calibExTranslation(IDX_REF, n, calib_result)) // 标定其到主激光雷达的外参的平移
                    上一篇:java IO流的使用
                
下一篇:存储器介绍