ROS:自作のロボットを自作の仮想空間でナビゲーションしてみる(1/5)ロボットを作成して動かしてみる


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.xacromy_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) のdae

RealSense R200のdae,jpg

この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の照射が可視化されてどの範囲に届いているのか分かります。


各パーツのreference

色指定、摩擦係数(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ファイルで置き換えてみると回転しているのが確認できます。

こんな感じです。

 

wheel サンプル

 

 


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

 

戻る

 


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*