Использование кватернионов в Якобианском ИКC++

Программы на C++. Форум разработчиков
Anonymous
Использование кватернионов в Якобианском ИК

Сообщение Anonymous »

Я работаю над обратной кинематической системой, используя Jacobian, но я борюсь с созданием Jacobian Matirx, населенного частичными производными для/с кватернионами. На данный момент я использую углы Euler, используя текущую формулу:

где v является локальной осью x, y или z, трансформированная в мировое пространство.
Вот фрагмент кода для этого: < /p>

Код: Выделить всё

    glm::vec3 forward = transforms[parent].forward();
glm::vec3 forwardCross = glm::cross(bone, forward);
ikt.jacobi(index + 0, j + 2) = forwardCross.x;
ikt.jacobi(index + 1, j + 2) = forwardCross.y;
ikt.jacobi(index + 2, j + 2) = forwardCross.z;
< /code>
и после затухания наименьших квадратов я добавляю тета-изменения через Eulers.glm::vec3 oldEul = transforms[child].getEulerRotation();
glm::vec3 eulDelta = { dTheta(jointNum + 0), dTheta(jointNum + 1), dTheta(jointNum + 2) };
transforms[child].setEulerRotation(oldEul + eulDelta);
Этот метод в основном функционален, но разваливается, приближаясь к сингулярности/блокировке ора /п>

Подробнее здесь: https://stackoverflow.com/questions/794 ... acobian-ik

Вернуться в «C++»