ラズパイZero にROS2をインストールします。ただ、このコンピュータは少々非力なため、この上で直接インストールするのは現実的ではありません。
方法は2つあるようです。
1つは、他のコンピュータ上でクロスコンパイル環境を作って、この上で作成したROS2をZeroに転送する方法。
もう一つは、同様に他のコンピュータ上でROS2をクロスコンパイルして作成するのですが、これを使ってイメージを作りMicroSDカードに焼くという方法です。これはArch LinuxというOSをイメージにしますが、やってみたところ最終的にはrclpy._rclpyというエントリポイントが見つからないというエラーでROS2の起動に失敗しました。ただ、Arch LinuxというシンプルなOSをWi-Fi設定済みで作成できるので何かに応用できるかもしれません。失敗談を含めてこの2つの方法をやってみます。
Jetson とZero を使ってROS2でtopic通信してみる
1:クロスコンパイル環境で作成したROS2をZeroに転送する
epuck_ros2ではx64(amd64)で環境構築することが想定されています。クロスコンパイルの対象はarmv6(Raspberry Pi Zero)です。
従って、母艦になるのは主にIntel MacかWindowsです。
母艦側
ここではWindows 10 + VirtualBox + Ubuntu 18.04 + Docker で環境構築してみます。
● Windows 10 + VirtualBox + Ubuntu 18.04 に関しては、ここ参照。仮想ディスクサイズは15GBは必要です。VirtualBox の最新バージョンは6.1です。これを使います。
● Docker のインストールに関しては、ここ参照(16.04でやってますが18.04 でも一緒)。
Ubuntu を起動したら必要なファイルを作成しておきます。
epuck_ros2にある4つのファイルをコピー・ペーストして、権限を付与しておきます。
Dockerfile <—666
bashrc.sh <—777
start_docker.sh <—777
toolchain.cmake <—666
start_docker.shはsudoで実行できるように、各コマンドの前にsudoをつけておきます。
ラズパイZero側
OSはRaspbian Liteを使います、ここ参照。
Raspberry Pi Preparation
ROS2 requires the following packages to be installed on your Raspberry Pi:
ROS2では、次のパッケージをRaspberryPiにインストールする必要があります。
母艦側
ROS2 Cross-Compilation on Your PC
Now we can start a process of ROS2 cross-compilation. The supplied Docker image is equipped with most of the tools you need, so start it with:
これで、ROS2クロスコンパイルのプロセスを開始できます。 提供されているDockerイメージには、必要なツールのほとんどが含まれているため、次のコマンドから始めてください。
終了後、コンテナが起動します。
おまじない(不要かもしれませんが念のため)
Rootfs Preparation
As your Raspberry Pi is equipped with ROS2 dependencies you have to synchronize the rootfs. This will allow the cross-compiler to use header files and libraries from your Raspberry Pi. There are two ways to get the rootfs inside your Docker.
Raspberry PiにはROS2依存関係が装備されているため、rootfsを同期する必要があります。 これにより、クロスコンパイラーはRaspberryPiのヘッダーファイルとライブラリを使用できるようになります。 Docker内でrootfsを取得する方法は2つあります。
ラズパイZeroのIPアドレスを調べておいてください。
1つめ、rsyncを使う(ネット環境にもよるとは思いますが、30分くらいかかりました)
Initially, rsync will take more time to perform synchronization, but the cross-compilation process will be faster after (as the cross-compiler doesn’t have to transfer a file from Raspberry Pi every time).
最初、rsyncは同期の実行に時間がかかりますが、クロスコンパイルプロセスは後で高速になります(クロスコンパイラーは毎回Raspberry Piからファイルを転送する必要がないためです)。
もう一つはsshfsを使う
注:rsyncでエラーを経験した場合以下を実行しておく
rm -rf /home/develop/rootfs/*
こちらを使ってみます。
Compilation Commands
In the Docker, we prepared a few commands with the cross-* prefix to bootstrap your development. For example, you can use cross-initialize to download the ROS2 source code or cross-colcon-build to build it. These commands are simple bash functions located in .bashrc. You can see how the commands are implemented by typing e.g. type cross-initialize and change them according to your needs. Therefore, in the Docker container type:
Dockerでは、開発をブートストラップするために、cross- *プレフィックスが付いたコマンドをいくつか用意しました。 たとえば、cross-initializeを使用してROS2ソースコードをダウンロードしたり、cross-colcon-buildを使用してビルドしたりできます。 これらのコマンドは、.bashrcにある単純なbash関数です。 たとえば、次のように入力すると、コマンドがどのように実装されているかを確認できます。 cross-initializeと入力し、必要に応じて変更します。 したがって、Dockerコンテナタイプでは次のようになります。
to download the ROS2 source code. By default, it will initialize the ROS2 Foxy distribution, but if you want to change it you can use ROS_DISTRO environment variable, e.g. for ROS2 Dashing:
ROS2ソースコードをダウンロードします。 デフォルトでは、ROS2 Foxyディストリビューションが初期化されますが、変更する場合は、ROS_DISTRO環境変数を使用できます。 ROS2 Dashingの場合:
注:今回はFoxyを使うので以下は不要です。
To compile the ROS2 source code execute:
ROS2ソースをコンパイル
cyclonddsでビルドエラーが出ます。直し方が分かりませんでした。ただ今回は不要なので、ソースを削除しておきます。
ros2topicをビルド
注:sshfsを使った場合
予期しないビルドエラーが結構出ます。XXが見つからないとか、XXが無いとか….。都度対処が必要になります。そんなわけない….と感じたら、再度cross-colcpn-buildを実行してみてください。
また、コネクションが切れてfatal-error になることもあります。
sshfsで再度マウントして、cross-colcpn-buildを再実行してみてください。
Flag --packages-up-to ros2topic
will compile ros2topic
and all it’s recursive dependencies. Also, note that it can happen that you need to run the command twice to compile fastrtps
package.
Flag –packages-up-to ros2topicは、ros2topicとそのすべての再帰的な依存関係をコンパイルします。 また、fastrtpsパッケージをコンパイルするためにコマンドを2回実行する必要がある場合があることに注意してください。
こんな感じですが、今回は実行しません(というか、fastrtpsはros2topicビルド時に作成されます)。
ビルドが無事終了したら…….
Using the Cross-Compiled ROS2 on your Raspberry Pi
To use the cross-compiled ROS2 on your Raspberry Pi you have to copy ./ros2_ws/install to the Raspberry Pi:
Raspberry PiでクロスコンパイルされたROS2を使用するには、./ros2_ws/installをRaspberryPiにコピーする必要があります。
結構な数のファイルが転送されます。
使ってみる
Jetson Nano とラズパイZeroでROS2を使ったtopic通信をやってみます。
Jetson側でのROS2環境設定は「Jetson Nanoで学習済みモデルを使って、いろいろやってみる(8-1)ROS2(DDS)」をご参照。
Zero側
ROS2フォルダーが作成されています。
以下を実行してROS2コマンドが使えるようにセットアップします。
Jetson Nano で作成しておいたROS2環境から、メッセージをPublishしたものを、Zero側でSubscribeしてみます。
注:
run実行には直接は関係しませんが、ROS2起動時にlarkというモジュールがない、というメッセージが出る場合
JetsonからメッセージをPublish
ZeroでメッセージをSubscribe
では反対に、topicを使ってZeroからメッセージをpublishしてみます。
JetsonでメッセージをSubscribe
Next
2:ROS2をプリセットしたZero用のOSイメージを作成してみる
Appendix
【start_docker.sh】
Leave a Reply