VINS-Mono代码阅读笔记(一):从Euroc数据集的运行开始

1.写在前面的话

最近开始学习VINS-Mono系统源码,也看到了网上有许多别人的的阅读笔记和代码介绍资料。对我自己而言,阅读前人的笔记能够很快帮助自己加深对系统以及代码的整体理解。但是,自己也要写阅读笔记,这样在写的过程中能加深自己的认识和对系统的理解。

VINS-Mono的代码路径:https://github.com/HKUST-Aerial-Robotics/VINS-Mono

VINS-Mono的概要介绍我们直接阅读github上README中指定的paper就可以进行了解,无需多言。我们进入它的github路径下,下载好代码后按照README中的描述,预装需要的软件、编译、下载数据集、运行,这样一步一步进行操作就可以将VINS-Mono玩起来。

2.使用Euroc数据运行VINS-Mono代码

我这里下载的是EuRoC MAV Dataset数据集中的MH_04_difficult.bag,按照README介绍。打开三个终端,运行命令如下。

在第一个终端中执行命令:

roslaunch vins_estimator euroc.launch

程序运行结果,截取前边一部分显示如下:

VINS-Mono代码阅读笔记(一):从Euroc数据集的运行开始_第1张图片

从以上显示日志中的NODES可以看出,这里启动了三个结点:feature_tracker、pose_graph、vins_estimator。

这里的euroc.launch文件代码如下:


    
	  
    
    
        
        
    

    
       
       
    

    
        
        
        
        
        
    

euroc.launch文件中确实启动了feature_tracker、vins_estimator和pose_graph这三个node,这个和上边的日志是对应的。并且可以看到,这个文件中设置的config_path配置文件是euroc_config.yaml,这个yaml文件中是系统运行的相关配置信息,特别要强调的是里边包含了相机和IMU之间的外参,这样的话在系统运行的时候就不需要对外参进行在线标定了

在第二个终端中执行命令:

roslaunch vins_estimator vins_rviz.launch

vins_rviz.launch代码如下:


    

其中启动了rviz,对应的配置文件为vins_rviz_config.rviz。

在第三个终端中执行如下命令播放下载的数据集bag:

rosbag play /home/zhuwsh/Desktop/SLAM/dataset/MH_04_difficult.bag

运行结果截图如下:

VINS-Mono代码阅读笔记(一):从Euroc数据集的运行开始_第2张图片

另外,也可以运行没有相机和IMU之间外参的脚本,这样的话在系统运行过程中就会在线标定相机和IMU之间的外参。替换掉上边第一项的输入,如下所示:

roslaunch vins_estimator euroc_no_extrinsic_param.launch

打开euroc_no_extrinsic_param.launch文件后,看到下面一行配置信息:

也就是说该launch文件对应的配置文件为euroc_config_no_extrinsic.yaml,在该yaml文件中确实看不到相机和IMU之间的外参。

3.节点间关系的简单分析

新开一个终端执行rqt_graph命令并在图形界面中选择Nodes/Topics(active),显示结果截图如下:

VINS-Mono代码阅读笔记(一):从Euroc数据集的运行开始_第3张图片

rqt_graph是一个很好用的工具,可以分析ros中正在运行的结点和结点之间的topic订阅和发布关系。在这里,我们可以先通过这张图来初步对VINS-Mono做个初步的了解。

图中总共有4个结点,这四个结点的topic订阅和发布情况如下:

1)播放bag的play结点

该结点发布/imu0和/cam0/image_raw两个topic:

/imu0:被vins_estimator结点订阅;

/cam0/image_raw:被feature_tracker和pose_graph两个结点订阅;

2)feature_tracker结点

feature_tracker结点订阅的topic:/cam0/image_raw

feature_tracker结点发布的topic:

1、/feature_tracker/feature_img

2、/feature_tracker/feature

3、/feature_tracker/restart

3)vins_estimator结点

vins_estimator订阅的topic:

1、/imu0

2、/feature_tracker/feature

3、/feature_tracker/restart

4、/pose_graph/match_points

vins_estimator发布的topic:

1、/vins_estimator/keyframe_pose

2、/vins_estimator/relo_relative_pose

3、/vins_estimator/extrinsic

4、/vins_estimator/odometry

5、/vins_estimator/keyframe_point

6、/vins_estimator/imu_propagate

7、/tf

8、/vins_estimator/point_cloud

9、/vins_estimator/path

10、/vins_estimator/camera_pose_visual

实际上,在代码中还会发布/vins_estimator/relocalization_path、/vins_estimator/history_cloud、/vins_estimator/key_poses、/vins_estimator/camera_pose这几个topic。

4)pose_graph结点

pose_graph订阅的topic:

1、/vins_estimator/imu_propagate

2、/vins_estimator/odometry

3、/cam0/image_raw

4、/vins_estimator/keyframe_pose

5、/vins_estimator/extrinsic

6、/vins_estimator/keyframe_point

7、/vins_estimator/relo_relative_pose

pose_graph发布的topic:

1、/pose_graph/match_image

2、/pose_graph/camera_pose_visual

3、/pose_graph/key_odometrys

4、/pose_graph/no_loop_path

5、/pose_graph/match_points

6、/pose_graph/base_path

7、/pose_graph/pose_graph

8、/pose_graph/pose_graph_path

9、/pose_graph/path_1

10、/pose_graph/path_2

11、/pose_graph/path_3

12、/pose_graph/path_4

13、/pose_graph/path_5

基于ROS开发的系统,其实分析代码的过程中,就是要梳理清楚topic在各个node之间的订阅和发布关系,以及接收到订阅的topic后对message的处理。系统的逻辑部分就在接收到message后的代码处理当中。

本篇笔记是对VINS-Mono系统运行的一个大概了解,后边的笔记中,我会根据以上运行结果和对系统中结点和topic的初步了解进行代码阅读理解。

VINS-Mono代码阅读笔记(二):feature_tracker代码阅读

你可能感兴趣的:(SLAM,ROS)