Почему на выходе я получаю бикватернион у которого в действительной части не единичный кватернион?

Я реализую преобразование поворота и параллельного переноса через дуальные кватернионы для решения прямой задачи кинематики 2-х-звенного манипулятора. На вход я подаю вектор в локальной системе координат в виде дуального кватерниона (в действительной части - единичный кватернион), на выходе ожидаю получить вектор в глобальной системе координат, также в виде дуального кватерниона. Почему на выходе я получаю дуальный кватернион у которого в действительной части не единичный кватернион?

import math
from spatialmath import Quaternion, DualQuaternion
import numpy as np

angle = [45, 90]  # Углы поворота
angle = np.radians(angle)
link = [20, 20]  # Длины звеньев
#вектор 2го звена в локальной системе в виде кватерниона:
link_1=[0, link[1] * math.cos(angle[1]), link[1] * math.sin(angle[1]), 1]
#вектор 2го звена в локальной системе в виде дуального кватерниона:
x=DualQuaternion(Quaternion([1, 0, 0, 0]), Quaternion(link_1))
s=Quaternion([0,  0,  0, 10])#половина вектора смещения
r=Quaternion([math.cos(angle[0] / 2), 0, 0, math.sin(angle[0] / 2)])#ротор
t=DualQuaternion(r,r*s)#дуальный кватернион преобразования
#дуальный кватернион преобразования комплексно и дуально сопряженный:
t_conj=DualQuaternion(r.conj(),(r*s).conj())
g=t*x*t_conj.conj()#само преобразование
print(g)

на выходе получаю

0.7071 < 0.0000, 0.0000, 0.7071 > + ε -14.8492 < 0.0000,  20.0000, 14.8492 >

математику брал отсюда https://youtu.be/roBLI6zcRGs?si=qEnNiFOG1sYx1qF0&t=1831

И еще только сейчас заметил, что на выходе в кватернионе дуальной части должен был получится чистый кватернион, т.е. должно было бы быть [0, x, y, z], а тут -14.8492. Норма кватерниона изменилась


Ответы (0 шт):