11: 2011-08-01 (月) 20:55:16 yoshida |
12: 2011-08-02 (火) 18:34:36 yoshida |
| [[FREEDOM Ⅲライブラリ>FDIIILIB]]には、モーションに関するAPIが用意されていますので、動作をモーションに置き換えてみましょう。~ | | [[FREEDOM Ⅲライブラリ>FDIIILIB]]には、モーションに関するAPIが用意されていますので、動作をモーションに置き換えてみましょう。~ |
| ***概要 [#v0d80198] | | ***概要 [#v0d80198] |
| + | モーションを使用するには必要なidの宣言と初期設定値等を取りまとめた[[TSpec構造体>FDIIILIB#w18bc93a]]を初期処理で使用します。~ |
| + | 又、ホームポジションを設定するため、[[THomePosition構造体>FDIIILIB#fa1e627a]]を合わせて使用します。ホームポジションは各アクチュエータの基準になり、モーションの指定はホームポジションに対する角度の指定となります。~ |
| + | モーションデータを再生するには、どの部分を稼働させるかを指示する[[TApplyPart構造体>FDIIILIB#q3b8aabf]]と、実際のモーションデータである[[TPose構造体>FDIIILIB#y2b4d82e]]を使用します。 |
| + | #ref(outline.png) |
| | | |
- | ****ホームポジション [#i4a94692] | + | ****初期化 [#w63f4eb4] |
- | 基本となる位置を指定します。モーションはホームポジションを基準に指定された角度で動きます。 | + | 初期化には[[fd_SetSpec>FDIIILIB#r0f0534c]]を使用します。~ |
| + | fd_SetSpecはTHomePositionとTSpecを使用して、その内容を登録します。 |
| + | *****ホームポジション [#e87812da] |
| + | モーションで指定する値はホームポジションに対する角度になります。 |
| #html{{ | | #html{{ |
- | <pre class="brush:c;first-line:6"> | + | <pre class="brush:c;first-line:5"> |
| const THomePosition HomePos = { 512, 512, 512, 512, 512 , 512 }; | | const THomePosition HomePos = { 512, 512, 512, 512, 512 , 512 }; |
| </pre> | | </pre> |
| }} | | }} |
- | 今回は全てのAX-12+に対し、512を指定しています。これはAX-12+の出力軸に対し150°の位置指定を行うことになります。 | + | 6軸のアクチュエータに対し、512(出力軸は150°)を指定します。 |
| + | |
| + | *****初期値 [#lbf8e4eb] |
| + | #html{{ |
| + | <pre class="brush:c;first-line:6"> |
| + | const TSpec Spec[] = { |
| + | { 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} }, |
| + | { 3, DEV_AX12, fd_AxisOfs(2), +341, { 64, 512}, 0, 1023, { 1, 1, 32, 32} }, |
| + | { 4, DEV_AX12, fd_AxisOfs(10), +341, { 0, 1023}, 0, 1023, { 1, 1, 32, 32} }, |
| + | { 5, DEV_AX12, fd_AxisOfs(11), +341, { 0, 592}, 0, 1023, { 1, 1, 32, 32} }, |
| + | { 6, DEV_AX12, fd_AxisOfs(12), +341, { 432, 1023}, 0, 1023, { 1, 1, 32, 32} }, |
| + | }; |
| + | </pre> |
| + | }} |
| + | 今回はIDを1~6と設定しているので、それらをオフセット0~5へ割り当てます。オフセットは60の配列の為、59まで使用可能です。TApplyPartで指定するオフセットと対応していればどのような順番であっても問題ありません。 |
| | | |
| ***モーションプログラム [#s04f1e9e] | | ***モーションプログラム [#s04f1e9e] |
| #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) |
- | #define fd_SetHomePosition(a) fd_SetHomePosition((PHomePosition)a) | |
| #define fd_PlayMotion(a,b,c,d,e) fd_PlayMotion((PPose)a,b,c,d,e) | | #define fd_PlayMotion(a,b,c,d,e) fd_PlayMotion((PPose)a,b,c,d,e) |
| | | |
| Part: { fd_AxisOfs(0), fd_AxisOfs(1), fd_AxisOfs(2), fd_AxisOfs(3), fd_AxisOfs(4), fd_AxisOfs(5) } | | Part: { fd_AxisOfs(0), fd_AxisOfs(1), fd_AxisOfs(2), fd_AxisOfs(3), fd_AxisOfs(4), fd_AxisOfs(5) } |
| }; | | }; |
- | | |
- | TPose pose [FD_MAX_POSE_NUM]; | |
| | | |
| /*======================================================================*/ | | /*======================================================================*/ |
| // モーション初期設定 | | // モーション初期設定 |
| fd_SetSpec (&HomePos, Spec, fd_SpecSize (Spec)); | | fd_SetSpec (&HomePos, Spec, fd_SpecSize (Spec)); |
- | // ホームポジションを設定 | |
- | fd_SetHomePosition (HomePos); | |
| // モーション実行 | | // モーション実行 |
| fd_PlayMotion (WorkMotion, 1, sizeof(WorkMotion)/sizeof(TPose), 100, &HandParts); | | fd_PlayMotion (WorkMotion, 1, sizeof(WorkMotion)/sizeof(TPose), 100, &HandParts); |