pydrake- 将 IiwaCommandSender 连接到 LcmPublisherSystem 时出错
pydrake- Error when connecting IiwaCommandSender to LcmPublisherSystem
我的程序中有以下几行-
lcm = DrakeLcm()
lcm_command_sender = builder.AddSystem(IiwaCommandSender())
lcm_publisher = builder.AddSystem(LcmPublisherSystem.Make(channel="IIWA_COMMAND", lcm_type=lcmt_iiwa_command, lcm=lcm, publish_period=0.01))
//Connect controller to command sender
builder.Connect(controller.GetOutputPort("joint_positions"), lcm_command_sender.get_position_input_port())
//Connect lcm command sender to publisher
builder.Connect(lcm_command_sender.GetOutputPort("lcmt_iiwa_command"), lcm_publisher.get_input_port())
在 运行 之后,最后一行给出了以下运行时错误-
RuntimeError: DiagramBuilder::Connect: Mismatched value types while connecting output port lcmt_iiwa_command of System lcm_command_sender (type drake::lcmt_iiwa_command) to input port lcm_message of System LcmPublisherSystem(IIWA_COMMAND) (type drake::pydrake::Object)
我不知道为什么会这样,因为文档中明确说 IiwaCommandSender
的输出端口应该连接到 LcmPublisherSystem
的输入端口,并且它们都是这种类型AbstractValue
。我错过了什么?
在上面的代码中,IiwaCommandSender 的输出端口是“drake::lcmt_iiwa_command”类型(一个 C++ class 包装在 Python 中),但是输入端口LcmPublisherSystem 的类型为“drake.lcmt_iiwa_command”(Python class)。这是两种不同的运行时类型,尽管它们都表示 LCM 消息。
在这种情况下,调用LcmPublisherSystem.Make
时应设置use_cpp_serializer=True
,使输入端口为C++类型,而不是Python类型。
https://drake.mit.edu/pydrake/pydrake.systems.lcm.html#pydrake.systems.lcm.LcmPublisherSystem.Make
我的程序中有以下几行-
lcm = DrakeLcm()
lcm_command_sender = builder.AddSystem(IiwaCommandSender())
lcm_publisher = builder.AddSystem(LcmPublisherSystem.Make(channel="IIWA_COMMAND", lcm_type=lcmt_iiwa_command, lcm=lcm, publish_period=0.01))
//Connect controller to command sender
builder.Connect(controller.GetOutputPort("joint_positions"), lcm_command_sender.get_position_input_port())
//Connect lcm command sender to publisher
builder.Connect(lcm_command_sender.GetOutputPort("lcmt_iiwa_command"), lcm_publisher.get_input_port())
在 运行 之后,最后一行给出了以下运行时错误-
RuntimeError: DiagramBuilder::Connect: Mismatched value types while connecting output port lcmt_iiwa_command of System lcm_command_sender (type drake::lcmt_iiwa_command) to input port lcm_message of System LcmPublisherSystem(IIWA_COMMAND) (type drake::pydrake::Object)
我不知道为什么会这样,因为文档中明确说 IiwaCommandSender
的输出端口应该连接到 LcmPublisherSystem
的输入端口,并且它们都是这种类型AbstractValue
。我错过了什么?
在上面的代码中,IiwaCommandSender 的输出端口是“drake::lcmt_iiwa_command”类型(一个 C++ class 包装在 Python 中),但是输入端口LcmPublisherSystem 的类型为“drake.lcmt_iiwa_command”(Python class)。这是两种不同的运行时类型,尽管它们都表示 LCM 消息。
在这种情况下,调用LcmPublisherSystem.Make
时应设置use_cpp_serializer=True
,使输入端口为C++类型,而不是Python类型。
https://drake.mit.edu/pydrake/pydrake.systems.lcm.html#pydrake.systems.lcm.LcmPublisherSystem.Make