Raspberry Pi Mouse + ROS2でのナビゲーションの紹介

こんにちは、sato改めd-satoです。この記事はROS 2 Advent Calendar 2019の19日目の記事です。この記事ではRaspberry Pi Mouse + ROS2でのナビゲーションについて紹介します。

ROS2やRaspberry Pi Mouseのセットアップに必要な情報と、Raspberry Pi Mouse + ROS2で実際にナビゲーションパッケージを使用してみた例を紹介します。

株式会社アールティではROSCon2019やMoveIt WorkShop 2019に参加するなどROS/ROS2の開発に積極的に関わっています!詳しくはROS 2 Advent Calendar 2019の16日目の「MoveIt WorkShop 2019に参加しました。」をご覧ください!

使用する機材、ソフトウェア

Raspberry Pi Mouse ROSConJP2019講習会キット

Raspberry Pi Mouse ROSConJP2019講習会キットはRPLIDAR A1M8とそのマウントがセットになっているので、簡単にSLAMやナビゲーションの実験ができて便利です。RPLIDAR A1M8とそのマウントはオプションキット No.6としても販売していますので、Raspberry Pi Mouseをすでにお持ちの方は是非オプションキットをご検討ください!

今回使用するROS2のパッケージは youtalk/raspimouse_ros2 です。

このパッケージについては作者の近藤(@youtalk)さんがROSCon2019のLTにて発表したスライドを公開されていますので、そちらをご参照ください。

youtalk/raspimouse_ros2はRaspberry Pi Mouseを制御する基本パッケージであるrt-net/raspimouse2をベースにしています。

ROS2を使ってRaspberry Pi Mouseを制御する方法は以下のページをご参照ください。

セットアップ

Raspberry Pi Mouseのセットアップ

Raspberry PiへのROS2のインストール方法については以下のページを参照ください。


Raspberry PiへのUbuntuのインストール(とROS2のインストール)が完了したら、Raspberry Pi Mouseの各機能を使えるようにするためにデバイスドライバをインストールしておきます。

デバイスドライバのソースを含むリポジトリをGitHubからダウンロードして、ソースコードがあるディレクトリに移動します。

cd ~
git clone https://github.com/rt-net/RaspberryPiMouse.git
cd RaspberryPiMouse/src/drivers

デバイスドライバをビルドしてインストールします。

make
sudo make install
sudo insmod rtmouse.ko

デバイスドライバがインストールできると、ピッという音が鳴り、距離センサが1回光ります。これでインストール成功です。

ROS2のインストールが完了したら、ワークスペースを用意してyoutalk/raspimouse_ros2をビルドしておきます。

リポジトリをGitHubからダウンロードして、サブモジュールもあわせてダウンロードしておきます。

mkdir -p ~/ros/dashing/src
cd ~/ros/dashing/src
git clone https://github.com/youtalk/raspimouse_ros2.git -b ignore-cartographer-navigation2
cd raspimouse_ros2
git submodule update --init

次に依存関係にあるパッケージをインストールして、colcon buildします。

cd ~/ros/dashing/
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install
source ~/ros/dashing/install/setup.bash

以上でRaspberry Pi Mouseのセットアップは完了です。

PCのセットアップ

Ubuntu 18.04がインストールされたPCにROS2をインストールします。公式のドキュメントに書かれているインストール方法を参照するか、Tiryoh/ros2_setup_scripts_ubuntuを使ってインストールします。

ROS2のインストールが完了したら、ワークスペースを用意してyoutalk/raspimouse_ros2をビルドしておきます。

リポジトリをGitHubからダウンロードして、サブモジュールもあわせてダウンロードしておきます。

mkdir -p ~/ros/dashing/src
cd ~/ros/dashing/src
git clone https://github.com/youtalk/raspimouse_ros2.git
cd raspimouse_ros2
git submodule update --init

次に依存関係にあるパッケージをインストールして、colcon buildします。

cd ~/ros/dashing/
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install
source ~/ros/dashing/install/setup.bash

以上でPCのセットアップは完了です。

PCのスペックによってはcolcon build --symlink-installで失敗する場合があり、その際には--parallel-workers 1とオプションを付けることでビルドが通るようになる場合もあるようです。

SLAMとナビゲーション

セットアップが完了したら早速Raspberry Pi Mouseを使ってSLAMとナビゲーションをしてみましょう!Raspberry Pi MouseとPCでそれぞれノードを起動します。

Raspberry Pi Mouse上でRaspberry Pi MouseとRPLIDARの制御ノードを起動します。PCで1枚目のターミナルを開き、SSHでRaspberry Piにログインして以下のコマンドを実行します。

ros2 launch raspimouse_bringup robot.launch.py

Raspberry Pi Mouseのノードを有効にします。PCで2枚目のターミナルを開き、以下のコマンドを実行します。

ros2 lifecycle set raspimouse_driver configure && \
ros2 lifecycle set raspimouse_driver activate && \
ros2 service call /motor_power std_srvs/SetBool '{data: true}'

Cartographerのノードを起動します。2枚目のターミナルで以下のコマンドを実行します。

ros2 launch raspimouse_cartographer cartographer.launch.py

SLAMのために部屋の中でロボットを移動させます。PCで3枚目のターミナルを開き、以下のコマンドを実行します。

ros2 run teleop_twist_keyboard teleop_twist_keyboard
地図作成中の様子

ある程度動かすと部屋の状態がわかる地図ができあがります。

作成したマップ https://gist.github.com/Tiryoh/5f57581eebade73df2f534ff821a9e4a

3枚目のターミナルでCtrl+Cを押して、teleop_twist_keyboardノードを停止したあと次のコマンドを入力します。

ros2 run nav2_map_server map_saver -f ~/.ros/room_map

2枚目のターミナルでCtrl+Cを押してraspimouse_cartographerのノードを停止します。このままナビゲーションをしてみましょう。

ros2 launch raspimouse_navigation2 navigation2.launch.py map:=/home/$USER/.ros/room_map.yaml

地図をロードした状態でRViz2が起動するので、ナビゲーションができると思います。

Navigation2を使って地図内に指定した2D Goalまで移動させた様子

おわりに

Raspberry Pi Mouse + ROS2でナビゲーションするために必要なソフトウェアとそのセットアップ方法、そしてその使用例を紹介しました。

ROS Discorseで紹介されているとおり、ROS2でナビゲーションまでできるロボットはまだそれほど多くはありません。

https://discourse.ros.org/t/yet-another-ros-2-navigation-robot-raspberry-pi-mouse/10670

これからどんどんROS2に対応したロボットは増えていくと思いますが、いち早くROS2を体験してみたい方はRaspberry Pi Mouse ROSConJP2019講習会キットをご検討ください!

株式会社アールティではROS2に対応した新しいロボットも開発中です。続報にご期待ください!

見たことあるモジュールが搭載された2輪の移動ロボットです
新しいロボットでROS2のCartographerを利用してSLAMができました
(地図がくっきりしてないのは開発中のロボットにつきロボットのオドメトリが不安定なためです)