2: 2011-07-20 (水) 20:30:04 yoshida | 3: 2011-07-22 (金) 13:13:29 yoshida | ||
---|---|---|---|
Line 2: | Line 2: | ||
*プログラミング1 [#u69e0124] | *プログラミング1 [#u69e0124] | ||
**処理の流れを図にする [#led7845e] | **処理の流れを図にする [#led7845e] | ||
- | まずは左に置いたものを右に移動するだけの簡単な動作とします。 | + | 左に置いたものを右に移動するだけの簡単な動作とします。本体の左を初期位置として、右を終了位置とします。 |
#ref(flow.png) | #ref(flow.png) | ||
- | **プログラム [#jd364247] | + | |
- | 取りあえずプログラムを作成してみましょう。 | + | **移動終了まで待つには [#lc37a04a] |
+ | AX-12+へゴールポジションを指定することで、簡単に移動は可能ですが、移動するにはどうしても時間が必要になります。~ | ||
+ | 移動指示後、一定時間[[fd_Wait>FDIIILIB#o4813042]]で停止してもよいのですが、Dynamixelのコントロールテーブルに[[Moving>DXTABLE1#jf0f3fa1]]というアイテムがあります。AX-12+が稼働しているかどうかはこのアイテムを参照することで判断することができます。 | ||
#html{{ | #html{{ | ||
<pre class="brush:c"> | <pre class="brush:c"> | ||
- | #include <fd.h> | + | uint8_t Moving = 1; |
- | void main (void) { | + | while (!fd_GetPB () && Moving) { |
- | // 初期化 | + | DX_ReadByteData (1, ADDRESS_MOVING, &Moving, 10, NULL); |
- | fd_SetBeepCondition (FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP); | + | fd_Wait (10); |
- | fd_SetUVThreshold (7.4); | + | } |
- | DX_ChangeBaudrate (1000000); | + | |
- | fd_DXSetTorqueLimit (1, 154); // トルクリミット設定 | + | |
- | fd_DXSetTorqueLimit (2, 154); | + | |
- | fd_DXSetTorqueLimit (3, 154); | + | |
- | fd_DXSetTorqueLimit (4, 154); | + | |
- | fd_DXSetTorqueLimit (5, 154); | + | |
- | fd_DXSetPosition (1, 767); // 初期位置へ移動 | + | |
- | fd_DXSetPosition (2, 665); | + | |
- | fd_DXSetPosition (3, 665); | + | |
- | fd_DXSetPosition (4, 665); | + | |
- | fd_DXSetPosition (5, 350); | + | |
- | } | + | |
</pre> | </pre> | ||
}} | }} | ||
- | **移動終了まで待つ [#lc37a04a] | + | **プログラミング [#w7cdd002] |
- | フロー上の「初期位置へ移動」まで記述しました。移動自体は | + | 移動終了を検知することができるようになりましたので、まずは初期位置へ移動します。 |