28 out.WriteAs<uint32_t>(estimationMethod);
30 out << hasVelocities << velocities;
49 in >> hasVelocities >> velocities;
66 estimationMethod = emOdometry;
67 rawOdometryIncrementReading = odometryIncrement;
68 motionModelConfiguration = options;
71 computeFromOdometry_model6DOF(odometryIncrement, options);
86 std::make_shared<CPose3DPDFParticles>();
148 double Ayaw1 = (odometryIncrement.
y() != 0 || odometryIncrement.
x() != 0)
149 ? atan2(odometryIncrement.
y(), odometryIncrement.
x())
152 double Atrans = odometryIncrement.
norm();
155 (odometryIncrement.
y() != 0 || odometryIncrement.
x() != 0 ||
156 odometryIncrement.z() != 0)
157 ? atan2(odometryIncrement.z(), odometryIncrement.
norm())
160 double Aroll = odometryIncrement.
roll();
161 double Apitch2 = odometryIncrement.
pitch();
162 double Ayaw2 = odometryIncrement.
yaw();
164 const auto stdxyz = motionModelConfiguration.mm6DOFModel.additional_std_XYZ;
170 auto& ith_part = aux->m_particles[i].d;
173 rnd.drawGaussian1D_normalized();
174 double Apitch1_draw =
176 rnd.drawGaussian1D_normalized();
180 rnd.drawGaussian1D_normalized();
183 rnd.drawGaussian1D_normalized();
184 double Apitch2_draw = Apitch2 + (o.
mm6DOFModel.
a8 * Apitch2) *
185 rnd.drawGaussian1D_normalized();
188 rnd.drawGaussian1D_normalized();
191 ith_part.x = Atrans_draw * cos(Apitch1_draw) * cos(Ayaw1_draw) +
192 stdxyz * rnd.drawGaussian1D_normalized();
193 ith_part.y = Atrans_draw * cos(Apitch1_draw) * sin(Ayaw1_draw) +
194 stdxyz * rnd.drawGaussian1D_normalized();
195 ith_part.z = -Atrans_draw * sin(Apitch1_draw) +
196 stdxyz * rnd.drawGaussian1D_normalized();
199 Ayaw1_draw + Ayaw2_draw +
200 motionModelConfiguration.mm6DOFModel.additional_std_angle *
201 rnd.drawGaussian1D_normalized();
203 Apitch1_draw + Apitch2_draw +
204 motionModelConfiguration.mm6DOFModel.additional_std_angle *
205 rnd.drawGaussian1D_normalized();
208 motionModelConfiguration.mm6DOFModel.additional_std_angle *
209 rnd.drawGaussian1D_normalized();
212 poseChange.copyFrom(*poseChangeTemp);
219 o <<
"Robot Movement (as a gaussian pose change):\n";
220 o << poseChange <<
"\n";
A namespace of pseudo-random numbers generators of diferent distributions.
#define IMPLEMENTS_SERIALIZABLE(class_name, base, NameSpace)
To be added to all CSerializable-classes implementation files.
void computeFromOdometry_model6DOF(const mrpt::poses::CPose3D &odometryIncrement, const TMotionModelOptions &o)
Computes the PDF of the pose increment from an odometry reading, using the motion model for 6 DOF...
double pitch() const
Get the PITCH angle (in radians)
double yaw() const
Get the YAW angle (in radians)
virtual void getDescriptionAsText(std::ostream &o) const override
Build a detailed, multi-line textual description of the action contents and dump it to the output str...
void computeFromOdometry(const mrpt::poses::CPose3D &odometryIncrement, const TMotionModelOptions &options)
Computes the PDF of the pose increment from an odometry reading and according to the given motion mod...
#define MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(__V)
For use in CSerializable implementations.
The parameter to be passed to "computeFromOdometry".
Represents a probabilistic 3D (6D) movement.
uint32_t nParticlesCount
Options for the 6DOFModel model which generates a CPosePDFParticles object an then create from that C...
void serializeTo(mrpt::serialization::CArchive &out) const override
Pure virtual method for writing (serializing) to an abstract archive.
TEstimationMethod
A list of posible ways for estimating the content of a CActionRobotMovement3D object.
This namespace contains representation of robot actions and observations.
double x() const
Common members of all points & poses classes.
double norm() const
Returns the euclidean norm of vector: .
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
double roll() const
Get the ROLL angle (in radians)
Declares a class for storing a robot action.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
TDrawSampleMotionModel modelSelection
The model to be used.
Virtual base class for "archives": classes abstracting I/O streams.
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
mrpt::vision::TStereoCalibResults out
void serializeFrom(mrpt::serialization::CArchive &in, uint8_t serial_version) override
Pure virtual method for reading (deserializing) from an abstract archive.
Lightweight 3D pose (three spatial coordinates, plus three angular coordinates).
virtual void getDescriptionAsText(std::ostream &o) const
Build a detailed, multi-line textual description of the action contents and dump it to the output str...
void resetDeterministic(const mrpt::math::TPose3D &location, size_t particlesCount=0)
Reset the PDF to a single point: All m_particles will be set exactly to the supplied pose...
TOptions_6DOFModel mm6DOFModel
CRandomGenerator & getRandomGenerator()
A static instance of a CRandomGenerator class, for use in single-thread applications.
#define INVALID_TIMESTAMP
Represents an invalid timestamp, where applicable.
Declares a class that represents a Probability Density function (PDF) of a 3D pose.