7: 2011-07-12 (火) 13:18:25 yoshida | 現: 2013-04-09 (火) 23:47:49 takaboo | ||
---|---|---|---|
Line 1: | Line 1: | ||
TITLE:ロボットハンドのプログラミング | TITLE:ロボットハンドのプログラミング | ||
|CENTER:BGCOLOR(red):||c | |CENTER:BGCOLOR(red):||c | ||
- | | :idea:|AX-12+に過度な負荷がかかったり、長時間負荷がかかった状態でいたりすると、ロボットハンドで挟んだ物が壊れるだけでなく、AX-12+のギアが欠けたり、モーターが焼けたりする場合があります。プログラミングの際は十分ご注意下さい。| | + | | :idea:|AX-12Aに過度な負荷がかかったり、長時間負荷がかかった状態でいたりすると、ロボットハンドで挟んだ物が壊れるだけでなく、AX-12Aのギアが欠けたり、モーターが焼けたりする場合があります。プログラミングの際は十分ご注意下さい。| |
*プログラミング [#m4a200aa] | *プログラミング [#m4a200aa] | ||
「掴む力を自動的にコントロールするロボットハンド」のプログラムを作成します。 | 「掴む力を自動的にコントロールするロボットハンド」のプログラムを作成します。 | ||
少しづつ手を閉じて行き、物を挟むことで負荷が増加したら手を閉じるのを止めるという方法で、掴む力をコントロールします。 | 少しづつ手を閉じて行き、物を挟むことで負荷が増加したら手を閉じるのを止めるという方法で、掴む力をコントロールします。 | ||
+ | |||
**処理の流れを図にする。 [#i00714fa] | **処理の流れを図にする。 [#i00714fa] | ||
処理の流れを図にしましょう。 | 処理の流れを図にしましょう。 | ||
Line 70: | Line 71: | ||
</pre> | </pre> | ||
}} | }} | ||
- | AX-12+のホーンを回転させれば手は開きますので、[[fd_DXSetPosition>FDIIILIB#nbe84864]]を使用します。~ | + | AX-12Aのホーンを回転させれば手は開きますので、[[fd_DXSetPosition>FDIIILIB#nbe84864]]を使用します。~ |
#ref(AX12Hone.png,100%) | #ref(AX12Hone.png,100%) | ||
- | AX-12+のホーンは0~300°の範囲で動き、それに対するポジション値はそれぞれ0~1023です。 | + | AX-12Aのホーンは0~300°の範囲で動き、それに対するポジション値はそれぞれ0~1023です。 |
#ref(RobotHand_p4.png, 100%) | #ref(RobotHand_p4.png, 100%) | ||
- | 手が開いた状態は、AX-12+のポジションが300の時とします。もし手を反対に付けてしまった場合は、700の時となります(以下300として説明します)。 | + | 手が開いた状態は、AX-12Aのポジションが300の時とします。もし手を反対に付けてしまった場合は、700の時となります(以下300として説明します)。 |
**負荷を読み込む [#n3c87f70] | **負荷を読み込む [#n3c87f70] | ||
- | 先ずAX-12+から読み込んだ負荷の値を保存するための変数を宣言します。負荷を取得する関数([[fd_DXGetLoad>FDIIILIB#e1ca8211]])が用意されていますので、引数として必要なint16_t型で宣言しています。 | + | 先ずAX-12Aから読み込んだ負荷の値を保存するための変数を宣言します。負荷を取得する関数([[fd_DXGetLoad>FDIIILIB#e1ca8211]])が用意されていますので、引数として必要なint16_t型で宣言しています。 |
#html{{ | #html{{ | ||
<pre class="brush:c"> | <pre class="brush:c"> | ||
Line 104: | Line 105: | ||
***[[fd_DXGetLoad>FDIIILIB#e1ca8211]] [#cebc7456] | ***[[fd_DXGetLoad>FDIIILIB#e1ca8211]] [#cebc7456] | ||
アクチュエータの現在の負荷の値を取得します。~ | アクチュエータの現在の負荷の値を取得します。~ | ||
- | ''第1引数''は、DynamixelのIDを指定します。AX-12+のIDは1です。~ | + | ''第1引数''は、DynamixelのIDを指定します。AX-12AのIDは1です。~ |
''第2引数''は、負荷の値を保存する変数のアドレスを指定します。 | ''第2引数''は、負荷の値を保存する変数のアドレスを指定します。 | ||
---- | ---- | ||
Line 119: | Line 120: | ||
#ref(simpleterm.png, 100%) | #ref(simpleterm.png, 100%) | ||
- | **AX-12+の負荷の値 [#a916853d] | + | **AX-12Aの負荷の値 [#a916853d] |
負荷の値を確認するために、手でロボットハンドを開く方向と閉じる方向へ力を加えてみましょう。 | 負荷の値を確認するために、手でロボットハンドを開く方向と閉じる方向へ力を加えてみましょう。 | ||
Line 127: | Line 128: | ||
**手を少しづつ閉じる [#mdb3661c] | **手を少しづつ閉じる [#mdb3661c] | ||
- | 負荷の値によりゴールポジションの値を少しづつ増やしながら、AX-12+に逐次書き込むことで、手を少しづつ閉じる動作を実現します。 | + | 負荷の値によりゴールポジションの値を少しづつ増やしながら、AX-12Aに逐次書き込むことで、手を少しづつ閉じる動作を実現します。 |
+ | #html{{ | ||
+ | <pre class="brush:c"> | ||
+ | #include <fd.h> | ||
+ | void main (void) { | ||
+ | int16_t LoadData; | ||
+ | uint16_t GoalPosition = 300; | ||
- | #ref(gcc_edit_3.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); | ||
+ | fd_DXSetPosition (1, 512); | ||
+ | |||
+ | while (!fd_rx_buff () && !fd_GetPB ()) { | ||
+ | fd_DXGetLoad (1, &LoadData); | ||
+ | fd_printf ("%5d\r", LoadData); | ||
+ | fd_DXSetPosition (1, ++GoalPosition); | ||
+ | fd_Wait (10); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
先ずゴールポジションを保存する変数を宣言します。 | 先ずゴールポジションを保存する変数を宣言します。 | ||
uint16_t GoalPositon = 300は、変数宣言時に予め300という値を入れておくという意味です。~ | uint16_t GoalPositon = 300は、変数宣言時に予め300という値を入れておくという意味です。~ | ||
Line 144: | Line 165: | ||
処理の流れに合わせて、プログラムを修正します。 | 処理の流れに合わせて、プログラムを修正します。 | ||
- | |||
- | #ref(gcc_edit_4.png,100%) | ||
- | |||
- | **動作確認 [#x3a5a029] | ||
#html{{ | #html{{ | ||
<pre class="brush: c"> | <pre class="brush: c"> | ||
Line 159: | Line 176: | ||
DX_ChangeBaudrate (1000000); | DX_ChangeBaudrate (1000000); | ||
- | fd_DXSetTorqueLimit (16, 154); | + | fd_DXSetTorqueLimit (1, 154); |
- | fd_DXSetPosition (16, 512); | + | fd_DXSetPosition (1, 512); |
while (!fd_rx_buff () && !fd_GetPB ()) { | while (!fd_rx_buff () && !fd_GetPB ()) { | ||
- | fd_DXGetLoad (16, &LoadData); | + | fd_DXGetLoad (1, &LoadData); |
fd_printf ("%5d\r", LoadData); | fd_printf ("%5d\r", LoadData); | ||
if (LoadData < -100 && LoadData < 0) { | if (LoadData < -100 && LoadData < 0) { | ||
- | GoalPosition++; | + | fd_DXSetPosition (1, ++GoalPosition); |
- | fd_DXSetPosition (16, GoalPosition); | + | |
} | } | ||
fd_Wait (10); | fd_Wait (10); | ||
Line 175: | Line 191: | ||
}} | }} | ||
+ | **動作確認 [#x3a5a029] | ||
プログラムが完成しました。プログラムを書き込んで動かしてみましょう。 | プログラムが完成しました。プログラムを書き込んで動かしてみましょう。 | ||