R3live笔记:从代码看lio线程

r3live的LIO部分主要继承r2live、fast-lio部分,ros中主要体现在前端r3live_LiDAR_front_end和后端r3live_mapping节点中,对应代码

  • src/loam/LiDAR_front_end.cpp
  • src/r3live.cpp

/************************************************************************************************************************************************/

r3live_LiDAR_front_end

特征提取总体概述:

原始点云输入->对其进行初步筛选

  • 1.按线分,只取线内点(如avia是6线),其他点判定为异常点
  • 2.x、y、z的值超1e8的点判定为异常点
  • 3.x<0.7,nearing点,异常,x>2.0, 异常
  • 4.tag,tag是livox雷达custom数据类型下的一个标签,是一个二进制,表征的是回波信息和造点信息
    官网显示avia好像这个量没有实值,所以代码中这块意义不大
  • 5.| 与上一点的距离 | > 1e7, 异常

筛选完之后得到的全是有效点,然后将其按线存储起来
接下来,按线提取特征
{
间隔3个点采样
判断点是不是在盲区,是则为异常点(只针对第一个点)
面特征直接得出,给到lio线程
}

1.获取参数, 定义相关变量,定义了几个全局变量角度值,下面会用到
    jump_up_limit = cos( jump_up_limit / 180 * M_PI );      // cos(170度)
    jump_down_limit = cos( jump_down_limit / 180 * M_PI );  // cos(8度)
    cos160 = cos( cos160 / 180 * M_PI );                    // cos(160度)
    smallp_intersect = cos( smallp_intersect / 180 * M_PI );// cos(172.5度)
2. 接收原始激光点云并处理, 提取角点特征和面特征,以MID为例:

订阅/livox/lidar 原始数据,在回调函数中转换数据, 并 提 取 角点特征和面特征

        sub_points = n.subscribe( "/livox/lidar", 1000, mid_handler, ros::TransportHints().tcpNoDelay() );

mid_handler:
点云格式转换(ros下sensor_msgs::PointCloud2格式 -> pcl::PointCloud< PointType >)

   pcl::PointCloud< PointType > pl;    // 存放Lidar点的一维数组
    pcl::fromROSMsg( *msg, pl ); // 通过PointCloud2格式的msg初始化PointXYZINormal的pl
    // 其中PointType为pcl::PointXYZINormal

定义提取的角点和平面点变量

   pcl::PointCloud< PointType > pl_corn, pl_surf;  // 保存提取的角点和平面点
    uint plsize = pl.size() - 1;    // Lidar点数量
    pl_corn.reserve( plsize );  // 预留size
    pl_surf.reserve( plsize );  // 预留size
    types.resize( plsize + 1 );

遍历msg中的前n-1个点,保存在types中

    for ( uint i = 0; i < plsize; i++ )
    {
   
        types[ i ].range = pl[ i ].x;   // 
        vx = pl[ i ].x - pl[ i + 1 ].x; // 相邻两点做差
        vy = pl[ i ].y - pl[ i + 1 ].y; // 得到两点构成
        vz = pl[ i ].z - pl[ i + 
R3LIVE是一种激光-惯性-视觉结合的SLAM算法,被认为是非常经典的文章\[1\]。该算法使用了IMU、相机和激光雷达三个传感器,每个传感器都有不同的作用。R3LIVE代码流程可以概括为以下几个部分。 首先是前言部分,其中介绍了R3LIVE算法的结构和各个传感器的作用\[1\]。 接下来是节点与话题的绘图部分,通过绘制节点和话题的图形,可以清晰地看到R3LIVE中的两个节点:/r3live_LiDAR_front_end和/r3live_mapping\[2\]。 然后是主函数部分,该部分在FAST-LIO2中已经详细介绍过,所以在R3LIVE中不再过多介绍\[3\]。 最后是重点部分,即VIO部分。在这部分中,R3LIVE算法进行了详细的操作,但由于篇幅限制,无法在这里进行详细介绍。建议参考相关文献或代码来深入了解R3LIVE的VIO部分\[3\]。 总之,R3LIVE是一种激光-惯性-视觉结合的SLAM算法,其代码包括前言部分、节点与话题的绘图部分、主函数部分和VIO部分。详细的代码解析可以参考相关文献或代码资源。 #### 引用[.reference_title] - *1* *2* [R3LIVE代码详解(一)](https://blog.youkuaiyun.com/lovely_yoshino/article/details/126572997)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [R3LIVE代码详解(三)](https://blog.youkuaiyun.com/lovely_yoshino/article/details/126676059)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值