Геометрия SCARA робота
engineering_ru — 16.12.2018Помогите люди добрые, горю. Собрал конструкцию 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. Место в коде, где вычисляются углы нашёл, но там какая-то вакханалия.
В общем если кто-то подскажет как решить, мы с Тыквой будем
очень признательны.
|
</> |