Spr1のシーングラフファイルの書き方 をテンプレートにして作成
開始行:
[[Spr1の使い方/マニュアル]]
シーングラフのチュートリアルもそろそろリニューアルが必要...
古いものは http://springhead.info/src/html/ja/TutorialVC....
*チュートリアル(Visual C++) [#sa1b9ad5]
#contents
**ビルドして実行してみる [#bc29687e]
まずは,慣れるために既存のプロジェクト(今回は Springhead...
+ビルドを行う準備として以下のことを行ってください.
--環境変数 Springhead に Springhead をインストールしたデ...
--Windows2000ならば[マイコンピュータ]-[プロパティ]-[詳細]...
DirectX8.1か9.0のSDKをインストールしてください.
+Springhead/src/Samples/DynaHaptic/DynaHaptic.dsw を Visu...
--ビルドが成功しない方は以下のことを確認してください.
DirectX SDKのインクルードファイルとライブラリファイルのデ...
[ツール]-[オプション]-[ディレクトリ]の「表示するディレク...
設定されていなければ設定してください.
また,検索の優先順位を上げるために「↑」のボタンを何度かク...
ライブラリファイルについてもインクルードファイルと同様に...
--アクティブプロジェクトの設定 [ビルド]-[アクティブな構成...
--[[Springheadのページ:http://springhead.info/dev.html]]...
+実行します.
実行したら,[ファイル]-[開く]でSpringhead/src/Samples/dat...
↑:前進
↓:後退
←:左回転
→:右回転
S:上回転
X:下回転
Q:左平行移動
W:右平行移動
A:上平行移動
Z:下平行移動
R:視点リセット
F:フルスクリーン
G:画面をフルスクリーンから元に戻す
C:SPIDARのグリップのキャリブレーション
スペース:SPIDARに力を返すか返さないかのON-OFF
M:マルチメディアタイマーの起動 (精度の高い力覚を提示す...
**データファイルを編集する [#c1231f36]
ボールを転がして箱に入れるという仮想世界の作成を通して, ...
-Xファイル とは?
--[[Xファイル]] を見てください.
-完成例
--rollingBall http://springhead.info/src/Samples/data/tut...
--golf http://springhead.info/src/Samples/data/turorial/g...
まずは,rollingBall から作っていきます.
***凸物体を作る [#z0e490e0]
まず,仮想世界に必要なオブジェクトとして, 床,ジャンプ台...
−作成例−
[[floor.x:http://springhead.info/Samples/data/tutorial/fl...
[[trianglePole.x:http://springhead.info/Samples/data/tuto...
[[sphere.x:http://springhead.info/Samples/data/tutorial/s...
***凹物体を作る [#i63d6a9a]
仮想世界に登場する物体にはさきほど作成したような直方体,...
作成例では,親フレーム Vessel の下に 子フレームとして Ves...
−作成例−
- [[vessel.x:http://springhead.info/Samples/data/tutorial...
***床に三角柱を配置する [#g6f5b9ca]
では実際に世界を作っていきます. まず,世界の一番の親フレ...
−作成例−
- [[rollingBall1.x:http://springhead.info/Samples/data/tu...
***床を傾ける [#f86a747b]
次は,床を傾けます.
さきほど,三角柱を床の子フレームとしているので, 床フレー...
−作成例−
- [[rollingBall2.x:http://springhead.info/Samples/data/tu...
***ボールを配置する [#nfadc5b7]
ボールを frTop の子フレームとして配置します.
−作成例−
- [[rollingBall3.x:http://springhead.info/Samples/data/tu...
***ライトを追加する [#c93491a8]
ここまでの状態で実行しても, 暗くてあまり見えないのでライ...
−作成例−
- [[rollingBall4.x:http://springhead.info/Samples/data/tu...
***物理法則を追加する [#u3830e7d]
ではいよいよ仮想世界に物理法則を追加します. 具体的には,
- SolidContainer : 仮想物体の物理的性質
- GravityEngine : 重力の制御
- ContactEngine : 衝突判定の制御
を追加することになります.
現在作りたい世界の仕様を,
- ボールが動く.
- 重力がボールにはたらく.床にははたらかない.
- ボールと床の間で衝突が起こり,衝突後ボールは跳ね返るが...
とすると,SolidContainer および GravityEngine にはボール...
なお,ContactEngine では, 親フレームとの衝突判定を行うよ...
−作成例−
- [[rollingBall5.x:http://springhead.info/Samples/data/tu...
***フレームに物理マテリアルを追加 [#h476ec73]
物体に摩擦力などのパラメータを追加したい場合、対象のフレ...
PhysicalMaterialを追加する。
-使用例(値はデフォルトであり、この記述を行わない場合物体...
Mesh{
・・・・・
PhysicalMaterial{
1.0f; #抗力のばね係数
1.0f; #抗力のダンパ係数
1.0f; #摩擦力のばね係数
1.0f; #摩擦力のダンパ係数
0.6f; #最大静止摩擦係数
0.3f; #動摩擦係数
}
・・・・・
}
***カメラを追加 [#y9ff24fb]
このままでは画面に映る範囲が狭いので, 少しひいた(ズーム...
視点の位置を設定するためには,frTop の下に Camera を追加...
カメラの位置の設定には,保存の機能を使うと便利です. 保存...
実行 → キー操作により任意の視点位置に移動 → “名前を変えて...
という手順で行うと楽です. 保存する際,ボールの位置など仮...
−作成例−
- [[rollingBall6.x:http://springhead.info/Samples/data/tu...
***床を広くしてボールを移動 [#a6d41acb]
次は,床を広くして,ボールももっと上から転がるように変更...
−作成例−
- [[rollingBall7.x:http://springhead.info/Samples/data/tu...
***箱を配置 [#g0e00ffc]
ボールをキャッチする箱を配置します.
凹物体を作る で作成した箱フレームを追加し, ボールとの衝...
−作成例−
- [[rollingBall8.x:http://springhead.info/Samples/data/tu...
***ボールの初期速度を大きくする [#gfc4d6d5]
箱にボールが入らなかったので,ボールがもっと遠くへ飛んで...
−作成例−
- [[rollingBall9.x:http://springhead.info/Samples/data/tu...
***背景をつけ,テクスチャを貼る. [#fc0d23f9]
箱にボールが入るところまでできたので,少し見た目を向上さ...
背景は,世界の後方に大きな平面オブジェクトを置いて作るこ...
−作成例−
- [[rollingBall.x:http://springhead.info/Samples/data/tut...
これでひとまず rollingBall は完成です.
***各オブジェクト位置の変更 [#k23fb2ec]
つづいて rollingBall を改良して golf を作っていきます.
まずは,世界をgolf用に変更します.
−作成例−
- [[golf1.x:http://springhead.info/Samples/data/tutorial/...
行った作業は以下の通りです.
-床の変更
--傾きを水平にした
--カップを作るために床を4分割した(そのうちの一つには傾斜...
--ジャンプ台を低くした
-球の初期位置,初期速度の変更
-箱の位置の変更
***力覚ポインタを作る [#w4c44651]
SPIDARのグリップ部分に対応するポインタを作ります. まずは...
−作成例−
- [[golf.x:http://springhead.info/Samples/data/tutorial/g...
あとはSPIDARの設定等,プログラムを編集する作業になります.
**SPIDAR [#nd45d754]
もうしばらくおまちください....
**新しくプロジェクトを作る [#jdb14ca3]
自分用に新しくプロジェクトを作ります.
プログラムに変更を加えていく場合は, 新しいプロジェクトを...
今回は,簡単な方法ということで既存のプロジェクト(Springh...
+ VSSから $/Project/Springhead/src/Samples/DynaHaptic 以...
+ DynaHapticフォルダをコピーし, 適当なところ(Samplesの...
+ 貼り付けたフォルダ内のすべてのファイルの読み取り専用の...
.dsp, dsw, rc, sccファイルなんかもテキストエディタで開い...
**関節エンジン [#c956822d]
Springheadは関節を持つ物体をFeatherstoneの方法を使ってシ...
***関節の作り方 [#pd2231f2]
関節を作るには,次のようにします.
JointEngine {
{ soBody } // ルートの剛体,固定する場合は,Frameにす...
JointHinge joUpper { // 蝶番関節の定義.スライダーの場...
1.000000,0.000000,0.000000,
0.000000,1.000000,0.000000,
0.000000,0.000000,1.000000;; // 親剛体のフレームか...
0.800000;0.400000;0.000000;; // 親剛体のフレームか...
1.000000,0.000000,0.000000,
0.000000,1.000000,0.000000,
0.000000,0.000000,1.000000;; // 子剛体のフレームか...
-0.500000;0.000000;0.000000;;; // 子剛体のフレームか...
0.000000;0.000000;-0.143350;-0.715527;; // 位置・速度...
{ soUpper } // joUpperの子剛体,joSideの親剛体
JointHinge joSide {
0.000000;0.000000;0.000000;;
0.000000,0.000000,-1.000000, 0.000000,1.000000,0.0000...
0.000000;0.000000;0.000000;;
0.000000,0.000000,-1.000000, 0.000000,1.000000,0.0000...
0.000000;0.000000;0.106441;-0.336312;;
{ soSide }
JointHinge joLower {
1.000000,0.000000,0.000000,0.000000,1.000000,0.00000...
0.000000;-0.400000;-0.200000;;
1.000000,0.000000,0.000000,0.000000,1.000000,0.00000...
0.000000;0.400000;0.000000;;;
0.000000;0.000000;-0.613165;-2.209808;;
{ soLower }
}
}
}
//...(以下,右前足,左後ろ足,右後ろ足の記述が続きます.)
}
JointPid pidUpper { // joUpper用のPIDコントローラ
0; // 軸の番号いまのところ0〜3.ボールジョイントは...
0; // 制御対象:0:位置, 1:速度
1000.000000; // 比例制御係数:PIDのP
0.000000; // 積分制御係数:PIDのI
20.000000; // 微分制御係数:PIDのD
0.276041; // 制御目標位置
{ joUpper } // 対象関節
}
JointPid pidSide {
0;0; 1000.000000; 0.000000; 20.000000; 0.100000;
{ joSide }
}
JointPid pidLower {
0;0; 150.000000; 0.000000; 5.000000; -0.544807;
{ joLower }
}
- Springheadでは[[Roy Fetherstone:http://rsise.anu.edu.au...
***関節ノード [#uc904aae]
関節エンジンPHJointEngine はひとつのリンク機構(Articulate...
関節エンジンPHJointEngineの中には,ひとつの剛体 or フレー...
関節ノードの中には,ひとつの剛体と複数の関節ノードをかけ...
以下関節ノードを列挙,説明します.
|1自由度|PHJointHinge, PHJointSlide|
|2自由度|PHJointUniversal|
|3自由度|PHJointBall|
:PHJointHinge|1自由度の回転関節=蝶番.関節フレームのZ軸...
:PHJointSlider|1自由度の並進関節=スライダー.関節フレー...
:PHJointUniversal|2自由度の回転関節=ユニバーサルジョイ...
親剛体側と関節フレームがX軸で,子剛体と関節フレームがY軸...
:PHJointBall|3自由殿回転関節=ボールジョイント.関節軸は...
軸の速度・加速度・トルクは,親剛体に取り付けられた関節軸...
関節の姿勢はQuaterionで保持しています.
関節のフレームが2つあり,それぞれ親剛体,子剛体に取り付...
2つのフレームの関係(親から見た子)がQuaternionであらわさ...
***関節の制御 [#a2c7996f]
関節軸を制御するノードとして,PHJointPidとPHJointBallPid...
PHJointBallPidは,ボールジョイントが目標姿勢に向かいよう...
JointPid {
0; #軸の番号 JointUnivの場合,0と1両方に制御をかけな...
0; #0:位置制御, 1:速度制御
10.0; // PID の P 比例係数
1.0; // PID の I 積分係数
1000.0; // PID の D 微分係数
1.57; // PIDの目標値
{jnt01}
}
JointBallPid {
100.0; 0.0; 100.0; #PID
0.0; 1.0; 0.0; 0.0;; #目標姿勢(Quaternion w x y z)
{jnt01}
}
***制御目標に変動を与える. [#o24cad41]
関節を動かすのは,C++のプログラムで行うほうが便利ですが,...
ためのエンジンを用意しました.
JointControlEngine{
1.0; 1.0; # 周期(s), 速度の倍率
JointControl{
0.0; 35.0; 60.0; 1.0;
# 始点(deg),終点(deg),位相(deg), 速度の倍率
{joUpperPid} # 適用するJointPidノードの名前
}
JointControl{
-10.0; -40.0; 90.0; 1.0;
{joLowerPid}
}
}
これはジョイントの目標角度を変化させますので,Jointの入力...
***サンプル [#wc29b579]
|1軸関節と制御| http://springhead.info/src/Samples/data/...
|ユニバーサルジョイント| http://springhead.info/src/Sampl...
|ボールジョイント| http://springhead.info/src/Samples/dat...
***古い形式 [#ue74ecfc]
改良を続けているため,フォーマットが複数あります.
古いXファイルは次のようになっているかもしれません.
一度ロードしてセーブすると新しい書き方に書き換わります.
JointEngine{
{soBody}
Joint joUpper{
0; #関節の種類 0:蝶番, 1:ス...
0.8; 0.0; 0.6;; #親剛体から見た関節の位置
1.0, 0.0, 0.0, #親剛体から見た関節の向...
0.0, 1.0, 0.0,
0.0, 0.0, 1.0;;
0.0; 0.4; 0.0;; #子剛体から見た関節の位置
1.0, 0.0, 0.0, #子剛体から見た関節の向...
0.0, 1.0, 0.0,
0.0, 0.0, 1.0;;
#変位, 速度, 最大トルク, 可動範囲-, 可動範囲+ (...
0.0; 0.0; 20000000.0; 0.0; 0.0;
#入力の種類(0:トルク, 1:加速度, 2:速度, 3:変位),...
3; 0.1; 1000.0; 0.0; 20.0; #位置入力の例
# 2; 2.0; 100.0; 0.01; 0.5; #速度入力の例
# 3; 0.0; 0.0; 0.0; 0.0;
{soSide}
Joint joSide{ #左前足
0;
0.0; 0.0; 0.0;;
0.0, 0.0, 1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0;;
0.0; 0.0; 0.0;;
0.0, 0.0, 1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0;;
0.0; 0.0; 20000000.0; 0.0; 0.0;
3; 0.1; 1000.0; 0.0; 20.0;
{soUpper}
Joint joLower{
0;
0.0; -0.4; 0.2;;
1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, ...
0.0; 0.4; 0.0;;
1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0,...
0.0; 0.0; 20000000.0; 0.0; 0.0;
3; 0.0; 150.0; 0.0; 5.0;
{soLower}
}
}
}
以下,右前足,左後ろ足,右後ろ足の記述が続きます.
**人体モデルについて [#y3515b9d]
***%%2重3重関節(ボールジョイント)%% [#z49af41f]
%%人体のモデルを作る場合,2,3重関節が必要になります.%%
%%現状では,Solidの指定なしの単関節を組み合わせて実現して...
本来は質量0でなければなりませんが,現在のJointEngineでは...
%%将来的には,Jointの種類として,2重,3重関節を用意する予...
用意しました.
***ジョイントのバネダンパ定数 [#w08fab7e]
ジョイントのバネダンパ定数は注意深く指定しないと発振など...
シミュレータを不正終了させてしまいます.
その関節が支えている部分の質量を基準にして,バネダンパ定...
現在,佐藤研でも人体モデルとその関節の制御をするプログラ...
(できるだけ速やかに公開したいと考えています.)
終了行:
[[Spr1の使い方/マニュアル]]
シーングラフのチュートリアルもそろそろリニューアルが必要...
古いものは http://springhead.info/src/html/ja/TutorialVC....
*チュートリアル(Visual C++) [#sa1b9ad5]
#contents
**ビルドして実行してみる [#bc29687e]
まずは,慣れるために既存のプロジェクト(今回は Springhead...
+ビルドを行う準備として以下のことを行ってください.
--環境変数 Springhead に Springhead をインストールしたデ...
--Windows2000ならば[マイコンピュータ]-[プロパティ]-[詳細]...
DirectX8.1か9.0のSDKをインストールしてください.
+Springhead/src/Samples/DynaHaptic/DynaHaptic.dsw を Visu...
--ビルドが成功しない方は以下のことを確認してください.
DirectX SDKのインクルードファイルとライブラリファイルのデ...
[ツール]-[オプション]-[ディレクトリ]の「表示するディレク...
設定されていなければ設定してください.
また,検索の優先順位を上げるために「↑」のボタンを何度かク...
ライブラリファイルについてもインクルードファイルと同様に...
--アクティブプロジェクトの設定 [ビルド]-[アクティブな構成...
--[[Springheadのページ:http://springhead.info/dev.html]]...
+実行します.
実行したら,[ファイル]-[開く]でSpringhead/src/Samples/dat...
↑:前進
↓:後退
←:左回転
→:右回転
S:上回転
X:下回転
Q:左平行移動
W:右平行移動
A:上平行移動
Z:下平行移動
R:視点リセット
F:フルスクリーン
G:画面をフルスクリーンから元に戻す
C:SPIDARのグリップのキャリブレーション
スペース:SPIDARに力を返すか返さないかのON-OFF
M:マルチメディアタイマーの起動 (精度の高い力覚を提示す...
**データファイルを編集する [#c1231f36]
ボールを転がして箱に入れるという仮想世界の作成を通して, ...
-Xファイル とは?
--[[Xファイル]] を見てください.
-完成例
--rollingBall http://springhead.info/src/Samples/data/tut...
--golf http://springhead.info/src/Samples/data/turorial/g...
まずは,rollingBall から作っていきます.
***凸物体を作る [#z0e490e0]
まず,仮想世界に必要なオブジェクトとして, 床,ジャンプ台...
−作成例−
[[floor.x:http://springhead.info/Samples/data/tutorial/fl...
[[trianglePole.x:http://springhead.info/Samples/data/tuto...
[[sphere.x:http://springhead.info/Samples/data/tutorial/s...
***凹物体を作る [#i63d6a9a]
仮想世界に登場する物体にはさきほど作成したような直方体,...
作成例では,親フレーム Vessel の下に 子フレームとして Ves...
−作成例−
- [[vessel.x:http://springhead.info/Samples/data/tutorial...
***床に三角柱を配置する [#g6f5b9ca]
では実際に世界を作っていきます. まず,世界の一番の親フレ...
−作成例−
- [[rollingBall1.x:http://springhead.info/Samples/data/tu...
***床を傾ける [#f86a747b]
次は,床を傾けます.
さきほど,三角柱を床の子フレームとしているので, 床フレー...
−作成例−
- [[rollingBall2.x:http://springhead.info/Samples/data/tu...
***ボールを配置する [#nfadc5b7]
ボールを frTop の子フレームとして配置します.
−作成例−
- [[rollingBall3.x:http://springhead.info/Samples/data/tu...
***ライトを追加する [#c93491a8]
ここまでの状態で実行しても, 暗くてあまり見えないのでライ...
−作成例−
- [[rollingBall4.x:http://springhead.info/Samples/data/tu...
***物理法則を追加する [#u3830e7d]
ではいよいよ仮想世界に物理法則を追加します. 具体的には,
- SolidContainer : 仮想物体の物理的性質
- GravityEngine : 重力の制御
- ContactEngine : 衝突判定の制御
を追加することになります.
現在作りたい世界の仕様を,
- ボールが動く.
- 重力がボールにはたらく.床にははたらかない.
- ボールと床の間で衝突が起こり,衝突後ボールは跳ね返るが...
とすると,SolidContainer および GravityEngine にはボール...
なお,ContactEngine では, 親フレームとの衝突判定を行うよ...
−作成例−
- [[rollingBall5.x:http://springhead.info/Samples/data/tu...
***フレームに物理マテリアルを追加 [#h476ec73]
物体に摩擦力などのパラメータを追加したい場合、対象のフレ...
PhysicalMaterialを追加する。
-使用例(値はデフォルトであり、この記述を行わない場合物体...
Mesh{
・・・・・
PhysicalMaterial{
1.0f; #抗力のばね係数
1.0f; #抗力のダンパ係数
1.0f; #摩擦力のばね係数
1.0f; #摩擦力のダンパ係数
0.6f; #最大静止摩擦係数
0.3f; #動摩擦係数
}
・・・・・
}
***カメラを追加 [#y9ff24fb]
このままでは画面に映る範囲が狭いので, 少しひいた(ズーム...
視点の位置を設定するためには,frTop の下に Camera を追加...
カメラの位置の設定には,保存の機能を使うと便利です. 保存...
実行 → キー操作により任意の視点位置に移動 → “名前を変えて...
という手順で行うと楽です. 保存する際,ボールの位置など仮...
−作成例−
- [[rollingBall6.x:http://springhead.info/Samples/data/tu...
***床を広くしてボールを移動 [#a6d41acb]
次は,床を広くして,ボールももっと上から転がるように変更...
−作成例−
- [[rollingBall7.x:http://springhead.info/Samples/data/tu...
***箱を配置 [#g0e00ffc]
ボールをキャッチする箱を配置します.
凹物体を作る で作成した箱フレームを追加し, ボールとの衝...
−作成例−
- [[rollingBall8.x:http://springhead.info/Samples/data/tu...
***ボールの初期速度を大きくする [#gfc4d6d5]
箱にボールが入らなかったので,ボールがもっと遠くへ飛んで...
−作成例−
- [[rollingBall9.x:http://springhead.info/Samples/data/tu...
***背景をつけ,テクスチャを貼る. [#fc0d23f9]
箱にボールが入るところまでできたので,少し見た目を向上さ...
背景は,世界の後方に大きな平面オブジェクトを置いて作るこ...
−作成例−
- [[rollingBall.x:http://springhead.info/Samples/data/tut...
これでひとまず rollingBall は完成です.
***各オブジェクト位置の変更 [#k23fb2ec]
つづいて rollingBall を改良して golf を作っていきます.
まずは,世界をgolf用に変更します.
−作成例−
- [[golf1.x:http://springhead.info/Samples/data/tutorial/...
行った作業は以下の通りです.
-床の変更
--傾きを水平にした
--カップを作るために床を4分割した(そのうちの一つには傾斜...
--ジャンプ台を低くした
-球の初期位置,初期速度の変更
-箱の位置の変更
***力覚ポインタを作る [#w4c44651]
SPIDARのグリップ部分に対応するポインタを作ります. まずは...
−作成例−
- [[golf.x:http://springhead.info/Samples/data/tutorial/g...
あとはSPIDARの設定等,プログラムを編集する作業になります.
**SPIDAR [#nd45d754]
もうしばらくおまちください....
**新しくプロジェクトを作る [#jdb14ca3]
自分用に新しくプロジェクトを作ります.
プログラムに変更を加えていく場合は, 新しいプロジェクトを...
今回は,簡単な方法ということで既存のプロジェクト(Springh...
+ VSSから $/Project/Springhead/src/Samples/DynaHaptic 以...
+ DynaHapticフォルダをコピーし, 適当なところ(Samplesの...
+ 貼り付けたフォルダ内のすべてのファイルの読み取り専用の...
.dsp, dsw, rc, sccファイルなんかもテキストエディタで開い...
**関節エンジン [#c956822d]
Springheadは関節を持つ物体をFeatherstoneの方法を使ってシ...
***関節の作り方 [#pd2231f2]
関節を作るには,次のようにします.
JointEngine {
{ soBody } // ルートの剛体,固定する場合は,Frameにす...
JointHinge joUpper { // 蝶番関節の定義.スライダーの場...
1.000000,0.000000,0.000000,
0.000000,1.000000,0.000000,
0.000000,0.000000,1.000000;; // 親剛体のフレームか...
0.800000;0.400000;0.000000;; // 親剛体のフレームか...
1.000000,0.000000,0.000000,
0.000000,1.000000,0.000000,
0.000000,0.000000,1.000000;; // 子剛体のフレームか...
-0.500000;0.000000;0.000000;;; // 子剛体のフレームか...
0.000000;0.000000;-0.143350;-0.715527;; // 位置・速度...
{ soUpper } // joUpperの子剛体,joSideの親剛体
JointHinge joSide {
0.000000;0.000000;0.000000;;
0.000000,0.000000,-1.000000, 0.000000,1.000000,0.0000...
0.000000;0.000000;0.000000;;
0.000000,0.000000,-1.000000, 0.000000,1.000000,0.0000...
0.000000;0.000000;0.106441;-0.336312;;
{ soSide }
JointHinge joLower {
1.000000,0.000000,0.000000,0.000000,1.000000,0.00000...
0.000000;-0.400000;-0.200000;;
1.000000,0.000000,0.000000,0.000000,1.000000,0.00000...
0.000000;0.400000;0.000000;;;
0.000000;0.000000;-0.613165;-2.209808;;
{ soLower }
}
}
}
//...(以下,右前足,左後ろ足,右後ろ足の記述が続きます.)
}
JointPid pidUpper { // joUpper用のPIDコントローラ
0; // 軸の番号いまのところ0〜3.ボールジョイントは...
0; // 制御対象:0:位置, 1:速度
1000.000000; // 比例制御係数:PIDのP
0.000000; // 積分制御係数:PIDのI
20.000000; // 微分制御係数:PIDのD
0.276041; // 制御目標位置
{ joUpper } // 対象関節
}
JointPid pidSide {
0;0; 1000.000000; 0.000000; 20.000000; 0.100000;
{ joSide }
}
JointPid pidLower {
0;0; 150.000000; 0.000000; 5.000000; -0.544807;
{ joLower }
}
- Springheadでは[[Roy Fetherstone:http://rsise.anu.edu.au...
***関節ノード [#uc904aae]
関節エンジンPHJointEngine はひとつのリンク機構(Articulate...
関節エンジンPHJointEngineの中には,ひとつの剛体 or フレー...
関節ノードの中には,ひとつの剛体と複数の関節ノードをかけ...
以下関節ノードを列挙,説明します.
|1自由度|PHJointHinge, PHJointSlide|
|2自由度|PHJointUniversal|
|3自由度|PHJointBall|
:PHJointHinge|1自由度の回転関節=蝶番.関節フレームのZ軸...
:PHJointSlider|1自由度の並進関節=スライダー.関節フレー...
:PHJointUniversal|2自由度の回転関節=ユニバーサルジョイ...
親剛体側と関節フレームがX軸で,子剛体と関節フレームがY軸...
:PHJointBall|3自由殿回転関節=ボールジョイント.関節軸は...
軸の速度・加速度・トルクは,親剛体に取り付けられた関節軸...
関節の姿勢はQuaterionで保持しています.
関節のフレームが2つあり,それぞれ親剛体,子剛体に取り付...
2つのフレームの関係(親から見た子)がQuaternionであらわさ...
***関節の制御 [#a2c7996f]
関節軸を制御するノードとして,PHJointPidとPHJointBallPid...
PHJointBallPidは,ボールジョイントが目標姿勢に向かいよう...
JointPid {
0; #軸の番号 JointUnivの場合,0と1両方に制御をかけな...
0; #0:位置制御, 1:速度制御
10.0; // PID の P 比例係数
1.0; // PID の I 積分係数
1000.0; // PID の D 微分係数
1.57; // PIDの目標値
{jnt01}
}
JointBallPid {
100.0; 0.0; 100.0; #PID
0.0; 1.0; 0.0; 0.0;; #目標姿勢(Quaternion w x y z)
{jnt01}
}
***制御目標に変動を与える. [#o24cad41]
関節を動かすのは,C++のプログラムで行うほうが便利ですが,...
ためのエンジンを用意しました.
JointControlEngine{
1.0; 1.0; # 周期(s), 速度の倍率
JointControl{
0.0; 35.0; 60.0; 1.0;
# 始点(deg),終点(deg),位相(deg), 速度の倍率
{joUpperPid} # 適用するJointPidノードの名前
}
JointControl{
-10.0; -40.0; 90.0; 1.0;
{joLowerPid}
}
}
これはジョイントの目標角度を変化させますので,Jointの入力...
***サンプル [#wc29b579]
|1軸関節と制御| http://springhead.info/src/Samples/data/...
|ユニバーサルジョイント| http://springhead.info/src/Sampl...
|ボールジョイント| http://springhead.info/src/Samples/dat...
***古い形式 [#ue74ecfc]
改良を続けているため,フォーマットが複数あります.
古いXファイルは次のようになっているかもしれません.
一度ロードしてセーブすると新しい書き方に書き換わります.
JointEngine{
{soBody}
Joint joUpper{
0; #関節の種類 0:蝶番, 1:ス...
0.8; 0.0; 0.6;; #親剛体から見た関節の位置
1.0, 0.0, 0.0, #親剛体から見た関節の向...
0.0, 1.0, 0.0,
0.0, 0.0, 1.0;;
0.0; 0.4; 0.0;; #子剛体から見た関節の位置
1.0, 0.0, 0.0, #子剛体から見た関節の向...
0.0, 1.0, 0.0,
0.0, 0.0, 1.0;;
#変位, 速度, 最大トルク, 可動範囲-, 可動範囲+ (...
0.0; 0.0; 20000000.0; 0.0; 0.0;
#入力の種類(0:トルク, 1:加速度, 2:速度, 3:変位),...
3; 0.1; 1000.0; 0.0; 20.0; #位置入力の例
# 2; 2.0; 100.0; 0.01; 0.5; #速度入力の例
# 3; 0.0; 0.0; 0.0; 0.0;
{soSide}
Joint joSide{ #左前足
0;
0.0; 0.0; 0.0;;
0.0, 0.0, 1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0;;
0.0; 0.0; 0.0;;
0.0, 0.0, 1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0;;
0.0; 0.0; 20000000.0; 0.0; 0.0;
3; 0.1; 1000.0; 0.0; 20.0;
{soUpper}
Joint joLower{
0;
0.0; -0.4; 0.2;;
1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, ...
0.0; 0.4; 0.0;;
1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0,...
0.0; 0.0; 20000000.0; 0.0; 0.0;
3; 0.0; 150.0; 0.0; 5.0;
{soLower}
}
}
}
以下,右前足,左後ろ足,右後ろ足の記述が続きます.
**人体モデルについて [#y3515b9d]
***%%2重3重関節(ボールジョイント)%% [#z49af41f]
%%人体のモデルを作る場合,2,3重関節が必要になります.%%
%%現状では,Solidの指定なしの単関節を組み合わせて実現して...
本来は質量0でなければなりませんが,現在のJointEngineでは...
%%将来的には,Jointの種類として,2重,3重関節を用意する予...
用意しました.
***ジョイントのバネダンパ定数 [#w08fab7e]
ジョイントのバネダンパ定数は注意深く指定しないと発振など...
シミュレータを不正終了させてしまいます.
その関節が支えている部分の質量を基準にして,バネダンパ定...
現在,佐藤研でも人体モデルとその関節の制御をするプログラ...
(できるだけ速やかに公開したいと考えています.)
ページ名:
サイト内検索
and
or
メニュー
Springhead
トップページ
スクリーンショットと紹介
ダウンロード
ドキュメント
開発者向け情報
SprBlender
SprBlender
SprBlenderの特徴
SprBlender使用例
ダウンロード
ドキュメント
Choreonoid Springhead Plugin
CnoidSprPlugin
Counter: 0, today: 0, yesterday: 0