コードレビュー/2011年3月23日 をテンプレートにして作成
開始行:
[[開発者向け情報>devel]]
~
**拘束処理の流れ [#h22031e9]
***StepPart1 [#j060c879]
-ギア
-接触判定
***StepPart2 [#bae41515]
-UpdateCacheLCP(剛体のローカル系での加速度を計算?)
-UpdateState(ContactPointとJointについて)
--ヤコビアンを計算したり
-(関節の場合)PHBallJoint等のSetupLCP
--SetConstrainedIndex(どの軸を拘束するかの決定:軸IDを設定)
---numCondition(拘束する軸ID)とtargetAxis(拘束軸の数)を決...
--ModifyJacobian
---PathJointが使っているらしい
-PHBallJointLimitのSetupLCP
--joint.SetupLCP(関節を作るためのLCPの準備)
--limit.SetupLCP(可動域のためのLCPの準備)
---(PHBallJoint has_a PHBallJointLimit)
---PHBallJointLimit等のCompResponseMatrix
---PHBallJoint等別に定義がある
-1Dの場合
--fMaxDt = FLT_MAX, fMinDt = 0,
--axisIndexは自由度をもっている軸ID
--1軸の関節は可動軸,拘束軸が同じになる
--A, dAなどはrangeSpring, rangeDamplerから計算される
--diffは拘束を違反している量(侵入量)
--joint1DのiterateLCPはconstraintのiterateLCPに統合できて...
-BallJointの場合
--まず,Joint作成時に可動域の指定SetConstLineをしておく
--SetConstLineについて
---ファイルをロードして,関節のスイング角が0の時のツイス...
---次に,スイング方位角に対してスイング角が並ぶ,スプライ...
---最初と最後はスイング方位角とスイング角が一致するように
---ロードした後,最初と最後のスイング方位角とスイング角が...
---ここで拘束がかかっていると,発振してしまうので,この時...
--SetupLCP
---拘束は可動軸と同じ向きに設定できないので,constNumCond...
--CheckLimit(関節が可動域に入ってるかどうか)
---剛体の姿勢をオイラー角に変換
---可動域制限にかかっているかの判定のところ
---SwingTwistでLimitするかSplineでLimitかで分岐
-SwingTwistの場合
--それぞれの軸に対して,最大,最小をチェックして,違反し...
-Splineの場合
--前回のswing方位角と今回のを比較して,差分の小さい方へ回...
--可動域との交点を確認する
---Line[0] 前回から今回のswing方位角とswing角の差分ベクトル
---Line[0]とLine[1]は直線の傾きと切片
---媒介変数で定式化したスプラインと直線との交点をもとめる
---交点でのスプラインの法線をもとめ,拘束の向きをきめる
---侵入量は繰り返し計算でやっている(内積でやったほうがい...
--twist角の違反のチェック
---スプライン指定しているポイントに設定されているtwist角...
-motor.SetupLCP(バネダンパのためのLCPの準備)
-PHBallJointのIterateLCP
--joint.IterateLCP
--motor.IterateLCP
---limitより先に行う必要がある(でないとバネダンパによる...
が,現在は6x3のヤコビアンを用いることでjoint.IterateLCPの...
--limit.IterateLCP
-pointPool : 謎
-IterateLCP
--numCondition : 何番目の軸に拘束をかけるかのidが収まった...
---変数名は直したほうがいい
---VMatrixで試したら遅かったのでintの固定長配列になってい...
--numConditionの要素ごとにfの更新式を走らせる.→fnewへ.
--fnewに対して
---摩擦の場合は静止摩擦・動摩擦を考慮したプロジェクション
---それ以外の場合は軸ごとにmax, minでクリッピング
(バネダンパや,関節可動域を実現するためのクリッピングがこ...
-ヤコビアンの計算
--movableAxesは拘束されることもある。可動域、モータ、バネ...
TO DO:
-constrを消す
-jointLimit1DのiterateLCPは消す
-motor全部についてiterateLCPは消す
-numCondition→constrainedAxes の型をvectorにする
-targetAxis→nConstrainedAxes いらなくなる
-axisIndex→movableAxes
-拘束がない場合にすぐにループを抜けるようにする
-treejointで対応しているか 要検討
終了行:
[[開発者向け情報>devel]]
~
**拘束処理の流れ [#h22031e9]
***StepPart1 [#j060c879]
-ギア
-接触判定
***StepPart2 [#bae41515]
-UpdateCacheLCP(剛体のローカル系での加速度を計算?)
-UpdateState(ContactPointとJointについて)
--ヤコビアンを計算したり
-(関節の場合)PHBallJoint等のSetupLCP
--SetConstrainedIndex(どの軸を拘束するかの決定:軸IDを設定)
---numCondition(拘束する軸ID)とtargetAxis(拘束軸の数)を決...
--ModifyJacobian
---PathJointが使っているらしい
-PHBallJointLimitのSetupLCP
--joint.SetupLCP(関節を作るためのLCPの準備)
--limit.SetupLCP(可動域のためのLCPの準備)
---(PHBallJoint has_a PHBallJointLimit)
---PHBallJointLimit等のCompResponseMatrix
---PHBallJoint等別に定義がある
-1Dの場合
--fMaxDt = FLT_MAX, fMinDt = 0,
--axisIndexは自由度をもっている軸ID
--1軸の関節は可動軸,拘束軸が同じになる
--A, dAなどはrangeSpring, rangeDamplerから計算される
--diffは拘束を違反している量(侵入量)
--joint1DのiterateLCPはconstraintのiterateLCPに統合できて...
-BallJointの場合
--まず,Joint作成時に可動域の指定SetConstLineをしておく
--SetConstLineについて
---ファイルをロードして,関節のスイング角が0の時のツイス...
---次に,スイング方位角に対してスイング角が並ぶ,スプライ...
---最初と最後はスイング方位角とスイング角が一致するように
---ロードした後,最初と最後のスイング方位角とスイング角が...
---ここで拘束がかかっていると,発振してしまうので,この時...
--SetupLCP
---拘束は可動軸と同じ向きに設定できないので,constNumCond...
--CheckLimit(関節が可動域に入ってるかどうか)
---剛体の姿勢をオイラー角に変換
---可動域制限にかかっているかの判定のところ
---SwingTwistでLimitするかSplineでLimitかで分岐
-SwingTwistの場合
--それぞれの軸に対して,最大,最小をチェックして,違反し...
-Splineの場合
--前回のswing方位角と今回のを比較して,差分の小さい方へ回...
--可動域との交点を確認する
---Line[0] 前回から今回のswing方位角とswing角の差分ベクトル
---Line[0]とLine[1]は直線の傾きと切片
---媒介変数で定式化したスプラインと直線との交点をもとめる
---交点でのスプラインの法線をもとめ,拘束の向きをきめる
---侵入量は繰り返し計算でやっている(内積でやったほうがい...
--twist角の違反のチェック
---スプライン指定しているポイントに設定されているtwist角...
-motor.SetupLCP(バネダンパのためのLCPの準備)
-PHBallJointのIterateLCP
--joint.IterateLCP
--motor.IterateLCP
---limitより先に行う必要がある(でないとバネダンパによる...
が,現在は6x3のヤコビアンを用いることでjoint.IterateLCPの...
--limit.IterateLCP
-pointPool : 謎
-IterateLCP
--numCondition : 何番目の軸に拘束をかけるかのidが収まった...
---変数名は直したほうがいい
---VMatrixで試したら遅かったのでintの固定長配列になってい...
--numConditionの要素ごとにfの更新式を走らせる.→fnewへ.
--fnewに対して
---摩擦の場合は静止摩擦・動摩擦を考慮したプロジェクション
---それ以外の場合は軸ごとにmax, minでクリッピング
(バネダンパや,関節可動域を実現するためのクリッピングがこ...
-ヤコビアンの計算
--movableAxesは拘束されることもある。可動域、モータ、バネ...
TO DO:
-constrを消す
-jointLimit1DのiterateLCPは消す
-motor全部についてiterateLCPは消す
-numCondition→constrainedAxes の型をvectorにする
-targetAxis→nConstrainedAxes いらなくなる
-axisIndex→movableAxes
-拘束がない場合にすぐにループを抜けるようにする
-treejointで対応しているか 要検討
ページ名:
サイト内検索
and
or
メニュー
Springhead
トップページ
スクリーンショットと紹介
ダウンロード
ドキュメント
開発者向け情報
SprBlender
SprBlender
SprBlenderの特徴
SprBlender使用例
ダウンロード
ドキュメント
Choreonoid Springhead Plugin
CnoidSprPlugin
Counter: 0, today: 0, yesterday: 0