• 【项目实战】自备相机+IMU跑通Vins-Mono记录


    前言#

    初次接触SLAM,公司要求用自己的设备来跑通vinsmono这个程序,虽然已经跑通了别人的数据包,但是真正自己上手来运行这个程序,发现真的是困难重重,特意在此记载下来整个过程,以供大家参考。
    我这边使用的设备如下:

    • 相机:公司给的杰锐微通的一款HF890
    • IMU: 公司给的LPMS-IG1
    • 系统:ubuntu18.04
    • 电脑:暗夜精灵5

    相机标定#

    启动相机、安装标定软件#

    首先我们要对手上的摄像头进行标定,这个就无关无牌子了,除非你是D345i这样的大牌子。
    首先usb接上电脑,我们使用官方的 uvc_camera 包读取相机。

    rosdep install camera_calibration
    

    为了单目相机通过ROS发布图像。让我们列出主题以检查图像是否已发布:

    rostopic list
    

    然后开始注意了,这里是我踩的第一个坑!一定要看自己的rostopic list对应的话题是什么,不然后面指令是找不到的
    /相机名称/info
    /相机名称/image_raw
    然后运行

    ###对相机进行标定
    rosrun camera_calibration cameracalibrator.py --size 8x6(填你标定布的大小) --square 0.108(填你标定布格子 的长度,以米为单位) image:=/camera/image_raw(注意,这里要填你的相机话题!) camera(这里也是!):=/camera
    

    需要注意我这里使用的标定板为 GP400-12x9 的,所以这里的 size 为 11x8, (为什么不是 12x9 参考官网链接),square 为 0.03
    然后就开始标定了,如果你的参数输入没有问题的话,是可以读到你的标定板每个方格的小点的

    具体标定方法就是拿着标定板放在相机视野内,标定板上出现彩色线条则为有效图像,反之无效,需要调整标定板位置。
    分别在左右移动(X),直到标定界面上X下方的精度条为绿色,然后依次在上下(Y),远近(Size),倾斜(Skew)方向移动,移动过程尽量缓慢,避免大幅度的移动使相机成像产生拖影。持续移动直到所有的进度条都为绿色
    当所有进度条都变成绿色后,CALIBRATE按钮由灰色变成深绿色,点击CALIBRATE,点击一下后,界面会卡住,此时不要做任何操作,直到运行标定程序的终端输出标定的结果,大概是这样的。
    这个时候你可能会卡住,就是程序突然无响应了,我找了好久才找到一个办法,就是

    $ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 --approximate=0.01 right:=/my_stereo/right/image_raw left:=/my_stereo/left/image_raw right_camera:=/my_stereo/right left_camera:=/my_stereo/left
    

    加入了一行这个--approximate=0.01参数,我也不知道是不是这个东西起的作用,毕竟我还重启了一遍电脑
    至此相机就标定完毕了
    点击标定界面的SAVE按钮,标定结果保存在/tmp/calibrationdata.tar.gz这个压缩包中,打开标定结果的压缩包,里面大概是这些内容,最后一个yaml文件就是我们需要的标定结果。

    IMU标定#

    安装imu_utils#

    这是最让我裂开的一个地方,因为他所需要的code_utils这个包和我用的传感器驱动下载都花了好大力气才搞好
    1: 安装ceres库

    sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev 
    sudo apt-get install libgoogle-glog-dev libgtest-dev
    

    下载编译 ceres-solver

    git clone https://github.com/ceres-solver/ceres-solver.git
    cd ceres-solver
    mkdir build
    cd build
    cmake ..
    make 
    sudo make install
    
    1. 安装 code_utils
    mkdir -p ~/kalibr_workspace/src
    cd ~/kalibr_workspace
    catkin_make
    

    然后

    sudo apt-get install libdw-dev
    cd src
    git clone https://github.com/gaowenliang/code_utils.git
    

    这里有两个大坑
    首先是要把src/code_utils/src/sumpixel_test.cpp中的#include "backward.hpp"改为#include “code_utils/backward.hpp”
    然后我照着这个做了,catkin_make给我报错

    In file included from /home/lugendary/kalibr_workspace/src/code_utils/src/cv_utils/dlt/dlt.cpp:1:0:
    /home/lugendary/kalibr_workspace/src/code_utils/include/code_utils/cv_utils/dlt/dlt.h:15:21: error: ‘vector’ in namespace ‘std’ does not name a template type
    DLT( const std::vector< Eigen::Vector3d >& pts_2, const std::vector< Eigen::Vector3d >& pts_3 );
    

    一大串,我找遍全网也没有老哥告诉我解决办法,最后我打开了clion里面,在哪个文件里用纠错功能一键引用了缺少的库,解决问题,编译成功

    cd ..
    catkin_make
    

    这个时候就可以在src下面安装imu_utils

    cd kalibr_workspace/src
    git clone https://github.com/gaowenliang/imu_utils.git
    cd ..
    catkin_make
    

    标定的工具搞完了,现在就要启动我们的IMU了

    启动IMU#

    首先建立一个工作空间openzen_ws/src

    mkdir -p openzen_ws/src
    

    然后就是坑了,我按照要求进入工作空间,通过git获取安装包

    cd openzen/src
    git clone --recurse-submodules https://bitbucket.org/lpresearch/openzenros.git
    

    但是openzenros文件里面的东西我死活下载不到,不管是zip下载还是克隆都没办法
    最后我直接在wiki上面

    apt install ros-melodic-openzen-sensor
    

    安装了,然后IMU通过USB 和电脑连接,给串口权限(你的传感器叫什么你可以通过dev下面的文件中,插拔一下imu看tty那个文件变换了)

    sudo chmod 777 /dev/ttyUSB0
    

    在新的命令行窗口运行roscore后,在工作空间下运行驱动

    source devel/setup.bash
    rosrun openzen_sensor openzen_sensor_node
    

    发布的话题节点为/imu/data,通过以下命令查看话题消息

    rostopic echo /imu/data
    

    如果一直出数据,就没问题了

    录制IMU数据集#

    接着录制IMU数据集
    静止情况下采集IMU的数据,并录制为ROS包,我采集的时间为2小时20分钟。

    rosbag record /imu/data -O imu_xsens.bag
    

    标定IMU#

    修改你之前下载标定工具那个东西的src/imu_utils/launch/文件夹下的A3.launch文件中的话题,改成名为/imu/data
    运行标定工具

    cd 你的标定工具的工作空间
    source devel/setup.bash
    roslaunch imu_utils A3.launch
    

    然后倍速回放bag包,我的bag包名字直接搜索.bag定位到文件夹然后找到的

    rosbag play -r 200 imu.bag
    

    标定完退出,搜索A3_imu,就找到yaml在哪里了,这里我用的是xsens_imu_param.yaml

    配置YAML文件#

    然后接下来就是所使用我们的标定数据了,首先要改vins代码中的yaml数据,为了防止填写格式出问题导致bug,我就直接在config下面的realsense里面修改realsense_color_config.yaml文件了

    填写相机标定参数#

    启动相机和IMU节点,用rostopic来查看话题,
    先修改这些参数

    然后把相机的yaml文件里面的相机的内参矩阵

    按照

    填入projection_parameters:这个参数
    然后把

    填入distortion_parameters。

    填写IMU标定参数#

    然后打开 IMU的标定yaml,

    把所有的avg项目按需填入

    其他参数的填写#

    至于这个yaml其他的参数填什么就看你自己的需求了,可以配合这篇文章学习修改
    https://zhuanlan.zhihu.com/p/533106355
    因为大多数内容无需太多修改(注意个别文件输出位置),这里就不多加赘述了

    运行Vins-mono#

    至此我们的工作就全部做完了,现在我们来运行我们的vins-mono!
    首先在ros要打开你的相机和imu,打开rostopic list确保他们都在运行(方法上面已经给过了)
    然后进入工作空间启动ros

    source ./devel/setup.bash
    roslaunch vins_estimator realsense_color.launch
    roslaunch vins_estimator vins_rviz.launch //打开rviz查看
    


    大功告成!

    参考链接#

  • 相关阅读:
    数据结构学习笔记(第一章绪论)
    IDEA更换新版本启动没反应
    使用yolov5训练自己的目标检测模型
    linux安装kafka教程
    docker 部署prometheus+grafana
    面试其他注意事项
    两种常见误删的解决方法,粗心的朋友们快来
    Python量化投资——投资组合的评价和可视化(下):使用Matplotlib生成专业的投资回测数据可视化仪表盘【源码+详解】
    秋招 2022 年面试不用愁,速看 BATJ 最新 Java 面试题整理合集
    缓解光纤激光切割机老化之如何保养光纤激光切割机的光学镜片
  • 原文地址:https://www.cnblogs.com/lugendary/p/16717782.html