3: 2013-08-02 (金) 20:27:27 yoshida | 4: 2013-08-05 (月) 13:10:51 yoshida | ||
---|---|---|---|
Line 36: | Line 36: | ||
fd_SetSpec (&HomePos, Spec, fd_SpecSize (Spec)); | fd_SetSpec (&HomePos, Spec, fd_SpecSize (Spec)); | ||
- | fd_PlayMotion (&WorkMotion, 1, 1, 100, &HandParts); | + | fd_PlayMotion (&WorkMotion, 1, 1, 100, &HandParts); // ホームポジションへ移動 |
fd_Wait (2000); | fd_Wait (2000); | ||
Line 51: | Line 51: | ||
radD2 = acos(tmpcos2) - acos(tmpcos1); | radD2 = acos(tmpcos2) - acos(tmpcos1); | ||
radD3 = acos(-1) - acos (cosD3); | radD3 = acos(-1) - acos (cosD3); | ||
- | WorkMotion.Structure[0] = (int)(Degrees(radD1) * 10); | + | WorkMotion.Structure[0] = (int)(Degrees(radD1) * 10); // D1の角度 |
- | WorkMotion.Structure[1] = (int)(Degrees(radD2) * 10); | + | WorkMotion.Structure[1] = (int)(Degrees(radD2) * 10); // D2の角度 |
- | WorkMotion.Structure[2] = (int)(Degrees(radD3) * 10); | + | WorkMotion.Structure[2] = (int)(Degrees(radD3) * 10); // D3の角度 |
- | fd_PlayMotion (&WorkMotion, 1, 1, 100, &HandParts); | + | fd_PlayMotion (&WorkMotion, 1, 1, 100, &HandParts); // モーションの再生 |
while (fd_GetMotionStat (&HandParts)) fd_Wait (10); | while (fd_GetMotionStat (&HandParts)) fd_Wait (10); | ||
} | } | ||
Line 61: | Line 61: | ||
** まとめ [#o814be71] | ** まとめ [#o814be71] | ||
- | 座標から角度を算出してモーションでアーム部分を動かすことができるようになりましたが、稼働部分、及び軸間の短さから指定できる座標は狭い範囲となります。~ | + | 指定された座標から角度を算出してモーションでアーム部分を動かすことができるようになりました。~ |
範囲外の座標が指示された場合は途中で計算が破綻をきたしますが、acosの前に値のチェックを入れることで回避することができます。又、atan2はx、y共に0の場合エラーとなりますので、こちらも事前にチェックを行っておきましょう。~ | 範囲外の座標が指示された場合は途中で計算が破綻をきたしますが、acosの前に値のチェックを入れることで回避することができます。又、atan2はx、y共に0の場合エラーとなりますので、こちらも事前にチェックを行っておきましょう。~ | ||
- | さて、IKで角度を算出することはできましたが、実際にモーションとして使用するには移動にかかる時間や軌道の計算、速度の調節等を行わなければなりません。自前で用意するには大変なので、今回はFREEDOM III libraryに用意された関数を使用しました。 | + | さて、IKで角度を算出することはできましたが、実際にモーションとして使用するには移動にかかる時間の指定や軌道の計算、速度の調節等様々な処理が必要となります。自前で用意するには大変なので、今回はFREEDOM III libraryに用意された関数を使用しました。~ |
** 課題 [#xf0a3d27] | ** 課題 [#xf0a3d27] | ||
取り外したハンド部分のAX-12+を分解してアーム部分を延長してみましょう。~ | 取り外したハンド部分のAX-12+を分解してアーム部分を延長してみましょう。~ | ||
産業用のロボットアームに近い構成にすることができます。~ | 産業用のロボットアームに近い構成にすることができます。~ | ||
+ | #ref(agenda_arm.png) | ||
+ | 又、これまでのプログラムでは指定座標のXが-(マイナス)になるとD1が反転してしまいます。これを反転させないようにするにはどうすればよいでしょうか。~ | ||
+ | ヒントは指定座標からD3をベクトルとし、Y軸を面として考えることです。 | ||
[[FDIII-HC Starter Kit Guide>LEARNINGGUIDE]]へ戻る | [[FDIII-HC Starter Kit Guide>LEARNINGGUIDE]]へ戻る |