含Hydroelastic元素的仿真中,刚性工作台碰撞报错的属性配置疑问
解决方案
是的,你需要为该工作台单独声明ProximityProperties并调用AddRigidHydroelasticProperties来分配Hydroelastic属性,或者直接修改其SDF文件添加对应配置。
原因
Drake的Hydroelastic接触要求碰撞对中的两个几何体都具备Hydroelastic表示:你的柔性圆柱已经配置了软Hydroelastic属性,但默认的iiwa工作台只有基础碰撞几何,未定义Hydroelastic相关配置,导致两者无法生成接触表面,触发报错。
两种解决方式
方式1:通过代码动态添加属性
- 获取工作台碰撞几何的
GeometryId - 创建
ProximityProperties对象并添加刚性Hydroelastic配置 - 将配置应用到对应几何上
示例代码:
// 假设已加载工作台模型并获取其model_instance_id const GeometryId table_geom_id = scene_graph.FindGeometriesByName( "table_collision", {model_instance_id}).front(); ProximityProperties table_prox_props; // 0.01为分辨率提示,可根据需求调整 AddRigidHydroelasticProperties(0.01, &table_prox_props); // 将属性应用到工作台碰撞几何 scene_graph.ModifyGeometry(table_geom_id, table_prox_props);
方式2:直接修改工作台的SDF文件
在工作台的<collision>标签内添加Hydroelastic配置,无需修改代码:
<collision name="table_collision"> <geometry> <box> <size>1.0 2.0 0.1</size> </box> </geometry> <drake:proximity_properties> <drake:hydroelastic type="rigid"/> </drake:proximity_properties> </collision>
内容的提问来源于stack exchange,提问作者kamiradi
相关产品推荐
相关产品推荐

