Можете ли вы использовать Autodiff с шаблонной листовой системой в PyDrake в DoCalcTimeDerivatives для вычисления произвPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Можете ли вы использовать Autodiff с шаблонной листовой системой в PyDrake в DoCalcTimeDerivatives для вычисления произв

Сообщение Anonymous »

У меня есть шаблонная система Leaf, которая работает с прямым размещением. У меня есть переменная состояния, для которой я хотел бы найти автоматическую производную в функции DoCalcTimeDerivatives. Возможно ли это сделать и как?
Для состояния я определил это как

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

MyState = namedview(
"MyState", ["theta", "theta_dot", "phi", "phi_dot"]
)
Система шаблонов выглядит так:

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

@TemplateSystem.define("MyPlant_")
def MyPlant_(T):
class Impl(LeafSystem_[T]):

...
и для метода DoCalcDerivatives внутри у меня есть:

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

def DoCalcTimeDerivatives(self, context, derivatives):
s = MyState(
context.get_mutable_continuous_state_vector().CopyToVector()
)
...

control_effort = self.EvalVectorInput(context, 0)[0]
sdot = MyState(deepcopy(s))

time = context.get_time()

autodiffTime = AutoDiffXd(time, [1])
theta_dot_autodiff = s.theta_dot(autodiffTime)
theta_ddot = theta_dot_autodiff.derivatives()
sdot.theta_dot = theta_ddot + control_effort
Конечно, когда я пытаюсь использовать это растение в программе, выполняющей прямое сопоставление, возникают ошибки:

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

RuntimeError: Exception while evaluating SNOPT costs and constraints: 'TypeError: __init__(): incompatible constructor arguments. The following argument types are supported:
1. pydrake.autodiffutils.AutoDiffXd(value: float)
2. pydrake.autodiffutils.AutoDiffXd(value: float, derivatives: numpy.ndarray[numpy.float64[m, 1]])
3. pydrake.autodiffutils.AutoDiffXd(value: float, size: int, offset: int)

Invoked with: , [1]
Мне интересно, можно ли реализовать эту идею в Drake, и если да, то как ее правильно реализовать?
Спасибо!
Я попытался выполнить автодифференцирование, используя время в качестве входных данных и f(x) в качестве элемента состояния, которое, как я считаю, является символической функцией Дрейка, вычисляемой во время выполнения. (Я могу неправильно понять, что на самом деле делаю.)
Программа выдала ошибку, указывающую, что я использовал неправильные аргументы конструкции для AutoDiffXd, вероятно, входные данные для времени.

Подробнее здесь: https://stackoverflow.com/questions/785 ... ocalctimed
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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