Работаю с информацией по этой ссылке.
http://robocraft.ru/blog/mechanics/756.htmlЗадача относительно упрощенная - нужно роборукой взять предмет с поверхности. Можно рассматривать как раз 2 соединения, то есть есть длины L1 и L2, и дано расстояние до точки, к которой роборука должна протянуться - r.
1. Итак, поехали, четко замерил параметры реальной роборуки: L1 = 9.5 см, L2 = 15.5 см. Оценил расстояние до точки - оно лежит в диапазоне от r = 15...25 см. Все чисто, нет?
Для примера берем r = 17 см.
2. Идем дальше.
Код:
B = r; % от точки, откуда начинается роборука, до точки, к которой она тянется
x = r; % y = 0
3. В мануале сказано, что Q1 = q1+q2 для моего случая, но можно вывести, что q1 = 0. Итого:
Код:
Q1 = acos( L1^2 - L2^2 + B^2 / (2*B*L1) );
И тут первый конфьюжн - Q1 - комплексное. С чего это ради? Однако видно, что выражение L1^2 - L2^2 + B^2 / (2*B*L1) = -149.1053 отрицательно. Но физически у меня именно те параметры L1, L2 и B = r, которые приведены выше. Значит, формула не совсем адекватна, или я что-то упустил?
4. В качестве бонуса, так как разобраться бы вообще с пунктом 3. Но ок.
Код:
Q2 = -(pi - acos( L1^2 + L2^2 - B^2 / (2*L1*L2) ));
Не заметно ошибки? А получается тоже комплексное число. Все вычисления делались на MATLAB и вы можете их легко повторить.
Значения получаются в радианах, не так ли?
Добавлено спустя 12 минут 4 секунды:Простите, по-моему, разобрался, если кому интересно:
Код:
clc; clear all; close all;
L1 = 9.5 %cm
L2 = 15.5 %cm
r = 22 %cm
B = r;
x = r;
Q1 = acos( (L1^2 - L2^2 + B^2 )/ (2*B*L1) );
Q2 = -(pi - acos( (L1^2 + L2^2 - B^2) / (2*L1*L2) ));
Q1 = 180*(Q1)/pi;
Q2 = 90-180*(Q2)/pi;
%Q2 = 149, Q1 = 38;
Ну как бы делаю сравнение с опорной точкой. Вроде совпадает. Но если есть неточности - можем обсудить.