在 ForceElement 的子类上调用 super().__init__() 会导致未定义构造函数
Calling super().__init__() on subclass of ForceElement causes No constructor defined
我正在尝试创建自定义 ForceElement
,如下所示
class FrontWheelForce(ForceElement):
def __init__(self, plant):
front_wheel = plant.GetBodyByName("front_wheel")
front_wheel_node_index = front_wheel.index()
pdb.set_trace()
ForceElement.__init__(self, front_wheel.model_instance())
但是在ForceElement.__init__(self, front_wheel.model_instance())
行得到如下错误
TypeError: FrontWheelForce: No constructor defined!
您没有向我们展示 parent 的定义。
我有点惊讶你没有看到这个诊断:
TypeError: object.__init__() takes exactly one argument (the instance to initialize)
我想你正在使用的框架提高了 "no constructor"
提醒您还有更多代码要实现
在使用 parent class.
之前
请查看 here 的 ForceElement
文档; "ForceElement allows modeling state and time dependent forces in a MultibodyTree model"。也就是说,作为车轮扭矩函数的力元素不能建模为 ForceElement
。我相信您想要的是 FrontWheelSystem
,即 LeafSystem
,它输出您想要建模的力。您可以通过任一执行器将模型的外力应用于植物
连接到 get_actuation_input_port()
,或作为连接到 get_applied_spatial_force_input_port()
.
的外部施加的空间力
将几条评论总结成正确答案
作者:ekhumoro
The error message suggests the ForceElement
class does not support subclassing. That is, the python bindings for drake do not wrap the __init__
method for this class - so presumably ForceElement.__init__
will raise an AttributeError
.
作者:埃里克·库西诺
this (ForceElement) is not written as a trampoline class, which is necessary for pybind11 to permit Python-subclassing of a bound C++ class
我正在尝试创建自定义 ForceElement
,如下所示
class FrontWheelForce(ForceElement):
def __init__(self, plant):
front_wheel = plant.GetBodyByName("front_wheel")
front_wheel_node_index = front_wheel.index()
pdb.set_trace()
ForceElement.__init__(self, front_wheel.model_instance())
但是在ForceElement.__init__(self, front_wheel.model_instance())
TypeError: FrontWheelForce: No constructor defined!
您没有向我们展示 parent 的定义。
我有点惊讶你没有看到这个诊断:
TypeError: object.__init__() takes exactly one argument (the instance to initialize)
我想你正在使用的框架提高了 "no constructor" 提醒您还有更多代码要实现 在使用 parent class.
之前请查看 here 的 ForceElement
文档; "ForceElement allows modeling state and time dependent forces in a MultibodyTree model"。也就是说,作为车轮扭矩函数的力元素不能建模为 ForceElement
。我相信您想要的是 FrontWheelSystem
,即 LeafSystem
,它输出您想要建模的力。您可以通过任一执行器将模型的外力应用于植物
连接到 get_actuation_input_port()
,或作为连接到 get_applied_spatial_force_input_port()
.
将几条评论总结成正确答案
作者:ekhumoro
The error message suggests the
ForceElement
class does not support subclassing. That is, the python bindings for drake do not wrap the__init__
method for this class - so presumablyForceElement.__init__
will raise anAttributeError
.
作者:埃里克·库西诺
this (ForceElement) is not written as a trampoline class, which is necessary for pybind11 to permit Python-subclassing of a bound C++ class