Функция обратной кинематики Pytorch, дающая якобиан тензорного значения 0Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Функция обратной кинематики Pytorch, дающая якобиан тензорного значения 0

Сообщение Anonymous »

Я работаю над функцией обратной кинематики с поддержкой pytorch для трехкомпонентной системы, чтобы воспользоваться преимуществами встроенного метода Якобиана pytorch, и ниже я построил функцию с правильными матрицами вращения.

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

def forward_kinematics_torch(self, joint_parameters):
theta1, theta2, theta3 = joint_parameters

def dh_matrix_tensor(theta, d, a, alpha) -> torch.Tensor:
theta = torch.tensor(theta, requires_grad=True, dtype=torch.float32) if not isinstance(theta, torch.Tensor) else theta
d = torch.tensor(d, requires_grad=True, dtype=torch.float32) if not isinstance(d, torch.Tensor) else d # Cast d to float32
a = torch.tensor(a, requires_grad=True, dtype=torch.float32) if not isinstance(a, torch.Tensor) else a # Cast a to float32
alpha = torch.tensor(alpha, requires_grad=True, dtype=torch.float32) if not isinstance(alpha, torch.Tensor) else alpha # Cast alpha to float32

return torch.tensor([
[torch.cos(theta), -torch.sin(theta) * torch.cos(alpha), torch.sin(theta) * torch.sin(alpha), a * torch.cos(theta)],
[torch.sin(theta), torch.cos(theta) * torch.cos(alpha), -torch.cos(theta) * torch.sin(alpha), a * torch.sin(theta)],
[0, torch.sin(alpha), torch.cos(alpha), d],
[0, 0, 0, 1]], dtype=torch.float32, requires_grad=True) # Specify dtype for the tensor

T1 = dh_matrix_tensor(theta1, 0, self.a1, -1*np.pi/2)

T2 = dh_matrix_tensor(theta2, 0, self.a2, 0)

T3 = dh_matrix_tensor(theta3, 0, self.a3, 0)

T = T1.matmul(T2.matmul(T3))
end_effector_pos = T[:3, 3]
return end_effector_pos
Однако, когда я беру якобиан этой матрицы, используя J = torch.autograd.functional.jacobian(self.forward_kinematics_torch, torch.tensor([theta1,theta2,theta3], require_grad= True), create_graph=True), когда тета равна всем нулям, я получаю тензорную матрицу 3x3, состоящую из всех нулей.
Я знаю, что мои матрицы вращения верны, потому что моя версия функции, не использующая pytorch, работает правильно, поэтому готов поспорить, что это какие-то технические особенности с pytorch, о которых я не знаю, поэтому надеялся, что кто-нибудь сможет помочь мне с ошибка. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... or-value-0
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Более эффективный способ вычисления элементных градиентов (якобиан) в Pytorch при сохранении create_graph
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Более эффективный способ вычисления элементных градиентов (якобиан) в Pytorch при сохранении create_graph
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Функция завихренности, дающая необычный результат
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Функция завихренности, дающая необычный результат
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Функция завихренности, дающая необычный результат
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

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