Проблема сингулярности в обратном кинематическом решателе

9

Я борюсь с этой проблемой в течение нескольких дней. Я действительно надеюсь, что кто-то может дать мне подсказку, в чем проблема.

Робот состоит из 5 осей. Первая ось вращается вокруг оси z, а остальные 4 оси вращаются вокруг оси y. И решатель в основном работает.

Вот что я сделал до сих пор:

  1. Я вычисляю коэффициент управляемости с помощью своей матрицы Якоби (только трансляционная часть, поскольку здесь отслеживается только позиция. На самом деле, я также пытался с комбинированной матрицей Якоби, так что не только трансляционная часть, но и вращательная часть. Но резкое движение было там тем не мение):

  2. Тогда коэффициент демпфирования составляет:

    введите описание изображения здесь

  3. Коэффициент демпфирования затем интегрируется в псевдообратный расчет:

введите описание изображения здесь

Как видите, это просто классический псевдообращенный кинематический решатель с методом демпфирования наименьших квадратов. Коэффициент управляемости в соответствии со вторым (проблемным) движением: введите описание изображения здесь Управляемость падает в начале видео. Но почему? Насколько я знаю, этот фактор управляемости указывает на линейную зависимость осей. Мне кажется, что оси не являются линейно зависимыми в начальной части.

Это резкое движение сводит меня с ума. Как видно из первой анимации, решатель, кажется, работает правильно. Что мне здесь не хватает?

Джо
источник
1
Добро пожаловать в робототехнику , Джо! Это фантастический вопрос, но, к сожалению, я не думаю, что есть достаточно деталей, чтобы ответить на вопрос. Когда система переходит в сингулярность, я ожидаю, что какая-то ось движения совершит дикий поворот, например, одна ось качается на 180 градусов, потому что другая пытается подняться от 89 до 91 градуса (если бы 90 градусов была сингулярностью). Я не вижу такого поведения здесь. Мне интересно, если это больше проблема реализации, например, использование чего-то вроде atanвместо atan2и т. Д. Не могли бы вы отредактировать свой вопрос, чтобы опубликовать код, который вы используете?
Чак
1
@ Чак, я отредактировал вопрос так, чтобы можно было увидеть "дикие колебания". (посмотрите на обновленную анимацию 2.)
Джо

Ответы:

1

Как уже отмечали другие, должна быть проблема с вашей реализацией алгоритма IK, так как в описаниях, которые вы дали, не должно быть никакого особого поведения.

Теперь у вас есть две альтернативы: либо вы начинаете отладку кода, либо можете использовать тот факт, что проблема может быть легко разбита на две подзадачи, для которых вы можете легко использовать большую часть написанного кода.

Учитывая желаемую 3D цель , легко заметить, что желаемое значение первого сустава: .(xd,yd,zd)θ1d=arctan(ydxd)

Закон управления для приведения первого соединения манипулятора к может быть простым:θ1d

θ1˙=K1(θ1dθ1).

Тогда пусть будет матрицей, которая учитывает вращение вокруг оси :RSO(3)θ1dz

R=(cosθ1dsinθ1d0sinθ1dcosθ1d0001).

Через вы получите новую цель которая создаст новую плоскую задачу IK 2D в плоскости .R(xd,0,zd)1=RT(xd,yd,zd)Txz

На этом этапе вы можете решить для , используя якобиан оставшегося 4-DOF манипулятора.(xd,zd)1

Уго Паттачини
источник
Я думаю, что нет необходимости разбивать проблему в подзадачах. Поскольку объявление единичного вектора уже указывает на то, что вы только что описали.
Джо,
Разбивка - это просто предложение позволить вам повторно использовать якобиан 4 DOF, который является частью вашего кода, работающего без сбоев, как вы сообщали в начале вашего поста.
Уго Паттачини
0

Я думаю, что вы ввели алгоритмическую особенность на первой оси запястья. Мне кажется, что, когда он достигает 90 градусов «вниз», вместо того, чтобы идти к 91, он пытается отскочить назад от нуля до -269 градусов.

Конечно, это умозрительно, не видя код.

SteveO
источник