ラズパイ Zero W にROS2をセットアップ(1/2)


ラズパイ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に転送する

元ネタ(cyberbotics/epuck_ros2)

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

 


 

 

 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*