PYNQ2.6にROS/ROS2をインストールする


PYNQとROS/ROS2の組み合わせが楽しそうです。

PYNQは、公式サポートのボードの他、Zynqが載っているボードなら大抵自分でSDカードを作れば動きます()。

しかし、通常のROS2のインストール手順で、PYNQにROS2を入れようとすると上手くいかないので、以下の修正が必要です。

ROS2のバージョン:ros-eloquent-desktop
PYNQのバージョン:PYNQ2.5 および PYNQ2.6 (Ubuntu18.04ベース)

追記:5か月前にROSのdiscourseにも投稿してました。。。Pynq2.3およびROS1も同様です
https://discourse.ros.org/t/installation-of-ros-ros2-on-pynq/15549?fbclid=IwAR3pfSqelt0csqQz8PJkIsyXlCGgexswOZnmREJSob5SfaNeJFIHMV0RpA8

修正すべきは以下の2点です。

1.Ubuntuのバージョンを自分で書く

ROS2の通常手順だと以下をやれと書いてあります。

sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'

しかしPYNQの場合、$(lsb_release -cs) で出てくるのがbionicではないため、ROS/ROS2のパッケージ取得に失敗します。

 xilinx@pynq:~$ lsb_release -cs
 WFH

そのため、上記の代わりに、以下を実行してください。

sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu bionic main" > /etc/apt/sources.list.d/ros2-latest.list'

2.aptソースリストに、bionic-updatesを追加する

ROS2が依存しているfast-rtps が、 libssl1.1 (>=1.1.1) を必要とします。
しかし、18.04 bionic (armhf or arm64)のバージョンは、 libssl1.1.0gです。

そのため、/etc/apt/sources.list.d/multistrap-bionic.listに、bionic-updates repository を追加してください。

xilinx@pynq:~$ cat /etc/apt/sources.list.d/multistrap-bionic.list
deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports bionic universe main
deb-src http://ports.ubuntu.com/ubuntu-ports bionic universe main
deb http://ports.ubuntu.com/ubuntu-ports bionic-updates main

([arch=armhf]は環境によっては無いかもしれません。)

インストールと動作確認

以上の操作を行うと、無事PYNQ上にROS2がインストールできるはずです。

sudo apt update
sudo apt install ros-eloquent-desktop

新しいウィンドウを2つ開いて、TalkerとListenerを動かしてみましょう

source /opt/ros/eloquent/setup.bash
ros2 run demo_nodes_cpp talker

そして、

source /opt/ros/eloquent/setup.bash
ros2 run demo_nodes_py listener

上手く動作しましたか?ROS2ではROSのようなマスターノード(roscore)が不要なので、躓きがなくて良いですね。