写在前面

1. 你用什么数据标定的就用对应的内参,如果缩放了图像就要同时缩放内参(包括fx,fy,cx,cy,d0,d1,d2,d3,d4)。(比如说:我程序中用的是1920x1080的图像,那我就是需要用在HD=1920x1080下标定的内参,标定时采集的图像也应该是1920x1080的)
**备注:**相机内参主要是fx fy cx cy。其中cx cy表示图像中心点,下采样后,均按比例缩小。fx 表示f*a 其中f表示焦距 a表示底片中 1m内含有多少个像素。当图像下采样后,f没变,但a随比例正比变化,所以fx fy也按比例减小。--图像下采样后对应的相机内参矩阵怎么变?

2.标定时应该选择光照充足的环境(开始标定彩色相机时纳闷为什么一直捕捉不到,后来实验室加开了一排灯后效果明显变好,坑啊,,)

3. 从标定流程中可以看出,我们不同相机的内参以及配准的标定是需要依次分别进行的,即标定完一个相机,再采集下一个相机的图像进行标定。

4.若选择标定板的尺寸不同记得更改程序

5. 深度相机测量范围:0.5 ~ 4.5 m

6. 关于单位:内参矩阵的单位是像素;由于fx=f/dx,dx:mm/Pix,故(u,v)单位是像素,图像归一化坐标系(x,y)及其之后的单位是mm;尺度因子相当于Zc的长度;重投影误差单位为像素

7.标定结果的储存与说明(/home/junwang/catkin_ws/src/iai_kinect2/kinect2_bridge/data):
calib_color.yaml :彩色相机的内参和畸变
calib_depth.yaml :depthShift: -4.2799976633573998e+01??
calib_ir.yaml :彩色相机的内参和畸变
calib_pose.yaml:配准数据

8.在启动相机时调用标定的数据:
首先,寻找符合序列号(010733764647)的文件夹中的数据;

[Info] [Freenect2Impl] found valid Kinect v2 @2:7 with serial 010733764647//标定后的数据的存放位置

如若没有,则按照data文件夹中文件名的排序进行调用。

使用iai_kinect2標定说明

在ubuntu下使用KinectV2需要做两件事情,一是,编译KinectV2自带的开源驱动libfreenect;二是,使用Kinect2_bridge在ROS下采集他的图像。

iai_kinect中含有四个模块,我们主要用他的bridge进行图像间的转换;此外,还要使用kinect2_registration进行标定

标定之后呢,会得到kinect2彩色头、深度头、红外头的内参和外参,它们都以yaml模式存储在你的机器内。kinect2_bridge会自动检测你的标定文件**(自动是按data文件夹中的内参命名顺序调用)**,对深度图进行校正。之后slam过程主要使用彩色头的内参哦!

参考:http://www.cnblogs.com/gaoxiang12/p/5161223.html

具体流程:

https://github.com/code-iai/iai_Kinect2
https://github.com/code-iai/iai_kinect2/tree/master/kinect2_calibration

install the dependencies

//略,见其上网址详细说明教程

build it:

cd ~/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE="Release"

Connect your sensor and run kinect2_bridge:

roslaunch kinect2_bridge kinect2_bridge.launch

Calibrate your sensor using the kinect2_calibration详细步骤:

#新终端
rosrun kinect2_bridge kinect2_bridge _fps_limit:=2//以每秒少的帧数启动kinect2_bridge(以便在您的CPU上轻松实现)#新终端
mkdir ~/kinect_cal_data; cd ~/kinect_cal_data//为校准数据文件创建一个目录rosrun kinect2_calibration kinect2_calibration chess7x9x0.025 record color//记录彩色摄像机的图像
//出现这样的错误提示是无妨的【Erro:Tried to advertise a service that is already advertised in this node 】[/kinect2_calib_1545719733756453834/compressed/set_parameters]
//出现图像窗口后,按空格键开始收集图片即可
rosrun kinect2_calibration kinect2_calibration chess7x9x0.025 calibrate color//校准内参矩阵rosrun kinect2_calibration kinect2_calibration chess7x9x0.025 record ir//记录红外摄像机的图像
rosrun kinect2_calibration kinect2_calibration chess7x9x0.025 calibrate ir//校准红外摄像机的内参矩阵rosrun kinect2_calibration kinect2_calibration chess7x9x0.025 record sync//在两台摄像机上同步录制图像:
rosrun kinect2_calibration kinect2_calibration chess7x9x0.025 calibrate sync//校准配准矩阵 rosrun kinect2_calibration kinect2_calibration chess7x9x0.025 calibrate depth//校准深度测量:

通过查看kinect2_bridge打印出的第一行,找出kinect2的序列号,这部分看起来像这样(此为我的设备序列号):

device serial: 010733764647

在kinect2_bridge / data / $ serial中创建校准结果目录:

roscd kinect2_bridge/data; mkdir 010733764647

将以下文件从校准目录(〜/ kinect_cal_data)复制到刚刚创建的目录中: calib_color.yaml calib_depth.yaml calib_ir.yaml calib_pose.yaml

重启kinect2_bridge并对更好的数据感到惊讶

cd ~/catkin_ws/
#运行kinect2_bridge
roslaunch kinect2_bridge kinect2_bridge.launch
#打开一个新终端,查看点云图
rosrun kinect2_viewer kinect2_viewer sd cloud

注意:kinect2_calibration.cpp不需要改任何参数,目前的calibration版本不需要认为调整,存的参数文件为K2_TOPIC_HD下的参数,但在用qhd或sd分辨率时,会自动转换为相应的内参(用QHD校正了很多次,看camera_info的出来的结论!)
https://blog.csdn.net/Siyuada/article/details/78981555
正解啊!!!!

注意事项

  1. 校准图案非常平坦非常重要,否则误差很大。
  2. 用卡尺检查印刷图案的特征之间的距离是否正确,chess5x7x0.03校验:黑色和白色角的交叉点之间的距离应精确到3厘米
  3. 拍摄图像时,传感器稳定(图像清晰且不模糊)非常重要,因为图像不是同时拍摄的,手中握着他们并不好,三脚架将专门帮助您确保传感器在IR和RGB图像拍摄之间没有移动【特别是对于外部校准】。
  4. 图像中标定板与相机的相对位姿,一般要让标定板占据整张图像的一半左右面积(远距离可以保证么?)
  5. 我通常使用0.6到2.5米之间的距离,近中远;要走得更远,你需要一个更大的棋盘,但是你不能离得更近。
  6. A4纸太小了,要是有机会尽量用大点的纸吧。

无影响

拍摄照片的先后顺序--经试验,小数点后前五位都是一样的,随机抽掉一张结果影响也不大
选用棋盘格的类型大小--单目不影响(尺度不变性),双目需指定
标定板的位姿对标定结果影响比标定照片数目的影响大得多。(按照张正友标定法原文,拍照顺序是从正对图像开始,每次选择一个坐标轴,旋转45度的角度,拍摄16幅左右的图片就可以,但是感觉可以角度小一点)
参考:http://www.yanglajiao.com/article/lxy_2011/54313799

采集过程

放置图案非常重要,这些图片较少,或者与图案类似的许多图像可以获得良好的重投影误差,但校准不好。我通常通过以下步骤捕获大约100 - 200张图像:
将图案放置在相机附近;将图案放置在图像的左上角;在拍照时沿着该行移动往下走一排,然后进行第三步;直到你最终在右下角。
在距离(<= 1m),中距离(> 1m,<2.5m)和远(> = 2.5m)的3个不同距离进行【距离取决于棋盘尺寸】
我们通常从一个短距离开始;并且标定板相对于相机要有正视、仰视、俯视、左斜视和右斜视等,想象一下从相机传感器射出的光线,这可以确保您拥有校准图案不垂直于该光线的图像。
按照张正友标定法原文,拍照顺序是从正对图像开始,每次选择一个坐标轴,旋转45度的角度,拍摄16幅左右的图片就可以,但是感觉可以角度小一点。

参考:
https://blog.csdn.net/zilanpotou182/article/details/68491447
https://blog.csdn.net/hehedadaq/article/details/79559310

标定结果分析

re-projection error
在标定的时候我们经常用到重投影误差作为最终标定效果的评价标准,根据优化的准则我们知道,重投影误差越小,就说相机标定的精度越高。

重投影误差:指的真实三维空间点在图像平面上的投影(也就是图像上的像素点)和重投影(其实是用我们经过外参估计后的计算值得到的虚拟的像素点)的差值,单位:像素
Bundle adjustment优化,即为最小化重投影误差
参考:https://www.cnblogs.com/Jessica-jie/p/7739775.html

Pixel Error(像素误差):指的是在x和y方向上以像素为单位的重投影误差的标准差.

BUG整理

1.执行roslaunch kinect2_bridge kinect2_bridge.launch出现下面的错误:

[kinect2_bridge.launch] is neither a launch file in package
[kinect2_bridge] nor is [kinect2_bridge] a launch file name

解决方案:检查3个依赖项是否安装,依赖包括:ROS Indigo (注意:ROS Indigo的iai_kienect包和ROS Kinect的 iai_kinect包不是一个) ,OpenCV 2.X,(注意:OpenCV3.X不能使iai_kinect正常工作),PCL1.7. x 【更新后关机重启才完美解决,每次运行launch文件都必须要运行source devel/setup.bash启动文件】

2.执行rosrun kinect2_viewer kinect2_viewer出现问题:

[rospack] Error: package 'kinect2_viewer' not found

解决:也是需要先配置ROS工作环境,在catkin_ws文件夹下执行source devel/setup.bash即可。
在新打开的终端里面要重新配置工作环境(ubuntu特性)
ps:一劳永逸的办法,执行gedit ~/.bashrc打开.bashrc配置文件,在最后加入source /home/XXXX(你的用户名主文件夹)/catkin_ws/devel/setup.bash即可每次打开终端时自动执行。
参考:https://blog.csdn.net/sinat_36171220/article/details/77860078

3.运行rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 record color时出现:

[ERROR] Tried to advertise a service that is already advertised in this node
[/kinect2_calib_1458721837266890808/compressed/set_parameters]

解决方案:检查一下你的棋盘格板是不是按照标定标准设置的,如果标定程序已经检测到了你棋盘格板,选定标定显示窗口,按空格即可;点击图像界面,同时按空格键保存

4.标定深度的时候出现:

[ERROR] [DepthCalibration::compareDists] no distance sample data!

解决方案:没有数据的意思,需要记录前的三种数据,每种100张,需要至少两种距离

备注:

1.相机外参 Vs 手眼标定
相机外参:是相机坐标系和世界坐标系之间的对应关系;
手眼标定:是相机和机械手之间的关系。
如果将世界坐标系和机械手坐标系重合?

2.採用QHD分辨率使用kinect2_calibration
参考:https://hk.saowen.com/a/6a4c27b2513f41ddf7017e4e789ba2bd1ff49c956ebb69951faffcd04998fc91
1)修改kinect2_calibration.cpp文檔如下:
a)K2_TOPIC_HD 改為 K2_TOPIC_QHD
b)把文檔中涉及到分辨率1920x1080都改成960x540,這一步非常重要,不然校正出來的內參還是按照HD分辨率進行校正
2)編譯進程
cd ~/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE=“Release”
參考“http://www.bubuko.com/infodetail-2151412.html”
参考:http://www.mamicode.com/info-detail-1886444.html
1311-1313这三行命令:
std::string topicColor = “/” + ns + K2_TOPIC_HD + K2_TOPIC_IMAGE_MONO;
std::string topicIr = “/” + ns + K2_TOPIC_SD + K2_TOPIC_IMAGE_IR;
std::string topicDepth = “/” + ns + K2_TOPIC_SD + K2_TOPIC_IMAGE_DEPTH;
正好和上面的输出信息对应:
Topic color: /kinect2/hd/image_mono
Topic ir: /kinect2/sd/image_ir
Topic depth: /kinect2/sd/image_depth
因此把 K2_TOPIC_HD 改为 K2_TOPIC_QHD 即可。保存。然后重新编译

KinectV2标定相关推荐

  1. ros下用kinectv2运行orbslam2

    目录 前提 创建工作空间 orbslam2源码配置.测试: 配置usb_cam ROS功能包 配置kinect kinectv2标定 在ROS下用kinect运行orbslam2 出错: 前提 vim ...

  2. 使用iai_kinect2标定kinectV2相机

    实验背景:因为需要制作bundlefusion需要的数据集,所以需要使用kinectV2相机获取rgbd图像,年前的时候在我的笔记本上安装了libfreenect2库和iai_kinect2,标定过一 ...

  3. Ubuntu14.04 + KinectV2驱动安装 以及 Ros接口(基于网上方法试错 改进版)

    一 前言 本来是没打算写这篇博客的,但由于自己快临近毕业了,然后自己大论文方向是视觉SLAM与惯导融合方法研究,因为需要配置ORBSLAM2,因此需要在Ubuntu系统下用到Kinect.早在去年我就 ...

  4. KinectV2+机械臂实现目标抓取上位机和下位机软件

    KinectV2+机械臂实现目标抓取上位机和下位机软件. 上位机软件通过vs2019+qt5通过C++语言编写. 上夜机运行特征点检测算法,获取目标图像,图像配准,目标位置计算,相机内参和手眼标定数据 ...

  5. 用OpenCV进行摄像机标定

    用OpenCV进行摄像机标定 照相机已经存在很长时间了.然而,随着廉价针孔相机在20世纪末的引入,日常生活中变得司空见惯.不幸的是,这种廉价伴随着它的代价:显著的扭曲.幸运的是,这些常数,通过校准和一 ...

  6. 摄像头标定GML Camera Calibration

    摄像头标定GML Camera Calibration GML Camera Calibration官方版是一款十分优秀出色的相机标定软件,GML Camera Calibration官方版界面友好, ...

  7. 单目和多目视觉统一标定

    单目和多目视觉统一标定 一.单目视觉标定 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参 ...

  8. 传感器标定两篇顶会论文解析

    传感器标定两篇顶会论文解析 一.在城市环境中的多个3D激光雷达的自动校准 标题:Automatic Calibration of Multiple 3D LiDARs in Urban Environ ...

  9. RGB-D对红外热像仪和毫米波雷达标定

    RGB-D对红外热像仪和毫米波雷达标定 Extrinsic Calibration of Thermal IR Camera and mmWave Radar by Exploiting Depth ...

最新文章

  1. 和12岁小同志搞创客开发:手撕代码,做一款亮度可调节灯
  2. 【spring】使用构造方法依赖注入
  3. 记一次服务器执行MySQL耗时问题
  4. java B2B2C springmvc mybatis电子商务平台源码-------zuul网关实现
  5. Siri 自动拨打 911、Google 建筛查网站、IBM 测药物成分,国际抗疫在行动!
  6. js转义html,反转义
  7. python扫雷代码_没有Python不能做的游戏,这些都可以做(附赠大型游戏开发源码)...
  8. Excel 内的 VBS 脚本编程锦策
  9. jflash合并bin文件及hex文件
  10. GFlags使用文档
  11. 《opencv学习笔记》-- 感兴趣区域(ROI)、图像混合
  12. 计算机网络课制作双绞线实验,计算机网络实验报告(双绞线).doc
  13. 【同花顺】同花顺解题
  14. 钢琴 |《小汤普森简易钢琴教程》第一册
  15. python 关联规则
  16. 前端----HTML/CSS 单边框
  17. “hulu客厅”开放,Spark培训计划报名啦
  18. 织梦php实现评论,织梦文章评论功能的使用
  19. SpringBoot实体类返回JEON属性值排空返回
  20. Top 50 Most Popular APIs on RapidAPI (2018)

热门文章

  1. HDU 4115 Eliminate the Conflict(2-sat 判解存在性)
  2. Greenplum数据库(一)Greenplum简介及安装
  3. 第3讲 C语言之函数讲解 Function
  4. 基于GIS技术的环境领域应用
  5. C# 4.0 新特性 -- Contra-Variance
  6. 勇创世界一流!移动云为我国数字经济发展提供有力支撑
  7. 计算机视觉图像常用基本算法(阈值化、形态学变化、模糊)
  8. 汉语拼音大全(竖排版)_php_sir_新浪博客
  9. MATLAB复现代码:基于主从博弈理论的共享储能与综合能源微网优化运行研究
  10. 壹账通发布智能供应链金融平台,主攻5大技术应用场景