このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。
ロボットの軌跡の対話的な作成
ABB YuMi ロボット モデルで対話型マーカーを使用して軌跡を作成します。interactiveRigidBodyTree
オブジェクトは、対話型 Figure に剛体ツリー ロボット モデルを表示します。この例では、ロボットのさまざまなパーツを動かし、軌跡を設計して、コンフィギュレーションを保存する方法を説明します。
ロボットの読み込み、可視化および環境の作成
'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 が初期化されると、ロボットはアームを組んだホーム コンフィギュレーションの状態になります。ズームインしてエンドエフェクタをクリックすると、詳細が得られます。
ボディをエンドエフェクタとして選択するには、ボディを右クリックして [Set body as marker body] を選択します。
マーカー ボディもコマンド ラインから割り当てることができます。
iviz.MarkerBodyName = "gripper_r_base";
ボディが設定されたら、指定されているマーカー要素を使用してマーカーを移動すると、選択したボディが追従します。中央のグレーのマーカーをドラッグすると、直交座標空間でマーカーが移動します。赤、緑、青の座標軸は、マーカーを xyz 座標軸に沿って移動します。円は、同じ色の座標軸を中心としてマーカーを回転させます。
ジョイントを右クリックして [Toggle marker control method] をクリックすることにより、個々のジョイントを動かすこともできます。
これらの手順は、オブジェクトのプロパティを直接変更することによっても実行できます。オブジェクトの MarkerControlMethod
プロパティは "JointControl"
に設定されています。
iviz.MarkerBodyName = "yumi_link_2_r"; iviz.MarkerControlMethod = "JointControl";
ジョイント制御に変更すると、ジョイント位置を直接設定できる黄のマーカーが生成されます。
目的のコンフィギュレーションが得られるまで、ロボットを対話的に移動します。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;
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
この図は、定義されているすべてのウェイポイントの間でロボットが滑らかな軌跡を実行することを示しています。