5: 2011-07-11 (月) 12:26:17 yoshida | 6: 2011-07-11 (月) 20:41:22 yoshida | ||
---|---|---|---|
Line 24: | Line 24: | ||
**ブザーを鳴らすからバーを開けるに変更 [#o54aa8b3] | **ブザーを鳴らすからバーを開けるに変更 [#o54aa8b3] | ||
DX_WriteByteDataを削除し、fd_DXSetPositionに変更します。~ | DX_WriteByteDataを削除し、fd_DXSetPositionに変更します。~ | ||
- | #ref(gcc_edit.png,100%) | + | #html{{ |
+ | <pre class="brush:c"> | ||
+ | fd_SetBeepCondition (FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP); | ||
+ | fd_SetUVThreshold (7.4); | ||
+ | DX_ChangeBaudrate (1000000); | ||
+ | |||
+ | while (true) { | ||
+ | DX_ReadByteData (100, 27, &ReadData, 10, NULL); | ||
+ | fd_printf ("%3d\r", ReadData); | ||
+ | if (ReadData > 100) { | ||
+ | DX_WriteByteData (100, 40, 10, 10, NULL); | ||
+ | DX_WriteByteData (100, 41, 10, 10, NULL); | ||
+ | } | ||
+ | fd_Wait (10); | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
+ | #ref(down_arrow.png) | ||
+ | #html{{ | ||
+ | <pre class="brush:c"> | ||
+ | fd_SetBeepCondition (FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP); | ||
+ | fd_SetUVThreshold (7.4); | ||
+ | DX_ChangeBaudrate (1000000); | ||
+ | |||
+ | while (!fd_rx_buff () ) { | ||
+ | DX_ReadByteData (100, 27, &ReadData, 10, NULL); | ||
+ | fd_printf ("%3d\r", ReadData); | ||
+ | if (ReadData > 100) { | ||
+ | fd_DXSetPosition (1, 300); | ||
+ | } | ||
+ | fd_Wait (10); | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
[[fd_DXSetPosition>FDIIILIB#nbe84864]]は指定されたアクチュエータの位置を変更する関数です。~ | [[fd_DXSetPosition>FDIIILIB#nbe84864]]は指定されたアクチュエータの位置を変更する関数です。~ | ||
Line 40: | Line 73: | ||
バーを閉じるにはバーを開く時の反対の条件が必要になります。~ | バーを閉じるにはバーを開く時の反対の条件が必要になります。~ | ||
バーを開く時の条件がif (ReadData > 100)となっていますので、反対の条件はelseとなります。~ | バーを開く時の条件がif (ReadData > 100)となっていますので、反対の条件はelseとなります。~ | ||
- | #ref(gcc_edit_2.png,100%) | + | #html{{ |
+ | <pre class="brush:c"> | ||
+ | #include <fd.h> | ||
+ | void main (void) { | ||
+ | uint8_t ReadData; | ||
+ | |||
+ | fd_SetBeepCondition (FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP); | ||
+ | fd_SetUVThreshold (7.4); | ||
+ | DX_ChangeBaudrate (1000000); | ||
+ | |||
+ | fd_DXSetTorqueLimit (1, 154); | ||
+ | |||
+ | while (!fd_rx_buff ()) { | ||
+ | DX_ReadByteData (100, 27, &ReadData, 10, NULL); | ||
+ | fd_printf ("%3d\r", ReadData); | ||
+ | if (ReadData > 100) { | ||
+ | fd_DXSetPosition (1, 300); | ||
+ | } else { | ||
+ | fd_DXSetPosition (1, 512); | ||
+ | } | ||
+ | fd_Wait (10); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
バーを開く/閉じるはゴールポジションを変更するだけで、同じfd_DXSetPositionを使用します。 | バーを開く/閉じるはゴールポジションを変更するだけで、同じfd_DXSetPositionを使用します。 | ||
**待ち時間を増やす [#u417c1fa] | **待ち時間を増やす [#u417c1fa] | ||
自動ドアは一旦開くとしばらく閉まりません。そのため、10msの停止を2000ms(2秒)の停止へ変更します。 | 自動ドアは一旦開くとしばらく閉まりません。そのため、10msの停止を2000ms(2秒)の停止へ変更します。 | ||
- | #ref(gcc_edit_3.png,100%) | + | #html{{ |
+ | <pre class="brush:c"> | ||
+ | #include <fd.h> | ||
+ | void main (void) { | ||
+ | uint8_t ReadData; | ||
+ | |||
+ | fd_SetBeepCondition (FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP); | ||
+ | fd_SetUVThreshold (7.4); | ||
+ | DX_ChangeBaudrate (1000000); | ||
+ | |||
+ | while (!fd_rx_buff ()) { | ||
+ | DX_ReadByteData (100, 27, &ReadData, 10, NULL); | ||
+ | fd_printf ("%3d\r", ReadData); | ||
+ | if (ReadData > 100) { | ||
+ | fd_DXSetPosition (1, 300); | ||
+ | } else { | ||
+ | fd_DXSetPosition (1, 512); | ||
+ | } | ||
+ | fd_Wait (2000); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
**トルクリミットの設定 [#odb4282e] | **トルクリミットの設定 [#odb4282e] | ||
これで図に書いた一通りの処理のプログラムを書きましたので、書き込んで実行したいところですが、プログラムを一通り書いた後、初めてAX-12+を動かす時に注意する点があります。~ | これで図に書いた一通りの処理のプログラムを書きましたので、書き込んで実行したいところですが、プログラムを一通り書いた後、初めてAX-12+を動かす時に注意する点があります。~ | ||
Line 53: | Line 133: | ||
そうならないようにテスト動作の際はAX-12+のトルクリミットを下げます。トルクリミットとはホーンを動かす力の最大値です。ホーンが回りにくい時、AX-12+は頑張ってホーンを回そうと力を入れます。その力を制限することで壊れることを防ぎます。それでもAX-12+に負担になりますので予期せぬ動きをした場合は、直ぐに電源を切るようにしましょう。 | そうならないようにテスト動作の際はAX-12+のトルクリミットを下げます。トルクリミットとはホーンを動かす力の最大値です。ホーンが回りにくい時、AX-12+は頑張ってホーンを回そうと力を入れます。その力を制限することで壊れることを防ぎます。それでもAX-12+に負担になりますので予期せぬ動きをした場合は、直ぐに電源を切るようにしましょう。 | ||
+ | #html{{ | ||
+ | <pre class="brush:c"> | ||
+ | #include <fd.h> | ||
+ | void main (void) { | ||
+ | uint8_t ReadData; | ||
- | #ref(gcc_edit_4.png,100%) | + | fd_SetBeepCondition (FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP); |
+ | fd_SetUVThreshold (7.4); | ||
+ | DX_ChangeBaudrate (1000000); | ||
+ | fd_DXSetTorqueLimit (1, 154); | ||
+ | |||
+ | while (!fd_rx_buff ()) { | ||
+ | DX_ReadByteData (100, 27, &ReadData, 10, NULL); | ||
+ | fd_printf ("%3d\r", ReadData); | ||
+ | if (ReadData > 100) { | ||
+ | fd_DXSetPosition (1, 300); | ||
+ | } else { | ||
+ | fd_DXSetPosition (1, 512); | ||
+ | } | ||
+ | fd_Wait (2000); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
[[fd_DXSetTorqueLimit>FDIIILIB#u4255df3]]は指定されたアクチュエータのトルクを変更します。 | [[fd_DXSetTorqueLimit>FDIIILIB#u4255df3]]は指定されたアクチュエータのトルクを変更します。 | ||
''第1引数''は、DynamixelのIDです。AX-12+のIDは1です。~ | ''第1引数''は、DynamixelのIDです。AX-12+のIDは1です。~ | ||
- | ''第2引数''は、トルクリミットを指定します。トルクリミットは0~1023まで設定することができます。ここでは154を指定していますので、約15%でトルクが制限されます。 | + | ''第2引数''は、トルクリミットを指定します。トルクリミットは0~1023まで設定することができます。ここでは154を指定していますので、約15%でトルクが制限されます。100%のトルクを得るには1023を指定します。 |
+ | |||
+ | トルク制限を行ってしまうと、必要なトルクが得られないこともあります。その場合は、一旦トルク制限を行い、徐々に制限値を上げていきましょう。 | ||
**動作確認 [#d91d40d3] | **動作確認 [#d91d40d3] | ||
Line 77: | Line 181: | ||
#ref(flow_2.png,100%) | #ref(flow_2.png,100%) | ||
プログラムに反映すると以下のようになります。 | プログラムに反映すると以下のようになります。 | ||
- | #ref(gcc_edit_5.png,100%) | ||
- | |||
- | **再び動作確認 [#lc2b2cb7] | ||
#html{{ | #html{{ | ||
<pre class="brush:c"> | <pre class="brush:c"> | ||
Line 92: | Line 193: | ||
fd_DXSetTorqueLimit (1, 154); | fd_DXSetTorqueLimit (1, 154); | ||
- | while (!fd_rx_buff () && !fd_GetPB ()) { | + | while (!fd_rx_buff ()) { |
DX_ReadByteData (100, 27, &ReadData, 10, NULL); | DX_ReadByteData (100, 27, &ReadData, 10, NULL); | ||
fd_printf ("%3d\r", ReadData); | fd_printf ("%3d\r", ReadData); | ||
Line 106: | Line 207: | ||
</pre> | </pre> | ||
}} | }} | ||
+ | |||
+ | **再び動作確認 [#lc2b2cb7] | ||
修正が完成しました。再びFDIII-HCにプログラムを書き込んで動かしてみましょう。~ | 修正が完成しました。再びFDIII-HCにプログラムを書き込んで動かしてみましょう。~ | ||
如何でしょうか?~ | 如何でしょうか?~ |