2 つのサーボ モーターで構成されるロボット アームがあります。アームがキャンバスの中央に配置され、両方向 (左右) のすべての可能なポイントに移動できるように、逆運動学を計算しようとしています。これはシステムImageのイメージです。最初のサーボは 0-180 (反時計回り) に移動します。2 番目のサーボは 0 ~ 180 (時計回り) に移動します。
これが私のコードです:
int L1 = 170;
int L2 = 230;
Vector shoulderV;
Vector targetV;
shoulderV = new Vector(0,0);
targetV = new Vector(0,400);
Vector difference = Vector.Subtract(targetV, shoulderV);
double L3 = difference.Length;
if (L3 > 400) { L3 = 400; }
if (L3 < 170) { L3 = 170; }
// a + b is the equivelant of the shoulder angle
double a = Math.Acos((L1 * L1 + L3 * L3 - L2 * L2) / (2 * L1 * L3));
double b = Math.Atan(difference.Y / difference.X);
// S1 is the shoulder angle
double S1 = a + b;
// S2 is the elbow angle
double S2 = Math.Acos((L1 * L1 + L2 * L2 - L3 * L3) / (2 * L1 * L2));
int shoulderAngle = Convert.ToInt16(Math.Round(S1 * 180 / Math.PI));
if (shoulderAngle < 0) { shoulderAngle = 180 - shoulderAngle; }
if (shoulderAngle > 180) { shoulderAngle = 180; }
int elbowAngle = Convert.ToInt16(Math.Round(S2 * 180 / Math.PI));
elbowAngle = 180 - elbowAngle;
最初にシステムを起動すると、腕は肩=90、肘=0 でまっすぐになります。正の x 値を指定すると、キャンバスの左側で正しい結果が得られます。ただし、右側にも腕を動かしてほしい。マイナスを入力すると、正しい値が得られません。私は何を間違っていますか?右側のポイントに到達するには追加のサーボが必要ですか?
説明が下手でしたらすみません。英語は私の第一言語ではありません。