(フェザーストーン)関節式剛体モデルへのアクチュエータまたは力の追加


9

ベースに取り付けられた一連のボールソケットジョイントから構成されるシステムをモデル化する必要があるプロジェクトに取り組んでいます。このシステムは、プリズムジョイント(レール)に取り付けられています。

Roy FeatherstoneのRigid Body Dynamics Algorithms Algorithms Cover-to-coverを読んだり、Springer Handbook of Robotics(これもFeatherstoneによって書かれた)のDynamicsセクションを読んだりしました。

彼の「空間ベクトル」と「空間行列」の表記法に慣れるのに長い時間がかかりましたが、演習として彼の表記法をすべて手作業で再作成した後、3x3を連結する素晴らしい方法であることがわかり、 3x1の行列とベクトルを6x6と6x1の行列とベクトルに変換します。彼が操作を実行するために発明した数学は、いくつかの標準的な表記法をハイジャックするので、読むのが少し面倒ですが、全体的にすべてが非常にコンパクトで、MATLABでの実装が非常に簡単です。

私の問題はこれです:モデルにアクチュエータを追加するにはどうすればよいですか?彼はジョイントの定義やリンクの定義などを明示的に構成する手順をたどっていますが、アクチュエータや適用される力については、「ここに追加て、ボブはあなたの叔父さんです!」-それはまったく議論されていません。ロボット工学ハンドブックでは、固定ベースに誤った加速度を導入して重力の項を追加することを提案していますが、ローカル座標にそれを追加する方法や、アクチュエータ入力を追加する方法については触れていません。τa

どんな助けでも大歓迎です。私は別の本からやり直すことを検討しましたが、別の表記法に慣れるために私の時間の大きな出費になります。これで前進したいのですが、フィニッシュラインがほんの数インチ恥ずかしがり屋です。

回答:


3

アクチュエーター部隊

これは正解ですか。剛体マルチボディシステムの理論モデルがあり、剛体ダイナミクスの計算を実行したいと考えています。モデルを実装しました。次に、アクチュエーターによって駆動されるときのモデルの動作を計算します。

しかし、あなたにとってアクチュエータは何ですか?それは単にその関節に作用する力ですか?DCモーターモデルですか?PIDコントローラーですか?

本の中で力学アルゴリズムは一般化位置の観点から説明されている、一般化速度˙ Q、一般化速度¨ Q、および一般化力τ。あなたがの翻訳はによって記述された角柱状の関節がある場合は、Qが、私は、その共同で直線的な力は次のように記述されてτ I。あなたがの回転がで記述され、回転(蝶番)共同している場合のq jは、その後τ jはその接合部のトルクを表しています。qq˙q¨τqτqjτj

アクチュエータの理解次第ですττ

τaτa

重力加速度:

Featherstoneはベースに重力加速度を適用し、アルゴリズムによってツリー全体に伝播させます。これはRNEAで行われます。表5.1の行

a0=ag

その代わりに、行を変更することもできます

fB=a+v×v

fB=aバツ0ag+v×v

各体に個別に重力効果を適用します。これは追加の計算を導入し、私はそうすることで何の利点も見ていません。

空間代数と3次元ベクトルの連結

空間代数は、3Dベクトルの単なる連結ではありません。前者は固定座標系での剛体運動を表現し、後者は体と一緒に動く点で表現されます。結果として、空間加速度は空間速度の時間微分です。2つの3次元方程式を使用する古典的な表記では、これは当てはまりません(Featherstoneの本のセクション2.11)。

ω

空間速度は、(固定された)基準フレームの原点と現在一致しているボディポイントの線形および角速度を表します。そのフレームが重心で表現され、グローバル参照フレームで方向付けられている場合、それは3次元の線形および角速度の単純な連結のように見えますが、これはこの特定の参照フレームの選択の場合にのみ当てはまります。異なるフレームで表現すると、異なる値が得られますが、それでも同じ空間速度を表します。

空間加速度は、原点と一致するポイントの線形および角速度の流れを表します。ここでの「フロー」とは、ベクトル量(線形および角速度)が時間とともにどのように変化するかを意味します。


私はこのアルゴリズムを実装するために一生懸命取り組んでいますが、最も基本的な側面でさえ常に期待どおりに機能するように、できる限り体系的になるように努めました。そのために、シミュレーションを比較できるように正確な解を計算できる実験をいくつか設定しました。
チャック

私が取り組んでいる最後の側面は、球体ジョイントです。クォータニオン表現と加速度を取得します。この実験では、地球をモデル化し、表面に球形のジョイントを持つ振り子を配置することにより、フーコーの振り子をシミュレートしようとしています。そうすることで、私の固定ベースは地球の中心であり、その周りを地球が回転します。次に、地球の回転中心から、任意の緯度まで上下に回転したり、表面に変換したりして、球形の関節振り子を配置します。
チャック

重力を追加する方法が必要でした。固定ベースのZ軸にそれを置くことができなかったからです。これにより、北極でのみ重力が正しく機能します。基本的に、私は地表面下の力については気にせず、振り子の歳差運動について気にします。
チャック

固定関節の扱い方について、関連する質問をしました。
チャック

2

リジッドボディダイナミクスライブラリ(RBDL)に出会ったことがない場合は、それらの実装方法を確認するか、作者のMartin Felisに連絡することをお勧めします。


バレット、私はRBDLを数週間前に見つけました。情報を収集するために何度も行ったり来たりしていましたが、それはC ++で記述されており、コードを追跡するのを難しくしています。たとえば、キネマティクスコードに次のような行があります。G.block(0,q_index,6,1) = base_to_body.apply(model.X_base[j].inverse().apply(model.S[j]));。それで、関数applyは何をしますか?さて、クラスbase_to_bodyが何であれ、ヘッダーファイルに移動する必要がありますが、それはジョイントですか、ボディですか?また、そのようなmodel.base[j].inverse().apply(model.S[j])ことも特に明確ではありません。
チャック

これは、時々役に立たなかったという意味ではありませんが、RBDLから理解を得るには、多くの努力が必要です。
チャック

ロボット工学のバレットエイムスへようこそ。あなたの答えに感謝しますが、可能な限り、答えは自己完結型であることが望まれます。リンクは腐敗する傾向があるため、コンテンツへのリンクが腐敗した場合、リンクに依存する回答は役に立たなくなる可能性があります。リンクからより多くのコンテキストを追加すると、他の人があなたの答えが役立つと思う可能性が高くなります。
マークブース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.