[ROS2]カメラキャリブレーションの方法

カメラキャリブレーションを行うことでレンズの歪みを補正できる。

環境

Raspberry Pi 5Ubuntu Desktop 24.04.2 LTS
ROS2 jazzy
キャリブレーションの操作を行う。      
環境設定
PC(GOODMINI2)Winddows11 WSL2ここからRaspberry Pi 5にssh接続。
カメラの画像をROS2にパブリッシュする。
ATOMS3R M12QVGA(240×320)camera_IP_FIXEDをアップロードしておく
IP:192.168.0.105
c270USB接続

環境設定

Raspberry Pi 5にROS2がインストールされた状態(参照)に必要なパッケージをインストールする。

ROS2とOpenCVのインターフェースとなるパッケージ
	sudo apt install -y ros-jazzy-vision-opencv

※以下は「すでに最新バージョン 」と表示される。
	sudo apt install -y ros-jazzy-camera-calibration-parsers
	sudo apt install -y ros-jazzy-camera-info-manager
	sudo apt install -y ros-jazzy-launch-testing-ament-cmake
	sudo apt install -y ros-jazzy-image-pipeline
USBカメラ用ノードのパッケージ
sudo apt install -y ros-jazzy-usb-cam

Webカメラを起動を起動する

。
ros2 run usb_cam usb_cam_node_exe --ros-args --remap video_device:=/dev/video0 -p framerate:=15.0

ATOMS3R M12カメラキットの場合 --- USBケーブルに接続して行う。
ros2 run atoms3r_m12 atoms3r_m12_usb_image_info_pub

パブリッシュされていることを確認する。
ros2 run rqt_image_view rqt_image_view

カメラキャリブレーションを実行する

チェックボードを表示する。
印刷したチェックボードではなく23インチのディスプレイにボードの画像を表示する。chrom上でF11を押してフルスクリーンにする。この状態で各四角画像の大きさが29mmになる。

キャリブレーションのプログラムを起動する。

でキャリブレーションプログラムを起動する。
	ros2 run camera_calibration cameracalibrator --size 7x7 --square 0.024 --no-service-check --approximate=0.1 --ros-args -r image:=/image_raw

キャリブレーションの操作。
下の画像のようにチェックボードが画面内に表示される状態を保ちながら、様々な向きにカメラを移動する。
「COMITT」が緑に変わったら「COMITT」ボタンをクリックする。
①の「CALIBRATE」ボタンと②の「SAVE」ボタンが緑に変わるので①、②の順にボタンをクリックする。

SAVEしたパラメータファイルを展開する。
パラメータファイルは、/tmp/calibrationdata.tar.gzにSAVEされる。それを次の手順で展開、コピーする。

展開用のディレクトリを作り、移動する。
mkdir mytmp
cd mytmp

パラメータファイルを展開する。
tar -xvzf /tmp/calibrationdata.tar.gz

のホームページに展開されたost.yamlを所定のディレクトリにコピーする。次のいずれか。
cp ost.yaml ~/.ros/camera_info/c270.yaml
cp ost.yaml ~/.ros/camera_info/HD_1080P.yaml
cp ost.yaml ~/.ros/camera_info/atoms3r_m12.yaml

ost.yamlの実例

c270.yaml
image_width: 640
image_height: 480
camera_name: narrow_stereo
camera_matrix:
  rows: 3
  cols: 3
  data: [949.28719,   0.     , 312.52537,
           0.     , 953.03208, 255.71598,
           0.     ,   0.     ,   1.     ]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [0.288858, -0.368216, 0.006917, -0.003781, 0.000000]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1., 0., 0.,
         0., 1., 0.,
         0., 0., 1.]
projection_matrix:
  rows: 3
  cols: 4
  data: [984.82721,   0.     , 311.0301 ,   0.     ,
           0.     , 987.56195, 256.6504 ,   0.     ,
           0.     ,   0.     ,   1.     ,   0.     ]
HD_1080P.yaml

image_width: 640
image_height: 480
camera_name: narrow_stereo
camera_matrix:
  rows: 3
  cols: 3
  data: [591.21738,   0.     , 327.70799,
           0.     , 590.88931, 254.61153,
           0.     ,   0.     ,   1.     ]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [-0.341203, 0.071105, 0.000547, -0.001880, 0.000000]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1., 0., 0.,
         0., 1., 0.,
         0., 0., 1.]
projection_matrix:
  rows: 3
  cols: 4
  data: [520.15149,   0.     , 328.03833,   0.     ,
           0.     , 552.82294, 256.3749 ,   0.     ,
           0.     ,   0.     ,   1.     ,   0.     ]
atoms3r_m12.yaml

image_width: 480
image_height: 320
camera_name: narrow_stereo
camera_matrix:
  rows: 3
  cols: 3
  data: [378.4459 ,   0.     , 244.16985,
           0.     , 377.74643, 127.25892,
           0.     ,   0.     ,   1.     ]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [-0.374477, 0.161136, -0.000101, 0.000707, 0.000000]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1., 0., 0.,
         0., 1., 0.,
         0., 0., 1.]
projection_matrix:
  rows: 3
  cols: 4
  data: [316.60593,   0.     , 245.72644,   0.     ,
           0.     , 345.83499, 121.86685,   0.     ,
           0.     ,   0.     ,   1.     ,   0.     ]

参照サイト

ROS 2 カメラのキャリブレーション方法の紹介
ATOMS3R M12カメラキットの画像をROS2にパブリッシュ