ラズパイマウスでROS 2を動かしてみた技術情報・開発日誌

ラズパイマウスとROS2でSLAMする

ラズパイマウスとROS2でSLAMする ラズパイマウスでROS 2を動かしてみた

こんにちはshotaです。このシリーズではRaspberry Pi Mouse(ラズパイマウス)でROS 2を動かしていきます。

今回はラズパイマウスのROS 2サンプル集にある、SLAM(自己位置推定と地図作成)サンプルを実行します。

前回のおさらい

前回はライントレースオプションキットを取り付けて、ラズパイマウスROS 2サンプル集にあるライントレースサンプルを実行しました。

今回もROS 2サンプル集を使用するので、下記の記事を参考にサンプル集をインストールしてください。

また、ROS 2サンプル集ではブザーを鳴らしたりモータを回したりします。
デバイスドライバも忘れずにインストールしてください。

作業に必要なもの

  • Raspberry Pi Mouse V3
    • 商品ページはこちら
    • これまでの記事で、ROS 2 DashingをインストールしたUbuntu 18.04、をインストールしたRaspberry Pi Model 4 B、を搭載したラズパイマウスをセットアップしています
  • Raspberry Pi Mouse オプションキットNo.8 [マルチLiDARマウント]
  • 360 Laser Distance Sensor LDS-01
  • 作業用PC
    • Ubuntu 18.04のPCを用意しました。ROS 2 Dashingインストール済みです。
  • ゲームコントローラ

オプションキットの組み付け

それではマルチLiDARマウントオプションキットをラズパイマウスに組み付けましょう。

マルチLiDARマウントはURG-04LX-UG01RPLIDAR A1LDS-01に対応しています。
今回はLDS-01を使用します。

このブログ記事では開発時のマルチLiDARマウントを使用しています。そのため、キットの形状や付属品等は実際の製品と異なります
故障を防ぐため、ラズパイマウスから電源ケーブル・バッテリーを取り外し、自身の静電気を除去してから作業を始めてください。

マルチLiDARマウントオプションキットの組み付けに必要なもの

LDS-01のUSB変換基板を組み付ける

まず、LDS-01のUSB変換基板をLiDARマウントに組み付けます。

LDS-01のUSB変換基板を組み付ける①

写真のように、マウントの裏側にタッピングネジで固定します。

LDS-01のUSB変換基板を組み付ける②

LDS-01本体を組み付ける

続いて、LDS-01本体をLiDARマウントに組み付けます。
写真ではネジの種類が統一されていませんが、実際の製品では正しいネジが同封されているのでご安心ください。

LDS-01をマウントに組み付ける①

4箇所をネジで固定します。

LDS-01をマウントに組み付ける②

LDS-01を固定できたらUSBケーブルを接続します。

LDS-01にUSBケーブルを接続する

マルチLiDARマウントをラズパイマウスに組み付ける

最後にマウントをラズパイマウスに組み付けます。

マルチLiDARマウントをラズパイマウスに組み付ける①

まず、マウントのネジ穴がない方のツメをラズパイマウスの後側に引っ掛けます。

マウントをラズパイマウスに組み付ける②

続いて、マウントのネジ穴がある方のツメをラズパイマウスの前側に引っ掛けます。

写真のようにツメを引っ張り・・・

マウントをラズパイマウスに組み付ける③

引っ掛けます。

マウントをラズパイマウスに組み付ける④

タッピングネジで固定します。

マウントをラズパイマウスに組み付ける⑤

これで組み付け完了です。

マウントをラズパイマウスに組み付ける⑥

SLAMサンプルを実行する

それではSLAMサンプルを実行します。

実行手順はパッケージのREADMEにも書かれています。

まず、ラズパイマウス上でmouse_with_lidar.launch.pyを実行します。
実行すると、ラズパイマウスのノードとLDS-01のノードが起動します。

$ ros2 launch raspimouse_ros2_examples mouse_with_lidar.launch.py lidar:=lds

次に、ラズパイマウスを動かすためにjoystick_controlサンプルを実行します。

こちらは、ラズパイマウス、作業用PCのどちらで実行しても構いません。
今回は作業用PCでサンプルを実行します。

$ ros2 launch raspimouse_ros2_examples teleop_joy.launch.py joydev:="/dev/input/js0" joyconfig:=dualshock3 mouse:=true

最後にSLAMノードを起動します。
このサンプルで使用するのは、Slam Toolboxというパッケージです。

次のコマンドを作業用PCで実行します。
実行すると、Slam Toolboxのノードと、RVizが起動します。

$ ros2 launch raspimouse_ros2_examples slam.launch.py

これで準備が整いました。コントローラでラズパイマウスを動かすと、RViz上に地図が表示されます。

実際に動かしている風景を紹介したいのですが、私の自宅が見えてしまうので、代わりに次の動画をご覧ください。

1:37~ がマルチLiDARマウントとSLAM実行例の紹介です。

SLAMを成功させるための工夫

READMEの手順を実行しただけではSLAMが上手くいかないことがあります(自己位置推定がズレる、地図が崩れる等)。

その対策を紹介します。

走行速度を落とす

joystick_controlサンプルのデフォルトの走行速度は、SLAMをするには少し早いです。
走行速度を落としてみましょう。

走行速度の変更方法はサンプル集のREADMEを参照してください。
過去のブログ記事でも紹介しています。

パルスカウンタで自己位置を計算する

raspimouseノードは走行速度司令(cmd_velトピック)をもとに自己位置(odomトピック)を計算します。

ラズパイマウスの仕様上、cmd_velトピックがパブリッシュされても、ラズパイマウスがすぐに走り出さない場合があります。
このとき、ラズパイマウスは動いていなくても、raspimouseノードは「動いている」と判定するため、実際の位置とodomトピックは大きくズレます。

このズレを抑えるために、パルスカウンタを使用します。
パルスカウンタは、実際にモータへ送られたPWMパルス数をカウントするため、
より正確に自己位置を計算できます。

次のコマンドでラズパイマウス上のファイルを編集します。

$ cd ~/ros2_ws/src/raspimouse_ros2_examples/
$ vim config/mouse.yml 

use_pulse_counterstrueにしましょう。

raspimouse:
  ros__parameters:
    odometry_scale_left_wheel : 1.0
    odometry_scale_right_wheel: 1.0
    use_light_sensors         : true
    use_pulse_counters        : true

ノードを起動し直すとパルスカウンタが有効になります。

Slam Toolboxのパラメータを編集する

上記はラズパイマウスの設定でしたが、Slam Toolboxのノードにも設定可能なパラメータがたくさんあります。

次のコマンドで、Slam Toolboxのノードで使用されるパラメータを変更できます。

$ cd ~/ros2_ws/src/raspimouse_ros2_examples/
$ vim config/mapper_params_offline.yaml 

パラメータの詳細はSlam ToolboxのREADMEを参照してください。

その他

その他、SLAMサンプルに関する情報を紹介します。

LiDARのセンサ情報をRVizに表示する

ノードを起動した後、RVizのDisplaysにある、Global Options -> Fixed Framelaserにすると、LiDARのセンサ情報を表示できます。

RVizにLiDARのセンサ情報を表示する

地図とLiDARのセンサ情報を同時に表示したいのですが、RVizの不具合により(2020/08/17時点では)表示できません。

もう間もなくROS 2 Dashingにも修正版がアップロードされるようです。

URGとRPLiDARへの対応について

マルチLiDARマウントはURG-04LX-UG01とRPLIDAR A1にも対応していますが、(2020/08/17時点では)SLAMサンプルはLDS-01にしか対応していません
その理由は各センサのROS 2パッケージが無かったためです。

URGにはurg_nodeというROSパッケージが用意されています。
こちらはROS 2対応しているのですが、最近までメンテナンスされていない状態でした。

その後、パッケージのメンテナーが決まり、不具合も修正されました
後ほどROS2 サンプル集も更新したいと思います。

RPLiDARにはrplidar_rosというROSパッケージが用意されています。
こちらはROS 2に対応していません

しかし、RPLiDAR販売元のSlamtecのROS 2パッケージが無いだけで、
別の方が作成したROS 2対応パッケージはあります。

どうしてもROS 2でRPLiDARを動かしたい場合は、上記のパッケージを使うか、また別の方のパッケージを使うか、パッケージを自作することになると思います。

まとめ

今回は、

  • ラズパイマウスにマルチLiDARマウントを取り付けました
  • ラズパイマウスROS 2サンプル集のSLAMサンプルを実行しました
  • SLAMサンプルを実行するための工夫や問題点を紹介しました

次回は、新しく作成するROS 2サンプルの紹介か、ROS 2サンプル集のデバッグについて記述する予定です。

タイトルとURLをコピーしました