主要内容

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

机器人とSimscapeを使用したマニピュレーターアームのモデル化と制御

ABB弓ロボットを使用してピックアンドプレースワークフローを実行し,仿真软件®で金宝appロボットのアルゴリズムを設計してからSimscape™を使用してテスト環境でアクションをシミュレートする方法を示します。この例では,関連するアルゴリズム設計に一層専念できるように,さまざまな忠実度レベルでシステムをモデル化する方法についても説明します。

モデル設計のさまざまな項目にさらに簡単に着目できるように,この例の設計要素は次の3つのセクションに分けられています。

  1. 簡略化されたマニピュレーターシステムダイナミクスを使用したピックアンドプレース用のタスクおよび軌跡スケジューラの作成

  2. コアマニピュレーターダイナミクスの追加とコントローラーの設計

  3. ロボットおよび環境のSimscapeモデルでのワークフロー全体の検証

高水準の目的

ABB弓ロボットの軌跡の対話的な作成の例では,連続する軌跡を使用して,ロボットの中間点のシーケンスを設計して再生しました。この例では,金宝app仿真软件モデルが,これらの中間点を完結した繰り返し可能なピックアンドプレースワークフローに変換します。モデルには2つの重要な要素があります。

タスクスケジューリングと軌跡生成の部分では,ロボットが状態間をどのように移行するかを定義します。これには,任意の時点におけるロボットコンフィギュレーションの状態,ゴール位置はどこか,グリッパーを開くか閉じるか,およびロボットに送信されている現在の軌跡が含まれます。

システムダイナミクスの部分ではロボットの動作をモデル化します。これは,一連の基準軌跡と boolean のグリッパー コマンド (開または閉) が指定された場合のロボットの動きを定義します。システム ダイナミクスは、モデル全体の目的により、さまざまなレベルの忠実度でモデル化できます。

この例の目的は,タスクスケジューラの設計時に,ロボットのモーション制御が安定しているという前提の下でスケジューラが正確に動作すると確認することです。この部分では,迅速にシミュレートする簡単なモデルが望ましいため,システムダイナミクスは关节空间运动模型ブロックを使用してモデル化されます。このブロックは,応答パラメーターが事前定義された安定したコントローラーの下でジョイント空間の基準軌跡を指定した場合に,マニピュレーターの動作をシミュレートします。タスクスケジューリングが完了すると,モデルの重要点はコントローラーの設計とシステムの検証に移行します。これには,より複雑なシステムダイナミクスモデルが必要です。

ロボットと環境の定義

ABB弓ロボットモデルを読み込みます。このロボットは2本のアームをもつ産業用マニピュレーターです。この例では1本のアームのみを使用します。

机器人= loadrobot (“abbYumi”“重力”[0 0 -9.81]);

シミュレートされた軌跡を再生する可視化を作成します。

iviz = interactiveRigidBodyTree(机器人);甘氨胆酸ax =;

補助関数の例を使用して一連の衝突オブジェクトを作成することにより,環境を追加します。

exampleHelperSetupWorkspace (ax);

共有シミュレーションパラメーターの初期化

この例では,一連の事前定義されたコンフィギュレーションconfigSequenceをロボットの状態として使用します。これらは関連する垫ファイルに保存されていて,ABB弓ロボットの軌跡の対話的な作成で初期定義されています。

负载abbSavedConfigs.matconfigSequence

シミュレーション用に,ロボットの初期状態を,各ジョイントの位置,速度および加速度を含めて定義しなければなりません。

定义初始状态q0 = configSequence (: 1);%的位置dq0 = 0(大小(q0));%的速度ddq0 = 0(大小(q0));%的加速度

タスクおよび軌跡スケジューラの作成

最初のモデルを読み込みます。これは,モデルのタスク スケジューリングおよび軌跡生成のセクションに重点を置いています。

open_system (“modelWithSimplifiedSystemDynamics.slx”);

簡略化されたシステムダイナミクス

モデルのスケジューリング部分に重点を置くために,システムダイナミクスは关节空间运动模型ブロックを使用してモデル化されています。この運動モデルは,安定した正確な制御の下で,指定されたコンフィグレーションにロボットが到達できることを前提にしています。この例の後の部分で,システムダイナミクスのより正確なモデル化について詳細に説明します。

グリッパーは,0または1(開または閉)の単純な布尔コマンド入力,および命令された位置にグリッパーが到達したかどうかを示す出力としてモデル化されます。通常,ロボットは,他のコンフィギュレーション入力とは別にグリッパーを扱います。

タスクスケジューリング

ロボットが実行する一連のタスクは8つの状態です。

スケジューラは,MATLAB函数ブロックcommandLogicを使用して実装されます。グリッパーの状態が達成され,マニピュレーターのすべてのジョイントがターゲット位置の事前定義されたしきい値内に到達した場合,スケジューラは状態を進めます。各タスクが梯形速度剖面轨迹ブロックに入力され,各中間点の間に滑らかな軌跡が生成されます。

モデルのシミュレーション

提供されている仿金宝app真软件モデルは,例に関連する変数をモデルワークスペースに保存しています。必要に応じて,(加载缺省参数)をクリックして変数を再初期化します。詳細については,モデルワークスペース(金宝app模型)を参照してください。

sim卡を呼び出してモデルを実行します。

対話型の可視化を使用して動作を再生します。最初の動作後にサイクルが予測どおりにループすることを確認するために,モデルは余分に数秒シミュレートされます。このモデルは環境の相互作用をシミュレートしないため,このシミュレーションでロボットが実際に目標物をつかむことはありません。

simout = sim卡(“modelWithSimplifiedSystemDynamics.slx”);%使用interactiveRigidBodyTree对象可视化运动。iviz。ShowMarker = false;iviz.showFigure;rateCtrlObj = rateControl(长度(simout.tout) / (max (simout.tout)));I = 1:length(simout.tout)配置= simout.yout {1} .Values.Data(我:);等待(rateCtrlObj);结束

コアマニピュレーターダイナミクスの追加とコントローラーの設計

スケジューラの設計と検証が完了したので,次の2つの要素をもつロボットのコントローラーを追加します。

  • ジョイントトルクとグリッパーコマンドを受け入れる,より複雑なマニピュレーターダイナミクスモデル

  • 目的のマニピュレーター状態と現在のマニピュレーター状態を与えられてジョイントトルクを返す,ジョイント空間コントローラー

追加したコントローラーを使用して,次に提供されているモデルを開きます。

open_system (“modelWithControllerAndBasicRobotDynamics.slx”);

マニピュレーターダイナミクス

コントローラーの設計が目的の場合,マニピュレーターダイナミクスは,トルク入力を与えられたマニピュレーターのジョイント位置を表す必要があります。これは,机械手动力学サブシステム内の前进动力ブロックを使用して,現在の状態におけるジョイントトルクをジョイント加速度に変換してから,2回積分して総合的なジョイントコンフィギュレーションを得ることによって実現されます。積分器はq0处およびdq0,つまりジョイントの初期位置および初期速度に初期化されます。

さらに,グリッパー制御サブシステムは,グリッパーアクチュエータに対するジョイント制御トルクを,グリッパーを開閉するために加える力10 Nでオーバーライドします。

2番目の積分器が飽和していることに注意してください。

適切に設計された位置コントローラーの下のマニピュレーターは,通常,ジョイント制限に達しませんが,グリッパーアクションから開ループ力を追加すると,現実的な応答を確保するためにジョイント制限が必要になることを意味します。モデルの精度を高めるには,ジョイント飽和を速度と結び付けて積分をリセットすることもできますが,このモデルではこのレベルの精度で十分です。

グリッパーセンサー

このモデルではさらに,より詳細なグリッパーセンサーを追加して,グリッパーが実際に開かれたか閉じられたかをチェックします。グリッパーセンサーはジョイント コンフィギュレーションの最後の 2 つの値 (グリッパー位置に対応する値) を抽出し、MATLAB Function ブロック钳子的逻辑で,closeGripperコマンドによって与えられる目的のグリッパー位置と比較します。夹状态は,グリッパージョイントの位置がcloseGripperコマンドで与えられている目的の状態と一致する場合に1を返します。グリッパーがそれらの状態にまだ達していない場合,夹状态はゼロを返します。これは,前述の簡略化モデル内の夹持模型の動作と一致します。

ジョイント空間コントローラー

このモデルは,モデルベースのアプローチをジョイント制御に実装する計算トルクコントローラーも追加します。詳細については,ロボット工学マニピュレーターブロックを使用した安全な軌跡追従制御の実行の例の”ロボット工学マニピュレーターブロックを使用して計算トルクコントローラーを構築”を参照してください。このモデルは同じコントローラーを使用しますが,考虑索耶ではなく,ABB弓をrigidBodyTreeの入力に使用します。

モデルのシミュレーション

新しいモデルを使用してシミュレーションを行い,結果を可視化します。

simout = sim卡(“modelWithControllerAndBasicRobotDynamics.slx”);%使用interactiveRigidBodyTree可视化运动iviz。ShowMarker = false;iviz.showFigure;rateCtrlObj = rateControl(长度(simout.tout) / (max (simout.tout)));I = 1:length(simout.tout)配置= simout.yout {1} .Values.Data(我:);等待(rateCtrlObj);结束

ロボットおよび環境のSimscapeモデルでのワークフロー全体の検証

タスクスケジューラとコントローラーの設計が完了したので,より複雑なロボットと環境のモデルを追加します。物理システムの高忠実度モデルを作成できるSimscape多体™を使用します。このアプリケーションで,Simscapeは,ジョイント制限と接触のモデル化が組み込まれたダイナミクスを追加します。この最後の手順によってシミュレーションの精度が向上しますが,代償としてモデル化が複雑になり,シミュレーション速度が低下します。Simcapeでは,組み込みの可視化機能である力学的探险家も提供されており,シミュレーション中およびシミュレーション後に表示できます。

最後の提供モデルを読み込みます。上面図は同じです。

open_system (“modelWithSimscapeRobotAndEnvironmentDynamics.slx”);

Simscapeのロボットと環境プラント

前のモデルとの主な違いはプラントモデルです。前のモデルのコアマニピュレーターダイナミクスが,ロボットおよび環境用のSimscapeモデルに置き換えられています。

マニピュレーターと環境のダイナミクス

マニピュレーターと環境は,Simscape多体を使用して構築されます。ロボットモデルは,ロボットのURDFファイル上で,提供されているメッシュと共にsmimportを呼び出すことによって作成されました。次に,muxタグと转到タグ経由でリンクすることにより,ジョイントトルクでジョイントが作動し,ジョイントの位置,速度および加速度を返すセンサーが装備されました。

このシミュレーションでは目標物(ウィジェット)が実際にピックアップされるため,ウィジェットサイズを定義します。

widgetDimensions = [0.02 0.02 0.07];

接触モデル

このモデルの接触は次の2つのカテゴリに分けられます。

  • グリッパーとウィジェットとの接触

  • ウィジェットと環境との接触

いずれの場合も,表面と表面の直接接触の代わりに”接触プロキシ”が使用されます。接触プロキシを使用すると,モデル化が高速化され,パフォーマンスが向上します。グリッパーとウィジェットの接触の場合,グリッパーの接触は2つのブリック状の立体を使用してモデル化され,ウィジェットの界面は8つの球面接触を使用してモデル化されます。同様に,ウィジェットと環境の接触では,環境を表すブリック状の立体と接触する,ウィジェットの四隅の球面を使用します。

既定の状態に近付くように,接触モデルのパラメーターを定義します。

%接触参数刚度= 1 e4;阻尼= 30;transition_region_width = 1的军医;static_friction_coef = 1;kinetic_friction_coef = 1;critical_velocity = 1;

グリッパーの制御と検出

爪的控制は同じですが,爪传感器は変更されています。このグリッパーは実際に目標物をピックアップできるため,握力の高い場合にグリッパーは閉じた状態に達します。実際に閉じた位置に達することはありません。したがって,左右両方のグリッパーの反力がしきい値を超えた場合に真正となる値isGrippingObjを返すロジックが追加されました。MATLABFunction ブロック钳子的逻辑は,この変数を入力として受け入れます。

モデルのシミュレーション

ロボットをシミュレートします。複雑度が高いため,これには数分かかる場合があります。

simout = sim卡(“modelWithSimscapeRobotAndEnvironmentDynamics.slx”);

力学的探险家を使用して,シミュレーション中およびシミュレーション後のパフォーマンスを可視化します。

拡張性

この例では,ピックアンドプレースアプリケーション向けのスケジューリングおよび制御システムの設計に重点を置いてきました。さらなる調査項目として,コントローラーでのサンプリングの効果,Simscape多体を使用した予期せぬ接触の影響,ロボットが使用する電気モーターの動作を詳細に説明するようなマルチドメインモデルへの拡張などがあります。