Custom Meta Tags
2503 Hero Banner

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

Long Copy

KR260でROS2 Perception Stack Applicationを動かしてみた!【2】

皆さん、こんにちは。新人エンジニアの「ノリさん」です! AMD GitHubにある『KRSによるAccelerating ROS 2 Nodes』の記事を参考に、実際に動かしてみました!
前回同様、不足している部分を補って書きました。

2023-08-01
(2023-10-17更新)

Static HTML

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!

 

 

2503 Grid Box Light - Blog

ブログ

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

2503 Grid Box Light - Kria

Kria

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