0. 简介
之前我们立了一个Flag,就是要对R3LIVE进行详细的分析,当时就提到R3LIVE作为一个非常经典的文章,和LVI-SAM一样都是一种激光–惯性–视觉结合的SLAM算法。对于R3LIVE而言结构还是挺清晰的,比如IMU,相机,激光雷达三个传感器分别的作用。下面我们来梳理一下整个R3LIVE算法的流程以及代码理解。
1. 前言
我们先来看一下代码多少钱一两博主绘制的节点与话题的绘图。
我们可以看到在R3LIVE中,node节点还是很清晰的,只有/r3live_LiDAR_front_end
和/r3live_mapping
两个节点。
可以看到/r3live_LiDAR_front_end
节点中只用到了雷达的相关信息,即通过FAST-LIO2的激光处理部分,然后发布处理后的点云/laser_cloud
,平面点/laser_cloud_flat
和角点/laser_cloud_sharp
信息
然后另一部分就是/r3live_mapping
节点,这个节点可以看到输入的信息不仅仅有雷达的信息(/laser_cloud_flat
),还有IMU(/livox/imu
)和视觉的信息(/camera/image_color/compressed
)。并在这个节点中完成融合,最终完成R3LIVE的稠密建图。
2. 从launch看起的R3LIVE
在R3LIVE中我们可以看到只有这三个launch文件,其中前两个是在线和离线的launch文件,我们这里主要看一下在线的包,离线的包其实就是比在线的少了一些参数配置。
…详情请参照古月居
<launch>
<!-- Subscribed topics -->
<param name="/LiDAR_pointcloud_topic" type="string" value= "/laser_cloud_flat" />
<param name="/IMU_topic" type="string" value= "/os_cloud_node/imu" />
<param name="/Image_topic" type="string" value= "/NotAvail" />
<param name="map_output_dir" type="string" value="$(env HOME)/r3live_output" />
<rosparam command="load" file="$(find r3live)/../config/r3live_config.yaml" />
<!-- set LiDAR type as ouster-64 spining LiDAR -->
<param name="/Lidar_front_end/lidar_type" type="int" value= "3" />
<param name="/Lidar_front_end/point_step" type="int" value="1" />
<param name="r3live_lio/lio_update_point_step" type="int" value="6" />
<node pkg="r3live" type="r3live_LiDAR_front_end" name="r3live_LiDAR_front_end" output="screen" required="true"/>
<node pkg="r3live" type="r3live_mapping" name="r3live_mapping" output="screen" required="true" />
<arg name="rviz" default="1" />
<group if="$(arg rviz)">
<node name="rvizvisualisation" pkg="rviz" type="rviz" output="log" args="-d $(find r3live)/../config/rviz/r3live_rviz_config_ouster.rviz" />
</group>
</launch>