roboforum.ru

Технический форум по робототехнике.


Инверсная кинематика - не получается переход от x,y к Q1, Q2

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Инверсная кинематика - не получается переход от x,y к Q1, Q2

Сообщение lennen » 14 июл 2016, 00:28

Работаю с информацией по этой ссылке. 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;


Ну как бы делаю сравнение с опорной точкой. Вроде совпадает. Но если есть неточности - можем обсудить.
lennen
 
Сообщения: 6
Зарегистрирован: 06 ноя 2015, 14:02

Re: Инверсная кинематика - не получается переход от x,y к Q1

Сообщение dccharacter » 14 июл 2016, 00:50

комплексное число у тебя получается, потому что комплексная часть - это фаза, т.е. матлаб тебе ответ дает в виде угол +2nPi, где n - целое число
Тебя волнует же угол в диапазоне от -Pi до +Pi, поэтому просто бери реальную часть ответа и усе.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей


Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8