Skip to content
Snippets Groups Projects
Commit 0dd4e114 authored by Joan Vallvé Navarro's avatar Joan Vallvé Navarro
Browse files

added autoconf for IMU sensor and processor (all tests passed)

parent 2ecb4add
No related branches found
No related tags found
2 merge requests!39release after RAL,!38After 2nd RAL submission
......@@ -11,9 +11,6 @@ WOLF_STRUCT_PTR_TYPEDEFS(ProcessorParamsIMU);
struct ProcessorParamsIMU : public ProcessorParamsMotion
{
// ProcessorParamsIMU() = default;
// using ProcessorParamsMotion::ProcessorParamsMotion;
ProcessorParamsIMU() = default;
ProcessorParamsIMU(std::string _unique_name, const ParamsServer& _server):
ProcessorParamsMotion(_unique_name, _server)
......@@ -35,8 +32,7 @@ class ProcessorIMU : public ProcessorMotion{
virtual ~ProcessorIMU();
virtual void configure(SensorBasePtr _sensor) override { };
// Factory method for high level API
static ProcessorBasePtr create(const std::string& _unique_name, const ProcessorParamsBasePtr _params);
WOLF_PROCESSOR_CREATE(ProcessorIMU, ProcessorParamsIMU);
protected:
virtual void computeCurrentDelta(const Eigen::VectorXd& _data,
......
......@@ -13,19 +13,19 @@ WOLF_STRUCT_PTR_TYPEDEFS(IntrinsicsIMU);
struct IntrinsicsIMU : public IntrinsicsBase
{
//noise std dev
double w_noise = 0.001; //standard deviation of Gyroscope noise (same for all the axis) in rad/sec/ sqrt(s)
double a_noise = 0.04; //standard deviation of Acceleration noise (same for all the axis) in m/s2/sqrt(s)
//noise std dev
double w_noise = 0.001; //standard deviation of Gyroscope noise (same for all the axis) in rad/sec/ sqrt(s)
double a_noise = 0.04; //standard deviation of Acceleration noise (same for all the axis) in m/s2/sqrt(s)
//Initial biases std dev
double ab_initial_stdev = 0.01; //accelerometer micro_g/sec
double wb_initial_stdev = 0.01; //gyroscope rad/sec
//Initial biases std dev
double ab_initial_stdev = 0.01; //accelerometer micro_g/sec
double wb_initial_stdev = 0.01; //gyroscope rad/sec
// bias rate of change std dev
double ab_rate_stdev = 0.00001;
double wb_rate_stdev = 0.00001;
// bias rate of change std dev
double ab_rate_stdev = 0.00001;
double wb_rate_stdev = 0.00001;
virtual ~IntrinsicsIMU() = default;
virtual ~IntrinsicsIMU() = default;
IntrinsicsIMU()
{
//DEFINED FOR COMPATIBILITY PURPOSES. TO BE REMOVED IN THE FUTURE.
......@@ -33,12 +33,12 @@ struct IntrinsicsIMU : public IntrinsicsBase
IntrinsicsIMU(std::string _unique_name, const ParamsServer& _server):
IntrinsicsBase(_unique_name, _server)
{
w_noise = _server.getParam<double>(_unique_name + "/w_noise");
a_noise = _server.getParam<double>(_unique_name + "/a_noise");
ab_initial_stdev = _server.getParam<double>(_unique_name + "/ab_initial_stdev");
wb_initial_stdev = _server.getParam<double>(_unique_name + "/wb_initial_stdev");
ab_rate_stdev = _server.getParam<double>(_unique_name + "/ab_rate_stdev");
wb_rate_stdev = _server.getParam<double>(_unique_name + "/wb_rate_stdev");
w_noise = _server.getParam<double>(prefix + _unique_name + "/w_noise");
a_noise = _server.getParam<double>(prefix + _unique_name + "/a_noise");
ab_initial_stdev = _server.getParam<double>(prefix + _unique_name + "/ab_initial_stdev");
wb_initial_stdev = _server.getParam<double>(prefix + _unique_name + "/wb_initial_stdev");
ab_rate_stdev = _server.getParam<double>(prefix + _unique_name + "/ab_rate_stdev");
wb_rate_stdev = _server.getParam<double>(prefix + _unique_name + "/wb_rate_stdev");
}
std::string print() const
{
......@@ -71,6 +71,7 @@ class SensorIMU : public SensorBase
SensorIMU(const Eigen::VectorXd& _extrinsics, const IntrinsicsIMU& _params);
SensorIMU(const Eigen::VectorXd& _extrinsics, IntrinsicsIMUPtr _params);
WOLF_SENSOR_CREATE(SensorIMU, IntrinsicsIMU, 7);
double getGyroNoise() const;
double getAccelNoise() const;
......@@ -80,10 +81,6 @@ class SensorIMU : public SensorBase
double getAbRateStdev() const;
virtual ~SensorIMU();
public:
static SensorBasePtr create(const std::string& _unique_name, const Eigen::VectorXd& _extrinsics_pq, const IntrinsicsBasePtr _intrinsics = nullptr);
};
inline double SensorIMU::getGyroNoise() const
......
......@@ -21,17 +21,6 @@ ProcessorIMU::~ProcessorIMU()
//
}
ProcessorBasePtr ProcessorIMU::create(const std::string& _unique_name, const ProcessorParamsBasePtr _params)
{
auto prc_imu_params = std::static_pointer_cast<ProcessorParamsIMU>(_params);
auto prc_ptr = std::make_shared<ProcessorIMU>(prc_imu_params);
prc_ptr->setName(_unique_name);
return prc_ptr;
}
bool ProcessorIMU::voteForKeyFrame() const
{
// time span
......@@ -210,4 +199,5 @@ void ProcessorIMU::deltaPlusDelta(const Eigen::VectorXd& _delta_preint,
namespace wolf
{
WOLF_REGISTER_PROCESSOR("ProcessorIMU", ProcessorIMU)
WOLF_REGISTER_PROCESSOR_AUTO("ProcessorIMU", ProcessorIMU)
}
......@@ -27,23 +27,11 @@ SensorIMU::~SensorIMU()
//
}
// Define the factory method
SensorBasePtr SensorIMU::create(const std::string& _unique_name, const Eigen::VectorXd& _extrinsics_pq,
const IntrinsicsBasePtr _intrinsics)
{
// decode extrinsics vector
assert(_extrinsics_pq.size() == 7 && "Bad extrinsics vector length. Should be 7 for 3D.");
IntrinsicsIMUPtr params = std::static_pointer_cast<IntrinsicsIMU>(_intrinsics);
SensorIMUPtr sen = std::make_shared<SensorIMU>(_extrinsics_pq, params);
sen->setName(_unique_name);
return sen;
}
} // namespace wolf
// Register in the SensorFactory
#include "core/sensor/sensor_factory.h"
namespace wolf {
WOLF_REGISTER_SENSOR("SensorIMU", SensorIMU)
WOLF_REGISTER_SENSOR_AUTO("SensorIMU", SensorIMU);
} // namespace wolf
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment