COLUMN
ロボット向けシングルボードコンピュータにてROS 2ハードウェアアクセラレーション活用!KR260セットアップとKRS導入手順
シングルボードコンピュータは、小型・低消費電力・低コストでありながら高性能な処理能力を持ち、多くのソフトウェア開発で利用することができます。そのため、ロボットのソフトウェア開発においては欠かせない存在となっております。
その一つがこの記事にて取り上げるAMDより販売されているKria™KR260です。AMDより、Kria™ KV260というビジョンAI開発者向けシングルボードコンピュータも販売されているが、今回取り上げるKria™KR260はロボット開発者向けシングルコンピュータです。当機種の特徴としてROS 2ネイティブ対応、ハードウェアアクセラレーションというものがあります。
まず、ROS 2をネイティブサポートしているため、高性能インターフェイスを備えたこの機種でロボット開発者やソフトウェア開発者は使い慣れた環境で今すぐ開発を始めることができます。また、「ハードウェアアクセラレーション」とは、ハードウェア実装により実行速度を加速させるという技術です。
それを可能にするのが、KRS(Kria Robotics Stack)というAMDが開発しているロボットソリューションの開発、メンテナンスを加速するためのロボットライブラリとユーティリティの統合セットです。これをKR260に使用することで、ROS 2上でのハードウェアアクセラレーションを適応し、AIの画像処理のような重たい処理をするROSノードのCPU処理負担を軽減させ、パフォーマンスを向上させることができます。
筆者の部所ではロボットに関する研究を行っているため、ロボット向けの当機種をライブラリ検証に使用しています。
概要
今回のコラムでは、AMDより販売されているKria™ KR260 ロボティクス スターター キットのセットアップ手順とKRSの導入手順をご紹介します。
(参照:https://japan.xilinx.com/products/som/kria/kr260-robotics-starter-kit.html)
まずは、Kria KR260に必要な物品を紹介します。
内容物
-
Kria KR260 ロボティクス スターター キット (本体)
-
KR260 電源およびアダプター (12V、3A)
- MicroSD カード 16GB またはそれ以上
-
USB-A – micro-B 間ケーブル
-
イーサネット ケーブル
その他必要な物品
-
MicroSDカードに書き込むためのPC (筆者の環境では、Windowsを利用)
-
DisplayPortモニター (推奨)
-
DisplayPortケーブル (推奨)
※必須ではないが、モニターを利用する方が状況を把握しやすいため、推奨
※HDMI等への変換ケーブルを用いたモニターとの接続はKR260対応していないため、注意
KR260セットアップ手順
KR260のセットアップはモニターを使用する手順と使用しない手順がありますが、今回は使用する手順を紹介します。
1.MicroSDカードの書き込み
①KR260をSDカードからブートするため、MicroSDカードにPCからUbuntuを書き込みます。筆者の環境では、Windows環境であるsurface goを使用しました。surface goの場合ですと、直接MicroSDカードを挿入できます。
②下記URLより、PCにUbuntu Desktop 22.04 LTSをダウンロードします。KR260は、標準対応はUbuntu22.04のみとなっており、Ubuntu 20.04のイメージには対応していません。
https://ubuntu.com/download/amd-xilinx
③下記URLより、Balena Etcherをダウンロードします。
https://etcher.balena.io/
④Balena Etcherを使用し、MicroSDカードへダウンロードしたUbuntu 22.04を書き込みます
(1)Balena Etcherを起動
(2)Flash from file -> ダウンロードしたUbuntu 22.0を選択
(3)select target -> 挿入したMicroSDカードを選択
(4)Flash!ボタンを押す
(5)書き込み完了したら、MicroSDカードを外す
2.KR260に必要なコードを繋げる
(1)MicroSDカードを挿入
(2)データ転送用に USB A-MicroB ケーブルを接続
(3)USB キーボード/マウスを USB ポート (U44、U46) に接続
(4)DisplayPort対応モニターと接続 (DisplayPort -> HDMIでの変換は対応していない)
(5)イーサネットケーブルを4つの端子の右上に挿入
(6)電源の接続 -> 10秒ほど待つと、モニターにUbuntuの起動画面が映る
3.ログインとファームウェアアップデート
①ログイン
IDとPWの入力の際に、
ID : ubuntu
PW : ubuntu
と入力します。その他(初期PWの設定)は起動画面に沿って行くとよいです。
※USBポートがキーボードやマウスと反応しない場合は、U44 ⇔ U46で差し直すと反応する場合があります。完了すると、Ubuntuのデスクトップが確認できます。
②ファームウェアアップデート手順
Ubuntuの起動が成功しても、ファームウェアが最新版でないとKR260のソフトウェアが問題なく動作しないため、ファームウェアアップデートを行う必要があります。
(1)ファームウェアのダウンロード
下記リンクのブートファームウェアの項目から、最新BINファイルをダウンロード
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1641152513/Kria+K26+SOM#Boot-FW-Update-Process
筆者の環境では、KR260に直接BINファイルをダウンロードすることが難しかったため、別のWindows PCにダウンロード、FTPを使用しファイル転送を行いました。
https://www.partitionwizard.jp/clone-disk/transfer-files-from-windows-to-linux.html
(2)ファームウェアの更新
Ubuntuのコマンドツールを用いてコマンドを入力していきます。
(2.1)現在のブートファームウェアの状態を確認
$ sudo xmutil bootfw_status
より、現在の状態を確認(初期では、下記のような状態が表示される)
Image A: Bootable
Image B: Bootable
Requested Boot Image: Image A
Last Booted Image: Image A
XilinxSom_QspiImage_v2.0_03240013
ImageA Revision Info: XilinxSOM_BootFW_20220323
ブートファームウェアのイメージはA,Bのどちらからにブートファームウェアを書き込んで、そちらを読み込むことによって、アップデートを行います。どちらに読み込むかは、Last Booted Imageによって変化し、こちらがAであれば、次に新たな書き込みをする際は、Bに書き込まれます。またLast Booted Imageは現在のブートされているイメージ、Requested Boot Imageは次の電源投入時にブートされるイメージを表しております。
(2.2)ブートファームウェアのアップデート
$ sudo xmutil bootfw_update -i <ダウンロードしたBINファイル>
上記のコマンドにより、BにダウンロードしたBINファイルによる最新ブートファームウェアが入ります。成功していますと、もう一度(2.1)コマンドの状態確認にて、下記のような状態となる。
Image A: Bootable
Image B: Non Bootable
Requested Boot Image: Image B
Last Booted Image: Image A
XilinxSom_QspiImage_v2.0_03240013
ImageA Revision Info: XilinxSOM_BootFW_20220323
(4.3)電源をオフにして、再起動
$ sudo systemctl poweroff #シャットダウン
その後、電源を入れます。起動後、
$ sudo xlnx-config ––xmutil bootfw_update -v
により、更新を反映することができます。こちらは起動後すぐに行う必要があります。もう一度(2.1)コマンドによりステータスを確認し、下記のようになっていれば、更新が成功となります。
Image A: Bootable
Image B: Bootable
Requested Boot Image: Image B
Last Booted Image: Image B
XilinxSom_QspiImage_v2.0_03240013
ImageA Revision Info: XilinxSOM_BootFW_20220323
ImageB Revision Info: XilinxSOM_BootFW_20220915
4.その他
①インターネット接続
時刻の設定を手動で行うことにより、インターネット接続ができるようになります。筆者の環境では、約1年前の時刻が初期設定されていたため、インターネット接続がうまくいきませんでした。インターネット接続ができないと、自動で時刻を取得できないため、手動で取得する必要があります。
また、再起動の時にインターネットと接続できないようになることがあるので、その時は時刻を確認すると良いです。(筆者の環境では、2か月ほどずれておりました。)
②別のPCとの接続
モニターを必要としないタスクを行いたい場合、もしくはエラーにより、モニターが表示されない場合、別のPCと接続し、Ubuntuのセッティングを変更することができます。下記がその手順となります。
(1)一度シャットダウンを行い、ACアダプターを抜く。
(2)USB A-MicroB ケーブルをWindows PCと接続。
(3)デバイスマネージャーにて確認(コントロールパネルより開く)
COMポート4が表示されていれば、問題なく認識できている。表示されない場合、下記URLよりFTDI 社の仮想 COM ポート ドライバーをインストールする必要があります。
https://ftdichip.com/drivers/vcp-drivers/
(4)Windows PCにターミナルソフトを導入(筆者の環境では、Tera Termを導入)
起動後、シリアルポートにて、接続先を選択します。その後、設定->シリアルポート設定より、下記のように設定をします。
-
ボー レート = 115200
-
データ ビット = 8
-
停止ビット = 1
-
フロー制御 = None
-
パリティ = None
(5)ACアダプターを挿し、電源を入れる。
tera termの画面にUbuntuのログが流れます。
(6)ログに従い、ID,PWを入力してログイン
(7)完了
KRSの導入手順
続いてKRSの導入手順です。KRSはKR260上に導入して使用するのではなく、別のコンピュータを準備してそちらで導入とクロスコンパイルを行い、必要なデータをKR260にコピーすることで機能します。今回は、VirtualBox 7.0上のUbuntu 22.04をWindows上に構築し、そのUbuntu上にKRSを構築しました。そのセットアップ手順を紹介します。
Virtual box環境の構築
まずは、Virtual box7.0のインストール、セットアップ手順を説明します。
1.Microsoft Visual C++ 2019 Redistributableのインストール
Virtual box7.0を最初にインストールしようとすると、下記のエラーが出るため、Microsoft Visual C++ 2019 Redistributableを事前にインストールする必要があります。
ダウンロードリンクより、上記をダウンロードすることができます。サイト内より、x64バージョンをダウンロードし、セットアップしたら、完了となります。
2.Virtual box のインストール
次に、Virtual boxの公式サイトより、Windows hosts版をダウンロードします。
https://www.virtualbox.org/wiki/Downloads
その後は、デフォルトのインストール手順に沿って行き、「Finish」を押すと、完了となります。
3.Virtual box Ubuntu 22.04の環境構築
Virtual box上にUbuntu 22.04を構築するため、下記リンクより、Ubuntu 22.04をダウンロードします。
https://www.ubuntulinux.jp/News/ubuntu2204-ja-remix
筆者は、富山大学様のリンクからダウンロード致しました。続いて、Virtual boxを起動します。すると、Virtual boxマネージャーが起動します。新規をクリックし、手順に沿ってVirtual boxのUbuntu 22.04環境を構築します。
詳細な設定は、下記サイトを参考にしてください。
https://invisiblepotato.com/ubuntu06/
Virtual box環境を構築する上で気を付けることとして、KRS環境を構築するために、容量が300GB近く必要となります。そのため、ほかのファイルも使用することを考えると、400GBは容量を確保しておくと良いと思われます。
また設定するUser名とパスワードのメモも忘れないようにしましょう。
以上により、UbuntuがVirtual boxより、起動できるようになります。
この後、KRSをインストールするための準備を行いますが、Virtual box ubuntu 22.04環境にてterminalを開くことができないバグが起きる可能性があります。その問題が起きた場合は、/etc/default/localeのファイルを編集する必要があります。そこで、UbuntuのデフォルトアプリであるUbuntu Softwareというアプリサイトより、Visual Codeをダウンロードします。
Visual Codeのダウンロードが完了したら、 起動し、/etc/default/localeを開き(CTRL + O)、localeファイルのLANGを変更します。保存時に、sudo権限で実行するか尋ねられるので、Yesを選択します。
LANG = en_US → LAMG = en_US.UTF-8
localeファイルを保存し、再起動すると、terminalが開けるようになります。
初期状態ではsudoを使用することができないので、rootにてユーザにsudo権限を付与します。
$ sudo -s #rootユーザへ
##root↓##
$ usermod -G sudo username #usernameには、Ubuntuのユーザ名を入力
設定後、terminalを再起動すると、sudoを使用可能となり、Virtual box Ubuntu 22.04の環境構築は完了となります。
4.KRSインストールの下準備
Ubuntu22.04上にKRSをセットアップするためには、下記環境が構築されていることが前提とされています。
-
Vitis™ Unified Software Platform 2022.1
-
the ROS 2 Humble Hawksbill distribution
https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html -
Gazebo Classic 11.0
ROS 2 humbleはURLの公式手順に沿って、インストールすれば、問題ありません。また、Gazeboは、下記コマンドをterminalで入力することで完了となります。
$ sudo apt install gazebo
続いて、Vitisのインストールについてです。Vitisをインストールする前に下記をインストールしておかないと、半日待ってやり直しとなるので忘れずインストールしてください。
$ sudo apt install libtinfo5
$ sudo apt install libncurses5
libtinfo5とlibncurses5のインストールが完了したら、Vitisのインストールを行います。
Vitisは下記URLより、2022.1のLinux版をダウンロードします。
https://www.xilinx.com/support/download.html
ダウンロードする際は、Xilinxのアカウントも必要となるので、所持していない方はWeb installerクリック後のWebサイトにて登録を行ってください。
問題なくダウンロードが完了すると、BINファイル(Xilinx_Unifield_2022.1_0420_0327_Lin64.bin)がダウンロードされます。
そちらを以下のコマンドで起動します。
$ cd Download #ダウンロードディレクトリに移動
$ chmod +x Xilinx_Unifield_2022.1_0420_0327_Lin64.bin
$ sudo ./Xilinx_Unifield_2022.1_0420_0327_Lin64.bin
BINファイルを起動すると、Vitisインストーラーが起動します。インストーラーは特に何も設定を変更せず、手順に沿って行けばインストールが始まります。(筆者の環境では数時間かかりました。)
何もエラーや警告文が出ずにインストールが終わればKRSの下準備は完了となります。警告文がでた場合はその後のKRSのセットアップに影響を及ぼす可能性があるので内容に注意してください。
5.KRSのインストールとビルド
最後にKRSのインストールとビルドについてです。
①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 gcc-multilib
$ sudo apt-get -y install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
また、Virtual box Ubuntu22.04のように、Windowsの上に仮想環境を構築してKRSをビルドしたい場合は、qemu-user-staticもインストールする必要があります。
$ sudo apt install qemu-user-static
さらに、KRSのビルドをするためにROSパッケージであるimage_commonライブラリを初めにインストールし、ビルドします。
$ mkdir -p ~/ros2_ws/src
$ cd ~/ros2_ws/src
$ git clone https://github.com/ros-perception/image_common.git -b humble
$ cd ~/ros2_ws
$ clocon build
②KRSのインストールとビルド
下記の手順で、必要ライブラリをインストールします。
$ mkdir -p ~/krs_ws/src; cd ~/krs_ws
$ 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
$ vcs import src ––recursive < krs_humble.repos
上記が完了しますと、~/krs_ws/src/ にKRS関連のパッケージがインストールされます。
インストールされていることが確認できたら、VitisとROSの環境変数を設定し、ビルドをします。
$ source /tools/Xilinx/Vitis/2022.1/settings64.sh
$ source /opt/ros/humble/setup.bash
$ export PATH=”/usr/bin”:$PATH
$ sudo ls #sudoを使用していないと、この後のビルドが無限に行われるため
$ colcon build ––merge-install
ビルドは(CPU : Intel i7-1165G7にて)、数十分かかります。筆者の環境ではコンソールにエラーが出ず、数分でビルドが終わるということが起きました。もし同様の問題が起きた場合は、これまでの手順に不足がないか再確認してください。
続いて、KR260上でKRSを機能させるビルドを行うために、下記のシンボリックリンクの設定を行います。
$ source install/setup.bash
$ sudo rm /usr/lib/aarch64-linux-gnu/libpython3.10.so
$ sudo ln -s ~/krs_ws/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
最後に、KV260のフィルムウェアをインストール、ビルドし、KRSがKR260で動作するためのクロスコンパイルビルドを行います。使用ボードはKR260ですが、フィルムウェアとaccelerationのセレクトはkv260ということに気を付けてください。
$ 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
$ colcon acceleration select kv260
#↓CPUバイナリを生成したい場合
$ colcon build ––build-base=build-kr260-ubuntu ––install-base=install-kr260-ubuntu ––merge-install ––mixin kr260 ––cmake-args -DNOKERNELS=true
#↓CPUバイナリとアクセラレーションを生成したい場合
$ colcon build ––build-base=build-kr260-ubuntu ––install-base=install-kr260-ubuntu ––merge-install ––mixin kr260
これらの手順で生成したinstall-kr260-ubuntuがKR260で動作するためのinstallディレクトリとなり、KR260で動かせるKRSのビルドは以上で完了です。
KR260で動かせるかKRSの動作確認
最後に、KRSでビルドしたサンプルをKR260にて動かす手順を含めて、動作確認を行います。公式手順では、SDカードにKRSのデータをフラッシュして、KR260で動作させる手順の説明が載っています。フラッシュを行うと元々構築しているKR260の環境が消えてしまうため、今回は元々環境を準備している場合の手順で説明します。
まず、先ほどのKRSをビルドする手順を完了させたros2_wsにinstall-kr260-ubuntuのディレクトリをKR260の環境にコピーします。
$ scp install-kr260-ubuntu kr260@123.456.789:~/ros2_ws/
続いて、KR260上のterminalにて、install-kr260-ubuntuにパーミッションを付与します。
$ chmod -R 755 install-kr260-ubuntu/
最後に環境変数を設定すれば、サンプルコードは実行できる状態となるため、KRSにサンプルで入っているvadd_publisherを実行します。
$ source /opt/ros/humble/setup.bash
$ source ~/ros2_ws/install-kr260-ubuntu/local_setup.bash
$ ros2 run vadd_publisher vadd_pubillsher
[INFO] [1688086053.937480129] [vadd_publisher]: Publishing: ‘vadd finished, iteration: 0’
[INFO] [1688086054.037548760] [vadd_publisher]: Publishing: ‘vadd finished, iteration: 1’
[INFO] [1688086054.137547250] [vadd_publisher]: Publishing: ‘vadd finished, iteration: 2’
[INFO] [1688086054.237506780] [vadd_publisher]: Publishing: ‘vadd finished, iteration: 3’
[INFO] [1688086054.337536700] [vadd_publisher]: Publishing: ‘vadd finished, iteration: 4’
[INFO] [1688086054.437631251] [vadd_publisher]: Publishing: ‘vadd finished, iteration: 5’
上記のようなログが出力されたら、ノードは問題なく起動しており、KRSのビルドに成功していることが確認できます。
まとめ
今回は、KR260のセットアップとKRSのセットアップを紹介させていただきました。筆者のセットアップの際はいくつか問題が発生しましたが、今回紹介した手順に沿うことにより、問題なくKR260とKRSを使用できる環境が整うかと思います。ぜひご活用ください。
また、KR260は近年、ロボット開発ミドルウェアとして急激に普及しているROS 2をネイティブサポートしており、ROS 2のソフトウェア開発を行う際にROS 2パーセプションノードアクセラレーションというFPGAを活用したハードウェアアクセラレーションを使用することで、KR260を最大限に活用することができます。
そのようなROS 2またはROS開発をどのようにすればよいのか?という懸念があるかもしれませんが、富士ソフトでは、ROS/ROS 2開発支援サービスを行っております。ぜひご相談ください。
↓詳しくはこちら
https://www.fsi.co.jp/ros/
関連
Kria SOM
関連ソリューション
ROS/ROS2開発支援サービス
ロボットシミュレータ構築支援サービス
富士ソフトの組み込み受託開発
個別相談も承っております。下記よりお申し込みください。