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;
65Eigen::Matrix3d
RotEnuEcef(
const double lat,
const double lon);
97Eigen::Matrix3d
RotNedEcef(
const double lat,
const double lon);
118Eigen::Vector3d
TfEnuEcef(
const Eigen::Vector3d& ecef,
const Eigen::Vector3d& wgs84llh_ref);
128Eigen::Vector3d
TfEcefEnu(
const Eigen::Vector3d& enu,
const Eigen::Vector3d& wgs84llh_ref);
138Eigen::Vector3d
TfNedEcef(
const Eigen::Vector3d& ecef,
const Eigen::Vector3d& wgs84llh_ref);
143Eigen::Vector3d
TfEcefNed(
const Eigen::Vector3d& ned,
const Eigen::Vector3d& wgs84llh_ref);
173Eigen::Vector3d
EcefPoseToEnuEul(
const Eigen::Vector3d& ecef_p,
const Eigen::Matrix3d& ecef_r);
182Eigen::Vector3d
QuatToEul(
const Eigen::Quaterniond& quat);
191Eigen::Vector3d
RotToEul(
const Eigen::Matrix3d& rot);
240 bool Init(
const std::string& source_crs,
const std::string& target_crs);
250 bool Transform(Eigen::Vector3d& inout,
const bool inv =
false);
261 bool Transform(
const Eigen::Vector3d& in, Eigen::Vector3d& out,
const bool inv =
false);
272 bool Transform(
const Eigen::Vector4d& in, Eigen::Vector4d& out,
const bool inv =
false);
281 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)
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.