最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Gazebo でのオブジェクトの追加、作成、および削除

この例では、MATLAB® からの Gazebo® シミュレーターの操作についてさらに詳しく調べます。トピックには、シンプルなモデルの作成、モデルへのリンクとジョイントの追加、複数のモデルの接続、およびボディへの力の適用が含まれます。

必要条件: Gazebo およびシミュレートされた TurtleBot の入門Gazebo からのモデルおよびシミュレーションの特性の読み取り

Gazebo® への接続

Linux® マシンで Gazebo を起動します。Gazebo およびシミュレートされた TurtleBot の入門の仮想マシンを使用する場合は、Gazebo Empty ワールドを使用します。

ipaddress を仮想マシンの IP アドレスに置き換えて、ROS を初期化します。ExampleHelperGazeboCommunicator クラスのインスタンスを作成します。

ipaddress = '192.168.203.129';
rosinit(ipaddress)
Initializing global node /matlab_global_node_57411 with NodeURI http://192.168.203.1:55160/
gazebo = ExampleHelperGazeboCommunicator;

シンプルな球の発生

モデルを作成するには、ExampleHelperGazeboModel クラスを使用します。以下のコードでボールが作成されます。プロパティを定義し (addLink を使用)、関数 spawnModel を使用してボールを発生させます。

ball = ExampleHelperGazeboModel('Ball')
ball = 
  ExampleHelperGazeboModel with properties:

        Name: 'Ball'
    ModelObj: [1×1 org.apache.xerces.dom.DocumentImpl]
       Links: []
      Joints: []

spherelink = addLink(ball,'sphere',1,'color',[0 0 1 1])
spherelink = 
'link0'
spawnModel(gazebo,ball,[8.5,0,1])

Gazebo のコマンドの単位はすべて、SI 単位で指定されます。ボールは [8.5, 0, 1] にあるため、表示によってはボールを確認するためにズーム アウトしなければならないことがあります。以下にシーンのイメージを示します。

ボーリング ピンの作成と発生

ボーリング ピンの位置を表すベクトル x および y (m 単位) を作成します。

x = [1.5    1.5    1.5   1.5   2.5     2.5  2.5    3.5    3.5   4.5];
y = [-1.5  -0.5    0.5   1.5   -1      0    1     -0.5    0.5   0];

ExampleHelperGazeboModel オブジェクトを使用して、ボーリング ピンの基本モデルを定義します。addLink を使用して円柱とボールを作成します。

pin = ExampleHelperGazeboModel('BowlPin');

link1 = addLink(pin,'cylinder',[1 0.2],'position',[0,0,0.5]);
link2 = addLink(pin,'sphere',0.2,'position',[0,0, 1.2],'color',[0.7 0 0.2 1]);

addLink の出力は、割り当てられたリンク名を含む変数です。これらの変数によりジョイントを作成します。

addJoint を使用して、2 つのリンク間の関係を定義します。この場合は、回転ジョイントによって繋がれています。

joint = addJoint(pin,link1,link2,'revolute',[0 0],[0 0 1]);

関数 addJoint の引数はオブジェクト、親、子、タイプ、範囲、および軸です。

bowlPin を一度定義した後、前述の ExampleHelperGazeboModel から 10 本すべてのボーリング ピンを作成できます。次の for ループは、ベクトル x および y を使用して Gazebo 内にモデルを発生させます。

for i = 1:10    
    spawnModel(gazebo,pin,[x(i),y(i),0.7]);
    pause(1);
end

ピンをワールドに追加すると、次の図のようになります。

モデルの削除

TurtleBot® がシーンに存在している場合は削除します。モデルのリストを調べます。mobile_base という名前のモデルを削除します。

if ismember('mobile_base',getSpawnedModels(gazebo))
    removeModel(gazebo,'mobile_base');
end

組み込みモデルの発生

ジャージー バリア (防護ブロック) の ExampleHelperGazeboModel を作成します。オブジェクトはこのモデルを Gazebo Web サイトで見つけます。

barrier = ExampleHelperGazeboModel('jersey_barrier','gazeboDB');

spawnModel を使用して、2 つのジャージー バリアをワールド内に発生させます。

spawnModel(gazebo,barrier,[1.5,-3,0]); % Right barrier
pause(1);
spawnModel(gazebo,barrier,[1.5,3,0]); % Left barrier

メモ: これらの例に含まれていないモデルを発生させるには、インターネット接続が必要です。ただし、以前に Gazebo シミュレーションでモデルを発生させている場合、モデルはキャッシュされるため、インターネット接続がなくても後で発生させることができます。

シーンは次の図のようになります。

ボールへの力の適用

ExampleHelperGazeboSpawnedModel クラスを使ってボールのハンドルを取得します。

spawnedBall = ExampleHelperGazeboSpawnedModel(ball.Name,gazebo)
spawnedBall = 
  ExampleHelperGazeboSpawnedModel with properties:

      Name: 'Ball'
     Links: {'link0'}
    Joints: {0×1 cell}

力を適用するためのパラメーターを定義します。ここでは期間を 1 秒に設定し、力のベクトルを x 方向へ -75 N に設定します。

duration = 1; % Seconds
forcevec = [-75 0 0]; % Newtons

関数 applyForce を使用して、モデルに力を適用します。

applyForce(spawnedBall, spherelink, duration, forcevec);
pause(5);

以下に、衝突とその結果のイメージを示します。

モデルの削除とシャットダウン

クリーンアップするために、この例で作成したモデルを削除します。

exampleHelperGazeboCleanupBowling;

作業が終了したら、パブリッシャー、サブスクライバー、およびその他 ROS 関連のオブジェクトをワークスペースからクリアします。

clear

ROS ネットワークでの作業が完了したら、rosshutdown を使用します。グローバル ノードをシャットダウンして Gazebo から切断します。

  rosshutdown
Shutting down global node /matlab_global_node_57411 with NodeURI http://192.168.203.1:55160/

完了したら、仮想マシンの Gazebo ウィンドウを閉じます。

参考