天天看點

基于kalibr的xtion pro live 相機及與IMU的标定

  • kalibr的安裝
  • 點選打開連結https://github.com/ethz-asl/kalibr
  • Kalibr 提供兩種使用方式。                                                                                                                                                                                                                               第一種為CDE下直接使用,作者将所需的庫檔案打包好,省去了配置dependency的步驟,可以直接從

    https://github.com/ethz-asl/kalibr/wiki/downloads下載下傳, 注意需要科學浏覽。下載下傳之後直接用./cde-exec+指令 即可使用對應的工具。

    例如如果我們想使用kalibr内的kalibr_calibrate_cameras功能,使用

    ./ced-exec kalibr_calibrate_cameras --target april_6x6.yaml --bag static.bag --models pinhole-equi pinhole-equi omni-radtan omni-radtan --topics /cam0/image_raw /cam1/image_raw /cam2/image_raw /cam3/image_raw
               

    但是此方法不能使用其中的某些功能,例如我們想使用calibration validator,在CDE環境下是無法使用的。                                                                                  第二種:build from source。

    根據https://github.com/ethz-asl/kalibr/wiki/installation的part B中的描述進行安裝。

  1. xtion pro live 相機标定
    1. 首先我們要下載下傳PTAM,用ptam的cameracalibrator來标定。

      下載下傳ptam包,編譯之前安裝依賴項:

      sudo apt-get install freeglut3-dev
      sudo apt-get install libblas-dev
      sudo apt-get install liblapacke-dev
                 
      進入PtamFixParams.yaml檔案第2、3行修改xtion_pro_live的圖像分辨率為:
      ImageSizeX: 640
      ImageSizeY: 480
                 
      成功編譯後,進入cameracalibrator.launch修改輸入topic :
      <?xml version="1.0"?>
      
      <launch>
         <include  file="$(find openni2_launch)/launch/openni2.launch" />
         <node name="image_proc" pkg="image_proc" type="image_proc" ns="camera">
             <remap from="camera_info" to="/camera/rgb/image_info" />
             <remap from="image_raw" to="/camera/rgb/image_raw" />
             <remap from="image_mono" to="/mono_image" />
         </node>
         <node name="cameracalibrator" pkg="ptam" type="cameracalibrator" clear_params="true" output="screen">
         <!--     <remap from="image" to="/camera/rgb/image_raw" /> -->
              <remap from="image" to="/mono_image" />
              <remap from="pose" to="pose"/>
          <rosparam file="$(find ptam)/PtamFixParams.yaml"/>
         </node>
      </launch>
                 
      做完了這些,你還需要把ptam中的calib_pattern.pdf列印出來作為标定棋盤,你就可以運作校準程式了,在終端中輸入:
      roslaunch ptam cameracalibrator.launch
                 
    2. 針對xtion相機還有一種pinhole模型,給出pinhole模型标定過程:
                 
      1. 先把标定程式下載下傳下來: git clone https://github.com/ros-perception/image_pipeline.git
                   
      2. 去把最新的依賴檔案vision_opencv下載下傳下來:
        git clone https://github.com/ros-perception/vision_opencv.git 
                   
      3. 扔到空間内的src下編譯,然後開始标定
        roslaunch openni2_launch openni2.launch 
        rosrun camera_calibration cameracalibrator.py --size 11x7 --square   0.02 image:=/camera/rgb/image camera:=/my_camera --no-service-check
                   

        有人會問了不是12x8個方格嗎?對啊,是以有11x7内點啊。

        有人會問camera:=/my_camera這是什麼東東?相機device。因為有–no-service-check是以/my_camera可以随便寫!!不檢查。但不可以省略。下面的過程可以看下:

        教程:http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration

  2. 相機/IMU标定
    1. 如何标定,标定所需檔案
      * XX.bag:包含有圖檔資訊和IMU資料的ROS包
      * camchain.yaml:包含相機的内參和畸變參數的檔案
      * IMU.yaml:包含IMU的基本參數,噪音等
      * target.yaml:标定目标闆的參數
                 
    2. 之前說過需要列印一個棋盤格,kalibr也提供一種制作方式,
      kalibr_create_target_pdf --type apriltag --nx [NUM_COLS] --ny [NUM_ROWS] --tsize [TAG_WIDTH_M] --tspace [TAG_SPACING_PERCENT]
                 
      将生成的pdf列印出來,置于平穩,光照充足的地方,注意要保持平整。Kalibr作者推薦将camera固定,然後移動标定闆,這樣可以提高标定的穩定性,但是鑒于我使用場景受限,我使用的是晃動camera方法。
    3. 之後就可以開始錄制bag了,使用
      rosbag record /camera/rgb/image_raw  /imu/data
                 

      标定時注意激活所有的軸,即可錄制包含三個topic的rosbag了。

      注意錄制過程中camera不要距離标定闆太近,否則會出現無法初始化focal length的錯誤。Kalibr是一個十分強大的工具箱,提供了很多工具。我們可以使用calibration validator進行标定的驗證,原理是對重投影誤差進行量化分析。大家可以自行驗證。工具使用上一步驟的camera标定結果以及标定闆的yaml檔案,具體指令如下:

      kalibr_camera_validator --cam camchain.yaml --target target.yaml
                 
      其中camchain.yaml為相機标定結果yaml,target.yaml為标定闆yaml。部分資料可在以下連結下載下傳:點選打開連結https://github.com/ethz-asl/kalibr/wiki/downloads
    4. 若對相機标定結果滿意我們可以繼續進行camera以及imu的聯合标定步驟,此步使用了如下資訊:

      1. 标定闆yaml

      2. 相機标定結果yaml

      3. imu内參yaml

      4. 前面使用的對應bag

      有了如上材料即可進行聯合标定,具體如下:

      kalibr_calibrate_imu_camera --target aprilgrid6x4.yaml --cam camchain-2017-07-07-09-13-29.yaml --imu imu.yaml --bag 2017-07-07-09-13-29.bag --bag-from-to 5 45
                 
      最後的--bag_from_to是選取地5-45s的bag資料,去除了拾取防止裝置産生的抖動部分影響。我們建議進行多組标定之後将标定結果進行最佳無偏估計,不建議對R部分直接取平均值,可以将多組資料的R部分轉換成四元數。之後進行處理。
    5. 标定完成後一般會生成三個檔案,其中一個,
      基于kalibr的xtion pro live 相機及與IMU的标定

      因為可能存在的人為的安裝問題,真實的IMU到相機的的轉移矩陣可能不确定.由于沒有準确的判定準則,故目前标定的結果,主要基于以下兩個方面:

      * 真實的IMU坐标系和相機坐标系的轉換,即相機和IMU的實體距離

      * 标定結果的穩定性上

  3. 未解決的部分
    1. 相機IMU之間的坐标平移矩陣沒有獲得;
    2. imu的标定沒有完成。
    3. 标定完後,代碼運作有所改善,但沒有預想的好。
  4. 部分連結:
    1. 點選打開連結http://blog.csdn.net/binbin_sun/article/details/53791404
    2. 點選打開連結https://github.com/ethz-asl/kalibr/wiki/downloads
    3. http://blog.csdn.net/xu1129005165/article/details/52948992
    4. 點選打開連結http://blog.csdn.net/u013004597/article/details/51965940