错位情况:

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

相机标定流程:

  声明,这里已经默认你已经安装了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