错位情况:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190908100420578.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhcnJ5Y29tZW9u,size_16,color_FFFFFF,t_70
![在这里插入图片描述](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对应的宽和长的黄十字点个数。 如下图
具体实施方案:
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
效果如下:
可以看到相机标定后错位少了很多。
注意事项:
坑1:标定深度的时候出现:
解决方案:没有数据的意思,需要记录前的三种数据(color彩色图像 ir红外图像 sync帧同步),每种100张,需要至少两种距离 坑2: 如何查看自己Kinect V2的序列号 方法: 运行 roslaunch kinect2_bridge kinect2_bridge.launch
可以发现:
这里的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
都会提示下面的错误:
这时候我们不用在意,只要按照指示, [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