KR260でROS2 Perception Stack Applicationを動かしてみた!【2】
皆さん、こんにちは。新人エンジニアの「ノリさん」です! AMD GitHubにある『KRSによるAccelerating ROS 2 Nodes』の記事を参考に、実際に動かしてみました!
前回同様、不足している部分を補って書きました。
2023-08-01
(2023-10-17更新)
KRSについて
KRS (Kria Robotics Stack) はROS 2の産業向けの拡張であり、アダプティブ コンピューティングを使用しながら産業グレードのロボットソリューションの開発、メンテナンス、商品化を加速するためのロボットライブラリとユーティリティを統合します。また、KRS は、ROS 2 ユーザーにハードウェア アクセラレーションへの簡単かつ堅牢なパスを提供します。これにより、ROS 2 ロボット技術者は、より高い生産性でカスタムのセキュア コンピューティング アーキテクチャを作成できるようになります。KRS は、 Kria SOM ポートフォリオを対象としたザイリンクスのテクノロジーを活用して、ロボット工学に低レイテンシ、確定性、リアルタイム、セキュリティ、および高スループットを提供します。
Vitis-2022.1のインストール
Xilinx アカウントを作成 https://www.xilinx.com/support/download.htmlから、Xilinx_Unified_2022.1_0420_0327_Lin64.binをダウンロード ダウンロードしたディレクトリに移動し、左クリックで Open in Terminal を選択してターミナルを開く
次のコマンドを入力
$ chmod u+x Xilinx_Unified_2022.1_0420_0327_Lin64.bin $ ./Xilinx_Unified_2022.1_0420_0327_Lin64.bin
GUIが起動するので、Next → Xilinx のアカウント情報を入れてNext
→ Vitis にチェックを入れてNext → 図1のようにしてNext
→ 全てチェックしてからNext → Next → Install でインストール
図1. Vitisインストーラーの画面
後から別のボードのデバイスを入れる場合は付録の 1. を参照
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
PetaLinuxのインストール
次の URL から、PetaLinux をダウンロード https://japan.xilinx.com/support/download/index.html/content/xilinx/ja/downloadNav/embedded-design-tools/2022-1.html
次のコマンドで PetaLinux をインストール(途中に出てくる Agreement は全て y を選択)
$ chmod +x petalinux-v2022.1-04191534-installer.run $ ./petalinux-v2022.1-04191534-installer.run <インストールしたいディレクトリ>
インストール終了後、シンボリックリンクを /tools/Xilinx/PetaLinux/2022.1に作成
sudo mkdir -p /tools/Xilinx/PetaLinux/2022.1 $ sudo ln -s <PetaLinuxをインストールしたディレクトリ> /tools/Xilinx/PetaLinux/2022.1
KRS 1.0のインストール
適当な場所でターミナルを開く
KRSのための追加パッケージをインストール
$ sudo apt-get -y install curl build-essential libssl-dev git wget \ ocl-icd-* opencl-headers python3-vcstool \ python3-colcon-common-extensions python3-colcon-mixin \ kpartx u-boot-tools pv
~/krs_ws/src/ ディレクトリを作成し、~/krs_ws に移動
$ mkdir -p ~/krs_ws/src; cd ~/krs_ws
cat で krs_humble.repos を作成
$ cat << 'EOF' > krs_humble.repos repositories: perception/image_pipeline: type: git url: https://github.com/ros-acceleration/image_pipeline version: ros2 tracing/tracetools_acceleration: type: git url: https://github.com/ros-acceleration/tracetools_acceleration version: humble firmware/acceleration_firmware_kr260: type: zip url: https://github.com/ros-acceleration/acceleration_firmware_kr260/releases/download/v1.0.0/acceleration_firmware_kr260.zip acceleration/adaptive_component: type: git url: https://github.com/ros-acceleration/adaptive_component version: humble acceleration/ament_acceleration: type: git url: https://github.com/ros-acceleration/ament_acceleration version: humble acceleration/ament_vitis: type: git url: https://github.com/ros-acceleration/ament_vitis version: humble acceleration/colcon-hardware-acceleration: type: git url: https://github.com/colcon/colcon-hardware-acceleration version: main acceleration/ros2_kria: type: git url: https://github.com/ros-acceleration/ros2_kria version: main acceleration/ros2acceleration: type: git url: https://github.com/ros-acceleration/ros2acceleration version: humble acceleration/vitis_common: type: git url: https://github.com/ros-acceleration/vitis_common version: humble acceleration/acceleration_examples: type: git url: https://github.com/ros-acceleration/acceleration_examples version: main EOF
KRS のソースを src ディレクトリにダウンロード(実行時間 : 3分程)
$ vcs import src --recursive < krs_humble.repos
必要な設定を有効化(*1 colcon buildを行う前は必ず実行)
$ source /tools/Xilinx/Vitis/2022.1/settings64.sh $ source /opt/ros/humble/setup.bash $ export PATH="/usr/bin":$PATH
sudoでのコマンドを 実行して、パスワードが入力された状態にする(これを行わないと、ビルドが終了せず無期限に続いてしまう)
$ sudo ls -la
KR260用のKRSをインストール(ビルドに失敗したなどの理由で、再ビルドを行いたい場合は、付録の 2. を参照、実行時間 : 4~6分程)
$ colcon build --cmake-args -D ROS_VITIS=1 --merge-install --packages-skip ros2_kria_power
インストールした内容を反映
$ source install/setup.bash
このままだとPythonでクロスコンパイルできる状態になっていないので、次のコマンドでホストマシン上のネイティブコンパイラにシンボリックリンクを作成
$ sudo ln -s ~/krs_ws/install/../acceleration/firmware/kr260/sysroots/aarch64-xilinx-linux/usr/lib/aarch64-linux-gnu/libpython3.10.so.1.0 /usr/lib/aarch64-linux-gnu/libpython3.10.so
現段階では、KR260のファームウェア単体でのビルドはできるようになっていないので、KV260をダウンロードし、ビルド
(*1 の設定ができていることを確認してから colcon build を行う、実行時間 : 3分程)
$ cd ~/krs_ws $ wget https://www.xilinx.com/bin/public/openDownload?filename=acceleration_firmware_kv260.zip -P src/firmware/acceleration_firmware_kv260 $ unzip src/firmware/acceleration_firmware_kv260/openDownload\?filename\=acceleration_firmware_kv260.zip -d src/firmware/acceleration_firmware_kv260/ $ colcon build --merge-install --packages-select acceleration_firmware_kv260
インストールした内容を反映
$ source install/setup.bash
現段階では、KR260のファームウェアを選択してアクセラレーションをビルドすることはできないので、KR260のアクセラレーションをビルドする場合も colcon acceleration select でKV260を選択
$ colcon acceleration select kv260
アクセラレーションごとにビルドを行う場合は次のコマンドを実行(実行時間 : 数十分~数時間程)
$ colcon build --build-base=build-kv260 --install-base=install-kv260 --merge-install --mixin kv260 --packages-select <ビルドしたいアクセラレーション>
例えば、accelerated_doublevadd_publisher をビルドしたい場合、次のようになる
$ colcon build --build-base=build-kv260 --install-base=install-kv260 --merge-install --mixin kv260 --packages-select ament_acceleration ament_vitis vitis_common ros2acceleration offloaded_doublevadd_publisher
一括でビルドを行いたい場合は次のコマンドを実行(実行時間 : 6時間程)
$ colcon build --executor sequential --merge-install --build-base=build-kv260 --install-base=install-kv260 --mixin kv260
PetaLinux実行
言語設定を英語に変更(英語以外の設定だとSDイメージの構成に失敗する)
日本語に直したい場合、 en_US.UTF-8 を ja_JP.UTF-8に、en_US:en を ja_JP:ja に変えて再度実行
$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 $ export LANG=en_US.UTF-8 $ export LANGUAGE=en_US:en $ locale
PetaLinux SDイメージを作成する
$ colcon acceleration linux vanilla --install-dir install-kv260
balenaEcherなどで作成した PetaLinux イメージを SDカードに焼き付ける
次の URL から、KR260 または KV260 の BSP(ボードサポートパッケージ)をダウンロード
https://japan.xilinx.com/support/download/index.html/content/xilinx/ja/downloadNav/embedded-design-tools/2022-1.html
BSP から PetaLinux プロジェクトを作成する
$ petalinux create -t <ダウンロードした BSP>
先程、イメージを焼き付けた SDカードのブートパーティションを開く
<PetaLinux プロジェクトまでのパス>/pre-built/linux/images にある、ramdisk.cpio.gz.u-bootブートパーティションに上書きコピー
同様に、images 内の system-zynqmp-sck-kv-g-revB.dtb をブートパーティションにコピーし、system.dtbに名前を変更して、元のsystem.dtbを上書き
ダウンロードした BSP に合わせて、KR260 か KV260 に SDカードを差して、電源を入れ PetaLinux を起動
ユーザー名を PetaLinux、パスワードを自身で設定し、ログイン
PetaLinux の IPアドレスを確認
$ ifconfig eth0
ビルド時に生成された install_kv260 を PetaLinuxのホームディレクトリにコピー
$ scp -r install-kv260/* petalinux@<PetaLinuxのIPアドレス> : ~/ros2_ws/
ユーザーを root に切り替え
$ sudo su
ros環境を有効化
$ source /opt/ros/humble/setup.bash $ . ros2_ws/local_setup.bash
他のアクセラレーションを停止
$ ros2 acceleration stop; ros2 acceleration start
アクセラレーションリストを確認
$ ros2 acceleration list
動かしたいアクセラレーションを選択(ここでは offloaded_doublevadd_publisher を選択)
$ ros2 acceleration select offloaded_doublevadd_publisher
アプリケーションのあるディレクトリに移動し、実行可能な状態にする
$ cd /ros2_ws/lib/offloaded_doublevadd_publisher $ chmod +x offloaded_doublevadd_publisher
アプリケーションを実行し、結果を確認
$ ros2 topic hz /vector_acceleration --window 10 & $ ros2 run offloaded_doublevadd_publisher offloaded_doublevadd_publisher
図2. アプリケーションの実行結果
付録
1. Vitis の デバイスの追加方法
適当な場所でターミナルを開き、以下のコマンドを打つ
$ cd /tools/Xilinx/.xinstall/Vitis_2022.1/ $ sudo ./xsetup
Install Vitis-2022.1 の項目と同様に進めていき、インストールしたいデバイスにチェックを入れる
(既にインストール済みのものはチェックが固定された状態になっている)
Install Vitis-2022.1 の項目を元にインストールを進める
2. 再ビルドの方法
下記のように、--cmake-clean-cache オプションを付ける
$ colcon build --merge-install --cmake-clean-cache
3. その他のトラブルシューティングについて
https://xilinx.github.io/KRS/sphinx/build/html/docs/howto.html を参照
感想
今回はKR260とKRSによるハードウェアアクセラレーションを行いました。ROSはこれからも使うことになりそうなので、バリバリ勉強していきたいです!
将来的には実際にロボットを動かす記事を書くことを想定しています!
それでは、また次回お会いしましょう!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を動かしてみた!