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

Multibody Plant中AddDistanceConstraint()报错问题求助

问题解决:MultibodyPlant无AddDistanceConstraint属性

你遇到的问题根源是**AddDistanceConstraint并非MultibodyPlant类的成员方法**,它是Drake中独立的约束构造函数,需要从指定模块导入后调用,且调用时机有明确要求。

修正步骤

  1. 导入正确模块:
    从pydrake.multibody.constraints导入该函数:

    from pydrake.multibody.constraints import AddDistanceConstraint
    
  2. 完成Plant初始化:
    添加约束前必须先调用MultibodyPlant.Finalize(),确保植物模型完成构建:

    compass_walker.Finalize()
    
  3. 正确调用约束函数:
    调用时需将MultibodyPlant实例作为第一个参数传入,再依次传入两个刚体、各自的约束点、距离的上下限(你需要固定距离为0.01,因此上下限都设为0.01)。

修正后的完整代码

from pydrake.multibody.constraints import AddDistanceConstraint

builder = DiagramBuilder()
compass_walker, scene_graph = AddMultibodyPlantSceneGraph(builder, time_step=0.0)
Parser(compass_walker).AddModelsFromString(urdf, ".urdf")

# 必须先Finalize plant
compass_walker.Finalize()

anchorpoint = compass_walker.GetBodyByName("anchorpoint")
anchorpoint_vector = np.array([0, 0, 0])

ground_mass = compass_walker.GetBodyByName("ground_mass")
ground_mass_vector = np.array([0, 0, 0])

# 正确调用AddDistanceConstraint
anchor = AddDistanceConstraint(
    plant=compass_walker,
    bodyA=anchorpoint,
    p_AQ=anchorpoint_vector,
    bodyB=ground_mass,
    p_BQ=ground_mass_vector,
    distance_lower=0.01,
    distance_upper=0.01
)

关键说明

  • Drake中大部分约束都是独立函数,而非Plant的成员方法,使用前需确认所属模块。
  • 所有约束必须在Plant完成Finalize()后添加,否则会因模型未初始化导致错误。

内容的提问来源于stack exchange,提问作者Jasmine Terrones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 08:17:11