はじめに
ロボット制御のソフトウェアを開発するのにROSが有名である。
ROSはLinux上で動くミドルウェアとなっている。なのでYocto Projectでも使える。
Yocto Projectのためにmeta-rosというものが存在する。
環境構築も含めて全く触ったことがなかったので調べてみる。
環境構築
meta-rosのREADMEの「Getting Started」を読むと下記のようにある。
You may use the kas tool to clone the necessary git repositories and kick off the build.
とりあえずkas使ってビルドしとけ。ということらしい。
kas
kasは本ブログでも取り扱ったことがある。
yamlに書いておくだけで必要なレイヤをすべて持ってきてビルドしてくれる。 local.confやbblayers.confも自動生成されるのでとっても便利。正直ビルドするだけならrepoより断然便利。
kas用のyamlファイルを管理するためだけにmeta-rosにはbuild
ブランチが存在する。
ビルド手順
詳しい手順はbuildブランチのREADME.mdに記載がある。
ビルド
実際にビルドしてみる。
meta-rosのbuildブランチ
下記でmeta-rosのbuildブランチを取得する。
$ mkdir ~/kas && cd ~/kas $ git clone -b build https://github.com/ros/meta-ros
提供されているyamlファイル
meta-rosが提供しているkasのyamlファイルは次の3つの項目の組み合わせとなる
- Yoctoバージョン
- ROSバージョン
- ターゲット(MACHINE)
提供されているファイルは以下となる。
ファイル名 | Yocto | ROS | MACHINE |
---|---|---|---|
oeros-kirkstone-humble-jetson-agx-xavier-devkit.yml | kirkstone | humble | jetson-agx-xavier-devkit |
oeros-kirkstone-humble-jetson-orin-nano-devkit.yml | kirkstone | humble | jetson-orin-nano-devkit |
oeros-kirkstone-humble-qemux86-64.yml | kirkstone | humble | qemux86-64 |
oeros-kirkstone-humble-raspberrypi4-64.yml | kirkstone | humble | raspberrypi4-64 |
oeros-kirkstone-iron-qemux86-64.yml | kirkstone | iron | qemux86-64 |
oeros-kirkstone-iron-raspberrypi4-64.yml | kirkstone | iron | raspberrypi4-64 |
oeros-kirkstone-jazzy-qemux86-64.yml | kirkstone | jazzy | qemux86-64 |
oeros-kirkstone-jazzy-raspberrypi4-64.yml | kirkstone | jazzy | raspberrypi4-64 |
oeros-kirkstone-noetic-qemux86-64.yml | kirkstone | noetic | qemux86-64 |
oeros-kirkstone-noetic-raspberrypi4-64.yml | kirkstone | noetic | raspberrypi4-64 |
oeros-kirkstone-rolling-qemux86-64.yml | kirkstone | rolling | qemux86-64 |
oeros-kirkstone-rolling-raspberrypi4-64.yml | kirkstone | rolling | raspberrypi4-64 |
oeros-master-humble-qemux86-64.yml | master | humble | qemux86-64 |
oeros-master-humble-raspberrypi4-64.yml | master | humble | raspberrypi4-64 |
oeros-master-iron-qemux86-64.yml | master | iron | qemux86-64 |
oeros-master-iron-raspberrypi4-64.yml | master | iron | raspberrypi4-64 |
oeros-master-jazzy-qemux86-64.yml | master | jazzy | qemux86-64 |
oeros-master-jazzy-raspberrypi4-64.yml | master | jazzy | raspberrypi4-64 |
oeros-master-noetic-raspberrypi4-64.yml | master | noetic | raspberrypi4-64 |
oeros-master-rolling-qemux86-64.yml | master | rolling | qemux86-64 |
oeros-master-rolling-raspberrypi4-64.yml | master | rolling | raspberrypi4-64 |
oeros-mickledore-humble-qemux86-64.yml | mickledore | humble | qemux86-64 |
oeros-mickledore-humble-raspberrypi4-64.yml | mickledore | humble | raspberrypi4-64 |
oeros-scarthgap-humble-qemux86-64.yml | scarthgap | humble | qemux86-64 |
oeros-scarthgap-humble-raspberrypi4-64.yml | scarthgap | humble | raspberrypi4-64 |
oeros-scarthgap-iron-qemux86-64.yml | scarthgap | iron | qemux86-64 |
oeros-scarthgap-iron-raspberrypi4-64.yml | scarthgap | iron | raspberrypi4-64 |
oeros-scarthgap-jazzy-qemux86-64.yml | scarthgap | jazzy | qemux86-64 |
oeros-scarthgap-jazzy-raspberrypi4-64.yml | scarthgap | jazzy | raspberrypi4-64 |
oeros-scarthgap-noetic-qemu86-64.yml | scarthgap | noetic | qemu86-64 |
oeros-scarthgap-noetic-raspberrypi4-64.yml | scarthgap | noetic | raspberrypi4-64 |
oeros-scarthgap-rolling-qemux86-64.yml | scarthgap | rolling | qemux86-64 |
oeros-scarthgap-rolling-raspberrypi4-64.yml | scarthgap | rolling | raspberrypi4-64 |
kas build
下記でダウンロードからbitbakeまでやってくれる。
$ mkdir ~/kirkstone && cd ~/kirkstone $ kas build ~/kas/meta-ros/kas/oeros-kirkstone-humble-qemux86-64.yml
今回はkirkstone + humble + qemux86-64を選択した。
bitbakeのターゲットは、yamlの設定によってros-image-core
となっている。
$ cat ~/kas/meta-ros/kas/ros2/humble.yml header: version: 14 distro: "ros2" repos: ros: url: "https://github.com/ros/meta-ros.git" path: "layers/meta-ros" layers: meta-ros-common: meta-ros2: meta-ros2-humble: target: - ros-image-core
ビルド環境の確認
kasによって作成されたビルド環境を確認する。
レイヤ
kas shell
を使用するとoe-init-build-envをしないでkas経由でbitbake関連のコマンドを実行することができる。
$ kas shell ~/kas/meta-ros/kas/oeros-kirkstone-humble-qemux86-64.yml -c 'bitbake-layers show-layers' ... (snip) ... layer path priority ========================================================================== meta-filesystems /home/ubuntu/kirkstone/build/../layers/meta-openembedded/meta-filesystems 5 meta-gnome /home/ubuntu/kirkstone/build/../layers/meta-openembedded/meta-gnome 5 meta-initramfs /home/ubuntu/kirkstone/build/../layers/meta-openembedded/meta-initramfs 5 meta-multimedia /home/ubuntu/kirkstone/build/../layers/meta-openembedded/meta-multimedia 5 meta-networking /home/ubuntu/kirkstone/build/../layers/meta-openembedded/meta-networking 5 meta-oe /home/ubuntu/kirkstone/build/../layers/meta-openembedded/meta-oe 5 meta-perl /home/ubuntu/kirkstone/build/../layers/meta-openembedded/meta-perl 5 meta-python /home/ubuntu/kirkstone/build/../layers/meta-openembedded/meta-python 5 meta-webserver /home/ubuntu/kirkstone/build/../layers/meta-openembedded/meta-webserver 5 meta-xfce /home/ubuntu/kirkstone/build/../layers/meta-openembedded/meta-xfce 5 meta-ros-common /home/ubuntu/kirkstone/build/../layers/meta-ros/meta-ros-common 10 meta-ros2 /home/ubuntu/kirkstone/build/../layers/meta-ros/meta-ros2 11 meta-ros2-humble /home/ubuntu/kirkstone/build/../layers/meta-ros/meta-ros2-humble 12 meta /home/ubuntu/kirkstone/build/../layers/openembedded-core/meta 5
local.conf
kasによって出力されたlocal.confは必要最低限の記述しかない。
# common DISTRO_FEATURES += "usrmerge" IMAGE_FEATURES += "debug-tweaks" INHERIT += "report-error" INHERIT += "rm_work" INHERIT_DISTRO:remove = "create-spdx" WARN_QA:remove = "license-exists" TEMPLATECONF = "" MACHINE ??= "qemux86-64" DISTRO ??= "ros2" BBMULTICONFIG ?= ""
動作確認
下記のコマンドでQEMUを起動する。
$ kas shell ~/kas/meta-ros/kas/oeros-kirkstone-humble-qemux86-64.yml -c 'runqemu nographic'
QEMUのログインプロンプト
Robot Operating System 2 (ROS 2) with OpenEmbedded Linux 2.humble.2024-06-20.3-0 qemux86-64 ttyS0 qemux86-64 login: root root@qemux86-64:~# cat /etc/os-release ID=ros2 NAME="Robot Operating System 2 (ROS 2) with OpenEmbedded Linux" VERSION="2.humble.2024-06-20.3-0 (humble)" VERSION_ID=2.humble.2024-06-20.3-0 PRETTY_NAME="Robot Operating System 2 (ROS 2) with OpenEmbedded Linux 2.humble.2024-06-20.3-0 (humble)" DISTRO_CODENAME="humble" root@qemux86-64:~# uname -a Linux qemux86-64 5.15.150-yocto-standard #1 SMP PREEMPT Mon Mar 11 14:54:28 UTC 2024 x86_64 GNU/Linux root@qemux86-64:~#
ros2コマンド
root@qemux86-64:~# which ros2 /usr/bin/ros2
ros2コマンドが/usr/bin
に入っている。
まとめ
kasを使うと、簡単にYocto Project環境でROS2を使うことができた。 実際にはビルドシステムとしてPokyではなく、素のbitbakeとopenembedded-coreを使用しているので厳密にはYocto Project環境ではないが。