[identity profile] lonely-war.livejournal.com posting in [community profile] engineering_ru
upd. Спасибо за помощь, получилось, в комментах выложил скрин решения

Помогите люди добрые, горю. Собрал конструкцию scara робота. Принцип управления немного отличается от общепринятого - на осях у меня стоят переменные резисторы, которые вращаются вместе с ними. В динамике измеряю сопротивление, аппроксимирую и знаю на какой угол в данный момент смещены рёбра конструкции.


Через углы довольно просто вычислить текущие координаты оголовка манипулятора. Но чтобы управлять им, мне нужно решить обратную задачу. И не получается.



Геометрически задача выглядит так:


Через координаты x и y нужно вычислить углы alfa и beta. Я пробовал через синусы косинусы.
Застрял на необходимости разложить арксинус разности.


Потом подумал, у нас же точка соединения рёбер это точка пересечения двух окружностей. На каком-то этапе пришлось возводить обе части уравнения в квадрат и соответственно терять корни. Ну да леший бы с ними. Всё равно результат уравнения не совпал с геометрическим построением. Как так может получиться не понимаю, в чём-то ошибся что ли.

math.sqrt((math.pow(y*y+x*x,2)-4*y*y*l*l)/(4*x*x-4*y*y))


Ещё нашёл вот такую картинку. Забитые по ней формулы дали примерно правильный результат, но они теряют знак. У меня вторая соединительная ось манипулятора может заходить в отрицательную зону, угол alfa может быть меньше нуля. А формула всегда даёт абсолютное значение.


beta = math.acos((x*x+y*y-l*l-l*l)/(2*l*l))

beta / math.pi * 180

gamma = math.acos((x*x+y*y+l*l-l*l)/(2*l*math.sqrt(x*x+y*y)))

gamma / math.pi * 180

alfa = beta / 2 - (math.pi / 2 - gamma)

alfa / math.pi * 180



Пробовал смотреть исходники Marlin от vitaminred. Место в коде, где вычисляются углы нашёл, но там какая-то вакханалия.


В общем если кто-то подскажет как решить, мы с Тыквой будем очень признательны.



Date: 2018-12-16 10:42 am (UTC)
From: [identity profile] aterentiev.livejournal.com
Вполне инженерная задача, зачем удалять?

Предлагаю такой вариант:
Посчитать геометрически треугольник, с одной стороной (0,0)-(X,Y), а двумя другими L1 и L2, он раскладывается на два прямоугольных, это просто, надо найти углы.
А затем, зная угол к (0,0)-(X,Y), поворачиваем. Решения в общем виде два (нормальный треугольник), в пределе одно (вырожденный при L1+L2=lX,Yl, за пределами ни одного.

Date: 2018-12-16 11:18 am (UTC)
From: [identity profile] matabuba.livejournal.com
помойму в матлабе обратная кинематика есть

Date: 2018-12-16 12:34 pm (UTC)
From: [identity profile] urpek.livejournal.com
Из центра (X,Y) проводишь окружность радиуса L2, из центра (0,0) - окружность радиуса L1, находишь точки их пересечения. Дальше определить углы - дело техники.

Date: 2018-12-16 12:47 pm (UTC)
From: [identity profile] aso.livejournal.com
Через вектора решать не пробовале?
Ну или через комплексные числа/кватернионы.
Там обычно всё прекрасно алгебраизируется.

Date: 2018-12-16 01:26 pm (UTC)
From: [identity profile] aterentiev.livejournal.com
Ура! ;)

Date: 2018-12-16 01:35 pm (UTC)
From: [identity profile] urpek.livejournal.com
Можете пояснить, почему sin(gamma) равен sqrt(x*x+y*y)/2/L2 ? Кажется, что-то не то.
Так построение, кажется, более простое, чем с окружностями.

Date: 2018-12-16 02:13 pm (UTC)
From: [identity profile] urpek.livejournal.com
Боюсь, что ваше утверждение про k верно только в случае L1==L2

Date: 2018-12-16 02:21 pm (UTC)
From: [identity profile] urpek.livejournal.com
Тогда всё верно, поздравляю с решением!

Profile

engineering_ru: (Default)
Инженерия

December 2025

S M T W T F S
 123456
78910111213
14151617181920
2122232425 2627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 7th, 2026 10:53 pm
Powered by Dreamwidth Studios