Search Unity

アーティキュレーションボディを使って、リアルな動きや振る舞いを再現した産業デザインのプロトタイピングを容易に実現

, 5月 20, 2020

Unity 2020.1 では、ArticulationBody という新しい Physics コンポーネントが用意されています。アーティキュレーションにより、これまで以上に簡単に、リアルな物理と動きでロボットの腕やキネマティックチェーンをシミュレーションできるようになりました。PhysX 4.1 からのその他の改善点も組み入れたことで、Unity はこれまで以上に産業用アプリケーションのシミュレーション能力を高めています。

Unity 2020.1 でより優れた物理演算を提供

Unity 2019.3 では、物理ライブラリを PhysX 3.4 から PhysX 4.1 にアップグレードしました。そのライブラリの以前のビルドでは、多種多様なゲームに対して優れたパフォーマンスを提供していましたが、ゲーム以外のアプリケーション向けにリアルな動きをモデリングすることには適していませんでした。ラグドールやロボットアーム、複数のヒンジが同時に動く機構などに見られるキネマティックチェーンをモデリングすると動きがぎこちなくなり、非現実的な動きになってしまいます。このようなジョイントは、奇妙に見えるだけでなく、実際の機器のシミュレーションにも使用できず、産業デザインのモデル化やプロトタイプ化の妨げになっていました。

このような実世界の欠点の主な原因の 1 つは、リジッドボディ同士を接続するジョイントコンポーネントの選択でした。これらのジョイントは、忠実度よりもゲームのパフォーマンスを重視して最適化された物理ソルバーと相まって、現実をきちんと再現しない動きを生み出してしまっていました。

PhysX 4.1 によってもたらされた全体的な改善点については、こちらの記事をご覧ください。

ジョイントを使った動きのモデリング

特定のアプリケーションでは、いくつかのリジッドボディの動きに対し、互いに相対的に制約をかける必要があります。これをイメージするには、ラグドールのスケルトンのボーンを連結するところや、複数のジョイントを持つロボットアームや、ドアをヒンジで回転させるところを想像してみてください。 これは伝統的に、2 つの Rigidbody オブジェクトを接続する FixedJoint や ConfigurableJoint などのジョイントコンポーネントによって実現されてきました。

内部的には、各ジョイントは、ボディを特定の距離に保つための線形制約や、ボディを特定の軸の周りで特定の方向に向けるための角度制約など、いくつかのプリミティブな制約に分解されます。これらと同じ制約が、同じ距離を維持することでボディが互いに重ならないようにするために使用されます。結合されたすべての制約は、可能であれば接続されたオブジェクトをすべての制約を満たすように配置するために、ワールド空間で接続されたオブジェクトのペアのそれぞれに適用するインパルスのセットに収束する解を求めることを目的とした反復法ソルバーに接続されます。

従来のジョイントを使用することの問題点

第 1 の問題は、ソルバーに収束の問題を引き起こす可能性のある相反する要因の数が非常に多いことです。反復回数、接続された物体の相対的な質量、シーン内の制約のセットの全体の複雑度によって、解決不能なシナリオが作成されることがあります。このような場合、部分解が使用されるため、一部の制約が満たされないままになってしまいます。

第 2 の問題は、適用されるインパルスの大きさが、特定の時間に制約がどの程度破られているかを示す値である、ジョイントの誤差に依存していることです。この誤差補正の動作のため、特にジョイントが連結されている場合には、ボディが減衰スプリングのセットで連結されているような、ばねのような効果が常にいくらか発生します。

Unity にアーティキュレーションを導入 ー リアルな動きをモデル化するためのより良い方法

上記の運動学的問題に対する私たちの解決策は、アーティキュレーションという新しい概念の導入です。これは、論理ツリーで構成されたボディのセットで、親子関係が互いに制約のかかった動きを表現します。ルートボディは常に 1 つであり、ループは起こりません。アーティキュレーションの表現には、Unity のトランスフォーム階層を使用しています。

これで、ユーザーは下の Universal Robots UR3e のような既存のロボットを簡単にモデル化して、その動きが現実世界でどのように見えるかをより正確に反映したタスクをシミュレーションすることができます。これにより、ロボット開発者は、特定の動作シーケンスを視覚化したり、新しいコードをテストしたり、合成環境で新しいデザインを検証したりすることができます。

アーティキュレーションは、ロボット技術者やその他の産業に従事する開発者に大きく 2 つの点で貢献します。1 つはアーティキュレーションを使って作られたモデルは現実世界の対応物により近い動きをすること、もう 1 つは、従来のリジッドボディとジョイントの組み合わせを使うよりも素早くモデルを構築できるので、開発時間の短縮につながることです。

私たちは、アーティキュレーションの主な使用例の 1 つがロボティクス分野になると予想しています。ロボットアームには連続して繋がれたジョイントが 6 つ以上あることもよくあるため、各ジョイントの相対的なポーズの小さな誤差がエンドエフェクターのポーズに大きな影響を与える可能性があります。誤差がキネマティックチェーンに蓄積し、非現実的な動きを生み出してエンドエフェクターの位置が目標からずれてしまうのです。

シミュレーションは、多数のシナリオのデプロイやユニットテストの仮想的なモデリングに加え、実際のロボットで同じテストを実時間で実行するのではなく、大規模に実行できるという点で、ロボット開発者が開発期間を短縮するのに役立ちます。ArticulationBody コンポーネントと PhysX の改良により、ロボット開発者がシミュレーションに Unity を利用できるようになることを期待しています。

特定の親子関係における自由度の数は、実際に使用するジョイントの種類に依存します。現在は以下のジョイントをサポートしています。

  • Fixed:互いのボディを固定するために使用されます。自由度はゼロです。
  • Prismatic:親に対して特定の軸に沿った直線的なオフセットを表現します。自由度は 1 です。
  • Revolute:Prismatic と同じく自由度は 1 ですが、こちらは連続的な値でジョイントの回転を表現します。
  • Spherical:相対的回転のみが可能で直線的な運動がない球体ジョイントを表現します。自由度は最大 3 です。

これらのジョイントのリアリティをさらに向上させるために、Featherstone のアルゴリズムに基づいた新しいソルバーを使用しています。この手法では、ジョイント、リンク、ソリッドボディの構造に加えられる力の影響を、縮小化された座標、つまり、各ボディが親に対して自由度と同じ数の座標を持つ空間を使用して計算します。これまでは、一般的なユースケースでより性能の高い最大座標に依存していましたが、その性能を得るために精度と精度を犠牲にしていました。

フォワードダイナミクスとアーティキュレーション

縮小された座標空間でのフォワードダイナミクスとアーティキュレーションにより、ロボットアームが必要とする精度と精度に対する高い要求を満たすことができます。TGS ソルバーなどの PhysX 4.1 による改良点に加え、アーティキュレーションにより、信頼性の高いロボットアームのシミュレーションが Unity で初めて可能になりました。ジョイントソルバーを反復して使ったロボットのモデリングでは、正確なチューニングやショートカットが必要で、そこまでやっても実際のロボットの動きを再現できない場合もありました。

私たちはフォワードダイナミクスアルゴリズムを使用して、次元削減された座標空間(各ボディが親と比べて同じだけの自由度を持つ空間)でのアーティキュレーションのシミュレーションを行いました。このアルゴリズムは、アーティキュレーションの自由度の総数に応じて線形にスケーリングし、制約の数に応じてスケーリングする従来の反復法ソルバーを使用するよりも高速になり、しかもより正確な結果を計算することができます。

ArticulationBody ― Unity の新しい物理コンポーネント

Unity でアーティキュレーションをサポートするために、ArticulationBody という新しいコンポーネントを追加しました。これまでの物理システムで例えれば、ArticulationBody は Rigidbody と ConfigurableJoint が 1 つのコンポーネントに入ったようなものです。アーティキュレーションでは、ルート以外のすべてのボディは、親とジョイントで接続されているため、個々のコンポーネントに分離されていませんでした。

インスペクターでの ArticulationBody コンポーネントの表示

ボディの形状は、リジッドボディと同様に、通常の Collider コンポーネントを使用して表現されます。

一度作成されたアーティキュレーションボディは、次元削減された空間の座標で設定された制限を破る可能性があるため、Transform コンポーネントを使って移動することはできません。唯一の例外はルートボディで、ArticulationBody.TeleportRoot 関数を使って移動することができます。ArticulationBody は、設計上、Transform コンポーネントの変更には反応しません。

とはいえ、アーティキュレーションとやり取りする方法はいくつかあります。まず、力とトルクをアーティキュレーションの各ボディに適用することができます。次に、各ジョイントは、各自由度ごとに線形ドライブを持っており、線形ターゲットと角度ターゲットを設定することで制御することができます。最後に、次元削減された座標空間において、ボディのポーズを直接変更することが可能です。

アーティキュレーションと固定または設定可能なジョイントの比較

アーティキュレーションの特に優れた点は、シミュレーションの質が連結されたボディ間の質量比に直接依存しないことです。リジッドボディと固定ジョイントを使ったモデルでは、接続されたボディ間の質量比が 10:1 を超えると、シミュレーションが非現実的に見え始めます。しかし、次の例では、赤い球体が黒い球体の 1000 倍の重さであるにもかかわらず、固定ジョイントで連結されたアーティキュレーションボディで出来た格子模型が正確にシミュレーションされていることがわかります。

実際に試してみませんか?

アーティキュレーションジョイントを使って連続的にリンクしたロボットアームがどのように組み立てられるかについてご興味のある方は、ぜひ私たちのロボティクスデモのプロジェクトをご覧ください。

また、現在ベータ版となっている Unity 2020.1 をダウンロードして、試しに ArticulationBody を使ってみてください。

9 replies on “アーティキュレーションボディを使って、リアルな動きや振る舞いを再現した産業デザインのプロトタイピングを容易に実現”

I am very happy with Unity and its progress in the PhysX usage for industrial purposes. With our Asset Store solution Game4Automation for Unity we already support industrial use cases including interfaces to a lot of automation controllers. Currently we use mainly “forward kinematics” based on Gameobject hierarchy because this guarantees the accurate positions of the end effectors in industrial kinematics. The example project also shows a forward kinematic. For us, a more stable kinematic (with less “spring” behaviors in the joints) is mainly useful for backward kinematics. So my question is, if you move the robot end-effector, will the joints be able to follow exactly?

Friends, at the university gave the task to write an paper about Elon Musk and his contribution to alternative types of energy. Please help me with ideas. To be honest, I thought the process of writing this task would be much easier. Due to the fact that there is a lot of information, I do not understand what can be taken and considered objective, and what not. That’s why I decided to pay to write a paper service for writing scientific papers, with which I have been cooperating for a long time https://papersowl.com/pay-for-papers. I can advise you this service, where really professionals work.

Is it possible to apply world physics to the individual joints?

Say an object were to hit/push the end-most joint (end effector), would it correctly apply that force to that joint and the other joints connected to it (causing them to change position/rotation)?

If the robotic arm was to be mounted on a moving platform which moves at dynamic speeds (taking into account acceleration and deceleration), would the initial force provided by the acceleration cause an impact on the joint’s position/rotation?

Would it be possible to mount this robotic arm to a player controlled character (for game uses or robot simulation) and have the end effector’s position/rotation change based on an input device (i.e. VR controller/tracker pose)?

Thank you.

As loops are not allowed, how is the Linked Spheres demo constructed? Is it a single “1-D” sequence of ArticulationBody components?

Also, as articulations form a logical tree, does it means that we could have braches? i.e. a robot arm that splits articulated sub-arms at one or several points.

Does it mean we don’t need to apply counter-torque/large friction to prevent robotic arm to fall by default?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です