You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 21:37:16