猿问

如何在 pydrake 中正确使用 MultibodyPlant?

我正在尝试使用以下代码为 acrobot 创建一个简单的重力补偿控制器:


from pydrake.all import *


file_name = "acrobot.sdf"  # from drake/multibody/benchmarks/acrobot/acrobot.sdf

plant = MultibodyPlant()

parser = Parser(plant=plant)

robot = parser.AddModelFromFile(file_name)

plant.AddForceElement(UniformGravityFieldElement([0.0, 0.0, -9.81]))

plant.Finalize()


nq = plant.num_positions()

nv = plant.num_velocities()

nx = nq + nv

nu = plant.num_actuators()

assert (nx, nu) == (4, 1)


plant_ctx = plant.CreateDefaultContext()


x_plant = plant.GetMutablePositionsAndVelocities(plant_ctx)

x_plant[:] = [0.1, 0.2,

              0.3, 0.4]


tau_g = plant.CalcGravityGeneralizedForces(plant_ctx)


print tau_g

不幸的是,tau_g始终为零。


似乎重力矢量不适用于机器人。如何解决这个问题?


郎朗坤
浏览 238回答 1
1回答

繁华开满天机

我确认我看到了相同的行为,并且在您的实现中没有看到任何明显的错误。我打开了https://github.com/RobotLocomotion/drake/issues/11051
随时随地看视频慕课网APP

相关分类

Python
我要回答