カメラキャリブレーションを行うことでレンズの歪みを補正できる。
環境
Raspberry Pi 5 | Ubuntu Desktop 24.04.2 LTS ROS2 jazzy | キャリブレーションの操作を行う。 環境設定 |
PC(GOODMINI2) | Winddows11 WSL2 | ここからRaspberry Pi 5にssh接続。 カメラの画像をROS2にパブリッシュする。 |
ATOMS3R M12 | QVGA(240×320) | camera_IP_FIXEDをアップロードしておく。 IP:192.168.0.105 |
c270 | USB接続 |
環境設定
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」ボタンが緑に変わるので①、②の順にボタンをクリックする。

パラメータファイルは、/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. ]