2020年11月7日土曜日

meta-ultra96v2を作って、yoctoでビルドしてみたをros2対応させてみた

wifi動作させたイメージをベースにros2を動作させてみた話。

イメージの取得

以下のようにmanifestsを実行してビルドに記載の通りpetalinux-image-minimal-ultra96v2ros2をビルドすれば同じものが得られる。ここに至るまで行った設定は後述。

meta-rosを追加

meta-rosをクローンし、bblayerに追加する。petalinuxは2019.1のためthudベースであるからthudブランチを使用する。

cd <petalinux-repository-top>
source setupsdk
git clone https://github.com/ros/meta-ros ../sources/meta-ros -b thud
bitbake-layers add-layer ../sources/meta-ros/meta-ros-backports-warrior ../sources/meta-ros/meta-ros-common ../sources/meta-ros/meta-ros2 ..//sources/meta-ros/meta-ros2-dashing

ros設定の追加。 ROS_DISTRO_BASELINE_PLATFORMとROS_DISTROを指定する。 ROS_DISTRO_BASELINE_PLATFORMは選択したROS_DISTROの対応環境と合わせて選ぶものと思う。今回はros2-dashingなのでbionicを選択。他にはeloquentやfoxyも選択可能な模様。

  • build/conf/bblayer.conf

    ROS_DISTRO_BASELINE_PLATFORM ?= "ubuntu-bionic"
    ROS_DISTRO ?= "dashing"

meta-ros-backports-warriorのpythonレシピがあるとpetalinux環境のpythonとバッティングするため、pythonレシピを除外する。特定のレシピを除外するにはlocal.confにBBMASKを記載して除くことができる。

  • build/conf/local.conf

    BBMASK = "meta-ros/meta-ros-backports-warrior/recipes-devtools/python/python3_3.7.5.bb"

イメージの追加

今回使うのはros-coreだけなので、imageに追加する。

CORE_IMAGE_EXTRA_INSTALL_append = " ros-core"

ビルド

下記の通りビルドを行う。

cd <petalinux-project-path>/build
MACHINE=ultra96v2-zynqmp bitbake petalinux-image-minimal-ultra96v2ros2

実行結果

wic.qemu-sdをddで/dev/sdXに書き込んで実行する。

dd if=tmp/deploy/images/ultra96v2-zynqmp/petalinux-image-minimal-ultra96v2ros2-ultra96v2-zynqmp.wic.qemu-sd of=/dev/sdX

sshで接続できるので、ros2のpubとechoをテストする。 結果は以下。

akira@akira-Surface-Book:~$ ssh 192.168.2.1 -l root
root@ultra96v2-zynqmp:~# (sleep 5; ros2 topic pub /chatter std_msgs/String "data: Hello world") &
[1] 2219
root@ultra96v2-zynqmp:~# ros2 topic echo /chatter
publisher: beginning loop
publishing #1: std_msgs.msg.String(data='Hello world')

data: Hello world
---
publishing #2: std_msgs.msg.String(data='Hello world')

data: Hello world
---
publishing #3: std_msgs.msg.String(data='Hello world')

data: Hello world
---
publishing #4: std_msgs.msg.String(data='Hello world')

data: Hello world
---
publishing #5: std_msgs.msg.String(data='Hello world')

data: Hello world
---
publishing #6: std_msgs.msg.String(data='Hello world')

data: Hello world
---

0 件のコメント:

コメントを投稿