如何使用Drake Python API将轨迹序列化到文件?
使用Drake Python API序列化Trajectory到文件的方法
Drake的轨迹类(如PiecewisePolynomial、BsplineTrajectory)支持通过内置的SerializeToString()和DeserializeFromString()方法完成序列化与反序列化,这是官方推荐的方式。你之前尝试的pickle、yaml工具无法直接处理Drake的C++绑定对象,所以会报错。
正确实现代码
from pydrake.all import PiecewisePolynomial # 创建示例零阶保持轨迹 traj = PiecewisePolynomial.ZeroOrderHold([0.0, 1.0], [[0.0, 0.0], [1.0, 1.0]]) # 序列化到文件 serialized_data = traj.SerializeToString() with open('/tmp/trajectory.drake', 'wb') as f: f.write(serialized_data) # 验证:从文件反序列化加载轨迹 with open('/tmp/trajectory.drake', 'rb') as f: loaded_data = f.read() loaded_traj = PiecewisePolynomial.DeserializeFromString(loaded_data) # 确认加载后的轨迹与原轨迹一致 print(f"原轨迹在t=0.5处的值: {traj.value(0.5)}") print(f"加载后轨迹在t=0.5处的值: {loaded_traj.value(0.5)}")
你之前尝试方法失败的原因
- pickle:Drake的C++导出Python对象未实现pickle所需的序列化协议,无法直接用pickle处理。
- yaml_dump:该工具仅支持基本Python类型(如字典、列表),无法序列化Drake的复杂C++绑定对象。
- yaml_dump_typed:此函数仅适用于Drake中实现了特定YAML序列化接口的类型(如带有
ToYamlString方法的类),而PiecewisePolynomial并未实现该接口,因此报错。
扩展说明
对于BsplineTrajectory等其他支持序列化的轨迹类,使用方式完全一致,只需替换对应的类名调用SerializeToString()和DeserializeFromString()即可。
内容的提问来源于stack exchange,提问作者marip8
相关产品推荐
相关产品推荐

