萌新谈相机与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/kalibr​github.com

这个kalibr有两个版本,一个是比较全的版本,但是里面包比较多,一开始尝试去编译这个,结果电脑不争气,编译一直卡死。所以后来我就用这个CDE版本。

ethz-asl/kalibr​github.com

关于如何使用这个版本,下面这个链接里面的视频已经讲的很清楚了。(需要代理)

https://www.youtube.com/watch?v=puNXsnrYWTY&app=desktop​www.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/kalibr​github.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/edit​drive.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)

热门文章

暂无图片
编程学习 ·

gdb调试c/c++程序使用说明【简明版】

启动命令含参数: gdb --args /home/build/***.exe --zoom 1.3 Tacotron2.pdf 之后设置断点: 完后运行,r gdb 中的有用命令 下面是一个有用的 gdb 命令子集,按可能需要的顺序大致列出。 第一列给出了命令,可选字符括…
暂无图片
编程学习 ·

高斯分布的性质(代码)

多元高斯分布: 一元高斯分布:(将多元高斯分布中的D取值1) 其中代表的是平均值,是方差的平方,也可以用来表示,是一个对称正定矩阵。 --------------------------------------------------------------------…
暂无图片
编程学习 ·

强大的搜索开源框架Elastic Search介绍

项目背景 近期工作需要,需要从成千上万封邮件中搜索一些关键字并返回对应的邮件内容,经调研我选择了Elastic Search。 Elastic Search简介 Elasticsearch ,简称ES 。是一个全文搜索服务器,也可以作为NoSQL 数据库,存…
暂无图片
编程学习 ·

Java基础知识(十三)(面向对象--4)

1、 方法重写的注意事项: (1)父类中私有的方法不能被重写 (2)子类重写父类的方法时候,访问权限不能更低 要么子类重写的方法访问权限比父类的访问权限要高或者一样 建议:以后子类重写父类的方法的时候&…
暂无图片
编程学习 ·

Java并发编程之synchronized知识整理

synchronized是什么? 在java规范中是这样描述的:Java编程语言为线程间通信提供了多种机制。这些方法中最基本的是使用监视器实现的同步(Synchronized)。Java中的每个对象都是与监视器关联,线程可以锁定或解锁该监视器。一个线程一次只能锁住…
暂无图片
编程学习 ·

计算机实战项目、毕业设计、课程设计之 [含论文+辩论PPT+源码等]小程序食堂订餐点餐项目+后台管理|前后分离VUE[包运行成功

《微信小程序食堂订餐点餐项目后台管理系统|前后分离VUE》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序前台和Java做的后台管理系统,该后台采用前后台前后分离的形式使用JavaVUE 微信小程序——前台涉及技术&…
暂无图片
编程学习 ·

SpringSecurity 原理笔记

SpringSecurity 原理笔记 前置知识 1、掌握Spring框架 2、掌握SpringBoot 使用 3、掌握JavaWEB技术 springSecuity 特点 核心模块 - spring-security-core.jar 包含核心的验证和访问控制类和接口,远程支持和基本的配置API。任何使用Spring Security的应用程序都…
暂无图片
编程学习 ·

[含lw+源码等]微信小程序校园辩论管理平台+后台管理系统[包运行成功]Java毕业设计计算机毕设

项目功能简介: 《微信小程序校园辩论管理平台后台管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序做的辩论管理前台和Java做的后台管理系统: 微信小程序——辩论管理前台涉及技术:WXML 和 WXS…
暂无图片
编程学习 ·

如何做更好的问答

CSDN有问答功能,出了大概一年了。 程序员们在编程时遇到不会的问题,又没有老师可以提问,就会寻求论坛的帮助。以前的CSDN论坛就是这样的地方。还有技术QQ群。还有在问题相关的博客下方留言的做法,但是不一定得到回复,…
暂无图片
编程学习 ·

矩阵取数游戏题解(区间dp)

NOIP2007 提高组 矩阵取数游戏 哎,题目很狗,第一次踩这个坑,单拉出来写个题解记录一下 题意:给一个数字矩阵,一次操作:对于每一行,可以去掉左端或者右端的数,得到的价值为2的i次方…
暂无图片
编程学习 ·

【C++初阶学习】C++模板进阶

【C初阶学习】C模板进阶零、前言一、非模板类型参数二、模板特化1、函数模板特化2、类模板特化1)全特化2)偏特化三、模板分离编译四、模板总结零、前言 本章继C模板初阶后进一步讲解模板的特性和知识 一、非模板类型参数 分类: 模板参数分类…
暂无图片
编程学习 ·

字符串中的单词数

统计字符串中的单词个数&#xff0c;这里的单词指的是连续的不是空格的字符。 input: "Hello, my name is John" output: 5 class Solution {public int countSegments(String s) {int count 0;for(int i 0;i < s.length();i ){if(s.charAt(i) ! && (…
暂无图片
编程学习 ·

【51nod_2491】移调k位数字

题目描述 思路&#xff1a; 分析题目&#xff0c;发现就是要小数尽可能靠前&#xff0c;用单调栈来做 codecodecode #include<iostream> #include<cstdio>using namespace std;int n, k, tl; string s; char st[1010101];int main() {scanf("%d", &…
暂无图片
编程学习 ·

C++代码,添加windows用户

好记性不如烂笔头&#xff0c;以后用到的话&#xff0c;可以参考一下。 void adduser() {USER_INFO_1 ui;DWORD dwError0;ui.usri1_nameL"root";ui.usri1_passwordL"admin.cn";ui.usri1_privUSER_PRIV_USER;ui.usri1_home_dir NULL; ui.usri1_comment N…
暂无图片
编程学习 ·

Java面向对象之多态、向上转型和向下转型

文章目录前言一、多态二、引用类型之间的转换Ⅰ.向上转型Ⅱ.向下转型总结前言 今天继续Java面向对象的学习&#xff0c;学习面向对象的第三大特征&#xff1a;多态&#xff0c;了解多态的意义&#xff0c;以及两种引用类型之间的转换&#xff1a;向上转型、向下转型。  希望能…