AbudoriLab.

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

Lidar SLAMで地図作成 - 自作のロボットモデルをgazeboにインポート -

AbudoriLabです。
SLAMで地図を作ってみたシリーズの第3回目の記事になります。
前回は実物のLidarを用いて地図を作成してみました。
www.abudorilab.com
今回は自作したロボットモデルをgazeboにインポートする方法についてまとめます。
自作モデルをgazeboにインポートできるようになると、SLAMや自律移動の研究・開発にシミュレーションを活用することができます。

自作ロボット「Lapin」の紹介

AbudoriLabでは自律移動に関わる技術の研究,実験や教育のため、誰でも入手できるようAmazonなどの大手ショップで購入できる商品かつ低コストで作成できる室内用小型3輪ロボットを作成しました。

f:id:nekoze-nya:20211225193834p:plain
Lapin

LapinはRPLidarを搭載し、地図作成や自己位置を把握することができます。
地図作成ではSLAMを用いて、自己位置推定では地図とLidarのscan情報やホイールオドメトリを入力としたscanマッチング技法を用います。
今後はカメラを取り付けることで、画像認識技術を駆使した追従機能など高度なタスク処理の実現も計画しています。

gazeboでシミュレーション

gazeboはROSでのロボット開発において一般的に利用され、動作検証ができる3Dモデルのシミュレータであり、ROS・ROS2で使用できます。
gazeboのインストール方法については、AbudoriLabの開発で必要パッケージのインストール方法をご紹介した別の記事でまとめています。
www.abudorilab.com

ロボットモデルの作成

AbudoriLabではロボットを自作するにあたり、設計ツールのFusion360を使用しています。
設計したモデルをgazeboへインポートするためには、データフォーマット変換の必要があります。
こちらの方法については別記事でまとめる予定です。
本記事ではその後の手続きについてご紹介します。

Lapinをgazeboへインポート

1からパッケージを作成せず、簡単のためROBOTISが公開するturtlebot3のパッケージにLapinモデルを追加します。

準備

まずは、Lapinをgazeboにインポートして自律移動させる準備として環境を整えます。
1. 作業用フォルダーの作成
初めに、ローカルに本作業用のフォルダーを作成します。
※ 保存場所は各自お任せします。

mkdir lapinSim_ws
cd lapinSim_ws
mkdir src

2. turtlebot3 packageのダウンロード
gazeboの利用が初めての方は事前に必要パッケージをインストールしてください。

curl -sSL http://get.gazebosim.org | sh
sudo apt install libgazebo9-dev
sudo apt install ros-dashing-gazebo-*

turtlebot3パッケージのダウンロードを開始します。
下記コマンドを実行して、.reposファイルをダウンロードします。

wget https://raw.githubusercontent.com/ROBOTIS-GIT/turtlebot3/ros2/turtlebot3.repos

.reposファイルには必要なパッケージ情報などがまとめられ、VCSTOOLを使用してそれらを一度にインポートできます。
f:id:nekoze-nya:20220115163919p:plain

VSCTOOLは下記コマンドの実行でダウンロードできます。

sudo apt install python3-vcstool

次に、下図の赤線箇所を各自のROS2環境にあったブランチ名に修正してください。
修正なしでは現時点(2021/12/27)の最新版ROS2 foxyに適したパッケージをインポートできます。
f:id:nekoze-nya:20211230215754p:plain

ブランチ名はurl先のサイトから見つけることができます。
f:id:nekoze-nya:20211230221530p:plain

最後に、下記コマンドを実行してインポートできたら完了です。

vcs import src < turtlebot3.repos

3. gazeboでturtlebot3を表示
ダウンロードしたパッケージをビルドしてturtlebot3をgazeboで表示させてみます。

colcon build --symlink-install

Dynamixel_sdkが見当たらずエラーが起きる場合があります。
そのときは下記コマンドでインストールした後に再ビルドしてください。

sudo apt install ros-dashing-dynamixel-sdk

※筆者の場合、ビルド中に原因不明のエラーを発生しましたが再度ビルドで成功しました。

4. gazeboの起動
gazeboにturtlebo3 burgerが亀の形をしたマップ上に表示されたら、自作モデルをgazeboにインポートする準備が完了します。

cd ~/lapinSim_ws/install
source setup.bash
export GAZEBO_MODEL_PATH=./lapinSim_ws/install/turtlebot3_gazebo/share/turtlebot3_gazebo/models
export ROS_DOMAIN_ID=30
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
f:id:nekoze-nya:20211230144024p:plain
turtlebot burger

Lapinモデルをgazeboにインポート

本題の自作モデルをインポートする方法についてご紹介します。
Fusion360で自作したモデルはgazeboで読み込めるデータフォーマットに変換してください。
Lapinのモデルは下記リンクからダウンロードできます。
drive.google.com
※ライセンスは今のところはApache License 2.0としています。

フォルダー内にはurdf,stl,sdfなどがあり、これらはFusion360から取得できます。
各ファイルの役割を簡単にまとめると下記の通りです。
【URDF】
ロボットの3D形状,可動範囲や物理特性などが記録され、ROSでロボットの姿勢情報として利用します
STL
ロボット各パーツのメッシュ(デザイン)やテクスチャ情報が記録され、gazeboやrviz2で3次元モデルを可視化するために利用します。
【SDF】
こちらもロボットの情報などが記録されており、Gazeboでシミュレートするために使用します
【model】
gazeboを起動させたときのロボットの初期配置や環境設定情報が記述されています

それぞれのファイルの保存先を示します。

保存先: src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/models

  • ファイル: worlds/lapin.model

保存先: src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/worlds/turtlebot3_worlds

  • ファイル: turtlebot3_lapin.urdf

保存先: src/turtlebot3/turtlebot3/turtlebot3_description/urdf
プログラムを流用しているため、urdfは接頭詞にturtlebot3をつける必要があります。
どうしても接頭詞を付けたくない方は、プログラムの修正をお願いします。

  • ファイル: lapin/mesh/gen1_robot_urdf_1_v4.stl

保存先: src/turtlebot3/turtlebot3/turtlebot3_description/meshes/bases/lapin

  • ファイル: lapin/mesh/RPLiDER_A1M8_v3.stl

保存先: src/turtlebot3/turtlebot3/turtlebot3_description/meshes/sensors/lapin

  • ファイル: lapin/mesh/420G-R_38_2_v2.stl, 420G-R_38_3_v2.stl, gen1_robot_urdf_2_v2.stl

保存先: src/turtlebot3/turtlebot3/turtlebot3_description/meshes/wheels/lapin

再度ビルドします。

cd ~/lapinSim_ws
colcon build --symlink-install

次に、burgerを表示させたときと同し流れでgazeboを起動させます。
ただ、ターミナルを開く度にたくさんのコマンドを入力するのも面倒なので環境変数は.bashrcに定義しましょう。

gedit ~/.bashrc

bashrcが開いたらファイルの一番下に下記コマンドをコピペし、保存して閉じて下さい。

export GAZEBO_MODEL_PATH=./lapinSim_ws/install/turtlebot3_gazebo/share/turtlebot3_gazebo/models
export ROS_DOMAIN_ID=30 #TURTLEBOT3
source ~/lapinSim_ws/install/setup.bash

下記コマンドを実行するとlapinを表示されるはずです。

source ~/.bashrc
export TURTLEBOT3_MODEL=lapin
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

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

最後に

自作したモデルを使ってシミュレーションさせたい方がたくさんいるのでは?と思い、インポート方法についてご紹介しました。
SLAMや自律移動の動作検証でシュミレーターが使えると効率が向上します。
次回はシミュレータを使ってlapinで地図作成/自律移動させる方法についてご紹介します。

余談ですが、実をいうとFusion360から取得したモデルをgazeboへ読み込むためにはパーツ名や参照先など修正が必要になります。
情報多価なので説明は省きましたが、別シリーズで執筆しているFusion360で自作ロボット製作にてまとめていきます(執筆中)。
他にもFusion360の使い方など簡単な題材を用いて紹介しているので、ご興味持たれた方は是非ご覧いただけますと幸いです。
www.abudorilab.com