mavros中实现东北天坐标系到北东地坐标系转换的代码

/mavros/mavros/include/mavros/frame_tf.hpp

/**
 * @brief Transform from attitude represented WRT NED frame to attitude
 *		  represented WRT ENU frame
 */
template<class T>
inline T transform_orientation_ned_enu(const T & in)
{
  return detail::transform_orientation(in, StaticTF::NED_TO_ENU);
}

/mavros/mavros/src/lib/ftf_frame_conversions.cpp

/**
 * @brief Static quaternion needed for rotating between ENU and NED frames
 * NED to ENU: +PI/2 rotation about Z (Down) followed by a +PI rotation around X (old North/new East)
 * ENU to NED: +PI/2 rotation about Z (Up) followed by a +PI rotation about X (old East/new North)
 */
static const auto NED_ENU_Q = quaternion_from_rpy(M_PI, 0.0, M_PI_2);

/mavros/mavros/src/lib/ftf_frame_conversions.cpp

Eigen::Quaterniond transform_orientation(const Eigen::Quaterniond & q, const StaticTF transform)
{
  // Transform the attitude representation from frame to frame.
  // The proof for this transform can be seen
  // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/transforms/
  switch (transform) {
    case StaticTF::NED_TO_ENU:
    case StaticTF::ENU_TO_NED:
      return NED_ENU_Q * q;

    case StaticTF::AIRCRAFT_TO_BASELINK:
    case StaticTF::BASELINK_TO_AIRCRAFT:
      return q * AIRCRAFT_BASELINK_Q;

    case StaticTF::ABSOLUTE_FRAME_AIRCRAFT_TO_BASELINK:
    case StaticTF::ABSOLUTE_FRAME_BASELINK_TO_AIRCRAFT:
      return AIRCRAFT_BASELINK_Q * q;

    default:
      rcpputils::require_true(false, "unsupported transform arg");
      return q;
  }
}

这篇博客可以参考

mavros坐标系转换与方向_mavros baselink坐标系向edu坐标系转换-CSDN博客

### NED坐标系中的单位及其表示 NED(North-East-Down,北东地)坐标系是一种常用的地理空间坐标系,在导航、航空以及机器人领域广泛应用。以下是关于其单位和坐标的详细说明: #### 1. 坐标轴定义 在NED坐标系中,三个坐标轴分别定义如下[^2]: - **X 轴**: 指向正北方向。 - **Y 轴**: 指向正东方向。 - **Z 轴**: 指向地面下方(即向下),通常用于描述高度或海拔的变化。 这些轴的方向遵循右手定则。 #### 2. 单位的选择 NED坐标系的具体单位取决于应用场景,但在大多数情况下,默认采用国际单位制(SI),具体为: - **距离单位**: 米 (m)。 - **角度单位**: 弧度 (rad) 或度 (°),这主要依赖于具体的计算需求。例如,在姿态角的表达中可能更倾向于弧度作为输入参数[^3]。 #### 3. 向量形式 对于任意一点 P 的位置矢量可以写成 \(\vec{P}=[x,y,z]^T\) ,其中 \(x\),\(y\), 和 \(z\) 分别代表沿各自对应轴上的分量值,并且它们都以米为基本测量尺度除非另有声明。 #### 4. 实际应用例子 当涉及到实际工程实践时比如无人机飞行控制软件 MAVROS 中就实现了从 ENU 到 NED 的转换过程通过四元数来完成这一操作 。这里给出一段简化版伪代码展示如何利用给定的角度构建相应的旋转矩阵来进行不同框架间的数据映射: ```cpp // 定义一个函数用来创建基于roll pitch yaw角度得到的四元素对象 quaternion_from_rpy(double roll, double pitch, double yaw){ ... } static const auto NED_ENU_Q = quaternion_from_rpy(M_PI, 0.0, M_PI_2); ``` 上述片段展示了怎样设置固定不变的四元数值以便快速执行特定类型的几何变换任务。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

诗筱涵

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值