Kria KV260上でROS2を動かしたい。 ただし2023年7月時点で acceleration_firmware_kv260 のv1.1.0以降のバージョンではPetaLinuxではなくUbuntuがターゲットとなっている。 また、確認した限りではROS2も含まれていない。 そこで、 PetaLinuxをビルドする(2023.1) でビルドしたPetaLinuxに、ROS2 Humbleを追加する。
動作環境
- OS : Ubuntu 20.04.3 LTS(64 bit)
- Vivado : 2023.1
- ROS2 : Humble
ファイルの配置
PetaLinuxをビルドする(2023.1) で作成したDockerコンテナの中で、 ROS 2 Humble in AMD KV260 with Yocto を参考に、 petalinux-image-minimal.bbappend を追加する。 ただし後述エラーの回避のために以下のパッケージは除外した。
- python3-nose
- examples-rclpy-executors
- examples-rclpy-minimal-action-client
cd ${HOME}/xilinx-kv260-starterkit-2023.1/
mkdir -p project-spec/meta-user/recipes-images/images
cat << 'EOF' > project-spec/meta-user/recipes-images/images/petalinux-image-minimal.bbappend
require ${COREBASE}/../meta-petalinux/recipes-core/images/petalinux-image-minimal.bb
SUMMARY = "A image including a bare-minimum installation of ROS 2 and including some basic pub/sub examples. It includes two DDS middleware implementations, FastDDS and Cyclone DDS"
DESCRIPTION = "${SUMMARY}"
inherit ros_distro_${ROS_DISTRO}
inherit ${ROS_DISTRO_TYPE}_image
ROS_SYSROOT_BUILD_DEPENDENCIES = " \
ament-lint-auto \
ament-cmake-auto \
ament-cmake-core \
ament-cmake-cppcheck \
ament-cmake-cpplint \
ament-cmake-export-definitions \
ament-cmake-export-dependencies \
ament-cmake-export-include-directories \
ament-cmake-export-interfaces \
ament-cmake-export-libraries \
ament-cmake-export-link-flags \
ament-cmake-export-targets \
ament-cmake-gmock \
ament-cmake-gtest \
ament-cmake-include-directories \
ament-cmake-libraries \
ament-cmake \
ament-cmake-pytest \
ament-cmake-python \
ament-cmake-ros \
ament-cmake-target-dependencies \
ament-cmake-test \
ament-cmake-version \
ament-cmake-uncrustify \
ament-cmake-flake8 \
ament-cmake-pep257 \
ament-copyright \
ament-cpplint \
ament-flake8 \
ament-index-python \
ament-lint-cmake \
ament-mypy \
ament-package \
ament-pclint \
ament-pep257 \
ament-pycodestyle \
ament-pyflakes \
ament-uncrustify \
ament-xmllint \
cmake \
eigen3-cmake-module \
fastcdr \
fastrtps-cmake-module \
fastrtps \
git \
gmock-vendor \
gtest-vendor \
pkgconfig \
python-cmake-module \
python3-catkin-pkg \
python3-empy \
python3 \
python3-pytest \
rcutils \
rmw-implementation-cmake \
rosidl-cmake \
rosidl-default-generators \
rosidl-generator-c \
rosidl-generator-cpp \
rosidl-generator-dds-idl \
rosidl-generator-py \
rosidl-parser \
rosidl-runtime-c \
rosidl-runtime-cpp \
rosidl-typesupport-c \
rosidl-typesupport-cpp \
rosidl-typesupport-fastrtps-cpp \
rosidl-typesupport-interface \
rosidl-typesupport-introspection-c \
rosidl-typesupport-introspection-cpp \
foonathan-memory-vendor \
libyaml-vendor \
"
IMAGE_INSTALL:append = " \
ros-base \
examples-rclcpp-minimal-action-client \
examples-rclcpp-minimal-action-server \
examples-rclcpp-minimal-client \
examples-rclcpp-minimal-composition \
examples-rclcpp-minimal-publisher \
examples-rclcpp-minimal-service \
examples-rclcpp-minimal-subscriber \
examples-rclcpp-minimal-timer \
examples-rclcpp-multithreaded-executor \
examples-rclpy-minimal-action-server \
examples-rclpy-minimal-client \
examples-rclpy-minimal-publisher \
examples-rclpy-minimal-service \
examples-rclpy-minimal-subscriber \
demo-nodes-cpp \
demo-nodes-cpp-rosnative \
demo-nodes-py \
cyclonedds \
rmw-cyclonedds-cpp \
tmux \
byobu \
python3-argcomplete \
glibc-utils \
localedef \
rt-tests \
stress \
xrt-dev \
xrt \
zocl \
opencl-headers-dev \
opencl-clhpp-dev \
${ROS_SYSROOT_BUILD_DEPENDENCIES} \
"
IMAGE_LINGUAS = "en-us"
GLIBC_GENERATE_LOCALES = "en_US.UTF-8"
EOF
PetaLinuxをビルドする(2023.1) の petalinux-config --component rootfs の手順から再度実行していく。 SDKのビルドまで完了した後に、SDKを展開するとROS2 Humbleが含まれていることが確認できる。
$ cd ${HOME}/krs_workdir_2023_1
$ mkdir -p sdk
$ ./images/linux/sdk.sh -d sdk
$ ls sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/ros*
sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/ros2
sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/ros-discovery
sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/rosdistro_build_cache
sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/rosdistro_freeze_source
sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/rosdistro_migrate_to_rep_141
sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/rosdistro_migrate_to_rep_143
sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/rosdistro_reformat
sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/rosidl
sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/ros_local_setup.bash
sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/ros_local_setup.sh
sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/ros_local_setup.zsh
sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/ros_setup.bash
sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/ros_setup.sh
sdk/sysroots/cortexa72-cortexa53-xilinx-linux/usr/bin/ros_setup.zsh
除外したパッケージについて
python3-nose をLinuxイメージに含めるように設定していると、以下のエラーが出る。
ERROR: Nothing RPROVIDES 'python3-nose' (but /home/np/xilinx-kv260-starterkit-2023.1/components/yocto/layers/meta-petalinux/recipes-core/images/petalinux-image-minimal.bb RDEPENDS on or otherwise requires it)
NOTE: Runtime target 'python3-nose' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['python3-nose']
ERROR: Required build target 'petalinux-image-minimal' has no buildable providers.
Missing or unbuildable dependency chain was: ['petalinux-image-minimal', 'python3-nose']
また、 examples-rclpy-executors と examples-rclpy-minimal-action-client をLinuxイメージに含めるように設定していると、以下のエラーが出る。
Running transaction test
Error: Transaction test error:
file /usr/bin/listener conflicts between attempted installs of examples-rclpy-executors-0.15.0+2-r0.0.cortexa72_cortexa53 and demo-nodes-py-0.20.1+2-r0.0.cortexa72_cortexa53
file /usr/bin/talker conflicts between attempted installs of examples-rclpy-executors-0.15.0+2-r0.0.cortexa72_cortexa53 and demo-nodes-py-0.20.1+2-r0.0.cortexa72_cortexa53
file /usr/bin/client conflicts between attempted installs of examples-rclpy-minimal-client-0.15.0+2-r0.0.cortexa72_cortexa53 and examples-rclpy-minimal-action-client-0.15.0+2-r0.0.cortexa72_cortexa53
本記事では上記のエラーを回避するために、上記のパッケージは除外した。