グローサ形状と路面摩擦を陽に考慮したクローラの実時間シミュレーション～Gazeboプラグイン開発のベストプラクティスとして～
岡田佳都（理研AIPセンター／東北大学）

ROSCon JP 20191

Part 1:

グローサ付クローラの実時間Gazeboシミュレーション

ROSCon JP 20192

なぜクローラのシミュレーション？

Quince ©東北大田所研©liberation.fr

PackBot 510 ©army.mil

youtube.com/watch?v=0VPXlM5KZRQ

多種多様な環境を開発段階で実際に用意するのは不可能
実時間で高精度なシミュレーションによる事前検証・仮想試験・操縦訓練・データセット生成
ROSCon JP 20193

なぜクローラのシミュレーション？

@東北大田所研@liberation.fr@army.mil

youtube.com/watch?v=0VPXlM5KZRQ

今回の対象：非変形クローラ（路面に凹凸があっても軌道が大きく変形しない）

ROSCon JP 2019

4

発表内容
グローサ形状・摩擦を考慮したクローラの実時間シミュレーション

応用

任意軌道を周回する任意形状のシミュ

ROSCon JP 20195

シミュレーションの流れとポイント
流れ

重要なのは…

路面とクローラの接触点検出

グローサを考慮した
正確な接触点検出

その点で…

多車輪手法

接触点における拘束条件の設定

路面との摩擦を考慮した拘束設定

速度拘束手法拘束を満たす挙動を計算

関節が少ない方が計算が高速

多関節手法

ROSCon JP 2019

速度拘束手法[Pecka+,2017]6

提案手法：1セグメント=1関節■ 任意軌道をサポート■ 任意グローサ形状をサポート■ 小判型軌道なら4関節で表現（スライダx2，回転x2）
ROSCon JP 20197

提案手法：グローサ1つ分進んだら戻す■ 戻すことで，軌道の歪みを防ぎつつグローサの流れを実質的に維持■ ステップ間（=時間が止まっている間）に行う
ROSCon JP 20198

優位点の整理
流れ重要なのは…

路面とクローラの接触点検出

グローサを考慮した
正確な接触点検出

接触点における拘束条件の設定

路面との摩擦を考慮した拘束設定

拘束を満たす挙動を計算

関節が少ない方が計算が高速
ROSCon JP 2019

その点で…

提案手法

提案手法

提案手法

グローサが実際に周回

物理エンジンが摩擦拘束設定

少ない関節でクローラを表現
9Realtime Factor 実測
1.0以上なら実時間

*0.54

1.79

2.79
提案手法

多車輪(13輪)

多関節手法(10cm毎)
遅い
ROSCon JP 20194.86
多車輪(4輪)*5.93
速度拘束手法
速い■ PackBot 510 (サブクローラ無し)■ 並進速度0.3m/sで平地直進■ シミュステップ時間 1ms■ Gazebo7.16 on Ubuntu16.04■ i7 (2.50GHz x4) & 8GB RAM■ *は [Pecka+,2017] より推定
10

実機との挙動比較■ Quince (台形グローサ)■ 並進速度0.1m/s■ シミュステップ時間 1ms■ Gazebo7.16 on Ubuntu16.04■ i7 (2.50GHz x4) & 8GB RAM

摩擦力が足りず滑る

グローサで段差を捉える

ROSCon JP 201911

パッケージ情報
yoshito-n-students/gazebo_continuous_trackyoshito-n-students/gazebo_continuous_track_example■ ROSパッケージとして実装■ Gazebo7と9で動作確認済み■ 物理エンジンはODEのみサポート■ 小判型軌道なら10行で書けるマクロ有り

ROSCon JP 201912

Part 2:

Gazeboを使った開発のベストプラクティス

ROSCon JP 201913

シミュ/実機 両対応のWorkspace例

gazebosim.org/tutorials/?tut=ros_control
ROSCon JP 201914

シミュ/実機 両対応のWorkspace例【シミュ専用】【実機専用】

XXX_gazebo- gazeboのplugin設定- .worldファイル

XXX_drivers- センサやモータのドライバのメタpkg【シミュ/実機共通】
XXX_description- 実在関節・リンクを記述したurdf
XXX_control- ros_controlのcontroller設定
gazebosim.org/tutorials/?tut=ros_control
ROSCon JP 201915

複数ロボを連結
JointのChild linkに他modelのlinkを指定できることを利用

twitter.com/nksj71<model name=“coupler”><link name=“link”>…
</link><joint name=“to_spot” type=“fixed“><parent>link</parent><child>spot::body</child></joint><joint name=“to_papper” type=“fixed”><parent>link</parent><child>papper::body</child></joint></model>

ROSCon JP 2019

16

バグ回避
ROSに付属するGazeboを，OSRFの最新版に更新するのがよい
OSRFのaptリポジトリを登録
sudo sh -c ‘echo “deb http://packages.osrfoundation.org/gazebo/ubuntu-stable`lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'

aptのkeyを追加
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -Gazeboを更新
sudo apt-get update
sudo apt-get upgrade
参考: gazebosim.org/tutorials?cat=install&tut=install_ubuntu
ROSCon JP 201917

それでも残るバグ
Issue #2111 (Gazebo7のみ)

Joint::SetPosition() を呼ぶと子リンクの速度がリセットされる→直近のアップデートで解消

Issue #2626

リンクを削除するとそのリンクに繋がっていない無関係のジョイントも削除されるIssue #2627

リンクを削除した後親モデルの記述(sdf)を取得すると落ちる…
参考: bitbucket.org/osrf/gazebo/issues/

blog.y-modify.org/en/2018/05/04/gazebo-gravity-bug/『だから使わない』ではなく『使って良くしよう』の精神で！(ROS2&ign-gazeboもね)
ROSCon JP 201918

ありがとうございました！

ROSCon JP 201919