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

wip

parent 1d1af3a2
No related branches found
No related tags found
1 merge request!419Resolve "Processor motion model"
Pipeline #6723 passed
...@@ -16,8 +16,12 @@ WOLF_PTR_TYPEDEFS(FactorVelocityDirection3d); ...@@ -16,8 +16,12 @@ WOLF_PTR_TYPEDEFS(FactorVelocityDirection3d);
//class //class
class FactorVelocityDirection3d: public FactorAutodiff<FactorVelocityDirection3d,1,3,4> class FactorVelocityDirection3d: public FactorAutodiff<FactorVelocityDirection3d,1,3,4>
{ {
protected:
double min_vel_norm_;
public: public:
FactorVelocityDirection3d(FeatureBasePtr _ftr_ptr, FactorVelocityDirection3d(FeatureBasePtr _ftr_ptr,
const double& _min_vel_norm,
const ProcessorBasePtr& _processor_ptr, const ProcessorBasePtr& _processor_ptr,
bool _apply_loss_function, bool _apply_loss_function,
FactorStatus _status = FAC_ACTIVE) : FactorStatus _status = FAC_ACTIVE) :
...@@ -29,7 +33,8 @@ class FactorVelocityDirection3d: public FactorAutodiff<FactorVelocityDirection3d ...@@ -29,7 +33,8 @@ class FactorVelocityDirection3d: public FactorAutodiff<FactorVelocityDirection3d
_apply_loss_function, _apply_loss_function,
_status, _status,
_ftr_ptr->getFrame()->getV(), _ftr_ptr->getFrame()->getV(),
_ftr_ptr->getFrame()->getO()) _ftr_ptr->getFrame()->getO()),
min_vel_norm_(_min_vel_norm)
{ {
// std::cout << "created FactorVelocityDirection3d " << std::endl; // std::cout << "created FactorVelocityDirection3d " << std::endl;
} }
...@@ -46,6 +51,12 @@ inline bool FactorVelocityDirection3d::operator ()(const T* const _v, const T* c ...@@ -46,6 +51,12 @@ inline bool FactorVelocityDirection3d::operator ()(const T* const _v, const T* c
Eigen::Map<const Eigen::Matrix<T,3,1> > v(_v); Eigen::Map<const Eigen::Matrix<T,3,1> > v(_v);
Eigen::Map<const Eigen::Quaternion<T> > q(_q); Eigen::Map<const Eigen::Quaternion<T> > q(_q);
if (v.norm() < min_vel_norm_)
{
_residuals[0] = T(0);
return true;
}
// std::cout << "v: " << v(0) << " " // std::cout << "v: " << v(0) << " "
// << v(1) << " " // << v(1) << " "
// << v(2) << "\n"; // << v(2) << "\n";
......
...@@ -19,6 +19,7 @@ struct ParamsProcessorFixWingModel : public ParamsProcessorBase ...@@ -19,6 +19,7 @@ struct ParamsProcessorFixWingModel : public ParamsProcessorBase
{ {
Eigen::Vector3d velocity_local; Eigen::Vector3d velocity_local;
double angle_stdev; double angle_stdev;
double min_vel_norm;
ParamsProcessorFixWingModel() = default; ParamsProcessorFixWingModel() = default;
ParamsProcessorFixWingModel(std::string _unique_name, const wolf::ParamsServer & _server) : ParamsProcessorFixWingModel(std::string _unique_name, const wolf::ParamsServer & _server) :
...@@ -26,12 +27,14 @@ struct ParamsProcessorFixWingModel : public ParamsProcessorBase ...@@ -26,12 +27,14 @@ struct ParamsProcessorFixWingModel : public ParamsProcessorBase
{ {
velocity_local = _server.getParam<Eigen::Vector3d> (prefix + _unique_name + "/velocity_local"); velocity_local = _server.getParam<Eigen::Vector3d> (prefix + _unique_name + "/velocity_local");
angle_stdev = _server.getParam<double> (prefix + _unique_name + "/angle_stdev"); angle_stdev = _server.getParam<double> (prefix + _unique_name + "/angle_stdev");
min_vel_norm = _server.getParam<double> (prefix + _unique_name + "/min_vel_norm");
} }
std::string print() const override std::string print() const override
{ {
return ParamsProcessorBase::print() + "\n" return ParamsProcessorBase::print() + "\n"
+ "velocity_local: print not implemented\n" + "velocity_local: print not implemented\n"
+ "angle_stdev: " + std::to_string(angle_stdev) + "\n"; + "angle_stdev: " + std::to_string(angle_stdev) + "\n"
+ "min_vel_norm: " + std::to_string(min_vel_norm) + "\n";
} }
}; };
...@@ -46,7 +49,7 @@ class ProcessorFixWingModel : public ProcessorBase ...@@ -46,7 +49,7 @@ class ProcessorFixWingModel : public ProcessorBase
WOLF_PROCESSOR_CREATE(ProcessorFixWingModel, ParamsProcessorFixWingModel); WOLF_PROCESSOR_CREATE(ProcessorFixWingModel, ParamsProcessorFixWingModel);
virtual ~ProcessorFixWingModel() override; virtual ~ProcessorFixWingModel() override;
void configure(SensorBasePtr _sensor) override {}; void configure(SensorBasePtr _sensor) override;
protected: protected:
......
...@@ -27,8 +27,8 @@ ProcessorConstantVelocity::~ProcessorConstantVelocity() ...@@ -27,8 +27,8 @@ ProcessorConstantVelocity::~ProcessorConstantVelocity()
void ProcessorConstantVelocity::configure(SensorBasePtr _sensor) void ProcessorConstantVelocity::configure(SensorBasePtr _sensor)
{ {
assert(params_processor_->cov_v_rate.rows() == getProblem()->getDim() && "cov_v_rate size is wrong"); assert(params_processor_->cov_v_rate.rows() == _sensor->getProblem()->getDim() && "cov_v_rate size is wrong");
assert(getProblem()->getFrameStructure().find('V') != std::string::npos && "Processor only works with problems with V"); assert(_sensor->getProblem()->getFrameStructure().find('V') != std::string::npos && "Processor only works with problems with V");
} }
void ProcessorConstantVelocity::processKeyFrame(FrameBasePtr _keyframe_ptr, const double& _time_tolerance) void ProcessorConstantVelocity::processKeyFrame(FrameBasePtr _keyframe_ptr, const double& _time_tolerance)
......
...@@ -24,8 +24,16 @@ ProcessorFixWingModel::~ProcessorFixWingModel() ...@@ -24,8 +24,16 @@ ProcessorFixWingModel::~ProcessorFixWingModel()
{ {
} }
void ProcessorFixWingModel::configure(SensorBasePtr _sensor)
{
assert(_sensor->getProblem()->getFrameStructure().find('V') != std::string::npos && "Processor only works with problems with V");
}
void ProcessorFixWingModel::processKeyFrame(FrameBasePtr _keyframe_ptr, const double& _time_tolerance) void ProcessorFixWingModel::processKeyFrame(FrameBasePtr _keyframe_ptr, const double& _time_tolerance)
{ {
if (_keyframe_ptr->getV()->isFixed())
return;
// emplace capture // emplace capture
auto cap = CaptureBase::emplace<CaptureBase>(_keyframe_ptr, "CaptureBase", auto cap = CaptureBase::emplace<CaptureBase>(_keyframe_ptr, "CaptureBase",
_keyframe_ptr->getTimeStamp(), getSensor()); _keyframe_ptr->getTimeStamp(), getSensor());
...@@ -38,6 +46,7 @@ void ProcessorFixWingModel::processKeyFrame(FrameBasePtr _keyframe_ptr, const do ...@@ -38,6 +46,7 @@ void ProcessorFixWingModel::processKeyFrame(FrameBasePtr _keyframe_ptr, const do
// emplace factor // emplace factor
auto fac = FactorBase::emplace<FactorVelocityDirection3d>(fea, auto fac = FactorBase::emplace<FactorVelocityDirection3d>(fea,
fea, fea,
params_processor_->min_vel_norm,
shared_from_this(), shared_from_this(),
false); false);
} }
......
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