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

Drake中SpatialAcceleration能否与Eigen混用及类型转换方法

Drake中SpatialAcceleration与Eigen向量混用方法

类型转换核心方法

Drake的SpatialAcceleration类内置了直接导出为Eigen向量的接口,无需额外实现转换逻辑:

  • 调用get_coeffs()方法可直接返回Eigen::Matrix<double, 6, 1>类型的向量,向量元素顺序为角速度偏置在前,线速度偏置在后,和增广雅可比的常规排列顺序一致
  • 也可以调用rotational()和translational()方法分别提取3维角速度偏置、线速度偏置的Eigen::Vector3d向量

代码示例

1. 整体转换后运算

// 先计算偏置空间加速度
multibody::SpatialAcceleration<double> mdJ_Aug_dq_robot1 = mplant.CalcBiasSpatialAcceleration(*mContext,
                                  multibody::JacobianWrtVariable::kQDot,
                                  *mFrame_EE,
                                  Eigen::Vector3d::Zero(),
                                  mplant.world_frame(),
                                  mplant.world_frame()
                                  );
// 转换为6维Eigen向量
Eigen::Matrix<double, 6, 1> Jdot_qdot = mdJ_Aug_dq_robot1.get_coeffs();
// 直接和其他6维Eigen向量做运算
Eigen::Matrix<double, 6, 1> acc_diff = your_eigen_6d_vector - Jdot_qdot;

2. 单独提取分量

Eigen::Vector3d angular_bias = mdJ_Aug_dq_robot1.rotational();
Eigen::Vector3d translational_bias = mdJ_Aug_dq_robot1.translational();
// 按需自行拼接为6维向量
Eigen::Matrix<double, 6, 1> custom_Jdot_qdot;
custom_Jdot_qdot.head<3>() = angular_bias;
custom_Jdot_qdot.tail<3>() = translational_bias;

注意事项

转换前请确认CalcBiasSpatialAcceleration指定的参考帧、表达帧和你所用的Eigen向量对应的坐标系完全一致,避免隐式的数值错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:06:03