首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >`plant.CalcInverseDynamics`没有考虑到链接的严重性

`plant.CalcInverseDynamics`没有考虑到链接的严重性
EN

Stack Overflow用户
提问于 2022-05-10 00:06:40
回答 2查看 59关注 0票数 2

我试图计算植物的逆动力学的结果,然而,我注意到返回的向量没有考虑链接的重力。

例如,对于一个简单的1连杆机器人,其质量为2公斤,定位于pi/4角,下面的逆动力学计算返回0,而不考虑连杆的重量。

代码语言:javascript
运行
复制
auto multibody_forces = MultibodyForces<double>(plant);
auto tau = plant.CalcInverseDynamics(plant_context, VectorXd::Zero(1), multibody_forces);

// tau will be 0

这是CalcInverseDynamics的错误文档还是错误文档?

EN

回答 2

Stack Overflow用户

发布于 2022-05-10 13:25:53

MultibodyPlant::CalcInverseDynamics()不包括任何力量。它只执行记录在案的操作。也就是说,给定一组外力,它执行计算:

代码语言:javascript
运行
复制
tau = M(q)v̇ + C(q, v)v - tau_app - ∑ J_WBᵀ(q) Fapp_Bo_W

其中应用的外部与external_forces一起提供。

如果你只想在计算中包括重力,你需要把它添加到external_forces中。你可以这样做:

代码语言:javascript
运行
复制
// Generalized forces due to gravity depend on the configuration and 
// therefore we must set positions "before" we make any computation.
VectorXd postions = ...  // Code to set vector of positions.
plant.SetPositions(&context, positions);

// With the configuration set, we can now compute generalized forces.
MultibodyForces<double> external_forces(plant);
external_forces.generalized_forces() = plant.CalcGravityGeneralizedForces(context);

// Finally followed by the inverse dynamics computation.
const VectorXd tau_id = plant.CalcInverseDynamics(context, known_vdot, external_forces);
票数 2
EN

Stack Overflow用户

发布于 2022-05-10 01:47:12

这是一个测试,它证实了MultibodyPlant::CalcInverseDynamics确实包括了重力力矩。

是否有可能你是从一个urdf/sdf创建的工厂,可能没有把质量放在你所期望的地方?例如,如果链接的重力是在关节而不是沿着手臂,你可能会看到这个?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72179395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档