小觅摄像头第二天

小觅运行VINS的整体流程

  好久没有写博客了。这是之前小觅运行的一些内容,写的十分详细,包含了从环境搭建imu标定相机标定程序运行等等内容。可以进行参考!

1 环境准备

1.1 安装ubuntu16.04

  目前已经有了ubuntu18.04。但是我这里使用的还是16.04,因为比较稳定。SLAM的开发等工作目前仍然是基于ubuntu的,所以要熟悉ubuntu的基本操作和命令等。
参考内容:https://blog.csdn.net/s717597589/article/details/79117112
坑:

  1. 各个电脑进入bios 的U盘启动的方式不同,这个可以自行百度
  2. 进入ubuntu之后,使用sudo apt-get xxx等命令时出现E: 无法获得锁 /var/lib/dpkg/lock-frontend
    方法1:https://blog.csdn.net/qq_36910634/article/details/90512126
  3. 此外,还会有不能联网等等问题,这个可以自行百度解决

其他内容:
  有一些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. 尽量找一个网络好点的地方,其中下载失败可能是由于网络原因

1.3 其他内容

  此外还需要安装一些环境,为之后做准备。安装方法自行百度即可,期间也会有很多坑,只要耐心搜索都会解决的,尽量参考CSDN等博客的方法。
OpenCV(小觅SDK需要) https://blog.csdn.net/u013066730/article/details/79411767
ceres(VINS需要) https://blog.csdn.net/jz1570551401/article/details/78207208

坑:

  1. 在配置环境时,往往需要安装很多包,比如安装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 全部运行

  1. ROS下运行小觅/rosbag play播放bag数据包
  2. roslaunch vins vins_rviz.launch
  3. rosrun vins vins_node “相应的yaml配置文件”
  4. (optional) rosrun loop_fusion loop_fusion_node “相应的yaml配置文件”**

4 IMU校准

  IMU的校准主要有两种:imu_tilskalibr,其中kalibr还需要安装matlab,所以我是用了imu_tils。(后期安装了matlab想要实验一下kalibr,但是编译一直有问题),不管是哪种,都需要采集两个小时的IMU静止数据。然后通过allan方差的方式进行标定
**注:**群里有人说imu_utils有以下问题,推荐使用kalibr!但是具体的还没验证过,这里先做记录。

  1. imu_utils输出的是bias不稳定度,不是bias的随机游走噪声

参考:

  1. 标定步骤:https://blog.csdn.net/YunLaowang/article/details/95608107
    https://blog.csdn.net/fang794735225/article/details/92804030
  2. 源代码:https://github.com/gaowenliang/imu_utils
    https://github.com/rpng/kalibr_allan
  3. rosbag的命令:https://www.jianshu.com/p/6dd2c08d688e
  4. allan方差:搜索allan freescale,这事freescale关于allan方差的工程笔记。http://cache.freescale.com/files/sensors/doc/app_note/AN5087.pdf

4.1 数据采集

  1. roscore # 开启ros
  2. roslaunch mynt_eye_ros_wrapper mynteye.launch # 开启小觅
  3. rostopic list # 查看小觅相机发布的topic rostopic会有很多,我们需要的是/mynteye/imu/data_raw
  4. cd <想要保存数据的文件中>
  5. 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中的参数 标定结果中的参数
在这里插入图片描述 在这里插入图片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章