12: 2011-08-02 (火) 18:34:36 yoshida ソース 13: 2011-08-02 (火) 20:33:08 yoshida ソース
Line 20: Line 20:
ロボットハンドの左につかむ物を設置して下さい。腕の先へ掴めるものが来るように配置しましょう。 ロボットハンドの左につかむ物を設置して下さい。腕の先へ掴めるものが来るように配置しましょう。
#html{{ #html{{
-<pre class="brush:c">+<pre class="brush:c;toolbar:false">
#include <fd.h> #include <fd.h>
// メイン関数 // メイン関数
Line 85: Line 85:
****初期化 [#w63f4eb4] ****初期化 [#w63f4eb4]
-初期化には[[fd_SetSpec>FDIIILIB#r0f0534c]]を使用します。~ 
-fd_SetSpecはTHomePositionとTSpecを使用して、その内容を登録します。 
-*****ホームポジション [#e87812da] 
-モーションで指定する値はホームポジションに対する角度になります。 
#html{{ #html{{
-<pre class="brush:c;first-line:5">+<pre class="brush:c;toolbar:false"> 
 +fd_SetSpec (&HomePos, Spec, fd_SpecSize (Spec)); 
 +</pre> 
 +}} 
 +*****[[fd_SetSpec>FDIIILIB#r0f0534c]] [#a6a7bd34] 
 +指定された値を使用して、初期設定を行います。~ 
 +''第1引数''は、ホームポジションを指定したTHomePosition構造体変数のアドレスです。~ 
 +''第2引数''は、アクチュエータの情報を指定したTSpec構造体変数のアドレスです。~ 
 +''第3引数''は、TSpec配列数です。 
 + 
 +*****THomePosition構造体 [#e87812da] 
 +基準となる位置を指定します。 
 +#html{{ 
 +<pre class="brush:c;toolbar:false">
const THomePosition HomePos = { 512, 512, 512, 512, 512 , 512 }; const THomePosition HomePos = { 512, 512, 512, 512, 512 , 512 };
</pre> </pre>
}} }}
-6軸のアクチュエータに対し、512(出力軸は150°)を指定します。+6軸のアクチュエータに対し、512(出力軸は150°)を指定しています。
-*****初期値 [#lbf8e4eb]+*****TSpec構造体 [#lbf8e4eb] 
 +各初期情報を指定します。
#html{{ #html{{
-<pre class="brush:c;first-line:6">+<pre class="brush:c;toolbar:false">
const TSpec Spec[] = { const TSpec Spec[] = {
  { 1, DEV_AX12, fd_AxisOfs(0), +341, {  257,  768},  0, 1023, { 1, 1, 32,  32} },   { 1, DEV_AX12, fd_AxisOfs(0), +341, {  257,  768},  0, 1023, { 1, 1, 32,  32} },
Line 109: Line 119:
</pre> </pre>
}} }}
-今回はIDを1~6と設定しているので、それらをオフセット0~5へ割り当てます。オフセットは60の配列の為、59まで使用可能です。TApplyPartで指定するオフセットと対応していればどのような順番であっても問題ありません。+AX-12+のIDを1~6と設定しているので、それらをオフセット0~2と10~12へ割り当てます。オフセットは60の配列の為、59まで使用可能となっており、TApplyPartで指定するオフセットと対応していればどのような順番であっても問題ありません。 
 + 
 +****モーション再生 [#u5c51edb] 
 +#html{{ 
 +<pre class="brush:c;toolbar:false"> 
 + 
 +</pre> 
 +}} 
 +*****[[fd_PlayMotion>FDIIILIB#xc988ccc]]​ [#h4574808] 
 + 
 +*****TApplyPart構造体 [#fdec1af9] 
 +モーションはTApplyPartで設定された部位単位に動きます。1つのアクチュエータを複数の部位で使用しても問題ありません。~ 
 +但し、その場合はPriorityが有効になります。 
 +#html{{ 
 +<pre class="brush:c;toolbar:false"> 
 +TApplyPart ArmParts = { 
 +  Priority: 10, 
 +  PartNum:  3, 
 +  Part: { fd_AxisOfs(0), fd_AxisOfs(1), fd_AxisOfs(2) } 
 +}; 
 +TApplyPart HandParts = { 
 +  Priority: 5, 
 +  PartNum:  3, 
 +  Part: { fd_AxisOfs(10), fd_AxisOfs(11), fd_AxisOfs(12) } 
 +}; 
 +TApplyPart AllParts = { 
 +  Priority: 1, 
 +  PartNum:  6, 
 +  Part: { fd_AxisOfs(0), fd_AxisOfs(1), fd_AxisOfs(2), fd_AxisOfs(10), fd_AxisOfs(11), fd_AxisOfs(12) } 
 +}; 
 +</pre> 
 +}} 
 +Priorityは小さい方が優先となりますので、AllPart>HandPart>ArmPartの順になります。 
 +#ref(motion2_1.png) 
 +HandPartを使用したモーションが稼働中にAllPartを使用したモーションを稼働させると、HandPartを使用したモーションは無効となりAllPartを使用したモーションのみが稼働します。~ 
 +AllPartとHandPartのPriorityを逆転させてみましょう。 
 +#ref(motion2_2.png) 
 +AllPartのモーション稼働時にHandPartのモーションが稼働すると、ID1~3はAllPartのモーションがそのまま稼働し、ID4~6はHandPartのモーションが稼働します。 
 + 
 +*****TPose構造体 [#if4363ee] 
 +モーションデータになります。部位と合わせて使用します。 
 +#html{{ 
 +<pre class="brush:c;toolbar:false"> 
 +const TPose HomePos[] = { 
 +  { Structure:{ 0, 0, 0, 0, 0, 0 },  Adj:ADJ_SACC_SDECEL, Div:1000, }, 
 +}; 
 +</pre> 
 +}} 
 +モーションデータは配列で宣言して下さい。又、TSpecで宣言したアクチュエータ分、作成して下さい。
***モーションプログラム [#s04f1e9e] ***モーションプログラム [#s04f1e9e]


トップ   差分 リロード印刷に適した表示   全ページ一覧 単語検索 最新ページの一覧   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom