У меня есть 2-сегментная роботизированная рука, которая должна достигать определенной точки, настраивая ее суставы (углы).Как определить поворот 2 сегментов руки на основе целевой точки?
Вот чертеж установки:
Моя рука расположена в середине эскиза таким образом мое происхождение (ширина/2,0). Значения, которые я знаю: Длина: Первый сегмент (L1): 140 мм. Второй сегмент (L2): 180 мм. Расстояние между точкой начала и конечной точкой. (используя dist()).
Эти длины образуют треугольник. Таким образом, используя законы тригонометрического, я могу найти углы треугольника, которые являются углами, которые я хочу использовать, чтобы расположить руку так, чтобы она достигла целевой точки.
Теперь я хочу нарисовать треугольник на экране, используя среду обработки для моделирования. Я применил некоторые преобразования, чтобы нарисовать треугольник, но я не получаю правильный рисунок.
Это мой код:
void draw(){
background(100);
translate(width/2,0); // origin
// target
float penX = mouseX-width/2;
float penY = mouseY;
// draw points
ellipse(penX, penY, 20, 20);
ellipse(0,0,20,20);
line(0,0,penX,penY);
// distance from origin to target
float distance = dist(0,0,penX,penY);
// first angle (part of S1)
float b = asin(penY/distance);
arc(0,0,100,100,0,b);
// second angle (part of S1)
float a = acos((pow(L1,2)+pow(distance,2)-pow(L2,2))/(2*L1*distance));
// Angle representing first joint
S1 = a + b; // first joint angle
// Angle representing second joint
S2 = acos((pow(L1,2)+pow(L2,2)-pow(distance,2))/(2*L1*L2)); //second joint angle
//Drawing Triangle:
rotate(S1);
line(0,0,120,0);
translate(120,0);
rotate(-S2);
line(0,0,180,0);}
Я надеюсь, что мое письмо ясно и извините за путаницу.
Я использовал косинусы, чтобы найти внутренние углы, потому что я знаю, длины стороны в любой момент. Разве это недостаточно? – user3458260
@ user3458260 Нет. Вы фактически не знаете все длины, вы знаете только две длины. –
Большое спасибо. Вы очень помогли. Я переосмыслил все это. – user3458260