2輪走行ロボットを自作してみます。
で、その前にシミュレータを使ってどんな動きになるのか見てみます。
*FireFoxだと動画が見えないかもしれません、ChromeかEdgeをお使いください。
2輪走行ロボットの基本形はTurtleBot3のようです。TurtleBot3には2つの型があります。
こんな感じ。
ここではwaffleに似た2輪走行ロボットを想定します。名前はmy_robotにしときます。サイズはBot3よりやや小さめ。
はじめに
シミュレーション用ロボットの作成にはurdf、xacroファイルを使います。いろいろな記述の仕方があるようですが、ROBOTISのシミュレーションパッケージの以下のディレクトリにあるファイルを参考にします。(シミュレーションパッケージのインストールは4/5でやります)
/opt/ros/melodic/share/turtlebot3_description/urdf
参照するファイルは以下の3つで、2つ改名して使います。変更した各ファイルについては下記参照。
common_properties.xacro
turtlebot3_waffle.gazebo.xacro ー> my_robot.gazebo.xacro
turtlebot3_waffle.urdf.xacro ー> my_robot.urdf.xacro
urdfやxacroについてはここのサイトを参照。
作成するxacroはオリジナルとは違っている部分が多いですが、自分のロボット用に変更しながら試しています。
● common_properties.xacro
定数や変数、標準形状のイナーシャ (慣性モーメント) の計算式などを記述。
オリジナルには突然1.57という数字が現れて「なんのこと?」という感じになりますが、要は π/2 ということです。
ちなみに、標準形状じゃない場合のイナーシャの計算はInertial parameters of triangle meshesを参照。
● my_roboto.gazebo.xacro
パーツのGazeboへのrefrenceや、車輪やカメラ・LiDARなどを制御するPluginを記述
● my_robot.urdf.xacro
common_properties.xacroとmy_roboto.gazebo.xacroを読み込み、各種ロボットのパーツを統合します。
独自モデルでは、形をシンプルにしたいので標準形状であるboxやcylinder、sphereを使います。
LiDARやカメラはオリジナルにあるとおりのメッシュ(Triangle Mesh)ファイルを使ってみます。
こういうロボットです。
base_scan : lds (LiDAR) レーザー測距センサー
sbc : single board computer (Raspberry Pi / Jetson Nano) 制御用シングルボードコンピュータ
base : Dynamixel Moter , OpenCR , LIPO Battery , … モーター、マイコンボード、バッテリー…
caster_back : 後部のボール型補助輪
wheel : 車輪
各パーツの位置は車軸中心の床への投影面:base_footprint(赤丸)からパーツの重心への相対距離で取っています。
使用するプラットフォームはJetson Nano (Jetpack 4.6)
ROSはMelodic Morenia
環境構築に関しては以下をご参照ください。
Jetson Nano にROS1 (Melodic) をインストール(メモ)
事前準備
urdfに矛盾がないかチェックするツールやキーボードからPlugin経由でGazeboに表示されたロボットを制御するパッケージをインストールしておきます。
では、パッケージの作成から開始します。
ワークスペースにmy_robotパッケージを作成
依存パッケージはurdf、xacroの2つ。
LiDARモデルとカメラ(RealSense R200)はメッシュファイルを使います。ファイル形式はstlかdaeです。Wisteriahillは伝統的(?)に3D CADはSketchUpを使っているのでdae形式がメインです。SketchUpはBlenderやFusion360と同様に右手座標系のCADですので、作った形状はそのままexportしてurdfで使えます。ちなみに、UnityやUnreal Engine は左手です。
また、urdfは国際単位系なので作業する場合、メートル単位を使います。
SketchUpの場合
メッシュファイルは以下からダウンロードできます。
このlds(LiDAR)とR200を以下のフォルダーにコピーしておきます。
~/catkin_ws/src/my_robot/meshes
urdfディレクトリへ移動
ではxacroファイルを作っていきます。
● common_properties.xacro
円周率や基本形状のイナーシャ計算式、色(RGBとアルファ)の定義
ただし、この色はGazeboには反映されません。Gazebo表示時の色指定は下記のgazebo.xacroファイルのreferenceのmaterialで設定します。
以下を記述
● my_roboto.gazebo.xacro
laser、camera、imuのvisual設定
laserのvisualをtrueにするとlaserの照射が可視化されてどの範囲に届いているのか分かります。
色指定、摩擦係数(mu1、mu2)は適当に変更、WheelSeparation値も変更
Plugin
Gazebo で動力系、IMU、レーザー測距、深度カメラを制御します。
動力を伝える場合 (Transmission)、libgazebo_ros_control.soを使う例もありますが、TurtleBot3 のシミュレータは差動ドライブコントローラーのみをサポートするプラグイン(libgazebo_ros_diff_drive.so)を使っているようです。差動ドライブロボットでは、どちらか一方を使いますが、どちらも同じことをやってるそうです。参考
私見ですが、libgazebo_ros_controlはマニピュレータで使われている例が多いように感じます。
以下を記述
● my_robot.urdf.xacro
base_footprintをルートにして、各パーツのjoint、link(visual、collision、inertial)タグを必要に応じて記述します。
wheelの形状ははcylinderを使っています。cylinderはデフォルトで横になっている形状ですので、rpy(roll、pitch、yaw)のrollパラメータに値を指定して直立させます。
baseとsbcはbox、キャスタはsphereを使って単純化しています。
baseのmassの値value(質量:kg)は1.3kgにしています。TurtleBot3 のplateは結構重いようですのでこのくらいの値になっていますが、独自ロボットの実機はもう少し軽くなります。
以下を記述
作成したxacroファイルをurdfに展開してチェックします。
エラーが出なければOK。
Gazeboで動かしたいので、launchファイル作成
ディレクトリ移動
launchファイル作成
以下を記述
Gazeboに表示して動かしてみます。
Gazebo起動
キーボードで制御
別ターミナルでteleoperation起動
このターミナルは常に前面でフォーカスしておきます。
i(I)キーで前進、
u,o (U,O)キーで旋回、
j,l (J,L)キーで回転、
, (<) キーで後退、
k (k) キーで停止
車輪の形状を変えてみる
上記では車輪は単純化してCylinder を使っていましたが、これだと回転しているのが分かりません。
で、片側の車輪を形状が分かるdaeファイルで置き換えてみると回転しているのが確認できます。
こんな感じです。
Appendix
Gazebo 表示時の色指定
material Gazebo/Grey
material Gazebo/Gray : Gazebo/Grey
material Gazebo/DarkGrey
material Gazebo/DarkGray : Gazebo/DarkGrey
material Gazebo/White
material Gazebo/FlatBlack
material Gazebo/Black
material Gazebo/Red
material Gazebo/RedBright
material Gazebo/Green
material Gazebo/Blue
material Gazebo/SkyBlue
material Gazebo/Yellow
material Gazebo/ZincYellow
material Gazebo/DarkYellow
material Gazebo/Purple
material Gazebo/Turquoise
material Gazebo/Orange
material Gazebo/Indigo
material Gazebo/WhiteGlow : Gazebo/White
material Gazebo/RedGlow
material Gazebo/GreenGlow : Gazebo/Green
material Gazebo/BlueGlow : Gazebo/Blue
material Gazebo/YellowGlow : Gazebo/Yellow
material Gazebo/PurpleGlow : Gazebo/Purple
material Gazebo/TurquoiseGlow : Gazebo/Turquoise
material Gazebo/TurquoiseGlowOutline
material Gazebo/RedTransparentOverlay
material Gazebo/BlueTransparentOverlay
material Gazebo/GreenTransparentOverlay
material Gazebo/OrangeTransparentOverlay
material Gazebo/DarkOrangeTransparentOverlay
material Gazebo/RedTransparent
material Gazebo/GreenTransparent
material Gazebo/BlueTransparent
material Gazebo/DarkMagentaTransparent
material Gazebo/GreyTransparent
material Gazebo/BlackTransparent
material Gazebo/YellowTransparent
material Gazebo/LightOn
material Gazebo/LightOff
material Gazebo/LightBlueLaser
material Gazebo/BlueLaser
material Gazebo/OrangeTransparent
Leave a Reply