14: 2013-08-07 (水) 18:39:00 yoshida  |
現: 2013-08-07 (水) 20:15:33 yoshida  |
| | #ref(triangle3D.png) | | #ref(triangle3D.png) |
| | 指令値を出すため、もう一つ三角形を作ります。D2からZ軸に沿ってposの位置まで移動した点をjとし、D2、j、posを頂点とした直角三角形を作成します。D2の指令角度はこの三角形のD2の角度から先ほど求めたD2の角度を差し引きした角度になります。~ | | 指令値を出すため、もう一つ三角形を作ります。D2からZ軸に沿ってposの位置まで移動した点をjとし、D2、j、posを頂点とした直角三角形を作成します。D2の指令角度はこの三角形のD2の角度から先ほど求めたD2の角度を差し引きした角度になります。~ |
| | + | 但し、D2とD3のAX-12+は逆向きに結合しているので、位置を指定する際には注意が必要です。~ |
| | | | |
| | 最後にD1の角度をアークタンジェントで求めれば角度計算は終了です。 | | 最後にD1の角度をアークタンジェントで求めれば角度計算は終了です。 |
| | #include <math.h> | | #include <math.h> |
| | #include <fd.h> | | #include <fd.h> |
| - | double pos[3] = { 80.0, 0, 50.0 }; // 座標(x, y, z) | + | double pos[3] = { 70.0, 70.0, 130.0 }; // 座標(x, y, z) |
| - | const int L[4] = { 42, 27, 68, 40 }; // 軸間の長さ | + | const int L[4] = { 42, 27, 83, 55 }; // 軸間の長さ |
| | | | |
| | // RadianからDegreeへ変換 | | // RadianからDegreeへ変換 |
| | uint16_t Position (double rad) { | | uint16_t Position (double rad) { |
| | return 512 + Degree(rad) * 3.41; | | return 512 + Degree(rad) * 3.41; |
| | + | } |
| | + | uint16_t Position2 (double rad) { |
| | + | return 512 - Degree(rad) * 3.41; |
| | } | | } |
| | | | |
| | fd_DXSetPosition (1, Position(radD1)); | | fd_DXSetPosition (1, Position(radD1)); |
| | fd_DXSetPosition (2, Position(radD2)); | | fd_DXSetPosition (2, Position(radD2)); |
| - | fd_DXSetPosition (3, Position(radD3)); | + | fd_DXSetPosition (3, Position2(radD3)); |
| | } | | } |
| | </pre> | | </pre> |