【项目实战】自备相机+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
- 安装 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查看
大功告成!
参考链接
- 相机与IMU联合标定 https://blog.csdn.net/crp997576280/article/details/109592631 熊猫飞天
- 跑通流程 https://www.zhihu.com/question/408978633/answer/2477023448 智能之欣
- 相机标定 http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration wiki.ros
- 摄像头标定--camera_calibration https://blog.csdn.net/bingda_robot/article/details/126718291 冰达机器人
- 无响应问题的解决 https://blog.csdn.net/JasonSunJian/article/details/79177570 JasonSunJian
- LPMS-IG1 IMU内参标定 https://blog.csdn.net/yz2630570484/article/details/118081787 雨沐清风i
- openzen安装 http://wiki.ros.org/openzen_sensor wiki
- 相机究竟标定了什么 https://zhuanlan.zhihu.com/p/448120739 卷饼
- VINS-MONO 配置文件yaml https://zhuanlan.zhihu.com/p/533106355 陌归
【项目实战】自备相机+IMU跑通Vins-Mono记录的更多相关文章
- Android项目实战(四十九):Andoird 7.0+相机适配
解决方案类似: Android项目实战(四十):Andoird 7.0+ 安装APK适配 解决方法: 一.在AndroidManifest.xml 文件中添加 四大组件之一的 <provider ...
- CocoStuff—基于Deeplab训练数据的标定工具【二、用已提供的标注数据跑通项目】
一.说明 本文为系列博客第二篇,主要讲述笔者在使用该团队提供已经标注好的COCO数据集进行训练的过程. 由于在windows中编译Caffe和Deeplab特别的麻烦,笔者并没有去探索,后续可能会去尝 ...
- VINS(四)初始化与相机IMU外参标定
和单目纯视觉的初始化只需要获取R,t和feature的深度不同,VIO的初始化话通常需要标定出所有的关键参数,包括速度,重力方向,feature深度,以及相机IMU外参$R_{c}^{b}$和$p_{ ...
- 终于跑通分布式事务框架tcc-transaction的示例项目
1.背景 前段时间在看项目代码的时候,发现有些接口的流程比较长,在各个服务里面都有通过数据库事务保证数据的一致性,但是在上游的controller层并没有对一致性做保证. 网上查了下,还没找到基于Go ...
- 使用Typescript重构axios(二)——项目起手,跑通流程
0.系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三)- ...
- 项目实战:Qt+Ffmpeg+OpenCV相机程序(打开摄像头、支持多种摄像头、分辨率调整、翻转、旋转、亮度调整、拍照、录像、回放图片、回放录像)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 项目实战13—企业级虚拟化Virtualization-KVM技术
项目实战系列,总架构图 http://www.cnblogs.com/along21/p/8000812.html KVM的介绍.准备工作和qemu-kvm 命令详解 1.介绍 (1)介绍 KVM:就 ...
- 相机IMU融合四部曲(二):误差状态四元数详细解读
相机IMU融合四部曲(二):误差状态四元数详细解读 极品巧克力 前言 上一篇文章,<D-LG-EKF详细解读>中,讲了理论上的SE3上相机和IMU融合的思想.但是,还没有涉及到实际的操作, ...
- Vue2构建项目实战
转载整理自http://blog.csdn.net/fungleo/article/details/77575077 vue构建单页应用原理 SPA 不是指水疗.是 single page web a ...
随机推荐
- Tapdata Cloud 2.1.2 来啦:大波细节已就绪!字段类型可批量修改、支持微信扫码登录、新增支持 Vika 为目标
Tapdata Cloud cloud.tapdata.net 让数据实时可用 Tapdata Cloud 是国内首家异构数据库实时同步云平台,目前支持 Oracle.MySQL.PG.SQL Ser ...
- Detecting Rumors from Microblogs with Recurrent Neural Networks(IJCAI-16)
记录一下,很久之前看的论文-基于RNN来从微博中检测谣言及其代码复现. 1 引言 现有传统谣言检测模型使用经典的机器学习算法,这些算法利用了根据帖子的内容.用户特征和扩散模式手工制作的各种特征,或者简 ...
- 【docker专栏2】CentOS操作系统安装DockerCE
目录 一.前置要求 二.更新软件源信息 三.安装 Docker-CE 四.卸载Docker CE 为大家介绍在CentOS操作系统中安装docker的过程,linux其他发行版本安装docker方法可 ...
- 2022DASCTF Apr X FATE 防疫挑战赛-- SimpleFlow
1.SimpleFlow 得到pcapng文件,协议分级统计显示大部分为TCP流和http流 过滤http流,发现了flag.zip,foremost分离,得到加密的zip 在pcapng中寻找pas ...
- springboot配置logback.xml
由于springboot框架自带log4j,因此我们只需配置下logback文件,即可, 在main/resources根目录下,新建logback-spring.xml文件,copy下述代码: &l ...
- 如何在Excel批量查询电话号码归属地?
手机号码归属地的重要性大家应该都清楚,如果取消或者更改手机号码归属地,那么一会增加用户的被诈骗风险;二是对套餐资费会产生影响,加剧企业间的竞争,加剧数字鸿沟;三是企业运营管理需要投入大量人力物力,是个 ...
- 21条最佳实践,全面保障 GitHub 使用安全
GitHub 是开发人员工作流程中不可或缺的一部分.无论你去哪个企业或开发团队,GitHub 都以某种形式存在.它被超过8300万开发人员,400万个组织和托管超过2亿个存储库使用.GitHub 是世 ...
- JavaScript进阶内容——jQuery
JavaScript进阶内容--jQuery 我们在前面的文章中已经掌握了JavaScript的全部内容,现在让我们了解一下JavaScript库 这篇文章主要是为了为大家大致讲解JavaScript ...
- websocket理解
简介 在实际开发中,可能会出现一个需求场景,要求网页的数据可以实时更新.在这种情况下,我们一般会采用轮询的方式,间隔性获取数据,即通过定时器间隔性请求相应接口获取数据,此方式由于是不断请求服务器,资源 ...
- 【PMP学习笔记】第4章 项目整合管理
[PMP学习笔记]第4章 项目整合管理 一.项目整合管理 什么是项目整合管理? 项目整合管理由项目经理负责.虽然其他知识领域可以由相关专家(如成本分析专家.进度规划专家.风险管理专家)管理,但是项目整 ...