如何获取可变形体与刚体交互时的ContactResults对象?
获取可变形体与刚体交互的ContactResults对象
你遇到的问题是因为MultibodyPlant的ContactResults输出端口仅负责刚体间的接触数据,可变形体的接触信息由DeformablePlant单独管理,报错里的GeometryId属于可变形体的几何实体,MultibodyPlant并未注册它,所以会抛出识别失败的错误。
要获取可变形体和刚体交互的ContactResults,需要从DeformablePlant的输出端口读取,具体步骤如下:
- 从MultibodyPlant中获取已注册的DeformablePlant实例
- 调用DeformablePlant的
contact_results_output_port()来获取包含可变形体接触数据的结果
修改后的代码示例:
// 从MultibodyPlant中获取DeformablePlant子系统 const auto& deformable_plant = plant.GetSubsystemByName<drake::multibody::DeformablePlant<double>>("DeformablePlant"); // 评估DeformablePlant的接触结果输出端口 const auto& contact_results = deformable_plant.contact_results_output_port().Eval<drake::multibody::ContactResults<double>>(plant_context);
这样就能正确获取可变形体与刚体交互时的ContactResults对象,不会再出现GeometryId未识别的错误。
内容的提问来源于stack exchange,提问作者Mark Van der Merwe
相关产品推荐
相关产品推荐

