将 DirectTranscription 与 VectorSystem 结合使用
Using DirectTranscription with a VectorSystem
我正在尝试对用户声明的 Vector 或 LeafSystem 使用 DirectTranscription / DirectCollocation 方法,但 运行 转换为 AutoDiffXd 时遇到问题。例如,下面的代码片段:
from pydrake.all import VectorSystem, DirectTranscription
class CustomVectorSystem(VectorSystem):
def __init__(self):
VectorSystem.__init__(self, 1, 1)
self.DeclarePeriodicDiscreteUpdate(0.01)
self.DeclareDiscreteState(1)
def DoCalcVectorOutput(self, context, u, x, y):
y.SetFromVector(x + u)
def DoCalcVectorTimeDerivatives(self, context, u, x, x_dot):
x_dot.SetFromVector(x + u)
def DoCalcVectorDiscreteVariableUpdates(self, context, u, x, x_n):
x_n.SetFromVector(x + u)
sys = CustomVectorSystem()
DirectTranscription(sys, sys.CreateDefaultContext(), 10)
导致此错误:
Traceback (most recent call last):
File "debugging.py", line 24, in <module>
DirectTranscription(sys, sys.CreateDefaultContext(), 10)
RuntimeError: The object named [] of type drake::pydrake::(anonymous)::Impl<double>::PyVectorSystem does not support ToAutoDiffXd.
与 LeafSystem 类似。我尝试通过执行 VectorSystem_[AutoDiffXd] 来构建类型为 AutoDiffXd 的系统,但 DirectTranscription 似乎只接受浮点类型并尝试自行进行转换。
我发现的所有有效的 DirectTranscription 示例都使用 LinearSystem 或在 C++ 代码中定义动态的 Plant——我应该如何声明一个系统以便我可以 运行 DirectTranscription?
您必须添加一点装饰器才能使其适用于 autodiff。请参阅 https://github.com/RussTedrake/underactuated/blob/c976d29192e185ab9aab6808bc608312bb39b8b6/underactuated/quadrotor2d.py#L14
我正在尝试对用户声明的 Vector 或 LeafSystem 使用 DirectTranscription / DirectCollocation 方法,但 运行 转换为 AutoDiffXd 时遇到问题。例如,下面的代码片段:
from pydrake.all import VectorSystem, DirectTranscription
class CustomVectorSystem(VectorSystem):
def __init__(self):
VectorSystem.__init__(self, 1, 1)
self.DeclarePeriodicDiscreteUpdate(0.01)
self.DeclareDiscreteState(1)
def DoCalcVectorOutput(self, context, u, x, y):
y.SetFromVector(x + u)
def DoCalcVectorTimeDerivatives(self, context, u, x, x_dot):
x_dot.SetFromVector(x + u)
def DoCalcVectorDiscreteVariableUpdates(self, context, u, x, x_n):
x_n.SetFromVector(x + u)
sys = CustomVectorSystem()
DirectTranscription(sys, sys.CreateDefaultContext(), 10)
导致此错误:
Traceback (most recent call last):
File "debugging.py", line 24, in <module>
DirectTranscription(sys, sys.CreateDefaultContext(), 10)
RuntimeError: The object named [] of type drake::pydrake::(anonymous)::Impl<double>::PyVectorSystem does not support ToAutoDiffXd.
与 LeafSystem 类似。我尝试通过执行 VectorSystem_[AutoDiffXd] 来构建类型为 AutoDiffXd 的系统,但 DirectTranscription 似乎只接受浮点类型并尝试自行进行转换。
我发现的所有有效的 DirectTranscription 示例都使用 LinearSystem 或在 C++ 代码中定义动态的 Plant——我应该如何声明一个系统以便我可以 运行 DirectTranscription?
您必须添加一点装饰器才能使其适用于 autodiff。请参阅 https://github.com/RussTedrake/underactuated/blob/c976d29192e185ab9aab6808bc608312bb39b8b6/underactuated/quadrotor2d.py#L14