#sympy #inverse-kinematics
#sympy #обратная кинематика
Вопрос:
Я хочу решить простую 2D обратную кинематическую задачу с помощью Sympy. Я знаю прямое кинематическое уравнение положения x и y.
x = l1*cos(theta1) l2*cos(theta1 theta2)
y = l1*sin(theta1) l2*sin(theta1 theta2)
Как решить значения theta1 и theta2 с помощью Sympy, если я знаю эти два уравнения?
Ответ №1:
Я не думаю, что существует решение этих уравнений, но если бы оно было, вы могли бы использовать следующий метод:
import sympy as sp
# Define symbols
theta1, theta2, l1, l2, x, y = sp.symbols("theta1 theta2 l1 l2 x y")
# Define equations, rearranged so expressions equal 0
eq1 = l1 * sp.cos(theta1) l2 * sp.cos(theta1 theta2) - x
eq2 = l1 * sp.sin(theta1) l2 * sp.sin(theta1 theta2) - y
# Solve for theta1 amp; theta2
solution = sp.solve([eq1, eq2], [theta1, theta2], dict=True)
print(solution)
Я пытался использовать решатель sympy nonlinsolve для аналогичной задачи обратной кинематики, но заметил этот комментарий в документах:
В настоящее время nonlinsolve не способен должным образом решать систему уравнений, имеющих тригонометрические функции. решение может быть использовано для таких случаев (но не дает полного решения)