18#ifndef __FPSDK_COMMON_TRAFO_HPP__
19#define __FPSDK_COMMON_TRAFO_HPP__
26#include "fpsdk_common/ext/eigen_core.hpp"
27#include "fpsdk_common/ext/eigen_geometry.hpp"
46static constexpr double WGS84_A = 6378137.0;
47static constexpr double WGS84_B = 6356752.314245;
48static constexpr double WGS84_1F = 298.257223563;
49static constexpr double WGS84_E2 = 6.69437999014e-3;
63Eigen::Matrix3d
RotEnuEcef(
const double lat,
const double lon);
93Eigen::Matrix3d
RotNedEcef(
const double lat,
const double lon);
113Eigen::Vector3d
TfEnuEcef(
const Eigen::Vector3d& ecef,
const Eigen::Vector3d& wgs84llh_ref);
123Eigen::Vector3d
TfEcefEnu(
const Eigen::Vector3d& enu,
const Eigen::Vector3d& wgs84llh_ref);
133Eigen::Vector3d
TfNedEcef(
const Eigen::Vector3d& ecef,
const Eigen::Vector3d& wgs84llh_ref);
138Eigen::Vector3d
TfEcefNed(
const Eigen::Vector3d& ned,
const Eigen::Vector3d& wgs84llh_ref);
169Eigen::Vector3d
EcefPoseToEnuEul(
const Eigen::Vector3d& ecef_p,
const Eigen::Matrix3d& ecef_r);
178Eigen::Vector3d
QuatToEul(
const Eigen::Quaterniond& quat);
186Eigen::Vector3d
RotToEul(
const Eigen::Matrix3d& rot);
233 bool Init(
const std::string& source_crs,
const std::string& target_crs);
243 bool Transform(Eigen::Vector3d& inout,
const bool inv =
false);
254 bool Transform(
const Eigen::Vector3d& in, Eigen::Vector3d& out,
const bool inv =
false);
265 bool Transform(
const Eigen::Vector4d& in, Eigen::Vector4d& out,
const bool inv =
false);
274 const std::string name_;
Eigen::Matrix3d RotEnuEcef(const double lat, const double lon)
Calculate the rotation matrix from ECEF to ENU for a given reference latitude/longitude.
Eigen::Matrix3d RotNedEcef(const double lat, const double lon)
Calculate the rotation matrix from ECEF to NED for a given reference latitude/longitude.
Eigen::Vector3d LlhDegToRad(const Eigen::Vector3d &llh_deg)
Convert llh from deg to rad, height component unchanged.
Eigen::Vector3d LlhRadToDeg(const Eigen::Vector3d &llh_rad)
Convert llh from rad to deg, height component unchanged.
static constexpr double WGS84_1F
WGS-84 1/f inverse of flattening parameter.
Eigen::Vector3d TfEcefNed(const Eigen::Vector3d &ned, const Eigen::Vector3d &wgs84llh_ref)
static constexpr double WGS84_B2
WGS-84 b_^2.
Eigen::Vector3d TfNedEcef(const Eigen::Vector3d &ecef, const Eigen::Vector3d &wgs84llh_ref)
Convert ECEF coordinates to ENU with specified ENU origin.
static constexpr double WGS84_E2
WGS-84 first eccentricity squared.
Eigen::Vector3d QuatToEul(const Eigen::Quaterniond &quat)
Vector4 quaternion to intrinsic Euler Angles in ZYX (yaw,pitch,roll)
Eigen::Vector3d RotToEul(const Eigen::Matrix3d &rot)
Rotation Matrix to intrinsic Euler Angles in ZYX (Yaw-Pitch-Roll) order in radian.
static constexpr double WGS84_B
WGS-84 Earth radius minor axis [m].
Eigen::Matrix3d RotNedEnu()
Returns rotation matrix between NED and ENU.
Eigen::Vector3d TfWgs84LlhEcef(const Eigen::Vector3d &ecef)
Convert ECEF (x, y, z) coordinates to geodetic coordinates (latitude, longitude, height) (latitude,...
Eigen::Vector3d TfEcefEnu(const Eigen::Vector3d &enu, const Eigen::Vector3d &wgs84llh_ref)
Transform ENU coordinate to ECEF with specified ENU-origin.
static constexpr double WGS84_A
WGS-84 Earth radius major axis [m].
Eigen::Vector3d EcefPoseToEnuEul(const Eigen::Vector3d &ecef_p, const Eigen::Matrix3d &ecef_r)
Calculate yaw, pitch and roll in ENU from a given pose in ECEF.
Eigen::Vector3d TfEnuEcef(const Eigen::Vector3d &ecef, const Eigen::Vector3d &wgs84llh_ref)
Transform ECEF coordinate to ENU with specified ENU-origin.
Eigen::Vector3d TfEcefWgs84Llh(const Eigen::Vector3d &wgs84llh)
Convert geodetic coordinates (latitude, longitude, height) to ECEF (x, y, z).
static constexpr double WGS84_A2
WGS-84 a_^2.
static constexpr double WGS84_EE2
WGS-84 e'^2 second eccentricity squared.