Для состояния я определил это как
Код: Выделить всё
MyState = namedview(
"MyState", ["theta", "theta_dot", "phi", "phi_dot"]
)
Код: Выделить всё
@TemplateSystem.define("MyPlant_")
def MyPlant_(T):
class Impl(LeafSystem_[T]):
...
Код: Выделить всё
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]
Спасибо!
Я попытался выполнить автодифференцирование, используя время в качестве входных данных и f(x) в качестве элемента состояния, которое, как я считаю, является символической функцией Дрейка, вычисляемой во время выполнения. (Я могу неправильно понять, что на самом деле делаю.)
Программа выдала ошибку, указывающую, что я использовал неправильные аргументы конструкции для AutoDiffXd, вероятно, входные данные для времени.
Подробнее здесь: https://stackoverflow.com/questions/785 ... ocalctimed