diff --git a/examples/gps_imu_example.cpp b/examples/gps_imu_example.cpp index dde6499..54666be 100644 --- a/examples/gps_imu_example.cpp +++ b/examples/gps_imu_example.cpp @@ -17,6 +17,7 @@ #include "utils/Utils.h" namespace po = boost::program_options; +using namespace ceres_nav; po::variables_map handle_args(int argc, const char *argv[]) { po::options_description options("Allowed options"); @@ -91,7 +92,7 @@ void runSlidingWindowEstimator( // Create the initial IMU increment IMUIncrement imu_increment( Q_ct, init_imu_state.gyroBias(), init_imu_state.accelBias(), - init_imu_state.timestamp(), gravity, lie_direction); + init_imu_state.timestamp(), gravity, lie_direction, state_rep); IMUState cur_imu_state = init_imu_state; double prev_gps_timestamp = gps_data[0].timestamp; std::vector est_stamps; @@ -186,7 +187,7 @@ void runFullBatchEstimator( size_t imu_idx = 0; IMUIncrement imu_increment( Q_ct, init_imu_state.gyroBias(), init_imu_state.accelBias(), - init_imu_state.timestamp(), gravity, lie_direction); + init_imu_state.timestamp(), gravity, lie_direction, state_rep); IMUState cur_imu_state = init_imu_state; double prev_gps_timestamp = gps_data[0].timestamp; diff --git a/examples/include/FactorGraphUtils.h b/examples/include/FactorGraphUtils.h index 2637bf6..a2de62f 100644 --- a/examples/include/FactorGraphUtils.h +++ b/examples/include/FactorGraphUtils.h @@ -21,20 +21,22 @@ namespace factor_graph_utils { +using namespace ceres_nav; + struct ProblemKeys { std::string nav_state_key = "nav_state"; std::string bias_state_key = "gyro_bias"; }; void addIMUState( - ceres_nav::FactorGraph &graph, const IMUState &imu_state, + FactorGraph &graph, const IMUState &imu_state, const LieDirection direction, ExtendedPoseRepresentation state_rep = ExtendedPoseRepresentation::SE23, ProblemKeys keys = ProblemKeys()) { // Create a new ExtendedPoseParameterBlock for the IMU state std::shared_ptr nav_state_block = - std::make_shared(imu_state.navState(), - state_rep, "extended_pose", direction); + std::make_shared( + imu_state.navState(), state_rep, "extended_pose", direction); std::shared_ptr> bias_block = std::make_shared>(imu_state.bias()); @@ -42,14 +44,14 @@ void addIMUState( graph.addState(keys.bias_state_key, imu_state.timestamp(), bias_block); }; -void addPriorFactor(ceres_nav::FactorGraph &graph, +void addPriorFactor(FactorGraph &graph, const IMUState prior_imu_state, const Eigen::Matrix &prior_covariance, LieDirection direction, ExtendedPoseRepresentation state_rep, ProblemKeys keys) { - std::vector state_ids = { - ceres_nav::StateID(keys.nav_state_key, prior_imu_state.timestamp()), - ceres_nav::StateID(keys.bias_state_key, prior_imu_state.timestamp())}; + std::vector state_ids = { + StateID(keys.nav_state_key, prior_imu_state.timestamp()), + StateID(keys.bias_state_key, prior_imu_state.timestamp())}; auto *factor = new IMUPriorFactor(prior_imu_state.navState(), prior_imu_state.bias(), @@ -64,13 +66,13 @@ void addPreintegrationFactor(ceres_nav::FactorGraph &graph, ProblemKeys keys = ProblemKeys()) { double start_stamp = imu_increment.start_stamp; double end_stamp = imu_increment.end_stamp; - std::vector state_ids = { - ceres_nav::StateID(keys.nav_state_key, start_stamp), - ceres_nav::StateID(keys.bias_state_key, start_stamp), - ceres_nav::StateID(keys.nav_state_key, end_stamp), - ceres_nav::StateID(keys.bias_state_key, end_stamp)}; + std::vector state_ids = { + StateID(keys.nav_state_key, start_stamp), + StateID(keys.bias_state_key, start_stamp), + StateID(keys.nav_state_key, end_stamp), + StateID(keys.bias_state_key, end_stamp)}; - auto *factor = new IMUPreintegrationFactor(imu_increment, false, direction, state_rep); + auto *factor = new IMUPreintegrationFactor(imu_increment, false); graph.addFactor(state_ids, factor, start_stamp); } @@ -82,12 +84,13 @@ void addGPSFactor( const LieDirection &direction, const Eigen::Matrix3d &covariance, ExtendedPoseRepresentation state_rep = ExtendedPoseRepresentation::SE23, ProblemKeys keys = ProblemKeys()) { - Eigen::Matrix3d sqrt_info = ceres_nav::computeSquareRootInformation(covariance); + Eigen::Matrix3d sqrt_info = + ceres_nav::computeSquareRootInformation(covariance); - std::vector state_ids = { - ceres_nav::StateID(keys.nav_state_key, gps_message.timestamp)}; - auto factor = - new AbsolutePositionFactor(gps_message.measurement, direction, sqrt_info, state_rep); + std::vector state_ids = { + StateID(keys.nav_state_key, gps_message.timestamp)}; + auto factor = new AbsolutePositionFactor(gps_message.measurement, direction, + sqrt_info, state_rep); graph.addFactor(state_ids, factor, gps_message.timestamp); } @@ -135,9 +138,9 @@ computeIMUCovariance(ceres_nav::FactorGraph &graph, double timestamp, void marginalizeIMUState(ceres_nav::FactorGraph &graph, double timestamp_marg, ProblemKeys keys) { - std::vector state_ids_marg = { - ceres_nav::StateID(keys.nav_state_key, timestamp_marg), - ceres_nav::StateID(keys.bias_state_key, timestamp_marg)}; + std::vector state_ids_marg = { + StateID(keys.nav_state_key, timestamp_marg), + StateID(keys.bias_state_key, timestamp_marg)}; graph.marginalizeStates(state_ids_marg); } diff --git a/examples/include/GPSIMUExampleUtils.h b/examples/include/GPSIMUExampleUtils.h index 07d75ce..281ce80 100644 --- a/examples/include/GPSIMUExampleUtils.h +++ b/examples/include/GPSIMUExampleUtils.h @@ -219,7 +219,7 @@ std::vector loadIMUStates(const std::string &fname) { Eigen::Vector3d accel_bias{values[14], values[15], values[16]}; Eigen::Matrix nav_state = - SE23::fromComponents(C_ab, velocity, position); + ceres_nav::SE23::fromComponents(C_ab, velocity, position); imu_states.push_back(IMUState(nav_state, gyro_bias, accel_bias, stamp)); } @@ -233,9 +233,9 @@ void propagateIMUState(IMUState &state, const IMUMessage &imu_msg, const Eigen:: Eigen::Vector3d unbiased_gyro = imu_msg.gyro - state.gyroBias(); Eigen::Vector3d unbiased_accel = imu_msg.accel - state.accelBias(); - Eigen::Matrix G = createGMatrix(gravity, dt); + Eigen::Matrix G = ceres_nav::createGMatrix(gravity, dt); Eigen::Matrix U = - createUMatrix(unbiased_gyro, unbiased_accel, dt); + ceres_nav::createUMatrix(unbiased_gyro, unbiased_accel, dt); Eigen::Matrix prev_extended_pose = state.navState(); Eigen::Matrix next_extended_pose = G * prev_extended_pose * U; diff --git a/include/factors/AbsolutePositionFactor.h b/include/factors/AbsolutePositionFactor.h index dc32ca6..5a77d58 100644 --- a/include/factors/AbsolutePositionFactor.h +++ b/include/factors/AbsolutePositionFactor.h @@ -7,6 +7,8 @@ #include "lib/ExtendedPoseParameterBlock.h" #include "lie/LieDirection.h" +namespace ceres_nav { + class AbsolutePositionFactor : public ceres::SizedCostFunction<3, 15> { public: Eigen::Vector3d meas; @@ -29,3 +31,5 @@ class AbsolutePositionFactor : public ceres::SizedCostFunction<3, 15> { bool Evaluate(double const *const *parameters, double *residuals, double **jacobians) const override; }; + +} // namespace ceres_nav \ No newline at end of file diff --git a/include/factors/IMUPreintegrationFactor.h b/include/factors/IMUPreintegrationFactor.h index bad12ae..699b269 100644 --- a/include/factors/IMUPreintegrationFactor.h +++ b/include/factors/IMUPreintegrationFactor.h @@ -7,6 +7,7 @@ #include "imu/IMUIncrement.h" #include "imu/IMUPreintegrationHelper.h" +namespace ceres_nav { class IMUPreintegrationFactor : public ceres::SizedCostFunction<15, 15, 6, 15, 6> { public: @@ -29,9 +30,7 @@ class IMUPreintegrationFactor * time, and a continuous-time noise matrix. */ IMUPreintegrationFactor( - IMUIncrement imu_increment_, bool use_group_jacobians_, - const LieDirection &direction_, - ExtendedPoseRepresentation pose_rep_ = ExtendedPoseRepresentation::SE23); + const IMUIncrement &imu_increment_, bool use_group_jacobians_); IMUPreintegrationFactor() = delete; /** @@ -40,3 +39,5 @@ class IMUPreintegrationFactor virtual bool Evaluate(double const *const *parameters, double *residuals, double **jacobians) const; }; + +} // namespace ceres_nav diff --git a/include/factors/IMUPriorFactor.h b/include/factors/IMUPriorFactor.h index 6b4b996..8385155 100644 --- a/include/factors/IMUPriorFactor.h +++ b/include/factors/IMUPriorFactor.h @@ -5,6 +5,8 @@ #include #include +namespace ceres_nav { + class IMUPriorFactor : public ceres::SizedCostFunction<15, 15, 6> { public: /** @@ -32,4 +34,6 @@ class IMUPriorFactor : public ceres::SizedCostFunction<15, 15, 6> { Eigen::Matrix sqrt_info_; LieDirection direction_; ExtendedPoseRepresentation pose_rep_; -}; \ No newline at end of file +}; + +} \ No newline at end of file diff --git a/include/factors/RelativeLandmarkFactor.h b/include/factors/RelativeLandmarkFactor.h index d6ed3c5..afe7f34 100644 --- a/include/factors/RelativeLandmarkFactor.h +++ b/include/factors/RelativeLandmarkFactor.h @@ -6,6 +6,7 @@ #include "lib/ExtendedPoseParameterBlock.h" +namespace ceres_nav { /** * @brief A factor for relative landmark measurements of the form * y = C_ab.T * (r_pw_a - r_zw_a), @@ -40,4 +41,6 @@ class RelativeLandmarkFactor : public ceres::SizedCostFunction<3, 15> { */ bool Evaluate(double const *const *parameters, double *residuals, double **jacobians) const; -}; \ No newline at end of file +}; + +} // namespace ceres_nav diff --git a/include/factors/RelativePoseFactor.h b/include/factors/RelativePoseFactor.h index 1d0bd60..6716982 100644 --- a/include/factors/RelativePoseFactor.h +++ b/include/factors/RelativePoseFactor.h @@ -5,6 +5,8 @@ #include "lie/LieDirection.h" +namespace ceres_nav { + class RelativePoseFactor : public ceres::SizedCostFunction<6, 12, 12> { public: Eigen::Matrix4d relative_pose_meas; @@ -21,4 +23,6 @@ class RelativePoseFactor : public ceres::SizedCostFunction<6, 12, 12> { */ virtual bool Evaluate(double const *const *parameters, double *residuals, double **jacobians) const; -}; \ No newline at end of file +}; + +} // namespace ceres_nav \ No newline at end of file diff --git a/include/imu/IMUHelper.h b/include/imu/IMUHelper.h index 714d4fc..8bda1f5 100644 --- a/include/imu/IMUHelper.h +++ b/include/imu/IMUHelper.h @@ -2,17 +2,18 @@ /* * Some helper functions for IMU preintegration. -*/ + */ #include #include +namespace ceres_nav { class IMUIncrement; class IMU; Eigen::Matrix createGMatrix(const Eigen::Vector3d &gravity, double dt); - + Eigen::Matrix3d createNMatrix(const Eigen::Vector3d &phi_vec); Eigen::Matrix createUMatrix(const Eigen::Vector3d &omega, const Eigen::Vector3d &accel, @@ -35,4 +36,5 @@ std::vector getIMUBetweenTimes(const double &stamp_i, const std::vector &imu_meas_vec); bool preintegrateBetweenTimes(IMUIncrement &rmi, const double &stamp_i, const double &stamp_j, - const std::vector &imu_meas_vec); \ No newline at end of file + const std::vector &imu_meas_vec); +} // namespace ceres_name \ No newline at end of file diff --git a/include/imu/IMUIncrement.h b/include/imu/IMUIncrement.h index df81139..e0e7a12 100644 --- a/include/imu/IMUIncrement.h +++ b/include/imu/IMUIncrement.h @@ -5,6 +5,8 @@ #include #include +namespace ceres_nav { + class IMUIncrement { public: // Initial gyro and accel bias @@ -90,3 +92,5 @@ class IMUIncrement { const Eigen::Vector3d &accel, Eigen::Matrix &A_ct, Eigen::Matrix &L_ct); }; + +} // namespace ceres_nav diff --git a/include/imu/IMUPreintegrationHelper.h b/include/imu/IMUPreintegrationHelper.h index 751e8d9..8af0b29 100644 --- a/include/imu/IMUPreintegrationHelper.h +++ b/include/imu/IMUPreintegrationHelper.h @@ -5,6 +5,7 @@ #include "imu/IMUIncrement.h" +namespace ceres_nav { /** * @brief Simple struct to hold the IMU state components. */ @@ -34,9 +35,7 @@ struct IMUStateHolder { class IMUPreintegrationHelper { public: IMUPreintegrationHelper(const IMUIncrement &imu_increment, - bool use_group_jacobians, - const LieDirection &direction, - ExtendedPoseRepresentation pose_rep); + bool use_group_jacobians); // Main method to compute Jacobians based on representation and direction std::vector> @@ -68,7 +67,7 @@ class IMUPreintegrationHelper { // Gets the covariance of the preintegrated measurement Eigen::Matrix covariance() const { return rmi.covariance; } - + double startStamp() const { return rmi.start_stamp; } double endStamp() const { return rmi.end_stamp; } @@ -77,4 +76,6 @@ class IMUPreintegrationHelper { bool use_group_jacobians; LieDirection direction; ExtendedPoseRepresentation pose_rep; -}; \ No newline at end of file +}; + +} // namespace ceres_nav \ No newline at end of file diff --git a/include/lib/ExtendedPoseParameterBlock.h b/include/lib/ExtendedPoseParameterBlock.h index cc8fa54..12bb3cf 100644 --- a/include/lib/ExtendedPoseParameterBlock.h +++ b/include/lib/ExtendedPoseParameterBlock.h @@ -10,6 +10,8 @@ #include "local_parameterizations/ExtendedPoseLocalParameterization.h" #include "local_parameterizations/SE23LocalParameterization.h" +namespace ceres_nav { + enum class ExtendedPoseRepresentation { SE23, Decoupled }; /** @@ -117,4 +119,6 @@ class ExtendedPoseParameterBlock : public ParameterBlock<15, 9> { protected: LieDirection direction_; -}; \ No newline at end of file +}; + +} // namespace ceres_nav \ No newline at end of file diff --git a/include/lib/ParameterBlock.h b/include/lib/ParameterBlock.h index d2edc63..9069e61 100644 --- a/include/lib/ParameterBlock.h +++ b/include/lib/ParameterBlock.h @@ -3,6 +3,8 @@ #include "ParameterBlockBase.h" #include +namespace ceres_nav { + /** * @brief Templated parameter block for optimization in Ceres. * @@ -81,4 +83,6 @@ class ParameterBlock : public ParameterBlockBase { // Storage for the parameter estimate and covariance Eigen::Matrix estimate_; Eigen::Matrix covariance_; -}; \ No newline at end of file +}; + +} // namespace ceres_nav diff --git a/include/lib/ParameterBlockBase.h b/include/lib/ParameterBlockBase.h index bcc7ed4..a4f3432 100644 --- a/include/lib/ParameterBlockBase.h +++ b/include/lib/ParameterBlockBase.h @@ -4,6 +4,7 @@ #include #include +namespace ceres_nav { /** * @brief Abstract base class for parameter blocks in * Ceres. @@ -70,4 +71,6 @@ class ParameterBlockBase { // Local parameterization for this parameter block ceres::LocalParameterization *local_parameterization_ptr_; -}; \ No newline at end of file +}; + +} // namespace ceres_nav diff --git a/include/lib/PoseParameterBlock.h b/include/lib/PoseParameterBlock.h index 2f52b50..13c9a98 100644 --- a/include/lib/PoseParameterBlock.h +++ b/include/lib/PoseParameterBlock.h @@ -6,6 +6,8 @@ #include "lie/SO3.h" #include "local_parameterizations/PoseLocalParameterization.h" +namespace ceres_nav { + /** * @brief Parameter block for SE(3) poses. * @@ -27,13 +29,14 @@ class PoseParameterBlock : public ParameterBlock<12, 6> { } // Construct directly from a pose in SE(3) - PoseParameterBlock(const Eigen::Matrix4d &pose, const std::string &name = "pose_parameter_block", + PoseParameterBlock(const Eigen::Matrix4d &pose, + const std::string &name = "pose_parameter_block", LieDirection direction = LieDirection::left) : PoseParameterBlock(name, direction) { Eigen::Matrix3d C = pose.block<3, 3>(0, 0); Eigen::Vector3d r = pose.block<3, 1>(0, 3); setFromAttitudeAndPosition(C, r); - } + } /** * @brief Set the estimate from rotation and position. */ @@ -88,4 +91,6 @@ class PoseParameterBlock : public ParameterBlock<12, 6> { double *jacobian) const override final { local_parameterization_ptr_->ComputeJacobian(x0, jacobian); } -}; \ No newline at end of file +}; + +} // namespace ceres_nav diff --git a/include/lib/SO3ParameterBlock.h b/include/lib/SO3ParameterBlock.h index 0ef5229..94a65b7 100644 --- a/include/lib/SO3ParameterBlock.h +++ b/include/lib/SO3ParameterBlock.h @@ -6,6 +6,8 @@ #include "local_parameterizations/SO3LocalParameterization.h" +namespace ceres_nav { + /** * @brief Parameter block for SO(3) rotations. * @@ -53,4 +55,6 @@ class SO3ParameterBlock : public ParameterBlock<9, 3> { double *jacobian) const override final { local_parameterization_ptr_->ComputeJacobian(x0, jacobian); } -}; \ No newline at end of file +}; + +} // namespace ceres_nav \ No newline at end of file diff --git a/include/lib/StateCollection.h b/include/lib/StateCollection.h index 0e1e71e..45d8f21 100644 --- a/include/lib/StateCollection.h +++ b/include/lib/StateCollection.h @@ -11,6 +11,8 @@ namespace ceres_nav { struct StateID; } +namespace ceres_nav { + /** * @brief Holds a collection of states in time, accessible by a string key and a * timestamp. @@ -92,7 +94,7 @@ class StateCollection { * * Returns false if the pointer is not found. */ - bool getStateIDByEstimatePointer(double *ptr, ceres_nav::StateID &state_id) const; + bool getStateIDByEstimatePointer(double *ptr, StateID &state_id) const; // Check if a state exists at a given timestamp @@ -184,4 +186,6 @@ class StateCollection { std::unordered_map>> states_; -}; \ No newline at end of file +}; + +} // namespace ceres_nav \ No newline at end of file diff --git a/include/lie/LieDirection.h b/include/lie/LieDirection.h index 894365c..4a9d97c 100644 --- a/include/lie/LieDirection.h +++ b/include/lie/LieDirection.h @@ -1,3 +1,5 @@ -#pragma once +#pragma once -enum class LieDirection { left, right }; \ No newline at end of file +namespace ceres_nav { + enum class LieDirection { left, right }; +} // namespace ceres_nav \ No newline at end of file diff --git a/include/lie/SE23.h b/include/lie/SE23.h index 5d1934f..8fe8aed 100644 --- a/include/lie/SE23.h +++ b/include/lie/SE23.h @@ -4,6 +4,8 @@ #include #include "lie/LieDirection.h" +namespace ceres_nav { + class SE23 { public: static constexpr float small_angle_tol = 1e-7; @@ -38,4 +40,6 @@ class SE23 { static Eigen::Matrix minus(const Eigen::Matrix &Y, const Eigen::Matrix &X, LieDirection direction); -}; \ No newline at end of file +}; + +} // namespace ceres_nav diff --git a/include/lie/SE3.h b/include/lie/SE3.h index d77e0c7..09db6c5 100644 --- a/include/lie/SE3.h +++ b/include/lie/SE3.h @@ -4,6 +4,8 @@ #include "lie/LieDirection.h" +namespace ceres_nav { + class SE3 { public: static constexpr float small_angle_tol = 1e-7; @@ -31,4 +33,6 @@ class SE3 { static Eigen::Matrix minus(const Eigen::Matrix &Y, const Eigen::Matrix &X, LieDirection direction); -}; \ No newline at end of file +}; + +} // namespace ceres_nav \ No newline at end of file diff --git a/include/lie/SO3.h b/include/lie/SO3.h index 987c304..562566d 100644 --- a/include/lie/SO3.h +++ b/include/lie/SO3.h @@ -5,6 +5,8 @@ #include "lie/LieDirection.h" +namespace ceres_nav { + class SO3 { public: static Eigen::Matrix3d cross(const Eigen::Vector3d &x); @@ -26,4 +28,6 @@ class SO3 { static Eigen::Vector3d minus(const Eigen::Matrix3d &Y, const Eigen::Matrix3d &X, const LieDirection &direction); -}; \ No newline at end of file +}; + +} // namespace ceres_nav \ No newline at end of file diff --git a/include/local_parameterizations/DecoupledExtendedPoseLocalParameterization.h b/include/local_parameterizations/DecoupledExtendedPoseLocalParameterization.h index 36b5125..9d38baa 100644 --- a/include/local_parameterizations/DecoupledExtendedPoseLocalParameterization.h +++ b/include/local_parameterizations/DecoupledExtendedPoseLocalParameterization.h @@ -1,15 +1,18 @@ #pragma once -#include "ExtendedPoseLocalParameterization.h" +#include "ExtendedPoseLocalParameterization.h" // #include -class DecoupledExtendedPoseLocalParameterization : public ExtendedPoseLocalParameterization { +namespace ceres_nav { +class DecoupledExtendedPoseLocalParameterization + : public ExtendedPoseLocalParameterization { public: using ExtendedPoseLocalParameterization::ExtendedPoseLocalParameterization; ~DecoupledExtendedPoseLocalParameterization() override = default; - + /** * @brief State update funciton for the extended Pose state. */ bool Plus(const double *x, const double *delta, double *x_plus_delta) const; }; +} // namespace ceres_nav diff --git a/include/local_parameterizations/ExtendedPoseLocalParameterization.h b/include/local_parameterizations/ExtendedPoseLocalParameterization.h index c436e64..44a8a7b 100644 --- a/include/local_parameterizations/ExtendedPoseLocalParameterization.h +++ b/include/local_parameterizations/ExtendedPoseLocalParameterization.h @@ -4,6 +4,8 @@ #include #include +namespace ceres_nav { + class ExtendedPoseLocalParameterization : public ceres::LocalParameterization { public: ExtendedPoseLocalParameterization(LieDirection direction = LieDirection::left) @@ -11,11 +13,12 @@ class ExtendedPoseLocalParameterization : public ceres::LocalParameterization { // Destructor ~ExtendedPoseLocalParameterization() override = default; - + /** * @brief State update funciton for the extended Pose state. */ - virtual bool Plus(const double *x, const double *delta, double *x_plus_delta) const = 0; + virtual bool Plus(const double *x, const double *delta, + double *x_plus_delta) const = 0; bool ComputeJacobian(const double *x, double *jacobian) const; int GlobalSize() const { return 15; }; int LocalSize() const { return 9; }; @@ -32,7 +35,7 @@ class ExtendedPoseLocalParameterization : public ceres::LocalParameterization { // Set the direction void setDirection(LieDirection direction) { _direction = direction; } - protected: LieDirection _direction; }; +} // namespace ceres_nav \ No newline at end of file diff --git a/include/local_parameterizations/PoseLocalParameterization.h b/include/local_parameterizations/PoseLocalParameterization.h index 33ad4ac..9251f85 100644 --- a/include/local_parameterizations/PoseLocalParameterization.h +++ b/include/local_parameterizations/PoseLocalParameterization.h @@ -1,14 +1,15 @@ #pragma once +#include "lie/LieDirection.h" #include #include -#include "lie/LieDirection.h" +namespace ceres_nav { class PoseLocalParameterization : public ceres::LocalParameterization { public: PoseLocalParameterization(LieDirection direction = LieDirection::left) : _direction(direction) {} - + /** * @brief State update funciton for the extended Pose state. */ @@ -51,6 +52,7 @@ class PoseLocalParameterization : public ceres::LocalParameterization { */ Eigen::Matrix getEigenJacobian() const; - protected: - LieDirection _direction; +protected: + LieDirection _direction; }; +} // namespace ceres_nav \ No newline at end of file diff --git a/include/local_parameterizations/SE23LocalParameterization.h b/include/local_parameterizations/SE23LocalParameterization.h index d66046f..0e118ff 100644 --- a/include/local_parameterizations/SE23LocalParameterization.h +++ b/include/local_parameterizations/SE23LocalParameterization.h @@ -3,14 +3,16 @@ #include "ExtendedPoseLocalParameterization.h" #include +namespace ceres_nav { class SE23LocalParameterization : public ExtendedPoseLocalParameterization { public: - using ExtendedPoseLocalParameterization::ExtendedPoseLocalParameterization; ~SE23LocalParameterization() override = default; - + /** * @brief State update funciton for the extended Pose state. */ bool Plus(const double *x, const double *delta, double *x_plus_delta) const; }; + +} // namespace ceres_nav diff --git a/include/local_parameterizations/SO3LocalParameterization.h b/include/local_parameterizations/SO3LocalParameterization.h index d4b8cbc..2863bb4 100644 --- a/include/local_parameterizations/SO3LocalParameterization.h +++ b/include/local_parameterizations/SO3LocalParameterization.h @@ -4,6 +4,8 @@ #include #include +namespace ceres_nav { + class SO3LocalParameterization : public ceres::LocalParameterization { public: SO3LocalParameterization(LieDirection direction = LieDirection::left) @@ -37,3 +39,4 @@ class SO3LocalParameterization : public ceres::LocalParameterization { protected: LieDirection _direction; }; +} // namespace ceres_nav \ No newline at end of file diff --git a/include/utils/Timer.h b/include/utils/Timer.h index 330fcf7..e932e3f 100644 --- a/include/utils/Timer.h +++ b/include/utils/Timer.h @@ -3,6 +3,7 @@ #include #include +namespace ceres_nav { class Timer { public: using Clock = std::chrono::high_resolution_clock; @@ -17,4 +18,5 @@ class Timer { private: TimePoint start_time_; -}; \ No newline at end of file +}; +} // namespace ceres_nav \ No newline at end of file diff --git a/include/utils/VectorTypes.h b/include/utils/VectorTypes.h index cd7093d..7ff9201 100644 --- a/include/utils/VectorTypes.h +++ b/include/utils/VectorTypes.h @@ -100,4 +100,4 @@ using MatrixVectorSTL = std::vector, Eigen::aligned_allocator>>; template using VectorVectorSTL = MatrixVectorSTL; -} // namespace libRSF \ No newline at end of file +} // namespace ceres_nav \ No newline at end of file diff --git a/src/factors/AbsolutePositionFactor.cpp b/src/factors/AbsolutePositionFactor.cpp index dce3d8c..6af92b1 100644 --- a/src/factors/AbsolutePositionFactor.cpp +++ b/src/factors/AbsolutePositionFactor.cpp @@ -3,6 +3,8 @@ #include "lie/SE3.h" #include "lie/SO3.h" +namespace ceres_nav { + bool AbsolutePositionFactor::Evaluate(double const *const *parameters, double *residuals, double **jacobians) const { @@ -62,4 +64,6 @@ bool AbsolutePositionFactor::Evaluate(double const *const *parameters, } return true; -} \ No newline at end of file +} + +} // namespace ceres_nav \ No newline at end of file diff --git a/src/factors/IMUPreintegrationFactor.cpp b/src/factors/IMUPreintegrationFactor.cpp index 4534417..d1559d7 100644 --- a/src/factors/IMUPreintegrationFactor.cpp +++ b/src/factors/IMUPreintegrationFactor.cpp @@ -7,10 +7,11 @@ #include +namespace ceres_nav { + IMUPreintegrationFactor::IMUPreintegrationFactor( - IMUIncrement imu_increment_, bool use_group_jacobians_, - const LieDirection &direction_, ExtendedPoseRepresentation pose_rep_) - : helper{imu_increment_, use_group_jacobians_, direction_, pose_rep_} {} + const IMUIncrement &imu_increment_, bool use_group_jacobians_) + : helper{imu_increment_, use_group_jacobians_} {} bool IMUPreintegrationFactor::Evaluate(double const *const *parameters, double *residuals, @@ -105,3 +106,4 @@ bool IMUPreintegrationFactor::Evaluate(double const *const *parameters, } return true; } +} // namespace ceres_nav \ No newline at end of file diff --git a/src/factors/IMUPriorFactor.cpp b/src/factors/IMUPriorFactor.cpp index 46e1b5c..570f640 100644 --- a/src/factors/IMUPriorFactor.cpp +++ b/src/factors/IMUPriorFactor.cpp @@ -5,6 +5,7 @@ #include +namespace ceres_nav { IMUPriorFactor::IMUPriorFactor( const Eigen::Matrix &prior_nav_state, const Eigen::Matrix &prior_imu_bias, @@ -76,3 +77,4 @@ bool IMUPriorFactor::Evaluate(double const *const *parameters, return true; } +} // namespace ceres_nav \ No newline at end of file diff --git a/src/factors/RelativeLandmarkFactor.cpp b/src/factors/RelativeLandmarkFactor.cpp index 285490d..8439d62 100644 --- a/src/factors/RelativeLandmarkFactor.cpp +++ b/src/factors/RelativeLandmarkFactor.cpp @@ -5,6 +5,8 @@ #include "lie/SE3.h" #include "lie/SO3.h" +namespace ceres_nav { + bool RelativeLandmarkFactor::Evaluate(double const *const *parameters, double *residuals, double **jacobians) const { @@ -79,4 +81,5 @@ bool RelativeLandmarkFactor::Evaluate(double const *const *parameters, } } return true; -} \ No newline at end of file +} +} // namespace ceres_nav \ No newline at end of file diff --git a/src/factors/RelativePoseFactor.cpp b/src/factors/RelativePoseFactor.cpp index 81fa6b1..7b4e440 100644 --- a/src/factors/RelativePoseFactor.cpp +++ b/src/factors/RelativePoseFactor.cpp @@ -1,6 +1,8 @@ #include "factors/RelativePoseFactor.h" #include "lie/SE3.h" +namespace ceres_nav { + RelativePoseFactor::RelativePoseFactor( const Eigen::Matrix4d &meas_, const Eigen::Matrix &sqrt_info_, @@ -85,4 +87,5 @@ bool RelativePoseFactor::Evaluate(double const *const *parameters, } return true; -} \ No newline at end of file +} +} // namespace ceres_nav \ No newline at end of file diff --git a/src/imu/IMUHelper.cpp b/src/imu/IMUHelper.cpp index 611ca19..8dd24ef 100644 --- a/src/imu/IMUHelper.cpp +++ b/src/imu/IMUHelper.cpp @@ -4,7 +4,8 @@ #include "imu/IMUHelper.h" #include "imu/IMUIncrement.h" -// #include +namespace ceres_nav { + Eigen::Matrix createGMatrix(const Eigen::Vector3d &gravity, double dt) { Eigen::Matrix G = Eigen::Matrix::Identity(); @@ -145,4 +146,6 @@ Eigen::Matrix adjointIE3(const Eigen::Matrix &X) { // preintegrateIMUMeasurements(rmi, imu_to_preintegrate); // return true; -// } \ No newline at end of file +// } + +} // namespace ceres_nav \ No newline at end of file diff --git a/src/imu/IMUIncrement.cpp b/src/imu/IMUIncrement.cpp index dba4ed8..57be287 100644 --- a/src/imu/IMUIncrement.cpp +++ b/src/imu/IMUIncrement.cpp @@ -10,6 +10,8 @@ #include +namespace ceres_nav { + IMUIncrement::IMUIncrement(Eigen::Matrix Q_ct_, Eigen::Vector3d init_gyro_bias, Eigen::Vector3d init_accel_bias, double init_stamp, @@ -86,6 +88,7 @@ void IMUIncrement::propagateCovarianceAndBiasJacobian( if (pose_rep == ExtendedPoseRepresentation::SE23) { computeContinuousTimeJacobiansSE23(C, v, r, omega, accel, A_ct, L_ct); } else if (pose_rep == ExtendedPoseRepresentation::Decoupled) { + // LOG(INFO) << "Decoupled Jacobians..."; computeContinuousTimeJacobiansDecoupled(C, v, r, omega, accel, A_ct, L_ct); } else { LOG(FATAL) << "Unknown pose representation: " << static_cast(pose_rep); @@ -117,8 +120,9 @@ void IMUIncrement::computeContinuousTimeJacobiansDecoupled( L_ct.setZero(); if (direction == LieDirection::left) { - LOG(INFO) << "Left lie direction for decoupled navigation state " + LOG(ERROR) << "Left lie direction for decoupled navigation state " "representation not yet supported with IMU increment!"; + std::exit(EXIT_FAILURE); } else if (direction == LieDirection::right) { Eigen::Vector3d unbiased_gyro = omega - gyro_bias; Eigen::Vector3d unbiased_accel = accel - accel_bias; @@ -194,4 +198,5 @@ void IMUIncrement::repropagate(const Eigen::Vector3d &init_gyro_bias, for (int i = 0; i < static_cast(dt_buf.size()); i++) { propagate(dt_buf[i], gyr_buf[i], acc_buf[i]); } -} \ No newline at end of file +} +} // namespace ceres_nav \ No newline at end of file diff --git a/src/imu/IMUPreintegrationHelper.cpp b/src/imu/IMUPreintegrationHelper.cpp index 4b6e1aa..3a28fa9 100644 --- a/src/imu/IMUPreintegrationHelper.cpp +++ b/src/imu/IMUPreintegrationHelper.cpp @@ -1,10 +1,11 @@ #include "imu/IMUPreintegrationHelper.h" +namespace ceres_nav { + IMUPreintegrationHelper::IMUPreintegrationHelper( - const IMUIncrement &imu_increment, bool use_group_jacobians_, - const LieDirection &direction_, ExtendedPoseRepresentation pose_rep_) + const IMUIncrement &imu_increment, bool use_group_jacobians_) : rmi{imu_increment}, use_group_jacobians{use_group_jacobians_}, - direction{direction_}, pose_rep{pose_rep_} {} + direction{imu_increment.direction}, pose_rep{imu_increment.pose_rep} {} Eigen::Matrix IMUPreintegrationHelper::computePreintegrationError( @@ -21,8 +22,8 @@ IMUPreintegrationHelper::computePreintegrationError( // predicted and measured RMI on SE_2(3) e_nav = SE23::minus(Y_pred, Y_meas, direction); } else if (pose_rep == ExtendedPoseRepresentation::Decoupled) { - Eigen::Vector3d delta_phi = SO3::minus( - Y_pred.block<3, 3>(0, 0), Y_meas.block<3, 3>(0, 0), direction); + Eigen::Vector3d delta_phi = SO3::minus(Y_pred.block<3, 3>(0, 0), + Y_meas.block<3, 3>(0, 0), direction); Eigen::Vector3d delta_v = Y_pred.block<3, 1>(0, 3) - Y_meas.block<3, 1>(0, 3); Eigen::Vector3d delta_r = @@ -92,7 +93,8 @@ IMUPreintegrationHelper::getUpdatedRMI(const IMUStateHolder &X_i) const { Eigen::Matrix3d delta_C_updated; // Update delta_C with the correct perturbation if (direction == LieDirection::left) { - LOG(INFO) << "Using left jacobians for decoupled navigation state representation."; + LOG(INFO) << "Using left jacobians for decoupled navigation state " + "representation."; delta_C_updated = SO3::expMap(dC_dbg * d_bg) * delta_C; } else if (direction == LieDirection::right) { // Perform first-order correction @@ -367,4 +369,6 @@ IMUPreintegrationHelper::computeRawJacobiansRightDecoupled( raw_jacobians.push_back(jac_i); raw_jacobians.push_back(jac_j); return raw_jacobians; -} \ No newline at end of file +} + +} // namespace ceres_nav \ No newline at end of file diff --git a/src/lib/StateCollection.cpp b/src/lib/StateCollection.cpp index 06971c4..99cdad9 100644 --- a/src/lib/StateCollection.cpp +++ b/src/lib/StateCollection.cpp @@ -2,6 +2,8 @@ #include "lib/StateId.h" #include "utils/Utils.h" +namespace ceres_nav { + void StateCollection::addState(const std::string &name, double timestamp, std::shared_ptr state) { int64_t timestamp_key = timestampToKey(timestamp); @@ -108,12 +110,12 @@ StateCollection::getStateByEstimatePointer(double *ptr) const { } bool StateCollection::getStateIDByEstimatePointer( - double *ptr, ceres_nav::StateID &state_id) const { + double *ptr, StateID &state_id) const { for (auto const &state_map_ : states_) { for (auto const &state : state_map_.second) { if (state.second->estimatePointer() == ptr) { state_id = - ceres_nav::StateID(state_map_.first, keyToTimestamp(state.first)); + StateID(state_map_.first, keyToTimestamp(state.first)); return true; } } @@ -139,4 +141,6 @@ StateCollection::getLatestState(const std::string &key) const { return it->second.rbegin()->second; } return nullptr; -} \ No newline at end of file +} + +} // namespace ceres_nav \ No newline at end of file diff --git a/src/lie/SE23.cpp b/src/lie/SE23.cpp index 1bf0cc5..e926746 100644 --- a/src/lie/SE23.cpp +++ b/src/lie/SE23.cpp @@ -3,6 +3,8 @@ #include #include +namespace ceres_nav { + Eigen::Matrix SE23::expMap(const Eigen::Matrix &x) { Eigen::Matrix X = Eigen::Matrix::Identity(); Eigen::Matrix3d R{SO3::expMap(x.block<3, 1>(0, 0))}; @@ -200,4 +202,6 @@ Eigen::Matrix SE23::minus(const Eigen::Matrix &Y, std::cerr << "Invalid Lie direction" << std::endl; return Eigen::Matrix::Zero(); } -} \ No newline at end of file +} + +} // namespace ceres_nav \ No newline at end of file diff --git a/src/lie/SE3.cpp b/src/lie/SE3.cpp index 7fd81e5..4a5ec90 100644 --- a/src/lie/SE3.cpp +++ b/src/lie/SE3.cpp @@ -4,6 +4,8 @@ #include #include +namespace ceres_nav { + Eigen::Matrix4d SE3::wedge(const Eigen::Matrix &xi) { Eigen::Matrix4d X; // clang-format off @@ -179,3 +181,5 @@ Eigen::Matrix SE3::minus(const Eigen::Matrix &Y, return Eigen::Matrix::Zero(); } } + +} // namespace ceres_nav \ No newline at end of file diff --git a/src/lie/SO3.cpp b/src/lie/SO3.cpp index ce89f83..f16991b 100644 --- a/src/lie/SO3.cpp +++ b/src/lie/SO3.cpp @@ -2,6 +2,8 @@ // #include "utils/utility.h" #include +namespace ceres_nav { + Eigen::Matrix3d SO3::cross(const Eigen::Vector3d &x) { Eigen::Matrix3d X; // clang-format off @@ -215,3 +217,5 @@ Eigen::MatrixBase &q) return ans; } */ + +} // namespace ceres_nav \ No newline at end of file diff --git a/src/local_parameterizations/DecoupledExtendedPoseLocalParameterization.cpp b/src/local_parameterizations/DecoupledExtendedPoseLocalParameterization.cpp index a8802c8..178e717 100644 --- a/src/local_parameterizations/DecoupledExtendedPoseLocalParameterization.cpp +++ b/src/local_parameterizations/DecoupledExtendedPoseLocalParameterization.cpp @@ -2,6 +2,8 @@ #include "lie/SE23.h" #include "lie/SO3.h" +namespace ceres_nav { + /** * ExtendedPoseLocalParameterization::Plus defines the update rule for elements * of SE_2(3). This function defines how to increment parameters x, given a @@ -42,4 +44,5 @@ bool DecoupledExtendedPoseLocalParameterization::Plus( x_plus_delta_raw.block<3, 1>(9, 0) = v_new; x_plus_delta_raw.block<3, 1>(12, 0) = r_new; return true; -} \ No newline at end of file +} +} // namespace ceres_nav diff --git a/src/local_parameterizations/ExtendedPoseLocalParameterization.cpp b/src/local_parameterizations/ExtendedPoseLocalParameterization.cpp index 357aa1e..ce5a022 100644 --- a/src/local_parameterizations/ExtendedPoseLocalParameterization.cpp +++ b/src/local_parameterizations/ExtendedPoseLocalParameterization.cpp @@ -1,5 +1,6 @@ #include "local_parameterizations/ExtendedPoseLocalParameterization.h" +namespace ceres_nav { /* * This function computes the Jacobian of the global parameterization w.r.t the * local parameterization. Within each cost function, the user is expected to @@ -25,3 +26,5 @@ ExtendedPoseLocalParameterization::getEigenJacobian() const { return jac; } + +} // namespace ceres_nav diff --git a/src/local_parameterizations/PoseLocalParameterization.cpp b/src/local_parameterizations/PoseLocalParameterization.cpp index 0c07f64..43cf052 100644 --- a/src/local_parameterizations/PoseLocalParameterization.cpp +++ b/src/local_parameterizations/PoseLocalParameterization.cpp @@ -2,6 +2,7 @@ #include "lie/SE3.h" #include "lie/SO3.h" +namespace ceres_nav { /** * ExtendedPoseLocalParameterization::Plus defines the update rule for elements * of SE_2(3). This function defines how to increment parameters x, given a @@ -62,3 +63,4 @@ Eigen::Matrix PoseLocalParameterization::getEigenJacobian() const return jac; } +} // namespace ceres_nav \ No newline at end of file diff --git a/src/local_parameterizations/SE23LocalParameterization.cpp b/src/local_parameterizations/SE23LocalParameterization.cpp index 25c79e3..d039dd5 100644 --- a/src/local_parameterizations/SE23LocalParameterization.cpp +++ b/src/local_parameterizations/SE23LocalParameterization.cpp @@ -2,6 +2,8 @@ #include "lie/SE23.h" #include "lie/SO3.h" +namespace ceres_nav { + /** * ExtendedPoseLocalParameterization::Plus defines the update rule for elements * of SE_2(3). This function defines how to increment parameters x, given a @@ -38,4 +40,5 @@ bool SE23LocalParameterization::Plus(const double *x, const double *delta, x_plus_delta_raw.block<3, 1>(12, 0) = r_new; return true; -} \ No newline at end of file +} +} // namespace ceres_nav \ No newline at end of file diff --git a/src/local_parameterizations/SO3LocalParameterization.cpp b/src/local_parameterizations/SO3LocalParameterization.cpp index c761c68..47cd95b 100644 --- a/src/local_parameterizations/SO3LocalParameterization.cpp +++ b/src/local_parameterizations/SO3LocalParameterization.cpp @@ -2,6 +2,8 @@ #include "lie/SE3.h" #include "lie/SO3.h" +namespace ceres_nav { + /** * Defines the plus operator for elements of SO(3). * @@ -49,3 +51,4 @@ Eigen::Matrix SO3LocalParameterization::getEigenJacobian() const { jac.block<3, 3>(0, 0) = Eigen::Matrix3d::Identity(); return jac; } +} // namespace ceres_nav \ No newline at end of file diff --git a/tests/test_factor_graph.cpp b/tests/test_factor_graph.cpp index 06cb891..b3830a0 100644 --- a/tests/test_factor_graph.cpp +++ b/tests/test_factor_graph.cpp @@ -10,8 +10,10 @@ #include +using namespace ceres_nav; + TEST_CASE("Test Add/Remove states from FactorGraph") { - ceres_nav::FactorGraph factor_graph; + FactorGraph factor_graph; std::shared_ptr> state = std::make_shared>(Eigen::Vector3d(1.0, 2.0, 3.0)); @@ -21,7 +23,7 @@ TEST_CASE("Test Add/Remove states from FactorGraph") { REQUIRE(factor_graph.numParameterBlocks() == 1); // Get the state pointer for this state - std::vector state_ids = {ceres_nav::StateID("x", 0.0)}; + std::vector state_ids = {StateID("x", 0.0)}; std::vector estimate_ptrs; factor_graph.getStatePointers(state_ids, estimate_ptrs); REQUIRE(estimate_ptrs.size() == 1); @@ -33,7 +35,7 @@ TEST_CASE("Test Add/Remove states from FactorGraph") { } TEST_CASE("Test setting states constant") { - ceres_nav::FactorGraph factor_graph; + FactorGraph factor_graph; std::shared_ptr> state = std::make_shared>(Eigen::Vector3d(1.0, 2.0, 3.0)); factor_graph.addState("x", 0.0, state); diff --git a/tests/test_jacobians.cpp b/tests/test_jacobians.cpp index 0f3a3c1..db6f3e5 100644 --- a/tests/test_jacobians.cpp +++ b/tests/test_jacobians.cpp @@ -25,6 +25,8 @@ #include "lib/ExtendedPoseParameterBlock.h" #include "utils/CostFunctionUtils.h" +using namespace ceres_nav; + TEST_CASE("Test AbsolutePositionFactor Jacobians") { // Create an absolute position factor Eigen::Matrix3d attitude = SO3::expMap(Eigen::Vector3d(0.5, -0.2, 0.3)); @@ -250,7 +252,7 @@ TEST_CASE("IMUPreintegrationFactor") { // Create the factor std::shared_ptr factor = std::make_shared( - imu_increment, use_group_jacobians, direction, rep_type); + imu_increment, use_group_jacobians); // Evaluate the factor with the parameter blocks std::vector analytical_jacobians; diff --git a/tests/test_parameter_blocks.cpp b/tests/test_parameter_blocks.cpp index 23bf0d5..2911ef3 100644 --- a/tests/test_parameter_blocks.cpp +++ b/tests/test_parameter_blocks.cpp @@ -7,6 +7,8 @@ #include "lie/SO3.h" +using namespace ceres_nav; + TEST_CASE("Test Parameter Blocks") { ParameterBlock<3> block("3d_point"); REQUIRE(block.dimension() == 3); diff --git a/tests/test_state_collection.cpp b/tests/test_state_collection.cpp index 010ee05..35d4d97 100644 --- a/tests/test_state_collection.cpp +++ b/tests/test_state_collection.cpp @@ -14,6 +14,8 @@ #include +using namespace ceres_nav; + TEST_CASE("Test Add/Remove Operations") { StateCollection state_collection;