记录抽象值输出端口
Logging abstract-valued output ports
我找不到 SignalLogger
的抽象值版本。我一直在为抽象值输出编写自定义记录器,例如 ContactResults
:
class ContactResultsLogger(LeafSystem):
def __init__(self, publish_period_seconds: float):
super().__init__()
self.DeclarePeriodicPublish(publish_period_seconds)
self.contact_results_input_port = self.DeclareAbstractInputPort(
'contact_results', AbstractValue.Make(ContactResults()))
self.sample_times = []
self.contact_results_list = []
def DoPublish(self, context, event):
super().DoPublish(context, event)
self.sample_times.append(context.get_time())
self.contact_results_list.append(
copy.deepcopy(self.contact_results_input_port.Eval(context)))
这可行,但是为每种类型的抽象值输出设置一个可能会很乏味。有没有更好的方法来记录抽象值输出?谢谢!
在您说 AbstractValue.Make(ContactResults())
的示例代码中,您可以说 AbstractValue.Make(model_value)
,其中 model_value
是此 class 的一个新的必需构造函数参数。
然后,将 class 重命名为 AbstractValueLogger
并将 contact_results_list
重命名为 values
,现在你有一个可重复使用的记录器,system = AbstractValueLogger(model_value=ContactResults())
.
我找不到 SignalLogger
的抽象值版本。我一直在为抽象值输出编写自定义记录器,例如 ContactResults
:
class ContactResultsLogger(LeafSystem):
def __init__(self, publish_period_seconds: float):
super().__init__()
self.DeclarePeriodicPublish(publish_period_seconds)
self.contact_results_input_port = self.DeclareAbstractInputPort(
'contact_results', AbstractValue.Make(ContactResults()))
self.sample_times = []
self.contact_results_list = []
def DoPublish(self, context, event):
super().DoPublish(context, event)
self.sample_times.append(context.get_time())
self.contact_results_list.append(
copy.deepcopy(self.contact_results_input_port.Eval(context)))
这可行,但是为每种类型的抽象值输出设置一个可能会很乏味。有没有更好的方法来记录抽象值输出?谢谢!
在您说 AbstractValue.Make(ContactResults())
的示例代码中,您可以说 AbstractValue.Make(model_value)
,其中 model_value
是此 class 的一个新的必需构造函数参数。
然后,将 class 重命名为 AbstractValueLogger
并将 contact_results_list
重命名为 values
,现在你有一个可重复使用的记录器,system = AbstractValueLogger(model_value=ContactResults())
.