10 #ifndef CFIXEDINTERVALSNRD_IMPL_H
11 #define CFIXEDINTERVALSNRD_IMPL_H
18 template <
class GRAPH_T>
21 this->initializeLoggers(
"CFixedIntervalsNRD");
24 template <
class GRAPH_T>
32 template <
class GRAPH_T>
48 m_observation_only_rawlog =
true;
53 std::dynamic_pointer_cast<CObservationOdometry>(observation);
55 m_curr_odometry_only_pose =
pose_t(obs_odometry->odometry);
57 "Current odometry-only pose: %s",
58 m_curr_odometry_only_pose.asString().c_str());
62 this->m_since_prev_node_PDF.mean =
63 m_curr_odometry_only_pose - m_last_odometry_only_pose;
68 m_observation_only_rawlog =
false;
71 bool found = action->getFirstMovementEstimation(move_pdf);
78 this->m_since_prev_node_PDF += incr_constraint;
82 bool registered = this->checkRegistrationCondition();
86 if (m_observation_only_rawlog)
90 m_last_odometry_only_pose = m_curr_odometry_only_pose;
99 template <
class GRAPH_T>
106 pose_t last_pose_inserted =
108 ? this->m_graph->nodes.at(this->m_prev_registered_nodeID)
112 bool registered =
false;
114 if (this->checkRegistrationCondition(
115 last_pose_inserted, this->getCurrentRobotPosEstimation()))
117 registered = this->registerNewNodeAtEnd();
124 template <
class GRAPH_T>
140 template <
class GRAPH_T>
149 params.registration_max_angle) ||
151 params.registration_max_angle) ||
160 template <
class GRAPH_T>
164 parent_t::loadParams(source_fname);
166 params.loadFromConfigFileName(
167 source_fname,
"NodeRegistrationDeciderParameters");
171 int min_verbosity_level =
source.read_int(
172 "NodeRegistrationDeciderParameters",
"class_verbosity", 1,
false);
179 template <
class GRAPH_T>
183 parent_t::printParams();
189 template <
class GRAPH_T>
200 stringstream class_props_ss;
201 class_props_ss <<
"Strategy: "
202 <<
"Fixed Odometry-based Intervals" << std::endl;
203 class_props_ss << header_sep << std::endl;
206 const std::string time_res = this->m_time_logger.getStatsAsText();
207 const std::string output_res = this->getLogAsString();
211 parent_t::getDescriptiveReport(report_str);
213 *report_str += class_props_ss.str();
214 *report_str += report_sep;
217 *report_str +=
params.getAsString();
218 *report_str += report_sep;
221 *report_str += time_res;
222 *report_str += report_sep;
224 *report_str += output_res;
225 *report_str += report_sep;
232 template <
class GRAPH_T>
236 template <
class GRAPH_T>
240 template <
class GRAPH_T>
242 std::ostream& out)
const
248 template <
class GRAPH_T>
255 registration_max_distance =
source.read_double(
256 section,
"registration_max_distance", 0.5 ,
false);
257 registration_max_angle =
source.read_double(
258 section,
"registration_max_angle", 60 ,
false);
259 registration_max_angle =
DEG2RAD(registration_max_angle);
264 template <
class GRAPH_T>
271 double max_angle_deg =
RAD2DEG(registration_max_angle);
275 "------------------[ Fixed Intervals Node Registration "
276 "]------------------\n";
278 "Max distance for registration = %.2f m\n", registration_max_distance);
280 "Max angle for registration = %.2f deg\n", max_angle_deg);
284 template <
class GRAPH_T>
290 this->getAsString(&str);
#define IS_CLASS(ptrObj, class_name)
Evaluates to true if the given pointer to an object (derived from mrpt::rtti::CObject) is of the give...
This class allows loading and storing values and vectors of different types from a configuration text...
This class allows loading and storing values and vectors of different types from "....
void getDescriptiveReport(std::string *report_str) const
Fill the provided string with a detailed report of the decider/optimizer state.
typename GRAPH_T::constraint_t constraint_t
type of graph constraints
void loadParams(const std::string &source_fname)
Load the necessary for the decider/optimizer configuration parameters.
bool updateState(mrpt::obs::CActionCollection::Ptr action, mrpt::obs::CSensoryFrame::Ptr observations, mrpt::obs::CObservation::Ptr observation)
Method makes use of the CActionCollection/CObservation to update the odometry estimation from the las...
~CFixedIntervalsNRD()
Class destructor.
CFixedIntervalsNRD()
Class constructor.
void printParams() const
Print the problem parameters - relevant to the decider/optimizer to the screen in a unified/compact w...
bool checkRegistrationCondition()
If estimated position surpasses the registration max values since the previous registered node,...
typename GRAPH_T::constraint_t::type_value pose_t
type of underlying poses (2D/3D).
std::shared_ptr< CActionCollection > Ptr
std::shared_ptr< CObservation > Ptr
An observation of the current (cumulative) odometry for a wheeled robot.
std::shared_ptr< CObservationOdometry > Ptr
std::shared_ptr< CSensoryFrame > Ptr
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle.
const double & phi() const
Get the phi angle of the 2D pose (in radians)
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
double pitch() const
Get the PITCH angle (in radians)
double roll() const
Get the ROLL angle (in radians)
double yaw() const
Get the YAW angle (in radians)
Declares a class that represents a Probability Density function (PDF) of a 3D pose .
void copyFrom(const CPose3DPDF &o) override
Copy operator, translating if necesary (for example, between particles and gaussian representations)
double distanceTo(const CPoseOrPoint< OTHERCLASS > &b) const
Returns the Euclidean distance to another pose/point:
#define MRPT_UNUSED_PARAM(a)
Determines whether this is an X86 or AMD64 platform.
GLenum const GLfloat * params
GLsizei const GLchar ** string
GLsizei GLsizei GLchar * source
T wrapToPi(T a)
Modifies the given angle to translate it into the ]-pi,pi] range.
std::string format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf.
This base provides a set of functions for maths stuff.
This namespace contains representation of robot actions and observations.
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
VerbosityLevel
Enumeration of available verbosity levels.
double RAD2DEG(const double x)
Radians to degrees.
double DEG2RAD(const double x)
Degrees to radians.
void loadFromConfigFile(const mrpt::config::CConfigFileBase &source, const std::string §ion)
This method load the options from a ".ini"-like file or memory-stored string list.
std::string getAsString() const
void dumpToTextStream(std::ostream &out) const
This method should clearly display all the contents of the structure in textual form,...
#define MRPT_LOG_DEBUG_FMT(_FMT_STRING,...)
Use: MRPT_LOG_DEBUG_FMT("i=%u", i);
#define MRPT_LOG_DEBUG(_STRING)
Use: MRPT_LOG_DEBUG("message");