如何解决记录抽象值输出端口
我找不到 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
是此类的新的必需构造函数参数。
然后,将类重命名为 AbstractValueLogger
之类的名称并将 contact_results_list
重命名为 values
之类的名称,现在您拥有了一个可重用的记录器 system = AbstractValueLogger(model_value=ContactResults())
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。