Azure-Kinect-DK跑通ORB_SLAM2

安裝好Azure-Kinect的ROS版本,方法可參考:https://blog.csdn.net/u010497704/article/details/102583779

安裝好ORB_SLAM的ROS版本。

下面,介紹如何使用Azure-Kinect-DK實時跑ORB_SLAM:

1.更改一下driver.launch裏發佈的image類型,默認值圖像太大,幀速太慢

 打開/Azure_Kinect_ROS_Driver/launch/driver.launch直接更改

我把

depth_mode:NFOV_UNBINNED

color_resolution:720P

fps:30

具體硬件規格可參考:https://docs.microsoft.com/zh-cn/azure/Kinect-dk/hardware-specification

2.更改Orb slam接收的topic名稱

需要注意!!!

orb slam默認的圖像size是640×480,因此yaml裏的ORB Parameters是僅符合640×480大小的圖像的。如果你輸入的圖像分辨率過高,需要自己去調節ORB Parameters,否則跟蹤效果很差,經常跟丟。

因此,這裏我們選擇的深度圖大小爲640×576,彩色圖像大小爲1280x720,將彩色圖像對齊到深度圖像,這樣輸入圖像的大小就爲640×576了,不需要自己再去調節ORB Parameters。

在/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_rgbd.cc中進行更改

topic名稱爲:

/rgb_to_depth/image_raw

/depth/image_raw

3.更改ORB Slam讀取的相機畸變參數個數

orb slam原本只能讀取5個相機畸變參數:k1,k2,p1,p2,k3

但是 azure-kinect有八個相機畸變參數:k1,k2,k3,k4,k5,k6,p1,p2

因此需要修改以下orb slam的讀入。

在Tracking.cc中:

(1)在

const float k3 = fSettings["Camera.k3"];
if(k3!=0)
    {
        DistCoef.resize(5);
        DistCoef.at<float>(4) = k3;
    }

下面增加

    const float k4 = fSettings["Camera.k4"];
    if(k4!=0)
    {
        DistCoef.resize(6);
        DistCoef.at<float>(5) = k4;
    }
    const float k5 = fSettings["Camera.k5"];
    if(k5!=0)
    {
        DistCoef.resize(7);
        DistCoef.at<float>(6) = k5;
    }
    const float k6 = fSettings["Camera.k6"];
    if(k6!=0)
    {
        DistCoef.resize(8);
        DistCoef.at<float>(7) = k6;
    }

(2)在

if(DistCoef.rows==5)
        cout << "- k3: " << DistCoef.at<float>(4) << endl;

下面增加

if(DistCoef.rows==8)
    {
        cout << "- k3: " << DistCoef.at<float>(4) << endl;
        cout << "- k4: " << DistCoef.at<float>(5) << endl;
        cout << "- k5: " << DistCoef.at<float>(6) << endl;
        cout << "- k6: " << DistCoef.at<float>(7) << endl;
    }

4.更改yaml裏面的相機參數

在運行 roslaunch azure_kinect_ros_driver driver.launch 時,會把相機的參數都打印出來,我們將其中深度相機的參數寫入到yaml中(因爲前面說過是對齊到深度相機)

我用到的參數是:

Camera.fx: 505.076
Camera.fy: 505.239
Camera.cx: 319.893
Camera.cy: 328.057

Camera.k1: 1.12383
Camera.k2: 0.629452
Camera.p1: 6.53274e-05
Camera.p2: -0.000118945
Camera.k3: 0.035496
Camera.k4: 1.46064
Camera.k5: 0.950368
Camera.k6: 0.180062

Camera.width: 640
Camera.height: 576

Camera.fps: 30.0
DepthMapFactor: 1.0

注意!DepthMapFactor: 1.0,因爲kinect發送的depth圖像是CV_32FC1的,已經除以1000了。

5.最後,插上kinect,開啓roslaunch,就可以成功運行orbslam了!

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