kalibr相機標定和IMU標定

相機標定

打印標定板和對應的aprilgrid.yaml

target_type: 'aprilgrid' #gridtype
tagCols: 6               #number of apriltags
tagRows: 6               #number of apriltags
tagSize: 0.038           #size of apriltag, edge to edge [m]
tagSpacing: 0.3          #ratio of space between tags to tagSize

錄製.bag

使用rosbag record -O cam /color錄製bag包

也可以通過以下命令調整頻率

rosrun topic_tools throttle messages /camera/color/image_raw 4.0 /color

錄一分鐘左右,錄的時候對着標定板移動,按下ctrl+c 結束錄製

標定

kalibr_calibrate_cameras --target aprilgrid.yaml --bag camd4.bag --models pinhole-radtan --topics /color --show-extraction

我調用出錯,應該使用rosrun去運行:

rosrun kalibr kalibr_calibrate_cameras --target target.yaml --bag cam.bag --models pinhole-radtan --topics /color --show-extraction

IMU標定

標定加速度偏差和零偏

在realsense驅動目錄下librealsense/tools/rs-imu-calibration運行:

python rs-imu-calibration.py

我的路徑:~/MyCodes/realsense/librealsense

標定其噪聲模型

  • 安裝imu標定工具到~/MyCatkinWs/imu_ws
  • 建立對應的launch文件:(~/MyCatkinWs/imu_ws/src/imu_utils/launch/d455_imu_calibration.launch)
<launch>
    <node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
        <param name="imu_topic" type="string" value= "/camera/imu"/>
        <param name="imu_name" type="string" value= "d455_imu_calibration"/>
        <param name="data_save_path" type="string" value= "$(find imu_utils)/data2/"/>
        <param name="max_time_min" type="int" value= "10"/>
        <param name="max_cluster" type="int" value= "100"/>
    </node>
</launch>

其中 是標定時間的意思

  • 修改 rs_camera.launch:(/opt/ros/noetic/share/realsense2_camera/launch/rs_camera.launch)
<arg name="gyro_fps"            default="200"/>
 <arg name="accel_fps"           default="200"/>
<arg name="enable_gyro" default="true"/>
<arg name="enable_accel" default="true"/>
<arg name="enable_sync" default="false"/> #這裏存疑
<arg name="unite_imu_method" default="linear_interpolation"/>
  • 靜止錄製bag
roscore
roslaunch realsense2_camera rs_camera.launch 
rosbag record -O imu_calibration /camera/imu 
  • 標定
    終端1:
    source ~/MyCatkinWs/imu_ws/devel/setup.sh
    roslaunch imu_utils d455_imu_calibration.launch
    
    終端2:
    source ~/MyCatkinWs/imu_ws/devel/setup.sh 
    cd ~/MyCatkinWs/imu_ws //數據包在這個文件夾下
    rosbag play -r 200 imu_calibration.bag
    
    看(1)的terminal,會有一串東西產生,而且該terminal已經可以輸入命令了(意味着標定進程已經結束),說明已經標定好了,這時候要看結果
    cd ~/MyCatkinWs/imu_ws/src/imu_utils/data2
    

裏面有一個文件:
d455_imu_calibration_imu_param.yaml

聯合標定

運行realsense後映射話題:

roslaunch realsense2_camera rs_camera.launch # 運行realsense
# 映射話題
rosrun topic_tools throttle messages /camera/color/image_raw 20.0 /color
rosrun topic_tools throttle messages /camera/imu 200.0 /imu

錄製bag,要對着棋盤格(~/MyCatkinWs/kalibr_workspace/target.pdf),錄製將近兩分鐘:

rosbag record -O dynamic /color /imu

根據第二部標定的imu(d455_imu_calibration_imu_param.yaml)。生成imu.yaml文件:
由於我們剛剛也是在kalibr工作環境下標定的,所以直接用剛剛標定好的相機yaml文件即可。
即上述所說的cam文件
camchain-…camd455i.yaml:

cam0:
  cam_overlaps: []
  camera_model: pinhole
  distortion_coeffs: [0.11114194921960645, -0.2171600270591326, -0.0037942616908056637,
    -0.004000340562604045]
  distortion_model: radtan
  intrinsics: [579.5589935482029, 578.1762234104125, 326.6772381912598, 243.3955018655041]
  resolution: [640, 480]
  rostopic: /color

標定:

rosrun kalibr kalibr_calibrate_imu_camera --target target.yaml --cam cam-camchain.yaml --imu imu.yaml --bag dynamic.bag --show-extraction

生成好多個文件,主要關注一個文件:
camchain-imucam-dynamic.yaml
並且確認重投影誤差,我的誤差爲0.56個像素我看網上其他人能到0.15以下已經是很好的了。

參考:
https://blog.csdn.net/Hanghang_/article/details/103546033
https://zhuanlan.zhihu.com/p/396368225

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