Custom Meta Tags
2503 Hero Banner

AMD製品に関連する技術ブログ

Long Copy

KR260でROS2を使ってキャリブレーション&マーカー検出してみた!

皆さん、こんにちは。新人エンジニアの「ノリさん」です!
今回はKR260とROS2 Humbleを用いてカメラキャリブレーションとArUcoマーカー検出を行っていきます。

2023-10-02
(2023-10-25更新)

Long Copy_1

カメラキャリブレーション及びArUcoマーカー検出の説明

カメラキャリブレーションはカメラパラメータ(「内部パラメータ : 画角や光軸の位置などの情報」と「外部パラメータ : 位置や姿勢の情報」の2つのパラメータを合わせたもの)を推定する技術です。これによって、カメラのレンズの歪み・ズレの補正や、3次元でのカメラの位置や姿勢の推定ができます。 ArUcoマーカーはカメラや物体の位置・姿勢を推定するための正方形のマーカーです。ArUcoマーカー検出はArUcoマーカーの検出を行うための技術です。カメラキャリブレーションとArUcoマーカー検出の組み合わせによって高精度な3次元位置・姿勢の推定を行うことができます。

 

ROS2でカメラキャリブレーション・ArUcoマーカー検出を行う目的

次回以降、ロボットアームを扱う予定ですが、その位置と姿勢の検出を行うためにカメラキャリブレーションとArUcoマーカー検出を行います。ROS2を用いる目的は、他のロボット制御プログラムと併用することでROS2に含まれるロボット用ライブラリの多大な恩恵を受けることです。

図1. ロボットアーム

 

ROS2-Humbleのインストール

KR260上のUbuntuにてROS2-Humbleのインストールを行います。 インストール済みの場合はスキップしてください。

適当なディレクトリでターミナルを開く。 次のコマンドでUTF-8をサポートするロケールがあることを確認。

$ locale

ロケールがUTF-8をサポートしていない場合は、次のコマンドを実行してUTF-8をサポートするロケールを生成。

$ sudo apt update && sudo apt install locales
$ sudo locale-gen en_US en_US.UTF-8
$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
$ export LANG=en_US.UTF-8

ロケール生成後、再度設定を確認。

$ locale

Ubuntu ユニバース リポジトリが有効になっていることを確認。

$ apt-cache policy | grep universe

次のような出力が得られる。

500 http://us.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages release v=22.04,o=Ubuntu,a=jammy,n=jammy,l=Ubuntu,c=universe,b=amd64

上記のような出力が得られない場合は、次のコマンドでUbuntu ユニバース リポジトリを有効化。

$ sudo apt install software-properties-common
$ sudo add-apt-repository universe

ROS2のGPGキーをaptで認証し、ROS2のリポジトリをソースリストに追加。

$ sudo apt update && sudo apt install curl gnupg lsb-release
$ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/```
ros-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

apt のパッケージリスト及びパッケージを更新。

$ sudo apt update
$ sudo apt upgrade

ROS2-Humbleのフルバージョンをインストール。 ROS公式ページだと-full が付いていないが、付けないと一部のパッケージがインストールされないので注意。

$ sudo apt install ros-humble-desktop-full

 

キャリブレーション・マーカー検出用のROS2ライブラリのインストール

次のコマンドでKR260のUbuntu上にインストールします(参考文献[1])。

$ sudo apt install python3-colcon-common-extensions
$ sudo apt install ros-humble-usb-cam
$ sudo apt install ros-humble-launch-testing-ament-cmake
$ sudo apt install ros-humble-image-pipeline
$ sudo apt install ros-humble-camera-calibration-parsers
$ sudo apt install ros-humble-camera-info-manager
$ mkdir -p ~/airobot_ws/src
$ cd ~/airobot_ws/src
$ git clone https://github.com/JMU-ROBOTICS-VIVA/ros2_aruco
$ git clone https://github.com/AI-Robot-Book/chapter5/
$ cd ros2_aruco/ros2_aruco/ros2_aruco
$ wget https://raw.githubusercontent.com/JMU-ROBOTICS-VIVA/ros2_aruco/foxy/ros2_aruco/ros2_aruco/transformations.py
$ cd ~/airobot_ws/
$ colcon build

 

キャリブレーション・マーカー検出の実行

以降、コマンドはKR260のUbuntuデスクトップ環境にて実行します。 あらかじめUbuntuデスクトップ環境を有効化しておいてください。

チェッカーボードの画像が必要になるので、あらかじめ用意してください。 (筆者はhttps://venuschjp.blogspot.com/2015/02/opencv.html からお借りしました)

次のコマンドによりカメラのROS2ノードを立ち上げ、カメラを使用可能な状態にします(参考文献[1])。

$ source /opt/ros/humble/setup.bash
$ source ~/airobot_ws/install/setup.bash
$ ros2 run usb_cam usb_cam_node_exe

新規のターミナルを開いて、次のコマンドを実行することでカメラキャリブレーションを行います

$ source /opt/ros/humble/setup.bash
$ source ~/airobot_ws/install/setup.bash
$ ros2 run camera_calibration cameracalibrator --size 7x9 --square 0.020 --ros-args --remap image:=/image_raw

図2の様な画面が表示されます。

 

図2. カメラキャリブレーション用の画面表示

 

チェッカーボードがカメラに映るようにカメラを動かして、カメラ座標のデータを集めてください。 十分なデータが集まるとCALIBRATEのボタンがクリックできるようになるので、クリックしてキャリブレーションを行ってください。 キャリブレーション終了後にSAVEを押して得られたカメラパラメータを保存します。 次のコマンドで /tmp/calibration.tar.gzが出来上がっていることを確認してください。 この中に保存されたカメラパラメータが含まれています。

$ ls /tmp/ | grep calibration

次のコマンドで保存されたデータをデフォルトのカメラパラメータとして使用できるようにします。

$ cd /tmp/
$ tar -xvzf calibration.tar.gz
$ cp calibration/ost.yaml ~/.ros/camera_info/default_cam.yaml

マーカー検出の前に、先程同様カメラを使用可能な状態にします(既に実行されている場合はスキップ)。

$ source /opt/ros/humble/setup.bash
$ source ~/airobot_ws/install/setup.bash
$ ros2 run usb_cam usb_cam_node_exe

新規ターミナルにて次のコマンドを実行してArUcoマーカー画像を作成します。

$ ros2 run ros2_aruco aruco_generate_marker --id 1

先程のコマンドの--id の引数を変えることでマーカーのIDを変更して新しいマーカーを作成できます。 筆者はこの方法で7枚の画像を作成しました。

$ ros2 run ros2_aruco aruco_generate_marker --id 2

次のコマンドでArUcoマーカーを検出します

$ source /opt/ros/humble/setup.bash
$ source ~/airobot_ws/install/setup.bash
$ ros2 run opencv_ros2 aruco_node_tf

検出に成功すると図3のような画面が表示されます。

 

図3. ArUcoマーカーの検出結果

 

 

感想

今回はKR260とROS2によるカメラキャリブレーション&ArUcoマーカー検出を行いました! これを利用すればロボットの位置・姿勢の推定ができるのでロボティクスに役立てることができます! それでは、また次回お会いしましょう!See you next time!

参考文献

[1] ROS2とPythonで作って学ぶAIロボット入門 https://www.amazon.co.jp/dp/4065289564
 ※ GitHubページ : https://github.com/AI-Robot-Book
 

 

 

2503 Grid Box Light - Blog

ブログ

AMDによる設計およびデバッグ手法のブログ、およびアヴネット社員によるAMD製品を用いた開発チャレンジのブログです。

2503 Grid Box Light - Kria

Kria

Kria SOMはアダプティブSoCデバイスを搭載しており、スマートカメラやエンベデッドビジョンなどに最適です。