kalibr相機和IMU一起標定

圖像的採集

ROS下需要藉助外部package的使用

  1. uvc_cam package
    https://github.com/ericperko/uvc_cam.git

  2. usb_cam package
    https://github.com/bosch-ros-pkg/usb_cam.git

安裝 usb_cam詳細步驟

  1. 方式一安裝二進制包:sudo apt install ros-kinetic-usb-cam
  2. 方式二源碼安裝:
mkdir -p usb_cam_ws/src
cd usb_cam_ws/
catkin_make
cd usb_cam_ws/src/
git clone https://github.com/bosch-ros-pkg/usb_cam usb_cam
cd usb_cam/
mkdir build 
cd build 
cmake ..
make 

檢驗一下是否安裝成功

rospack list 可以查看已經安裝的rospack
cd usb_cam_ws/
source devel/setup.bash
一個窗口運行:roscore
另一個窗口運行:roslaunch usb_cam usb_cam-test.launch

如果是外接的攝像頭需要做如下更改

cd usb_cam/launch
sudo gedit usb_cam-test.launch
<param name="video_device" value="/dev/video1" />	

0 代表電腦內置的攝像頭
1 是外接攝像頭

如果還有更多攝像頭 依次嘗試更改編號就可以

查看圖像工具

UVC視頻格式是MJPEG
usb_cam視頻格式是mjpeg

  1. guvcview
sudo apt install guvcview
guvcview

在這裏插入圖片描述默認打開的是筆記本的攝像頭
在這裏插入圖片描述

  1. image_view
    https://wiki.ros.org/image_view

  2. rqt

相機camera標定

  1. opencv標定

  2. ROS官方提供了用於單目或者雙目標定的camera_calibration包。
    單目:http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration
    雙目:http://wiki.ros.org/camera_calibration/Tutorials/StereoCalibration


Kalibr is a toolbox that solves the following calibration problems:

Multiple camera calibration: intrinsic and extrinsic calibration of a camera-systems with non-globally shared overlapping fields of view
Camera-IMU calibration: spatial and temporal calibration of an IMU w.r.t a camera-system. In an extended version, spatial and temporal1 calibration of a camera system w.r.t. multiple IMUs as well as IMU intrinsic calibration is supported.

kalibr

相機內參標定

在估計出內參之後,會進行優化迭代操作。
如果是多相機標定,在完成內參標定的同時,也會完成具有交叉視野相機外參的的標定。初始估計步驟也會進行多相機基線距離的估計,用作後續的迭代優化。
如果某一時刻有多個相機同時觀測靶標,則先求取視野內看見角點最多的那個相機的外參,然後根據預估計出的基線距離得到靶標到第一個相機的變換矩陣。

然後計算第一個相機的重投影誤差,構造優化函數。

我們進行camera-IMU標定的目的是爲了得到IMU和相機座標系的相對位姿矩陣T和相對時間延時t_shift(t_imu=t_cam + t_shift)。

我們進行camera-IMU標定的目的是爲了得到IMU和相機座標系的相對位姿矩陣T和相對時間延時t_shift(t_imu=t_cam + t_shift)。
需要的文件

1、.bag:包含有圖片信息和IMU數據的ROS包
2、camchain.yaml: 包含相機的內參、畸變參數的文件,如果是雙目的話,還包含兩個相機的位置轉換矩陣;
3、IMU.yaml: 包含IMU的噪聲密度、隨機遊走;

4、target.yaml:標定目標板的參數

所以在進行camera-IMU 標定前,我們分別要對camera內參和IMU進行標定得到相應的camchain.yaml和IMU.yaml文件
輸出的結果

IMU和相機座標系的相對位姿矩陣T和重投影誤差(或者像素誤差,Pixel Error(像素誤差)指的是the standard deviation of the reprojection error (in Pixel) in both x and y directions respectivly(在x和y方向上以像素爲單位的重投影誤差的標準差。根據優化的準則我們知道重投影誤差越小,就說相機標定的精度越高)。
準備工作

提前準備好camchain.yaml(包含相機的內參、畸變參數的文件,如果是雙目的話,還包含兩個相機的位置轉換矩陣)、IMU.yaml(包含IMU的噪聲密度、隨機遊走)、target.yaml(標定目標板的參數),並製作.bag文件。

參考資料

https://github.com/ethz-asl/kalibr
https://blog.csdn.net/chengde6896383/article/details/89879364
https://blog.csdn.net/heyijia0327/article/details/43538695

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