14: 2011-08-03 (水) 14:41:34 yoshida ソース 15: 2011-08-03 (水) 16:40:07 yoshida ソース
Line 139: Line 139:
''第5引数''は、モーションを再生部位を指定した[[TApplyPart構造体>FDIIILIB#q3b8aabf]]変数のアドレスです。~ ''第5引数''は、モーションを再生部位を指定した[[TApplyPart構造体>FDIIILIB#q3b8aabf]]変数のアドレスです。~
*****[[TPose構造体>FDIIILIB#y2b4d82e]] [#ra67c632] *****[[TPose構造体>FDIIILIB#y2b4d82e]] [#ra67c632]
-ホームポジションからの角度情報を指定します。+ホームポジションからの角度情報を指定します。ポーズが1つでも、配列として宣言します。 
#html{{ #html{{
<pre class="brush:c;toolbar:false"> <pre class="brush:c;toolbar:false">
Line 147: Line 148:
</pre> </pre>
}} }}
-6軸全てを0°としており、ホームポジション位置への移動を指示します。~+上記は6軸全てを0°としており、全てのAX-12+をホームポジション位置へ移動させます。~
*****[[TApplyPart構造体>FDIIILIB#q3b8aabf]] [#fdec1af9] *****[[TApplyPart構造体>FDIIILIB#q3b8aabf]] [#fdec1af9]
-モーションは[[TApplyPart>FDIIILIB#q3b8aabf]]で設定された部位単位に動きます。1つのアクチュエータを複数の部位で使用しても問題ありません。+アクチュエータを取りまとめた部位の設定を行います。~ 
-但し、その場合はPriorityが有効になります。+アクチュエータの指定はIDではなく、[[TSpec>FDIIILIB#w18bc93a]]で宣言したオフセット値を使用します。
 +又、1つのアクチュエータを複数の部位で使用しても問題ありませんが、その場合はPriorityが有効になります。
#html{{ #html{{
<pre class="brush:c;toolbar:false"> <pre class="brush:c;toolbar:false">
Line 173: Line 175:
Priorityは小さい方が優先となりますので、AllPart>HandPart>ArmPartの順になります。 Priorityは小さい方が優先となりますので、AllPart>HandPart>ArmPartの順になります。
#ref(motion2_1.png) #ref(motion2_1.png)
-HandPartを使用したモーションが稼働中にAllPartを使用したモーションを稼働させると、HandPartを使用したモーションは無効となりAllPartを使用したモーションのみが稼働します。~ +ArmPartを使用したモーションを再生するとID1~3が稼働します。
-AllPartとHandPartのPriorityを逆転させてみましょう。+
#ref(motion2_2.png) #ref(motion2_2.png)
-AllPartのモーション稼働時にHandPartのモーションが稼働すると、ID1~3はAllPartのモーションがそのまま稼働し、ID4~6はHandPartのモーションが稼働します。+ArmPartのモーション再生中にAllPartを使用したモーションを再生すると、ArmPartを使用したモーションは無効となりAllPartを使用したモーションで置き換わります。~ 
 +#ref(motion2_3.png) 
 +それではAllPartとHandPartのPriorityを逆転させてみましょう。 
 +#ref(motion3_1.png) 
 +AllPartのモーションを再生するとID1~6が稼働します。 
 +#ref(motion3_2.png) 
 +AllPartのモーション再生中にArmPartを使用したモーションを再生すると、ID1~3までがArmPartを使用したモーションで置き換わります。ID4~6はHandPartのモーションが稼働します。 
 +#ref(motion3_3.png)
-*****[[TPose構造体>FDIIILIB#y2b4d82e]] [#if4363ee+***モーションプログラム [#s04f1e9e
-モーションデータになります。部位と合わせて使用します。+それでは物を掴んで移動する一連の動作をプログラムにします。
#html{{ #html{{
<pre class="brush:c;toolbar:false"> <pre class="brush:c;toolbar:false">
-const TPose HomePos[] = { 
-  { Structure:{ 0, 0, 0, 0, 0, 0 },  Adj:ADJ_SACC_SDECEL, Div:1000, }, 
-}; 
-</pre> 
-}} 
-モーションデータは配列で宣言して下さい。又、[[TSpec>FDIIILIB#w18bc93a]]で宣言したアクチュエータ分、作成して下さい。 
- 
-***モーションプログラム [#s04f1e9e] 
-物を掴んで移動する一連の動作をプログラムにします。 
-#html{{ 
-<pre class="brush:c"> 
#include <fd.h> #include <fd.h>
#define fd_SetSpec(a,b,c)                  fd_SetSpec((PHomePosition)a,(PSpec)b,c) #define fd_SetSpec(a,b,c)                  fd_SetSpec((PHomePosition)a,(PSpec)b,c)
Line 201: Line 198:
  { 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} },
  { 2, DEV_AX12, fd_AxisOfs(1), +341, {  390,  818},  0, 1023, { 1, 1, 32,  32} },   { 2, DEV_AX12, fd_AxisOfs(1), +341, {  390,  818},  0, 1023, { 1, 1, 32,  32} },
-  { 3, DEV_AX12, fd_AxisOfs(2), +331, {  64,  512},  0, 1023, { 1, 1, 32,  32} }, +  { 3, DEV_AX12, fd_AxisOfs(2), +341, {  64,  512},  0, 1023, { 1, 1, 32,  32} }, 
-  { 4, DEV_AX12, fd_AxisOfs(3), +331, {    0, 1023},  0, 1023, { 1, 1, 32,  32} }, +  { 4, DEV_AX12, fd_AxisOfs(3), +341, {    0, 1023},  0, 1023, { 1, 1, 32,  32} }, 
-  { 5, DEV_AX12, fd_AxisOfs(4), +331, {    0,  592},  0, 1023, { 1, 1, 32,  32} }, +  { 5, DEV_AX12, fd_AxisOfs(4), +341, {    0,  592},  0, 1023, { 1, 1, 32,  32} }, 
-  { 6, DEV_AX12, fd_AxisOfs(5), +331, {  432, 1023},  0, 1023, { 1, 1, 32,  32} },+  { 6, DEV_AX12, fd_AxisOfs(5), +341, {  432, 1023},  0, 1023, { 1, 1, 32,  32} },
}; };
TApplyPart HandParts = {  // 全軸ロボットハンド TApplyPart HandParts = {  // 全軸ロボットハンド
Line 256: Line 253:
}} }}
-***解説 [#j28efc99] +少しは滑らかに動くようになったのではないでしょうか。~ 
-少しは滑らかに動いたのではないでしょうか。では、モーションの使用について説明します。+では、最後に決められた角度で移動するのではなく、移動したい位置を元に角度を算出してみましょう。 
 + 
 +**キネマティック演算 [#h72950e8]


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