diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d60969f803754dbcaccb4516f04dbcbe535e6d3..0a360182419dd86b64a8377d976c14759e5bed62 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -204,7 +204,7 @@ SET(HDRS_PROCESSOR include/core/processor/processor_motion.h include/core/processor/processor_odom_2d.h # include/core/processor/processor_odom_3d.h - # include/core/processor/processor_pose.h + include/core/processor/processor_pose.h include/core/processor/processor_tracker.h include/core/processor/processor_tracker_feature.h include/core/processor/processor_tracker_landmark.h @@ -216,9 +216,7 @@ SET(HDRS_SENSOR # include/core/sensor/sensor_diff_drive.h # include/core/sensor/sensor_motion_model.h include/core/sensor/sensor_odom.h - include/core/sensor/sensor_odom_2d.h - # include/core/sensor/sensor_odom_3d.h - # include/core/sensor/sensor_pose.h + include/core/sensor/sensor_pose.h ) SET(HDRS_SOLVER include/core/solver/solver_manager.h @@ -313,8 +311,8 @@ SET(SRCS_PROCESSOR # src/processor/processor_loop_closure.cpp src/processor/processor_motion.cpp src/processor/processor_odom_2d.cpp - # src/processor/processor_odom_3d.cpp - # src/processor/processor_pose.cpp + src/processor/processor_odom_3d.cpp + src/processor/processor_pose.cpp src/processor/processor_tracker.cpp src/processor/processor_tracker_feature.cpp src/processor/processor_tracker_landmark.cpp @@ -325,9 +323,7 @@ SET(SRCS_SENSOR # src/sensor/sensor_diff_drive.cpp # src/sensor/sensor_motion_model.cpp src/sensor/sensor_odom.cpp - src/sensor/sensor_odom_2d.cpp - # src/sensor/sensor_odom_3d.cpp - # src/sensor/sensor_pose.cpp + src/sensor/sensor_pose.cpp ) SET(SRCS_SOLVER src/solver/solver_manager.cpp diff --git a/demos/hello_wolf/hello_wolf.cpp b/demos/hello_wolf/hello_wolf.cpp index b2b8b4fb6add295a6196e5992a729f6d96f3b8d2..366d68f47c5f675fba20ad28ee1ccbe6162c3e8c 100644 --- a/demos/hello_wolf/hello_wolf.cpp +++ b/demos/hello_wolf/hello_wolf.cpp @@ -37,7 +37,7 @@ // wolf core includes #include "../../include/core/ceres_wrapper/solver_ceres.h" #include "core/common/wolf.h" -#include "core/sensor/sensor_odom_2d.h" +#include "core/sensor/sensor_odom.h" #include "core/processor/processor_odom_2d.h" #include "core/capture/capture_odom_2d.h" #include "sensor_range_bearing.h" @@ -129,10 +129,10 @@ int main() ceres->getSolverOptions().max_num_iterations = 1000; // We depart far from solution, need a lot of iterations // sensor odometer 2d - ParamsSensorOdom2dPtr intrinsics_odo = std::make_shared<ParamsSensorOdom2d>(); + ParamsSensorOdomPtr intrinsics_odo = std::make_shared<ParamsSensorOdom>(); Priors priors_odo = {{'P',Prior("P", Vector2d::Zero())}, {'O',Prior("O", Vector1d::Zero())}}; - SensorBasePtr sensor_odo = problem->installSensor("SensorOdom2d", "sensor odo", intrinsics_odo, priors_odo); + SensorBasePtr sensor_odo = problem->installSensor("SensorOdom", "sensor odo", intrinsics_odo, priors_odo); // processor odometer 2d ParamsProcessorOdom2dPtr params_odo = std::make_shared<ParamsProcessorOdom2d>(); diff --git a/include/core/processor/processor_odom_2d.h b/include/core/processor/processor_odom_2d.h index fea39c4d6808a7a798a83d7b8b99dfbb47abec9d..aa9011ea6efc08609182185d1c0e8e2cd6f8ba75 100644 --- a/include/core/processor/processor_odom_2d.h +++ b/include/core/processor/processor_odom_2d.h @@ -72,38 +72,38 @@ class ProcessorOdom2d : public ProcessorMotion protected: void computeCurrentDelta(const Eigen::VectorXd& _data, - const Eigen::MatrixXd& _data_cov, - const Eigen::VectorXd& _calib, - const double _dt, - Eigen::VectorXd& _delta, - Eigen::MatrixXd& _delta_cov, - Eigen::MatrixXd& _jacobian_calib) const override; + const Eigen::MatrixXd& _data_cov, + const Eigen::VectorXd& _calib, + const double _dt, + Eigen::VectorXd& _delta, + Eigen::MatrixXd& _delta_cov, + Eigen::MatrixXd& _jacobian_calib) const override; void deltaPlusDelta(const Eigen::VectorXd& _delta1, - const Eigen::VectorXd& _delta2, - const double _Dt2, - Eigen::VectorXd& _delta1_plus_delta2) const override; + const Eigen::VectorXd& _delta2, + const double _Dt2, + Eigen::VectorXd& _delta1_plus_delta2) const override; void deltaPlusDelta(const Eigen::VectorXd& _delta1, - const Eigen::VectorXd& _delta2, - const double _Dt2, - Eigen::VectorXd& _delta1_plus_delta2, - Eigen::MatrixXd& _jacobian1, - Eigen::MatrixXd& _jacobian2) const override; + const Eigen::VectorXd& _delta2, + const double _Dt2, + Eigen::VectorXd& _delta1_plus_delta2, + Eigen::MatrixXd& _jacobian1, + Eigen::MatrixXd& _jacobian2) const override; void statePlusDelta(const VectorComposite& _x, - const Eigen::VectorXd& _delta, - const double _Dt, - VectorComposite& _x_plus_delta) const override; + const Eigen::VectorXd& _delta, + const double _Dt, + VectorComposite& _x_plus_delta) const override; Eigen::VectorXd deltaZero() const override; Eigen::VectorXd correctDelta(const Eigen::VectorXd& delta_preint, const Eigen::VectorXd& delta_step) const override; CaptureMotionPtr emplaceCapture(const FrameBasePtr& _frame_own, - const SensorBasePtr& _sensor, - const TimeStamp& _ts, - const VectorXd& _data, - const MatrixXd& _data_cov, - const VectorXd& _calib, - const VectorXd& _calib_preint, - const CaptureBasePtr& _capture_origin_ptr) override; + const SensorBasePtr& _sensor, + const TimeStamp& _ts, + const VectorXd& _data, + const MatrixXd& _data_cov, + const VectorXd& _calib, + const VectorXd& _calib_preint, + const CaptureBasePtr& _capture_origin_ptr) override; FeatureBasePtr emplaceFeature(CaptureMotionPtr _capture_motion) override; FactorBasePtr emplaceFactor(FeatureBasePtr _feature, CaptureBasePtr _capture_origin) override; diff --git a/include/core/processor/processor_odom_3d.h b/include/core/processor/processor_odom_3d.h index 02cdbd5ef4480ccd1a0ba28ab0db5c44886fa58c..3008bbc807747525f549cf8a349d73a38b088c0f 100644 --- a/include/core/processor/processor_odom_3d.h +++ b/include/core/processor/processor_odom_3d.h @@ -30,7 +30,6 @@ #define SRC_PROCESSOR_ODOM_3d_H_ #include "core/processor/processor_motion.h" -#include "core/sensor/sensor_odom_3d.h" #include "core/capture/capture_odom_3d.h" #include "core/math/rotations.h" #include "core/factor/factor_relative_pose_3d.h" diff --git a/include/core/sensor/sensor_odom_2d.h b/include/core/sensor/sensor_odom_2d.h deleted file mode 100644 index 117245f896f4362bba30c740bd7b5974588d0282..0000000000000000000000000000000000000000 --- a/include/core/sensor/sensor_odom_2d.h +++ /dev/null @@ -1,113 +0,0 @@ -//--------LICENSE_START-------- -// -// Copyright (C) 2020,2021,2022 Institut de Robòtica i Informà tica Industrial, CSIC-UPC. -// Authors: Joan Solà Ortega (jsola@iri.upc.edu) -// All rights reserved. -// -// This file is part of WOLF -// WOLF is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// -//--------LICENSE_END-------- -#ifndef SENSOR_ODOM_2d_H_ -#define SENSOR_ODOM_2d_H_ - -//wolf includes -#include "core/sensor/sensor_base.h" -#include "core/utils/params_server.h" - -namespace wolf { - -WOLF_STRUCT_PTR_TYPEDEFS(ParamsSensorOdom2d); - -struct ParamsSensorOdom2d : public ParamsSensorBase -{ - double k_disp_to_disp; ///< ratio of displacement variance to displacement, for odometry noise calculation - double k_rot_to_rot; ///< ratio of rotation variance to rotation, for odometry noise calculation - - ParamsSensorOdom2d() = default; - ParamsSensorOdom2d(std::string _unique_name, const ParamsServer& _server): - ParamsSensorBase(_unique_name, _server) - { - k_disp_to_disp = _server.getParam<double>(prefix + _unique_name + "/k_disp_to_disp"); - k_rot_to_rot = _server.getParam<double>(prefix + _unique_name + "/k_rot_to_rot"); - } - - ~ParamsSensorOdom2d() override = default; - - std::string print() const override - { - return ParamsSensorBase::print() + "\n" - + "k_disp_to_disp: " + std::to_string(k_disp_to_disp) + "\n" - + "k_rot_to_rot: " + std::to_string(k_rot_to_rot) + "\n"; - } -}; - -WOLF_PTR_TYPEDEFS(SensorOdom2d); - -class SensorOdom2d : public SensorBase -{ - protected: - ParamsSensorOdom2dPtr params_odom2d_; - - public: - SensorOdom2d(const std::string& _unique_name, - const SizeEigen& _dim, - ParamsSensorOdom2dPtr _params, - const Priors& _priors); - - SensorOdom2d(const std::string& _unique_name, - const SizeEigen& _dim, - ParamsSensorOdom2dPtr _params, - const ParamsServer& _server); - - WOLF_SENSOR_CREATE(SensorOdom2d, ParamsSensorOdom2d); - - ~SensorOdom2d() override; - - /** \brief Returns displacement noise factor - * - * Returns displacement noise factor - * - **/ - double getDispVarToDispNoiseFactor() const; - - /** \brief Returns rotation noise factor - * - * Returns rotation noise factor - * - **/ - double getRotVarToRotNoiseFactor() const; - - /** - * Compute covariance of odometry given the motion data. - * - * computeCovFromMotion() produces a diagonal covariance that depends on the amount of motion: - * - a linear dependence with total displacement - * - a linear dependence with total rotation - * - * The formula for the variances is as follows: - * - * - disp_var = k_disp_to_disp * displacement - * - rot_var = k_rot_to_rot * rotation - * - * See implementation for details. - */ - // noise - Eigen::MatrixXd computeNoiseCov(const Eigen::VectorXd & _data) const override; - -}; - -} // namespace wolf - -#endif // SENSOR_ODOM_2d_H_ diff --git a/include/core/sensor/sensor_odom_3d.h b/include/core/sensor/sensor_odom_3d.h deleted file mode 100644 index f1977980b7187128302dc2ed7425168ca12a0c68..0000000000000000000000000000000000000000 --- a/include/core/sensor/sensor_odom_3d.h +++ /dev/null @@ -1,149 +0,0 @@ -//--------LICENSE_START-------- -// -// Copyright (C) 2020,2021,2022 Institut de Robòtica i Informà tica Industrial, CSIC-UPC. -// Authors: Joan Solà Ortega (jsola@iri.upc.edu) -// All rights reserved. -// -// This file is part of WOLF -// WOLF is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// -//--------LICENSE_END-------- -/** - * \file sensor_odom_3d.h - * - * Created on: Oct 7, 2016 - * \author: jsola - */ - -#ifndef SRC_SENSOR_ODOM_3d_H_ -#define SRC_SENSOR_ODOM_3d_H_ - -//wolf includes -#include "core/sensor/sensor_base.h" -#include "core/utils/params_server.h" - -namespace wolf { - -WOLF_STRUCT_PTR_TYPEDEFS(ParamsSensorOdom3d); - -struct ParamsSensorOdom3d : public ParamsSensorBase -{ - double k_disp_to_disp; ///< ratio of displacement variance to displacement, for odometry noise calculation - double k_disp_to_rot; ///< ratio of displacement variance to rotation, for odometry noise calculation - double k_rot_to_rot; ///< ratio of rotation variance to rotation, for odometry noise calculation - double min_disp_var; - double min_rot_var; - - ParamsSensorOdom3d() = default; - ParamsSensorOdom3d(std::string _unique_name, const ParamsServer& _server): - ParamsSensorBase(_unique_name, _server) - { - k_disp_to_disp = _server.getParam<double>(prefix + _unique_name + "/k_disp_to_disp"); - k_disp_to_rot = _server.getParam<double>(prefix + _unique_name + "/k_disp_to_rot"); - k_rot_to_rot = _server.getParam<double>(prefix + _unique_name + "/k_rot_to_rot"); - min_disp_var = _server.getParam<double>(prefix + _unique_name + "/min_disp_var"); - min_rot_var = _server.getParam<double>(prefix + _unique_name + "/min_rot_var"); - } - ~ParamsSensorOdom3d() override = default; - std::string print() const override - { - return ParamsSensorBase::print() + "\n" - + "k_disp_to_disp: " + std::to_string(k_disp_to_disp) + "\n" - + "k_disp_to_rot: " + std::to_string(k_disp_to_rot) + "\n" - + "k_rot_to_rot: " + std::to_string(k_rot_to_rot) + "\n" - + "min_disp_var: " + std::to_string(min_disp_var) + "\n" - + "min_rot_var: " + std::to_string(min_rot_var) + "\n"; - } -}; - -WOLF_PTR_TYPEDEFS(SensorOdom3d); - -class SensorOdom3d : public SensorBase -{ - protected: - double k_disp_to_disp_; ///< ratio of displacement variance to displacement, for odometry noise calculation - double k_disp_to_rot_; ///< ratio of displacement variance to rotation, for odometry noise calculation - double k_rot_to_rot_; ///< ratio of rotation variance to rotation, for odometry noise calculation - double min_disp_var_; - double min_rot_var_; - - public: - SensorOdom3d(const std::string& _unique_name, - const SizeEigen& _dim, - ParamsSensorOdom2dPtr _params, - const Priors& _priors); - - SensorOdom3d(const std::string& _unique_name, - const SizeEigen& _dim, - ParamsSensorOdom3dPtr _params, - const ParamsServer& _server); - - WOLF_SENSOR_CREATE(SensorOdom3d, ParamsSensorOdom3dPtr); - - ~SensorOdom3d() override; - - double getDispVarToDispNoiseFactor() const; - double getDispVarToRotNoiseFactor() const; - double getRotVarToRotNoiseFactor() const; - double getMinDispVar() const; - double getMinRotVar() const; - - /** - * Compute covariance of odometry given the motion data. - * - * computeCovFromMotion() produces a diagonal covariance that depends on the amount of motion: - * - a minimal value for displacement - * - a minimal value for rotation - * - a linear dependence with total displacement - * - a linear dependence with total rotation - * - * The formula for the variances is as follows: - * - * - disp_var = disp_var_min + k_disp_to_disp * displacement - * - rot_var = rot_var_min + k_disp_to_rot * displacement + k_rot_to_rot * rotation - * - * See implementation for details. - */ - Matrix6d computeNoiseCov (const VectorXd& _data) const override; - -}; - -inline double SensorOdom3d::getDispVarToDispNoiseFactor() const -{ - return k_disp_to_disp_; -} - -inline double SensorOdom3d::getDispVarToRotNoiseFactor() const -{ - return k_disp_to_rot_; -} - -inline double SensorOdom3d::getRotVarToRotNoiseFactor() const -{ - return k_rot_to_rot_; -} - -inline double SensorOdom3d::getMinDispVar() const -{ - return min_disp_var_; -} - -inline double SensorOdom3d::getMinRotVar() const -{ - return min_rot_var_; -} - -} /* namespace wolf */ - -#endif /* SRC_SENSOR_ODOM_3d_H_ */ diff --git a/include/core/sensor/sensor_pose.h b/include/core/sensor/sensor_pose.h index e653fe458d39107c143da729a006c727df3959e3..72f5891837bfeb8b1fba1490a76424f8baae951b 100644 --- a/include/core/sensor/sensor_pose.h +++ b/include/core/sensor/sensor_pose.h @@ -41,23 +41,20 @@ struct ParamsSensorPose : public ParamsSensorBase { double std_p = 1; // m double std_o = 1; // rad - ParamsSensorPose() - { - //DEFINED FOR COMPATIBILITY PURPOSES. TO BE REMOVED IN THE FUTURE. - } + ParamsSensorPose() = default; ParamsSensorPose(std::string _unique_name, const ParamsServer& _server): ParamsSensorBase(_unique_name, _server) { std_p = _server.getParam<double>(prefix + _unique_name + "/std_p"); - std_o = _server.getParam<double>(prefix + _unique_name + "/std_o"); + std_o = _server.getParam<double>(prefix + _unique_name + "/std_o"); } + ~ParamsSensorPose() override = default; std::string print() const override { return ParamsSensorBase::print() + "\n" + "std_p: " + std::to_string(std_p) + "\n" - + "std_o: " + std::to_string(std_o) + "\n"; + + "std_o: " + std::to_string(std_o) + "\n"; } - ~ParamsSensorPose() override = default; }; WOLF_PTR_TYPEDEFS(SensorPose); @@ -65,36 +62,41 @@ WOLF_PTR_TYPEDEFS(SensorPose); class SensorPose : public SensorBase { protected: - double std_p_; // standard deviation of translation measurements - double std_o_; // standard deviation of orientation measurements + SizeEigen dim_; + ParamsSensorPosePtr params_pose_; public: - SensorPose(const Eigen::VectorXd& _extrinsics_pq, const ParamsSensorPose& params); - SensorPose(const Eigen::VectorXd& _extrinsics_pq, ParamsSensorPosePtr params); - WOLF_SENSOR_CREATE(SensorPose, ParamsSensorPose, 7); + SensorPose(const std::string& _unique_name, + const SizeEigen& _dim, + ParamsSensorPosePtr _params, + const Priors& _priors); + + SensorPose(const std::string& _unique_name, + const SizeEigen& _dim, + ParamsSensorPosePtr _params, + const ParamsServer& _server); + + WOLF_SENSOR_CREATE(SensorPose, ParamsSensorPose); ~SensorPose() override; double getStdP() const; double getStdO() const; + Eigen::MatrixXd computeNoiseCov(const Eigen::VectorXd & _data) const override; + }; inline double SensorPose::getStdP() const { - return std_p_; + return params_pose_->std_p; } inline double SensorPose::getStdO() const { - return std_o_; + return params_pose_->std_o; } -// inline Matrix6d SensorPose::computeDataCov() const -// { -// return (Vector6d() << std_p_*std_p_, std_p_*std_p_, std_p_*std_p_, std_o_*std_o_, std_o_*std_o_, std_o_*std_o_).finished().asDiagonal(); -// } - } /* namespace wolf */ #endif /* SRC_SENSOR_POSE_H_ */ diff --git a/src/processor/processor_odom_2d.cpp b/src/processor/processor_odom_2d.cpp index 98f55c0f0d6c5ff9af08d627c1ef4d67b351783e..78ecb0fddf8fce5ecbc50c70bbc2d72ff04a80c6 100644 --- a/src/processor/processor_odom_2d.cpp +++ b/src/processor/processor_odom_2d.cpp @@ -20,7 +20,7 @@ // //--------LICENSE_END-------- #include "core/processor/processor_odom_2d.h" -#include "core/sensor/sensor_odom_2d.h" +#include "core/sensor/sensor_odom.h" #include "core/math/covariance.h" #include "core/state_block/state_composite.h" #include "core/factor/factor_relative_pose_2d.h" @@ -29,8 +29,8 @@ namespace wolf { ProcessorOdom2d::ProcessorOdom2d(ParamsProcessorOdom2dPtr _params) : - ProcessorMotion("ProcessorOdom2d", "PO", 2, 3, 3, 3, 2, 0, _params), - params_odom_2d_(_params) + ProcessorMotion("ProcessorOdom2d", "PO", 2, 3, 3, 3, 2, 0, _params), + params_odom_2d_(_params) { // } diff --git a/src/processor/processor_odom_3d.cpp b/src/processor/processor_odom_3d.cpp index 471dd627361266aad20356543345355a5d18bdbf..e96f3a7de719b94da693d72a1aa13482d7852dea 100644 --- a/src/processor/processor_odom_3d.cpp +++ b/src/processor/processor_odom_3d.cpp @@ -20,6 +20,7 @@ // //--------LICENSE_END-------- #include "core/processor/processor_odom_3d.h" +#include "core/sensor/sensor_odom.h" #include "core/math/SE3.h" namespace wolf @@ -38,9 +39,8 @@ ProcessorOdom3d::~ProcessorOdom3d() void ProcessorOdom3d::configure(SensorBasePtr _sensor) { - assert (_sensor && "Trying to configure processor with a sensor but provided sensor is nullptr."); - - SensorOdom3dPtr sen_ptr = std::static_pointer_cast<SensorOdom3d>(_sensor); + if (not std::dynamic_pointer_cast<SensorOdom>(_sensor)) + throw std::runtime_error("Configuring ProcessorOdom3d: provided sensor is null or not of type 'SensorOdom'"); } void ProcessorOdom3d::computeCurrentDelta(const Eigen::VectorXd& _data, diff --git a/src/sensor/sensor_base.cpp b/src/sensor/sensor_base.cpp index cf8191714fc59c19891e107828f51b1baec6b20b..3f9b4901757503b36287962b06f570c38b822431 100644 --- a/src/sensor/sensor_base.cpp +++ b/src/sensor/sensor_base.cpp @@ -52,6 +52,10 @@ SensorBase::SensorBase(const std::string& _type, assert(_keys_types_apart_from_PO.count('P') == 0 and _keys_types_apart_from_PO.count('O') == 0 and "SensorBase: _keys_types_apart_from_PO should not contain 'P' or 'O' keys"); + + // check params valid + if (not params_) + throw std::runtime_error("SensorBase: in constructor, ParamsSensorBase pointer is null"); // check priors have all _keys_types_apart_from_PO (PO will be checked in loadPriors()) for (auto key_type : _keys_types_apart_from_PO) @@ -89,6 +93,10 @@ SensorBase::SensorBase(const std::string& _type, _keys_types_apart_from_PO.count('O') == 0 and "SensorBase: _keys_types_apart_from_PO should not contain 'P' or 'O' keys"); + // check params valid + if (not params_) + throw std::runtime_error("SensorBase: in constructor, ParamsSensorBase pointer is null"); + // create priors std::unordered_map<char, std::string> keys_types = _keys_types_apart_from_PO; keys_types['P'] = "P"; // equivalent to "StateBlock"; diff --git a/src/sensor/sensor_odom_2d.cpp b/src/sensor/sensor_odom_2d.cpp deleted file mode 100644 index 0abef3899bf3ef237139876dafb97cf869c1f5cc..0000000000000000000000000000000000000000 --- a/src/sensor/sensor_odom_2d.cpp +++ /dev/null @@ -1,90 +0,0 @@ -//--------LICENSE_START-------- -// -// Copyright (C) 2020,2021,2022 Institut de Robòtica i Informà tica Industrial, CSIC-UPC. -// Authors: Joan Solà Ortega (jsola@iri.upc.edu) -// All rights reserved. -// -// This file is part of WOLF -// WOLF is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// -//--------LICENSE_END-------- -#include "core/sensor/sensor_odom_2d.h" -#include "core/state_block/state_block.h" -#include "core/state_block/state_angle.h" - -namespace wolf { -SensorOdom2d::SensorOdom2d(const std::string& _unique_name, - const SizeEigen& _dim, - ParamsSensorOdom2dPtr _params, - const Priors& _priors) : - SensorBase("SensorOdom2d", - _unique_name, - _dim, - _params, - _priors), - params_odom2d_(_params) -{ - if (_dim != 2) - throw std::runtime_error("SensorOdom2d only works with 2D problems"); -} - -SensorOdom2d::SensorOdom2d(const std::string& _unique_name, - const SizeEigen& _dim, - ParamsSensorOdom2dPtr _params, - const ParamsServer& _server) : - SensorBase("SensorOdom2d", - _unique_name, - _dim, - _params, - _server), - params_odom2d_(_params) -{ - if (_dim != 2) - throw std::runtime_error("SensorOdom2d only works with 2D problems"); -} - -SensorOdom2d::~SensorOdom2d() -{ - // -} - -double SensorOdom2d::getDispVarToDispNoiseFactor() const -{ - return params_odom2d_->k_disp_to_disp; -} - -double SensorOdom2d::getRotVarToRotNoiseFactor() const -{ - return params_odom2d_->k_rot_to_rot; -} - -Eigen::MatrixXd SensorOdom2d::computeNoiseCov(const Eigen::VectorXd & _data) const -{ - assert(_data.size() == 2); - double d = fabs(_data(0)); - double r = fabs(_data(1)); - - double dvar = params_odom2d_->k_disp_to_disp * d; - double rvar = params_odom2d_->k_rot_to_rot * r; - - return (Vector2d() << dvar, rvar).finished().asDiagonal(); -} - -} - -// Register in the FactorySensor -#include "core/sensor/factory_sensor.h" -namespace wolf { -WOLF_REGISTER_SENSOR(SensorOdom2d); -} // namespace wolf diff --git a/src/sensor/sensor_odom_3d.cpp b/src/sensor/sensor_odom_3d.cpp deleted file mode 100644 index b44561ff402bef4971b211cfa2eae43724457fc3..0000000000000000000000000000000000000000 --- a/src/sensor/sensor_odom_3d.cpp +++ /dev/null @@ -1,84 +0,0 @@ -//--------LICENSE_START-------- -// -// Copyright (C) 2020,2021,2022 Institut de Robòtica i Informà tica Industrial, CSIC-UPC. -// Authors: Joan Solà Ortega (jsola@iri.upc.edu) -// All rights reserved. -// -// This file is part of WOLF -// WOLF is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// -//--------LICENSE_END-------- -/** - * \file sensor_odom_3d.cpp - * - * Created on: Oct 7, 2016 - * \author: jsola - */ - -#include "core/sensor/sensor_odom_3d.h" - -#include "core/state_block/state_block.h" -#include "core/state_block/state_quaternion.h" -#include "core/math/rotations.h" - -namespace wolf { - -SensorOdom3d::SensorOdom3d(const Eigen::VectorXd& _extrinsics_pq, const ParamsSensorOdom3d& _intrinsics) : - SensorBase("SensorOdom3d", std::make_shared<StateBlock>(_extrinsics_pq.head(3), true), std::make_shared<StateQuaternion>(_extrinsics_pq.tail(4), true), nullptr, 6), - k_disp_to_disp_(_intrinsics.k_disp_to_disp), - k_disp_to_rot_(_intrinsics.k_disp_to_rot), - k_rot_to_rot_(_intrinsics.k_rot_to_rot), - min_disp_var_(_intrinsics.min_disp_var), - min_rot_var_(_intrinsics.min_rot_var) -{ - assert(_extrinsics_pq.size() == 7 && "Bad extrinsics vector size! Should be 7 for 3d."); - - noise_cov_ = (Eigen::Vector6d() << min_disp_var_, min_disp_var_, min_disp_var_, min_rot_var_, min_rot_var_, min_rot_var_).finished().asDiagonal(); - setNoiseCov(noise_cov_); // sets also noise_std_ -} - -SensorOdom3d::SensorOdom3d(const Eigen::VectorXd& _extrinsics_pq, ParamsSensorOdom3dPtr _intrinsics) : - SensorOdom3d(_extrinsics_pq, *_intrinsics) -{ - // -} - -SensorOdom3d::~SensorOdom3d() -{ - // -} - -Eigen::Matrix6d SensorOdom3d::computeCovFromMotion (const VectorXd& _data) const -{ - double d = _data.head<3>().norm(); - double r; - if (_data.size() == 6) - r = _data.tail<3>().norm(); - else - r = 2 * acos(_data(6)); // arc cos of real part of quaternion - - double dvar = min_disp_var_ + k_disp_to_disp_ * d; - double rvar = min_rot_var_ + k_disp_to_rot_ * d + k_rot_to_rot_ * r; - - return (Vector6d() << dvar, dvar, dvar, rvar, rvar, rvar).finished().asDiagonal(); -} - -} // namespace wolf - -// Register in the FactorySensor -#include "core/sensor/factory_sensor.h" -namespace wolf { -WOLF_REGISTER_SENSOR(SensorOdom3d); -WOLF_REGISTER_SENSOR_AUTO(SensorOdom3d); -} diff --git a/src/sensor/sensor_pose.cpp b/src/sensor/sensor_pose.cpp index 87f2880b8f3e58e1898470572e630375bd792d8c..5be1e7473109691139f8ff4e042e45a2779378dd 100644 --- a/src/sensor/sensor_pose.cpp +++ b/src/sensor/sensor_pose.cpp @@ -28,32 +28,56 @@ #include "core/sensor/sensor_pose.h" -#include "core/state_block/state_block.h" -#include "core/state_block/state_quaternion.h" -#include "core/math/rotations.h" - namespace wolf { - -SensorPose::SensorPose(const Eigen::VectorXd& _extrinsics_pq, const ParamsSensorPose& _intrinsics) : - SensorBase("SensorPose", std::make_shared<StateBlock>(_extrinsics_pq.head(3), true), std::make_shared<StateQuaternion>(_extrinsics_pq.tail(4), true), nullptr, 6), - std_p_(_intrinsics.std_p), - std_o_(_intrinsics.std_o) + +SensorPose::SensorPose(const std::string& _unique_name, + const SizeEigen& _dim, + ParamsSensorPosePtr _params, + const Priors& _priors) : + SensorBase("SensorPose", + _unique_name, + _dim, + _params, + _priors), + dim_(_dim), + params_pose_(_params) { - assert(_extrinsics_pq.size() == 7 && "Bad extrinsics vector size! Should be 7 for 3d."); - - noise_cov_ = (Eigen::Vector6d() << std_p_*std_p_, std_p_*std_p_, std_p_*std_p_, std_o_*std_o_, std_o_*std_o_, std_o_*std_o_).finished().asDiagonal(); - setNoiseCov(noise_cov_); // sets also noise_std_ + assert(dim_ == 2 or dim_ == 3); } -SensorPose::SensorPose(const Eigen::VectorXd& _extrinsics_pq, ParamsSensorPosePtr _intrinsics) : - SensorPose(_extrinsics_pq, *_intrinsics) +SensorPose::SensorPose(const std::string& _unique_name, + const SizeEigen& _dim, + ParamsSensorPosePtr _params, + const ParamsServer& _server) : + SensorBase("SensorPose", + _unique_name, + _dim, + _params, + _server), + dim_(_dim), + params_pose_(_params) { - // + assert(dim_ == 2 or dim_ == 3); } SensorPose::~SensorPose() { - // + +} + +Eigen::MatrixXd SensorPose::computeNoiseCov(const Eigen::VectorXd & _data) const +{ + if (dim_ == 2) + return (Eigen::Vector3d() << params_pose_->std_p, + params_pose_->std_p, + params_pose_->std_o).finished().cwiseAbs2().asDiagonal(); + else + return (Eigen::Vector6d() << params_pose_->std_p, + params_pose_->std_p, + params_pose_->std_p, + params_pose_->std_o, + params_pose_->std_o, + params_pose_->std_o).finished().cwiseAbs2().asDiagonal(); } } // namespace wolf @@ -62,5 +86,4 @@ SensorPose::~SensorPose() #include "core/sensor/factory_sensor.h" namespace wolf { WOLF_REGISTER_SENSOR(SensorPose); -WOLF_REGISTER_SENSOR_AUTO(SensorPose); } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c2bb2e5306e46e51c28cca201b8031669b362d47..915df791c424fa7842f47ff815326ec637068682 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -264,12 +264,12 @@ target_link_libraries(gtest_map_yaml ${PLUGIN_NAME}) # target_link_libraries(gtest_processor_frame_nearest_neighbor_filter_2d ${PLUGIN_NAME}) # ProcessorMotion in 2d -# wolf_add_gtest(gtest_odom_2d gtest_odom_2d.cpp) -# target_link_libraries(gtest_odom_2d ${PLUGIN_NAME}) +wolf_add_gtest(gtest_odom_2d gtest_odom_2d.cpp) +target_link_libraries(gtest_odom_2d ${PLUGIN_NAME}) # ProcessorOdom3d class test -# wolf_add_gtest(gtest_processor_odom_3d gtest_processor_odom_3d.cpp) -# target_link_libraries(gtest_processor_odom_3d ${PLUGIN_NAME}) +wolf_add_gtest(gtest_processor_odom_3d gtest_processor_odom_3d.cpp) +target_link_libraries(gtest_processor_odom_3d ${PLUGIN_NAME}) # FactorPose3dWithExtrinsics class test # wolf_add_gtest(gtest_processor_and_factor_pose_3d_with_extrinsics gtest_processor_and_factor_pose_3d_with_extrinsics.cpp) @@ -288,13 +288,17 @@ target_link_libraries(gtest_processor_tracker_landmark_dummy ${PLUGIN_NAME} dumm # wolf_add_gtest(gtest_sensor_diff_drive gtest_sensor_diff_drive.cpp) # target_link_libraries(gtest_sensor_diff_drive ${PLUGIN_NAME}) -# SensorOdom2d class test -wolf_add_gtest(gtest_sensor_odom_2d gtest_sensor_odom_2d.cpp) -target_link_libraries(gtest_sensor_odom_2d ${PLUGIN_NAME}) +# SensorOdom class test +wolf_add_gtest(gtest_sensor_odom gtest_sensor_odom.cpp) +target_link_libraries(gtest_sensor_odom ${PLUGIN_NAME}) + +# # SensorOdom2d class test +# wolf_add_gtest(gtest_sensor_odom_2d gtest_sensor_odom_2d.cpp) +# target_link_libraries(gtest_sensor_odom_2d ${PLUGIN_NAME}) # SensorPose class test -# wolf_add_gtest(gtest_sensor_pose gtest_sensor_pose.cpp) -# target_link_libraries(gtest_sensor_pose ${PLUGIN_NAME}) +wolf_add_gtest(gtest_sensor_pose gtest_sensor_pose.cpp) +target_link_libraries(gtest_sensor_pose ${PLUGIN_NAME}) IF (Ceres_FOUND) # SolverCeres test diff --git a/test/gtest_odom_2d.cpp b/test/gtest_odom_2d.cpp index 04d838944dd50139da61d890c0171e0b41a33cb0..8d5caccb0533e14ced1993fa733717362d481485 100644 --- a/test/gtest_odom_2d.cpp +++ b/test/gtest_odom_2d.cpp @@ -29,7 +29,7 @@ #include "core/utils/utils_gtest.h" // Classes under test -#include "core/sensor/sensor_odom_2d.h" +#include "core/sensor/sensor_odom.h" #include "core/processor/processor_odom_2d.h" #include "core/capture/capture_odom_2d.h" #include "core/factor/factor_relative_pose_2d.h" @@ -218,7 +218,7 @@ TEST(Odom2d, VoteForKfAndSolve) // Create Wolf tree nodes ProblemPtr problem = Problem::create("PO", 2); - SensorBasePtr sensor_odom2d = problem->installSensor("SensorOdom2d", "odom", Vector3d(0,0,0), wolf_root + "/test/yaml/sensor_odom_2d.yaml"); + SensorBasePtr sensor_odom2d = problem->installSensor("SensorOdom", "odom", wolf_root + "/test/yaml/sensor_odom_2d.yaml"); ParamsProcessorOdom2dPtr params(std::make_shared<ParamsProcessorOdom2d>()); params->voting_active = true; params->dist_traveled = 100; @@ -362,7 +362,7 @@ TEST(Odom2d, KF_callback) // Create Wolf tree nodes ProblemPtr problem = Problem::create("PO", 2); - SensorBasePtr sensor_odom2d = problem->installSensor("SensorOdom2d", "odom", Vector3d(0,0,0), wolf_root + "/test/yaml/sensor_odom_2d.yaml"); + SensorBasePtr sensor_odom2d = problem->installSensor("SensorOdom", "odom", wolf_root + "/test/yaml/sensor_odom_2d.yaml"); ParamsProcessorOdom2dPtr params(std::make_shared<ParamsProcessorOdom2d>()); params->dist_traveled = 100; params->angle_turned = data(1)*2.5; // force KF at every third process() diff --git a/test/gtest_sensor_base.cpp b/test/gtest_sensor_base.cpp index 559cb5883146cda4ec6a39694a9ba7ca3c1f300a..75412f792c6907be50aa661f12aecb71a6c2bdb3 100644 --- a/test/gtest_sensor_base.cpp +++ b/test/gtest_sensor_base.cpp @@ -19,12 +19,6 @@ // along with this program. If not, see <http://www.gnu.org/licenses/>. // //--------LICENSE_END-------- -/** - * \file gtest_sensor_base.cpp - * - * Created on: Mar 27, 2018 - * \author: jsola - */ #include "core/sensor/sensor_base.h" #include "core/utils/utils_gtest.h" @@ -417,7 +411,7 @@ TEST(SensorBase, makeshared_server_PO) (wrong ? "_wrong" : ""); // Yaml parser - ParserYaml parser = ParserYaml("test/yaml/sensor_base/" + name + ".yaml", wolf_root, true); + ParserYaml parser = ParserYaml("test/yaml/sensor_tests/" + name + ".yaml", wolf_root, true); ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1"); WOLF_INFO("Creating sensor from ", name, ".yaml"); @@ -459,7 +453,7 @@ TEST(SensorBase, makeshared_server_PO) // POIA - 3D - CORRECT YAML { // Yaml parser - ParserYaml parser = ParserYaml("test/yaml/sensor_base/sensor_POIA_3D.yaml", wolf_root, true); + ParserYaml parser = ParserYaml("test/yaml/sensor_tests/sensor_POIA_3D.yaml", wolf_root, true); ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1"); server.print(); @@ -485,7 +479,7 @@ TEST(SensorBase, makeshared_server_PO) // POIA - 3D - INCORRECT YAML { // Yaml parser - ParserYaml parser = ParserYaml("test/yaml/sensor_base/sensor_POIA_3D_wrong.yaml", wolf_root, true); + ParserYaml parser = ParserYaml("test/yaml/sensor_tests/sensor_POIA_3D_wrong.yaml", wolf_root, true); ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1"); WOLF_INFO("Creating sensor from sensor_POIA_3D_wrong.yaml"); @@ -532,7 +526,7 @@ TEST(SensorBase, factory) (drift ? "_drift" : "") + (wrong ? "_wrong" : ""); // Yaml parser - ParserYaml parser = ParserYaml("test/yaml/sensor_base/" + name + ".yaml", wolf_root, true); + ParserYaml parser = ParserYaml("test/yaml/sensor_tests/" + name + ".yaml", wolf_root, true); ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1"); WOLF_INFO("Creating sensor from ", name, ".yaml"); @@ -573,7 +567,7 @@ TEST(SensorBase, factory) WOLF_INFO("Creating sensor from name sensor_POIA_3D.yaml"); // Yaml parser - ParserYaml parser = ParserYaml("test/yaml/sensor_base/sensor_POIA_3D.yaml", wolf_root, true); + ParserYaml parser = ParserYaml("test/yaml/sensor_tests/sensor_POIA_3D.yaml", wolf_root, true); ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1"); server.print(); @@ -599,7 +593,7 @@ TEST(SensorBase, factory) WOLF_INFO("Creating sensor from name sensor_POIA_3D_wrong.yaml"); // Yaml parser - ParserYaml parser = ParserYaml("test/yaml/sensor_base/sensor_POIA_3D_wrong.yaml", wolf_root, true); + ParserYaml parser = ParserYaml("test/yaml/sensor_tests/sensor_POIA_3D_wrong.yaml", wolf_root, true); ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1"); // create sensor @@ -635,7 +629,7 @@ TEST(SensorBase, factory_yaml) continue; std::string yaml_filepath = wolf_root + - "/test/yaml/sensor_base/" + + "/test/yaml/sensor_tests/" + "sensor_PO_" + to_string(dim) + "D_" + @@ -686,7 +680,7 @@ TEST(SensorBase, factory_yaml) auto S = FactorySensorYaml::create("SensorDummyPoia", "sensor_1", 3, - wolf_root + "/test/yaml/sensor_base/sensor_POIA_3D.yaml"); + wolf_root + "/test/yaml/sensor_tests/sensor_POIA_3D.yaml"); // noise ASSERT_MATRIX_APPROX(S->computeNoiseCov(vector0), @@ -710,7 +704,7 @@ TEST(SensorBase, factory_yaml) ASSERT_THROW(FactorySensorYaml::create("SensorDummyPoia", "sensor_1", 3, - wolf_root + "/test/yaml/sensor_base/sensor_POIA_3D_wrong.yaml"), + wolf_root + "/test/yaml/sensor_tests/sensor_POIA_3D_wrong.yaml"), std::runtime_error); } } diff --git a/test/gtest_sensor_odom.cpp b/test/gtest_sensor_odom.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9416dceb34a31ecdcaaa1d34fe6c557078e292c0 --- /dev/null +++ b/test/gtest_sensor_odom.cpp @@ -0,0 +1,803 @@ +//--------LICENSE_START-------- +// +// Copyright (C) 2020,2021,2022 Institut de Robòtica i Informà tica Industrial, CSIC-UPC. +// Authors: Joan Solà Ortega (jsola@iri.upc.edu) +// All rights reserved. +// +// This file is part of WOLF +// WOLF is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. +// +//--------LICENSE_END-------- + +#include "core/sensor/sensor_odom.h" +#include "core/sensor/factory_sensor.h" +#include "core/utils/utils_gtest.h" +#include "core/yaml/parser_yaml.h" +#include "core/utils/params_server.h" + +using namespace wolf; +using namespace Eigen; + +std::string wolf_root = _WOLF_ROOT_DIR; + +VectorXd vector0 = VectorXd(0); +VectorXd p_state_2D = VectorXd::Random(2); +VectorXd p_state_3D = VectorXd::Random(3); +VectorXd o_state_2D = VectorXd::Random(1); +VectorXd o_state_3D = VectorXd::Random(4).normalized(); +VectorXd p_std_2D = VectorXd::Random(2).cwiseAbs(); +VectorXd p_std_3D = VectorXd::Random(3).cwiseAbs(); +VectorXd o_std_2D = VectorXd::Random(1).cwiseAbs(); +VectorXd o_std_3D = VectorXd::Random(3).cwiseAbs(); +MatrixXd p_cov_2D = p_std_2D.cwiseAbs2().asDiagonal(); +MatrixXd p_cov_3D = p_std_3D.cwiseAbs2().asDiagonal(); +MatrixXd o_cov_2D = o_std_2D.cwiseAbs2().asDiagonal(); +MatrixXd o_cov_3D = o_std_3D.cwiseAbs2().asDiagonal(); +double k_disp_to_disp = 0.1; +double k_disp_to_rot = 0.2; +double k_rot_to_rot = 0.3; +double min_disp_var = 0.01; +double min_rot_var = 0.02; +double noise_p_std = 0.1; +double noise_o_std = 0.01; +MatrixXd noise_cov_dummy = Vector2d(noise_p_std, noise_o_std).cwiseAbs2().asDiagonal(); + +void checkSensor(SensorBasePtr S, + char _key, + const VectorXd& _state, + bool _fixed, + const VectorXd& _noise_std, + bool _dynamic, + const VectorXd& _drift_std) +{ + MatrixXd noise_cov = _noise_std.cwiseAbs2().asDiagonal(); + MatrixXd drift_cov = _drift_std.cwiseAbs2().asDiagonal(); + + // state + ASSERT_MATRIX_APPROX(_state, S->getStateBlockDynamic(_key)->getState(), Constants::EPS); + // fixed + ASSERT_EQ(S->getStateBlockDynamic(_key)->isFixed(), _fixed); + // dynamic + ASSERT_EQ(S->isStateBlockDynamic(_key), _dynamic); + // drift + ASSERT_EQ(_drift_std.size(), S->getDriftStd(_key).size()); + ASSERT_EQ(drift_cov.size(), S->getDriftCov(_key).size()); + if (_drift_std.size() != 0) + { + ASSERT_MATRIX_APPROX(_drift_std, S->getDriftStd(_key), Constants::EPS); + ASSERT_MATRIX_APPROX(drift_cov, S->getDriftCov(_key), Constants::EPS); + } + // factor + if (_noise_std.size() != 0) + { + ASSERT_TRUE(S->getPriorFeature(_key) != nullptr); + ASSERT_EQ(_state.size(), S->getPriorFeature(_key)->getMeasurement().size()); + ASSERT_MATRIX_APPROX(_state, + S->getPriorFeature(_key)->getMeasurement(), + Constants::EPS); + ASSERT_EQ(noise_cov.size(), S->getPriorFeature(_key)->getMeasurementCovariance().size()); + ASSERT_MATRIX_APPROX(noise_cov, + S->getPriorFeature(_key)->getMeasurementCovariance(), + Constants::EPS); + } + else + { + ASSERT_TRUE(S->getPriorFeature(_key) == nullptr); + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////// CONSTRUCTOR WITH PRIORS AND PARAMS //////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////// +// 2D Fix +TEST(SensorOdom, makeshared_priors_fix_2D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = std::make_shared<SensorOdom>("sensor1", 2, params, + Priors({{'P',Prior("P", p_state_2D)}, //default "fix", not dynamic + {'O',Prior("O", o_state_2D)}})); + + // checks + checkSensor(S, 'P', p_state_2D, true, vector0, false, vector0); + checkSensor(S, 'O', o_state_2D, true, vector0, false, vector0); +} + +// 3D Fix +TEST(SensorOdom, makeshared_priors_fix_3D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = std::make_shared<SensorOdom>("sensor1", 3, params, + Priors({{'P',Prior("P", p_state_3D)}, //default "fix", not dynamic + {'O',Prior("O", o_state_3D)}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 0); + + // check + checkSensor(S, 'P', p_state_3D, true, vector0, false, vector0); + checkSensor(S, 'O', o_state_3D, true, vector0, false, vector0); +} + +// 2D Initial guess +TEST(SensorOdom, makeshared_priors_initial_guess_2D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = std::make_shared<SensorOdom>("sensor1", 2, params, + Priors({{'P',Prior("P", p_state_2D, "initial_guess")}, + {'O',Prior("O", o_state_2D, "initial_guess")}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 0); + + // check + checkSensor(S, 'P', p_state_2D, false, vector0, false, vector0); + checkSensor(S, 'O', o_state_2D, false, vector0, false, vector0); +} + +// 3D Initial guess +TEST(SensorOdom, makeshared_priors_initial_guess_3D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = std::make_shared<SensorOdom>("sensor1", 3, params, + Priors({{'P',Prior("P", p_state_3D, "initial_guess")}, + {'O',Prior("O", o_state_3D, "initial_guess")}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 0); + + // check + checkSensor(S, 'P', p_state_3D, false, vector0, false, vector0); + checkSensor(S, 'O', o_state_3D, false, vector0, false, vector0); +} + +// 2D Factor +TEST(SensorOdom, makeshared_priors_factor_2D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = std::make_shared<SensorOdom>("sensor1", 2, params, + Priors({{'P',Prior("P", p_state_2D, "factor", p_std_2D)}, + {'O',Prior("O", o_state_2D, "factor", o_std_2D)}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 2); + + // check + checkSensor(S, 'P', p_state_2D, false, p_std_2D, false, vector0); + checkSensor(S, 'O', o_state_2D, false, o_std_2D, false, vector0); +} + +// 3D Factor +TEST(SensorOdom, makeshared_priors_factor_3D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = std::make_shared<SensorOdom>("sensor1", 3, params, + Priors({{'P',Prior("P", p_state_3D, "factor", p_std_3D)}, + {'O',Prior("O", o_state_3D, "factor", o_std_3D)}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 2); + + // check + checkSensor(S, 'P', p_state_3D, false, p_std_3D, false, vector0); + checkSensor(S, 'O', o_state_3D, false, o_std_3D, false, vector0); +} + +// 2D Initial guess dynamic +TEST(SensorOdom, makeshared_priors_initial_guess_dynamic_2D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = std::make_shared<SensorOdom>("sensor1", 2, params, + Priors({{'P',Prior("P", p_state_2D, "initial_guess", vector0, true)}, + {'O',Prior("O", o_state_2D, "initial_guess", vector0, true)}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 0); + + // check + checkSensor(S, 'P', p_state_2D, false, vector0, true, vector0); + checkSensor(S, 'O', o_state_2D, false, vector0, true, vector0); +} + +// 3D Initial guess dynamic +TEST(SensorOdom, makeshared_priors_initial_guess_dynamic_3D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = std::make_shared<SensorOdom>("sensor1", 3, params, + Priors({{'P',Prior("P", p_state_3D, "initial_guess", vector0, true)}, + {'O',Prior("O", o_state_3D, "initial_guess", vector0, true)}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 0); + + // check + checkSensor(S, 'P', p_state_3D, false, vector0, true, vector0); + checkSensor(S, 'O', o_state_3D, false, vector0, true, vector0); +} + +// 2D Initial guess dynamic drift +TEST(SensorOdom, makeshared_priors_initial_guess_dynamic_drift_2D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = std::make_shared<SensorOdom>("sensor1", 2, params, + Priors({{'P',Prior("P", p_state_2D, "initial_guess", vector0, true, p_std_2D)}, + {'O',Prior("O", o_state_2D, "initial_guess", vector0, true, o_std_2D)}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 0); + + // check + checkSensor(S, 'P', p_state_2D, false, vector0, true, p_std_2D); + checkSensor(S, 'O', o_state_2D, false, vector0, true, o_std_2D); +} + +// 3D Initial guess dynamic drift +TEST(SensorOdom, makeshared_priors_initial_guess_dynamic_drift_3D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = std::make_shared<SensorOdom>("sensor1", 3, params, + Priors({{'P',Prior("P", p_state_3D, "initial_guess", vector0, true, p_std_3D)}, + {'O',Prior("O", o_state_3D, "initial_guess", vector0, true, o_std_3D)}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 0); + + // check + checkSensor(S, 'P', p_state_3D, false, vector0, true, p_std_3D); + checkSensor(S, 'O', o_state_3D, false, vector0, true, o_std_3D); +} + +////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////// CONSTRUCTOR WITH PARAM SERVER and KEY_TYPES //////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////// +TEST(SensorOdom, makeshared_server) +{ + std::vector<int> dims({2, 3}); + std::vector<std::string> modes({"fix", "initial_guess", "factor"}); + std::vector<bool> dynamics({false, true}); + std::vector<bool> drifts({false, true}); + std::vector<bool> wrongs({false, true}); + + VectorXd p_state(4), o_state(4), po_std(4); + p_state << 1, 2, 3, 4; + o_state << 1, 0, 0, 0; + po_std << 0.1, 0.2, 0.3, 0.4; + + // P & O + for (auto dim : dims) + for (auto mode : modes) + for (auto dynamic : dynamics) + for (auto drift : drifts) + for (auto wrong : wrongs) + { + // nonsense combination + if (not dynamic and drift) + continue; + + std::string name = "sensor_PO_" + + to_string(dim) + + "D_" + + mode + + (dynamic ? "_dynamic" : "") + + (drift ? "_drift" : "") + + (wrong ? "_wrong" : ""); + + // Yaml parser + ParserYaml parser = ParserYaml("test/yaml/sensor_tests/" + name + ".yaml", wolf_root, true); + ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1"); + + WOLF_INFO("Creating sensor from ", name, ".yaml"); + + // CORRECT YAML + if (not wrong) + { + auto params = std::make_shared<ParamsSensorOdom>("sensor_1", server); + auto S = std::make_shared<SensorOdom>("sensor_1", dim, params, server); + + auto p_size = dim; + auto o_size = dim == 2 ? 1 : 4; + auto p_size_std = mode == "factor" ? dim : 0; + auto o_size_std = mode == "factor" ? (dim == 2 ? 1 : 3) : 0; + auto p_size_std_drift = drift ? dim : 0; + auto o_size_std_drift = drift ? (dim == 2 ? 1 : 3) : 0; + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), mode == "factor" ? 2 : 0); + + // check + checkSensor(S, 'P', p_state.head(p_size), mode == "fix", po_std.head(p_size_std), dynamic, po_std.head(p_size_std_drift)); + checkSensor(S, 'O', o_state.head(o_size), mode == "fix", po_std.head(o_size_std), dynamic, po_std.head(o_size_std_drift)); + } + // INCORRECT YAML + else + { + ASSERT_THROW(std::make_shared<SensorOdom>("sensor_1", dim, + std::make_shared<ParamsSensorOdom>("sensor_1", server), + server),std::runtime_error); + } + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////// FactorySensor /////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////// +TEST(SensorOdom, factory) +{ + std::vector<int> dims({2, 3}); + std::vector<std::string> modes({"fix", "initial_guess", "factor"}); + std::vector<bool> dynamics({false, true}); + std::vector<bool> drifts({false, true}); + std::vector<bool> wrongs({false, true}); + + VectorXd p_state(4), o_state(4), po_std(4); + p_state << 1, 2, 3, 4; + o_state << 1, 0, 0, 0; + po_std << 0.1, 0.2, 0.3, 0.4; + + // P & O + for (auto dim : dims) + for (auto mode : modes) + for (auto dynamic : dynamics) + for (auto drift : drifts) + for (auto wrong : wrongs) + { + // nonsense combination + if (not dynamic and drift) + continue; + + std::string name = "sensor_PO_" + + to_string(dim) + + "D_" + + mode + + (dynamic ? "_dynamic" : "") + + (drift ? "_drift" : "") + + (wrong ? "_wrong" : ""); + // Yaml parser + ParserYaml parser = ParserYaml("test/yaml/sensor_tests/" + name + ".yaml", wolf_root, true); + ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1"); + + WOLF_INFO("Creating sensor from ", name, ".yaml"); + + // CORRECT YAML + if (not wrong) + { + auto S = FactorySensor::create("SensorOdom", "sensor_1", dim, server); + + auto p_size = dim; + auto o_size = dim == 2 ? 1 : 4; + auto p_size_std = mode == "factor" ? dim : 0; + auto o_size_std = mode == "factor" ? (dim == 2 ? 1 : 3) : 0; + auto p_size_std_drift = drift ? dim : 0; + auto o_size_std_drift = drift ? (dim == 2 ? 1 : 3) : 0; + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), mode == "factor" ? 2 : 0); + + // check + checkSensor(S, 'P', p_state.head(p_size), mode == "fix", po_std.head(p_size_std), dynamic, po_std.head(p_size_std_drift)); + checkSensor(S, 'O', o_state.head(o_size), mode == "fix", po_std.head(o_size_std), dynamic, po_std.head(o_size_std_drift)); + } + // INCORRECT YAML + else + { + ASSERT_THROW(FactorySensor::create("SensorOdom", "sensor_1", dim, server),std::runtime_error); + } + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////// FactorySensorYaml ///////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////// +TEST(SensorOdom, factory_yaml) +{ + std::vector<int> dims({2, 3}); + std::vector<std::string> modes({"fix", "initial_guess", "factor"}); + std::vector<bool> dynamics({false, true}); + std::vector<bool> drifts({false, true}); + std::vector<bool> wrongs({false, true}); + + VectorXd p_state(4), o_state(4), po_std(4); + p_state << 1, 2, 3, 4; + o_state << 1, 0, 0, 0; + po_std << 0.1, 0.2, 0.3, 0.4; + + // P & O + for (auto dim : dims) + for (auto mode : modes) + for (auto dynamic : dynamics) + for (auto drift : drifts) + for (auto wrong : wrongs) + { + // nonsense combination + if (not dynamic and drift) + continue; + + std::string yaml_filepath = wolf_root + + "/test/yaml/sensor_tests/" + + "sensor_PO_" + + to_string(dim) + + "D_" + + mode + + (dynamic ? "_dynamic" : "") + + (drift ? "_drift" : "") + + (wrong ? "_wrong" : "") + + ".yaml"; + + WOLF_INFO("Creating sensor from ", yaml_filepath); + + // CORRECT YAML + if (not wrong) + { + auto S = FactorySensorYaml::create("SensorOdom", "sensor_1", dim, yaml_filepath); + + auto p_size = dim; + auto o_size = dim == 2 ? 1 : 4; + auto p_size_std = mode == "factor" ? dim : 0; + auto o_size_std = mode == "factor" ? (dim == 2 ? 1 : 3) : 0; + auto p_size_std_drift = drift ? dim : 0; + auto o_size_std_drift = drift ? (dim == 2 ? 1 : 3) : 0; + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), mode == "factor" ? 2 : 0); + + // check + checkSensor(S, 'P', p_state.head(p_size), mode == "fix", po_std.head(p_size_std), dynamic, po_std.head(p_size_std_drift)); + checkSensor(S, 'O', o_state.head(o_size), mode == "fix", po_std.head(o_size_std), dynamic, po_std.head(o_size_std_drift)); + } + // INCORRECT YAML + else + { + ASSERT_THROW(FactorySensorYaml::create("SensorOdom", "sensor_1", dim, yaml_filepath),std::runtime_error); + } + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////// FactorySensorPriors //////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////// + +// 2D Fix +TEST(SensorOdom, factory_priors_fix_2D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = FactorySensorPriors::create("SensorOdom","sensor1", 2, params, + Priors({{'P',Prior("P", p_state_2D)}, //default "fix", not dynamic + {'O',Prior("O", o_state_2D)}})); + + // checks + checkSensor(S, 'P', p_state_2D, true, vector0, false, vector0); + checkSensor(S, 'O', o_state_2D, true, vector0, false, vector0); +} + +// 3D Fix +TEST(SensorOdom, factory_priors_fix_3D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = FactorySensorPriors::create("SensorOdom","sensor1", 3, params, + Priors({{'P',Prior("P", p_state_3D)}, //default "fix", not dynamic + {'O',Prior("O", o_state_3D)}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 0); + + // check + checkSensor(S, 'P', p_state_3D, true, vector0, false, vector0); + checkSensor(S, 'O', o_state_3D, true, vector0, false, vector0); +} + +// 2D Initial guess +TEST(SensorOdom, factory_priors_initial_guess_2D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = FactorySensorPriors::create("SensorOdom","sensor1", 2, params, + Priors({{'P',Prior("P", p_state_2D, "initial_guess")}, + {'O',Prior("O", o_state_2D, "initial_guess")}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 0); + + // check + checkSensor(S, 'P', p_state_2D, false, vector0, false, vector0); + checkSensor(S, 'O', o_state_2D, false, vector0, false, vector0); +} + +// 3D Initial guess +TEST(SensorOdom, factory_priors_initial_guess_3D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = FactorySensorPriors::create("SensorOdom","sensor1", 3, params, + Priors({{'P',Prior("P", p_state_3D, "initial_guess")}, + {'O',Prior("O", o_state_3D, "initial_guess")}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 0); + + // check + checkSensor(S, 'P', p_state_3D, false, vector0, false, vector0); + checkSensor(S, 'O', o_state_3D, false, vector0, false, vector0); +} + +// 2D Factor +TEST(SensorOdom, factory_priors_factor_2D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = FactorySensorPriors::create("SensorOdom","sensor1", 2, params, + Priors({{'P',Prior("P", p_state_2D, "factor", p_std_2D)}, + {'O',Prior("O", o_state_2D, "factor", o_std_2D)}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 2); + + // check + checkSensor(S, 'P', p_state_2D, false, p_std_2D, false, vector0); + checkSensor(S, 'O', o_state_2D, false, o_std_2D, false, vector0); +} + +// 3D Factor +TEST(SensorOdom, factory_priors_factor_3D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = FactorySensorPriors::create("SensorOdom","sensor1", 3, params, + Priors({{'P',Prior("P", p_state_3D, "factor", p_std_3D)}, + {'O',Prior("O", o_state_3D, "factor", o_std_3D)}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 2); + + // check + checkSensor(S, 'P', p_state_3D, false, p_std_3D, false, vector0); + checkSensor(S, 'O', o_state_3D, false, o_std_3D, false, vector0); +} + +// 2D Initial guess dynamic +TEST(SensorOdom, factory_priors_initial_guess_dynamic_2D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = FactorySensorPriors::create("SensorOdom","sensor1", 2, params, + Priors({{'P',Prior("P", p_state_2D, "initial_guess", vector0, true)}, + {'O',Prior("O", o_state_2D, "initial_guess", vector0, true)}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 0); + + // check + checkSensor(S, 'P', p_state_2D, false, vector0, true, vector0); + checkSensor(S, 'O', o_state_2D, false, vector0, true, vector0); +} + +// 3D Initial guess dynamic +TEST(SensorOdom, factory_priors_initial_guess_dynamic_3D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = FactorySensorPriors::create("SensorOdom","sensor1", 3, params, + Priors({{'P',Prior("P", p_state_3D, "initial_guess", vector0, true)}, + {'O',Prior("O", o_state_3D, "initial_guess", vector0, true)}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 0); + + // check + checkSensor(S, 'P', p_state_3D, false, vector0, true, vector0); + checkSensor(S, 'O', o_state_3D, false, vector0, true, vector0); +} + +// 2D Initial guess dynamic drift +TEST(SensorOdom, factory_priors_initial_guess_dynamic_drift_2D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = FactorySensorPriors::create("SensorOdom","sensor1", 2, params, + Priors({{'P',Prior("P", p_state_2D, "initial_guess", vector0, true, p_std_2D)}, + {'O',Prior("O", o_state_2D, "initial_guess", vector0, true, o_std_2D)}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 0); + + // check + checkSensor(S, 'P', p_state_2D, false, vector0, true, p_std_2D); + checkSensor(S, 'O', o_state_2D, false, vector0, true, o_std_2D); +} + +// 3D Initial guess dynamic drift +TEST(SensorOdom, factory_priors_initial_guess_dynamic_drift_3D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = FactorySensorPriors::create("SensorOdom","sensor1", 3, params, + Priors({{'P',Prior("P", p_state_3D, "initial_guess", vector0, true, p_std_3D)}, + {'O',Prior("O", o_state_3D, "initial_guess", vector0, true, o_std_3D)}})); + + // factors + ASSERT_EQ(S->getPriorFeatures().size(), 0); + + // check + checkSensor(S, 'P', p_state_3D, false, vector0, true, p_std_3D); + checkSensor(S, 'O', o_state_3D, false, vector0, true, o_std_3D); +} + +////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////// COMPUTE NOISE COV ///////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////// +TEST(SensorOdom, compute_noise_cov_3D) +{ + auto params = std::make_shared<ParamsSensorOdom>(); + params->k_disp_to_disp = k_disp_to_disp; + params->k_disp_to_rot = k_disp_to_rot; + params->k_rot_to_rot = k_rot_to_rot; + params->min_disp_var = min_disp_var; + params->min_rot_var = min_rot_var; + + auto S = FactorySensorPriors::create("SensorOdom","sensor1", 3, params, + Priors({{'P',Prior("P", p_state_3D)}, //default "fix", not dynamic + {'O',Prior("O", o_state_3D)}})); + + Vector6d disp_elements, rot_elements; + disp_elements << 1, 1, 1, 0, 0, 0; + rot_elements << 0, 0, 0, 1, 1, 1; + Vector6d min_var = disp_elements * min_disp_var + rot_elements * min_rot_var; + + // compute with zero movement (size 6) + ASSERT_MATRIX_APPROX(S->computeNoiseCov(Vector6d::Zero()), + Matrix6d(min_var.asDiagonal()), + Constants::EPS); + + // compute with zero movement (size 7) + ASSERT_MATRIX_APPROX(S->computeNoiseCov((Vector7d() << 0, 0, 0, 0, 0, 0, 1).finished()), + Matrix6d(min_var.asDiagonal()), + Constants::EPS); + + // compute with displacement (3m) but not rotation (size 6) + ASSERT_MATRIX_APPROX(S->computeNoiseCov((Vector6d() << 3, 0, 0, 0, 0, 0).finished()), + Matrix6d((min_var + disp_elements*k_disp_to_disp*3 + rot_elements*k_disp_to_rot*3).asDiagonal()), + Constants::EPS); + + // compute with displacement (3m) but not rotation (size 7) + ASSERT_MATRIX_APPROX(S->computeNoiseCov((Vector7d() << 0, -3, 0, 0, 0, 0, 1).finished()), + Matrix6d((min_var + disp_elements*k_disp_to_disp*3 + rot_elements*k_disp_to_rot*3).asDiagonal()), + Constants::EPS); + + // compute with rotation (M_PI) but not displacement (size 6) + ASSERT_MATRIX_APPROX(S->computeNoiseCov((Vector6d() << 0, 0, 0, -M_PI, 0, 0).finished()), + Matrix6d((min_var + rot_elements*k_rot_to_rot*M_PI).asDiagonal()), + Constants::EPS); + + // compute with rotation (M_PI) but not displacement (size 7) + ASSERT_MATRIX_APPROX(S->computeNoiseCov((Vector7d() << 0, 0, 0, 0, 0, 1, 0).finished()), + Matrix6d((min_var + rot_elements*k_rot_to_rot*M_PI).asDiagonal()), + Constants::EPS); +} + +int main(int argc, char **argv) +{ + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} + diff --git a/test/gtest_sensor_odom_2d.cpp b/test/gtest_sensor_odom_2d.cpp deleted file mode 100644 index f5ee28b608f483f55a72f8c681e5b38a8c0a3b97..0000000000000000000000000000000000000000 --- a/test/gtest_sensor_odom_2d.cpp +++ /dev/null @@ -1,474 +0,0 @@ -//--------LICENSE_START-------- -// -// Copyright (C) 2020,2021,2022 Institut de Robòtica i Informà tica Industrial, CSIC-UPC. -// Authors: Joan Solà Ortega (jsola@iri.upc.edu) -// All rights reserved. -// -// This file is part of WOLF -// WOLF is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// -//--------LICENSE_END-------- - -#include "core/sensor/sensor_odom_2d.h" -#include "core/utils/utils_gtest.h" -#include "core/yaml/parser_yaml.h" -#include "core/utils/params_server.h" -#include "dummy/sensor_dummy.h" - -using namespace wolf; -using namespace Eigen; - -std::string wolf_root = _WOLF_ROOT_DIR; - -VectorXd vector0 = VectorXd(0); -Vector2d p_state = (Vector2d() << 1, 2).finished(); -Vector1d o_state = (Vector1d() << 3).finished(); -Vector2d p_std = (Vector2d() << 0.1, 0.2).finished(); -Vector1d o_std = (Vector1d() << 0.3).finished(); -Matrix2d p_cov_2D = p_std.cwiseAbs2().asDiagonal(); -Matrix1d o_cov = o_std.cwiseAbs2().asDiagonal(); -Vector2d noise_std = Vector2d::Constant(0.1); -Matrix2d noise_cov = noise_std.cwiseAbs2().asDiagonal(); -double k_disp_to_disp = 0.5; -double k_rot_to_rot = 0.8; - -void checkSensorOdom2d(SensorBasePtr S_base, - const Vector2d& _p_state, - const Vector1d& _o_state, - bool _p_fixed, - bool _o_fixed, - const VectorXd& _p_noise_std, - const VectorXd& _o_noise_std, - bool _p_dynamic, - bool _o_dynamic, - const VectorXd& _p_drift_std, - const VectorXd& _o_drift_std) -{ - MatrixXd p_noise_cov = _p_noise_std.cwiseAbs2().asDiagonal(); - MatrixXd o_noise_cov = _o_noise_std.cwiseAbs2().asDiagonal(); - MatrixXd p_drift_cov = _p_drift_std.cwiseAbs2().asDiagonal(); - MatrixXd o_drift_cov = _o_drift_std.cwiseAbs2().asDiagonal(); - - // cast - SensorOdom2dPtr S = std::dynamic_pointer_cast<SensorOdom2d>(S_base); - ASSERT_TRUE(S!=nullptr); - // params - ASSERT_NEAR(S->getDispVarToDispNoiseFactor(), k_disp_to_disp, Constants::EPS); - ASSERT_NEAR(S->getRotVarToRotNoiseFactor(), k_rot_to_rot, Constants::EPS); - // states - ASSERT_MATRIX_APPROX(_p_state, S->getStateBlockDynamic('P')->getState(), Constants::EPS); - ASSERT_MATRIX_APPROX(_o_state, S->getStateBlockDynamic('O')->getState(), Constants::EPS); - // fixed - ASSERT_EQ(S->getStateBlockDynamic('P')->isFixed(), _p_fixed); - ASSERT_EQ(S->getStateBlockDynamic('O')->isFixed(), _o_fixed); - // dynamic - ASSERT_EQ(S->isStateBlockDynamic('P'), _p_dynamic); - ASSERT_EQ(S->isStateBlockDynamic('O'), _o_dynamic); - // drift - ASSERT_EQ(_p_drift_std.size(), S->getDriftStd('P').size()); - ASSERT_EQ(_o_drift_std.size(), S->getDriftStd('O').size()); - ASSERT_EQ(p_drift_cov.size(), S->getDriftCov('P').size()); - ASSERT_EQ(o_drift_cov.size(), S->getDriftCov('O').size()); - if (_p_drift_std.size() != 0) - { - ASSERT_MATRIX_APPROX(_p_drift_std, S->getDriftStd('P'), Constants::EPS); - ASSERT_MATRIX_APPROX(p_drift_cov, S->getDriftCov('P'), Constants::EPS); - } - if (_o_drift_std.size() != 0) - { - ASSERT_MATRIX_APPROX(_o_drift_std, S->getDriftStd('O'), Constants::EPS); - ASSERT_MATRIX_APPROX(o_drift_cov, S->getDriftCov('O'), Constants::EPS); - } - // factors - ASSERT_EQ(S->getPriorFeatures().size(), (_p_noise_std.size() == 0 ? 0 : 1) + (_o_noise_std.size() == 0 ? 0 : 1) ); - if (_p_noise_std.size() != 0) - { - ASSERT_TRUE(S->getPriorFeature('P') != nullptr); - ASSERT_EQ(_p_state.size(), S->getPriorFeature('P')->getMeasurement().size()); - ASSERT_MATRIX_APPROX(_p_state, - S->getPriorFeature('P')->getMeasurement(), - Constants::EPS); - ASSERT_EQ(p_noise_cov.size(), S->getPriorFeature('P')->getMeasurementCovariance().size()); - ASSERT_MATRIX_APPROX(p_noise_cov, - S->getPriorFeature('P')->getMeasurementCovariance(), - Constants::EPS); - } - else - { - ASSERT_TRUE(S->getPriorFeature('P') == nullptr); - } - if (_o_noise_std.size() != 0) - { - ASSERT_TRUE(S->getPriorFeature('O') != nullptr); - ASSERT_EQ(_o_state.size(), S->getPriorFeature('O')->getMeasurement().size()); - ASSERT_MATRIX_APPROX(_o_state, - S->getPriorFeature('O')->getMeasurement(), - Constants::EPS); - ASSERT_EQ(o_noise_cov.size(), S->getPriorFeature('O')->getMeasurementCovariance().size()); - ASSERT_MATRIX_APPROX(o_noise_cov, - S->getPriorFeature('O')->getMeasurementCovariance(), - Constants::EPS); - } - else - { - ASSERT_TRUE(S->getPriorFeature('O') == nullptr); - } -} - -// CONSTRUCTOR WITH PRIORS AND PARAMS -// Fix -TEST(SensorOdom2d, fix) -{ - auto params = std::make_shared<ParamsSensorOdom2d>(); - params->k_disp_to_disp = k_disp_to_disp; - params->k_rot_to_rot = k_rot_to_rot; - - auto S = std::make_shared<SensorOdom2d>("sensor1", 2, params, - Priors({{'P',Prior("P", p_state)}, //default "fix", not dynamic - {'O',Prior("O", o_state)}})); - // checks - checkSensorOdom2d(S, p_state, o_state, true, true, vector0, vector0, false, false, vector0, vector0); -} - -// Initial guess -TEST(SensorOdom2d, initial_guess) -{ - auto params = std::make_shared<ParamsSensorOdom2d>(); - params->k_disp_to_disp = k_disp_to_disp; - params->k_rot_to_rot = k_rot_to_rot; - - auto S = std::make_shared<SensorOdom2d>("sensor1", 2, params, - Priors({{'P',Prior("P", p_state, "initial_guess")}, - {'O',Prior("O", o_state, "initial_guess")}})); - // check - checkSensorOdom2d(S, p_state, o_state, false, false, vector0, vector0, false, false, vector0, vector0); -} - -// Factor -TEST(SensorOdom2d, factor) -{ - auto params = std::make_shared<ParamsSensorOdom2d>(); - params->k_disp_to_disp = k_disp_to_disp; - params->k_rot_to_rot = k_rot_to_rot; - - auto S = std::make_shared<SensorOdom2d>("sensor1", 2, params, - Priors({{'P',Prior("P", p_state, "factor", p_std)}, - {'O',Prior("O", o_state, "factor", o_std)}})); - // check - checkSensorOdom2d(S, p_state, o_state, false, false, p_std, o_std, false, false, vector0, vector0); -} - -// Initial guess dynamic -TEST(SensorOdom2d, initial_guess_dynamic) -{ - auto params = std::make_shared<ParamsSensorOdom2d>(); - params->k_disp_to_disp = k_disp_to_disp; - params->k_rot_to_rot = k_rot_to_rot; - - auto S = std::make_shared<SensorOdom2d>("sensor1", 2, params, - Priors({{'P',Prior("P", p_state, "initial_guess", vector0, true)}, - {'O',Prior("O", o_state, "initial_guess", vector0, true)}})); - // check - checkSensorOdom2d(S, p_state, o_state, false, false, vector0, vector0, true, true, vector0, vector0); -} - -// Initial guess dynamic drift -TEST(SensorOdom2d, initial_guess_dynamic_drift) -{ - auto params = std::make_shared<ParamsSensorOdom2d>(); - params->k_disp_to_disp = k_disp_to_disp; - params->k_rot_to_rot = k_rot_to_rot; - - auto S = std::make_shared<SensorOdom2d>("sensor1", 2, params, - Priors({{'P',Prior("P", p_state, "initial_guess", vector0, true, p_std)}, - {'O',Prior("O", o_state, "initial_guess", vector0, true, o_std)}})); - // check - checkSensorOdom2d(S, p_state, o_state, false, false, vector0, vector0, true, true, p_std, o_std); -} - -// mixed -TEST(SensorOdom2d, mixed) -{ - auto params = std::make_shared<ParamsSensorOdom2d>(); - params->k_disp_to_disp = k_disp_to_disp; - params->k_rot_to_rot = k_rot_to_rot; - - auto S = std::make_shared<SensorOdom2d>("sensor1", 2, params, - Priors({{'P',Prior("P", p_state, "fix", vector0, false)}, - {'O',Prior("O", o_state, "factor", o_std, true, o_std)}})); - // check - checkSensorOdom2d(S, p_state, o_state, true, false, vector0, o_std, false, true, vector0, o_std); -} - -// CONSTRUCTOR WITH PARAM SERVER and KEY_TYPES -TEST(SensorOdom2d, server) -{ - std::vector<std::string> modes({"fix", "initial_guess", "factor"}); - std::vector<bool> dynamics({false, true}); - std::vector<bool> drifts({false, true}); - std::vector<bool> wrongs({false, true}); - - // P & O - for (auto mode : modes) - for (auto dynamic : dynamics) - for (auto drift : drifts) - for (auto wrong : wrongs) - { - // nonsense combination - if (not dynamic and drift) - continue; - - // Yaml parser - std::string name = "sensor_odom_2d_" + - mode + - (dynamic ? "_dynamic" : "") + - (drift ? "_drift" : "") + - (wrong ? "_wrong" : ""); - ParserYaml parser = ParserYaml("test/yaml/sensor_odom_2d/" + name + ".yaml", wolf_root, true); - ParamsServer server = ParamsServer(parser.getParams(), "sensor/" + name); - - WOLF_INFO("Creating sensor from name ", name); - - // CORRECT YAML - if (not wrong) - { - auto params = std::make_shared<ParamsSensorOdom2d>(name, server); - auto S = std::make_shared<SensorOdom2d>(name, 2, params, server); - - auto p_size_std = mode == "factor" ? 2 : 0; - auto o_size_std = mode == "factor" ? 1 : 0; - auto p_size_std_drift = drift ? 2 : 0; - auto o_size_std_drift = drift ? 1 : 0; - - // check - checkSensorOdom2d(S, p_state, o_state, - mode == "fix", mode == "fix", - p_std.head(p_size_std), o_std.head(o_size_std), - dynamic, dynamic, - p_std.head(p_size_std_drift), o_std.head(o_size_std_drift)); - } - // INCORRECT YAML - else - { - ASSERT_THROW(std::make_shared<SensorOdom2d>(name + "_wrong", 2, - std::make_shared<ParamsSensorOdom2d>(name + "_wrong", server), - server), - std::runtime_error); - } - } - - // MIXED - CORRECT YAML - { - WOLF_INFO("Creating sensor from name sensor_mixed"); - - // Yaml parser - ParserYaml parser = ParserYaml("test/yaml/sensor_odom_2d/sensor_odom_2d_mixed.yaml", wolf_root, true); - ParamsServer server = ParamsServer(parser.getParams(), "sensor/sensor_mixed"); - - auto params = std::make_shared<ParamsSensorOdom2d>("sensor_mixed", server); - auto S = std::make_shared<SensorOdom2d>("sensor_mixed", 2, params, server); - - // check - checkSensorOdom2d(S, - p_state, o_state, - false, true, - p_std, vector0, - true, false, - p_std, vector0); - } - - // MIXED - INCORRECT YAML - { - WOLF_INFO("Creating sensor from name sensor_mixed_wrong"); - - // Yaml parser - ParserYaml parser = ParserYaml("test/yaml/sensor_odom_2d/sensor_odom_2d_mixed_wrong.yaml", wolf_root, true); - ParamsServer server = ParamsServer(parser.getParams(), "sensor/sensor_mixed_wrong"); - - ASSERT_THROW(std::make_shared<SensorOdom2d>("sensor_mixed_wrong", 2, - std::make_shared<ParamsSensorOdom2d>("sensor_mixed_wrong", server), - server), - std::runtime_error); - } -} - -TEST(SensorOdom2d, factory) -{ - std::vector<std::string> modes({"fix", "initial_guess", "factor"}); - std::vector<bool> dynamics({false, true}); - std::vector<bool> drifts({false, true}); - std::vector<bool> wrongs({false, true}); - - // P & O - for (auto mode : modes) - for (auto dynamic : dynamics) - for (auto drift : drifts) - for (auto wrong : wrongs) - { - // nonsense combination - if (not dynamic and drift) - continue; - - // Yaml parser - std::string name = "sensor_odom_2d_" + - mode + - (dynamic ? "_dynamic" : "") + - (drift ? "_drift" : "") + - (wrong ? "_wrong" : ""); - ParserYaml parser = ParserYaml("test/yaml/sensor_odom_2d/" + name + ".yaml", wolf_root, true); - ParamsServer server = ParamsServer(parser.getParams(), "sensor/" + name); - - WOLF_INFO("Creating sensor from name ", name); - - // CORRECT YAML - if (not wrong) - { - auto S = FactorySensor::create("SensorOdom2d", name, 2, server); - - auto p_size_std = mode == "factor" ? 2 : 0; - auto o_size_std = mode == "factor" ? 1 : 0; - auto p_size_std_drift = drift ? 2 : 0; - auto o_size_std_drift = drift ? 1 : 0; - - // check - checkSensorOdom2d(S, p_state, o_state, - mode == "fix", mode == "fix", - p_std.head(p_size_std), o_std.head(o_size_std), - dynamic, dynamic, - p_std.head(p_size_std_drift), o_std.head(o_size_std_drift)); - } - // INCORRECT YAML - else - { - ASSERT_THROW(FactorySensor::create("SensorOdom2d", name, 2, server), - std::runtime_error); - } - } - - // MIXED - CORRECT YAML - { - WOLF_INFO("Creating sensor from name sensor_mixed"); - - // Yaml parser - ParserYaml parser = ParserYaml("test/yaml/sensor_odom_2d/sensor_odom_2d_mixed.yaml", wolf_root, true); - ParamsServer server = ParamsServer(parser.getParams(), "sensor/sensor_mixed"); - - auto S = FactorySensor::create("SensorOdom2d", "sensor_mixed", 2, server); - - // check - checkSensorOdom2d(S, - p_state, o_state, - false, true, - p_std, vector0, - true, false, - p_std, vector0); - } - - // MIXED - INCORRECT YAML - { - WOLF_INFO("Creating sensor from name sensor_mixed_wrong"); - - // Yaml parser - ParserYaml parser = ParserYaml("test/yaml/sensor_odom_2d/sensor_odom_2d_mixed_wrong.yaml", wolf_root, true); - ParamsServer server = ParamsServer(parser.getParams(), "sensor/sensor_mixed_wrong"); - - ASSERT_THROW(FactorySensor::create("SensorOdom2d", "sensor_mixed_wrong", 2, server), - std::runtime_error); - } -} - -TEST(SensorOdom2d, factory_yaml) -{ - std::vector<std::string> modes({"fix", "initial_guess", "factor"}); - std::vector<bool> dynamics({false, true}); - std::vector<bool> drifts({false, true}); - std::vector<bool> wrongs({false, true}); - - // P & O - for (auto mode : modes) - for (auto dynamic : dynamics) - for (auto drift : drifts) - for (auto wrong : wrongs) - { - // nonsense combination - if (not dynamic and drift) - continue; - - std::string name = "sensor_odom_2d_" + - mode + - (dynamic ? "_dynamic" : "") + - (drift ? "_drift" : "") + - (wrong ? "_wrong" : ""); - - WOLF_INFO("Creating sensor from name ", name); - - // CORRECT YAML - if (not wrong) - { - auto S = FactorySensorYaml::create("SensorOdom2d", name, 2, - wolf_root + "/test/yaml/sensor_odom_2d/" + name + ".yaml"); - - auto p_size_std = mode == "factor" ? 2 : 0; - auto o_size_std = mode == "factor" ? 1 : 0; - auto p_size_std_drift = drift ? 2 : 0; - auto o_size_std_drift = drift ? 1 : 0; - - // check - checkSensorOdom2d(S, p_state, o_state, - mode == "fix", mode == "fix", - p_std.head(p_size_std), o_std.head(o_size_std), - dynamic, dynamic, - p_std.head(p_size_std_drift), o_std.head(o_size_std_drift)); - } - // INCORRECT YAML - else - { - ASSERT_THROW(FactorySensorYaml::create("SensorOdom2d", name, 2, - wolf_root + "/test/yaml/sensor_odom_2d/" + name + ".yaml"), - std::runtime_error); - } - } - - // MIXED - CORRECT YAML - { - WOLF_INFO("Creating sensor from name sensor_mixed"); - - auto S = FactorySensorYaml::create("SensorOdom2d", "sensor_mixed", 2, - wolf_root + "/test/yaml/sensor_odom_2d/sensor_odom_2d_mixed.yaml"); - - // check - checkSensorOdom2d(S, - p_state, o_state, - false, true, - p_std, vector0, - true, false, - p_std, vector0); - } - - // MIXED - INCORRECT YAML - { - WOLF_INFO("Creating sensor from name sensor_mixed_wrong"); - - ASSERT_THROW(FactorySensorYaml::create("SensorOdom2d", "sensor_mixed_wrong", 2, - wolf_root + "/test/yaml/sensor_odom_2d/sensor_odom_2d_mixed_wrong.yaml"), - std::runtime_error); - } -} - -int main(int argc, char **argv) -{ - testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} - diff --git a/test/gtest_sensor_pose.cpp b/test/gtest_sensor_pose.cpp index d37c700a7daf6a45862a4d8b830b8b8e67767282..b62d81e5b75e743824ee3139256eff3d3dcc037f 100644 --- a/test/gtest_sensor_pose.cpp +++ b/test/gtest_sensor_pose.cpp @@ -27,6 +27,7 @@ */ #include "core/sensor/sensor_pose.h" +#include "core/sensor/factory_sensor.h" #include "core/utils/utils_gtest.h" #include <cstdio> @@ -34,52 +35,247 @@ using namespace wolf; using namespace Eigen; -TEST(Pose, constructor) +std::string wolf_root = _WOLF_ROOT_DIR; + +Vector2d p_state_2D = (Vector2d() << 1,2).finished(); +Vector3d p_state_3D = (Vector3d() << 1,2,3).finished(); +Vector1d o_state_2D = (Vector1d() << 3).finished(); +Vector4d o_state_3D = (Vector4d() << .5,.5,.5,.5).finished(); +double std_p = 0.2; +double std_o = 0.1; +Matrix3d noise_cov_2D = (Vector3d() << std_p, std_p, std_o).finished().cwiseAbs2().asDiagonal(); +Matrix6d noise_cov_3D = (Vector6d() << std_p, std_p, std_p, std_o, std_o, std_o).finished().cwiseAbs2().asDiagonal(); + +TEST(Pose, constructor_priors_2D) +{ + auto param = std::make_shared<ParamsSensorPose>(); + param->std_p = std_p; + param->std_o = std_o; + + Priors priors{{'P',Prior("P", p_state_2D)}, //default "fix", not dynamic + {'O',Prior("O", o_state_2D)}}; //default "fix", not dynamic + + auto sen = std::make_shared<SensorPose>("sensor_1", 2, param, priors); + + ASSERT_NE(sen, nullptr); + + ASSERT_TRUE(sen->getP()->isFixed()); + ASSERT_TRUE(sen->getO()->isFixed()); + + ASSERT_MATRIX_APPROX(sen->getP()->getState(), p_state_2D, Constants::EPS); + ASSERT_MATRIX_APPROX(sen->getO()->getState(), o_state_2D, Constants::EPS); + + ASSERT_EQ(sen->getStdP(), std_p); + ASSERT_EQ(sen->getStdO(), std_o); + + ASSERT_MATRIX_APPROX(sen->computeNoiseCov(VectorXd(0)), noise_cov_2D, Constants::EPS) +} + +TEST(Pose, constructor_priors_3D) +{ + auto param = std::make_shared<ParamsSensorPose>(); + param->std_p = std_p; + param->std_o = std_o; + + Priors priors{{'P',Prior("P", p_state_3D)}, //default "fix", not dynamic + {'O',Prior("O", o_state_3D)}}; //default "fix", not dynamic + + auto sen = std::make_shared<SensorPose>("sensor_1", 3, param, priors); + + ASSERT_NE(sen, nullptr); + + ASSERT_TRUE(sen->getP()->isFixed()); + ASSERT_TRUE(sen->getO()->isFixed()); + + ASSERT_MATRIX_APPROX(sen->getP()->getState(), p_state_3D, Constants::EPS); + ASSERT_MATRIX_APPROX(sen->getO()->getState(), o_state_3D, Constants::EPS); + + ASSERT_EQ(sen->getStdP(), std_p); + ASSERT_EQ(sen->getStdO(), std_o); + + ASSERT_MATRIX_APPROX(sen->computeNoiseCov(VectorXd(0)), noise_cov_3D, Constants::EPS) +} + +TEST(Pose, constructor_server_2D) { + ParserYaml parser = ParserYaml("test/yaml/sensor_pose_2d.yaml", wolf_root, true); + ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1"); + + auto params = std::make_shared<ParamsSensorPose>("sensor_1", server); + auto sen = std::make_shared<SensorPose>("sensor_1", 2, params, server); + + ASSERT_NE(sen, nullptr); + + ASSERT_TRUE(sen->getP()->isFixed()); + ASSERT_TRUE(sen->getO()->isFixed()); - auto intr = std::make_shared<ParamsSensorPose>(); - Vector7d extr; extr << 1,2,3,.5,.5,.5,.5; + ASSERT_MATRIX_APPROX(sen->getP()->getState(), p_state_2D, Constants::EPS); + ASSERT_MATRIX_APPROX(sen->getO()->getState(), o_state_2D, Constants::EPS); + + ASSERT_EQ(sen->getStdP(), std_p); + ASSERT_EQ(sen->getStdO(), std_o); + + ASSERT_MATRIX_APPROX(sen->computeNoiseCov(VectorXd(0)), noise_cov_2D, Constants::EPS) +} + +TEST(Pose, constructor_server_3D) +{ + ParserYaml parser = ParserYaml("test/yaml/sensor_pose_3d.yaml", wolf_root, true); + ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1"); - auto sen = std::make_shared<SensorPose>(extr, intr); + auto params = std::make_shared<ParamsSensorPose>("sensor_1", server); + auto sen = std::make_shared<SensorPose>("sensor_1", 3, params, server); ASSERT_NE(sen, nullptr); - ASSERT_MATRIX_APPROX(sen->getP()->getState(), extr.head<3>(), 1e-12); - ASSERT_MATRIX_APPROX(sen->getO()->getState(), extr.tail<4>(), 1e-12); + ASSERT_TRUE(sen->getP()->isFixed()); + ASSERT_TRUE(sen->getO()->isFixed()); + + ASSERT_MATRIX_APPROX(sen->getP()->getState(), p_state_3D, Constants::EPS); + ASSERT_MATRIX_APPROX(sen->getO()->getState(), o_state_3D, Constants::EPS); + + ASSERT_EQ(sen->getStdP(), std_p); + ASSERT_EQ(sen->getStdO(), std_o); + + ASSERT_MATRIX_APPROX(sen->computeNoiseCov(VectorXd(0)), noise_cov_3D, Constants::EPS) } -TEST(Pose, getParams) +TEST(Pose, factory_2D) { - auto intr = std::make_shared<ParamsSensorPose>(); - intr->std_p = 2; - intr->std_o = 3; + ParserYaml parser = ParserYaml("test/yaml/sensor_pose_2d.yaml", wolf_root, true); + ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1"); - Vector7d extr; extr << 1,2,3,.5,.5,.5,.5; + auto sb = FactorySensor::create("SensorPose","sensor_1", 2, server); + + SensorPosePtr sen = std::dynamic_pointer_cast<SensorPose>(sb); + + ASSERT_NE(sen, nullptr); - auto sen = std::make_shared<SensorPose>(extr, intr); + ASSERT_TRUE(sen->getP()->isFixed()); + ASSERT_TRUE(sen->getO()->isFixed()); - ASSERT_EQ(sen->getStdP(), intr->std_p); - ASSERT_EQ(sen->getStdO(), intr->std_o); - // ASSERT_EQ(sen->getNoiseCov()(0,0), (Vector1d() << 4).finished()); - // ASSERT_EQ(sen->getNoiseCov()(3,3), (Vector1d() << 9).finished()); + ASSERT_MATRIX_APPROX(sen->getP()->getState(), p_state_2D, Constants::EPS); + ASSERT_MATRIX_APPROX(sen->getO()->getState(), o_state_2D, Constants::EPS); + + ASSERT_EQ(sen->getStdP(), std_p); + ASSERT_EQ(sen->getStdO(), std_o); + + ASSERT_MATRIX_APPROX(sen->computeNoiseCov(VectorXd(0)), noise_cov_2D, Constants::EPS) } -TEST(Pose, create) +TEST(Pose, factory_3D) { - auto intr = std::make_shared<ParamsSensorPose>(); - intr->std_p = 2; - intr->std_o = 3; + ParserYaml parser = ParserYaml("test/yaml/sensor_pose_3d.yaml", wolf_root, true); + ParamsServer server = ParamsServer(parser.getParams(), "/sensor/sensor_1"); + + auto sb = FactorySensor::create("SensorPose","sensor_1", 3, server); + + SensorPosePtr sen = std::dynamic_pointer_cast<SensorPose>(sb); + + ASSERT_NE(sen, nullptr); + + ASSERT_TRUE(sen->getP()->isFixed()); + ASSERT_TRUE(sen->getO()->isFixed()); + + ASSERT_MATRIX_APPROX(sen->getP()->getState(), p_state_3D, Constants::EPS); + ASSERT_MATRIX_APPROX(sen->getO()->getState(), o_state_3D, Constants::EPS); + + ASSERT_EQ(sen->getStdP(), std_p); + ASSERT_EQ(sen->getStdO(), std_o); + + ASSERT_MATRIX_APPROX(sen->computeNoiseCov(VectorXd(0)), noise_cov_3D, Constants::EPS) +} + +TEST(Pose, factory_yaml_2D) +{ + auto sb = FactorySensorYaml::create("SensorPose","sensor_1", 2, wolf_root + "/test/yaml/sensor_pose_2d.yaml"); + + SensorPosePtr sen = std::dynamic_pointer_cast<SensorPose>(sb); + + ASSERT_NE(sen, nullptr); + + ASSERT_TRUE(sen->getP()->isFixed()); + ASSERT_TRUE(sen->getO()->isFixed()); + + ASSERT_MATRIX_APPROX(sen->getP()->getState(), p_state_2D, Constants::EPS); + ASSERT_MATRIX_APPROX(sen->getO()->getState(), o_state_2D, Constants::EPS); + + ASSERT_EQ(sen->getStdP(), std_p); + ASSERT_EQ(sen->getStdO(), std_o); + + ASSERT_MATRIX_APPROX(sen->computeNoiseCov(VectorXd(0)), noise_cov_2D, Constants::EPS) +} + +TEST(Pose, factory_yaml_3D) +{ + auto sb = FactorySensorYaml::create("SensorPose","sensor_1", 3, wolf_root + "/test/yaml/sensor_pose_3d.yaml"); + + SensorPosePtr sen = std::dynamic_pointer_cast<SensorPose>(sb); + + ASSERT_NE(sen, nullptr); + + ASSERT_TRUE(sen->getP()->isFixed()); + ASSERT_TRUE(sen->getO()->isFixed()); + + ASSERT_MATRIX_APPROX(sen->getP()->getState(), p_state_3D, Constants::EPS); + ASSERT_MATRIX_APPROX(sen->getO()->getState(), o_state_3D, Constants::EPS); + + ASSERT_EQ(sen->getStdP(), std_p); + ASSERT_EQ(sen->getStdO(), std_o); + + ASSERT_MATRIX_APPROX(sen->computeNoiseCov(VectorXd(0)), noise_cov_3D, Constants::EPS) +} + +TEST(Pose, factory_priors_2D) +{ + auto param = std::make_shared<ParamsSensorPose>(); + param->std_p = std_p; + param->std_o = std_o; + + Priors priors{{'P',Prior("P", p_state_2D)}, //default "fix", not dynamic + {'O',Prior("O", o_state_2D)}}; //default "fix", not dynamic + + auto sb = FactorySensorPriors::create("SensorPose","sensor_1", 2, param, priors); + + SensorPosePtr sen = std::dynamic_pointer_cast<SensorPose>(sb); + + ASSERT_NE(sen, nullptr); + + ASSERT_TRUE(sen->getP()->isFixed()); + ASSERT_TRUE(sen->getO()->isFixed()); + + ASSERT_MATRIX_APPROX(sen->getP()->getState(), p_state_2D, Constants::EPS); + ASSERT_MATRIX_APPROX(sen->getO()->getState(), o_state_2D, Constants::EPS); + + ASSERT_EQ(sen->getStdP(), std_p); + ASSERT_EQ(sen->getStdO(), std_o); + + ASSERT_MATRIX_APPROX(sen->computeNoiseCov(VectorXd(0)), noise_cov_2D, Constants::EPS) +} + +TEST(Pose, factory_priors_3D) +{ + auto param = std::make_shared<ParamsSensorPose>(); + param->std_p = std_p; + param->std_o = std_o; + + Priors priors{{'P',Prior("P", p_state_3D)}, //default "fix", not dynamic + {'O',Prior("O", o_state_3D)}}; //default "fix", not dynamic + + auto sb = FactorySensorPriors::create("SensorPose","sensor_1", 3, param, priors); + + SensorPosePtr sen = std::dynamic_pointer_cast<SensorPose>(sb); - Vector7d extr; extr << 1,2,3,.5,.5,.5,.5; + ASSERT_TRUE(sen->getP()->isFixed()); + ASSERT_TRUE(sen->getO()->isFixed()); - auto sen_base = SensorPose::create("name", extr, intr); + ASSERT_MATRIX_APPROX(sen->getP()->getState(), p_state_3D, Constants::EPS); + ASSERT_MATRIX_APPROX(sen->getO()->getState(), o_state_3D, Constants::EPS); - auto sen = std::static_pointer_cast<SensorPose>(sen_base); + ASSERT_EQ(sen->getStdP(), std_p); + ASSERT_EQ(sen->getStdO(), std_o); - ASSERT_EQ(sen->getStdP(), intr->std_p); - ASSERT_EQ(sen->getStdO(), intr->std_o); - // ASSERT_EQ(sen->getNoiseCov()(0,0), (Vector1d() << 4).finished()); - // ASSERT_EQ(sen->getNoiseCov()(3,3), (Vector1d() << 9).finished()); + ASSERT_MATRIX_APPROX(sen->computeNoiseCov(VectorXd(0)), noise_cov_3D, Constants::EPS) } int main(int argc, char **argv) diff --git a/test/yaml/params_tree_manager1.yaml b/test/yaml/params_tree_manager1.yaml index 59aec3c70cee0e147e38dbfb9408c8879bc203e2..5a75360a6772fa49c037b16070f60dc9c84d53ca 100644 --- a/test/yaml/params_tree_manager1.yaml +++ b/test/yaml/params_tree_manager1.yaml @@ -21,16 +21,23 @@ config: toy_param: 0 sensors: - - type: "SensorOdom3d" + type: "SensorOdom" name: "odom" plugin: "core" + states: + P: + mode: fix + state: [1, 2, 3] + dynamic: false + O: + mode: fix + state: [0, 0, 0, 1] + dynamic: false k_disp_to_disp: 0.1 k_disp_to_rot: 0.1 k_rot_to_rot: 0.1 min_disp_var: 0.1 min_rot_var: 0.1 - extrinsic: - pose: [1,2,3,0,0,0,1] processors: - type: "ProcessorOdom3d" diff --git a/test/yaml/params_tree_manager2.yaml b/test/yaml/params_tree_manager2.yaml index 419125468ba5155eba8f0f75c972a5d52b5dbcef..555052c63d6b1aec789f1e1674ed2506e903dd0f 100644 --- a/test/yaml/params_tree_manager2.yaml +++ b/test/yaml/params_tree_manager2.yaml @@ -19,16 +19,23 @@ config: type: "None" sensors: - - type: "SensorOdom3d" + type: "SensorOdom" name: "odom" plugin: "core" + states: + P: + mode: fix + state: [1, 2, 3] + dynamic: false + O: + mode: fix + state: [0, 0, 0, 1] + dynamic: false k_disp_to_disp: 0.1 k_disp_to_rot: 0.1 k_rot_to_rot: 0.1 min_disp_var: 0.1 min_rot_var: 0.1 - extrinsic: - pose: [1,2,3,0,0,0,1] processors: - type: "ProcessorOdom3d" diff --git a/test/yaml/sensor_base/sensor_PO_2D_fix.yaml b/test/yaml/sensor_base/sensor_PO_2D_fix.yaml deleted file mode 100644 index 4125b1f4a1ef3db7ed874aafbe1969a65330dde6..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_base/sensor_PO_2D_fix.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# sensor_PO_2D_fix: -states: - P: - mode: fix - state: [1, 2] - dynamic: false - O: - mode: fix - state: [1] - dynamic: false -noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file diff --git a/test/yaml/sensor_base/sensor_PO_2D_fix_dynamic.yaml b/test/yaml/sensor_base/sensor_PO_2D_fix_dynamic.yaml deleted file mode 100644 index f706700135da85f6ceab0083c42e7736dafe4783..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_base/sensor_PO_2D_fix_dynamic.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# sensor_PO_2D_fix_dynamic: -states: - P: - mode: fix - state: [1, 2] - dynamic: true - O: - mode: fix - state: [1] - dynamic: true -noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file diff --git a/test/yaml/sensor_base/sensor_PO_2D_fix_wrong.yaml b/test/yaml/sensor_base/sensor_PO_2D_fix_wrong.yaml deleted file mode 100644 index b349248945347e66422f20281b9c714eefa2b0ec..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_base/sensor_PO_2D_fix_wrong.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# sensor_PO_2D_fix_wrong: -states: - P: - mode: fix - state: [1, 2] - #dynamic: false #missing - O: - mode: fix - state: [1] - dynamic: false -noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file diff --git a/test/yaml/sensor_base/sensor_PO_3D_fix_wrong.yaml b/test/yaml/sensor_base/sensor_PO_3D_fix_wrong.yaml deleted file mode 100644 index 99c0f477f995c26cc21187dda5c481ff1415d0af..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_base/sensor_PO_3D_fix_wrong.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# sensor_PO_3D_fix_wrong: -states: - P: - mode: fix - state: [1, 2, 3] - dynamic: false - O: - mode: fix - state: [1, 0, 0, 0] - dynamic: false -noise_p_std: 0.1 -#noise_o_std: 0.01 #missing \ No newline at end of file diff --git a/test/yaml/sensor_base/sensor_dummy.yaml b/test/yaml/sensor_base/sensor_dummy.yaml deleted file mode 100644 index 6e1111173262fa4a5fc6a61d25e18b8cb335103f..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_base/sensor_dummy.yaml +++ /dev/null @@ -1,24 +0,0 @@ -param1: 1.2 -param2: 3 -noise_std: [0.1, 0.2] -states: - P: - mode: factor - state: [1, 2, 3] - noise_std: [0.1, 0.2, 0.3] - dynamic: true - O: - mode: fix - state: [1, 0, 0, 0] - dynamic: false - I: - mode: initial_guess - state: [1, 2, 3, 4] - dynamic: true - drift_std: [0.1, 0.2, 0.3, 0.4] - A: - mode: factor - state: [1, 0, 0, 0] - noise_std: [0.1, 0.2, 0.3] - dynamic: true - drift_std: [0.1, 0.2, 0.3] \ No newline at end of file diff --git a/test/yaml/sensor_base/sensor_dummy_wrong.yaml b/test/yaml/sensor_base/sensor_dummy_wrong.yaml deleted file mode 100644 index 89467b4cfd264014428152d4704d0f5ef570d13a..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_base/sensor_dummy_wrong.yaml +++ /dev/null @@ -1,24 +0,0 @@ -param1: 1.2 -param2: 3 -noise_std: [0.1, 0.2] -states: - P: - mode: factor - state: [1, 2, 3] - noise_std: [0.1, 0.2, 0.3] - dynamic: true - O: - mode: fix - state: [1, 0, 0, 0] - dynamic: false - # I: - # mode: initial_guess - # state: [1, 2, 3, 4] - # dynamic: true - # drift_std: [0.1, 0.2, 0.3, 0.4] - A: - mode: factor - state: [1, 0, 0, 0] - noise_std: [0.1, 0.2, 0.3] - dynamic: true - drift_std: [0.1, 0.2, 0.3] \ No newline at end of file diff --git a/test/yaml/sensor_odom_2d.yaml b/test/yaml/sensor_odom_2d.yaml index 16adc66acf10995f74007686e2722bb5a7518f7c..0ab13d73f2b06b324bfa5689eb522d08ddec0251 100644 --- a/test/yaml/sensor_odom_2d.yaml +++ b/test/yaml/sensor_odom_2d.yaml @@ -7,6 +7,10 @@ states: mode: fix state: [3] dynamic: false -noise_std: [0.1, 0.2] + k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 + diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_factor.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_factor.yaml deleted file mode 100644 index 25318d527db4bae12bdfe01e1248a252e72671fc..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_factor.yaml +++ /dev/null @@ -1,14 +0,0 @@ -states: - P: - mode: factor - state: [1, 2] - noise_std: [0.1, 0.2] - dynamic: false - O: - mode: factor - state: [3] - noise_std: [0.3] - dynamic: false -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 \ No newline at end of file diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_dynamic.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_dynamic.yaml deleted file mode 100644 index 05b7c5cb1904fd45867467585b25b3570959551b..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_dynamic.yaml +++ /dev/null @@ -1,14 +0,0 @@ -states: - P: - mode: factor - state: [1, 2] - noise_std: [0.1, 0.2] - dynamic: true - O: - mode: factor - state: [3] - noise_std: [0.3] - dynamic: true -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 \ No newline at end of file diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_dynamic_drift.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_dynamic_drift.yaml deleted file mode 100644 index 76d8a922249aa941d36f4cf31e220501bdd71459..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_dynamic_drift.yaml +++ /dev/null @@ -1,16 +0,0 @@ -states: - P: - mode: factor - state: [1, 2] - noise_std: [0.1, 0.2] - dynamic: true - drift_std: [0.1, 0.2] - O: - mode: factor - state: [3] - noise_std: [0.3] - dynamic: true - drift_std: [0.3] -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 \ No newline at end of file diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_dynamic_drift_wrong.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_dynamic_drift_wrong.yaml deleted file mode 100644 index b2c4971c1dba5771184623eba88780240229c0ea..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_dynamic_drift_wrong.yaml +++ /dev/null @@ -1,16 +0,0 @@ -states: - P: - mode: factor - state: [1, 2] - noise_std: [0.1, 0.2] - dynamic: true - drift_std: [0.3] # wrong size - O: - mode: factor - state: [3] - noise_std: [0.3] - dynamic: true - drift_std: [0.3] -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 \ No newline at end of file diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_dynamic_wrong.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_dynamic_wrong.yaml deleted file mode 100644 index 7095775fa1327b141db927575769124b3dd8880f..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_dynamic_wrong.yaml +++ /dev/null @@ -1,14 +0,0 @@ -states: - P: - mode: factor - state: [1, 2] - noise_std: [0.1, 0.2, 0.3] #wrong size - dynamic: true - O: - mode: factor - state: [3] - noise_std: [0.3] - dynamic: true -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 \ No newline at end of file diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_wrong.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_wrong.yaml deleted file mode 100644 index b8a86c874abd41bb90352c1e5b9a9a6d7c69da0d..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_factor_wrong.yaml +++ /dev/null @@ -1,14 +0,0 @@ -states: - P: - mode: factor - state: [1, 2] - noise_std: [0.1, 0.2] - dynamic: false - O: - mode: factor - #state: [3] #missing - noise_std: [0.3] - dynamic: false -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 \ No newline at end of file diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_dynamic.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_dynamic.yaml deleted file mode 100644 index fd24b509f20858576a94089a123e9272973530bb..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_dynamic.yaml +++ /dev/null @@ -1,12 +0,0 @@ -states: - P: - mode: fix - state: [1, 2] - dynamic: true - O: - mode: fix - state: [3] - dynamic: true -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 \ No newline at end of file diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_dynamic_drift.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_dynamic_drift.yaml deleted file mode 100644 index a4b81b49058b477ed153bd9f6610a6e9cf02d38e..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_dynamic_drift.yaml +++ /dev/null @@ -1,14 +0,0 @@ -states: - P: - mode: fix - state: [1, 2] - dynamic: true - drift_std: [0.1, 0.2] - O: - mode: fix - state: [3] - dynamic: true - drift_std: [0.3] -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_dynamic_drift_wrong.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_dynamic_drift_wrong.yaml deleted file mode 100644 index 0c5beb28c659ec0e5dbd929597fbacfeff40d748..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_dynamic_drift_wrong.yaml +++ /dev/null @@ -1,14 +0,0 @@ -states: - P: - mode: fix - state: [1, 2] - dynamic: true - drift_std: [0.1, 0.2, 0.3] #wrong size - O: - mode: fix - state: [3] - dynamic: true - drift_std: [0.3] -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_dynamic_wrong.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_dynamic_wrong.yaml deleted file mode 100644 index ca9746a491bb1a82e32f7d2f0d677a7f600d5d8c..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_dynamic_wrong.yaml +++ /dev/null @@ -1,12 +0,0 @@ -states: - P: - mode: fix - state: [1, 2, 3] # wrong size - dynamic: true - O: - mode: fix - state: [3] - dynamic: true -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 \ No newline at end of file diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_wrong.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_wrong.yaml deleted file mode 100644 index d927120f2690d8f1e42ce2cb5dd66e57bbd770bd..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_fix_wrong.yaml +++ /dev/null @@ -1,12 +0,0 @@ -states: - P: - mode: fix - state: [1, 2] - #dynamic: false #missing - O: - mode: fix - state: [3] - dynamic: false -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess.yaml deleted file mode 100644 index 7d8038b84aeb2abf4acd1f7cc5e53bc6c2cb8be4..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess.yaml +++ /dev/null @@ -1,12 +0,0 @@ -states: - P: - mode: initial_guess - state: [1, 2] - dynamic: false - O: - mode: initial_guess - state: [3] - dynamic: false -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 \ No newline at end of file diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_dynamic.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_dynamic.yaml deleted file mode 100644 index 547c9ea892375464645b6723c5b6e257f2cad0fa..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_dynamic.yaml +++ /dev/null @@ -1,12 +0,0 @@ -states: - P: - mode: initial_guess - state: [1, 2] - dynamic: true - O: - mode: initial_guess - state: [3] - dynamic: true -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_dynamic_drift.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_dynamic_drift.yaml deleted file mode 100644 index 693e91bc24ccdb0e1d8ff0a82764cfa64e28d50f..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_dynamic_drift.yaml +++ /dev/null @@ -1,14 +0,0 @@ -states: - P: - mode: initial_guess - state: [1, 2] - dynamic: true - drift_std: [0.1, 0.2] - O: - mode: initial_guess - state: [3] - dynamic: true - drift_std: [0.3] -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_dynamic_drift_wrong.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_dynamic_drift_wrong.yaml deleted file mode 100644 index 49d6a56c2df7915a0704ca9f24fc669dd261bcff..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_dynamic_drift_wrong.yaml +++ /dev/null @@ -1,14 +0,0 @@ -states: - P: - mode: initial_guess - state: [3] # wrong size - dynamic: true - drift_std: [0.1, 0.2] - O: - mode: initial_guess - state: [3] - dynamic: true - drift_std: [0.3] -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 \ No newline at end of file diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_dynamic_wrong.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_dynamic_wrong.yaml deleted file mode 100644 index 4dcf14f132cea51f61daa6f15621857fb1a4b760..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_dynamic_wrong.yaml +++ /dev/null @@ -1,12 +0,0 @@ -states: - # P: #missing - # mode: initial_guess - # state: [1, 2] - # dynamic: true - O: - mode: initial_guess - state: [3] - dynamic: true -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 \ No newline at end of file diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_wrong.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_wrong.yaml deleted file mode 100644 index d6e901058b599ca4db1d8275df37919759c4d428..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_initial_guess_wrong.yaml +++ /dev/null @@ -1,12 +0,0 @@ -states: - P: - mode: initial_guess - state: [1, 2] - dynamic: false - O: - mode: initial_guess - state: [3] - dynamic: false -noise_std: [0.1, 0.2] -#k_disp_to_disp: 0.5 #missing -k_rot_to_rot: 0.8 \ No newline at end of file diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_mixed.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_mixed.yaml deleted file mode 100644 index 42777646ea7c3a31a2ef78cbfab707bcc77a5a4d..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_mixed.yaml +++ /dev/null @@ -1,14 +0,0 @@ -states: - P: - mode: factor - state: [1, 2] - noise_std: [0.1, 0.2] - dynamic: true - drift_std: [0.1, 0.2] - O: - mode: fix - state: [3] - dynamic: false -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 \ No newline at end of file diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_mixed_wrong.yaml b/test/yaml/sensor_odom_2d/sensor_odom_2d_mixed_wrong.yaml deleted file mode 100644 index 7b1023e84d563a3d71f54a76c0ccf63a3b4e5e6d..0000000000000000000000000000000000000000 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_mixed_wrong.yaml +++ /dev/null @@ -1,13 +0,0 @@ -states: - P: - mode: factor - state: [1, 2] - noise_std: [0.1, 0.2, 0.3] # wrong size - dynamic: true - O: - mode: fix - state: [3] - dynamic: false -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 \ No newline at end of file diff --git a/test/yaml/sensor_odom_3d.yaml b/test/yaml/sensor_odom_3d.yaml index 8eb2b235011cb3cfe4f35b1f73da6344991af0da..ea22ca723fbf7fedaf121ded4d041866bc0f65a1 100644 --- a/test/yaml/sensor_odom_3d.yaml +++ b/test/yaml/sensor_odom_3d.yaml @@ -1,5 +1,13 @@ -type: "SensorOdom3d" # This must match the KEY used in the FactorySensor. Otherwise it is an error. - +states: + P: + mode: fix + state: [1, 2, 3] + dynamic: false + O: + mode: fix + state: [1, 0, 0, 0] + dynamic: false + k_disp_to_disp: 0.02 # m^2 / m k_disp_to_rot: 0.02 # rad^2 / m k_rot_to_rot: 0.01 # rad^2 / rad diff --git a/test/yaml/sensor_odom_2d/sensor_odom_2d_fix.yaml b/test/yaml/sensor_pose_2d.yaml similarity index 66% rename from test/yaml/sensor_odom_2d/sensor_odom_2d_fix.yaml rename to test/yaml/sensor_pose_2d.yaml index 16adc66acf10995f74007686e2722bb5a7518f7c..d85c3d247fda7b9f26bff9bc60f7271c2e025c53 100644 --- a/test/yaml/sensor_odom_2d/sensor_odom_2d_fix.yaml +++ b/test/yaml/sensor_pose_2d.yaml @@ -7,6 +7,7 @@ states: mode: fix state: [3] dynamic: false -noise_std: [0.1, 0.2] -k_disp_to_disp: 0.5 -k_rot_to_rot: 0.8 + +std_p: 0.2 +std_o: 0.1 + diff --git a/test/yaml/sensor_base/sensor_PO_3D_fix.yaml b/test/yaml/sensor_pose_3d.yaml similarity index 57% rename from test/yaml/sensor_base/sensor_PO_3D_fix.yaml rename to test/yaml/sensor_pose_3d.yaml index d3614ede680d2a9346c276077752812a715338b5..f2acfab188d82beef19a8ec507698ac1b038d19b 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_fix.yaml +++ b/test/yaml/sensor_pose_3d.yaml @@ -1,4 +1,3 @@ -# sensor_PO_3D_fix: states: P: mode: fix @@ -6,7 +5,8 @@ states: dynamic: false O: mode: fix - state: [1, 0, 0, 0] + state: [0.5, 0.5, 0.5, 0.5] dynamic: false -noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file + +std_p: 0.2 +std_o: 0.1 diff --git a/test/yaml/sensor_base/sensor_POIA_3D.yaml b/test/yaml/sensor_tests/sensor_POIA_3D.yaml similarity index 71% rename from test/yaml/sensor_base/sensor_POIA_3D.yaml rename to test/yaml/sensor_tests/sensor_POIA_3D.yaml index 7ec74b1faecd03323b78b47397113019602945a7..397f1d2795b704bfce9f0d8c7078f83200788e0f 100644 --- a/test/yaml/sensor_base/sensor_POIA_3D.yaml +++ b/test/yaml/sensor_tests/sensor_POIA_3D.yaml @@ -20,5 +20,16 @@ states: noise_std: [0.1, 0.2, 0.3] dynamic: true drift_std: [0.1, 0.2, 0.3] + + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_POIA_3D_wrong.yaml b/test/yaml/sensor_tests/sensor_POIA_3D_wrong.yaml similarity index 72% rename from test/yaml/sensor_base/sensor_POIA_3D_wrong.yaml rename to test/yaml/sensor_tests/sensor_POIA_3D_wrong.yaml index 5782bcc25c61e4a3dd200081b960c822f84f84a3..fab3cf9b19291061da5e1b96f315db02c7f249aa 100644 --- a/test/yaml/sensor_base/sensor_POIA_3D_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_POIA_3D_wrong.yaml @@ -20,5 +20,15 @@ states: # noise_std: [0.1, 0.2, 0.3] # dynamic: true # drift_std: [0.1, 0.2, 0.3] + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_factor.yaml b/test/yaml/sensor_tests/sensor_PO_2D_factor.yaml similarity index 55% rename from test/yaml/sensor_base/sensor_PO_2D_factor.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_factor.yaml index a7a59d8ba28336a87846612296557fb3b7d9dbab..9bfc63bcdf637b1f6081484cd45a657adce38621 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_factor.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_factor.yaml @@ -10,5 +10,15 @@ states: state: [1] noise_std: [0.1] dynamic: false + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_factor_dynamic.yaml b/test/yaml/sensor_tests/sensor_PO_2D_factor_dynamic.yaml similarity index 55% rename from test/yaml/sensor_base/sensor_PO_2D_factor_dynamic.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_factor_dynamic.yaml index 9bed5e2bfed7ed1b06bca865482ef49e91f9e4ea..ce4287ed5836202b2fe4717dec9007423c497e5b 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_factor_dynamic.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_factor_dynamic.yaml @@ -10,5 +10,15 @@ states: state: [1] noise_std: [0.1] dynamic: true + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_factor_dynamic_drift.yaml b/test/yaml/sensor_tests/sensor_PO_2D_factor_dynamic_drift.yaml similarity index 61% rename from test/yaml/sensor_base/sensor_PO_2D_factor_dynamic_drift.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_factor_dynamic_drift.yaml index d7b3ecb231ae656b545e31e32ca5d737ddcf0bdb..d4c05d48d052a977b814f2a21454cf8d07d660e2 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_factor_dynamic_drift.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_factor_dynamic_drift.yaml @@ -12,5 +12,14 @@ states: noise_std: [0.1] dynamic: true drift_std: [0.1] + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_factor_dynamic_drift_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_2D_factor_dynamic_drift_wrong.yaml similarity index 62% rename from test/yaml/sensor_base/sensor_PO_2D_factor_dynamic_drift_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_factor_dynamic_drift_wrong.yaml index abf288b221ee56363146efc4f65dfabf206851f6..a6787204c54157700a27ce4f051a3404eaa8c9de 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_factor_dynamic_drift_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_factor_dynamic_drift_wrong.yaml @@ -12,5 +12,14 @@ states: noise_std: [0.1] dynamic: true drift_std: [0.1] + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_factor_dynamic_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_2D_factor_dynamic_wrong.yaml similarity index 58% rename from test/yaml/sensor_base/sensor_PO_2D_factor_dynamic_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_factor_dynamic_wrong.yaml index 9ed9a58fa58264bc1db5602ba4e3e6bc88efaa4e..c66c96442b96409021e8dd22199354d574210db3 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_factor_dynamic_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_factor_dynamic_wrong.yaml @@ -10,5 +10,14 @@ states: state: [1] noise_std: [0.1] dynamic: true + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_factor_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_2D_factor_wrong.yaml similarity index 56% rename from test/yaml/sensor_base/sensor_PO_2D_factor_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_factor_wrong.yaml index a781d137fae907f7731cb9d8e09d07f9eb5a6fe5..b99691f908e478f3bd0d148a21c7fc9b26773e14 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_factor_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_factor_wrong.yaml @@ -10,5 +10,15 @@ states: #state: [1] #missing noise_std: [0.1] dynamic: false + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_tests/sensor_PO_2D_fix.yaml b/test/yaml/sensor_tests/sensor_PO_2D_fix.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e96ee1849a3a5034e05e0ce725d4dcbd7fa98828 --- /dev/null +++ b/test/yaml/sensor_tests/sensor_PO_2D_fix.yaml @@ -0,0 +1,22 @@ +# sensor_PO_2D_fix: +states: + P: + mode: fix + state: [1, 2] + dynamic: false + O: + mode: fix + state: [1] + dynamic: false + + +# used in gtest_sensor_base +noise_p_std: 0.1 +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_tests/sensor_PO_2D_fix_dynamic.yaml b/test/yaml/sensor_tests/sensor_PO_2D_fix_dynamic.yaml new file mode 100644 index 0000000000000000000000000000000000000000..715da540e07244f4e384e8189dc4b19b68d0d7ef --- /dev/null +++ b/test/yaml/sensor_tests/sensor_PO_2D_fix_dynamic.yaml @@ -0,0 +1,22 @@ +# sensor_PO_2D_fix_dynamic: +states: + P: + mode: fix + state: [1, 2] + dynamic: true + O: + mode: fix + state: [1] + dynamic: true + + +# used in gtest_sensor_base +noise_p_std: 0.1 +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_fix_dynamic_drift.yaml b/test/yaml/sensor_tests/sensor_PO_2D_fix_dynamic_drift.yaml similarity index 55% rename from test/yaml/sensor_base/sensor_PO_2D_fix_dynamic_drift.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_fix_dynamic_drift.yaml index 25a40db4275bed61a5ecb5543d723eab08f1acd8..4e668002900941f2d896f323c24220931a0a02c6 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_fix_dynamic_drift.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_fix_dynamic_drift.yaml @@ -10,5 +10,15 @@ states: state: [1] dynamic: true drift_std: [0.1] + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_fix_dynamic_drift_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_2D_fix_dynamic_drift_wrong.yaml similarity index 57% rename from test/yaml/sensor_base/sensor_PO_2D_fix_dynamic_drift_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_fix_dynamic_drift_wrong.yaml index 622158be35117453734590e2b9987bd84e8210e1..0bcee886ca1f46fe9ec042261a498fd81ec13b58 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_fix_dynamic_drift_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_fix_dynamic_drift_wrong.yaml @@ -10,5 +10,15 @@ states: state: [1] dynamic: true drift_std: [0.1] + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_fix_dynamic_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_2D_fix_dynamic_wrong.yaml similarity index 51% rename from test/yaml/sensor_base/sensor_PO_2D_fix_dynamic_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_fix_dynamic_wrong.yaml index d66f2f21c6bf734aee5f8c5030554b77dde43fba..1c9d8167985835870cbd2cc089de68e1006954c2 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_fix_dynamic_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_fix_dynamic_wrong.yaml @@ -8,5 +8,15 @@ states: mode: fix state: [1] dynamic: true + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_tests/sensor_PO_2D_fix_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_2D_fix_wrong.yaml new file mode 100644 index 0000000000000000000000000000000000000000..229f89094fb3846ae70aa2bb8a5a5271d5ecd645 --- /dev/null +++ b/test/yaml/sensor_tests/sensor_PO_2D_fix_wrong.yaml @@ -0,0 +1,22 @@ +# sensor_PO_2D_fix_wrong: +states: + P: + mode: fix + state: [1, 2] + #dynamic: false #missing + O: + mode: fix + state: [1] + dynamic: false + + +# used in gtest_sensor_base +noise_p_std: 0.1 +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_initial_guess.yaml b/test/yaml/sensor_tests/sensor_PO_2D_initial_guess.yaml similarity index 51% rename from test/yaml/sensor_base/sensor_PO_2D_initial_guess.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_initial_guess.yaml index 937ddf2ab0946987fd28cf4e68e53ef9e0b450df..f593fc53c121358f71a7b9f30d7b4d70f1735c3e 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_initial_guess.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_initial_guess.yaml @@ -8,5 +8,15 @@ states: mode: initial_guess state: [1] dynamic: false + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_initial_guess_dynamic.yaml b/test/yaml/sensor_tests/sensor_PO_2D_initial_guess_dynamic.yaml similarity index 52% rename from test/yaml/sensor_base/sensor_PO_2D_initial_guess_dynamic.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_initial_guess_dynamic.yaml index e979574969acf4eb2f2c861ed2ee127c4fdfb3bd..50705368a30d24e1b72e9c9af72d0f405af9225c 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_initial_guess_dynamic.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_initial_guess_dynamic.yaml @@ -8,5 +8,15 @@ states: mode: initial_guess state: [1] dynamic: true + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_initial_guess_dynamic_drift.yaml b/test/yaml/sensor_tests/sensor_PO_2D_initial_guess_dynamic_drift.yaml similarity index 58% rename from test/yaml/sensor_base/sensor_PO_2D_initial_guess_dynamic_drift.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_initial_guess_dynamic_drift.yaml index 49aaaaac83f3451c1fde21276768cca629403507..d5060eeaffbc0aabad00ffe8368a90cb32955cb1 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_initial_guess_dynamic_drift.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_initial_guess_dynamic_drift.yaml @@ -10,5 +10,15 @@ states: state: [1] dynamic: true drift_std: [0.1] + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_initial_guess_dynamic_drift_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_2D_initial_guess_dynamic_drift_wrong.yaml similarity index 60% rename from test/yaml/sensor_base/sensor_PO_2D_initial_guess_dynamic_drift_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_initial_guess_dynamic_drift_wrong.yaml index cc9e32246bbfc97c6e8739db00399e4a2e4398bc..9a53f8300eba2490c4464822396303e0a56824e5 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_initial_guess_dynamic_drift_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_initial_guess_dynamic_drift_wrong.yaml @@ -10,5 +10,15 @@ states: state: [1] dynamic: true drift_std: [0.1] + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_initial_guess_dynamic_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_2D_initial_guess_dynamic_wrong.yaml similarity index 55% rename from test/yaml/sensor_base/sensor_PO_2D_initial_guess_dynamic_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_initial_guess_dynamic_wrong.yaml index 046ede375380deaec7e0a98dfcf570cad341bea2..9b3da538f19f6ed71374af434650e78aae8fe1fd 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_initial_guess_dynamic_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_initial_guess_dynamic_wrong.yaml @@ -8,5 +8,15 @@ states: mode: initial_guess state: [1] dynamic: true + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_2D_initial_guess_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_2D_initial_guess_wrong.yaml similarity index 53% rename from test/yaml/sensor_base/sensor_PO_2D_initial_guess_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_2D_initial_guess_wrong.yaml index ce2792d2251d9ae705029e36bef3c976f8f42340..65d170426b4b6821e0667ffe196c4ddf6b8304db 100644 --- a/test/yaml/sensor_base/sensor_PO_2D_initial_guess_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_2D_initial_guess_wrong.yaml @@ -8,5 +8,15 @@ states: #mode: initial_guess #missing state: [1] dynamic: false + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_factor.yaml b/test/yaml/sensor_tests/sensor_PO_3D_factor.yaml similarity index 58% rename from test/yaml/sensor_base/sensor_PO_3D_factor.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_factor.yaml index 6084ec5d397a7ca54888c967198b73eee7be53bc..23737df980572e74aa0c84e85c5cd29256d5e05a 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_factor.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_factor.yaml @@ -10,5 +10,15 @@ states: state: [1, 0, 0, 0] noise_std: [0.1, 0.2, 0.3] dynamic: false + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_factor_dynamic.yaml b/test/yaml/sensor_tests/sensor_PO_3D_factor_dynamic.yaml similarity index 58% rename from test/yaml/sensor_base/sensor_PO_3D_factor_dynamic.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_factor_dynamic.yaml index ab974d37a2abef05b685f7bb918ee2bdf29431a2..8c9342ab801b23a97cb68dd74e9577d57858e568 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_factor_dynamic.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_factor_dynamic.yaml @@ -10,5 +10,15 @@ states: state: [1, 0, 0, 0] noise_std: [0.1, 0.2, 0.3] dynamic: true + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_factor_dynamic_drift.yaml b/test/yaml/sensor_tests/sensor_PO_3D_factor_dynamic_drift.yaml similarity index 64% rename from test/yaml/sensor_base/sensor_PO_3D_factor_dynamic_drift.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_factor_dynamic_drift.yaml index 65940ecb858217588bdec4c0a8ba61ea79f05033..9f7e14d047a4ac2b9e2d4f783d088edd97005e35 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_factor_dynamic_drift.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_factor_dynamic_drift.yaml @@ -12,5 +12,15 @@ states: noise_std: [0.1, 0.2, 0.3] dynamic: true drift_std: [0.1, 0.2, 0.3] + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_factor_dynamic_drift_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_3D_factor_dynamic_drift_wrong.yaml similarity index 66% rename from test/yaml/sensor_base/sensor_PO_3D_factor_dynamic_drift_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_factor_dynamic_drift_wrong.yaml index f00748d655526a3f185f8ad91cfd85d699ee3b81..a4980b27d66a48f1573013cb052d6ebc7f0f56fe 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_factor_dynamic_drift_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_factor_dynamic_drift_wrong.yaml @@ -12,5 +12,15 @@ states: noise_std: [0.1, 0.2, 0.3, 0.4] #wrong size dynamic: true drift_std: [0.1, 0.2, 0.3] + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_factor_dynamic_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_3D_factor_dynamic_wrong.yaml similarity index 60% rename from test/yaml/sensor_base/sensor_PO_3D_factor_dynamic_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_factor_dynamic_wrong.yaml index 095862ddc7758660387d5e69e0e9ce5966deeb38..104237208910962c2753cd1a28305c89f5c10821 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_factor_dynamic_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_factor_dynamic_wrong.yaml @@ -10,5 +10,15 @@ states: state: [1, 0, 0, 0] noise_std: [0.1, 0.2, 0.3, 0.4] # wrong size dynamic: true + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_factor_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_3D_factor_wrong.yaml similarity index 59% rename from test/yaml/sensor_base/sensor_PO_3D_factor_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_factor_wrong.yaml index ba143662c6d832f0a4096e9d39d21575b1258baf..d99e580743dea4589ce17618bc99024c68cd6bf1 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_factor_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_factor_wrong.yaml @@ -10,5 +10,15 @@ states: state: [1, 0, 0, 0] noise_std: [0.1, 0.2, 0.3] dynamic: false + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_tests/sensor_PO_3D_fix.yaml b/test/yaml/sensor_tests/sensor_PO_3D_fix.yaml new file mode 100644 index 0000000000000000000000000000000000000000..44eef97f1280399a7fe500f6695aef5b171d0143 --- /dev/null +++ b/test/yaml/sensor_tests/sensor_PO_3D_fix.yaml @@ -0,0 +1,22 @@ +# sensor_PO_3D_fix: +states: + P: + mode: fix + state: [1, 2, 3] + dynamic: false + O: + mode: fix + state: [1, 0, 0, 0] + dynamic: false + + +# used in gtest_sensor_base +noise_p_std: 0.1 +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_fix_dynamic.yaml b/test/yaml/sensor_tests/sensor_PO_3D_fix_dynamic.yaml similarity index 50% rename from test/yaml/sensor_base/sensor_PO_3D_fix_dynamic.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_fix_dynamic.yaml index 0329cd837b057de960640354da2baf38979f5a7e..606751a7ba35e7faa66c1752244c05c55a8c4e4d 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_fix_dynamic.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_fix_dynamic.yaml @@ -8,5 +8,15 @@ states: mode: fix state: [1, 0, 0, 0] dynamic: true + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_fix_dynamic_drift.yaml b/test/yaml/sensor_tests/sensor_PO_3D_fix_dynamic_drift.yaml similarity index 58% rename from test/yaml/sensor_base/sensor_PO_3D_fix_dynamic_drift.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_fix_dynamic_drift.yaml index 3c2bedefe52348215f84e8c4f5bdb16eec9078d8..f6166c91b00ab312bc72fa54e1e117553ce8ee2d 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_fix_dynamic_drift.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_fix_dynamic_drift.yaml @@ -10,5 +10,15 @@ states: state: [1, 0, 0, 0] dynamic: true drift_std: [0.1, 0.2, 0.3] + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_fix_dynamic_drift_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_3D_fix_dynamic_drift_wrong.yaml similarity index 59% rename from test/yaml/sensor_base/sensor_PO_3D_fix_dynamic_drift_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_fix_dynamic_drift_wrong.yaml index 47286195af2d766d52506dc0ab45e35e90c52005..17467074e5baef59a958cdf2c7c1b438de2ef371 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_fix_dynamic_drift_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_fix_dynamic_drift_wrong.yaml @@ -10,5 +10,15 @@ states: state: [1, 0, 0, 0] #dynamic: true #missing drift_std: [0.1, 0.2, 0.3] + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_fix_dynamic_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_3D_fix_dynamic_wrong.yaml similarity index 53% rename from test/yaml/sensor_base/sensor_PO_3D_fix_dynamic_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_fix_dynamic_wrong.yaml index c5f6ed7a6e4075b845fae7f4627fa75714aa2291..4e6da9d215eaab580db71827212cfab78f19db28 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_fix_dynamic_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_fix_dynamic_wrong.yaml @@ -8,5 +8,15 @@ states: mode: fix state: [1, 0, 0, 1] # not normalized dynamic: true + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_tests/sensor_PO_3D_fix_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_3D_fix_wrong.yaml new file mode 100644 index 0000000000000000000000000000000000000000..acc56356647c3791c3745520f8218bf0f005cd89 --- /dev/null +++ b/test/yaml/sensor_tests/sensor_PO_3D_fix_wrong.yaml @@ -0,0 +1,22 @@ +# sensor_PO_3D_fix_wrong: +states: + P: + mode: fix + state: [1, 2, 3] + dynamic: false + O: + mode: fix + state: [1, 0, 0, 0] + dynamic: false + + +# used in gtest_sensor_base +noise_p_std: 0.1 +# noise_o_std: 0.01 #missing + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +# k_rot_to_rot: 0.8 #missing +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_initial_guess.yaml b/test/yaml/sensor_tests/sensor_PO_3D_initial_guess.yaml similarity index 53% rename from test/yaml/sensor_base/sensor_PO_3D_initial_guess.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_initial_guess.yaml index bb396634cc3bd5e72899710f502e2ecf1a3c176e..7b5e1398db21a1fb70147ddf976a1f0c801a4e24 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_initial_guess.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_initial_guess.yaml @@ -8,5 +8,15 @@ states: mode: initial_guess state: [1, 0, 0, 0] dynamic: false + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_initial_guess_dynamic.yaml b/test/yaml/sensor_tests/sensor_PO_3D_initial_guess_dynamic.yaml similarity index 54% rename from test/yaml/sensor_base/sensor_PO_3D_initial_guess_dynamic.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_initial_guess_dynamic.yaml index ae08f21dbb73fa9992d61940b5699c59d36ac0b8..e758e87035caac6b14b72ac9baf4e7fef054ed0c 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_initial_guess_dynamic.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_initial_guess_dynamic.yaml @@ -8,5 +8,15 @@ states: mode: initial_guess state: [1, 0, 0, 0] dynamic: true + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_initial_guess_dynamic_drift.yaml b/test/yaml/sensor_tests/sensor_PO_3D_initial_guess_dynamic_drift.yaml similarity index 61% rename from test/yaml/sensor_base/sensor_PO_3D_initial_guess_dynamic_drift.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_initial_guess_dynamic_drift.yaml index 2d9773d128d776ef8606cf93901eee2ae91a6ef8..1de0b8d93e365ceb6584a2bf2eaedef2e764171f 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_initial_guess_dynamic_drift.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_initial_guess_dynamic_drift.yaml @@ -10,5 +10,15 @@ states: state: [1, 0, 0, 0] dynamic: true drift_std: [0.1, 0.2, 0.3] + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_initial_guess_dynamic_drift_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_3D_initial_guess_dynamic_drift_wrong.yaml similarity index 62% rename from test/yaml/sensor_base/sensor_PO_3D_initial_guess_dynamic_drift_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_initial_guess_dynamic_drift_wrong.yaml index d9094f9d2b2ce72da62436efaca27e8b635bc21f..5322cd09f7b22c20c7acb43d7fe45c00495e8ee6 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_initial_guess_dynamic_drift_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_initial_guess_dynamic_drift_wrong.yaml @@ -10,5 +10,15 @@ states: state: [1, 0, 0, 0] dynamic: true drift_std: [0.1, 0.2, 0.3] + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_initial_guess_dynamic_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_3D_initial_guess_dynamic_wrong.yaml similarity index 56% rename from test/yaml/sensor_base/sensor_PO_3D_initial_guess_dynamic_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_initial_guess_dynamic_wrong.yaml index ced2cbcf5fd3a803b6d0393b002a43a6f9a2fbe6..873cf74259327908d2840c070d087a53fc8778cd 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_initial_guess_dynamic_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_initial_guess_dynamic_wrong.yaml @@ -8,5 +8,15 @@ states: mode: initial_guess state: [1, 0, 0, 0] dynamic: true + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01 diff --git a/test/yaml/sensor_base/sensor_PO_3D_initial_guess_wrong.yaml b/test/yaml/sensor_tests/sensor_PO_3D_initial_guess_wrong.yaml similarity index 56% rename from test/yaml/sensor_base/sensor_PO_3D_initial_guess_wrong.yaml rename to test/yaml/sensor_tests/sensor_PO_3D_initial_guess_wrong.yaml index 842d84d35b0c6a2eaf80136865aa9ce0823c18c1..5eed19d6210ca7729c35e813edf94c2b23dd26ba 100644 --- a/test/yaml/sensor_base/sensor_PO_3D_initial_guess_wrong.yaml +++ b/test/yaml/sensor_tests/sensor_PO_3D_initial_guess_wrong.yaml @@ -8,5 +8,15 @@ states: # mode: initial_guess # state: [1, 0, 0, 0] # dynamic: false + + +# used in gtest_sensor_base noise_p_std: 0.1 -noise_o_std: 0.01 \ No newline at end of file +noise_o_std: 0.01 + +# used in gtest_sensor_odom +k_disp_to_disp: 0.5 +k_disp_to_rot: 0.0 +k_rot_to_rot: 0.8 +min_disp_var: 0.01 +min_rot_var: 0.01