ルンバで地図をつくってみました #1 (おおたfab 第49回 素人でもロボットをつくりたい)

Roomba

おおたfabさんでは、「素人でもロボットをつくりたい」という勉強会を定期的に行っています。前回はオドメトリ情報を使ってルンバ実機を動かしてみましたが、今回は新たにLiDARを使って地図の作成にチャレンジしてみます。

real_roomba_rplidar_photo1.jpg

今回もdemura.netさんの記事を参考にして進めています。

Gazeboシミュレーターで地図を作ってみる

みなさんGazeboシミュレータにも慣れてきて、参考サイトの手順通りに操作を行うことができました。

地図の作成はキーボードでGazeboシミュレーターのルンバを動かすことで、シミュレーター搭載のLiDARの情報をもとに地図を作っていきます。ルンバを壁にぶつけてしまうと地図が乱れてしまうので、慎重に動かしていきます。

gazebo_map_rviz_image1.png

大体まわったところで、地図情報を保存します。モノクロ画像の形式であるpgmファイルと情報が含まれているyamlファイルが出力されます。pgmファイルを画像ビューアーで開くとこのような表示になりました。

gazebo_map_sample1.png

きれいに地図ができました。

Gazeboシミュレーターで自律走行をしてみる

次はシミュレーターで自律走行をしてみます。先ほど作成した地図を使うこともできるのですが、参考サイトの手順通りに操作を行い、ゴールの地点までルンバが自動的に動くことを確認しました。

ルンバ実機で地図を作ってみる

シミュレーターで地図を作ることができたので、ルンバ実機と手持ちのLiDAR(RPLiDAR A1M8)で同様のことができないか実験をしてみました。探してみたところdemura.netさんの以下の記事を見つけました。

しかし、この記事はROS Melodicではなく、ROS kineticで、LiDARもHokuyo Lidar(UTM-30 LX)という異なる構成です。しかし、流れは同じと考えて手順を起こしました。

またROSのオフィシャルサイトでも同様の手順が掲載されています。

  1. 以下を参考にROSとcreate_autonomyをインストールしたRaspberry Pi 4(4GB)環境を準備する。
    https://github.com/docofab/RoombaControlls/blob/main/ROS/instructions/setup-gazebo-rasppi.md
  2. Navigation & SLAM のインストール(もう入っているかも)
    $ sudo apt install ros-melodic-navigation
    $ sudo apt install ros-melodic-slam-gmapping
  3. 新しいRPLIDAR ROS パッケージに置き換えたいので ros-melodic-rplidar-ros がインストールされていたらアンインストールする。
    $ sudo apt remove ros-melodic-rplidar-ros
  4. RPLIDAR ROS パッケージ rplidar_rosをクローンする。
    $ cd ~/catkin_ws/src
    $ git clone https://github.com/Slamtec/rplidar_ros.git
    $ catkin build rplidar_ros
    $ source ~/.bashrc
  5. 新しいターミナルを開き、ルンバ実機のドライバを実行する
    $ roslaunch ca_driver create_2.launch
  6. 新しいターミナルを開き、ルンバをキーボードで操作できるようにする。
    $ roslaunch ca_tools keyboard_teleop.launch
  7. 新しいターミナルを開き、RPLiDARのノードを起動する。
    $ roslaunch rplidar_ros rplidar.launch
  8. 新しいターミナルを開き、全Topicデータを記録する
    $ mkdir -p ~/bag
    $ cd ~/bag
    $ rosbag record -a
  9. 6.のターミナルでキーボードを操作してロボットを動かし地図生成のためのデータを取得する。
  10. 取得が終わったら、忘れずに、Ctrl-Cでrosbagを止める。
  11. bagファイルを使って地図生成するための設定をする。
    $ rosparam set use_sim_time true
  12. SLAMを実行します。
    $ rosrun gmapping slam_gmapping
  13. 取得したtopicの再生
    $ rosbag play –clock “bagファイル名”
  14. topicの再生が終了してから以下のコマンドを実行する。
    $ mkdir -p ~/map
    $ cd ~/map
    $ rosrun map_server map_saver
  15. ~/mapディレクトリにmap.pgmとmap.yamlが生成される。

ルンバ実機+LiDARで地図データを取得している様子です。

実際に取得できた地図はこのようなものになりました。

real_roomba_slam_map1.png

思ったような地図は取れておらずもう少し確認が必要のようです。今回の実験では全Topicデータを取得しているので、LiDARのデータをRvizで確認したところ、scanトピックスはきちんととれているようにみえます。ルンバが回転するとレーザーが反射している赤い点も回転しているのがわかります。(少し見にくいですが)

他の部分で問題ないか、Topicsデータの内容の確認を進めてみます。

次回の予定

ルンバ実機での地図作成に再チャレンジしてみます。地図作成がうまくできれば自律走行にも少し近づきます。お楽しみに。

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