如何让Drake基于.srdf文件忽略碰撞几何
基于SRDF配置Drake忽略碰撞几何的方法
操作步骤
Drake会自动解析SRDF中的碰撞禁用规则,只需按以下流程配置即可:
1. 加载URDF与SRDF文件
使用Drake的MultibodyPlant和Parser类完成模型加载,示例代码如下:#include "drake/multibody/parsing/parser.h" #include "drake/multibody/plant/multibody_plant.h" int main() { drake::multibody::MultibodyPlant<double> plant(0.0); drake::multibody::Parser parser(&plant); // 加载URDF模型 parser.AddModelFromFile("pr2_simplified.urdf"); // 加载对应SRDF文件,关联已加载的机器人模型 parser.AddModelFromFile("pr2.srdf"); plant.Finalize(); // 后续业务逻辑 }2. 确认SRDF的碰撞禁用标签
确保你的SRDF文件包含<disable_collisions>标签,格式示例:<disable_collisions link1="torso_lift_link" link2="r_gripper_palm_link" reason="Adjacent"/>Drake会自动识别这些标签,将指定链接对标记为无需碰撞检测。
3. 验证配置生效
可以通过代码查询特定链接对的碰撞状态,确认规则是否生效:const auto& model_instance = plant.GetModelInstanceByName("pr2"); const drake::multibody::Body<double>& link1 = plant.GetBodyByName("torso_lift_link", model_instance); const drake::multibody::Body<double>& link2 = plant.GetBodyByName("r_gripper_palm_link", model_instance); bool collisions_disabled = plant.AreCollisionsDisabled(link1.index(), link2.index()); // 输出collisions_disabled值,true则表示碰撞已被忽略
注意事项
- SRDF中的链接名称必须与URDF中的完全匹配,否则规则不会生效。
- 若需临时添加自定义碰撞忽略规则,也可跳过SRDF,直接通过代码设置:
plant.DisableCollisionsBetween(link1, link2);
内容的提问来源于stack exchange,提问作者Rufus
相关产品推荐
相关产品推荐

