[choreonoid-users-ja 00146] Re: 仮想関節のバネ化について

中岡 慎一郎 s.nakaoka @ aist.go.jp
2015年 9月 17日 (木) 23:52:14 JST


福本様

> なんらかの方法で仮想関節で自由になっている方向を
> 通常の関節同様にバネ化することはできますでしょうか?

バネに相当する力を外力としてそれぞれのリンクに直接与えれば実現できるかも
しれません。

以下githubの開発版を対象とさせてください。1.4については申し訳ないのです
が仕様が異なっていたり不具合が残っている部分があります。

リンクに与える外力の変数にはLinkクラスのF_ext()でアクセスします。
これは力とトルクを合わせた6次元ベクトルとなっていますが、それぞれ
f_ext(), tau_ext() でアクセスすることも可能です。

シミュレーション対象の物体に任意の外力を与えるには、BodyPluginの
SubSimulatorItemを使うことができます。これを継承したアイテムクラスを作成
し、SimulatorItemの小アイテムとして配置しておくことで、シミュレーション
の機能を拡張することができます。例えばカメラ・レンジセンサのシミュレー
ション機能を追加する"GLVisionSimulatorItem"もSubSimulatorItemとして実装
しています。

外力を与えるには、SubSimulatorItem継承クラスにてオーバーライドした
initializeSimulation()関数にて、SimulatorItemのaddPreDynamicsFunctionを
用いて、順動力学計算の各ステップの計算前に実行する関数を登録します。

その関数内で、必要な外力を上記変数に加算します。(その際、トルクは原点周
りとなっていることにご注意ください。)
対象のBodyオブジェクトは、SimulatorItemのsimulationBodies(),
findSimulationBody() 関数等を用いて取得しておきます。

> あるいは通常の関節のみバネ化して仮想関節部は fiixed のようにすることが
> できればそちらでも結構です。

fixedな拘束も原理的には可能だと思うのですが、AISTSimulatorItemのエンジン
には実装されていないのが現状です。ODEですとfixedも含めて様々な拘束を設定
できるのですが、Choreonoidからそれを利用するにはChoreonoid側のAPIの強化
も必要になります。

追加の拘束の扱いについては要望も多く強化が必要だとは認識しているのです
が、十分な対応が出来ていないのが現状です。

-- 
中岡 慎一郎 <s.nakaoka @ aist.go.jp>
産業技術総合研究所 知能システム研究部門
ヒューマノイド研究グループ
Phone: 029-861-5161  Fax: 029-862-6519


choreonoid-users-ja メーリングリストの案内