Я борюсь с этой проблемой в течение нескольких дней. Я действительно надеюсь, что кто-то может дать мне подсказку, в чем проблема.
Робот состоит из 5 осей. Первая ось вращается вокруг оси z, а остальные 4 оси вращаются вокруг оси y. И решатель в основном работает.
Вот что я сделал до сих пор:
Я вычисляю коэффициент управляемости с помощью своей матрицы Якоби (только трансляционная часть, поскольку здесь отслеживается только позиция. На самом деле, я также пытался с комбинированной матрицей Якоби, так что не только трансляционная часть, но и вращательная часть. Но резкое движение было там тем не мение):
Тогда коэффициент демпфирования составляет:
Коэффициент демпфирования затем интегрируется в псевдообратный расчет:
Как видите, это просто классический псевдообращенный кинематический решатель с методом демпфирования наименьших квадратов. Коэффициент управляемости в соответствии со вторым (проблемным) движением: Управляемость падает в начале видео. Но почему? Насколько я знаю, этот фактор управляемости указывает на линейную зависимость осей. Мне кажется, что оси не являются линейно зависимыми в начальной части.
Это резкое движение сводит меня с ума. Как видно из первой анимации, решатель, кажется, работает правильно. Что мне здесь не хватает?
atan
вместоatan2
и т. Д. Не могли бы вы отредактировать свой вопрос, чтобы опубликовать код, который вы используете?Ответы:
Как уже отмечали другие, должна быть проблема с вашей реализацией алгоритма IK, так как в описаниях, которые вы дали, не должно быть никакого особого поведения.
Теперь у вас есть две альтернативы: либо вы начинаете отладку кода, либо можете использовать тот факт, что проблема может быть легко разбита на две подзадачи, для которых вы можете легко использовать большую часть написанного кода.
Учитывая желаемую 3D цель , легко заметить, что желаемое значение первого сустава: .(Иксd,Yd,Zd) θ1d=arctan(ydxd)
Закон управления для приведения первого соединения манипулятора к может быть простым:θ1d
Тогда пусть будет матрицей, которая учитывает вращение вокруг оси :R∈SO(3) θ1d z
Через вы получите новую цель которая создаст новую плоскую задачу IK 2D в плоскости .R (xd,0,zd)1=RT⋅(xd,yd,zd)T xz
На этом этапе вы можете решить для , используя якобиан оставшегося 4-DOF манипулятора.(xd,zd)1
источник
Я думаю, что вы ввели алгоритмическую особенность на первой оси запястья. Мне кажется, что, когда он достигает 90 градусов «вниз», вместо того, чтобы идти к 91, он пытается отскочить назад от нуля до -269 градусов.
Конечно, это умозрительно, не видя код.
источник