环境:Ubuntu16.04+ROS Kinetic
一、kinect v1简介
Kinect v1深度相机拥有一个RGB彩色摄像头,一个红外线CMOS摄像机和一个红外发射器。相机的红外线CMOS摄像机和红外发射器以左右水平的方式分布。该相机采用的是以结构光为基础进行改进后的光编码(Light Coding)技术获得物体的深度信息。
Kinect的骨架坐标系和深度坐标系是以相机的IR(红外)摄像机为中心的右手坐标系。原则上,Z轴方向不会取负值,但是如果获得不可预知的值,则会给出-1。同时需注意,红外摄像机是坐标系原点,但深度值Z为红外到达点在Z轴方向的投影,而不是原点到红外到达点之间的线性距离。
sudo apt-get install ros-kinetic-openni-* ros-kinetic-freenect-*
rospack profile
roslaunch freenect_launch freenect.launch
相关topic
(1)RGB图像:/camera/rgb/image_color
ROS数据格式:sensor_msgs/Image
OPENCV数据格式:Mat
图像尺寸:640*480
像素数据类型:8UC3
(2)深度图像:/camera/depth/image
ROS数据格式:sensor_msgs/Image
OPENCV数据格式:Mat
图像尺寸:640*480
像素数据类型:32FC1
(3)点云数据(无整合RGB): /camera/depth/points
ROS数据格式:sensor_msgs/Image
PCL点云库数据格式:pcl::PointCloud<pcl::PointXYZ>
图像尺寸:有序点云,640*480
像素数据类型:double
三、相机标定
在ROS平台上使用camera_calibration包进行相机的标定,相机标定工作界面如图所示,该功能包基于张正友标定法,通过角点检测匹配实际物理坐标与图像坐标实现标定。
安装功能包
rosdep install camera_calibration
运行命令
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/camera/image_raw camera:=/camera
size 11x8: 注意是字母x,是棋盘内部角点个数
square 0.108:为米单位的正方形边长
image:订阅的图像
camera:发布到设置参数的服务器
(1)红外相机
(2)RGB相机
四、坐标修正
http://neareal.net/index.php?Kinect%2FKinectForWindowsSDK%2FBasics%2FStartUp%2FDataFormatOfSkeletonAndDepth
https://blog.csdn.net/heyijia0327/article/details/43538695
Kinectから取得される座標データの補正と物体の体積推定の試み