Технический форум по робототехнике.
Homamilae » 10 апр 2010, 12:59
Duhas писал(а):ну тут уже правильно Dead говорил, перед вычислением арккосинуса простыми ИФ-ами проверяйте четверть и все...
ПС мы обратную считали поисковыми методами...
А где можно почитать про эти поисковые методы?
Насчет If'ов: Простыми if'ами тут не отделаешься. В обратной задаче все сложнее, т.к. 5 углов и 3 координаты, углы не из начала координат. Dead говорил про виртуальную пружину, которая реагирует на переход угла в другую четверть. У функции arccos переход плавный, там не на что реагировать. А у arctg происходит скачок, там можно поставить эту самую виртуальную пружину (в матлабе, кстати она есть). Может есть алгоритм расчета обратной задачи, где все углы находятся arctg-ами?
Duhas » 10 апр 2010, 13:18
ну как это не отделаешься ??
у вас проблема с аркосинусом.. можете процедуру написать и вставить ее вместо стандартной арккос, в которой будете сначала входные данные для функции арккос проверять ИФ-ами...
или мы вас не правильно понимаем..
тогда приведите примеры входных данных и верного результата - данных и неверного результата
поисковые методы - например симплексный или случайный поиск... ГА и т.д... в таком случае берутся некоторые значения углов сочленений, считается прямая задача, на основе расхождений цели и полученных координат взятые значения смещаются... и так далее.. минус в том, что не определено время поиска... но не нужно всегда считать всю математику... из расчетов - только прямая задача остается...
Angel71 » 10 апр 2010, 14:25
файлик утром отправил, письмо пришло?
попробуйте погуглить "matlab inverse kinematics", на вскидку инфы много.
Homamilae » 10 апр 2010, 15:58
Duhas писал(а):ну как это не отделаешься ??
у вас проблема с аркосинусом.. можете процедуру написать и вставить ее вместо стандартной арккос, в которой будете сначала входные данные для функции арккос проверять ИФ-ами...
или мы вас не правильно понимаем..
тогда приведите примеры входных данных и верного результата - данных и неверного результата
поисковые методы - например симплексный или случайный поиск... ГА и т.д... в таком случае берутся некоторые значения углов сочленений, считается прямая задача, на основе расхождений цели и полученных координат взятые значения смещаются... и так далее.. минус в том, что не определено время поиска... но не нужно всегда считать всю математику... из расчетов - только прямая задача остается...
1. Как я могу проверять входные данные для arccos, если у меня 4 угла и они выходят не из начала координат? соответственно вариант "x<0, y>0" не подходит. Потому-что четверть меняется уже не зависимо от их значений.
2. Пример я выложила в коде, он как раз дает неправильное значение, т.к. углы вычисляются не из тех четвертей.
Добавлено спустя 45 секунд:Angel71 писал(а):файлик утром отправил, письмо пришло?
попробуйте погуглить "matlab inverse kinematics", на вскидку инфы много.
Да, только сейчас удалось дорваться до почты

Спасибо большое буду смотреть

Duhas » 10 апр 2010, 15:59
ну искать по коду пример не оч удобно )
Homamilae » 10 апр 2010, 16:32
Duhas писал(а):ну искать по коду пример не оч удобно )
Просто если код в matlab вставить он очень наглядные графики чертит.

Примером является весь код...
Алгоритм вычисления обратной задачи очень длинный... трудно на пальцах объяснить

Duhas » 10 апр 2010, 17:01
оспади.. вы что функции arccos скармливаете ? всю обратную задачу? нет! одно число! или я чего то не понимаю...
ПС матлаб еще не был установлен после сноса форточки
Homamilae » 10 апр 2010, 17:38
Duhas писал(а):оспади.. вы что функции arccos скармливаете ? всю обратную задачу? нет! одно число! или я чего то не понимаю...
ПС матлаб еще не был установлен после сноса форточки
Это вкратце:
- Код: Выделить всё • Развернуть
%Обратная задача
a2=431.8; s2=149.09; a3=433.07; s6=56.25;
qi=pi/3;
qi2=pi/3;
a13=sin(qi)*sin(qi2);
a23=-sin(qi)*cos(qi2);
a33=cos(qi);
wx=cs1-s6*a13;
wy=cs2-s6*a23;wz=cs3-s6*a33;
r=sqrt(wx.^2+wy.^2+wz.^2-s2^2);
q=asin(wz./r)
cq3=(a2^2-r.^2+a3^2)/(2*a2*a3);
q3=acos(cq3);
b=acos((a2^2+r.^2-a3^2)./(2*a2.*r));
q2=b+q;
v=-s2.*wy-r.*cos(q).*wx;
m=-s2.*wx+r.*cos(q).*wy;
q1=atan2(v,m);
q5=acos(sin(qi).*sin(q1).*sin(q2+q3)+cos(qi).*cos(q2+q3))
q4=acos(-sin(qi2).*sin(q1)+cos(qi2)*cos(qi).*cos(q1);
Более понятное описание (и тоже короткое), в методичке, которую я выкладывала, выделено красным.
Duhas » 10 апр 2010, 20:56
вот у вас есть:
acos(-sin(qi2).*sin(q1)+cos(qi2)*cos(qi).*cos(q1)
где, по-видимому, потеряна скобка.. вот то что у скобках у acos проверяйте ифами... на предмет нужной четверти...
acos((a2^2+r.^2-a3^2)./(2*a2.*r)) и тут также.. .чтобы вам не портить читаемость, напишите процедуру, например, my_acos в которой сначала будут ИФ-ы а потом cам acos...
Homamilae » 10 апр 2010, 21:24
Duhas писал(а):вот у вас есть:
acos(-sin(qi2).*sin(q1)+cos(qi2)*cos(qi).*cos(q1)
где, по-видимому, потеряна скобка.. вот то что у скобках у acos проверяйте ифами... на предмет нужной четверти...
acos((a2^2+r.^2-a3^2)./(2*a2.*r)) и тут также.. .чтобы вам не портить читаемость, напишите процедуру, например, my_acos в которой сначала будут ИФ-ы а потом cам acos...
А какие я буду писать условия? Если угол не в начале координат? Здесь уже нет прямой определяемой зависимости от x, y, z. На что я должна ссылаться в Ифах? Если бы там был не arccos а arctg, то там при переходе в другую четверть хотябы скачек углов был, его можно устранить. А arccos непрерывная функция. Там вообще непонятно когда переход угла в другую четверть...
executer » 10 апр 2010, 21:41
все тут говорят гдето про следующее:
- Код: Выделить всё • Развернуть
real my_acos(real:x)
{
if(x>=0) return acos(x) else return(-acos(abs(x)))
}
и в коде уже вызывайте свой my_acos(-sin(qi2).*sin(q1)+cos(qi2)*cos(qi).*cos(q1))
Homamilae » 10 апр 2010, 21:58
executer писал(а):все тут говорят гдето про следующее:
- Код: Выделить всё • Развернуть
real my_acos(real:x)
{
if(x>=0) return acos(x) else return(-acos(abs(x)))
}
и в коде уже вызывайте свой my_acos(-sin(qi2).*sin(q1)+cos(qi2)*cos(qi).*cos(q1))
Я понимаю о чем речь... Но вот это условие if(x>=0) - в данном случае не работает, т.е. при положительных координатах x,y, угол может быть как положительным так и отрицательным. Поэтому точно определить переход в данном случае я не могу... Если конечно нет какого-то специального условия, о котором я не знаю... А вот arctg может мне предоставить эти условия... Т.е. мне нужен алгоритм обратной задачи, который высчитывает углы arctg-ами.
Добавлено спустя 3 минуты 49 секунд:Angel71 писал(а):файлик утром отправил, письмо пришло?
попробуйте погуглить "matlab inverse kinematics", на вскидку инфы много.
Angel71, Хочу вас поблагодарить за книгу

Там как раз про Пуму и арктангенсами

)) То что доктор прописал

Angel71 » 10 апр 2010, 22:14
пожалуйста. просмторел её на днях бегло. скелетное представление есть, векторы видел, углы эйлера упоминались, матрицы поворота тоже есть. книженция вроде считается классикой жанра.

а вот использование кватерионов не обнаружил.

в общем "забил" на неё.
Homamilae » 10 апр 2010, 23:10
Angel71 писал(а):пожалуйста. просмторел её на днях бегло. скелетное представление есть, векторы видел, углы эйлера упоминались, матрицы поворота тоже есть. книженция вроде считается классикой жанра.

а вот использование кватерионов не обнаружил.

в общем "забил" на неё.
У меня есть книжулька какая-то про кватернионы в техническом зрении и робототехнике, малюсенькая такая (15 стр.), я до нее так и не добралась, поэтому не оценила еще ее пользы... Если интересно могу сбросить... Там по крайней мере есть ссылки на другие книжки про кватернионы

Angel71 » 10 апр 2010, 23:43

не, спасибки.

я недавно десятками гиг выкачивал всякого обучающего видео и книжек по физике, математике,...

хоть бы это переварить