ROVIOLI教程
在VIO模式下运行ROVIOLI:配置文件、ROS话题、包/话题模式、可视化
在本教程中,我们使用ROVIOLI来构建一个地图,采用视觉惯性里程计(VIO)模式,即不使用任何定位。 ROVIOLI在VIO模式下有两种运行模式:
必要条件
运行ROVIOLI需要以下校准文件:
- 相机校准和IMU参数, Euroc数据集的示例文件
- finder localication 配置文件
estimator_config.yaml
从rosbag构建地图
对于这个教程,我们将从Euroc数据集中构建地图。 请访问Euroc数据集网站,并下载Machine Hall 01的bag文件。
修改rovioli.launch中的datasource_type为rosbag,指定datasource_rosbag的正确路径。 现在,启动一个roslaunch运行数据集:
source ~/maplab_ws/devel/setup.bash
roslaunch rovioli rovioli.launch
注意:
# 使用此标志来移除(或更改)相机话题的后缀(默认为:image_raw)。
vio_camera_topic_suffix=""
save_folder
是生成的VI地图将要保存的文件夹的名称。
在ROVIOLI完成并保存地图后,save_folder
应该是这样的:
$ tree save_folder
save_folder
├── metadata
├── resource_info
├── resources
└── vi_map
├── edges
├── landmark_index
├── missions
├── other_fields
├── vertices0
├── vertices1
├── ...
从rostopic构建地图
对于这个教程,我们将从Euroc数据集中构建地图。 请访问Euroc数据集网站,并下载Machine Hall 01的bag文件。
修改rovioli.launch中的datasource_type为rostopic。 现在,使用Euroc数据集作为实时源,调用:
source ~/maplab_ws/devel/setup.bash
roslaunch rovioli rovioli.launch
然后,在单独的终端中启动数据源:
rosbag play MH_01_easy.bag # or start your sensor node.
注意:
# 使用此标志来移除(或更改)相机话题的后缀(默认为:image_raw)。
vio_camera_topic_suffix=""
输出
默认情况下,姿势估计值会发布在以下列表中:
/maplab_rovio/T_G_I
/maplab_rovio/T_G_M
在没有定位时为单位矩阵。/maplab_rovio/T_M_I
/maplab_rovio/bias_acc
/maplab_rovio/bias_gyro
/maplab_rovio/velocity_I
可视化
使用这个RViz配置用于可视化最重要的ROVIOLI主题。
这里有一个启用/禁用maplab中某些组件可视化的最重要标志的列表。 ROVIOLI:
Maplab特征跟踪模块的可视化

Maplab的特征跟踪模块计算并匹配Brisk或FREAK特征,这些特征被地图构建器用于构建姿势图/VIMap。关键点检测和特征匹配的结果可以发布为ROS图像话题。
启用/禁用"使用以下标志:
feature_tracker_visualize_keypoint_detections
feature_tracker_visualize_feature_tracks
feature_tracker_visualize_keypoint_matches
feature_tracker_visualize_keypoints
feature_tracker_visualize_keypoints_individual_frames
话题:
# 对于每个帧 N,都使用一个单独的主题:
/tracking/keypoints_raw_cam{N}
/tracking/keypoint_matches_camera_{N}
/tracking/keypoint_outlier_matches_camera_{N}
T_M_I和T_G_I的可视化

这些标记可视化了每一帧的姿态估计(里程计= T_M_I,定位= T_G_I)。
启用/禁用"使用以下标志:
publish_debug_markers
话题:
/debug_T_G_I
/debug_T_M_I
VIMap和Localization的可视化


这些标记可视化了ROVIOLI正在构建的VIMap,以及定位模块发现的地标对应关系。
启用/禁用以下标志的使用:
rovioli_visualize_map
话题:
# 位姿图
/vi_map_baseframe
/vi_map_landmarks
/vi_map_vertices
/vi_map_edges/viwls
# 定位结果
/landmark_pairs
/loop_closures
/loopclosure_database
/loopclosure_inliers
在定位模式下运行ROVIOLI
在本教程中,我们将在定位模式下运行ROVIOLI。 这可以大大提高估计器的精度,并减少估计轨迹的漂移。
必要条件
与VIO的情况一样,您需要为传感器设置获取两个配置文件。 此外,您还需要: -一张用于定位的VI地图。为了在ROVIOLI中获得更好的结果,应该优化此映射并闭环。 -要运行的数据集。或者,可以使用实时来源。
准备定位地图
获取定位地图有两种方式:
- 通过在VIO模式下运行ROVIOLI中获取的VI地图。请参阅有关优化地图的教程。
- 或者,您可以在rovioli.launch中,将
optimize_map_to_localization_map
标志设置为true。
source ~/maplab_ws/devel/setup.bash
roslaunch rovioli rovioli.launch
这将保存一个经过优化的定位地图 save_folder_loc_map_localization
:
$ tree save_folder_loc_map_localization
save_folder_loc_map_localization
└── localization_summary_map
您可以在ROVIOLI中使用VI地图(完整地图)或定位摘要地图(仅包含与定位相关信息的摘要地图)进行定位。
运行使用定位功能的ROVIOLI
对于本教程,我们使用Euroc数据集网站上的Machine Hall 02数据集。 关于本地化地图,我们使用了 Machine Hall 01 数据集的优化 VI 地图,我们假设该地图已保存在 save_folder_loc_map_localization
下。(或者,您可以使用[[样本数据集]]页面上的未优化地图。但请注意,这样做将导致性能不如使用优化地图时的表现。)
修改rovioli.launch中的vio_localization_map_folder指向正确的地图路径。
现在,启动一个roslaunch运行数据集:
source ~/maplab_ws/devel/setup.bash
roslaunch rovioli rovioli.launch
save_folder_loc_map_localization
下的地图被用作定位的参考地图。 它可以是定位摘要地图(使用ROVIOLI中的optimize_map_to_localization_map
生成)或完整的VI地图(从ROVIOLI生成并使用maplab控制台进行优化)。 如果参数是空字符串,ROVIOLI将退回到VIO模式,即ROVIOLI将不执行任何定位。 当ROVIOLI完成后,VI地图将被存储在save_folder_with_localization
下。 如果您不希望保存生成的VI地图,您可以保持参数为空。
bash run_rovioli_localization "" save_map MH_02_easy.bag
ROVIOLI在定位期间的可视化
除了标准的ROVIOLI主题(如之前解释的那样),定位模式还向RViz添加了以下可视化主题:
/loopclosure_database
:循环闭合数据库中所有地标的点云。/loop_closures
:连接当前活动顶点与所有用于定位的地标的线条。/loopclosure_inliers
:最后一次成功定位中使用的所有地标的点云。/debug_T_G_I_raw_localization
:红色点表示成功定位发生的顶点位置。