AbudoriLab.

自律ロボットで誰でも遊べるよう試行錯誤するブログです。

Lidar SLAMで地図作成 - 自作ロボットの自律移動シミュレーション -

AbudoriLabです。
SLAMで地図を作ってみたシリーズの第4回目の記事になります。
前回は自作したロボットモデルをgazeboにインポートする方法についてご紹介しました。
www.abudorilab.com
本稿では前回のgazeboにインポートした自作のロボットモデルを使って、自律移動させるシミュレーション方法についてまとめていきます。

LapinとLidar SLAMで地図作成

早速、Lapinを使って地図を作成していきます。
手順や実行方法は以下の過去の記事でもご紹介していますが、異なるパッケージを使用するためにSLAMや自律移動させるコマンドが異なります。
具体的には地図作成に必要なパッケージを取得した後、cartographerを実行するコマンドや自律移動を実行するコマンドになります。
www.abudorilab.com

準備

初めに、Lapinを使って地図作成ができるようにいくつかのファイルを修正します。

1. Luaファイル
luaファイルにはcartographerに必要なパラメータが定義おり、下図に修正する箇所と内容を明記します。
【ファイル名】turtlebot3_lds_2d.lua
保存場所: lapinSim_ws/src/turtlebot3/turtlebot3/turtlebot3_cartographer/config

f:id:nekoze-nya:20220102180131p:plain
luaファイル

2. rvizのconfigファイル
絶対に必要な修正ではないですが、せっかくなのでrvizでもlapinが可視化されるようにします。
【ファイル名】tb3_cartographer.rviz
保存場所: lapinSim_ws/src/turtlebot3/turtlebot3/turtlebot3_cartographer/rviz
46行目あたりのValueの後に画像で示す内容を追加してください。

f:id:nekoze-nya:20220209212530p:plain
rvizファイル

再ビルド
修正を終えたら必ず実施してください。

cd ~/lapinSim_ws
colcon build --symlink-install

Lidar SLAMで地図作成

準備が整ったので、lapinを操作して地図作成を開始します。
ここからは複数のターミナルを使用します。
ターミナルはCtrl + Alt + Tで開くことができます。

手順-1 gazeboの起動 - ターミナル1
export TURTLEBOT3_MODEL=lapin
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

f:id:nekoze-nya:20220110203427p:plain

手順-2 cartographerの実行 - ターミナル3
ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True

スキャン情報,地図の作成状況,lapinのモデルなどがrvizで描画されます。
f:id:nekoze-nya:20220129234729p:plain

手順-3 lapinをキーボード操作して地図作成 - ターミナル2
ros2 param set /gazebo use_sim_time True
ros2 run turtlebot3_teleop teleop_keyboard

teleopのソースコードでロボットのspecに合わせて最大速度などを設定するとリアルに近いシミュレーションが可能になります。
保存場所: lapinSim_ws/src/turtlebot3/turtlebot3/turtlebot3_teleop/turtlebot3_teleop/script/teleop_keyboard.py

ターミナルに進行方向,速度の増減をコマンドで指示して、ロボットを操作しながら下図のように地図を完成させてください。
f:id:nekoze-nya:20220129234921p:plain

手順-4 地図の保存 - ターミナル4

地図作成ができたら、最後に保存して完了です。

source /opt/ros/dashing/local_setup.bash
ros2 run nav2_map_server map_saver -f ~/[保存先を指定]/[名前]

※[名前]に拡張子の記入は不要です。
指定したフォルダに地図が保存されたことを確認できたら地図作成は完了です。

lapinで自律移動シミュレーション

Lidar SLAMで作成した地図を使って、lapinの自律移動シミュレーションを実施します。
同じ手順で個人の自作ロボットでも実行できるようになるはずです。

準備

lapinで自律移動をシミュレートするためには下記ファイルの修正が必要になります。

  • 1. yamlファイル

navigation2のpluginやパラメータを定義したyamlファイルをlapin用に作成します。
burger.yamlをコピーして、名前をlapin.yamlとしてください。
保存場所: lapinSim_ws/src/turtlebot3/turtlebot3/turtlebot3_navigation2/param
今回はburgerのパラメータを流用しますが、本格的な動作検証を行う際にはパラメータチューニングを実施してください。

  • 2. launchファイル

デフォルトではrvizの設定ファイルが別パッケージのファイルを参照するよう設定されています。
そのため、本パッケージのrvizファイルを参照できるように修正します。
【ファイル名】 navigation2.launch.py
保存場所: lapinSim_ws/src/turtlebot3/turtlebot3/turtlebot3_navigation2/launch
49~52行目のrivzファイルの保存場所を検索する箇所を下記のように変更します。

 rviz_config_dir = os.path.join(
        get_package_share_directory('turtlebot3_navigation2'),
        'rviz',
        'tb3_navigation2.rviz')
  • 再ビルド

修正を終えたら必ず実施してください。

cd ~/lapinSim_ws
colcon build --symlink-install

自律移動シミュレーション

準備が整ったので、lapinで自律移動をシミュレートします。

手順-1 gazeboの起動 - ターミナル1
export TURTLEBOT3_MODEL=lapin
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
手順-2 自律移動の開始 - ターミナル2

せっかくなので、今回作成した地図を使用します。
※ ROBOTISが準備した地図で十分であれば、引数:mapは削除してください。
同じ亀の環境の地図なので、どちらを使っても支障ありません。

export TURTLEBOT3_MODEL=lapin
ros2 launch turtlebot3_navigation2 navigation2.launch.py map:=/file/to/path/FileName.yaml

rvizに地図が表示されます。
f:id:nekoze-nya:20220130141511p:plain

手順-3 初期位置と向きの指定

rviz2上でLapinの位置と向きをシステムに教示します。
メニューバーの"2D Pose Estimate"を選択し、地図上でロボットの位置をクリックします。
クリックしたままロボットが向いている方向にマウスを動かして矢印が伸びたところで離します。
f:id:nekoze-nya:20210810175008p:plain

手順-4 自律移動を実行

rviz2上でゴール地点とその時のロボットが向いてほしい方向をシステムに教示します。
メニューバーのNavigation2 Goalを選択し、手順-3と同じやり方で目的地を設定します。
すると、rviz2,gazeboの両方でロボット自身が行動計画して目的点まで自律移動する経過を観察できます。
f:id:nekoze-nya:20210810175222p:plain

これでTurtlebotと同じく自作ロボットでも自律移動のシミュレーションが可能になりました。

終わりに

既存の機能を用いて地図作成や自律移動が自作ロボットを用いて実現できたので、オリジナルに設計した機能の検証にシミュレーションを活用できます。
次回は、実機とシミュレーションを連携させて実際にlapinをリアルな環境で目的地まで自律移動させてみたいと思います。