刚体三维空间变换常见函数

常见函数

四元数转欧拉角

def quart_to_rpy(x, y, z, w, deg=False):
    roll = math.atan2(2 * (w * x + y * z), 1 - 2 * (x * x + y * y))
    pitch = math.asin(2 * (w * y - x * z))
    yaw = math.atan2(2 * (w * z + x * y), 1 - 2 * (z * z + y * y))
    rpy = (roll, pitch, yaw)
    if deg:
        rpy = np.rad2deg(rpy)
        return rpy
    return rpy

空间旋转

void TransformPointsFromOdom2Imu(
        const drive::common::geometry::Point& odom_point,
        drive::common::geometry::Point& imu_point,
        const drive::common::pose::Pose3D& imu_pose) {
    Eigen::Matrix<double, 3, 1> translation{
            imu_pose.position().x(), imu_pose.position().y(), imu_pose.position().z()};
    Eigen::Quaternion<double> orientation{imu_pose.orientation().qx(),
                                          imu_pose.orientation().qy(),
                                          imu_pose.orientation().qz(),
                                          imu_pose.orientation().qw()};
    logger.debug(5, "translation: %%, orientation:%%", translation, orientation);

    Eigen::Matrix<double, 4, 4> transform_matrix = Eigen::Matrix<double, 4, 4>::Identity();
    Eigen::Matrix<double, 3, 3> R = orientation.toRotationMatrix();
    transform_matrix.block(0, 0, 3, 3) = R;
    transform_matrix.block(0, 3, 3, 1) = translation;

    Eigen::Matrix<double, 4, 1> p{odom_point.x(), odom_point.y(), odom_point.z(), 1};
    Eigen::Matrix<double, 4, 1> tmp_imu_point = transform_matrix.inverse() * p;

    imu_point.set_x(tmp_imu_point(0, 0));
    imu_point.set_y(tmp_imu_point(1, 0));
    imu_point.set_z(tmp_imu_point(2, 0));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tech沉思录

点赞加投币,感谢您的资瓷~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值