KR260でROS2 Perception Stack Applicationを動かしてみた!
皆さん、こんにちは。「ノリさん」です!AMDのGitHubにある『KR260上で動くPerception Stack Application』の記事を参考に、実際に動かしてみました!
この記事を書こうと思ったキッカケは、上記の記事の説明だけでは不足があって動かないと聞いたことです。作業内容を補完しつつ書きました。
2023-07-03
(2023-10-17更新)
ハードウェア要件
- KR260 ロボティクス スターター キット
- KR260 電源とアダプター (KR260 ロボティクス スターター キットに付属)
- Cat 5e イーサネット ケーブル (KR260 ロボティクス スターター キットに付属)
- USB-A-micro-B ケーブル (KR260 ロボティクス スターター キットに同梱)
- 16GB MicroSD カード (KR260 ロボティクス スターター キットに同梱)
- USBポート付きPC (OS : Linux)
- インターネットに接続可能なルーター
PCへのROS2-HumbleとGazebo Classic 11.0のインストール
適当なディレクトリでターミナルを開きます。
次のコマンドで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
Gazeboをインストールします。
$ curl -sSL http://get.gazebosim.org | sh
ボードのセットアップ
あらかじめ、ホストPCにPutty をインストールしておきます。
$ sudo apt install putty putty-tools -y
https://ubuntu.com/download/amd-xilinx から、KR260用のUbuntu 22.04イメージを~/Downloads にダウンロードします。
SDカードを Ubuntu に挿入します。
ホストUbuntu 画面左下の、show Applications をクリックし、検索窓から Disks を検索して、開き、Device と書かれた行を探します。
(*2 ここに書かれているのが、dev/mmcblk0p1形式である場合は /dev/mmcblk0/dev/ 、sdb1形式の場合は /dev/sdb がドライブ アドレスとなる)
ランチャーバーのアイコン、ファイルマネージャーの取り出しアイコンを右クリック、または「ディスク」アプリケーションの四角いアイコンをクリックして、SDカードをアンマウントします。
次のコマンドでUbuntuイメージをSDに展開します。(
$ xzcat ~/Downloads/iot-limerick-kria-classic-desktop-2204-x06-20220614-78.img.xz | sudo dd of=<drive address> bs=32M
コマンドを用いずにEtcherなどの書き込みツールを用いてもOKです。
書き込みが終わったら、SDカードを取り外し、KR260の裏側にあるSDカードの差し込み口に差し込みます。(図1の 1. の部分)
図1の 2.~5. までを数字の順番通りに接続します。
(6. は電源であり後で差し込む、ホストPCと通信を行うので 5. のイーサネットはホストPCと同じルーターに接続しておく)
以下を実行し、ttyUSB0~ttyUSB3 が表示されることを確認します。
$ ls /dev/ | grep ttyUSB
Putty を起動
$ sudo putty
図2のように設定し、Openを押した後、上の図の6. の電源を差し込みます。
(Selial line の番号は人によっては異なる場合があるが、ttyUSB0~ttyUSB3のいずれかになる)
図1. KR260にペリフェラルを接続した図
図2. Puttyの設定画面
電源を差し込むと、Ubuntu が起動するので、ユーザー名を入力できるまで待ちます。
(何も表示されない場合は、Selial line の番号を変えて再接続、文字化けする場合は、付録の 5. を参照)
ユーザー名の入力画面になったら、ユーザー名をubuntu、初期パスワードをubuntuとしてログインする
sudoを実行する際、パスワードの変更を求められるので、変更します。
デモアプリケーションのアーカイブを追加します。
$ sudo add-apt-repository ppa:xilinx-apps $ sudo add-apt-repository ppa:ubuntu-xilinx/sdk $ sudo apt update $ sudo apt upgrade
再起動します。
$ sudo reboot
動作確認
ファームウェアをダウンロードします。
$ sudo apt install xlnx-firmware-kr260-perception
ROS 2 humble と LTTng をインストールします。
ROS2-Humbleのインストール方法はPCへのROS2-HumbleとGazebo Classic 11.0のインストールを参照してください。
今回はフルバージョンをインストールする必要はないので、-hull は外しておきます。
次のコマンドでLTTngをインストールします。
$ sudo apt install lttng-modules-dkms lttng-tools ros-humble-tracetools-launch
ROS 2 アプリケーションをインストールします。
$ mkdir -p ~/Downloads $ cd ~/Downloads $ wget https://github.com/Xilinx/kria_ros_perception/releases/download/xlnx-rel-v2022.1_update4/kria-ros-perception_1.0-1_arm64.deb $ sudo apt install ./kria-ros-perception_1.0-1_arm64.deb
Gnome デスクトップ GUI を無効にします。
$ sudo xmutil desktop_disable
PCにシミュレーション用のプログラムをインストールします。
$ git clone https://github.com/Xilinx/kria_ros_perception $ cd kria_ros_perception $ rm -rf src/image_proc src/tracetools_image_pipeline src/vitis_common src/tracing src/image_pipeline_examples $ source /opt/ros/humble/setup.bash # source ROS2 Humble $ colcon build
PCでシミュレーションを実行します。
$ source install/setup.bash # source the workspace as an overlay $ ros2 launch perception_2nodes simulation.launch.py
PCで rqt を実行します。
$ source /opt/ros/humble/setup.bash $ rqt
Plugins -> Introspection -> Node Graph をクリックし、図3のように構成を設定します。
図3. rqtの設定画面1
同様に、Plugins -> Visualization -> Image View から 動画表示用のウィンドウを3つ開きます。
図4. rqtの設定画面1
CPU ベースでKR260アプリケーションを実行します。(アクセラレーションは使用しない)
$ source /opt/xilinx/kria_ros_perception/setup.bash $ ros2 launch perception_2nodes trace_rectify_resize.launch.py
下図のように表示するには、各ウィンドウの左上にあるリロードボタンを押してリロードする必要があります。
今回は/camera/image_raw、/image_rect、 /resize/resize_compressed を表示させました。
図5. アクセラレーション使用前のグラフと動画
FPGAによるアクセラレーションを使用してKR260アプリケーションを実行します。
$ sudo xmutil unloadapp $ sudo xmutil loadapp kr260-perception $ source /opt/xilinx/kria_ros_perception/setup.bash $ ros2 launch perception_2nodes trace_rectify_resize_fpga_streamlined.launch.py
下図のように表示するには、各ウィンドウの左上にあるリロードボタンを押してリロードする必要があります。
今回は/camera/image_raw、 /image_rect 、/resize/compressed を表示させました。
図6. アクセラレーション使用後のグラフと動画
感想
今回はKR260によるROS2とGazeboのアクセラレーションを行いました。
個人的にROS2はあまり触れることがなかったのですが、これから触れる機会が増えていきそうです。
今後もROS2関連の記事を書くことがあるかもしれません。
それでは、また次回お会いしましょう!See you next time!

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

Kria
Kria SOMはアダプティブSoCデバイスを搭載しており、スマートカメラやエンベデッドビジョンなどに最適です。
AMD製品に関連する技術ブログ
- エンジニアブログの再開およびテクニカルウェビナーのご案内
- 初心者のためのPython & Numpy入門
- KR260でIntel RealSenseを動かしてみた!
- Vitis HLSで足し算IPを作ってみた!(プログラミング編)
- KD240でモータ制御してみた!
- KR260でデジタル信号処理してみた! (3)
- KR260でデジタル信号処理してみた! (2)
- KR260でデジタル信号処理してみた! (1)
- KR260でロボットアームを動かしてみた! (2)
- KR260でロボットアームを動かしてみた! (1)
- KR260でROS2を使ってキャリブレーション&マーカー検出してみた!
- KR260とPynqでAIカメラを動かしてみた!
- KR260でROS2 Perception Stack Applicationを動かしてみた!【2】
- KR260でROS2 Perception Stack Applicationを動かしてみた!
- Kria SOMでTPM2.0を動かしてみた!
- VivadoでKR260のハードウェアデザインを作って動かしてみた!
- ROS2 Multi-Node Communications via TSNを動かしてみた!
- AIBOX-ReIDを動かしてみた!