VINS-Mono代码学习记录(一)
写在前面的话
看代码真是一个令人头疼的过程,由于代码量很大,而脑子又不够使,看了总是忘,忘了又接着看,所以还是决定写博客来记录一下这个过程,也方便自己日后回忆是咋学的,哈哈哈。
本文不对理论进行分析啦,对于理论部分,自己主要参考:崔华坤的《VINS论文推导及代码解析》,这份资料相对于其他参考资料的好处就是给出了很多公式的详细的推导过程,这对于是小白的我真的是非常好哇!
有需要的朋友请给我留言哦!好吧,下面就开始来整一整吧!
-—————————————————————分割线———————————————————————-
对于ROS版本的project,根据运行时的启动命令来入手,利用数据集来运行算法的命令为:
roslaunch vins_estimator euroc.launch
roslaunch vins_estimator vins_rviz.launch
rosbag play 【your path】#你的数据集存放的路径
查看euroc.launch文件如下:
<launch>
<arg name="config_path" default = "$(find feature_tracker)/../config/euroc/euroc_config.yaml" />
<arg name="vins_path" default = "$(find feature_tracker)/../config/../" />
<node name="feature_tracker" pkg="feature_tracker" type="feature_tracker" output="log">
<param name="config_file" type="string" value="$(arg config_path)" />
<param name="vins_folder" type="string" value="$(arg vins_path)" />
</node>
<node name="vins_estimator" pkg="vins_estimator" type="vins_estimator" output="screen">
<param name="config_file" type="string" value="$(arg config_path)" />
<param name="vins_folder" type="string" value="$(arg vins_path)" />
</node>
<node name="pose_graph" pkg="pose_graph" type="pose_graph" output="screen">
<param name="config_file" type="string" value="$(arg config_path)" />
<param name="visualization_shift_x" type="int" value="0" />
<param name="visualization_shift_y" type="int" value="0" />
<param name="skip_cnt" type="int" value="0" />
<param name="skip_dis" type="double" value="0" />
</node>
</launch>
可以看到给出了两个arg:config_path、vins_path的路径,feature_tracker、vins_estimator、pose_graph三个nodes的信息。启动euroc.launch文件就启动了这三个nodes啦。
查看vins_rviz.launch文件如下:
<launch>
<node name="rvizvisualisation" pkg="rviz" type="rviz" output="log" args="-d $(find vins_estimator)/../config/vins_rviz_config.rviz" />
</launch>
其中,启动了rvizvisualisation这个node。(对于这个node我还没看到具体的细节,后续看到了再补充)
执行运行代码的三条命令,利用rqt_graph
来查看所有的nodes和topics如下:共有4个nodes,椭圆里的内容表示为node,方框里的内容表示为topic,根据箭头的指向去看节点是发布还是订阅消息
1)播放bag的play结点
2)feature_tracker结点
这个node的入口在feature_tracker–>src–>feature_tracker_node.cpp 文件中,相对来说,这一块比较独立,比较好理解。
3)vins_estimator结点
这个node入口在vins_estimator–>src–>estimator_node.cpp 文件中,这个就是很大很长,做好熬的准备吧!
4)pose_graph结点
再来说一下为什么要这样开始来学习代码吧?其实自己一开始也是瞎搞,不知道哪里是头,从哪开始看会比较好,后来参考到说对于ROS工程,我们首先要清楚nodes 和topics有哪些,然后了解它们之间发送接收了什么messages,这些message做了什么处理,这样就OK了。突然心里一亮,本身看代码一般就是从main()入后,一步步看信息的流向。
另外来看一下代码结构吧!
核心算法都在feature_tracker和vins_estimator包中 。其它几个文件夹根据名字就可以知道大概是干嘛的啦,参数在config里,这个需要了解一下。
下一节先来看feature_tracker的内容吧。
还没有评论,来说两句吧...