こんにちは、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講習会キット
- OS: Ubuntu 18.04
- ROS: ROS 2 Dashing Diademata
- PC
- OS: Ubuntu 18.04
- ROS: ROS 2 Dashing Diademata
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
ある程度動かすと部屋の状態がわかる地図ができあがります。
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が起動するので、ナビゲーションができると思います。
おわりに
Raspberry Pi Mouse + ROS2でナビゲーションするために必要なソフトウェアとそのセットアップ方法、そしてその使用例を紹介しました。
ROS Discorseで紹介されているとおり、ROS2でナビゲーションまでできるロボットはまだそれほど多くはありません。
これからどんどんROS2に対応したロボットは増えていくと思いますが、いち早くROS2を体験してみたい方はRaspberry Pi Mouse ROSConJP2019講習会キットをご検討ください!
株式会社アールティではROS2に対応した新しいロボットも開発中です。続報にご期待ください!
(地図がくっきりしてないのは開発中のロボットにつきロボットのオドメトリが不安定なためです)