文章目录
小觅运行VINS的整体流程
好久没有写博客了。这是之前小觅运行的一些内容,写的十分详细,包含了从环境搭建到imu标定,相机标定和程序运行等等内容。可以进行参考!
1 环境准备
1.1 安装ubuntu16.04
目前已经有了ubuntu18.04。但是我这里使用的还是16.04,因为比较稳定。SLAM的开发等工作目前仍然是基于ubuntu的,所以要熟悉ubuntu的基本操作和命令等。
参考内容:https://blog.csdn.net/s717597589/article/details/79117112
坑:
- 各个电脑进入bios 的U盘启动的方式不同,这个可以自行百度
- 进入ubuntu之后,使用sudo apt-get xxx等命令时出现E: 无法获得锁 /var/lib/dpkg/lock-frontend
方法1:https://blog.csdn.net/qq_36910634/article/details/90512126 - 此外,还会有不能联网等等问题,这个可以自行百度解决
其他内容:
有一些ubuntu下比较使用的软件,比如terminator(命令行窗口工具)、Unity Tweak Tool(桌面管理软件)、VSCODE(看代码)、KAZAM(录屏)、WPS等等,视情况安装。同时最好有一个笔记软件,我使用的是网页版网易云笔记。
1.2 安装ROS系统
SLAM的操作都是基于ROS系统的,所以也要熟悉ROS的操作,如roslaunch、rosrun、rosbag等等。另外,ROS已经推出了2.0版本,我一直没时间使用,感兴趣的话可以用一下新版本。
参考:https://blog.csdn.net/softimite_zifeng/article/details/78632211
坑:
- 尽量找一个网络好点的地方,其中下载失败可能是由于网络原因
1.3 其他内容
此外还需要安装一些环境,为之后做准备。安装方法自行百度即可,期间也会有很多坑,只要耐心搜索都会解决的,尽量参考CSDN等博客的方法。
OpenCV(小觅SDK需要) https://blog.csdn.net/u013066730/article/details/79411767
ceres(VINS需要) https://blog.csdn.net/jz1570551401/article/details/78207208
等
坑:
- 在配置环境时,往往需要安装很多包,比如安装OpenCV之前就需要安装一些基础包,而有些参考博客中,因为时间比较久,安装的版本可能是已经过时,导致安装时包的依赖环境发生混乱,这是一个需要注意的点。一般情况下改为最新版本的包就可以了。
2 小觅SDK的安装、运行和使用
小觅的SDK安装之前需要先安装OpenCV。
参考:https://mynt-eye-s-sdk.readthedocs.io/zh_CN/latest/src/sdk/contents.html
2.1 小觅SDK的安装
mkdir mynt
cd mynt
git clone https://github.com/slightech/MYNT-EYE-S-SDK.git
cd <sdk> # <sdk> 是指sdk路径
make init
make install
make samples
make ros
2.2 小觅的sample
小觅SDK文件中的sample/_output/bin/
下有很多示例程序可以查看小觅相机采集到的图像、参数等等。
但是其参数并不一定准确,所以也需要后期标定。
2.3 ROS下运行小觅
先得source一下setup.bash文件!!
source wrappers/ros/devel/setup.bash
roslaunch mynt_eye_ros_wrapper display.launch // 测试!
但是我运行mynteye.launch,因为不卡。
也可以直接给.bashrc文件添加代码,然后就不用每次都souce了。
echo "source ~/MYNT-EYE-S-SDK-2.3.8/wrappers/ros/devel/setup.bash"
>> ~/.bashrc
source ~/.bashrc # 这个代码不一定对,但是做法是这样的
2.4 一些可能用到的
rostopic list 查看小觅发布的topic
rosbag record/play 录制/播放bag数据包
rostopic hz 查看相应topic的发布频率
3 VINS的运行
3.1 下载vins源代码并编译
mkdir catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git
cd ../
catkin_make
source ~/catkin_ws/devel/setup.bash # 也可以在.bashrc文件中直接添加这一句
2.2 运行VINS
之前找到的config文件中,没有equ的相机模型,之后自己在MYNT-EYE-VINS-FUSION-Samples/docker/mynteye-s2100
找到了相应的配置文件,放在了4VINS_test/0config
中。可以运行,漂移也小了很多,但是还是会漂移,所以需要IMU和相机的标定。
(注意需不需要source!将本程序的setup.bash,source到.bashrc文件当中,如果已经写入,则不需要)
// 运行启动文件
roslaunch vins vins_rviz.launch
// catkin_ws目录下 config文件还是可以改的
rosrun vins vins_node 4VINS_test/0config/mynt_stereo_config.yaml
// 闭环,必须在开环执#(optional)
rosrun loop_fusion loop_fusion_node src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
2.3 全部运行
- ROS下运行小觅/rosbag play播放bag数据包
- roslaunch vins vins_rviz.launch
- rosrun vins vins_node “相应的yaml配置文件”
- (optional) rosrun loop_fusion loop_fusion_node “相应的yaml配置文件”**
4 IMU校准
IMU的校准主要有两种:imu_tils和kalibr,其中kalibr还需要安装matlab,所以我是用了imu_tils。(后期安装了matlab想要实验一下kalibr,但是编译一直有问题),不管是哪种,都需要采集两个小时的IMU静止数据。然后通过allan方差的方式进行标定
**注:**群里有人说imu_utils有以下问题,推荐使用kalibr!但是具体的还没验证过,这里先做记录。
- imu_utils输出的是bias不稳定度,不是bias的随机游走噪声
参考:
- 标定步骤:https://blog.csdn.net/YunLaowang/article/details/95608107
https://blog.csdn.net/fang794735225/article/details/92804030 - 源代码:https://github.com/gaowenliang/imu_utils
https://github.com/rpng/kalibr_allan
- rosbag的命令:https://www.jianshu.com/p/6dd2c08d688e
- allan方差:搜索allan freescale,这事freescale关于allan方差的工程笔记。http://cache.freescale.com/files/sensors/doc/app_note/AN5087.pdf
4.1 数据采集
- roscore # 开启ros
- roslaunch mynt_eye_ros_wrapper mynteye.launch # 开启小觅
- rostopic list # 查看小觅相机发布的topic rostopic会有很多,我们需要的是/mynteye/imu/data_raw
- cd <想要保存数据的文件中>
- rosbag record -O imu_cal_test1,bag /mynteye/imu/data_raw
结束时直接ctrl+C。
4.2 标定包的安装
这一部分都是参考了参考1,两个博客进行对比参考。
imu_utils的使用需要依赖code_utils,因此需要提前安装。
cd ~/catkin_ws/src
git clone https://github.com/gaowenliang/code_utils
cd ~/catkin_ws
catkin_make
在编译之前需要对源码进行修改:
方法一:
在~/catkin_ws/src/code_utils/CMakeLists.txt中,添加:include_directories(“include/code_utils”)
方法二:
修改~/catkin_ws/src/code_utils/src/sumpixel_test.cpp
文件中的#include "backward.hpp"为#include “code_utils/backward.hpp”
避免出现如下错误:
catkin_ws/src/code_utils/src/sumpixel_test.cpp:2:24:
fatal error: backward.hpp: No such file or directory
下载、编译imu_utils
cd ~/catkin_ws/srcgit clone https:
//github.com/gaowenliang/imu_utils
cd ~/catkin_ws
catkin_make
错误及解决方案:
错误:
catkin_ws/src/imu_utils/src/imu_an.cpp:68:19: error:
aggregate ‘std::ofstream out_t’ has incomplete type and
cannot be defined std::ofstream out_t;
解决方案:
在imu_an.cpp文件中添加头文件:#include
4.3 标定
rosbag play -r 200 imu_utils/imu.bag (这里要写你录制的包的路径)
cd imu_ws
source ./devel/setup.bash
roslaunch imu_utils mynt_imu.launch
注意这里的launch文件,我用的是小觅相机,所以imu.launch的内容为:
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<param name="imu_topic" type="string" value= "/mynteye/imu/data_raw"/> #imu topic的名字
<param name="imu_name" type="string" value= "mynteye"/>
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
<param name="max_time_min" type="int" value= "120"/> #标定的时长
<param name="max_cluster" type="int" value= "100"/>
</node>
</launch>
标定完成后,会生成mynteye_imu_param.yaml以及多个txt文档。
5 相机标定
参考:https://blog.csdn.net/heyijia0327/article/details/83583360
https://blog.csdn.net/u011178262/article/details/83316968
5.1 安装kalibr
自行搜索。
我在台式机上安装的时候出现问题,编译的时候好像需要下载一些东西,但是下载的特别慢。
5.2 采集数据
rosrun topic_tools throttle messages /mynteye/left/image_raw 4.0 /left
rosrun topic_tools throttle messages /mynteye/right/image_raw 4.0 /right
对左右目的ros topic降低频率后就可以制作bag了
坑1:
这里的频率4,也不一定是这个,s2100的默认频率为200Hz,所以可以设为4,对于s1030,它的默认频率为250Hz,当改为4Hz后,就会导致两个相机的帧率不同步。设为5Hz的时候就可以了。
rosbag record -O stereo_calibra.bag /left /right
5.3 标定
采集好数据集以后, 就可以用已经安装好的 Kalibr 标定双目相机了, 指令如下:
source ros_ws/kalibr/devel/setup.bash
rosrun kalibr kalibr_calibrate_cameras
--bag /home/heyijia/stereo_calibra.bag
--topics /left /right
--models pinhole-radtan pinhole-radtan
--target /home/heyijia/april_6x6_80x80cm_A0.yaml
或者采用 pinhole-equi 模型,对畸变大的相机效果不错
rosrun kalibr kalibr_calibrate_cameras
--bag /home/heyijia/stereo_calibra.bag
--topics /left /right
--models pinhole-equi pinhole-equi
--target /home/heyijia/april_6x6_80x80cm_A0.yaml
重投影误差在 0.1~0.2 以内,标定结果较好,如下所示。
坑2:
由于我的标定板是自己打印A4纸,然后进行张贴的,所以误差比较大。可以考虑使用电脑屏幕直接放置标定板
6 相机+IMU的联合标定
参考:https://blog.csdn.net/heyijia0327/article/details/83583360
https://blog.csdn.net/u011178262/article/details/83316968
6.1 kalibr的安装准备
自行搜索
6.2 imu配置文件的准备
根据之前IMU的校准结果编写imu.yaml
#Accelerometers
accelerometer_noise_density: 2.52e-02 #Noise density (continuous-time)
accelerometer_random_walk: 4.41e-04 #Bias random walk
#Gyroscopes
gyroscope_noise_density: 2.78e-03 #Noise density (continuous-time)
gyroscope_random_walk: 1.65e-05 #Bias random walk
rostopic: /camera/imu/data_raw #the IMU ROS topic
update_rate: 200.0 #Hz (for discretization of the values above)
6.3 相机配置文件准备
直接采用之前kalibr生成的就可以
坑1:
之前校准相机时,使用的topic是改变频率之后的/left和/right,所以生成的配置文件中也是这两个topic,但是这里需要改成小觅发布的左右目的相机图片。
6.4 录制bag
注意不要活动过大
rosbag record /mynteye/imu/data_raw
/mynteye/left/image_raw
/smynteye/right/image_raw
-O images_imu.bag
6.5 校准
kalibr kalibr_calibrate_imu_camera
--target 3worksapce/2kalibr_workspace/yaml/april_6x6_34x34mm.yaml
--cam 3worksapce/2kalibr_workspace/result/s1030_test1/camchain-2datamynt_datas1030_cam_test1.yaml
--imu 3worksapce/1imu_workspace/imu_result_s1030/imu.yaml
--bag 2data/mynt_data/s1030/cam_imu_s1030.bag
--bag-from-to 5 45
运行时间非常非常长
7 参数填写
这个我之前犯过错,导致耽误了比较长时间,所以做一下记录,IMU和相机的参数没有什么可说的,按照yaml文件中的参数命名填写进去。
坑1: 相机模型。
小觅的相机模型为KB,并不是普通的针孔,鱼眼等,这个涉及到相机模型问题,此处不赘述,只说明一点,其参数为k2、k3、k4,k5以及中心点和焦距,按照相应参数填写进去
坑2: 相机和IMU之间的参数
注意,这个参数填写的是标定结果中的第二个矩阵,具体见下图。
yaml中的参数 | 标定结果中的参数 |
---|---|