openvins根据论文所说,构建开源代码库集成了 (1)流形上滑动窗口卡尔曼滤波 (2)在线相机内外参标定 (3)相机到惯性传感器的时间偏移校准 (4)不同SLAM landmark的表示方法 (5)一致的初始估计雅可比矩阵(FEJ)处理 (6)用于状态管理的模块化系统 (7)可扩展的可视化惯性系统模拟器 (8)用于算法评估的工具箱
在阅读代码时,各功能模块分类:
1、ov_core: 包含2d图像稀疏特征点跟踪 线性、G-N特征三角化 视觉-惯性估计器 (适用于任何相机和任何频率) 流形上的运算理论基础
2、ov_msckf: 【基于FEJ 的可拓展滑动窗口误差状态模型视觉-惯性估计器】 标准的MSCKF Camera-IMU 时间校准 FEJ 相机内参与外参校准 3d SLAM地标的不同表示方法
3、ov_eval: 包含轨迹对齐 轨迹绘制 轨迹精度一致性评估工具 Ros topic记录到文件
一:运行
使用开源算法进行测试
mkdir -p ~/workspace/catkin_ws_ov/src/
cd ~/workspace/catkin_ws_ov/src/
git clone https://github.com/rpng/open_vins/
cd ..
catkin build
报错:catkin command not found
sudo apt-get install python-catkin-tools
运行:
#开一终端
roscore
#再开一终端
source devel/setup.bash
rosrun rviz rviz -d ov_msckf/launch/display.rviz
rosrun rviz rviz #在左上角Open config 选择~/workspace/catkin_ws_ov/src/open_vins/ov_msckf/launch/display.rviz
#再开一终端
source devel/setup.bash
roslaunch ov_msckf pgeneva_serial_eth.launch
注意!!!这里rviz需要配置,否则显示不出来。
二:ov_msckf
1、首先观察CMakeLists.txt,可以看出有五个可执行文件,即主cpp函数。
if (catkin_FOUND)
add_executable(run_serial_msckf src/ros_serial_msckf.cpp)
target_link_libraries(run_serial_msckf ov_msckf_lib ${thirdparty_libraries})
add_executable(run_subscribe_msckf src/ros_subscribe_msckf.cpp)
target_link_libraries(run_subscribe_msckf ov_msckf_lib ${thirdparty_libraries})
add_executable(run_simulation src/run_simulation.cpp)
target_link_libraries(run_simulation ov_msckf_lib ${thirdparty_libraries})
else()
add_executable(run_simulation src/run_simulation.cpp)
target_link_libraries(run_simulation ov_msckf_lib ${thirdparty_libraries})
endif()
add_executable(test_sim_meas src/test_sim_meas.cpp)
target_link_libraries(test_sim_meas ov_msckf_lib ${thirdparty_libraries})
add_executable(test_sim_repeat src/test_sim_repeat.cpp)
target_link_libraries(test_sim_repeat ov_msckf_lib ${thirdparty_libraries})
其中主要使用的是run_serial_msckf.cpp,即按照顺序读取文件。
2、前端特征点提取
openvins的前端特征点主要有两种方式,KLT光流追踪与ORB特征,代码在ov_core/src/track文件夹中。
首先在VioManager.cpp的feed_measurement_imu函数对图像进行传入,构建了一个双端队列:std::deque<ov_core::CameraData> camera_queue
feed_measurement_imu -> track_image_and_update-> TrackKLT::feed_monocular ->