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

[skip ci] wip

parent 6c9474cc
No related branches found
No related tags found
1 merge request!448Draft: Resolve "Implementation of new nodes creation"
This commit is part of merge request !448. Comments created here will be created in the context of that merge request.
...@@ -202,7 +202,7 @@ SET(HDRS_PROCESSOR ...@@ -202,7 +202,7 @@ SET(HDRS_PROCESSOR
# include/core/processor/processor_fixed_wing_model.h # include/core/processor/processor_fixed_wing_model.h
# include/core/processor/processor_loop_closure.h # include/core/processor/processor_loop_closure.h
include/core/processor/processor_motion.h include/core/processor/processor_motion.h
# include/core/processor/processor_odom_2d.h include/core/processor/processor_odom_2d.h
# include/core/processor/processor_odom_3d.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.h
...@@ -311,7 +311,7 @@ SET(SRCS_PROCESSOR ...@@ -311,7 +311,7 @@ SET(SRCS_PROCESSOR
# src/processor/processor_fixed_wing_model.cpp # src/processor/processor_fixed_wing_model.cpp
# src/processor/processor_loop_closure.cpp # src/processor/processor_loop_closure.cpp
src/processor/processor_motion.cpp src/processor/processor_motion.cpp
# src/processor/processor_odom_2d.cpp src/processor/processor_odom_2d.cpp
# src/processor/processor_odom_3d.cpp # src/processor/processor_odom_3d.cpp
# src/processor/processor_pose.cpp # src/processor/processor_pose.cpp
src/processor/processor_tracker.cpp src/processor/processor_tracker.cpp
......
...@@ -61,5 +61,4 @@ SensorRangeBearing::~SensorRangeBearing() ...@@ -61,5 +61,4 @@ SensorRangeBearing::~SensorRangeBearing()
namespace wolf namespace wolf
{ {
WOLF_REGISTER_SENSOR(SensorRangeBearing) WOLF_REGISTER_SENSOR(SensorRangeBearing)
WOLF_REGISTER_SENSOR_YAML(SensorRangeBearing)
} // namespace wolf } // namespace wolf
...@@ -36,15 +36,11 @@ config: ...@@ -36,15 +36,11 @@ config:
- type: "SensorOdom2d" - type: "SensorOdom2d"
plugin: "core" plugin: "core"
name: "sen odom" name: "sen odom"
extrinsic:
pose: [0,0, 0]
follow: "demos/hello_wolf/yaml/sensor_odom_2d.yaml" # config parameters in this file follow: "demos/hello_wolf/yaml/sensor_odom_2d.yaml" # config parameters in this file
- type: "SensorRangeBearing" - type: "SensorRangeBearing"
plugin: "core" plugin: "core"
name: "sen rb" name: "sen rb"
extrinsic:
pose: [1,1, 0]
noise_range_metres_std: 0.2 # parser only considers first appearence so the following file parsing will not overwrite this param noise_range_metres_std: 0.2 # parser only considers first appearence so the following file parsing will not overwrite this param
follow: demos/hello_wolf/yaml/sensor_range_bearing.yaml # config parameters in this file follow: demos/hello_wolf/yaml/sensor_range_bearing.yaml # config parameters in this file
......
...@@ -3,3 +3,13 @@ ...@@ -3,3 +3,13 @@
k_disp_to_disp: 0.1 # m^2 / m k_disp_to_disp: 0.1 # m^2 / m
k_rot_to_rot: 0.1 # rad^2 / rad k_rot_to_rot: 0.1 # rad^2 / rad
apply_loss_function: true apply_loss_function: true
states:
P:
mode: fix
state: [0,0]
dynamic: false
O:
mode: fix
state: [0]
dynamic: false
\ No newline at end of file
...@@ -3,3 +3,13 @@ ...@@ -3,3 +3,13 @@
noise_range_metres_std: 0.1 noise_range_metres_std: 0.1
noise_bearing_degrees_std: 0.5 noise_bearing_degrees_std: 0.5
apply_loss_function: true apply_loss_function: true
states:
P:
mode: fix
state: [1,1]
dynamic: false
O:
mode: fix
state: [0]
dynamic: false
\ No newline at end of file
...@@ -39,6 +39,7 @@ struct ParamsProcessorBase; ...@@ -39,6 +39,7 @@ struct ParamsProcessorBase;
#include "core/common/wolf.h" #include "core/common/wolf.h"
#include "core/utils/params_server.h" #include "core/utils/params_server.h"
#include "core/frame/frame_base.h" #include "core/frame/frame_base.h"
#include "core/state_block/prior.h"
#include "core/state_block/state_block.h" #include "core/state_block/state_block.h"
#include "core/state_block/state_composite.h" #include "core/state_block/state_composite.h"
#include "core/processor/motion_provider.h" #include "core/processor/motion_provider.h"
......
...@@ -33,11 +33,14 @@ namespace wolf ...@@ -33,11 +33,14 @@ namespace wolf
{ {
class SensorBase; class SensorBase;
struct ParamsSensorBase; struct ParamsSensorBase;
class ParamsServer;
class Prior;
} }
#include <unordered_map>
// wolf // wolf
#include "core/common/factory.h" #include "core/common/factory.h"
#include "core/utils/params_server.h"
namespace wolf namespace wolf
{ {
...@@ -224,14 +227,24 @@ typedef Factory<SensorBase, ...@@ -224,14 +227,24 @@ typedef Factory<SensorBase,
typedef Factory<SensorBase, typedef Factory<SensorBase,
const std::string&, const std::string&,
SizeEigen, SizeEigen,
ParamsSensorBasePtr, std::shared_ptr<ParamsSensorBase>,
const Priors&> FactorySensorPriors; const std::unordered_map<char,Prior>& > FactorySensorPriors;
template<> template<>
inline std::string FactorySensor::getClass() const inline std::string FactorySensor::getClass() const
{ {
return "FactorySensor"; return "FactorySensor";
} }
template<>
inline std::string FactorySensorYaml::getClass() const
{
return "FactorySensorYaml";
}
template<>
inline std::string FactorySensorPriors::getClass() const
{
return "FactorySensorPriors";
}
#define WOLF_REGISTER_SENSOR(SensorType) \ #define WOLF_REGISTER_SENSOR(SensorType) \
namespace{ const bool WOLF_UNUSED SensorType##Registered = \ namespace{ const bool WOLF_UNUSED SensorType##Registered = \
......
...@@ -101,18 +101,15 @@ struct ParamsSensorBase: public ParamsBase ...@@ -101,18 +101,15 @@ struct ParamsSensorBase: public ParamsBase
{ {
std::string prefix = "sensor/"; std::string prefix = "sensor/";
Eigen::VectorXd noise_std;
ParamsSensorBase() = default; ParamsSensorBase() = default;
ParamsSensorBase(std::string _unique_name, const wolf::ParamsServer& _server) ParamsSensorBase(std::string _unique_name, const wolf::ParamsServer& _server)
{ {
noise_std = _server.getParam<Eigen::VectorXd>(prefix + _unique_name + "/noise_std");
} }
~ParamsSensorBase() override = default; ~ParamsSensorBase() override = default;
std::string print() const override std::string print() const override
{ {
return "noise_std: " + toString(noise_std) + "\n"; return "";
} }
}; };
...@@ -276,15 +273,17 @@ class SensorBase : public NodeBase, public HasStateBlocks, public std::enable_sh ...@@ -276,15 +273,17 @@ class SensorBase : public NodeBase, public HasStateBlocks, public std::enable_sh
const Eigen::MatrixXd& _cov, const Eigen::MatrixXd& _cov,
unsigned int _start_idx = 0); unsigned int _start_idx = 0);
void setNoiseStd(const Eigen::VectorXd & _noise_std); // drift
void setNoiseCov(const Eigen::MatrixXd & _noise_cov);
void setDriftStd(char _key, const Eigen::VectorXd & _drift_rate_std); void setDriftStd(char _key, const Eigen::VectorXd & _drift_rate_std);
void setDriftCov(char _key, const Eigen::MatrixXd & _drift_rate_cov); void setDriftCov(char _key, const Eigen::MatrixXd & _drift_rate_cov);
Eigen::VectorXd getNoiseStd() const;
Eigen::MatrixXd getNoiseCov() const;
Eigen::VectorXd getDriftStd(char) const; Eigen::VectorXd getDriftStd(char) const;
Eigen::MatrixXd getDriftCov(char) const; Eigen::MatrixXd getDriftCov(char) const;
// noise
virtual void setNoiseStd(const Eigen::VectorXd & _noise_std) = 0;
virtual Eigen::VectorXd getNoiseStd() const = 0;
virtual Eigen::MatrixXd getNoiseCov() const = 0;
virtual void printHeader(int depth, // virtual void printHeader(int depth, //
bool constr_by, // bool constr_by, //
bool metric, // bool metric, //
......
...@@ -87,5 +87,4 @@ Eigen::Matrix2d SensorOdom2d::computeCovFromMotion (const VectorXd& _data) const ...@@ -87,5 +87,4 @@ Eigen::Matrix2d SensorOdom2d::computeCovFromMotion (const VectorXd& _data) const
#include "core/sensor/factory_sensor.h" #include "core/sensor/factory_sensor.h"
namespace wolf { namespace wolf {
WOLF_REGISTER_SENSOR(SensorOdom2d); WOLF_REGISTER_SENSOR(SensorOdom2d);
WOLF_REGISTER_SENSOR_YAML(SensorOdom2d);
} // namespace wolf } // namespace wolf
...@@ -35,20 +35,23 @@ struct ParamsSensorDummy : public ParamsSensorBase ...@@ -35,20 +35,23 @@ struct ParamsSensorDummy : public ParamsSensorBase
{ {
~ParamsSensorDummy() override = default; ~ParamsSensorDummy() override = default;
double param1; double noise_p_std;
double noise_o_std;
int param2; int param2;
ParamsSensorDummy(std::string _unique_name, const ParamsServer& _server): ParamsSensorDummy(std::string _unique_name, const ParamsServer& _server):
ParamsSensorBase(_unique_name, _server) ParamsSensorBase(_unique_name, _server)
{ {
param1 = _server.getParam<double>(prefix + _unique_name + "/param1"); noise_p_std = _server.getParam<double>(prefix + _unique_name + "/noise_p_std");
noise_o_std = _server.getParam<double>(prefix + _unique_name + "/noise_o_std");
param2 = _server.getParam<int>(prefix + _unique_name + "/param2"); param2 = _server.getParam<int>(prefix + _unique_name + "/param2");
} }
std::string print() const override std::string print() const override
{ {
return ParamsSensorBase::print() + "\n" return ParamsSensorBase::print() + "\n"
+ "param1: " + std::to_string(param1) + "\n" + "noise_p_std: " + toString(noise_p_std) + "\n"
+ "param2: " + std::to_string(param2) + "\n"; + "noise_o_std: " + toString(noise_o_std) + "\n"
+ "param2: " + toString(param2) + "\n";
} }
}; };
...@@ -56,6 +59,10 @@ WOLF_PTR_TYPEDEFS(SensorDummy); ...@@ -56,6 +59,10 @@ WOLF_PTR_TYPEDEFS(SensorDummy);
class SensorDummy : public SensorBase class SensorDummy : public SensorBase
{ {
private:
ParamsSensorDummyPtr params_dummy_;
SizeEigen dim_;
public: public:
SensorDummy(const std::string& _unique_name, SensorDummy(const std::string& _unique_name,
SizeEigen _dim, SizeEigen _dim,
...@@ -66,7 +73,8 @@ class SensorDummy : public SensorBase ...@@ -66,7 +73,8 @@ class SensorDummy : public SensorBase
_dim, _dim,
_params, _params,
_server, _server,
std::unordered_map<char, std::string>{{'I',"StateBlock"},{'A',"StateQuaternion"}}) std::unordered_map<char, std::string>{{'I',"StateBlock"},{'A',"StateQuaternion"}}),
params_dummy_(_params)
{ {
} }
WOLF_SENSOR_CREATE(SensorDummy, ParamsSensorDummy); WOLF_SENSOR_CREATE(SensorDummy, ParamsSensorDummy);
...@@ -80,11 +88,41 @@ class SensorDummy : public SensorBase ...@@ -80,11 +88,41 @@ class SensorDummy : public SensorBase
_unique_name, _unique_name,
_dim, _dim,
_params, _params,
_priors) _priors),
params_dummy_(_params)
{ {
} }
virtual ~SensorDummy(){}; virtual ~SensorDummy(){};
void setNoiseStd(const Eigen::VectorXd & _noise_std) override
{
assert(_noise_std.size() == (dim_ == 2 ? 3 : 6));
params_dummy_->noise_p_std = _noise_std(1);
params_dummy_->noise_o_std = _noise_std((dim_ == 2 ? 2 : 3));
}
Eigen::VectorXd getNoiseStd() const override
{
if (dim_ == 2)
return (Eigen::VectorXd() << params_dummy_->noise_p_std,
params_dummy_->noise_p_std,
params_dummy_->noise_o_std).finished();
else
return (Eigen::VectorXd() << params_dummy_->noise_p_std,
params_dummy_->noise_p_std,
params_dummy_->noise_p_std,
params_dummy_->noise_o_std,
params_dummy_->noise_o_std,
params_dummy_->noise_o_std).finished();
}
Eigen::MatrixXd getNoiseCov() const override
{
return getNoiseStd().cwiseAbs2().asDiagonal();
}
}; };
} }
...@@ -93,6 +131,5 @@ class SensorDummy : public SensorBase ...@@ -93,6 +131,5 @@ class SensorDummy : public SensorBase
#include "core/sensor/factory_sensor.h" #include "core/sensor/factory_sensor.h"
namespace wolf { namespace wolf {
WOLF_REGISTER_SENSOR(SensorDummy); WOLF_REGISTER_SENSOR(SensorDummy);
WOLF_REGISTER_SENSOR_YAML(SensorDummy);
} // namespace wolf } // namespace wolf
#endif #endif
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