VINS-Mono代码学习记录(一)

亦凉 2023-05-30 08:41 135阅读 0赞

写在前面的话

看代码真是一个令人头疼的过程,由于代码量很大,而脑子又不够使,看了总是忘,忘了又接着看,所以还是决定写博客来记录一下这个过程,也方便自己日后回忆是咋学的,哈哈哈。
本文不对理论进行分析啦,对于理论部分,自己主要参考:崔华坤的《VINS论文推导及代码解析》,这份资料相对于其他参考资料的好处就是给出了很多公式的详细的推导过程,这对于是小白的我真的是非常好哇!
有需要的朋友请给我留言哦!好吧,下面就开始来整一整吧!

-—————————————————————分割线———————————————————————-
对于ROS版本的project,根据运行时的启动命令来入手,利用数据集来运行算法的命令为:

  1. roslaunch vins_estimator euroc.launch
  2. roslaunch vins_estimator vins_rviz.launch
  3. rosbag play your path】#你的数据集存放的路径

查看euroc.launch文件如下:

  1. <launch>
  2. <arg name="config_path" default = "$(find feature_tracker)/../config/euroc/euroc_config.yaml" />
  3. <arg name="vins_path" default = "$(find feature_tracker)/../config/../" />
  4. <node name="feature_tracker" pkg="feature_tracker" type="feature_tracker" output="log">
  5. <param name="config_file" type="string" value="$(arg config_path)" />
  6. <param name="vins_folder" type="string" value="$(arg vins_path)" />
  7. </node>
  8. <node name="vins_estimator" pkg="vins_estimator" type="vins_estimator" output="screen">
  9. <param name="config_file" type="string" value="$(arg config_path)" />
  10. <param name="vins_folder" type="string" value="$(arg vins_path)" />
  11. </node>
  12. <node name="pose_graph" pkg="pose_graph" type="pose_graph" output="screen">
  13. <param name="config_file" type="string" value="$(arg config_path)" />
  14. <param name="visualization_shift_x" type="int" value="0" />
  15. <param name="visualization_shift_y" type="int" value="0" />
  16. <param name="skip_cnt" type="int" value="0" />
  17. <param name="skip_dis" type="double" value="0" />
  18. </node>
  19. </launch>

可以看到给出了两个arg:config_path、vins_path的路径,feature_tracker、vins_estimator、pose_graph三个nodes的信息。启动euroc.launch文件就启动了这三个nodes啦。
查看vins_rviz.launch文件如下:

  1. <launch>
  2. <node name="rvizvisualisation" pkg="rviz" type="rviz" output="log" args="-d $(find vins_estimator)/../config/vins_rviz_config.rviz" />
  3. </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的内容吧。

发表评论

表情:
评论列表 (有 0 条评论,135人围观)

还没有评论,来说两句吧...

相关阅读

    相关 暑假学习记录

    在家的第一个星期没有学什么东西,但是保持了放假前的习惯,每天都会阅读一些书目,目前正在重新阅读四大名著,下星期打算正式的学习安装配置环境。 <table> <tbody>

    相关 VINS-Mono代码学习记录

    写在前面的话 看代码真是一个令人头疼的过程,由于代码量很大,而脑子又不够使,看了总是忘,忘了又接着看,所以还是决定写博客来记录一下这个过程,也方便自己日后回忆是咋学的,哈

    相关 NFC学习记录

    随着电子钱包等的类似需求的提出,最近几年NFC(near field communication 近场通信)正在开始慢慢普及。由于工作的需要,现在正在学习NFC相关的知识,先将

    相关 node学习记录

    node的特点:它作为js的运行平台,node保留了前端浏览器js那些熟悉的接口,依旧基于作用于和原型链,区别在于它将前端中广泛应用的思想迁移到服务器。 异步I/O: