Kinect V2 相机标定

230
0
2021年1月29日 09时12分

错位情况:

 

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190908100420578.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhcnJ5Y29tZW9u,size_16,color_FFFFFF,t_70

 

微信图片_20210126151710

 

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190908120506540.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhcnJ5Y29tZW9u,size_16,color_FFFFFF,t_70

针对上述情况我们需要对相机进行配准,从而保证相机的彩色图与深度图不会错位。

 

相机标定流程:

 

声明,这里已经默认你已经安装了libfreenect2 和ros下的iai_kinect2,
参考安装教程:https://blog.csdn.net/u012424737/article/details/80609451
这种标定方法是先保存(record)一些图片,然后再计算标定(calibrate)。后面的坑3会说明为什么这么做。

 

需要标定四样东西:color彩色图像 ir红外图像 sync帧同步 depth深度图像

 

前期准备需要打印好你的标定板,可以从以下网址下载不同的标定板

 

chess5x7x0.03.pdf
chess7x9x0.025.pdf
chess9x11x0.02.pdf

 

下面我选择了用chess5x7x0.03标定板,标定板的5和7对应的宽和长的黄十字点个数。
如下图

 

微信图片_20210126151729

 

具体实施方案:

 

1,连接传感器并运行kinect2_bridge

 

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

 

2,使用iai_kinect2下的kinect2_calibration对传感器进行标定

 

#新终端
rosrun kinect2_bridge kinect2_bridge _fps_limit:=2//以每秒少的帧数启动kinect2_bridge(以便在您的CPU上轻松实现)
#新终端
//为校准数据文件创建一个目录(目录任意),并转到这个目录下
mkdir  /home/harry/catkin_ws/src/kinect_cal_data; 
cd /home/harry/catkin_ws/src/kinect_cal_data

rosrun kinect2_calibration kinect2_calibration chess5x7x0.03  record color//记录彩色摄像机的图像
//出现这样的错误提示是无妨的请看后面

//出现图像窗口后,按空格键开始收集图片即可,采集50张左右,有位置深度变化
rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 calibrate color//校准内参矩阵

rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 record ir//记录红外摄像机的图像 
rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 calibrate ir//校准红外摄像机的内参矩阵

rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 record sync//在两台摄像机上同步录制图像: 
rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 calibrate sync//校准配准矩阵 

rosrun kinect2_calibration kinect2_calibration chess5x7x0.03 calibrate depth//校准深度测量:

 

下一步,找到设备的序列号,如坑3

 

roscd ~/kinect2_bridge/data
mkdir  008426164947

 

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

 

重启kinect2_bridge并对更好的数据感到惊讶,会看到相机的彩色图与深度图不会错位

 

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

 

效果如下:

 

微信图片_20210126152039

 

可以看到相机标定后错位少了很多。

 

注意事项:

 

坑1:标定深度的时候出现:

 

微信图片_20210126152052

 

解决方案:没有数据的意思,需要记录前的三种数据(color彩色图像 ir红外图像 sync帧同步),每种100张,需要至少两种距离

 

坑2:
如何查看自己Kinect V2的序列号

方法:
运行 roslaunch kinect2_bridge kinect2_bridge.launch

 

可以发现:

 

微信图片_20210126152108

 

这里的008426164947便是自己设备的序列号

 

坑3:
在运行下面三条语句时

 

rosrun kinect2_calibration kinectcalibration chess5x7x0.03 record color
rosrun kinect2_calibration kinectcalibration chess5x7x0.03 record ir
rosrun kinect2_calibration kinectcalibration chess5x7x0.03 record sync

 

都会提示下面的错误:

 

微信图片_20210126152130

 

这时候我们不用在意,只要按照指示, [SPACE, s] – Save current frame
按空格保存图片即可,每个类型保存各50张左右张,可以在创建的kinect_cal_data下查看即可,然后再分别对每个类型的50张左右图片进行计算。

 

参考网址:
https://blog.csdn.net/sinat_23853639/article/details/80276848
https://blog.csdn.net/qq_40313712/article/details/85231192
https://blog.csdn.net/qingdu007/article/details/79204115

发表评论

后才能评论