萌新谈相机与IMU的标定(转载)
我发现这里所给的标定板也是这个
https://drive.google.com/file/d/0B0T1sizOvRsUdjFJem9mQXdiMTQ/edit?resourcekey=0-0Cn7Pkf1xyNGurAnRJH3aA
而且这个标定板左下角有标明尺寸
转载自:https://zhuanlan.zhihu.com/p/44424457
萌新谈相机与IMU的标定
熊勒个猫
社会太复杂了,我还是喜欢熊猫比较安全
本文主要包括相机标定和imu_camera 标定,另附上imu标定文章(非本人)。
先从摄像头的标定开始讲起吧,SLAM新手上路,第一个要玩的肯定是ORBSLAM,光跑数据肯定不够过瘾啊,所以就要用自己的摄像头转一圈。下面进入正题,
前提条件:一个笔记本,一个能用摄像头(单目或者双目)
1.相机标定--opencv
camera_calibration - ROS Wiki
wiki.ros.org
其实wiki上已经介绍的够清楚的了,先下载image_pipeline的源码,然后下载一张棋盘纸
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/my_camera/image camera:=/my_camera
size 是指棋盘内部角点个数,我是用的标定板公有8x6个角点(即8列6行),square指方形的边长,image为输出图像的话题,camera为相机的名称(即在/image_raw前面部分)。比如我的无人机是ardrone2.0.运行起来应该是
rosrun cameracalibration cameracalibrator.py --size 8x6 --square 0.108 image:=/ardrone/front/image_rawosrun cameracalibration cameracalibrator.py --size 8x6 --square 0.108 image:=/ardrone/front/image_raw
但是再此之前别忘了检查一下你的topic名字,可以输入
rostopic list
对于的我的无人机来说,还需要运行一个驱动launch文件
roslaunch ardrone_autonomy ardrone.launch
然后你可以看到这个东西,
步骤就是左三圈右三圈,上三圈下三圈,换个姿势再来几圈.........
当标定完成的时候,那个calibrate 按钮会变蓝,然后你可以点击保存和commit。这样就会生成一个yaml文件。最后标定就完成啦!
二.相机标定--matlab
关于如何用matlab标定我就不赘述了,因为我自己没有亲自操作过,这里附上几篇文章,仅供参考
MATLAB标定工具箱的使用 - CSDN博客blog.csdn.net
三.相机与imu标定
这里用到的是大名鼎鼎ethz 开发的kalibr
https://github.com/ethz-asl/kalibrgithub.com
这个kalibr有两个版本,一个是比较全的版本,但是里面包比较多,一开始尝试去编译这个,结果电脑不争气,编译一直卡死。所以后来我就用这个CDE版本。
ethz-asl/kalibrgithub.com
关于如何使用这个版本,下面这个链接里面的视频已经讲的很清楚了。(需要代理)
https://www.youtube.com/watch?v=puNXsnrYWTY&app=desktopwww.youtube.com
我把主要的命令写一下,方便大家复制。
标定纸:https://drive.google.com/file/d/0B0T1sizOvRsUdjFJem9mQXdiMTQ/edit
yaml文件:https://drive.google.com/file/d/0B0T1sizOvRsUU2lGMTdWYWhPaWc/edit
别忘了修改yaml文件里面的参数,比如格的边长和行列数。具体情况根据你标定板大小而定。
(1)录制一个rosbag
rosbag record /ardrone/front/image_raw /ardrone/imu
一个是你相机的topic,另一个是imu的topic。
然后拿着你的设备对准标定板,先是pitch三次,yaw三次,roll三次,up and down三次,左右三次,然后再随意换几个姿势。标定时间按视频里面说,要小于60s。录制完成之后再保存。
下一步就是去下载刚才那个cde版本,如果你的电脑足够牛的话,可以用比较全的版本
ethz-asl/kalibrgithub.com
安装依赖项
sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev ros-indigo-vision-opencv ros-indigo-image-transport-plugins ros-indigo-cmake-modules python-software-properties software-properties-common libpoco-dev python-matplotlib python-scipy python-git python-pip ipython libtbb-dev libblas-dev liblapack-dev python-catkin-tools libv4l-dev sudo pip install python-igraph --upgrade
创建一个catkin 工作空间mkdir -p ~/kalibr_workspace/src
cd ~/kalibr_workspace
source /opt/ros/indigo/setup.bash
catkin init
catkin config --extend /opt/ros/indigo
catkin config --merge-devel # Necessary for catkin_tools >= 0.4. catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
把kabibr放到工作空间里
cd ~/kalibr_workspace/src
git clone https://github.com/ethz-asl/Kalibr.git
编译
cd ~/kalibr_workspace
catkin build -DCMAKE_BUILD_TYPE=Release -j4
这个时间会很长,你可以来盘王者或者吃鸡等一会,有可能你的电脑会像我的一样卡死,那就比较尴尬了。最后别忘了source一下路径
source ~/kalibr_workspace/devel/setup.bash
其实到这里差不多已经准备就绪了,但是为了防止出现意外,我们最好先运行一下example测试一下环境。
下载这个数据集,把它放进之前的kalibr-cde文件夹下面
https://drive.google.com/file/d/0B0T1sizOvRsUcGpTWUNTRC14RzA/editdrive.google.com
./kalibr_calibrate_imu_camera --target april_6x6.yaml --cam camchain.yaml --imu imu_adis16448.yaml --bag dynamic.bag --bag-from-to 5 45
假如example数据能跑通,说明kalibr工具准备好了,下面开始进入真实环境下的标定过程
(1)
上面那个example你应该可以发现,运行标定程序后面跟着四个文件,第一个是棋盘文件,就是之前需要修改的那个yaml文件,第二个是相机内参文件(这里的内参文件和之前ros获得的文件不同,需要用kalibr单独获得),第三个是imu噪声文件,第四个是之前我们录制好的rosbag
(2)
现在未获得的只有第二个camchain文件,所以先播放一下rosbag看看有没有问题
roscore&&rosbag play xxx.bag
在播放的过程中,检查一下是否有相机和imu话题 rostopic list
(3)
cd kalibr-cde
./kalibr_calibrate_cameras --target april6x6.yaml --bag xxxx/xxx.bag --models pinhole-equi --topics /ardrone/front/image_raw
结束之后会得到一个report和pdf文件。
(4)
在做这一步之前。找到kalibr_calibrate_imu_camera文件,注释掉以下几行
#delete old results
rm -f $HERE/*.pdf 2> /dev/null
rm -f $HERE/*.yaml 2> /dev/null
rm -f $HERE/*.txt 2> /dev/null
rm -f $HERE/*.bag 2> /dev/null
rm -rf $HERE/cde-root/output* 2> /dev/null
./kalibr_calibrate_imu_camera --target april_6x6.yaml --cam 之前获得的相机文件.yaml --imu imu_adis16448.yaml --bag 录制的bag路径(比如example中的dynamic/dynamic).bag --bag-from-to 5 45
然后等待一会,就生成report啦!
如果有问题或者发现文章中有什么错误可以私信或者留言,我都会回答的,虽然我自己也不怎么会。
最后附上几篇能用到的文章
双目imu相机标定:双目相机与IMU camera IMU 联合标定工具箱使用方法--Kalibr
港科大imu标定工具: gaowenliang/imu_utils,相关的专栏文章介绍:Imu_tk算法流程
http://cache.freescale.com/files/sensors/doc/app_note/AN5087.pdf
https://www.vectornav.com/support/library/gyroscope
Department of Computer Science and Technology
编辑于 2018-09-13
同时定位和地图构建(SLAM)
视觉惯性里程计(VIO)
萌新谈相机与IMU的标定(转载)相关推荐
- 双目相机与IMU联合标定
前言 为了后面的视觉激光融合SLAM以及跑通VINS-Fusion,需要标定双目相机和IMU得内参以及它们得外参(变换矩阵). 准备工作 双目相机:ZED-m IMU:realsense-t265(仅 ...
- 安卓手机 相机和IMU数据获取标定 在VINS-MONO运行自己的数据集(含打包方法) (非常详细一步一步来)
Android手机上图像和IMU数据采集的方法 网上有相关的教程,但都讲的很模糊,而且不全,甚至还有人要收费.自己完整做了一遍发现还是有些麻烦,固记录下来供大家参考,希望能帮到大家. 采用开源库 Vi ...
- 相机与IMU联合标定
相机与IMU联合标定 1 imu_utils 标定IMU的内参 1.1 安装环境 1.2 录制IMU数据集 2 kalibr 标定工具 2.1 安装 2.2 校准相机的内外参 2.3 校准相机与IMU ...
- ZED2跑ORB-SLAM3+双目相机、IMU联合标定+显卡驱动与cuda/cudnn安装
一.引言 同样是项目需求,需要利用视觉惯性导航做一些开发,所以第一步先做些算法的测试–仿真与实物测验,通过仿真的测试结果,最终是决定使用ORB-SLAM3来完成任务,当然了,Vins-fusion作为 ...
- 标定(二)----------双目相机与IMU联合标定(工具箱使用方法——Kalibr)
16个相机参数: Overview ethz-asl/kalibr is a toolbox that solves the following calibration problems: Multi ...
- VIO测试准备——使用imu_utils和kalibr进行相机与IMU标定
0 前言 近期主要学习VIO.相机使用海康的两个支持外触发的单目相机,完成硬件同步外触发后,固联安装在机器人机体两侧,搭建了一个简易的双目相机.IMU使用的是LPMS-USBAL2(老型号,官方已经不 ...
- 相机与IMU标定教程
标定教程 way 相机与IMU联合标定 1.imu_utils 标定IMU的内参 1. imu_utils标定IMU的内参,可以校准IMU的噪声密度和随机游走噪声 2.kalibr包标定相机的内外参数 ...
- 双目相机 -- IMU联合标定
声明:一些图片是不该有水印的,CSDN把图片链接的格式改了,暂时还不知道怎么去掉,请见谅!!! 目录 **声明**:一些图片是不该有水印的,CSDN把图片链接的格式改了,暂时还不知道怎么去掉,请见谅! ...
- rs_D455相机内外参标定+imu联合标定
IMU标定 <launch><node pkg="imu_utils" type="imu_an" name="imu_an&quo ...
最新文章
- aix解压tgz_AIX 上压缩与解压缩 各种文件格式原理说明
- python【数据结构与算法】六度空间
- 记一次validator jar冲突导致的启动异常
- python 解析xml格式_Python解析XML文件
- SPOJ 4564 Chop Ahoy! Revisited!
- 3.内存分配、逃逸分析与栈上分配、直接内存和运行时常量池、基本类型的包装类和常量池、TLAB、可达性分析算法(学习笔记)
- ASP.NET 实现上传EXCEL,利用NOPI操作,转换得到DataTable
- python使用梯度下降方法实现线性回归算法_python实现线性回归梯度下降算法
- 手机备份时,应该把软件配置也备份起来
- 简析struct in_addr ,struct sockadd
- random.uniform()用法
- python实现FTP文件上传和下载
- B2B电商平台--ChinaPay银联电子支付功能
- 数字信号常用典型序列(1)
- 【开发经验】quartz表结构说明(字段说明)
- 批量用title的内容命名html文件,使用批处理批量复制文件并重命名
- uniApp使用高德地图api
- 如何将普通相机改成VR相机
- Mac 清除dns缓存
- cocos creator 浅塘游戏开发(2) 搭建初始界面
热门文章
- 【已解决】surface 电池不好充电显示“未连接”,将充电的接口换个方向就解决了
- CAD中图框和比例和打印机的纸张尺寸的关系
- 测试基础知识考试题目(答案)
- 阿里在职5年,一个女测试工师的坎坷之路
- python批量下载网页图片及列表
- 【文献译文】OFDM Receiver Using Deep Learning: Redundancy Issues
- dcn网络与公网_ip 中的,内网,外网,公网,dcn网络,分别是什么意思?
- 图像无损压缩:Pichi for Mac
- Java可以hook微信吗,Hook实现Android 微信、陌陌 、探探位置模拟(附源码下载)
- 计算矩阵行列式时奇排列与偶排列的判定