【问题标题】:How to save a class object with a Drake plant object inside?如何保存带有 Drake 植物对象的类对象?
【发布时间】: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 drake


    【解决方案1】:

    正确。 pydrake 中的大多数 C++ 支持的类都不是 pickle-able

    一些基本的 pydrake 类可以选择的,例如 RigidTransform、RotationMatrix 等(参见 https://github.com/RobotLocomotion/drake/pull/11976。)

    我们可以为一些种额外的类添加酸洗,但是酸洗系统或图表可能太难了。

    要保存和恢复像钟摆这样的系统,我想说从头开始重新创建植物应该很好——它没有内部状态,因此任何一个实例都与任何其他实例相同。

    【讨论】:

    • 补充一点,我们不支持像 C++ 中的 Systems 或 Diagrams 这样的 pickling 的原因之一是因为我们通常不支持序列化。如果要在 C++ 中支持序列化,添加 pydrake 支持(尤其是根据酸洗)将是(几乎)微不足道的。然而,序列化一般来说有点开放且难以实现,因此从头开始重新创建可能是更好的途径。
    • FTR 以下是对不可腌制的对象进行自定义腌制的示例(如果您想自己尝试):gist.github.com/EricCousineau-TRI/…。此外,这是另一个(较小的)PR,它为CameraInfo 添加了酸洗:github.com/RobotLocomotion/drake/pull/12131/files
    猜你喜欢
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    相关资源
    最近更新 更多