4: 2011-07-06 (水) 17:01:36 yoshida |
5: 2011-07-06 (水) 17:59:29 yoshida |
| #ref(RobotHand_p10.png, 100%) | | #ref(RobotHand_p10.png, 100%) |
| | | |
- | 閉じる方向へ力を加えると、負荷の値は50や100といった値になります。開く方向へ力を加えると、-50や-100といった値になります。 | + | 閉じる方向へ力を加えると、負荷の値は50や100といった値になります。開く方向へ力を加えると、-50や-100といった値になります。手を閉じて物をはさむ場合、手が開く方向に負荷はかかります。よって負荷はマイナスの値を使用することになります。 |
| | | |
| **手を少しづつ閉じる [#mdb3661c] | | **手を少しづつ閉じる [#mdb3661c] |
| | | |
| 先ずゴールポジションを保存する変数を宣言します。 | | 先ずゴールポジションを保存する変数を宣言します。 |
- | uint16_t GoalPositon = 300は、変数宣言時に予め300という値を入れておくという意味です。 | + | uint16_t GoalPositon = 300は、変数宣言時に予め300という値を入れておくという意味です。~ |
| + | ゴールポジションを1加算して、fd_DXSetPositionでゴールポジションの指定を行います。~ |
| | | |
| + | **処理の流れの見直し [#f5709937] |
| ---- | | ---- |
| + | 今回必要な負荷の値はマイナス値となっていますので、閾値もマイナスの値を使用します。マイナス値はプラスの値と異なり、数字が大きくなればなる程、値としては小さくなります。 |
| + | つまり、マイナスでは-100<-10ですが、プラスでは100>10となります。~ |
| + | [[処理の流れの図>#i00714fa]]では負荷の値<閾値となっていますので、仮に閾値を-100とした場合、手を閉じる判断は負荷の値<-100となってしまいます。これは、開く方向に大きな負荷がかかった場合のみ手を閉じることになってしまうため、マイナス符号を考慮して、以下のように処理の流れを修正します。 |
| | | |
- | 次に負荷の閾値を決めます。~ | + | #ref(flow_2.png,100%) |
- | 手を閉じて物を挟んだ時、負荷は手が開く方向にかかるので、マイナス値となります。閾値がマイナスの場合、[[処理の流れ>#i00714fa]]の条件が一致しませんので、abs関数でマイナス符号を取り払います。負荷の値の閾値を100とします。 | + | |
| + | 処理の流れに合わせて、プログラムを修正します。 |
| | | |
| #ref(gcc_edit_4.png,100%) | | #ref(gcc_edit_4.png,100%) |
- | ---- | |
- | | |
- | 閾値を超えたらfd_DXSetPositionで1加算したゴールポジションを指定します。~ | |
- | | |
- | | |
- | ---- | |
- | 負荷の値と閾値の判断 | |
- | #ref(flow_2.png,100%) | |
| | | |
| **動作確認 [#x3a5a029] | | **動作確認 [#x3a5a029] |
| DX_ChangeBaudrate (1000000); | | DX_ChangeBaudrate (1000000); |
| | | |
- | fd_DXSetTorqueLimit (1, 154); | + | fd_DXSetTorqueLimit (16, 154); |
- | fd_DXSetPosition (1, 300); | + | fd_DXSetPosition (16, 512); |
| | | |
| while (!fd_rx_buff () && !fd_GetPB ()) { | | while (!fd_rx_buff () && !fd_GetPB ()) { |
- | fd_DXGetLoad (1, &LoadData); | + | fd_DXGetLoad (16, &LoadData); |
- | fd_printf ("%4d\r", LoadData); | + | fd_printf ("%5d\r", LoadData); |
- | if (LoadData > -100) { | + | if (LoadData < -100 && LoadData < 0) { |
- | fd_DXSetPosition (1, ++GoalPosition); | + | GoalPosition++; |
| + | fd_DXSetPosition (16, GoalPosition); |
| } | | } |
| fd_Wait (10); | | fd_Wait (10); |