【发布时间】:2020-05-08 00:09:51
【问题描述】:
pickle.dump(pendulum, open("obj/pendulum1.obj", "wb")) 返回TypeError: cannot pickle 'pydrake.examples.pendulum.PendulumPlant' object。这里pendulum是一个自定义类的对象,里面有一个PendulumPlant对象。
是不是因为pydrake不是原生用python写的?
【问题讨论】:
pickle.dump(pendulum, open("obj/pendulum1.obj", "wb")) 返回TypeError: cannot pickle 'pydrake.examples.pendulum.PendulumPlant' object。这里pendulum是一个自定义类的对象,里面有一个PendulumPlant对象。
是不是因为pydrake不是原生用python写的?
【问题讨论】:
正确。 pydrake 中的大多数 C++ 支持的类都不是 pickle-able
一些基本的 pydrake 类是可以选择的,例如 RigidTransform、RotationMatrix 等(参见 https://github.com/RobotLocomotion/drake/pull/11976。)
我们可以为一些种额外的类添加酸洗,但是酸洗系统或图表可能太难了。
要保存和恢复像钟摆这样的系统,我想说从头开始重新创建植物应该很好——它没有内部状态,因此任何一个实例都与任何其他实例相同。
【讨论】:
pydrake 支持(尤其是根据酸洗)将是(几乎)微不足道的。然而,序列化一般来说有点开放且难以实现,因此从头开始重新创建可能是更好的途径。
CameraInfo 添加了酸洗:github.com/RobotLocomotion/drake/pull/12131/files