5: 2011-07-11 (月) 12:26:17 yoshida |
6: 2011-07-11 (月) 20:41:22 yoshida |
| **ブザーを鳴らすからバーを開けるに変更 [#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]]は指定されたアクチュエータの位置を変更する関数です。~ |
| | | |
| バーを閉じるにはバーを開く時の反対の条件が必要になります。~ | | バーを閉じるにはバーを開く時の反対の条件が必要になります。~ |
| バーを開く時の条件が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+を動かす時に注意する点があります。~ |
| | | |
| そうならないようにテスト動作の際は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] |
| #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"> |
| 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); |
| </pre> | | </pre> |
| }} | | }} |
| + | |
| + | **再び動作確認 [#lc2b2cb7] |
| 修正が完成しました。再びFDIII-HCにプログラムを書き込んで動かしてみましょう。~ | | 修正が完成しました。再びFDIII-HCにプログラムを書き込んで動かしてみましょう。~ |
| 如何でしょうか?~ | | 如何でしょうか?~ |