2021SC@SDUSC
visual_odometry_初探
上一章已经把visual_feature的大部分代码和功能,虽然没有完全把那一个节点讲明白,但是已经大致清楚整一份代码的思路。至于更多的细枝末节的算法思想,这些涉及比较多的数学知识,脱离了写博客的目的,就不再赘述了,留下了链接,等有空可以自己去探索。
而我们团队其他人还没有完成自己节点部分的分析,于是,经过商量,我来帮另外一个@同学分析他的部分。由于他还在分析initial文件夹下的内容,于是,我从这个节点本身出发,开始分析,避免分析冲突。
文章目录
1. 概览
这个节点其实就是通过视觉特征点输出里程计了,与激光有互动的地方主要体现在两点,一是带有激光雷达深度图获取到深度的视觉特征点,二是把之前激光IMU参与的IMUPreIntegration
模块输出的odometry
结果作为初始化的值。
visual_odometry
模块其实就是下面的lvi_sam_visual_odometry
节点。但在源代码中,这个模块的名字其实是visual_estimator
。在图中,可以看到,这个节点有着众多的输入和输出。可以说,是LVI-SAM的视觉核心模块。其中,有和前面的lidar模块中的lvi_sam_mapOptmization
和lvi_sam_PreIntegration
,以及视觉的其他模块相关联。
这里可以再穿插一个小知识,是我在看这个节点收获到的和ROS相关的知识。有人可能很好奇,为什么节点源代码的文件名和这个图中实际运行时的节点名不一致?在前面blog的源码分析体会中,我写过是因为launch
中定义了节点的名字,但是如果看过launch
文件可以知道(见下文),它并没有明确指定节点存放在哪个位置。只有在type
参数的时候写明了节点。其实,这是在编译的时候就已经指明了节点的type
,也可以说是节点的唯一名字。编译的时候,CMakeLists
已经列好了编译的源代码文件位置和节点名称(见下文)。
launch
文件:
<launch>
<arg name="project" default="lvi_sam"/>
<!-- Lidar odometry param -->
<rosparam file="$(find lvi_sam)/config/params_lidar.yaml" command="load" />
<!-- VINS config -->
<param name="vins_config_file" type="string" value="$(find lvi_sam)/config/params_camera.yaml" />
<!-- Lidar odometry -->
<node pkg="$(arg project)" type="$(arg project)_imuPreintegration" name="$(arg project)_imuPreintegration" output="screen" respawn="true"/>
<node pkg="$(arg project)" type="$(arg project)_imageProjection" name="$(arg project)_imageProjection" output="screen" respawn="true"/>
<node pkg="$(arg project)" type="$(arg project)_featureExtraction" name="$(arg project)_featureExtraction" output="screen" respawn="true"/>
<node pkg="$(arg project)" type="$(arg project)_mapOptmization" name="$(arg project)_mapOptmization" output="screen" respawn="true"/>
<!-- Visual feature and odometry -->
<node pkg="$(arg project)" type="$(arg project)_visual_feature" name="$(arg project)_visual_feature" output="screen" respawn="true"/>
<node pkg="$(arg project)" type="$(arg project)_visual_odometry" name="$(arg project)_visual_odometry" output="screen" respawn="true"/>
<node pkg="$(arg project)" type="$(arg project)_visual_loop"