Multibody Plant中AddDistanceConstraint()报错问题求助
问题解决:MultibodyPlant无AddDistanceConstraint属性
你遇到的问题根源是**AddDistanceConstraint并非MultibodyPlant类的成员方法**,它是Drake中独立的约束构造函数,需要从指定模块导入后调用,且调用时机有明确要求。
修正步骤
导入正确模块:
从pydrake.multibody.constraints导入该函数:from pydrake.multibody.constraints import AddDistanceConstraint完成Plant初始化:
添加约束前必须先调用MultibodyPlant.Finalize(),确保植物模型完成构建:compass_walker.Finalize()正确调用约束函数:
调用时需将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
相关产品推荐
相关产品推荐

