前言
OpenVINS是基于MSCKF的開源VIO算法,有非常詳細的官網文檔可以學習使用,將來一段時間的主要實踐工作,就是深度掌握這份開源代碼。
https://docs.openvins.com/
一、環境配置與Euroc數據集運行
我的環境是Ubuntu20.04,ROS1,參看https://docs.openvins.com/gs-installing.html進行配置下載就行,Euroc數據集從OpenVINS支持數據集那里能夠直接下載。
https://docs.openvins.com/gs-datasets.html#gs-data-euroc
關于Euroc的運行,我下載的最新版本OpenVINS好像沒有pgeneva_ros_eth.launch ,網上很多博客可能沒辦法直接運行。不過參考這個博客就行。
https://blog.csdn.net/PG__13/article/details/123323802
關于運行配置,主要都在subscribe.launch里面,通過配置不同參數,進行運行選項的選擇。
<launch><!-- what config we are going to run (should match folder name) --><arg name="verbosity" default="INFO" /> <!-- ALL, DEBUG, INFO, WARNING, ERROR, SILENT --><arg name="config" default="euroc_mav" /> <!-- euroc_mav, tum_vi, rpng_aruco --><arg name="config_path" default="$(find ov_msckf)/../config/$(arg config)/estimator_config.yaml" /><!-- mono or stereo and what ros bag to play --><arg name="max_cameras" default="2" /><arg name="use_stereo" default="true" /><arg name="bag_start" default="0" /> <!-- v1-2: 0, mh1: 40, mh2: 35, mh3: 17.5, mh4-5: 15 --><arg name="bag_rate" default="1" /><arg name="dataset" default="V1_01_easy" /> <!-- V1_01_easy, V1_02_medium, V2_02_medium --><arg name="dobag" default="false" /> <!-- if we should play back the bag --><arg name="bag" default="/media/patrick/RPNG\ FLASH\ 3/$(arg config)/$(arg dataset).bag" />
<!-- <arg name="bag" default="/home/patrick/datasets/$(arg config)/$(arg dataset).bag" />-->
<!-- <arg name="bag" default="/datasets/$(arg config)/$(arg dataset).bag" />--><!-- saving trajectory path and timing information --><arg name="dosave" default="false" /><arg name="dotime" default="false" /><arg name="path_est" default="/tmp/traj_estimate.txt" /><arg name="path_time" default="/tmp/traj_timing.txt" /><!-- if we should viz the groundtruth --><arg name="dolivetraj" default="false" /><arg name="path_gt" default="$(find ov_data)/$(arg config)/$(arg dataset).txt" /><!-- MASTER NODE! -->
<!-- <node name="ov_msckf" pkg="ov_msckf" type="run_subscribe_msckf" output="screen" clear_params="true" required="true" launch-prefix="gdb -ex run --args">--><node name="ov_msckf" pkg="ov_msckf" type="run_subscribe_msckf" output="screen" clear_params="true" required="true"><!-- master configuration object --><param name="verbosity" type="string" value="$(arg verbosity)" /><param name="config_path" type="string" value="$(arg config_path)" /><!-- world/filter parameters --><param name="use_stereo" type="bool" value="$(arg use_stereo)" /><param name="max_cameras" type="int" value="$(arg max_cameras)" /><!-- timing statistics recording --><param name="record_timing_information" type="bool" value="$(arg dotime)" /><param name="record_timing_filepath" type="string" value="$(arg path_time)" /></node><!-- play the dataset --><group if="$(arg dobag)"><node pkg="rosbag" type="play" name="rosbag" args="-d 1 -r $(arg bag_rate) -s $(arg bag_start) $(arg bag)" required="true"/></group><!-- record the trajectory if enabled --><group if="$(arg dosave)"><node name="recorder_estimate" pkg="ov_eval" type="pose_to_file" output="screen" required="true"><param name="topic" type="str" value="/ov_msckf/poseimu" /><param name="topic_type" type="str" value="PoseWithCovarianceStamped" /><param name="output" type="str" value="$(arg path_est)" /></node></group><!-- path viz of aligned gt --><group if="$(arg dolivetraj)"><node name="live_align_trajectory" pkg="ov_eval" type="live_align_trajectory" output="log" clear_params="true"><param name="alignment_type" type="str" value="posyaw" /><param name="path_gt" type="str" value="$(arg path_gt)" /></node></group></launch>
二、TUM數據集運行測試
TUM數據集也可以從OpenVINS支持數據集那里下載,運行命令主要也是參照subscribe.launch進行配置,因為OpenVINS原生支持TUM數據集,所以比較容易跑通。運行命令如下:
//開啟一個終端
roscore//開啟一個終端
rviz
//打開rviz后,再點擊左上角,open config,添加workspace/catkin_ws_ov/src/open_vins/ov_msckf/launch/display.rviz配置文件//開啟一個終端
source devel/setup.bash
roslaunch ov_msckf subscribe.launch config:=tum_vi dataset:=dataset-room1_512_16//在存放數據bag的文件夾內開啟一個終端
rosbag play dataset-room1_512_16.bag
有個真值的問題沒解決,運行Euroc的時候就發現了,RVIZ中沒有顯示真實軌跡,這里以TUM為例演示一下怎么顯示真實軌跡,Euroc數據集是同理的。將dolivetraj參數配置為true就行,因為OpenVINS里自帶了真實軌跡數據,會自動找到,但是如果使用其他數據集,則還需要改動真值路徑等參數。
roslaunch ov_msckf subscribe.launch config:=tum_vi dataset:=dataset-room1_512_16 dolivetraj:=true
此外,ov_eval中還有很多評估工具,需要單獨運行來使用,之后出一期專門學習一下這個。
3、VIRAL數據集配置運行
這是今天的重點部分,原生OpenVINS并不支持VIRAL數據集,但是VIRAL數據集作者曾經就在OpenVINS運行出過一個改動好的代碼,但是現在OpenVINS中launch文件經過改動了,因此也需要重新配置一番。
VIRAL支持的OpenVINS:https://github.com/brytsknguyen/open_vins.git
主要需要修改的地方有:配置文件添加,真實軌跡文件添加,數據集添加測試。
直接去VIRAL支持的OpenVINS里把ntuviral.rviz、run_ntuviral.launch粘貼到自己的OpenVINS中的open_vins/ov_msckf/launch文件夾下就行了。VIRAL作者已經將配置參數都寫到了run_ntuviral.launch里面。
運行命令
//打開一個終端
roscore//打開一個終端
roslaunch ov_msckf run_ntuviral.launch bagfile:=/home/merlincs/workspace/dataset/VIRAL/eee_01
//后面是bag的路徑
這一塊還是有問題,明天再搞了。。。