ROS進階——kinect v1的使用

環境:Ubuntu16.04+ROS Kinetic


一、kinect v1簡介

    Kinect  v1深度相機擁有一個RGB彩色攝像頭,一個紅外線CMOS攝像機和一個紅外發射器。相機的紅外線CMOS攝像機和紅外發射器以左右水平的方式分佈。該相機採用的是以結構光爲基礎進行改進後的光編碼(Light Coding)技術獲得物體的深度信息。


    Kinect的骨架座標系和深度座標系是以相機的IR(紅外)攝像機爲中心的右手座標系。原則上,Z軸方向不會取負值,但是如果獲得不可預知的值,則會給出-1。同時需注意,紅外攝像機是座標系原點,但深度值Z爲紅外到達點在Z軸方向的投影,而不是原點到紅外到達點之間的線性距離。

0.png

2.png


二、環境配置
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相機



四、座標修正

座標修正包含兩部分內容:
(1)第一部分是修正相機獲取數據不完整導致的誤差,深度相機在獲取視野中物體深度信息四隻獲取了物體面對相機那部分的表面的數據,沒有獲取相反一面的數據,因此需根據目標物體本身對座標進行修正,排除因深度相機獲取數據不完整造成的偏差。
(2)第二部分是修正深度相機本身的測量誤差,Kinect在獲取目標物體深度信息時,隨着目標物體與相機之間距離的增大誤差也隨之增大,下表爲測量物體與Kinect之間實際距離與平均測量距離之間的誤差,下面曲線圖爲實際距離與誤差曲線圖及其趨勢線,誤差計算方式爲下表右式。因Kinect的誤差隨着距離的減少下載,因此以對數的方式對誤差曲線進行擬合獲得誤差修正公式,y爲誤差,x爲測量物體與Kinect實際距離。


參考

http://neareal.net/index.php?Kinect%2FKinectForWindowsSDK%2FBasics%2FStartUp%2FDataFormatOfSkeletonAndDepth

https://blog.csdn.net/heyijia0327/article/details/43538695

Kinectから取得される座標データの補正と物體の體積推定の試み




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章