AbudoriLabです。
SLAMで地図を作ってみたシリーズの第3回目の記事になります。
前回は実物のLidarを用いて地図を作成してみました。
www.abudorilab.com
今回は自作したロボットモデルをgazeboにインポートする方法についてまとめます。
自作モデルをgazeboにインポートできるようになると、SLAMや自律移動の研究・開発にシミュレーションを活用することができます。
自作ロボット「Lapin」の紹介
AbudoriLabでは自律移動に関わる技術の研究,実験や教育のため、誰でも入手できるようAmazonなどの大手ショップで購入できる商品かつ低コストで作成できる室内用小型3輪ロボットを作成しました。
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を使用してそれらを一度にインポートできます。
VSCTOOLは下記コマンドの実行でダウンロードできます。
sudo apt install python3-vcstool
次に、下図の赤線箇所を各自のROS2環境にあったブランチ名に修正してください。
修正なしでは現時点(2021/12/27)の最新版ROS2 foxyに適したパッケージをインポートできます。
ブランチ名はurl先のサイトから見つけることができます。
最後に、下記コマンドを実行してインポートできたら完了です。
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
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を起動させたときのロボットの初期配置や環境設定情報が記述されています
それぞれのファイルの保存先を示します。
- フォルダ: lapin
保存先: 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をつける必要があります。
どうしても接頭詞を付けたくない方は、プログラムの修正をお願いします。
保存先: src/turtlebot3/turtlebot3/turtlebot3_description/meshes/bases/lapin
保存先: src/turtlebot3/turtlebot3/turtlebot3_description/meshes/sensors/lapin
保存先: 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
最後に
自作したモデルを使ってシミュレーションさせたい方がたくさんいるのでは?と思い、インポート方法についてご紹介しました。
SLAMや自律移動の動作検証でシュミレーターが使えると効率が向上します。
次回はシミュレータを使ってlapinで地図作成/自律移動させる方法についてご紹介します。
余談ですが、実をいうとFusion360から取得したモデルをgazeboへ読み込むためにはパーツ名や参照先など修正が必要になります。
情報多価なので説明は省きましたが、別シリーズで執筆しているFusion360で自作ロボット製作にてまとめていきます(執筆中)。
他にもFusion360の使い方など簡単な題材を用いて紹介しているので、ご興味持たれた方は是非ご覧いただけますと幸いです。
www.abudorilab.com