基础内容贴推荐:
https://zhuanlan.zhihu.com/p/93814423
https://blog.csdn.net/weixin_39752599/article/details/105906652
https://zhuanlan.zhihu.com/p/95786850
论文:
http://udel.edu/~pgeneva/downloads/papers/c10.pdf
官方文档:
https://docs.openvins.com/
目录
OpenVINS项目包含一些核心计算机视觉代码以及基于过滤器的最新视觉惯性估计器。核心滤波器是扩展卡尔曼滤波器,可将惯性信息与稀疏的视觉特征轨迹融合在一起。这些视觉特征轨迹是利用多状态约束卡尔曼滤波器(MSCKF)滑动窗口公式融合而成的,该公式允许3D特征更新状态估计,而无需直接估计滤波器中的特征状态。受到基于图的优化系统的启发,所包含的过滤器具有模块化功能,可通过适当的基于类型的状态系统方便地进行协方差管理。
一. 前期安装🕒
-
入门指南-> 安装指南: https://docs.openvins.com/gs-installing.html
按照顺序安装opencv依赖,新建工作空间git clone openvins的工程文件,进行编译
(git clone原版github链接可能会慢,可以采用gitee导入已有库:https://gitee.com/hongliyu-lvliyu/open_vins) -
报错1:
在执行:
cmake -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
卡住到:
– IPPICV: Download: ippicv_2020_lnx_intel64_20191018_general.tgz
错误原因:
文件放置地址被墙
其他博主解释贴: https://blog.csdn.net/gadwgdsk/article/details/107423625
可以单独去下载这个压缩包放置到相关文件夹下
解决方法:
- 报错2:
在执行:
catkin build -DDISABLE_MATPLOTLIB=ON # build without viz
错误:
‘ROS_ERROR’ was not declared in this scope
ROS_ERROR("Unable to plot the state error, just returning..");
解决方法:
1) 按提示的路径找到该文件,看 .h 文件中头文件是否没有包含#include <ros/ros.h>
2) 在上段有warning:
WARNING: Your current environment's CMAKE_PREFIX_PATH is different from the cached CMAKE_PREFIX_PATH used the last time this
workspace was built.
按照warning提示进行
catkin clean
最后openvins编译顺利完成即可。
opencv的依赖并不一定非要下载,ROS自带的3.2可以编译通过
二. 进行测试
1. 下载数据集
数据集地址:https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
个人下载了Vicon Room 101,得到文件 V1_01_easy.bag
V1_01_easy.csv文件位于以下路径中,不需要单独进行下载。
~/catkin_ov/src/open_vins/ov_data/euroc_mav
2. 修改launch
-
新建一个路径,将 V1_01_easy.bag 放置进去,后续此地址用于修改launch
例如个人的放置位置为:~/vslam/datasets/euroc
-
修改launch文件:pgeneva_serial_eth.launch
文件位置:
~/catkin_ov/src/open_vins/ov_msckf/launch
修改其中两行:
<!-- bag parameters -->
<param name="path_bag" type="string" value="/home/zzx/vslam/datasets/euroc/V1_01_easy.bag" />
<param name="path_gt" type="string" value="$(find ov_data)/euroc_mav/V1_01_easy.csv" />
3. 运行
在openvins工程路径运行下列代码:
source devel/setup.bash
roslaunch ov_msckf pgeneva_serial_eth.launch
或者直接添加到bashrc
终端显示:
另外在launch文件夹下开新终端,运行:
rosrun rviz rviz -d display.rviz
rviz开启并显示:
三. 尝试连接自己的设备
1. 新在相同路径下(/catkin_ov/src/open_vins/ov_msckf/launch)建立一个新的launch文件;
参考 pgeneva_ros_eth.launch,连接自己的d435i相机,不使用数据包
主要变动:
<!-- MASTER NODE! -->
<node name="run_subscribe_msckf" pkg="ov_msckf" type="run_subscribe_msckf" output="screen" clear_params="true" required="true">
<!-- bag topics -->
<param name="topic_imu" type="string" value="/imu0" />
<param name="topic_camera0" type="string" value="/cam0/image_raw" />
<param name="topic_camera1" type="string" value="/cam1/image_raw" />
由于还没有做相机标定,所以先不改数据部分
启动realsense-ros后,rostopic list发现没有新的launch文件的三个topic,因此需要进一步修改 realsense-ros的launch文件。
2. 修改realsense-ros的launch文件
参考文献: https://blog.csdn.net/qq_41839222/article/details/86552367#t4
使用了d435i相机
要修改的文件为:rs_camera.launch
路径:/catkin_realsense-ros/src/realsense-ros/realsense2_camera/launch
(一开始修改了很久,之后才发现之前是二进制安装,运行的时候总是没有运行这个路径下的 rs_camera.launch)
- 需要修改的内容包括:
<arg name="unite_imu_method" default="copy"/> #IMU
<arg name="enable_infra" default="true"/>
<arg name="enable_infra1" default="true"/>
<arg name="enable_infra2" default="true"/> #对应上面2、3条
<arg name="enable_gyro" default="true"/> #陀螺仪
<arg name="enable_accel" default="true"/> #加速度
<arg name="enable_sync" default="true"/>
自己还改了所有带 width 和 height的部分,自己的打开之后这些都是 -1,但是看有的 博主是不改的
<arg name="fisheye_width" default="640"/>
<arg name="fisheye_height" default="480"/>
<arg name="depth_width" default="640"/>
<arg name="depth_height" default="480"/>
<arg name="confidence_width" default="640"/>
<arg name="confidence_height" default="480"/>
<arg name="infra_width" default="640"/>
<arg name="infra_height" default="480"/>
<arg name="color_width" default="640"/>
<arg name="color_height" default="480"/>
改完后 ctrl+S 保存
改好后,先在realsense-ros工程的路径下运行
source devel/setup.bash
roslaunch realsense2_camera rs_camera.launch
-
此时,新开终端执行
rostopic list
会看到有新的 imu 和 infra1 的话题加入
-
根据rostopic的内容,改写一下自己的launch文件
如果没有写在bashrc里,记得要source
<!-- bag topics -->
<param name="topic_imu" type="string" value="/camera/imu" />
<param name="topic_camera0" type="string" value="/camera/infra1/image_rect_raw" />
<param name="topic_camera1" type="string" value="/camera/infra2/image_rect_raw" />
-
再到openvins的工程下,运行自己的launch文件
-
再进入launch文件位置,运行
rosrun rviz rviz -d display.rviz
或者 直接写到launch文件里:
launch结尾:
</node>
<node type="rviz" name="rviz" pkg="rviz" args="-d $(find ov_msckf)/launch/display.rviz" />
</launch>
此时左侧图片上可以看到有白点,是因为中间的红外,如果用胶带贴起来的话就没有拉