去年の年末 年末なので ROS を調べてちらほらと | Moonmile Solutions Blog 以来さわっていない、ROS2 なのだが、通信まわりだけでも再構築しておこうと思った記録を残しておきます。
ROS2 のインストールに関しては WEB で色々調べると出てくるのだけど、ROS(いわゆるver.1)と、新しい ROS2 が混在してしまって、ややこしいことになっている。インストールと最初の諸々に関しては、次の本を買ったほうが時間の節約になります。
ROS2ではじめよう 次世代ロボットプログラミング
https://www.amazon.co.jp/dp/4297107422
Kindle 版だと3,000円ちょっとだし、半日時間をつぶしてあれこれ調べるよりも(実際に潰してしまった…)、この本を買ったほうが早いでしょう。
とは言え、最初のインストール部分だけ抜き出せば、Raspberry Pi 3にROS2をインストール – RT Robot Shop Blog にある通り、
export CHOOSE_ROS_DISTRO=dashing
sudo apt install curl
curl http://repo.ros2.org/repos.key | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64,arm64] http://repo.ros2.org/ubuntu/main `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
export CHOOSE_ROS_DISTRO=dashing
sudo apt update
sudo apt install ros-$CHOOSE_ROS_DISTRO-ros-base
sudo apt install python3-argcomplete
sudo apt install python3-colcon-common-extensions
で、最初のインストールまでは完了です。これで、ラズパイ3と Windows 10 上の Ubuntu(WSL:Windows Subsystem for Linux) の両方でインストールができます。
公式は ROS Index: Installation になるので、何か困ったことが起こったら、ここを見るとよい。英語だが、コマンドが羅列されているだけなので、なんとかなるでしょう。
あと、ラズパイ3 への Ubuntu は 64bit 版が必要なので、http://cdimage.ubuntu.com/ubuntu/releases/bionic/release/ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img.xz を使うことになります。
通信だけ試してみる
ROS2 には、ロボットアームのエミュレーションとか各種センサーのコンポーネント化とか、GUI も含めてロボット開発には必要な機能が満載なのですが、私の場合、通信部分だけが使いたいので、通信だけやっていきます。
最終的にはロボットアームの制御と、3Dプリンタ、PLAN2 の ROS2 化までやりたいのだけど、(何度も失敗しているので)小さく始めるということで。
ROS2 は、Publisher/Subscriber方式で通信をしていて、日本語で言えば「出版-購読者」のパターンです。GoF で言えば「Subject/Observer」だったりしますね。ROS1 のときは仲介サーバーが必要だった(ハズ)のですが、ROS2 は P2P で繋がるようになっていてシンプルになっています。
ROS2 をインストールして最初にやることは、ターミナルを2つ開いて、
Publisher側
ros2 topic pub /chatter std_msgs/String "{data: Hello world.}"
Subscriber側
ros2 topic echo /chatter
で動かすことです。
※ 実際は、環境変数の設定があるので、以下を動かしてパスを通す。あとデモ用のパッケージをインストールする
echo "source /opt/ros/$CHOOSE_ROS_DISTRO/setup.bash" >> ~/.bashrc
source ~/.bashrc
- Windows 上の ROS2(実際は WSL上の ROS2)
- PINE A64 上の ROS2
とで通信ができることが分かる。この2つは同じネットワーク上で使われていて、それぞれの IP は「どこにも設定していない」のがミソで、仲介役があって何か IP とかを送っているわけではない。これはかなり便利。
PINE A64 の Ubunut で試す
PINE A64 ってのは、ラズパイ3のようなマイコンボードで、ちょっと大きめの中華ボード。秋月で 3,000円位で買える
ボード自体が大きいのと、USBが2個しかないのが難点なのだけど、
- ラズパイよりも価格が安い
- ラズパイ3よりも性能がいい(らしい)
ところがある。まあ、Android を動かしたかったので、PINE A64 を購入したのだけど、今となっては Android のバージョンが古くなってしまったので、ちょっと放置状態。
PINE A64 も armbian に Linux OS がある。
これは、最初から 64bit 対応になっているので、64bit が必須となる ROS2 がそのまま使える。と言う訳で、Ubuntu 環境で arm64 を用意すれば、
- ROS2 が使える
- .NET Core 3 が使える
という形になっている。たしか、React Native も 64bit 環境が必須だったと思うので、PINE A64 や ラズパイの Ubuntu 環境でも動くでしょう。
お次は、C++ で ROS2 のパッケージを作って動かしてみましょう…ってのは後日。