Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

ABB YuMi ロボットの軌跡の対話的な作成

この例では、interactiveRigidBodyTreeオブジェクトを使用してロボットを動かし、軌跡を設計して、再生する方法を説明します。

ロボットの読み込み、可視化および環境の作成

'abbYumi' ロボット モデルを読み込みます。interactiveRigidBodyTree を使用して対話型 Figure を初期化します。現在の座標軸を保存します。

robot = loadrobot('abbYumi', 'Gravity', [0 0 -9.81]);
iviz = interactiveRigidBodyTree(robot);
ax = gca;

床、目標物の置かれた 2 つの棚、および中央のテーブルを表す衝突ボックスからなる環境を作成します。

plane = collisionBox(1.5,1.5,0.05);
plane.Pose = trvec2tform([0.25 0 -0.025]);
show(plane,'Parent', ax);

leftShelf = collisionBox(0.25,0.1,0.2);
leftShelf.Pose = trvec2tform([0.3 -.65 0.1]);
[~, patchObj] = show(leftShelf,'Parent',ax);
patchObj.FaceColor = [0 0 1];

rightShelf = collisionBox(0.25,0.1,0.2);
rightShelf.Pose = trvec2tform([0.3 .65 0.1]);
[~, patchObj] = show(rightShelf,'Parent',ax);
patchObj.FaceColor = [0 0 1];

leftWidget = collisionCylinder(0.01, 0.07);
leftWidget.Pose = trvec2tform([0.3 -0.65 0.225]);
[~, patchObj] = show(leftWidget,'Parent',ax);
patchObj.FaceColor = [1 0 0];

rightWidget = collisionBox(0.03, 0.02, 0.07);
rightWidget.Pose = trvec2tform([0.3 0.65 0.225]);
[~, patchObj] = show(rightWidget,'Parent',ax);
patchObj.FaceColor = [1 0 0];

centerTable = collisionBox(0.5,0.3,0.05);
centerTable.Pose = trvec2tform([0.75 0 0.025]);
[~, patchObj] = show(centerTable,'Parent',ax);
patchObj.FaceColor = [0 1 0];

Figure Interactive Visualization contains an axes. The axes contains 80 objects of type patch, line, surface. This object represents yumi_base_link.

コンフィギュレーションの対話的な生成

対話型の可視化を使用してロボットを移動し、コンフィギュレーションを設定します。Figure が初期化されると、ロボットはアームを組んだホーム コンフィギュレーションの状態になります。ズームインしてエンドエフェクタをクリックすると、詳細が得られます。

ボディをエンドエフェクタとして選択するには、ボディを右クリックして選択します。

マーカー ボディもコマンド ラインから割り当てることができます。

iviz.MarkerBodyName = "gripper_r_base";

ボディが設定されたら、指定されているマーカー要素を使用してマーカーを移動すると、選択したボディが追従します。中央のグレーのマーカーをドラッグすると、直交座標空間でマーカーが移動します。赤、緑、青の座標軸は、マーカーを xyz 座標軸に沿って移動します。円は、同じ色の座標軸を中心としてマーカーを回転させます。

ジョイントを右クリックして [Toggle marker control method] をクリックすることにより、個々のジョイントを動かすこともできます。

オブジェクトの MarkerControlMethod プロパティは "JointControl" に設定されています。

これらの手順は、オブジェクトのプロパティを直接変更することによっても実行できます。

iviz.MarkerBodyName = "yumi_link_2_r";
iviz.MarkerControlMethod = "JointControl";

Figure Interactive Visualization contains an axes. The axes contains 72 objects of type patch, line, surface. This object represents yumi_base_link.

ジョイント制御に変更すると、ジョイント位置を直接設定できる黄のマーカーが生成されます。

目的のコンフィギュレーションが得られるまで、ロボットを対話的に移動します。addConfiguration を使用してコンフィギュレーションを保存します。呼び出しごとに、現在のコンフィギュレーションが StoredConfigurations プロパティに追加されます。

addConfiguration(iviz)

軌跡の中間点の定義

この例のために、一連のコンフィギュレーションが .mat ファイルで提供されています。

コンフィギュレーションを読み込み、一連の保存されたコンフィギュレーションとして指定します。最初のコンフィギュレーションは、Configuration プロパティを更新して addConfiguration を呼び出すことによって追加されます。これは対話的に行うこともできますが、残りは StoredConfigurations プロパティを直接割り当てることによって簡単に追加されます。

load abbYumiSaveTrajectoryWaypts.mat

removeConfigurations(iviz) % Clear stored configurations

% Start at a valid starting configuration
iviz.Configuration = startingConfig;

Figure Interactive Visualization contains an axes. The axes contains 72 objects of type patch, line, surface. This object represents yumi_base_link.

addConfiguration(iviz)

% Specify the entire set of waypoints
iviz.StoredConfigurations = [startingConfig, ...
                             graspApproachConfig, ...
                             graspPoseConfig, ...
                             graspDepartConfig, ...
                             placeApproachConfig, ...
                             placeConfig, ...
                             placeDepartConfig, ...
                             startingConfig];

軌跡の生成と再生

すべての中間点が保存されたら、ロボットの追従する軌跡を作成します。この例の台形速度プロファイルはtrapveltrajを使用して生成されます。台形速度プロファイルとは、ロボットが各中間点で滑らかに停止し、移動中に最大設定速度に達することを意味します。

numSamples = 100*size(iviz.StoredConfigurations, 2) + 1;
[q,~,~, tvec] = trapveltraj(iviz.StoredConfigurations,numSamples,'EndTime',2);

生成された行列 q を反復することにより、生成された軌跡を再生します。この行列は、各中間点の間を移動する一連のジョイント コンフィギュレーションを表します。このケースでは、レート制御オブジェクトを使用して、再生速度に実際の実行速度が確実に反映されるようにします。

iviz.ShowMarker = false;
showFigure(iviz)
rateCtrlObj = rateControl(numSamples/(max(tvec) + tvec(2)));
for i = 1:numSamples
    iviz.Configuration = q(:,i);
    waitfor(rateCtrlObj);
end

Figure Interactive Visualization contains an axes. The axes contains 70 objects of type patch, line. This object represents yumi_base_link.

この図は、定義されているすべての中間点の間でロボットが滑らかな軌跡を実行することを示しています。