Gazebo AddRelativeForce()调用后飞机仿真运动不符合预期问题
Gazebo AddRelativeForce 作用力效果不符问题排查方案
- 首先确认link获取方式是否正确:
model->GetLinks()返回的列表顺序不固定,仅通过下标索引获取link非常容易出现匹配错误,你当前施加力的link大概率不是你预期的1点钟位置对应link。请改为通过link名称获取:model->GetLink("自定义的对应link名称"),确保力施加到了正确的部件上。 - 检查所有link的惯量参数配置:Gazebo不会自动计算模型转动惯量,完全依赖SDF/URDF中每个link单独配置的
<inertia>参数。如果你只给机身主link配置了惯量,其余11个电机对应link没有配置惯量,Gazebo会为这些link默认填充极小的惯量值,直接导致整体动力学计算完全失真。你需要为每一个link都补充合理的质量、惯量参数。 - 确认相对力的方向是否符合预期:
AddRelativeForce接口施加的力是基于当前link的局部坐标系的,你需要确认受力link的局部Z轴是否和你预期的升力方向一致,避免建模时link局部坐标系存在旋转,导致力的施加方向和预期完全相反。如果要规避坐标系歧义,可以改用AddForceAtWorldPosition等显式指定坐标系的力施加接口。 - 验证力的量级是否匹配物理参数:你提供的机身质量为5315.4kg,属于吨级平台,如果施加的力的量级过小,产生的力矩无法抵消模拟环境中的阻尼、摩擦力,也会出现运动效果不符合预期的情况。可以先将施加的力调大2-3个数量级,观察运动方向是否符合预期,再调整到合理值。
关于你提到的是否需要手动计算惯量对应力的问题:不需要。只要你所有link的惯量、质量参数配置正确,Gazebo会自动基于刚体动力学方程计算作用力对应的线加速度、角加速度,无需手动额外施加力矩。
内容的提问来源于stack exchange,提问作者JeaHwan Chung
相关产品推荐
相关产品推荐

