diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/annotated.html b/annotated.html new file mode 100644 index 00000000..e5f3ace9 --- /dev/null +++ b/annotated.html @@ -0,0 +1,208 @@ + + + + + + + +mrs_lib: Class List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 NDynamicPublisher
 Cimpl
 Nmrs_libAll mrs_lib functions, classes, variables and definitions are contained in this namespace
 Ngeometry
 Nquadratic_throttle_model
 CAtomicScopeFlagConvenience class for automatically setting and unsetting an atomic boolean based on the object's scope. Useful e.g. for indicating whether a thread is running or not
 CAttitudeConverterThe main convertor class. Instantiate with any type in constructor and get the value in any other type by assigning the instance to your variable, as: tf::Quaternion tf1_quaternion = AttitudeConverter(roll, pitch, yaw); All the default Euler angles are in the extrinsic RPY notation
 CBatchVisualizerLibrary for drawing large amounts of geometric objects in RVIZ at the same time
 CDKFImplementation of the Degenerate measurement Linear Kalman filter
 CDynamicPublisherA helper class for easy publishing of ROS messages for debugging purposes
 CDynamicReconfigureMgr
 Ceigenvector_exceptionThis exception may be thrown when solving the generalized eigenvalue problem with the M and N matrices
 CEulerAttitudeA small class for storing the Euler angles
 CIirFilter
 CImagePubliserData
 CImagePublisher
 CIntersection
 CJLKF
 CKalmanFilterThis abstract class defines common interfaces and types for a generic Kalman filter
 CKalmanFilterAloamGarmThis abstract class defines common interfaces and types for a generic Kalman filter
 CLKFImplementation of the Linear Kalman filter [3]
 CLKF_MRS_odom
 CMedianFilterImplementation of a median filter with a fixed-length buffer
 CMRSTimerCommon wrapper representing the functionality of the ros::Timer
 CNCLKFThis class implements the norm-constrained linear Kalman filter [5]
 CNCLKF_partialThis class implements the partially norm-constrained linear Kalman filter [5]
 CNCUKF
 CNotchFilter
 CParamLoaderConvenience class for loading parameters from rosparam server
 CParamProvider
 CPointObstacle
 CPolygon
 CProfiler
 CPublisherHandlerUser wrapper of the publisher handler implementation
 CPublisherHandler_implImplementation of the publisher handler
 CRepredictorImplementation of the Repredictor for fusing measurements with variable delays
 CRepredictorAloamgarmImplementation of the RepredictorAloamgarm for fusing measurements with variable delays
 CRHEIVImplementation of the Reduced Heteroscedastic Errors In Variables surface fitting algorithm [2]
 CRosParamProvider
 CROSTimerRos::Timer wrapper. The interface is the same as with ros::Timer, except for the initialization method
 CRoutine
 CSafetyZone
 CScopeTimerSimple timer which will time a duration of a scope and checkpoints inside the scope in ros time and std::chrono time
 CScopeTimerLoggerSimple file logger of scope timer and its checkpoints
 CServiceClientHandlerUser wrapper of the service client handler implementation
 CServiceClientHandler_implImplementation of the service client handler
 CSubscribeHandlerThe main class for ROS topic subscription, message timeout handling etc
 CSubscribeHandlerOptionsA helper class to simplify setup of SubscribeHandler construction. This class is passed to the SubscribeHandler constructor and specifies its common options
 CThreadTimerCustom thread-based Timers with the same interface as mrs_lib::ROSTimer
 CTimeoutManagerTODO
 CTransformBroadcasterWrapper for the tf2_ros::TransformBroadcaster. With each sendTransform() command, the message is checked against the last message with the same frame IDs. If the transform was already published in this ros::Time step, then the transform is skipped. Prevents endless stream of warnings from spamming the console output
 CTransformerA convenience wrapper class for ROS's native TF2 API to simplify transforming of various messages
 CUKFImplementation of the Unscented Kalman filter [4]
 CvarstepLKF
 CVector3ConverterConverter of Vector3 representations. Instantiate it with any type of vector3 in constructor and convert it by assigning it to any other type of vector3 variable
 CVisualObject
 Nstd
 Ctuple_element< 0, mrs_lib::AttitudeConverter >
 Ctuple_element< 1, mrs_lib::AttitudeConverter >
 Ctuple_element< 2, mrs_lib::AttitudeConverter >
 Ctuple_size< mrs_lib::AttitudeConverter >
 NThreadTimer
 CImpl
 Cdegrees
 CMyPoint
 Cobj_t
 CSubObject
 CVectorConverterTest
+
+
+
+ + + + diff --git a/annotated_dup.js b/annotated_dup.js new file mode 100644 index 00000000..f167bd9a --- /dev/null +++ b/annotated_dup.js @@ -0,0 +1,21 @@ +var annotated_dup = +[ + [ "DynamicPublisher", null, [ + [ "impl", "classDynamicPublisher_1_1impl.html", "classDynamicPublisher_1_1impl" ] + ] ], + [ "mrs_lib", "namespacemrs__lib.html", "namespacemrs__lib" ], + [ "std", null, [ + [ "tuple_element< 0, mrs_lib::AttitudeConverter >", "structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4.html", "structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4" ], + [ "tuple_element< 1, mrs_lib::AttitudeConverter >", "structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4.html", "structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4" ], + [ "tuple_element< 2, mrs_lib::AttitudeConverter >", "structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4.html", "structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4" ], + [ "tuple_size< mrs_lib::AttitudeConverter >", "structstd_1_1tuple__size_3_01mrs__lib_1_1AttitudeConverter_01_4.html", null ] + ] ], + [ "ThreadTimer", null, [ + [ "Impl", "classThreadTimer_1_1Impl.html", "classThreadTimer_1_1Impl" ] + ] ], + [ "degrees", "structdegrees.html", null ], + [ "MyPoint", "structMyPoint.html", "structMyPoint" ], + [ "obj_t", "structobj__t.html", "structobj__t" ], + [ "SubObject", "classSubObject.html", "classSubObject" ], + [ "VectorConverterTest", "classVectorConverterTest.html", null ] +]; \ No newline at end of file diff --git a/attitude__converter_8h.html b/attitude__converter_8h.html new file mode 100644 index 00000000..5b9ff022 --- /dev/null +++ b/attitude__converter_8h.html @@ -0,0 +1,208 @@ + + + + + + + +mrs_lib: include/mrs_lib/attitude_converter.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
attitude_converter.h File Reference
+
+
+ +

Conversions between various representations of object attitude in 3D. Supports Quaternions, Euler angles, Angle-axis and Rotational matrices from tf, tf2, Eigen and geometry_msgs libraries. The default Euler angle notation is the extrinsic RPY. +More...

+
#include <vector>
+#include <cmath>
+#include <Eigen/Dense>
+#include <tuple>
+#include <tf2_ros/transform_listener.h>
+#include <tf2_ros/buffer.h>
+#include <tf2_eigen/tf2_eigen.h>
+#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
+#include <tf/transform_datatypes.h>
+#include <tf_conversions/tf_eigen.h>
+#include <mrs_lib/geometry/misc.h>
+
+ + Include dependency graph for attitude_converter.h:
+
+
+ +
+ + This graph shows which files directly or indirectly include this file:
+
+
+ +
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  mrs_lib::EulerAttitude
 A small class for storing the Euler angles. More...
 
class  mrs_lib::Vector3Converter
 Converter of Vector3 representations. Instantiate it with any type of vector3 in constructor and convert it by assigning it to any other type of vector3 variable. More...
 
class  mrs_lib::AttitudeConverter
 The main convertor class. Instantiate with any type in constructor and get the value in any other type by assigning the instance to your variable, as: tf::Quaternion tf1_quaternion = AttitudeConverter(roll, pitch, yaw); All the default Euler angles are in the extrinsic RPY notation. More...
 
struct  mrs_lib::AttitudeConverter::GetHeadingException
 is thrown when calculating of heading is not possible due to atan2 exception More...
 
struct  mrs_lib::AttitudeConverter::MathErrorException
 is thrown when math breaks More...
 
struct  mrs_lib::AttitudeConverter::InvalidAttitudeException
 is thrown when the internal attitude becomes invalid More...
 
struct  mrs_lib::AttitudeConverter::EulerFormatException
 is thrown when the Euler angle format is set wrongly More...
 
struct  mrs_lib::AttitudeConverter::SetHeadingException
 is thrown when the heading cannot be set to an existing attitude More...
 
struct  std::tuple_size< mrs_lib::AttitudeConverter >
 
struct  std::tuple_element< 0, mrs_lib::AttitudeConverter >
 
struct  std::tuple_element< 1, mrs_lib::AttitudeConverter >
 
struct  std::tuple_element< 2, mrs_lib::AttitudeConverter >
 
+ + + + +

+Namespaces

 mrs_lib
 All mrs_lib functions, classes, variables and definitions are contained in this namespace.
 
+ + + +

+Enumerations

enum  RPY_convention_t { RPY_INTRINSIC = 1, +RPY_EXTRINSIC = 2 + }
 
+

Detailed Description

+

Conversions between various representations of object attitude in 3D. Supports Quaternions, Euler angles, Angle-axis and Rotational matrices from tf, tf2, Eigen and geometry_msgs libraries. The default Euler angle notation is the extrinsic RPY.

+
Author
Tomas Baca
+
+
+ + + + diff --git a/attitude__converter_8h.js b/attitude__converter_8h.js new file mode 100644 index 00000000..64dd9e0e --- /dev/null +++ b/attitude__converter_8h.js @@ -0,0 +1,19 @@ +var attitude__converter_8h = +[ + [ "EulerAttitude", "classmrs__lib_1_1EulerAttitude.html", "classmrs__lib_1_1EulerAttitude" ], + [ "Vector3Converter", "classmrs__lib_1_1Vector3Converter.html", "classmrs__lib_1_1Vector3Converter" ], + [ "AttitudeConverter", "classmrs__lib_1_1AttitudeConverter.html", "classmrs__lib_1_1AttitudeConverter" ], + [ "GetHeadingException", "structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException.html", "structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException" ], + [ "MathErrorException", "structmrs__lib_1_1AttitudeConverter_1_1MathErrorException.html", "structmrs__lib_1_1AttitudeConverter_1_1MathErrorException" ], + [ "InvalidAttitudeException", "structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException.html", "structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException" ], + [ "EulerFormatException", "structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException.html", "structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException" ], + [ "SetHeadingException", "structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException.html", "structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException" ], + [ "tuple_size< mrs_lib::AttitudeConverter >", "structstd_1_1tuple__size_3_01mrs__lib_1_1AttitudeConverter_01_4.html", null ], + [ "tuple_element< 0, mrs_lib::AttitudeConverter >", "structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4.html", "structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4" ], + [ "tuple_element< 1, mrs_lib::AttitudeConverter >", "structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4.html", "structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4" ], + [ "tuple_element< 2, mrs_lib::AttitudeConverter >", "structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4.html", "structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4" ], + [ "RPY_convention_t", "attitude__converter_8h.html#aeebfeed9c234fa645d39c864fa3ecaab", [ + [ "RPY_INTRINSIC", "attitude__converter_8h.html#aeebfeed9c234fa645d39c864fa3ecaabafe6a6511417aaee7441f6a708cd217b1", null ], + [ "RPY_EXTRINSIC", "attitude__converter_8h.html#aeebfeed9c234fa645d39c864fa3ecaaba79f06980715846067ad2fee2cc6b8cbb", null ] + ] ] +]; \ No newline at end of file diff --git a/attitude__converter_8h__dep__incl.map b/attitude__converter_8h__dep__incl.map new file mode 100644 index 00000000..49c47712 --- /dev/null +++ b/attitude__converter_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/attitude__converter_8h__dep__incl.md5 b/attitude__converter_8h__dep__incl.md5 new file mode 100644 index 00000000..2deb0006 --- /dev/null +++ b/attitude__converter_8h__dep__incl.md5 @@ -0,0 +1 @@ +4a465cd595e63cbd8f2500074903ff12 \ No newline at end of file diff --git a/attitude__converter_8h__dep__incl.png b/attitude__converter_8h__dep__incl.png new file mode 100644 index 00000000..5dec1282 Binary files /dev/null and b/attitude__converter_8h__dep__incl.png differ diff --git a/attitude__converter_8h__incl.map b/attitude__converter_8h__incl.map new file mode 100644 index 00000000..a23174be --- /dev/null +++ b/attitude__converter_8h__incl.map @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/attitude__converter_8h__incl.md5 b/attitude__converter_8h__incl.md5 new file mode 100644 index 00000000..41575f42 --- /dev/null +++ b/attitude__converter_8h__incl.md5 @@ -0,0 +1 @@ +c308a608ece69e9a97e1dec3570b7651 \ No newline at end of file diff --git a/attitude__converter_8h__incl.png b/attitude__converter_8h__incl.png new file mode 100644 index 00000000..7f09bc51 Binary files /dev/null and b/attitude__converter_8h__incl.png differ diff --git a/attitude__converter_8h_source.html b/attitude__converter_8h_source.html new file mode 100644 index 00000000..12f39745 --- /dev/null +++ b/attitude__converter_8h_source.html @@ -0,0 +1,397 @@ + + + + + + + +mrs_lib: include/mrs_lib/attitude_converter.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
attitude_converter.h
+
+
+Go to the documentation of this file.
1 // clang: TomasFormat
+
12 #ifndef ATTITUDE_CONVERTER_H
+
13 #define ATTITUDE_CONVERTER_H
+
14 
+
15 #include <vector>
+
16 #include <cmath>
+
17 #include <Eigen/Dense>
+
18 #include <tuple>
+
19 
+
20 #include <tf2_ros/transform_listener.h>
+
21 #include <tf2_ros/buffer.h>
+
22 #include <tf2_eigen/tf2_eigen.h>
+
23 #include <tf2_geometry_msgs/tf2_geometry_msgs.h>
+
24 #include <tf/transform_datatypes.h>
+
25 #include <tf_conversions/tf_eigen.h>
+
26 
+
27 #include <mrs_lib/geometry/misc.h>
+
28 
+
29 namespace mrs_lib
+
30 {
+
31 
+
32 // type of the object we are grasping
+
33 typedef enum
+
34 {
+
35 
+
36  RPY_INTRINSIC = 1,
+
37  RPY_EXTRINSIC = 2,
+
38 
+
39 } RPY_convention_t;
+
40 
+
41 /* class EulerAttitude //{ */
+
42 
+ +
47 public:
+
55  EulerAttitude(const double& roll, const double& pitch, const double& yaw);
+
56 
+
62  double roll(void) const;
+
63 
+
69  double pitch(void) const;
+
70 
+
76  double yaw(void) const;
+
77 
+
78 private:
+
79  double roll_, pitch_, yaw_;
+
80 };
+
81 
+
82 //}
+
83 
+
84 /* class Vector3Converter //{ */
+
85 
+ +
91 public:
+
97  Vector3Converter(const tf2::Vector3& vector3) : vector3_(vector3){};
+
98 
+
104  Vector3Converter(const Eigen::Vector3d& vector3);
+
105 
+
111  Vector3Converter(const geometry_msgs::Vector3& vector3);
+
112 
+
120  Vector3Converter(const double& x, const double& y, const double& z);
+
121 
+
127  operator tf2::Vector3() const;
+
128 
+
134  operator Eigen::Vector3d() const;
+
135 
+
141  operator geometry_msgs::Vector3() const;
+
142 
+
143 private:
+
144  tf2::Vector3 vector3_;
+
145 };
+
146 
+
147 //}
+
148 
+ +
154 public:
+
155  /* exceptions //{ */
+
156 
+
158  struct GetHeadingException : public std::exception
+
159  {
+
160  const char* what() const throw() {
+
161  return "AttitudeConverter: can not calculate the heading, the rotated x-axis is parallel to the world's z-axis";
+
162  }
+
163  };
+
164 
+
166  struct MathErrorException : public std::exception
+
167  {
+
168  const char* what() const throw() {
+
169  return "AttitudeConverter: math error";
+
170  }
+
171  };
+
172 
+
174  struct InvalidAttitudeException : public std::exception
+
175  {
+
176  const char* what() const throw() {
+
177  return "AttitudeConverter: invalid attitude, the input probably constains NaNs";
+
178  }
+
179  };
+
180 
+
182  struct EulerFormatException : public std::exception
+
183  {
+
184  const char* what() const throw() {
+
185  return "AttitudeConverter: invalid Euler angle format";
+
186  }
+
187  };
+
188 
+
190  struct SetHeadingException : public std::exception
+
191  {
+
192  const char* what() const throw() {
+
193  return "AttitudeConverter: cannot set the desired heading, the thrust vector's Z component is 0";
+
194  }
+
195  };
+
196 
+
197  //}
+
198 
+
199  /* constructors //{ */
+
200 
+
209  AttitudeConverter(const double& roll, const double& pitch, const double& yaw, const RPY_convention_t& format = RPY_EXTRINSIC);
+
210 
+
216  AttitudeConverter(const tf::Quaternion quaternion);
+
217 
+
223  AttitudeConverter(const geometry_msgs::Quaternion quaternion);
+
224 
+
230  AttitudeConverter(const mrs_lib::EulerAttitude& euler_attitude);
+
231 
+
237  AttitudeConverter(const Eigen::Quaterniond quaternion);
+
238 
+
244  AttitudeConverter(const Eigen::Matrix3d matrix);
+
245 
+
252  template <class T>
+
253  AttitudeConverter(const Eigen::AngleAxis<T> angle_axis) {
+
254  double angle = angle_axis.angle();
+
255  tf2::Vector3 axis(angle_axis.axis()[0], angle_axis.axis()[1], angle_axis.axis()[2]);
+
256 
+
257  tf2_quaternion_.setRotation(axis, angle);
+
258  }
+
259 
+
265  AttitudeConverter(const tf2::Quaternion quaternion);
+
266 
+
272  AttitudeConverter(const tf2::Matrix3x3 matrix);
+
273 
+
274  //}
+
275 
+
276  /* operators //{ */
+
277 
+
283  operator tf2::Quaternion() const;
+
284 
+
290  operator tf::Quaternion() const;
+
291 
+
297  operator geometry_msgs::Quaternion() const;
+
298 
+
304  operator EulerAttitude() const;
+
305 
+
313  template <class T>
+
314  operator Eigen::AngleAxis<T>() const {
+
315 
+
316  double angle = tf2_quaternion_.getAngle();
+
317  Eigen::Vector3d axis(tf2_quaternion_.getAxis()[0], tf2_quaternion_.getAxis()[1], tf2_quaternion_.getAxis()[2]);
+
318 
+
319  Eigen::AngleAxis<T> angle_axis(angle, axis);
+
320 
+
321  return angle_axis;
+
322  }
+
323 
+
324 
+
332  template <class T>
+
333  operator Eigen::Quaternion<T>() const {
+
334 
+
335  return Eigen::Quaternion<T>(tf2_quaternion_.w(), tf2_quaternion_.x(), tf2_quaternion_.y(), tf2_quaternion_.z());
+
336  }
+
337 
+
338  operator Eigen::Matrix3d() const;
+
339 
+
345  operator std::tuple<double&, double&, double&>();
+
346 
+
352  operator tf2::Matrix3x3() const;
+
353 
+
359  operator tf2::Transform() const;
+
360 
+
361  //}
+
362 
+
363  /* getters //{ */
+
364 
+
370  double getRoll(void);
+
371 
+
377  double getPitch(void);
+
378 
+
384  double getYaw(void);
+
385 
+
391  double getHeading(void);
+
392 
+
400  double getHeadingRate(const Vector3Converter& attitude_rate);
+
401 
+
409  double getYawRateIntrinsic(const double& heading_rate);
+
410 
+ +
417 
+ +
424 
+ +
431 
+
437  std::tuple<double, double, double> getIntrinsicRPY();
+
438 
+
444  std::tuple<double, double, double> getExtrinsicRPY();
+
445 
+
446  //}
+
447 
+
448  /* setters //{ */
+
449 
+
457  AttitudeConverter setHeading(const double& heading);
+
458 
+
466  AttitudeConverter setYaw(const double& new_yaw);
+
467 
+
468  //}
+
469 
+
470  template <std::size_t I>
+
471  constexpr auto get();
+
472 
+
473 private:
+
477  tf2::Quaternion tf2_quaternion_;
+
478 
+
482  void calculateRPY(void);
+
483 
+
487  void validateOrientation(void);
+
488 
+
492  double roll_, pitch_, yaw_;
+
493  bool got_rpy_ = false;
+
494 };
+
495 
+
496 
+
497 template <std::size_t I>
+
498 constexpr auto AttitudeConverter::get() {
+
499 
+
500  calculateRPY();
+
501 
+
502  // call compilation error if I > 2
+
503  static_assert(I <= 2);
+
504 
+
505  // get the RPY components based on the index in the tuple
+
506  if constexpr (I == 0) {
+
507  return static_cast<double>(roll_);
+
508  } else if constexpr (I == 1) {
+
509  return static_cast<double>(pitch_);
+
510  } else if constexpr (I == 2) {
+
511  return static_cast<double>(yaw_);
+
512  }
+
513 }
+
514 
+
515 } // namespace mrs_lib
+
516 
+
517 template <>
+
518 struct std::tuple_size<mrs_lib::AttitudeConverter>
+
519 { static constexpr int value = 3; };
+
520 
+
521 template <>
+
522 struct std::tuple_element<0, mrs_lib::AttitudeConverter>
+
523 { using type = double; };
+
524 
+
525 template <>
+
526 struct std::tuple_element<1, mrs_lib::AttitudeConverter>
+
527 { using type = double; };
+
528 
+
529 template <>
+
530 struct std::tuple_element<2, mrs_lib::AttitudeConverter>
+
531 { using type = double; };
+
532 
+
533 #endif
+
+
+
mrs_lib::AttitudeConverter::AttitudeConverter
AttitudeConverter(const double &roll, const double &pitch, const double &yaw, const RPY_convention_t &format=RPY_EXTRINSIC)
Euler angles constructor.
Definition: attitude_converter.cpp:78
+
mrs_lib::AttitudeConverter::getHeading
double getHeading(void)
get the angle of the rotated x-axis in the original XY plane, a.k.a
Definition: attitude_converter.cpp:254
+
mrs_lib::AttitudeConverter::getVectorY
Vector3Converter getVectorY(void)
get a unit vector pointing in the Y direction
Definition: attitude_converter.cpp:354
+
mrs_lib::AttitudeConverter::GetHeadingException
is thrown when calculating of heading is not possible due to atan2 exception
Definition: attitude_converter.h:158
+
mrs_lib::Vector3Converter::Vector3Converter
Vector3Converter(const tf2::Vector3 &vector3)
Constructor with tf2::Vector3.
Definition: attitude_converter.h:97
+
mrs_lib::AttitudeConverter::AttitudeConverter
AttitudeConverter(const Eigen::AngleAxis< T > angle_axis)
Eigen::AngleAxis constructor.
Definition: attitude_converter.h:253
+
mrs_lib::AttitudeConverter::getIntrinsicRPY
std::tuple< double, double, double > getIntrinsicRPY()
get the Roll, Pitch, Yaw angles in the Intrinsic convention
Definition: attitude_converter.cpp:381
+
mrs_lib::AttitudeConverter::getYawRateIntrinsic
double getYawRateIntrinsic(const double &heading_rate)
get the intrinsic yaw rate from a heading rate
Definition: attitude_converter.cpp:267
+
mrs_lib::AttitudeConverter::getYaw
double getYaw(void)
get the yaw angle
Definition: attitude_converter.cpp:233
+
mrs_lib::AttitudeConverter::MathErrorException
is thrown when math breaks
Definition: attitude_converter.h:166
+
mrs_lib::AttitudeConverter::getRoll
double getRoll(void)
get the roll angle
Definition: attitude_converter.cpp:240
+
mrs_lib::AttitudeConverter
The main convertor class. Instantiate with any type in constructor and get the value in any other typ...
Definition: attitude_converter.h:153
+
mrs_lib::EulerAttitude::pitch
double pitch(void) const
get the pitch angle
Definition: attitude_converter.cpp:20
+
mrs_lib::AttitudeConverter::getVectorZ
Vector3Converter getVectorZ(void)
get a unit vector pointing in the Z direction
Definition: attitude_converter.cpp:363
+
mrs_lib::AttitudeConverter::getExtrinsicRPY
std::tuple< double, double, double > getExtrinsicRPY()
get the Roll, Pitch, Yaw angles in the Extrinsic convention. The same as the default AttitudeConverte...
Definition: attitude_converter.cpp:372
+
misc.h
Defines useful geometry utilities and functions.
+
mrs_lib::AttitudeConverter::setYaw
AttitudeConverter setYaw(const double &new_yaw)
Updates the extrinsic yaw of the current orientation.
Definition: attitude_converter.cpp:394
+
mrs_lib::EulerAttitude::roll
double roll(void) const
get the roll angle
Definition: attitude_converter.cpp:16
+
mrs_lib::EulerAttitude::EulerAttitude
EulerAttitude(const double &roll, const double &pitch, const double &yaw)
A simple class for storing the Euler angles.
Definition: attitude_converter.cpp:13
+
mrs_lib::AttitudeConverter::getVectorX
Vector3Converter getVectorX(void)
get a unit vector pointing in the X direction
Definition: attitude_converter.cpp:345
+
mrs_lib::AttitudeConverter::EulerFormatException
is thrown when the Euler angle format is set wrongly
Definition: attitude_converter.h:182
+
mrs_lib
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
mrs_lib::EulerAttitude::yaw
double yaw(void) const
get the yaw angle
Definition: attitude_converter.cpp:24
+
mrs_lib::EulerAttitude
A small class for storing the Euler angles.
Definition: attitude_converter.h:46
+
mrs_lib::AttitudeConverter::getPitch
double getPitch(void)
get the pitch angle
Definition: attitude_converter.cpp:247
+
mrs_lib::Vector3Converter
Converter of Vector3 representations. Instantiate it with any type of vector3 in constructor and conv...
Definition: attitude_converter.h:90
+
mrs_lib::AttitudeConverter::setHeading
AttitudeConverter setHeading(const double &heading)
Updates the heading of the current orientation by updating the intrinsic yaw.
Definition: attitude_converter.cpp:403
+
mrs_lib::AttitudeConverter::getHeadingRate
double getHeadingRate(const Vector3Converter &attitude_rate)
get heading rate base on the orientation and body-based attitude rate
Definition: attitude_converter.cpp:312
+
mrs_lib::AttitudeConverter::SetHeadingException
is thrown when the heading cannot be set to an existing attitude
Definition: attitude_converter.h:190
+
mrs_lib::AttitudeConverter::InvalidAttitudeException
is thrown when the internal attitude becomes invalid
Definition: attitude_converter.h:174
+ + + + diff --git a/batch__visualizer_8h.html b/batch__visualizer_8h.html new file mode 100644 index 00000000..7c820798 --- /dev/null +++ b/batch__visualizer_8h.html @@ -0,0 +1,163 @@ + + + + + + + +mrs_lib: include/mrs_lib/batch_visualizer.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
batch_visualizer.h File Reference
+
+
+ +

For convenient and computationally lightweight drawing of geometry in RVIZ using marker arrays. +More...

+
#include <vector>
+#include <ros/ros.h>
+#include <visualization_msgs/MarkerArray.h>
+#include <mrs_lib/geometry/shapes.h>
+#include <mrs_msgs/TrajectoryReference.h>
+#include <mrs_lib/visual_object.h>
+#include <set>
+
+ + Include dependency graph for batch_visualizer.h:
+
+
+ +
+

Go to the source code of this file.

+ + + + + +

+Classes

class  mrs_lib::BatchVisualizer
 library for drawing large amounts of geometric objects in RVIZ at the same time More...
 
+ + + + +

+Namespaces

 mrs_lib
 All mrs_lib functions, classes, variables and definitions are contained in this namespace.
 
+ + + +

+Macros

+#define DEFAULT_ELLIPSE_POINTS   64
 
+

Detailed Description

+

For convenient and computationally lightweight drawing of geometry in RVIZ using marker arrays.

+
Author
Petr Štibinger - stibi.nosp@m.pet@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
+
+
+ + + + diff --git a/batch__visualizer_8h.js b/batch__visualizer_8h.js new file mode 100644 index 00000000..9ac69c6f --- /dev/null +++ b/batch__visualizer_8h.js @@ -0,0 +1,5 @@ +var batch__visualizer_8h = +[ + [ "BatchVisualizer", "classmrs__lib_1_1BatchVisualizer.html", "classmrs__lib_1_1BatchVisualizer" ], + [ "DEFAULT_ELLIPSE_POINTS", "batch__visualizer_8h.html#a51b7645de121a21302986b8fa7ff2759", null ] +]; \ No newline at end of file diff --git a/batch__visualizer_8h__incl.map b/batch__visualizer_8h__incl.map new file mode 100644 index 00000000..f76c2cd4 --- /dev/null +++ b/batch__visualizer_8h__incl.map @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/batch__visualizer_8h__incl.md5 b/batch__visualizer_8h__incl.md5 new file mode 100644 index 00000000..cf806639 --- /dev/null +++ b/batch__visualizer_8h__incl.md5 @@ -0,0 +1 @@ +e4ece8eb0ce4895455c2534d663bc252 \ No newline at end of file diff --git a/batch__visualizer_8h__incl.png b/batch__visualizer_8h__incl.png new file mode 100644 index 00000000..45b2a7a0 Binary files /dev/null and b/batch__visualizer_8h__incl.png differ diff --git a/batch__visualizer_8h_source.html b/batch__visualizer_8h_source.html new file mode 100644 index 00000000..e72d2368 --- /dev/null +++ b/batch__visualizer_8h_source.html @@ -0,0 +1,227 @@ + + + + + + + +mrs_lib: include/mrs_lib/batch_visualizer.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
batch_visualizer.h
+
+
+Go to the documentation of this file.
1 
+
6 #ifndef BATCH_VISUALIZER_H
+
7 #define BATCH_VISUALIZER_H
+
8 
+
9 #include <vector>
+
10 #include <ros/ros.h>
+
11 #include <visualization_msgs/MarkerArray.h>
+ +
13 #include <mrs_msgs/TrajectoryReference.h>
+
14 #include <mrs_lib/visual_object.h>
+
15 #include <set>
+
16 
+
17 #define DEFAULT_ELLIPSE_POINTS 64
+
18 
+
19 namespace mrs_lib
+
20 {
+
21 
+ +
26 
+
27 public:
+ + +
43  BatchVisualizer(ros::NodeHandle &nh, std::string marker_topic_name, std::string parent_frame);
+
44 
+
55  void addPoint(const Eigen::Vector3d &point, const double r = 0.0, const double g = 1.0, const double b = 0.3, const double a = 1.0,
+
56  const ros::Duration &timeout = ros::Duration(0));
+
57 
+
68  void addRay(const mrs_lib::geometry::Ray &ray, const double r = 1.0, const double g = 0.0, const double b = 0.0, const double a = 1.0,
+
69  const ros::Duration &timeout = ros::Duration(0));
+
70 
+
82  void addTriangle(const mrs_lib::geometry::Triangle &tri, const double r = 0.5, const double g = 0.5, const double b = 0.0, const double a = 1.0,
+
83  const bool filled = true, const ros::Duration &timeout = ros::Duration(0));
+
84 
+
96  void addRectangle(const mrs_lib::geometry::Rectangle &rect, const double r = 0.5, const double g = 0.5, const double b = 0.0, const double a = 1.0,
+
97  const bool filled = true, const ros::Duration &timeout = ros::Duration(0));
+
98 
+
110  void addCuboid(const mrs_lib::geometry::Cuboid &cuboid, const double r = 0.5, const double g = 0.5, const double b = 0.0, const double a = 1.0,
+
111  const bool filled = true, const ros::Duration &timeout = ros::Duration(0));
+
112 
+
125  void addEllipse(const mrs_lib::geometry::Ellipse &ellipse, const double r = 0.0, const double g = 1.0, const double b = 1.0, const double a = 1.0,
+
126  const bool filled = true, const int num_points = DEFAULT_ELLIPSE_POINTS, const ros::Duration &timeout = ros::Duration(0));
+
127 
+
141  void addCylinder(const mrs_lib::geometry::Cylinder &cylinder, const double r = 0.7, const double g = 0.8, const double b = 0.3, const double a = 1.0,
+
142  const bool filled = true, const bool capped = true, const int sides = DEFAULT_ELLIPSE_POINTS,
+
143  const ros::Duration &timeout = ros::Duration(0));
+
157  void addCone(const mrs_lib::geometry::Cone &cone, const double r = 0.7, const double g = 0.8, const double b = 0.3, const double a = 1.0,
+
158  const bool filled = true, const bool capped = true, const int sides = DEFAULT_ELLIPSE_POINTS, const ros::Duration &timeout = ros::Duration(0));
+
159 
+
171  void addTrajectory(const mrs_msgs::TrajectoryReference &traj, const double r = 0.3, const double g = 1.0, const double b = 0.3, const double a = 1.0,
+
172  const bool filled = true, const ros::Duration &timeout = ros::Duration(0));
+
173 
+
177  void addNullPoint();
+
178 
+
182  void addNullLine();
+
183 
+
187  void addNullTriangle();
+
188 
+
194  void setPointsScale(const double scale);
+
195 
+
201  void setParentFrame(const std::string parent_frame);
+
202 
+
208  void setLinesScale(const double scale);
+
209 
+
213  void clearBuffers();
+
214 
+
218  void clearVisuals();
+
219 
+
223  void publish();
+
224 
+
225 private:
+
226  ros::Publisher visual_pub;
+
227  visualization_msgs::MarkerArray msg;
+
228 
+
229  std::string parent_frame; // coordinate frame id
+
230  std::string marker_topic_name;
+
231 
+
232  std::set<VisualObject> visual_objects; // buffer for objects to be visualized
+
233 
+
234  visualization_msgs::Marker points_marker;
+
235  visualization_msgs::Marker lines_marker;
+
236  visualization_msgs::Marker triangles_marker;
+
237 
+
238  bool initialized = false;
+
239  void initialize();
+
240 
+
241  double points_scale = 0.02;
+
242  double lines_scale = 0.04;
+
243 
+
244  unsigned long uuid = 0; // create unique ID for items in object buffer
+
245 };
+
246 
+
247 } // namespace mrs_lib
+
248 
+
249 #endif
+
+
+
mrs_lib::BatchVisualizer::publish
void publish()
publish the visual markers ROS message and populates it with buffer content
Definition: batch_visualizer.cpp:270
+
mrs_lib::BatchVisualizer::addEllipse
void addEllipse(const mrs_lib::geometry::Ellipse &ellipse, const double r=0.0, const double g=1.0, const double b=1.0, const double a=1.0, const bool filled=true, const int num_points=DEFAULT_ELLIPSE_POINTS, const ros::Duration &timeout=ros::Duration(0))
add an ellipse to the buffer
Definition: batch_visualizer.cpp:136
+
mrs_lib::BatchVisualizer::addNullTriangle
void addNullTriangle()
helper function for adding an invisible triangle to the buffer
Definition: batch_visualizer.cpp:211
+
mrs_lib::BatchVisualizer::addPoint
void addPoint(const Eigen::Vector3d &point, const double r=0.0, const double g=1.0, const double b=0.3, const double a=1.0, const ros::Duration &timeout=ros::Duration(0))
add a point to the buffer
Definition: batch_visualizer.cpp:93
+
mrs_lib::BatchVisualizer::~BatchVisualizer
~BatchVisualizer()
destructor
Definition: batch_visualizer.cpp:12
+
mrs_lib::BatchVisualizer::setLinesScale
void setLinesScale(const double scale)
set the thickness of all lines
Definition: batch_visualizer.cpp:246
+
mrs_lib::BatchVisualizer::clearBuffers
void clearBuffers()
remove all objects from the buffer
Definition: batch_visualizer.cpp:252
+
visual_object.h
Object abstraction for the Batch Visualizer.
+
mrs_lib::geometry::Ray
geometric representation of a ray. Instantiate it by two input Vector3. Use static methods for from-t...
Definition: shapes.h:24
+
mrs_lib::BatchVisualizer::clearVisuals
void clearVisuals()
publishes an empty message. Removes all objects drawn onto the scene, but keeps them in buffer
Definition: batch_visualizer.cpp:258
+
mrs_lib::geometry::Cuboid
geometric representation of a cuboid
Definition: shapes.h:317
+
mrs_lib::BatchVisualizer::setParentFrame
void setParentFrame(const std::string parent_frame)
set the parent frame_id
Definition: batch_visualizer.cpp:27
+
mrs_lib::BatchVisualizer::addCuboid
void addCuboid(const mrs_lib::geometry::Cuboid &cuboid, const double r=0.5, const double g=0.5, const double b=0.0, const double a=1.0, const bool filled=true, const ros::Duration &timeout=ros::Duration(0))
add a cuboid to the buffer
Definition: batch_visualizer.cpp:127
+
mrs_lib::BatchVisualizer::setPointsScale
void setPointsScale(const double scale)
set the scale of all points
Definition: batch_visualizer.cpp:240
+
mrs_lib::BatchVisualizer::addCylinder
void addCylinder(const mrs_lib::geometry::Cylinder &cylinder, const double r=0.7, const double g=0.8, const double b=0.3, const double a=1.0, const bool filled=true, const bool capped=true, const int sides=DEFAULT_ELLIPSE_POINTS, const ros::Duration &timeout=ros::Duration(0))
add a cylinder to the buffer
Definition: batch_visualizer.cpp:145
+
mrs_lib::BatchVisualizer::addCone
void addCone(const mrs_lib::geometry::Cone &cone, const double r=0.7, const double g=0.8, const double b=0.3, const double a=1.0, const bool filled=true, const bool capped=true, const int sides=DEFAULT_ELLIPSE_POINTS, const ros::Duration &timeout=ros::Duration(0))
add a cone to the buffer
Definition: batch_visualizer.cpp:153
+
mrs_lib::BatchVisualizer::addTriangle
void addTriangle(const mrs_lib::geometry::Triangle &tri, const double r=0.5, const double g=0.5, const double b=0.0, const double a=1.0, const bool filled=true, const ros::Duration &timeout=ros::Duration(0))
add a triangle to the buffer
Definition: batch_visualizer.cpp:109
+
mrs_lib::geometry::Ellipse
geometric representation of an ellipse
Definition: shapes.h:426
+
mrs_lib
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
mrs_lib::BatchVisualizer::addNullPoint
void addNullPoint()
helper function for adding an invisible point to the object buffer
Definition: batch_visualizer.cpp:169
+
mrs_lib::geometry::Rectangle
geometric representation of a rectangle (can represent any quadrilateral)
Definition: shapes.h:187
+
shapes.h
Defines various geometrical shapes and their relations.
+
mrs_lib::BatchVisualizer::addRectangle
void addRectangle(const mrs_lib::geometry::Rectangle &rect, const double r=0.5, const double g=0.5, const double b=0.0, const double a=1.0, const bool filled=true, const ros::Duration &timeout=ros::Duration(0))
add a rectangle to the buffer
Definition: batch_visualizer.cpp:118
+
mrs_lib::BatchVisualizer::addRay
void addRay(const mrs_lib::geometry::Ray &ray, const double r=1.0, const double g=0.0, const double b=0.0, const double a=1.0, const ros::Duration &timeout=ros::Duration(0))
add a ray to the buffer
Definition: batch_visualizer.cpp:101
+
mrs_lib::geometry::Triangle
geometric representation of a triangle. Instantiate a new triangle by providing three vertices
Definition: shapes.h:98
+
mrs_lib::BatchVisualizer::addNullLine
void addNullLine()
helper function for adding an invisible line to the object buffer
Definition: batch_visualizer.cpp:187
+
mrs_lib::BatchVisualizer::BatchVisualizer
BatchVisualizer()
dummy constructor
Definition: batch_visualizer.cpp:9
+
mrs_lib::geometry::Cylinder
geometric representation of a cylinder
Definition: shapes.h:490
+
mrs_lib::geometry::Cone
geometric representaiton of a cone
Definition: shapes.h:573
+
mrs_lib::BatchVisualizer::addTrajectory
void addTrajectory(const mrs_msgs::TrajectoryReference &traj, const double r=0.3, const double g=1.0, const double b=0.3, const double a=1.0, const bool filled=true, const ros::Duration &timeout=ros::Duration(0))
add a trajectory to the buffer
Definition: batch_visualizer.cpp:161
+
mrs_lib::BatchVisualizer
library for drawing large amounts of geometric objects in RVIZ at the same time
Definition: batch_visualizer.h:25
+ + + + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 00000000..224b29aa Binary files /dev/null and b/bc_s.png differ diff --git a/bdwn.png b/bdwn.png new file mode 100644 index 00000000..940a0b95 Binary files /dev/null and b/bdwn.png differ diff --git a/citelist.html b/citelist.html new file mode 100644 index 00000000..926b96f3 --- /dev/null +++ b/citelist.html @@ -0,0 +1,124 @@ + + + + + + + +mrs_lib: Bibliography + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Bibliography
+
+
+
+
[1]
+

Stephen A. Chee and James R. Forbes. Norm-constrained unscented kalman filter with application to high area-to-mass ratio space-debris tracking. In AIAA Guidance, Navigation, and Control Conference, Jan 2016.

+

+
+
[2]
+

W. Chojnacki, M. J. Brooks, A. van den Hengel, and D. Gawley. FNS and HEIV: relating two vision parameter estimation frameworks. In 12th International Conference on Image Analysis and Processing, 2003.Proceedings., pages 152–157, Sep 2003.

+

+
+
[3]
+

Rudolph Emil Kalman. A new approach to linear filtering and prediction problems. Transactions of the ASME–Journal of Basic Engineering, 82(Series D):35–45, 1960.

+

+
+
[4]
+

E. A. Wan and R. Van Der Merwe. The unscented kalman filter for nonlinear estimation. In Proceedings of the IEEE 2000 Adaptive Systems for Signal Processing, Communications, and Control Symposium (Cat. No.00EX373), pages 153–158, Oct 2000.

+

+
+
[5]
+

Renato Zanetti, Manoranjan Majji, Robert H. Bishop, and Daniele Mortari. Norm-constrained kalman filtering. Journal of Guidance, Control, and Dynamics, 32(5):1458–1465, 2009.

+

+
+
+
+
+
+ + + + diff --git a/classDynamicPublisher_1_1impl-members.html b/classDynamicPublisher_1_1impl-members.html new file mode 100644 index 00000000..c597cd09 --- /dev/null +++ b/classDynamicPublisher_1_1impl-members.html @@ -0,0 +1,107 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
DynamicPublisher::impl Member List
+
+
+ +

This is the complete list of members for DynamicPublisher::impl, including all inherited members.

+ + + + +
impl()=default (defined in DynamicPublisher::impl)DynamicPublisher::impl
impl(const ros::NodeHandle &nh) (defined in DynamicPublisher::impl)DynamicPublisher::implinline
publish(const std::string name, const T &msg) (defined in DynamicPublisher::impl)DynamicPublisher::implinline
+
+ + + + diff --git a/classDynamicPublisher_1_1impl.html b/classDynamicPublisher_1_1impl.html new file mode 100644 index 00000000..014ac8e2 --- /dev/null +++ b/classDynamicPublisher_1_1impl.html @@ -0,0 +1,120 @@ + + + + + + + +mrs_lib: DynamicPublisher::impl Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
DynamicPublisher::impl Class Reference
+
+
+ + + + + + + +

+Public Member Functions

impl (const ros::NodeHandle &nh)
 
+template<class T >
void publish (const std::string name, const T &msg)
 
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classDynamicPublisher_1_1impl.js b/classDynamicPublisher_1_1impl.js new file mode 100644 index 00000000..0a98de67 --- /dev/null +++ b/classDynamicPublisher_1_1impl.js @@ -0,0 +1,6 @@ +var classDynamicPublisher_1_1impl = +[ + [ "impl", "classDynamicPublisher_1_1impl.html#aaa45c2933f980559a9f92e672f325618", null ], + [ "impl", "classDynamicPublisher_1_1impl.html#a19f0bc67633228eb49d3fdfedab4bc6c", null ], + [ "publish", "classDynamicPublisher_1_1impl.html#a1fe7ec12024c0e3e1c907a34acfdfd64", null ] +]; \ No newline at end of file diff --git a/classSubObject-members.html b/classSubObject-members.html new file mode 100644 index 00000000..3dd17b85 --- /dev/null +++ b/classSubObject-members.html @@ -0,0 +1,106 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
SubObject Member List
+
+
+ +

This is the complete list of members for SubObject, including all inherited members.

+ + + +
callback_method(const std_msgs::String::ConstPtr msg) (defined in SubObject)SubObjectinline
timeout_method(const std::string &topic_name, const ros::Time &last_msg) (defined in SubObject)SubObjectinline
+
+ + + + diff --git a/classSubObject.html b/classSubObject.html new file mode 100644 index 00000000..ab272842 --- /dev/null +++ b/classSubObject.html @@ -0,0 +1,121 @@ + + + + + + + +mrs_lib: SubObject Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
SubObject Class Reference
+
+
+ + + + + + +

+Public Member Functions

+void callback_method (const std_msgs::String::ConstPtr msg)
 
+void timeout_method (const std::string &topic_name, const ros::Time &last_msg)
 
+

Detailed Description

+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classSubObject.js b/classSubObject.js new file mode 100644 index 00000000..ed378c15 --- /dev/null +++ b/classSubObject.js @@ -0,0 +1,5 @@ +var classSubObject = +[ + [ "callback_method", "classSubObject.html#ab45ed0b3758cf60c77fd488b3b4da197", null ], + [ "timeout_method", "classSubObject.html#a9de6e819d64fe2536b93518dd1d08134", null ] +]; \ No newline at end of file diff --git a/classThreadTimer_1_1Impl-members.html b/classThreadTimer_1_1Impl-members.html new file mode 100644 index 00000000..193357e4 --- /dev/null +++ b/classThreadTimer_1_1Impl-members.html @@ -0,0 +1,114 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ThreadTimer::Impl Member List
+
+
+ +

This is the complete list of members for ThreadTimer::Impl, including all inherited members.

+ + + + + + + + + + + +
Impl(const std::function< void(const ros::TimerEvent &)> &callback, const ros::Duration &delay_dur, const bool oneshot) (defined in ThreadTimer::Impl)ThreadTimer::Impl
Impl(const Impl &)=delete (defined in ThreadTimer::Impl)ThreadTimer::Impl
Impl(Impl &&)=delete (defined in ThreadTimer::Impl)ThreadTimer::Impl
operator=(const Impl &)=delete (defined in ThreadTimer::Impl)ThreadTimer::Impl
operator=(Impl &&)=delete (defined in ThreadTimer::Impl)ThreadTimer::Impl
setPeriod(const ros::Duration &duration, const bool reset=true) (defined in ThreadTimer::Impl)ThreadTimer::Impl
start() (defined in ThreadTimer::Impl)ThreadTimer::Impl
stop() (defined in ThreadTimer::Impl)ThreadTimer::Impl
ThreadTimer (defined in ThreadTimer::Impl)ThreadTimer::Implfriend
~Impl() (defined in ThreadTimer::Impl)ThreadTimer::Impl
+
+ + + + diff --git a/classThreadTimer_1_1Impl.html b/classThreadTimer_1_1Impl.html new file mode 100644 index 00000000..a0f9c13c --- /dev/null +++ b/classThreadTimer_1_1Impl.html @@ -0,0 +1,144 @@ + + + + + + + +mrs_lib: ThreadTimer::Impl Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
ThreadTimer::Impl Class Reference
+
+
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

Impl (const std::function< void(const ros::TimerEvent &)> &callback, const ros::Duration &delay_dur, const bool oneshot)
 
+void start ()
 
+void stop ()
 
+void setPeriod (const ros::Duration &duration, const bool reset=true)
 
Impl (const Impl &)=delete
 
Impl (Impl &&)=delete
 
+Imploperator= (const Impl &)=delete
 
+Imploperator= (Impl &&)=delete
 
+ + + +

+Friends

+class ThreadTimer
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classThreadTimer_1_1Impl.js b/classThreadTimer_1_1Impl.js new file mode 100644 index 00000000..40c52689 --- /dev/null +++ b/classThreadTimer_1_1Impl.js @@ -0,0 +1,13 @@ +var classThreadTimer_1_1Impl = +[ + [ "Impl", "classThreadTimer_1_1Impl.html#ac41581624c3ec1344bfac7069d7aa1f2", null ], + [ "~Impl", "classThreadTimer_1_1Impl.html#a323898b0ff0268b0adf327cfb9735921", null ], + [ "Impl", "classThreadTimer_1_1Impl.html#a274682763ef9406142b83725ef6ecff4", null ], + [ "Impl", "classThreadTimer_1_1Impl.html#a1cfc655ae5e4f4ac22a6db88a494729a", null ], + [ "operator=", "classThreadTimer_1_1Impl.html#a2f8003af63b8c5b9976912aa329483e8", null ], + [ "operator=", "classThreadTimer_1_1Impl.html#afbca04c3504c7fe8d24816a1caeca06e", null ], + [ "setPeriod", "classThreadTimer_1_1Impl.html#a5a0677c911b72f4316eef0d76d5bbb19", null ], + [ "start", "classThreadTimer_1_1Impl.html#add04d90e39bb09078c2af4e39a4d2f18", null ], + [ "stop", "classThreadTimer_1_1Impl.html#a2d0a406c6538f95f4d9b8fc14a6e6bab", null ], + [ "ThreadTimer", "classThreadTimer_1_1Impl.html#a3bfed848c47524c3e45cd469acf38701", null ] +]; \ No newline at end of file diff --git a/classVectorConverterTest.html b/classVectorConverterTest.html new file mode 100644 index 00000000..802d1e43 --- /dev/null +++ b/classVectorConverterTest.html @@ -0,0 +1,127 @@ + + + + + + + +mrs_lib: VectorConverterTest< T > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
VectorConverterTest< T > Class Template Reference
+
+
+
+ + Inheritance diagram for VectorConverterTest< T >:
+
+
+ +
+ + Collaboration diagram for VectorConverterTest< T >:
+
+
+ +
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classVectorConverterTest__coll__graph.map b/classVectorConverterTest__coll__graph.map new file mode 100644 index 00000000..140c735e --- /dev/null +++ b/classVectorConverterTest__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classVectorConverterTest__coll__graph.md5 b/classVectorConverterTest__coll__graph.md5 new file mode 100644 index 00000000..044b10c0 --- /dev/null +++ b/classVectorConverterTest__coll__graph.md5 @@ -0,0 +1 @@ +76a94b650ded00cae09a8709fa89c221 \ No newline at end of file diff --git a/classVectorConverterTest__coll__graph.png b/classVectorConverterTest__coll__graph.png new file mode 100644 index 00000000..24392349 Binary files /dev/null and b/classVectorConverterTest__coll__graph.png differ diff --git a/classVectorConverterTest__inherit__graph.map b/classVectorConverterTest__inherit__graph.map new file mode 100644 index 00000000..140c735e --- /dev/null +++ b/classVectorConverterTest__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classVectorConverterTest__inherit__graph.md5 b/classVectorConverterTest__inherit__graph.md5 new file mode 100644 index 00000000..044b10c0 --- /dev/null +++ b/classVectorConverterTest__inherit__graph.md5 @@ -0,0 +1 @@ +76a94b650ded00cae09a8709fa89c221 \ No newline at end of file diff --git a/classVectorConverterTest__inherit__graph.png b/classVectorConverterTest__inherit__graph.png new file mode 100644 index 00000000..24392349 Binary files /dev/null and b/classVectorConverterTest__inherit__graph.png differ diff --git a/classes.html b/classes.html new file mode 100644 index 00000000..f0602d65 --- /dev/null +++ b/classes.html @@ -0,0 +1,273 @@ + + + + + + + +mrs_lib: Class Index + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
a | b | c | d | e | g | i | j | k | l | m | n | o | p | r | s | t | u | v | w
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  a  
+
  g  
+
  m  
+
Ray (mrs_lib::geometry)   TimeoutManager (mrs_lib)   
Rectangle (mrs_lib::geometry)   TransformBroadcaster (mrs_lib)   
AtomicScopeFlag (mrs_lib)   AttitudeConverter::GetHeadingException (mrs_lib)   AttitudeConverter::MathErrorException (mrs_lib)   Repredictor (mrs_lib)   Transformer (mrs_lib)   
AttitudeConverter (mrs_lib)   
  i  
+
MedianFilter (mrs_lib)   RepredictorAloamgarm (mrs_lib)   Triangle (mrs_lib::geometry)   
  b  
+
MotorParams_t (mrs_lib::quadratic_throttle_model)   RHEIV (mrs_lib)   tuple_element< 0, mrs_lib::AttitudeConverter > (std)   
IirFilter (mrs_lib)   MRSTimer (mrs_lib)   RosParamProvider (mrs_lib)   tuple_element< 1, mrs_lib::AttitudeConverter > (std)   
BatchVisualizer (mrs_lib)   ImagePubliserData (mrs_lib)   MyPoint   ROSTimer (mrs_lib)   tuple_element< 2, mrs_lib::AttitudeConverter > (std)   
SafetyZone::BorderError (mrs_lib)   ImagePublisher (mrs_lib)   
  n  
+
Routine (mrs_lib)   tuple_size< mrs_lib::AttitudeConverter > (std)   
  c  
+
impl (DynamicPublisher)   
  s  
+
  u  
+
SubscribeHandler::Impl (mrs_lib)   NCLKF (mrs_lib)   
Cone (mrs_lib::geometry)   Impl (ThreadTimer)   NCLKF_partial (mrs_lib)   SafetyZone (mrs_lib)   UKF (mrs_lib)   
Cuboid (mrs_lib::geometry)   SubscribeHandler::ImplThreadsafe (mrs_lib)   NCUKF (mrs_lib)   ScopeTimer (mrs_lib)   
  v  
+
cyclic (mrs_lib::geometry)   Intersection (mrs_lib)   NotchFilter (mrs_lib)   ScopeTimerLogger (mrs_lib)   
Cylinder (mrs_lib::geometry)   AttitudeConverter::InvalidAttitudeException (mrs_lib)   
  o  
+
sdegrees (mrs_lib::geometry)   varstepLKF (mrs_lib)   
  d  
+
JLKF::inverse_exception (mrs_lib)   ServiceClientHandler (mrs_lib)   Vector3Converter (mrs_lib)   
LKF::inverse_exception (mrs_lib)   obj_t   ServiceClientHandler_impl (mrs_lib)   VectorConverterTest   
degrees (mrs_lib::geometry)   UKF::inverse_exception (mrs_lib)   
  p  
+
AttitudeConverter::SetHeadingException (mrs_lib)   VisualObject (mrs_lib)   
degrees   
  j  
+
UKF::square_root_exception (mrs_lib)   
  w  
+
DKF (mrs_lib)   ParamLoader (mrs_lib)   sradians (mrs_lib::geometry)   
DynamicPublisher (mrs_lib)   JLKF (mrs_lib)   ParamProvider (mrs_lib)   KalmanFilter::statecov_t (mrs_lib)   PointObstacle::WrongHeight (mrs_lib)   
DynamicReconfigureMgr (mrs_lib)   
  k  
+
PointObstacle (mrs_lib)   KalmanFilterAloamGarm::statecov_t (mrs_lib)   Polygon::WrongNumberOfColumns (mrs_lib)   
  e  
+
SafetyZone::PointObstacleError (mrs_lib)   SubObject   Polygon::WrongNumberOfVertices (mrs_lib)   
KalmanFilter (mrs_lib)   Polygon (mrs_lib)   SubscribeHandler (mrs_lib)   PointObstacle::WrongRadius (mrs_lib)   
eigenvector_exception (mrs_lib)   KalmanFilterAloamGarm (mrs_lib)   SafetyZone::PolygonObstacleError (mrs_lib)   SubscribeHandlerOptions (mrs_lib)   
Ellipse (mrs_lib::geometry)   
  l  
+
Profiler (mrs_lib)   
  t  
+
EulerAttitude (mrs_lib)   PublisherHandler (mrs_lib)   
AttitudeConverter::EulerFormatException (mrs_lib)   LKF (mrs_lib)   PublisherHandler_impl (mrs_lib)   ThreadTimer (mrs_lib)   
Polygon::ExtraVertices (mrs_lib)   LKF_MRS_odom (mrs_lib)   
  r  
+
ScopeTimer::time_point (mrs_lib)   
radians (mrs_lib::geometry)   
+
a | b | c | d | e | g | i | j | k | l | m | n | o | p | r | s | t | u | v | w
+
+
+ + + + diff --git a/classmrs__lib_1_1AtomicScopeFlag-members.html b/classmrs__lib_1_1AtomicScopeFlag-members.html new file mode 100644 index 00000000..7fcffd59 --- /dev/null +++ b/classmrs__lib_1_1AtomicScopeFlag-members.html @@ -0,0 +1,106 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::AtomicScopeFlag Member List
+
+
+ +

This is the complete list of members for mrs_lib::AtomicScopeFlag, including all inherited members.

+ + + +
AtomicScopeFlag(std::atomic< bool > &in)mrs_lib::AtomicScopeFlag
~AtomicScopeFlag()mrs_lib::AtomicScopeFlag
+
+ + + + diff --git a/classmrs__lib_1_1AtomicScopeFlag.html b/classmrs__lib_1_1AtomicScopeFlag.html new file mode 100644 index 00000000..9319f1ab --- /dev/null +++ b/classmrs__lib_1_1AtomicScopeFlag.html @@ -0,0 +1,172 @@ + + + + + + + +mrs_lib: mrs_lib::AtomicScopeFlag Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::AtomicScopeFlag Class Reference
+
+
+ +

Convenience class for automatically setting and unsetting an atomic boolean based on the object's scope. Useful e.g. for indicating whether a thread is running or not. + More...

+ +

#include <utils.h>

+ + + + + + + + +

+Public Member Functions

 AtomicScopeFlag (std::atomic< bool > &in)
 The constructor. Sets the flag in to true. More...
 
 ~AtomicScopeFlag ()
 The destructor. Resets the variable given in the constructor to false. More...
 
+

Detailed Description

+

Convenience class for automatically setting and unsetting an atomic boolean based on the object's scope. Useful e.g. for indicating whether a thread is running or not.

+

Constructor & Destructor Documentation

+ +

◆ AtomicScopeFlag()

+ +
+
+ + + + + + + + +
mrs_lib::AtomicScopeFlag::AtomicScopeFlag (std::atomic< bool > & in)
+
+ +

The constructor. Sets the flag in to true.

+
Parameters
+ + +
inThe flag to be set on construction of this object and reset (set to false) on its destruction.
+
+
+ +
+
+ +

◆ ~AtomicScopeFlag()

+ +
+
+ + + + + + + +
mrs_lib::AtomicScopeFlag::~AtomicScopeFlag ()
+
+ +

The destructor. Resets the variable given in the constructor to false.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1AtomicScopeFlag.js b/classmrs__lib_1_1AtomicScopeFlag.js new file mode 100644 index 00000000..d92bd72f --- /dev/null +++ b/classmrs__lib_1_1AtomicScopeFlag.js @@ -0,0 +1,5 @@ +var classmrs__lib_1_1AtomicScopeFlag = +[ + [ "AtomicScopeFlag", "classmrs__lib_1_1AtomicScopeFlag.html#a168dc1d0a0ae38b254d89a84afdc4cab", null ], + [ "~AtomicScopeFlag", "classmrs__lib_1_1AtomicScopeFlag.html#aafdf61c0af0bffada120eec2a8c858b1", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1AttitudeConverter-members.html b/classmrs__lib_1_1AttitudeConverter-members.html new file mode 100644 index 00000000..825b0917 --- /dev/null +++ b/classmrs__lib_1_1AttitudeConverter-members.html @@ -0,0 +1,137 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::AttitudeConverter Member List
+
+
+ +

This is the complete list of members for mrs_lib::AttitudeConverter, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttitudeConverter(const double &roll, const double &pitch, const double &yaw, const RPY_convention_t &format=RPY_EXTRINSIC)mrs_lib::AttitudeConverter
AttitudeConverter(const tf::Quaternion quaternion)mrs_lib::AttitudeConverter
AttitudeConverter(const geometry_msgs::Quaternion quaternion)mrs_lib::AttitudeConverter
AttitudeConverter(const mrs_lib::EulerAttitude &euler_attitude)mrs_lib::AttitudeConverter
AttitudeConverter(const Eigen::Quaterniond quaternion)mrs_lib::AttitudeConverter
AttitudeConverter(const Eigen::Matrix3d matrix)mrs_lib::AttitudeConverter
AttitudeConverter(const Eigen::AngleAxis< T > angle_axis)mrs_lib::AttitudeConverterinline
AttitudeConverter(const tf2::Quaternion quaternion)mrs_lib::AttitudeConverter
AttitudeConverter(const tf2::Matrix3x3 matrix)mrs_lib::AttitudeConverter
get() (defined in mrs_lib::AttitudeConverter)mrs_lib::AttitudeConverter
getExtrinsicRPY()mrs_lib::AttitudeConverter
getHeading(void)mrs_lib::AttitudeConverter
getHeadingRate(const Vector3Converter &attitude_rate)mrs_lib::AttitudeConverter
getIntrinsicRPY()mrs_lib::AttitudeConverter
getPitch(void)mrs_lib::AttitudeConverter
getRoll(void)mrs_lib::AttitudeConverter
getVectorX(void)mrs_lib::AttitudeConverter
getVectorY(void)mrs_lib::AttitudeConverter
getVectorZ(void)mrs_lib::AttitudeConverter
getYaw(void)mrs_lib::AttitudeConverter
getYawRateIntrinsic(const double &heading_rate)mrs_lib::AttitudeConverter
operator Eigen::AngleAxis< T >() constmrs_lib::AttitudeConverterinline
operator Eigen::Matrix3d() const (defined in mrs_lib::AttitudeConverter)mrs_lib::AttitudeConverter
operator Eigen::Quaternion< T >() constmrs_lib::AttitudeConverterinline
operator EulerAttitude() constmrs_lib::AttitudeConverter
operator geometry_msgs::Quaternion() constmrs_lib::AttitudeConverter
operator std::tuple< double &, double &, double & >()mrs_lib::AttitudeConverter
operator tf2::Matrix3x3() constmrs_lib::AttitudeConverter
operator tf2::Quaternion() constmrs_lib::AttitudeConverter
operator tf2::Transform() constmrs_lib::AttitudeConverter
operator tf::Quaternion() constmrs_lib::AttitudeConverter
setHeading(const double &heading)mrs_lib::AttitudeConverter
setYaw(const double &new_yaw)mrs_lib::AttitudeConverter
+
+ + + + diff --git a/classmrs__lib_1_1AttitudeConverter.html b/classmrs__lib_1_1AttitudeConverter.html new file mode 100644 index 00000000..382dbff0 --- /dev/null +++ b/classmrs__lib_1_1AttitudeConverter.html @@ -0,0 +1,1026 @@ + + + + + + + +mrs_lib: mrs_lib::AttitudeConverter Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::AttitudeConverter Class Reference
+
+
+ +

The main convertor class. Instantiate with any type in constructor and get the value in any other type by assigning the instance to your variable, as: tf::Quaternion tf1_quaternion = AttitudeConverter(roll, pitch, yaw); All the default Euler angles are in the extrinsic RPY notation. + More...

+ +

#include <attitude_converter.h>

+ + + + + + + + + + + + + + + + + +

+Classes

struct  EulerFormatException
 is thrown when the Euler angle format is set wrongly More...
 
struct  GetHeadingException
 is thrown when calculating of heading is not possible due to atan2 exception More...
 
struct  InvalidAttitudeException
 is thrown when the internal attitude becomes invalid More...
 
struct  MathErrorException
 is thrown when math breaks More...
 
struct  SetHeadingException
 is thrown when the heading cannot be set to an existing attitude More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 AttitudeConverter (const double &roll, const double &pitch, const double &yaw, const RPY_convention_t &format=RPY_EXTRINSIC)
 Euler angles constructor. More...
 
 AttitudeConverter (const tf::Quaternion quaternion)
 tf::Quaternion constructor More...
 
 AttitudeConverter (const geometry_msgs::Quaternion quaternion)
 geometry_msgs::Quaternion constructor More...
 
 AttitudeConverter (const mrs_lib::EulerAttitude &euler_attitude)
 mrs_lib::EulerAttitude constructor More...
 
 AttitudeConverter (const Eigen::Quaterniond quaternion)
 Eigen::Quaterniond constructor. More...
 
 AttitudeConverter (const Eigen::Matrix3d matrix)
 Eigen::Matrix3d constructor. More...
 
template<class T >
 AttitudeConverter (const Eigen::AngleAxis< T > angle_axis)
 Eigen::AngleAxis constructor. More...
 
 AttitudeConverter (const tf2::Quaternion quaternion)
 tf2::Quaternion constructor More...
 
 AttitudeConverter (const tf2::Matrix3x3 matrix)
 tf2::Matrix3x3 constructor More...
 
 operator tf2::Quaternion () const
 typecast to tf2::Quaternion More...
 
 operator tf::Quaternion () const
 typecast to tf::Quaternion More...
 
 operator geometry_msgs::Quaternion () const
 typecast to geometry_msgs::Quaternion More...
 
 operator EulerAttitude () const
 typecast to EulerAttitude More...
 
template<class T >
 operator Eigen::AngleAxis< T > () const
 typecast to Eigen::AngleAxis More...
 
template<class T >
 operator Eigen::Quaternion< T > () const
 typecast to EulerAttitude Eigen::Quaternion More...
 
operator Eigen::Matrix3d () const
 
 operator std::tuple< double &, double &, double & > ()
 typecase to tuple of Euler angles in extrinsic RPY More...
 
 operator tf2::Matrix3x3 () const
 typecase to tf2::Matrix3x3 More...
 
 operator tf2::Transform () const
 typecase to tf2::Transform More...
 
double getRoll (void)
 get the roll angle More...
 
double getPitch (void)
 get the pitch angle More...
 
double getYaw (void)
 get the yaw angle More...
 
double getHeading (void)
 get the angle of the rotated x-axis in the original XY plane, a.k.a More...
 
double getHeadingRate (const Vector3Converter &attitude_rate)
 get heading rate base on the orientation and body-based attitude rate More...
 
double getYawRateIntrinsic (const double &heading_rate)
 get the intrinsic yaw rate from a heading rate More...
 
Vector3Converter getVectorX (void)
 get a unit vector pointing in the X direction More...
 
Vector3Converter getVectorY (void)
 get a unit vector pointing in the Y direction More...
 
Vector3Converter getVectorZ (void)
 get a unit vector pointing in the Z direction More...
 
std::tuple< double, double, double > getIntrinsicRPY ()
 get the Roll, Pitch, Yaw angles in the Intrinsic convention More...
 
std::tuple< double, double, double > getExtrinsicRPY ()
 get the Roll, Pitch, Yaw angles in the Extrinsic convention. The same as the default AttitudeConverter assignment. More...
 
AttitudeConverter setHeading (const double &heading)
 Updates the heading of the current orientation by updating the intrinsic yaw. More...
 
AttitudeConverter setYaw (const double &new_yaw)
 Updates the extrinsic yaw of the current orientation. More...
 
+template<std::size_t I>
constexpr auto get ()
 
+

Detailed Description

+

The main convertor class. Instantiate with any type in constructor and get the value in any other type by assigning the instance to your variable, as: tf::Quaternion tf1_quaternion = AttitudeConverter(roll, pitch, yaw); All the default Euler angles are in the extrinsic RPY notation.

+

Constructor & Destructor Documentation

+ +

◆ AttitudeConverter() [1/9]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::AttitudeConverter::AttitudeConverter (const double & roll,
const double & pitch,
const double & yaw,
const RPY_convention_t & format = RPY_EXTRINSIC 
)
+
+ +

Euler angles constructor.

+
Parameters
+ + + + + +
roll
pitch
yaw
formatoptional, Euler angle convention, {"extrinsic", "intrinsic"}, defaults to "extrinsic"
+
+
+ +
+
+ +

◆ AttitudeConverter() [2/9]

+ +
+
+ + + + + + + + +
mrs_lib::AttitudeConverter::AttitudeConverter (const tf::Quaternion quaternion)
+
+ +

tf::Quaternion constructor

+
Parameters
+ + +
quaterniontf::Quaternion quaternion
+
+
+ +
+
+ +

◆ AttitudeConverter() [3/9]

+ +
+
+ + + + + + + + +
mrs_lib::AttitudeConverter::AttitudeConverter (const geometry_msgs::Quaternion quaternion)
+
+ +

geometry_msgs::Quaternion constructor

+
Parameters
+ + +
quaterniongeometry_msgs::Quaternion quaternion
+
+
+ +
+
+ +

◆ AttitudeConverter() [4/9]

+ +
+
+ + + + + + + + +
mrs_lib::AttitudeConverter::AttitudeConverter (const mrs_lib::EulerAttitudeeuler_attitude)
+
+ +

mrs_lib::EulerAttitude constructor

+
Parameters
+ + +
euler_attitudemrs_lib::EulerAttitude
+
+
+ +
+
+ +

◆ AttitudeConverter() [5/9]

+ +
+
+ + + + + + + + +
mrs_lib::AttitudeConverter::AttitudeConverter (const Eigen::Quaterniond quaternion)
+
+ +

Eigen::Quaterniond constructor.

+
Parameters
+ + +
quaternionEigen::Quaterniond quaternion
+
+
+ +
+
+ +

◆ AttitudeConverter() [6/9]

+ +
+
+ + + + + + + + +
mrs_lib::AttitudeConverter::AttitudeConverter (const Eigen::Matrix3d matrix)
+
+ +

Eigen::Matrix3d constructor.

+
Parameters
+ + +
matrixEigen::Matrix3d rotational matrix
+
+
+ +
+
+ +

◆ AttitudeConverter() [7/9]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
mrs_lib::AttitudeConverter::AttitudeConverter (const Eigen::AngleAxis< T > angle_axis)
+
+inline
+
+ +

Eigen::AngleAxis constructor.

+
Template Parameters
+ + +
Tangle-axis base type
+
+
+
Parameters
+ + +
angle_axisEigen::AngleAxis
+
+
+ +
+
+ +

◆ AttitudeConverter() [8/9]

+ +
+
+ + + + + + + + +
mrs_lib::AttitudeConverter::AttitudeConverter (const tf2::Quaternion quaternion)
+
+ +

tf2::Quaternion constructor

+
Parameters
+ + +
quaterniontf2::Quaternion
+
+
+ +
+
+ +

◆ AttitudeConverter() [9/9]

+ +
+
+ + + + + + + + +
mrs_lib::AttitudeConverter::AttitudeConverter (const tf2::Matrix3x3 matrix)
+
+ +

tf2::Matrix3x3 constructor

+
Parameters
+ + +
quaterniontf2::Matrix3x3
+
+
+ +
+
+

Member Function Documentation

+ +

◆ getExtrinsicRPY()

+ +
+
+ + + + + + + +
std::tuple< double, double, double > mrs_lib::AttitudeConverter::getExtrinsicRPY ()
+
+ +

get the Roll, Pitch, Yaw angles in the Extrinsic convention. The same as the default AttitudeConverter assignment.

+
Returns
RPY
+ +
+
+ +

◆ getHeading()

+ +
+
+ + + + + + + + +
double mrs_lib::AttitudeConverter::getHeading (void )
+
+ +

get the angle of the rotated x-axis in the original XY plane, a.k.a

+
Returns
heading
+ +
+
+ +

◆ getHeadingRate()

+ +
+
+ + + + + + + + +
double mrs_lib::AttitudeConverter::getHeadingRate (const Vector3Converterattitude_rate)
+
+ +

get heading rate base on the orientation and body-based attitude rate

+
Parameters
+ + +
attitude_ratein the body frame
+
+
+
Returns
heading rate in the world
+ +
+
+ +

◆ getIntrinsicRPY()

+ +
+
+ + + + + + + +
std::tuple< double, double, double > mrs_lib::AttitudeConverter::getIntrinsicRPY ()
+
+ +

get the Roll, Pitch, Yaw angles in the Intrinsic convention

+
Returns
RPY
+ +
+
+ +

◆ getPitch()

+ +
+
+ + + + + + + + +
double mrs_lib::AttitudeConverter::getPitch (void )
+
+ +

get the pitch angle

+
Returns
pitch
+ +
+
+ +

◆ getRoll()

+ +
+
+ + + + + + + + +
double mrs_lib::AttitudeConverter::getRoll (void )
+
+ +

get the roll angle

+
Returns
roll
+ +
+
+ +

◆ getVectorX()

+ +
+
+ + + + + + + + +
Vector3Converter mrs_lib::AttitudeConverter::getVectorX (void )
+
+ +

get a unit vector pointing in the X direction

+
Returns
the vector
+ +
+
+ +

◆ getVectorY()

+ +
+
+ + + + + + + + +
Vector3Converter mrs_lib::AttitudeConverter::getVectorY (void )
+
+ +

get a unit vector pointing in the Y direction

+
Returns
the vector
+ +
+
+ +

◆ getVectorZ()

+ +
+
+ + + + + + + + +
Vector3Converter mrs_lib::AttitudeConverter::getVectorZ (void )
+
+ +

get a unit vector pointing in the Z direction

+
Returns
the vector
+ +
+
+ +

◆ getYaw()

+ +
+
+ + + + + + + + +
double mrs_lib::AttitudeConverter::getYaw (void )
+
+ +

get the yaw angle

+
Returns
yaw
+ +
+
+ +

◆ getYawRateIntrinsic()

+ +
+
+ + + + + + + + +
double mrs_lib::AttitudeConverter::getYawRateIntrinsic (const double & heading_rate)
+
+ +

get the intrinsic yaw rate from a heading rate

+
Parameters
+ + +
heading_rate
+
+
+
Returns
intrinsic yaw rate
+ +
+
+ +

◆ operator Eigen::AngleAxis< T >()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
mrs_lib::AttitudeConverter::operator Eigen::AngleAxis< T > () const
+
+inline
+
+ +

typecast to Eigen::AngleAxis

+
Template Parameters
+ + +
Tangle-axis base type
+
+
+
Returns
orientation in EulerAttitude
+ +
+
+ +

◆ operator Eigen::Quaternion< T >()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
mrs_lib::AttitudeConverter::operator Eigen::Quaternion< T > () const
+
+inline
+
+ +

typecast to EulerAttitude Eigen::Quaternion

+
Template Parameters
+ + +
Tquaternion base type
+
+
+
Returns
orientation in Eigen::Quaternion
+ +
+
+ +

◆ operator EulerAttitude()

+ +
+
+ + + + + + + +
mrs_lib::AttitudeConverter::operator EulerAttitude () const
+
+ +

typecast to EulerAttitude

+
Returns
orientation in EulerAttitude
+ +
+
+ +

◆ operator geometry_msgs::Quaternion()

+ +
+
+ + + + + + + +
mrs_lib::AttitudeConverter::operator geometry_msgs::Quaternion () const
+
+ +

typecast to geometry_msgs::Quaternion

+
Returns
orientation in geometry_msgs::Quaternion
+ +
+
+ +

◆ operator std::tuple< double &, double &, double & >()

+ +
+
+ + + + + + + +
mrs_lib::AttitudeConverter::operator std::tuple< double &, double &, double & > ()
+
+ +

typecase to tuple of Euler angles in extrinsic RPY

+
Returns
std::tuple of extrinsic RPY
+ +
+
+ +

◆ operator tf2::Matrix3x3()

+ +
+
+ + + + + + + +
mrs_lib::AttitudeConverter::operator tf2::Matrix3x3 () const
+
+ +

typecase to tf2::Matrix3x3

+
Returns
tf2::Matrix3x3 rotational matrix
+ +
+
+ +

◆ operator tf2::Quaternion()

+ +
+
+ + + + + + + +
mrs_lib::AttitudeConverter::operator tf2::Quaternion () const
+
+ +

typecast to tf2::Quaternion

+
Returns
orientation in tf2::Quaternion
+ +
+
+ +

◆ operator tf2::Transform()

+ +
+
+ + + + + + + +
mrs_lib::AttitudeConverter::operator tf2::Transform () const
+
+ +

typecase to tf2::Transform

+
Returns
tf2::Transform
+ +
+
+ +

◆ operator tf::Quaternion()

+ +
+
+ + + + + + + +
mrs_lib::AttitudeConverter::operator tf::Quaternion () const
+
+ +

typecast to tf::Quaternion

+
Returns
orientation in tf::Quaternion
+ +
+
+ +

◆ setHeading()

+ +
+
+ + + + + + + + +
AttitudeConverter mrs_lib::AttitudeConverter::setHeading (const double & heading)
+
+ +

Updates the heading of the current orientation by updating the intrinsic yaw.

+
Parameters
+ + +
newheading
+
+
+
Returns
the orientation
+ +
+
+ +

◆ setYaw()

+ +
+
+ + + + + + + + +
AttitudeConverter mrs_lib::AttitudeConverter::setYaw (const double & new_yaw)
+
+ +

Updates the extrinsic yaw of the current orientation.

+
Parameters
+ + +
newyaw
+
+
+
Returns
the orientation
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1AttitudeConverter.js b/classmrs__lib_1_1AttitudeConverter.js new file mode 100644 index 00000000..d67ef003 --- /dev/null +++ b/classmrs__lib_1_1AttitudeConverter.js @@ -0,0 +1,41 @@ +var classmrs__lib_1_1AttitudeConverter = +[ + [ "EulerFormatException", "structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException.html", "structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException" ], + [ "GetHeadingException", "structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException.html", "structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException" ], + [ "InvalidAttitudeException", "structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException.html", "structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException" ], + [ "MathErrorException", "structmrs__lib_1_1AttitudeConverter_1_1MathErrorException.html", "structmrs__lib_1_1AttitudeConverter_1_1MathErrorException" ], + [ "SetHeadingException", "structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException.html", "structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException" ], + [ "AttitudeConverter", "classmrs__lib_1_1AttitudeConverter.html#a1a98367c2a004a298a2026d883cfc0eb", null ], + [ "AttitudeConverter", "classmrs__lib_1_1AttitudeConverter.html#a134453cd539536eea199763467690483", null ], + [ "AttitudeConverter", "classmrs__lib_1_1AttitudeConverter.html#a9f00a180ebe802b8b7e30e08cc688f26", null ], + [ "AttitudeConverter", "classmrs__lib_1_1AttitudeConverter.html#a28987247a78e426e03eb37d51c7b6d82", null ], + [ "AttitudeConverter", "classmrs__lib_1_1AttitudeConverter.html#a15e411e1c06cd3af16d10f660656718b", null ], + [ "AttitudeConverter", "classmrs__lib_1_1AttitudeConverter.html#ad50e60f2d412b2253221c00fbbff2ead", null ], + [ "AttitudeConverter", "classmrs__lib_1_1AttitudeConverter.html#a0046963fb6f70e1ecc1d50c9778fec44", null ], + [ "AttitudeConverter", "classmrs__lib_1_1AttitudeConverter.html#a7d3224c3f9b32c2a9c65f63f5a2644ea", null ], + [ "AttitudeConverter", "classmrs__lib_1_1AttitudeConverter.html#a24d9d274eb16af01c3630ecb32065652", null ], + [ "get", "classmrs__lib_1_1AttitudeConverter.html#a9d4a90673d6e7046dbc4b2ce340b295a", null ], + [ "getExtrinsicRPY", "classmrs__lib_1_1AttitudeConverter.html#a0a9b9b0d146b4ccdc50c9a9037aec346", null ], + [ "getHeading", "classmrs__lib_1_1AttitudeConverter.html#a6efdbb896bca9d52abdafb2eec0daf48", null ], + [ "getHeadingRate", "classmrs__lib_1_1AttitudeConverter.html#ab3ac6086b34f743ac5e78249640eeddd", null ], + [ "getIntrinsicRPY", "classmrs__lib_1_1AttitudeConverter.html#abe03466ce1c2aefb74d402a3f1433693", null ], + [ "getPitch", "classmrs__lib_1_1AttitudeConverter.html#a599afad1265aaa6fd32d518e4de7817f", null ], + [ "getRoll", "classmrs__lib_1_1AttitudeConverter.html#a82b32b4b7ff4de5bcf78b168f0c3c569", null ], + [ "getVectorX", "classmrs__lib_1_1AttitudeConverter.html#a131f7ba8484bd0c7465594625d19ae89", null ], + [ "getVectorY", "classmrs__lib_1_1AttitudeConverter.html#a901ca23ee140e6d42027b242f0dfac8b", null ], + [ "getVectorZ", "classmrs__lib_1_1AttitudeConverter.html#a4853f4582b8af4f224726d15a18e9fbc", null ], + [ "getYaw", "classmrs__lib_1_1AttitudeConverter.html#ab2e8185898d05e5c2c9f7c7bf597f9a3", null ], + [ "getYawRateIntrinsic", "classmrs__lib_1_1AttitudeConverter.html#afa7a3ddc0e143fe90bd966a6ba9f2913", null ], + [ "operator Eigen::AngleAxis< T >", "classmrs__lib_1_1AttitudeConverter.html#a10847ba4ce35fa86efbe5933ba488183", null ], + [ "operator Eigen::Matrix3d", "classmrs__lib_1_1AttitudeConverter.html#a7edeee77361b5991b8eff3a135b25d43", null ], + [ "operator Eigen::Quaternion< T >", "classmrs__lib_1_1AttitudeConverter.html#a6db421976b5060c086f495f00edca314", null ], + [ "operator EulerAttitude", "classmrs__lib_1_1AttitudeConverter.html#a03ef9a1c10a9963e650fa217f0f04707", null ], + [ "operator geometry_msgs::Quaternion", "classmrs__lib_1_1AttitudeConverter.html#abc1686c5d27246a937c661f313ca13d0", null ], + [ "operator std::tuple< double &, double &, double & >", "classmrs__lib_1_1AttitudeConverter.html#a8f7e3a434632e7546149d64b2ab2e191", null ], + [ "operator tf2::Matrix3x3", "classmrs__lib_1_1AttitudeConverter.html#a123b85369560e858a9d3aba19a49227a", null ], + [ "operator tf2::Quaternion", "classmrs__lib_1_1AttitudeConverter.html#a4dd088014d1f15da217c960e8a9dbd6f", null ], + [ "operator tf2::Transform", "classmrs__lib_1_1AttitudeConverter.html#a09cd3459f52f9071db33c1ac7a5161de", null ], + [ "operator tf::Quaternion", "classmrs__lib_1_1AttitudeConverter.html#a7b6d71e47ec12e76f25823ad408c704c", null ], + [ "setHeading", "classmrs__lib_1_1AttitudeConverter.html#ac818b4e515d614d5d473be95b5ee9024", null ], + [ "setYaw", "classmrs__lib_1_1AttitudeConverter.html#a945e6c80d148df27897391bfd69c0505", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1BatchVisualizer-members.html b/classmrs__lib_1_1BatchVisualizer-members.html new file mode 100644 index 00000000..a1ad8a2f --- /dev/null +++ b/classmrs__lib_1_1BatchVisualizer-members.html @@ -0,0 +1,125 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::BatchVisualizer Member List
+
+
+ +

This is the complete list of members for mrs_lib::BatchVisualizer, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
addCone(const mrs_lib::geometry::Cone &cone, const double r=0.7, const double g=0.8, const double b=0.3, const double a=1.0, const bool filled=true, const bool capped=true, const int sides=DEFAULT_ELLIPSE_POINTS, const ros::Duration &timeout=ros::Duration(0))mrs_lib::BatchVisualizer
addCuboid(const mrs_lib::geometry::Cuboid &cuboid, const double r=0.5, const double g=0.5, const double b=0.0, const double a=1.0, const bool filled=true, const ros::Duration &timeout=ros::Duration(0))mrs_lib::BatchVisualizer
addCylinder(const mrs_lib::geometry::Cylinder &cylinder, const double r=0.7, const double g=0.8, const double b=0.3, const double a=1.0, const bool filled=true, const bool capped=true, const int sides=DEFAULT_ELLIPSE_POINTS, const ros::Duration &timeout=ros::Duration(0))mrs_lib::BatchVisualizer
addEllipse(const mrs_lib::geometry::Ellipse &ellipse, const double r=0.0, const double g=1.0, const double b=1.0, const double a=1.0, const bool filled=true, const int num_points=DEFAULT_ELLIPSE_POINTS, const ros::Duration &timeout=ros::Duration(0))mrs_lib::BatchVisualizer
addNullLine()mrs_lib::BatchVisualizer
addNullPoint()mrs_lib::BatchVisualizer
addNullTriangle()mrs_lib::BatchVisualizer
addPoint(const Eigen::Vector3d &point, const double r=0.0, const double g=1.0, const double b=0.3, const double a=1.0, const ros::Duration &timeout=ros::Duration(0))mrs_lib::BatchVisualizer
addRay(const mrs_lib::geometry::Ray &ray, const double r=1.0, const double g=0.0, const double b=0.0, const double a=1.0, const ros::Duration &timeout=ros::Duration(0))mrs_lib::BatchVisualizer
addRectangle(const mrs_lib::geometry::Rectangle &rect, const double r=0.5, const double g=0.5, const double b=0.0, const double a=1.0, const bool filled=true, const ros::Duration &timeout=ros::Duration(0))mrs_lib::BatchVisualizer
addTrajectory(const mrs_msgs::TrajectoryReference &traj, const double r=0.3, const double g=1.0, const double b=0.3, const double a=1.0, const bool filled=true, const ros::Duration &timeout=ros::Duration(0))mrs_lib::BatchVisualizer
addTriangle(const mrs_lib::geometry::Triangle &tri, const double r=0.5, const double g=0.5, const double b=0.0, const double a=1.0, const bool filled=true, const ros::Duration &timeout=ros::Duration(0))mrs_lib::BatchVisualizer
BatchVisualizer()mrs_lib::BatchVisualizer
BatchVisualizer(ros::NodeHandle &nh, std::string marker_topic_name, std::string parent_frame)mrs_lib::BatchVisualizer
clearBuffers()mrs_lib::BatchVisualizer
clearVisuals()mrs_lib::BatchVisualizer
publish()mrs_lib::BatchVisualizer
setLinesScale(const double scale)mrs_lib::BatchVisualizer
setParentFrame(const std::string parent_frame)mrs_lib::BatchVisualizer
setPointsScale(const double scale)mrs_lib::BatchVisualizer
~BatchVisualizer()mrs_lib::BatchVisualizer
+
+ + + + diff --git a/classmrs__lib_1_1BatchVisualizer.html b/classmrs__lib_1_1BatchVisualizer.html new file mode 100644 index 00000000..0ff89028 --- /dev/null +++ b/classmrs__lib_1_1BatchVisualizer.html @@ -0,0 +1,984 @@ + + + + + + + +mrs_lib: mrs_lib::BatchVisualizer Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::BatchVisualizer Class Reference
+
+
+ +

library for drawing large amounts of geometric objects in RVIZ at the same time + More...

+ +

#include <batch_visualizer.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

BatchVisualizer ()
 dummy constructor
 
~BatchVisualizer ()
 destructor
 
 BatchVisualizer (ros::NodeHandle &nh, std::string marker_topic_name, std::string parent_frame)
 constructor to initialize the visualizer More...
 
void addPoint (const Eigen::Vector3d &point, const double r=0.0, const double g=1.0, const double b=0.3, const double a=1.0, const ros::Duration &timeout=ros::Duration(0))
 add a point to the buffer More...
 
void addRay (const mrs_lib::geometry::Ray &ray, const double r=1.0, const double g=0.0, const double b=0.0, const double a=1.0, const ros::Duration &timeout=ros::Duration(0))
 add a ray to the buffer More...
 
void addTriangle (const mrs_lib::geometry::Triangle &tri, const double r=0.5, const double g=0.5, const double b=0.0, const double a=1.0, const bool filled=true, const ros::Duration &timeout=ros::Duration(0))
 add a triangle to the buffer More...
 
void addRectangle (const mrs_lib::geometry::Rectangle &rect, const double r=0.5, const double g=0.5, const double b=0.0, const double a=1.0, const bool filled=true, const ros::Duration &timeout=ros::Duration(0))
 add a rectangle to the buffer More...
 
void addCuboid (const mrs_lib::geometry::Cuboid &cuboid, const double r=0.5, const double g=0.5, const double b=0.0, const double a=1.0, const bool filled=true, const ros::Duration &timeout=ros::Duration(0))
 add a cuboid to the buffer More...
 
void addEllipse (const mrs_lib::geometry::Ellipse &ellipse, const double r=0.0, const double g=1.0, const double b=1.0, const double a=1.0, const bool filled=true, const int num_points=DEFAULT_ELLIPSE_POINTS, const ros::Duration &timeout=ros::Duration(0))
 add an ellipse to the buffer More...
 
void addCylinder (const mrs_lib::geometry::Cylinder &cylinder, const double r=0.7, const double g=0.8, const double b=0.3, const double a=1.0, const bool filled=true, const bool capped=true, const int sides=DEFAULT_ELLIPSE_POINTS, const ros::Duration &timeout=ros::Duration(0))
 add a cylinder to the buffer More...
 
void addCone (const mrs_lib::geometry::Cone &cone, const double r=0.7, const double g=0.8, const double b=0.3, const double a=1.0, const bool filled=true, const bool capped=true, const int sides=DEFAULT_ELLIPSE_POINTS, const ros::Duration &timeout=ros::Duration(0))
 add a cone to the buffer More...
 
void addTrajectory (const mrs_msgs::TrajectoryReference &traj, const double r=0.3, const double g=1.0, const double b=0.3, const double a=1.0, const bool filled=true, const ros::Duration &timeout=ros::Duration(0))
 add a trajectory to the buffer More...
 
+void addNullPoint ()
 helper function for adding an invisible point to the object buffer
 
+void addNullLine ()
 helper function for adding an invisible line to the object buffer
 
+void addNullTriangle ()
 helper function for adding an invisible triangle to the buffer
 
void setPointsScale (const double scale)
 set the scale of all points More...
 
void setParentFrame (const std::string parent_frame)
 set the parent frame_id More...
 
void setLinesScale (const double scale)
 set the thickness of all lines More...
 
+void clearBuffers ()
 remove all objects from the buffer
 
+void clearVisuals ()
 publishes an empty message. Removes all objects drawn onto the scene, but keeps them in buffer
 
+void publish ()
 publish the visual markers ROS message and populates it with buffer content
 
+

Detailed Description

+

library for drawing large amounts of geometric objects in RVIZ at the same time

+

Constructor & Destructor Documentation

+ +

◆ BatchVisualizer()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::BatchVisualizer::BatchVisualizer (ros::NodeHandle & nh,
std::string marker_topic_name,
std::string parent_frame 
)
+
+ +

constructor to initialize the visualizer

+
Parameters
+ + + + +
nhROS node to connect our publisher to ROS
marker_topic_namename of the topic on which the markers will be published
parent_framename of the frame to which the markers will be linked
+
+
+ +
+
+

Member Function Documentation

+ +

◆ addCone()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::BatchVisualizer::addCone (const mrs_lib::geometry::Conecone,
const double r = 0.7,
const double g = 0.8,
const double b = 0.3,
const double a = 1.0,
const bool filled = true,
const bool capped = true,
const int sides = DEFAULT_ELLIPSE_POINTS,
const ros::Duration & timeout = ros::Duration(0) 
)
+
+ +

add a cone to the buffer

+
Parameters
+ + + + + + + + + + +
conecone to be added
rred color in range <0,1>
ggreen color in range <0,1>
bblue color in range <0,1>
aalpha in range <0,1> (0 is fully transparent)
filledbool to set fill. True = face visible, False = outline visible
cappedbool to set caps on/off. True = cap drawn, False = base cap missing
sidesnumber of points to approximate the round shape
timeouttime in seconds after which the object should be removed from buffer
+
+
+ +
+
+ +

◆ addCuboid()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::BatchVisualizer::addCuboid (const mrs_lib::geometry::Cuboidcuboid,
const double r = 0.5,
const double g = 0.5,
const double b = 0.0,
const double a = 1.0,
const bool filled = true,
const ros::Duration & timeout = ros::Duration(0) 
)
+
+ +

add a cuboid to the buffer

+
Parameters
+ + + + + + + + +
cuboidcuboid to be added
rred color in range <0,1>
ggreen color in range <0,1>
bblue color in range <0,1>
aalpha in range <0,1> (0 is fully transparent)
filledbool to set fill. True = face visible, False = outline visible
timeouttime in seconds after which the object should be removed from buffer
+
+
+ +
+
+ +

◆ addCylinder()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::BatchVisualizer::addCylinder (const mrs_lib::geometry::Cylindercylinder,
const double r = 0.7,
const double g = 0.8,
const double b = 0.3,
const double a = 1.0,
const bool filled = true,
const bool capped = true,
const int sides = DEFAULT_ELLIPSE_POINTS,
const ros::Duration & timeout = ros::Duration(0) 
)
+
+ +

add a cylinder to the buffer

+
Parameters
+ + + + + + + + + + +
cylindercylinder to be added
rred color in range <0,1>
ggreen color in range <0,1>
bblue color in range <0,1>
aalpha in range <0,1> (0 is fully transparent)
filledbool to set fill. True = face visible, False = outline visible
cappedbool to set caps on/off. True = caps drawn, False = hollow cylinder
sidesnumber of points to approximate the round shape
timeouttime in seconds after which the object should be removed from buffer
+
+
+ +
+
+ +

◆ addEllipse()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::BatchVisualizer::addEllipse (const mrs_lib::geometry::Ellipseellipse,
const double r = 0.0,
const double g = 1.0,
const double b = 1.0,
const double a = 1.0,
const bool filled = true,
const int num_points = DEFAULT_ELLIPSE_POINTS,
const ros::Duration & timeout = ros::Duration(0) 
)
+
+ +

add an ellipse to the buffer

+
Parameters
+ + + + + + + + + +
ellipseellipse to be added
rred color in range <0,1>
ggreen color in range <0,1>
bblue color in range <0,1>
aalpha in range <0,1> (0 is fully transparent)
filledbool to set fill. True = face visible, False = outline visible
num_pointsnumber of points to approximate the round shape
timeouttime in seconds after which the object should be removed from buffer
+
+
+ +
+
+ +

◆ addPoint()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::BatchVisualizer::addPoint (const Eigen::Vector3d & point,
const double r = 0.0,
const double g = 1.0,
const double b = 0.3,
const double a = 1.0,
const ros::Duration & timeout = ros::Duration(0) 
)
+
+ +

add a point to the buffer

+
Parameters
+ + + + + + + +
pointcoordinates of the point
rred color in range <0,1>
ggreen color in range <0,1>
bblue color in range <0,1>
aalpha in range <0,1> (0 is fully transparent)
timeouttime in seconds after which the object should be removed from buffer
+
+
+ +
+
+ +

◆ addRay()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::BatchVisualizer::addRay (const mrs_lib::geometry::Rayray,
const double r = 1.0,
const double g = 0.0,
const double b = 0.0,
const double a = 1.0,
const ros::Duration & timeout = ros::Duration(0) 
)
+
+ +

add a ray to the buffer

+
Parameters
+ + + + + + + +
rayray to be added
rred color in range <0,1>
ggreen color in range <0,1>
bblue color in range <0,1>
aalpha in range <0,1> (0 is fully transparent)
timeouttime in seconds after which the object should be removed from buffer
+
+
+ +
+
+ +

◆ addRectangle()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::BatchVisualizer::addRectangle (const mrs_lib::geometry::Rectanglerect,
const double r = 0.5,
const double g = 0.5,
const double b = 0.0,
const double a = 1.0,
const bool filled = true,
const ros::Duration & timeout = ros::Duration(0) 
)
+
+ +

add a rectangle to the buffer

+
Parameters
+ + + + + + + + +
rectrectangle to be added
rred color in range <0,1>
ggreen color in range <0,1>
bblue color in range <0,1>
aalpha in range <0,1> (0 is fully transparent)
filledbool to set fill. True = face visible, False = outline visible
timeouttime in seconds after which the object should be removed from buffer
+
+
+ +
+
+ +

◆ addTrajectory()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::BatchVisualizer::addTrajectory (const mrs_msgs::TrajectoryReference & traj,
const double r = 0.3,
const double g = 1.0,
const double b = 0.3,
const double a = 1.0,
const bool filled = true,
const ros::Duration & timeout = ros::Duration(0) 
)
+
+ +

add a trajectory to the buffer

+
Parameters
+ + + + + + + + +
trajtrajectory reference to be added
rred color in range <0,1>
ggreen color in range <0,1>
bblue color in range <0,1>
aalpha in range <0,1> (0 is fully transparent)
filledbool to set fill. True = continuous line, False = only visualize points
timeouttime in seconds after which the object should be removed from buffer
+
+
+ +
+
+ +

◆ addTriangle()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::BatchVisualizer::addTriangle (const mrs_lib::geometry::Triangletri,
const double r = 0.5,
const double g = 0.5,
const double b = 0.0,
const double a = 1.0,
const bool filled = true,
const ros::Duration & timeout = ros::Duration(0) 
)
+
+ +

add a triangle to the buffer

+
Parameters
+ + + + + + + + +
tritriangle to be added
rred color in range <0,1>
ggreen color in range <0,1>
bblue color in range <0,1>
aalpha in range <0,1> (0 is fully transparent)
filledbool to set fill. True = face visible, False = outline visible
timeouttime in seconds after which the object should be removed from buffer
+
+
+ +
+
+ +

◆ setLinesScale()

+ +
+
+ + + + + + + + +
void mrs_lib::BatchVisualizer::setLinesScale (const double scale)
+
+ +

set the thickness of all lines

+
Parameters
+ + +
scale
+
+
+ +
+
+ +

◆ setParentFrame()

+ +
+
+ + + + + + + + +
void mrs_lib::BatchVisualizer::setParentFrame (const std::string parent_frame)
+
+ +

set the parent frame_id

+
Parameters
+ + +
parent_frame
+
+
+ +
+
+ +

◆ setPointsScale()

+ +
+
+ + + + + + + + +
void mrs_lib::BatchVisualizer::setPointsScale (const double scale)
+
+ +

set the scale of all points

+
Parameters
+ + +
scale
+
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1BatchVisualizer.js b/classmrs__lib_1_1BatchVisualizer.js new file mode 100644 index 00000000..3b2a136b --- /dev/null +++ b/classmrs__lib_1_1BatchVisualizer.js @@ -0,0 +1,24 @@ +var classmrs__lib_1_1BatchVisualizer = +[ + [ "BatchVisualizer", "classmrs__lib_1_1BatchVisualizer.html#a2a426c62b02dec6430362920db0d6c80", null ], + [ "~BatchVisualizer", "classmrs__lib_1_1BatchVisualizer.html#a83a3baa46f7a3c22079a1d80aaed4459", null ], + [ "BatchVisualizer", "classmrs__lib_1_1BatchVisualizer.html#a3a857713e5516bec553b5380eaa423f8", null ], + [ "addCone", "classmrs__lib_1_1BatchVisualizer.html#a937c831f9caac50bc84f671c3260f1a7", null ], + [ "addCuboid", "classmrs__lib_1_1BatchVisualizer.html#ab5aba26d50dbe7fe22cd4c0549a99051", null ], + [ "addCylinder", "classmrs__lib_1_1BatchVisualizer.html#abd2f9394a4cb63da0478ad1621ed7e79", null ], + [ "addEllipse", "classmrs__lib_1_1BatchVisualizer.html#ac03c515ed44761d88f43a2af446c26b7", null ], + [ "addNullLine", "classmrs__lib_1_1BatchVisualizer.html#a7f4d6d1ae967d6a5c15351969d9e4592", null ], + [ "addNullPoint", "classmrs__lib_1_1BatchVisualizer.html#a7556fd856cd4be7d0bdea9a4c0c6e1fc", null ], + [ "addNullTriangle", "classmrs__lib_1_1BatchVisualizer.html#a6a844cdffd1474570988e8d1a87126cb", null ], + [ "addPoint", "classmrs__lib_1_1BatchVisualizer.html#ac9c76c18ef837dc7b87cf20f5e2511b9", null ], + [ "addRay", "classmrs__lib_1_1BatchVisualizer.html#ae3c2f932f592a0e61da8e51643cc686a", null ], + [ "addRectangle", "classmrs__lib_1_1BatchVisualizer.html#a5a68c474ce18a4fccbc8f14066267d73", null ], + [ "addTrajectory", "classmrs__lib_1_1BatchVisualizer.html#a5dad7ddef02d959da350385544b98063", null ], + [ "addTriangle", "classmrs__lib_1_1BatchVisualizer.html#ae2cf4d2a0578711a060f7f398179a677", null ], + [ "clearBuffers", "classmrs__lib_1_1BatchVisualizer.html#a317a263d7a57b88805a3d264976b4c9f", null ], + [ "clearVisuals", "classmrs__lib_1_1BatchVisualizer.html#aacda752bbfd192279da0fe15f001b0bb", null ], + [ "publish", "classmrs__lib_1_1BatchVisualizer.html#a3b7e6b602bdaf7d42e1c48ea511aa93b", null ], + [ "setLinesScale", "classmrs__lib_1_1BatchVisualizer.html#af36566a7f7267a2cdb167a533e4cb856", null ], + [ "setParentFrame", "classmrs__lib_1_1BatchVisualizer.html#a284c94fdfec8f359704d92f9ef79cd74", null ], + [ "setPointsScale", "classmrs__lib_1_1BatchVisualizer.html#ac613c22b8ed79cd169636e6aafacf2dc", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1DKF-members.html b/classmrs__lib_1_1DKF-members.html new file mode 100644 index 00000000..7071ab54 --- /dev/null +++ b/classmrs__lib_1_1DKF-members.html @@ -0,0 +1,141 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::DKF Member List
+
+
+ +

This is the complete list of members for mrs_lib::DKF, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Amrs_lib::LKF< 3, -1, 2 >
A_t typedefmrs_lib::DKF
Bmrs_lib::LKF< 3, -1, 2 >
B_t typedefmrs_lib::DKF
Base_class typedefmrs_lib::DKF
computeKalmanGain(const statecov_t &sc,[[maybe_unused]] const z_t &z, const R_t &R, const H_t &H) const (defined in mrs_lib::LKF< 3, -1, 2 >)mrs_lib::LKF< 3, -1, 2 >inlineprotectedvirtual
correct(const statecov_t &sc, const z_t &z, const R_t &R) const overridemrs_lib::LKF< 3, -1, 2 >inlinevirtual
mrs_lib::KalmanFilter::correct(const statecov_t &sc, const z_t &z, const R_t &R) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
correction_impl(const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const (defined in mrs_lib::LKF< 3, -1, 2 >)mrs_lib::LKF< 3, -1, 2 >inlineprotected
correctLine(const statecov_t &sc, const pt3_t &line_origin, const vec3_t &line_direction, const double line_variance) constmrs_lib::DKFinlinevirtual
covariance_predict(const A_t &A, const P_t &P, const Q_t &Q, const double dt) (defined in mrs_lib::LKF< 3, -1, 2 >)mrs_lib::LKF< 3, -1, 2 >inlineprotectedstatic
DKF()mrs_lib::DKFinline
DKF(const A_t &A, const B_t &B)mrs_lib::DKFinline
Hmrs_lib::LKF< 3, -1, 2 >
H_t typedefmrs_lib::DKF
invert_W(R_t W) (defined in mrs_lib::LKF< 3, -1, 2 >)mrs_lib::LKF< 3, -1, 2 >inlineprotectedstatic
K_t typedefmrs_lib::DKF
LKF()mrs_lib::LKF< 3, -1, 2 >inline
LKF(const A_t &A, const B_t &B, const H_t &H)mrs_lib::LKF< 3, -1, 2 >inline
mmrs_lib::DKFstatic
mat2_t typedef (defined in mrs_lib::DKF)mrs_lib::DKF
mat3_t typedef (defined in mrs_lib::DKF)mrs_lib::DKF
nmrs_lib::DKFstatic
pmrs_lib::DKFstatic
P_t typedefmrs_lib::DKF
predict(const statecov_t &sc, const u_t &u, const Q_t &Q,[[maybe_unused]] double dt) const overridemrs_lib::LKF< 3, -1, 2 >inlinevirtual
mrs_lib::KalmanFilter::predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
pt3_t typedef (defined in mrs_lib::DKF)mrs_lib::DKF
Q_t typedefmrs_lib::DKF
R_t typedefmrs_lib::DKF
state_predict(const A_t &A, const x_t &x,[[maybe_unused]] const B_t &B,[[maybe_unused]] const u_t &u) (defined in mrs_lib::LKF< 3, -1, 2 >)mrs_lib::LKF< 3, -1, 2 >inlineprotectedstatic
state_predict(const A_t &A, const x_t &x, const B_t &B, const u_t &u) (defined in mrs_lib::LKF< 3, -1, 2 >)mrs_lib::LKF< 3, -1, 2 >inlineprotectedstatic
statecov_t typedefmrs_lib::DKF
u_t typedefmrs_lib::DKF
vec3_t typedef (defined in mrs_lib::DKF)mrs_lib::DKF
x_t typedefmrs_lib::DKF
z_t typedefmrs_lib::DKF
+
+ + + + diff --git a/classmrs__lib_1_1DKF.html b/classmrs__lib_1_1DKF.html new file mode 100644 index 00000000..60253697 --- /dev/null +++ b/classmrs__lib_1_1DKF.html @@ -0,0 +1,532 @@ + + + + + + + +mrs_lib: mrs_lib::DKF Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::DKF Class Reference
+
+
+ +

Implementation of the Degenerate measurement Linear Kalman filter. + More...

+ +

#include <dkf.h>

+
+ + Inheritance diagram for mrs_lib::DKF:
+
+
+ +
+ + Collaboration diagram for mrs_lib::DKF:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using Base_class = LKF< n, m, p >
 Base class of this class.
 
+using x_t = typename Base_class::x_t
 State vector type $n \times 1$.
 
+using u_t = typename Base_class::u_t
 Input vector type $m \times 1$.
 
+using z_t = typename Base_class::z_t
 Measurement vector type $p \times 1$.
 
+using P_t = typename Base_class::P_t
 State uncertainty covariance matrix type $n \times n$.
 
+using R_t = typename Base_class::R_t
 Measurement noise covariance matrix type $p \times p$.
 
+using Q_t = typename Base_class::Q_t
 Process noise covariance matrix type $n \times n$.
 
+using statecov_t = typename Base_class::statecov_t
 Helper struct for passing around the state and its covariance in one variable.
 
+typedef Eigen::Matrix< double, n, nA_t
 System transition matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, n, mB_t
 Input to state mapping matrix type $n \times m$.
 
+typedef Eigen::Matrix< double, p, nH_t
 State to measurement mapping matrix type $p \times n$.
 
+typedef Eigen::Matrix< double, n, pK_t
 Kalman gain matrix type $n \times p$.
 
+using mat2_t = Eigen::Matrix< double, 2, 2 >
 
+using mat3_t = Eigen::Matrix< double, 3, 3 >
 
+using pt3_t = mrs_lib::geometry::vec3_t
 
+using vec3_t = mrs_lib::geometry::vec3_t
 
- Public Types inherited from mrs_lib::LKF< 3, -1, 2 >
+using Base_class = KalmanFilter< n, m, p >
 Base class of this class.
 
+using x_t = typename Base_class::x_t
 State vector type $n \times 1$.
 
+using u_t = typename Base_class::u_t
 Input vector type $m \times 1$.
 
+using z_t = typename Base_class::z_t
 Measurement vector type $p \times 1$.
 
+using P_t = typename Base_class::P_t
 State uncertainty covariance matrix type $n \times n$.
 
+using R_t = typename Base_class::R_t
 Measurement noise covariance matrix type $p \times p$.
 
+using Q_t = typename Base_class::Q_t
 Process noise covariance matrix type $n \times n$.
 
+using statecov_t = typename Base_class::statecov_t
 Helper struct for passing around the state and its covariance in one variable.
 
+typedef Eigen::Matrix< double, n, nA_t
 System transition matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, n, mB_t
 Input to state mapping matrix type $n \times m$.
 
+typedef Eigen::Matrix< double, p, nH_t
 State to measurement mapping matrix type $p \times n$.
 
+typedef Eigen::Matrix< double, n, pK_t
 Kalman gain matrix type $n \times p$.
 
- Public Types inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
+typedef Eigen::Matrix< double, n, 1 > x_t
 State vector type $n \times 1$.
 
+typedef Eigen::Matrix< double, m, 1 > u_t
 Input vector type $m \times 1$.
 
+typedef Eigen::Matrix< double, p, 1 > z_t
 Measurement vector type $p \times 1$.
 
+typedef Eigen::Matrix< double, n, nP_t
 State uncertainty covariance matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, p, pR_t
 Measurement noise covariance matrix type $p \times p$.
 
+typedef Eigen::Matrix< double, n, nQ_t
 Process noise covariance matrix type $n \times n$.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 DKF ()
 Convenience default constructor. More...
 
 DKF (const A_t &A, const B_t &B)
 The main constructor. More...
 
virtual statecov_t correctLine (const statecov_t &sc, const pt3_t &line_origin, const vec3_t &line_direction, const double line_variance) const
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
- Public Member Functions inherited from mrs_lib::LKF< 3, -1, 2 >
 LKF ()
 Convenience default constructor. More...
 
 LKF (const A_t &A, const B_t &B, const H_t &H)
 The main constructor. More...
 
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const override
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q,[[maybe_unused]] double dt) const override
 Applies the prediction (time) step of the Kalman filter. More...
 
- Public Member Functions inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const =0
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0
 Applies the prediction (time) step of the Kalman filter. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

+static constexpr int n = Base_class::n
 Length of the state vector of the system.
 
+static constexpr int m = Base_class::m
 Length of the input vector of the system.
 
+static constexpr int p = Base_class::p
 Length of the measurement vector of the system.
 
- Static Public Attributes inherited from mrs_lib::LKF< 3, -1, 2 >
+static constexpr int n
 Length of the state vector of the system.
 
+static constexpr int m
 Length of the input vector of the system.
 
+static constexpr int p
 Length of the measurement vector of the system.
 
- Static Public Attributes inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
+static const int n = n_states
 Length of the state vector of the system.
 
+static const int m = n_inputs
 Length of the input vector of the system.
 
+static const int p = n_measurements
 Length of the measurement vector of the system.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from mrs_lib::LKF< 3, -1, 2 >
+A_t A
 The system transition matrix $n \times n$.
 
+B_t B
 The input to state mapping matrix $n \times m$.
 
+H_t H
 The state to measurement mapping matrix $p \times n$.
 
- Protected Member Functions inherited from mrs_lib::LKF< 3, -1, 2 >
+virtual K_t computeKalmanGain (const statecov_t &sc,[[maybe_unused]] const z_t &z, const R_t &R, const H_t &H) const
 
+statecov_t ::type correction_impl (const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const
 
- Static Protected Member Functions inherited from mrs_lib::LKF< 3, -1, 2 >
+static P_t covariance_predict (const A_t &A, const P_t &P, const Q_t &Q, const double dt)
 
+static std::enable_if< check==0, x_t >::type state_predict (const A_t &A, const x_t &x,[[maybe_unused]] const B_t &B,[[maybe_unused]] const u_t &u)
 
+static std::enable_if< check !=0, x_t >::type state_predict (const A_t &A, const x_t &x, const B_t &B, const u_t &u)
 
+static R_t invert_W (R_t W)
 
+

Detailed Description

+

Implementation of the Degenerate measurement Linear Kalman filter.

+
Template Parameters
+ + + + +
n_statesnumber of states of the system (length of the $ \mathbf{x} $ vector).
n_inputsnumber of inputs of the system (length of the $ \mathbf{u} $ vector).
n_measurementsnumber of measurements of the system (length of the $ \mathbf{z} $ vector).
+
+
+

Constructor & Destructor Documentation

+ +

◆ DKF() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
mrs_lib::DKF::DKF ()
+
+inline
+
+ +

Convenience default constructor.

+

This constructor should not be used if applicable. If used, the main constructor has to be called afterwards, before using this class, otherwise the LKF object is invalid (not initialized).

+ +
+
+ +

◆ DKF() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
mrs_lib::DKF::DKF (const A_tA,
const B_tB 
)
+
+inline
+
+ +

The main constructor.

+
Parameters
+ + + + +
AThe state transition matrix.
BThe input to state mapping transition matrix.
HThe state to measurement mapping transition matrix.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ correctLine()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual statecov_t mrs_lib::DKF::correctLine (const statecov_tsc,
const pt3_t & line_origin,
const vec3_t & line_direction,
const double line_variance 
) const
+
+inlinevirtual
+
+ +

Applies the correction (update, measurement, data) step of the Kalman filter.

+

This method applies the linear Kalman filter correction step to the state and covariance passed in sc using the measurement z and measurement noise R. The parameter param is ignored in this implementation. The updated state and covariance after the correction step is returned.

+
Parameters
+ + + + +
scThe state and covariance to which the correction step is to be applied.
zThe measurement vector to be used for correction.
RThe measurement noise covariance matrix to be used for correction.
+
+
+
Returns
The state and covariance after the correction update.
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1DKF.js b/classmrs__lib_1_1DKF.js new file mode 100644 index 00000000..e4a9417f --- /dev/null +++ b/classmrs__lib_1_1DKF.js @@ -0,0 +1,22 @@ +var classmrs__lib_1_1DKF = +[ + [ "A_t", "classmrs__lib_1_1DKF.html#a1d615e5b5aef4c5a00de9b42eef43c1b", null ], + [ "B_t", "classmrs__lib_1_1DKF.html#a5de2bdb0aa87e268361e19206849bb22", null ], + [ "Base_class", "classmrs__lib_1_1DKF.html#ad7e6756be6a89592151d092f20d19811", null ], + [ "H_t", "classmrs__lib_1_1DKF.html#aaee9d5c96d921fa7854f24460edf58ab", null ], + [ "K_t", "classmrs__lib_1_1DKF.html#a87d3b7863fbd0b392f9c831fcaf8e345", null ], + [ "mat2_t", "classmrs__lib_1_1DKF.html#a3f7ce3b4407d784fcaf95f43b7685202", null ], + [ "mat3_t", "classmrs__lib_1_1DKF.html#ac3b0581c4ada64f5bfaf8b59514ad06c", null ], + [ "P_t", "classmrs__lib_1_1DKF.html#aa351bed9f3bdac26c6ed2526a5b2ac01", null ], + [ "pt3_t", "classmrs__lib_1_1DKF.html#a3104e749a86237eb1193b25d975ac68d", null ], + [ "Q_t", "classmrs__lib_1_1DKF.html#a59afcc2127ecd2a9dba8a53ca505f97a", null ], + [ "R_t", "classmrs__lib_1_1DKF.html#a6c1a5e6a6cdcb52271774b566957f948", null ], + [ "statecov_t", "classmrs__lib_1_1DKF.html#a1408b975fe2e4bd3fc5009c80d43f06b", null ], + [ "u_t", "classmrs__lib_1_1DKF.html#a5998af081256d469dbd4ac5a1d4d7fd7", null ], + [ "vec3_t", "classmrs__lib_1_1DKF.html#ade9f06e25f9c50c5c7c19628afefd454", null ], + [ "x_t", "classmrs__lib_1_1DKF.html#a094cf9bcb768de6db47e4c2703bede20", null ], + [ "z_t", "classmrs__lib_1_1DKF.html#ad919f1d7a6f5d8be7361a8336aa6fd85", null ], + [ "DKF", "classmrs__lib_1_1DKF.html#a75bd345a8f4e3856d35d23d3b85b12cd", null ], + [ "DKF", "classmrs__lib_1_1DKF.html#a68c0d27c7ae1897c6b54cea9e75b95ec", null ], + [ "correctLine", "classmrs__lib_1_1DKF.html#a7e5d887496dea33a60b8cf2a0acc5fec", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1DKF__coll__graph.map b/classmrs__lib_1_1DKF__coll__graph.map new file mode 100644 index 00000000..9aed0a8c --- /dev/null +++ b/classmrs__lib_1_1DKF__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmrs__lib_1_1DKF__coll__graph.md5 b/classmrs__lib_1_1DKF__coll__graph.md5 new file mode 100644 index 00000000..7707cd62 --- /dev/null +++ b/classmrs__lib_1_1DKF__coll__graph.md5 @@ -0,0 +1 @@ +492c4fc945b482dde86c495ac5b2677b \ No newline at end of file diff --git a/classmrs__lib_1_1DKF__coll__graph.png b/classmrs__lib_1_1DKF__coll__graph.png new file mode 100644 index 00000000..c4aacf26 Binary files /dev/null and b/classmrs__lib_1_1DKF__coll__graph.png differ diff --git a/classmrs__lib_1_1DKF__inherit__graph.map b/classmrs__lib_1_1DKF__inherit__graph.map new file mode 100644 index 00000000..9aed0a8c --- /dev/null +++ b/classmrs__lib_1_1DKF__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmrs__lib_1_1DKF__inherit__graph.md5 b/classmrs__lib_1_1DKF__inherit__graph.md5 new file mode 100644 index 00000000..7707cd62 --- /dev/null +++ b/classmrs__lib_1_1DKF__inherit__graph.md5 @@ -0,0 +1 @@ +492c4fc945b482dde86c495ac5b2677b \ No newline at end of file diff --git a/classmrs__lib_1_1DKF__inherit__graph.png b/classmrs__lib_1_1DKF__inherit__graph.png new file mode 100644 index 00000000..c4aacf26 Binary files /dev/null and b/classmrs__lib_1_1DKF__inherit__graph.png differ diff --git a/classmrs__lib_1_1DynamicPublisher-members.html b/classmrs__lib_1_1DynamicPublisher-members.html new file mode 100644 index 00000000..dc56352a --- /dev/null +++ b/classmrs__lib_1_1DynamicPublisher-members.html @@ -0,0 +1,107 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::DynamicPublisher Member List
+
+
+ +

This is the complete list of members for mrs_lib::DynamicPublisher, including all inherited members.

+ + + + +
DynamicPublisher()mrs_lib::DynamicPublisher
DynamicPublisher(const ros::NodeHandle &nh)mrs_lib::DynamicPublisher
publish(const std::string name, const T &msg)mrs_lib::DynamicPublisher
+
+ + + + diff --git a/classmrs__lib_1_1DynamicPublisher.html b/classmrs__lib_1_1DynamicPublisher.html new file mode 100644 index 00000000..8875488d --- /dev/null +++ b/classmrs__lib_1_1DynamicPublisher.html @@ -0,0 +1,213 @@ + + + + + + + +mrs_lib: mrs_lib::DynamicPublisher Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::DynamicPublisher Class Reference
+
+
+ +

A helper class for easy publishing of ROS messages for debugging purposes. + More...

+ +

#include <dynamic_publisher.h>

+ + + + + + + + + + + + +

+Public Member Functions

 DynamicPublisher ()
 A no-parameter constructor. More...
 
 DynamicPublisher (const ros::NodeHandle &nh)
 The main constructor. More...
 
template<class T >
void publish (const std::string name, const T &msg)
 Publishes a message to a topic, advertising the topic if necessary. More...
 
+

Detailed Description

+

A helper class for easy publishing of ROS messages for debugging purposes.

+

This class enables you to just call the publish() method with a topic name and a message without the need to advertise the topic.

+
Note
This class should only be used for debugging and not for regular publishing as it introduces some overhead.
+
Examples
dynamic_publisher/example.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ DynamicPublisher() [1/2]

+ +
+
+ + + + + + + +
mrs_lib::DynamicPublisher::DynamicPublisher ()
+
+ +

A no-parameter constructor.

+

This overload will use a ros::NodeHandle with default arguments for advertising new topics, so remappings, namespaces etc. will be ignored.

+ +
+
+ +

◆ DynamicPublisher() [2/2]

+ +
+
+ + + + + + + + +
mrs_lib::DynamicPublisher::DynamicPublisher (const ros::NodeHandle & nh)
+
+ +

The main constructor.

+

This overload uses the ros::NodeHandle that you provided for advertising new topics. The recommended way of constructing a DynamicPublisher.

+ +
+
+

Member Function Documentation

+ +

◆ publish()

+ +
+
+
+template<class T >
+ + + + + + + + + + + + + + + + + + +
void mrs_lib::DynamicPublisher::publish (const std::string name,
const T & msg 
)
+
+ +

Publishes a message to a topic, advertising the topic if necessary.

+

The topic is advertised with the type of the first message published to it. If you try to publish a different type of message on the topic, it will be ignored.

+
Warning
Take care to always publish the same message type to the topic to avoid being spammed with errors.
+
Examples
dynamic_publisher/example.cpp.
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1DynamicPublisher.js b/classmrs__lib_1_1DynamicPublisher.js new file mode 100644 index 00000000..3ecb5f6e --- /dev/null +++ b/classmrs__lib_1_1DynamicPublisher.js @@ -0,0 +1,6 @@ +var classmrs__lib_1_1DynamicPublisher = +[ + [ "DynamicPublisher", "classmrs__lib_1_1DynamicPublisher.html#a2c671b4d99d4bb6bde12e7a1d8717687", null ], + [ "DynamicPublisher", "classmrs__lib_1_1DynamicPublisher.html#a6a17d49f4d7203f8b8693c6ceb2fb1d9", null ], + [ "publish", "classmrs__lib_1_1DynamicPublisher.html#a57946b630bcf2892658f754ecb6b735d", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1DynamicReconfigureMgr-members.html b/classmrs__lib_1_1DynamicReconfigureMgr-members.html new file mode 100644 index 00000000..a9bffc85 --- /dev/null +++ b/classmrs__lib_1_1DynamicReconfigureMgr-members.html @@ -0,0 +1,113 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::DynamicReconfigureMgr< ConfigType > Member List
+
+
+ +

This is the complete list of members for mrs_lib::DynamicReconfigureMgr< ConfigType >, including all inherited members.

+ + + + + + + + + + +
config (defined in mrs_lib::DynamicReconfigureMgr< ConfigType >)mrs_lib::DynamicReconfigureMgr< ConfigType >
DynamicReconfigureMgr(const ros::NodeHandle &nh=ros::NodeHandle("~"), bool print_values=true, std::string node_name=std::string(), const callback_t &user_callback={}) (defined in mrs_lib::DynamicReconfigureMgr< ConfigType >)mrs_lib::DynamicReconfigureMgr< ConfigType >inline
DynamicReconfigureMgr(const ros::NodeHandle &nh, std::string node_name) (defined in mrs_lib::DynamicReconfigureMgr< ConfigType >)mrs_lib::DynamicReconfigureMgr< ConfigType >inline
DynamicReconfigureMgr(const ros::NodeHandle &nh, const char *node_name) (defined in mrs_lib::DynamicReconfigureMgr< ConfigType >)mrs_lib::DynamicReconfigureMgr< ConfigType >inline
DynamicReconfigureMgr(std::string node_name) (defined in mrs_lib::DynamicReconfigureMgr< ConfigType >)mrs_lib::DynamicReconfigureMgr< ConfigType >inline
loaded_successfully() (defined in mrs_lib::DynamicReconfigureMgr< ConfigType >)mrs_lib::DynamicReconfigureMgr< ConfigType >inline
publish_descriptions() (defined in mrs_lib::DynamicReconfigureMgr< ConfigType >)mrs_lib::DynamicReconfigureMgr< ConfigType >inline
update_config(const ConfigType &cfg) (defined in mrs_lib::DynamicReconfigureMgr< ConfigType >)mrs_lib::DynamicReconfigureMgr< ConfigType >inline
update_config() (defined in mrs_lib::DynamicReconfigureMgr< ConfigType >)mrs_lib::DynamicReconfigureMgr< ConfigType >inline
+
+ + + + diff --git a/classmrs__lib_1_1DynamicReconfigureMgr.html b/classmrs__lib_1_1DynamicReconfigureMgr.html new file mode 100644 index 00000000..b6da9b6b --- /dev/null +++ b/classmrs__lib_1_1DynamicReconfigureMgr.html @@ -0,0 +1,150 @@ + + + + + + + +mrs_lib: mrs_lib::DynamicReconfigureMgr< ConfigType > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::DynamicReconfigureMgr< ConfigType > Class Template Reference
+
+
+ +

#include <dynamic_reconfigure_mgr.h>

+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

DynamicReconfigureMgr (const ros::NodeHandle &nh=ros::NodeHandle("~"), bool print_values=true, std::string node_name=std::string(), const callback_t &user_callback={})
 
DynamicReconfigureMgr (const ros::NodeHandle &nh, std::string node_name)
 
DynamicReconfigureMgr (const ros::NodeHandle &nh, const char *node_name)
 
DynamicReconfigureMgr (std::string node_name)
 
+void update_config (const ConfigType &cfg)
 
+void update_config ()
 
+void publish_descriptions ()
 
+bool loaded_successfully ()
 
+ + + +

+Public Attributes

+ConfigType config
 
+

Detailed Description

+

template<typename ConfigType>
+class mrs_lib::DynamicReconfigureMgr< ConfigType >

+ +

DynamicReconfigureMgr CLASS //{

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1DynamicReconfigureMgr.js b/classmrs__lib_1_1DynamicReconfigureMgr.js new file mode 100644 index 00000000..8d223731 --- /dev/null +++ b/classmrs__lib_1_1DynamicReconfigureMgr.js @@ -0,0 +1,12 @@ +var classmrs__lib_1_1DynamicReconfigureMgr = +[ + [ "DynamicReconfigureMgr", "classmrs__lib_1_1DynamicReconfigureMgr.html#a2f7e6a43035ce3066bf01e42cab37030", null ], + [ "DynamicReconfigureMgr", "classmrs__lib_1_1DynamicReconfigureMgr.html#ad97f2a0f3083911c830514dedb9ac15e", null ], + [ "DynamicReconfigureMgr", "classmrs__lib_1_1DynamicReconfigureMgr.html#a490a18abe58b19610203a48f7682b377", null ], + [ "DynamicReconfigureMgr", "classmrs__lib_1_1DynamicReconfigureMgr.html#a43dfdd75290a853fd1c53944d787c391", null ], + [ "loaded_successfully", "classmrs__lib_1_1DynamicReconfigureMgr.html#aa0368ef6c49fcf909296290612b09d4f", null ], + [ "publish_descriptions", "classmrs__lib_1_1DynamicReconfigureMgr.html#a1020e218921f8cbdca345a6c71c684d6", null ], + [ "update_config", "classmrs__lib_1_1DynamicReconfigureMgr.html#ad0c89b6bab776a28647ccb9c11b08f60", null ], + [ "update_config", "classmrs__lib_1_1DynamicReconfigureMgr.html#a47d76d8eb2dc7969f80f5840d72b0b2e", null ], + [ "config", "classmrs__lib_1_1DynamicReconfigureMgr.html#a67b3f78c6b5f53a23c735c758fac302a", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1EulerAttitude-members.html b/classmrs__lib_1_1EulerAttitude-members.html new file mode 100644 index 00000000..883c64c1 --- /dev/null +++ b/classmrs__lib_1_1EulerAttitude-members.html @@ -0,0 +1,108 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::EulerAttitude Member List
+
+
+ +

This is the complete list of members for mrs_lib::EulerAttitude, including all inherited members.

+ + + + + +
EulerAttitude(const double &roll, const double &pitch, const double &yaw)mrs_lib::EulerAttitude
pitch(void) constmrs_lib::EulerAttitude
roll(void) constmrs_lib::EulerAttitude
yaw(void) constmrs_lib::EulerAttitude
+
+ + + + diff --git a/classmrs__lib_1_1EulerAttitude.html b/classmrs__lib_1_1EulerAttitude.html new file mode 100644 index 00000000..c0af83c4 --- /dev/null +++ b/classmrs__lib_1_1EulerAttitude.html @@ -0,0 +1,241 @@ + + + + + + + +mrs_lib: mrs_lib::EulerAttitude Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::EulerAttitude Class Reference
+
+
+ +

A small class for storing the Euler angles. + More...

+ +

#include <attitude_converter.h>

+ + + + + + + + + + + + + + +

+Public Member Functions

 EulerAttitude (const double &roll, const double &pitch, const double &yaw)
 A simple class for storing the Euler angles. More...
 
double roll (void) const
 get the roll angle More...
 
double pitch (void) const
 get the pitch angle More...
 
double yaw (void) const
 get the yaw angle More...
 
+

Detailed Description

+

A small class for storing the Euler angles.

+

Constructor & Destructor Documentation

+ +

◆ EulerAttitude()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::EulerAttitude::EulerAttitude (const double & roll,
const double & pitch,
const double & yaw 
)
+
+ +

A simple class for storing the Euler angles.

+
Parameters
+ + + + +
roll
pitch
yaw
+
+
+ +
+
+

Member Function Documentation

+ +

◆ pitch()

+ +
+
+ + + + + + + + +
double mrs_lib::EulerAttitude::pitch (void ) const
+
+ +

get the pitch angle

+
Returns
pitch
+ +
+
+ +

◆ roll()

+ +
+
+ + + + + + + + +
double mrs_lib::EulerAttitude::roll (void ) const
+
+ +

get the roll angle

+
Returns
roll
+ +
+
+ +

◆ yaw()

+ +
+
+ + + + + + + + +
double mrs_lib::EulerAttitude::yaw (void ) const
+
+ +

get the yaw angle

+
Returns
yaw
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1EulerAttitude.js b/classmrs__lib_1_1EulerAttitude.js new file mode 100644 index 00000000..f9e7ce16 --- /dev/null +++ b/classmrs__lib_1_1EulerAttitude.js @@ -0,0 +1,7 @@ +var classmrs__lib_1_1EulerAttitude = +[ + [ "EulerAttitude", "classmrs__lib_1_1EulerAttitude.html#ac4da09217c4956043801841737da8521", null ], + [ "pitch", "classmrs__lib_1_1EulerAttitude.html#abbed482a509d21505dfd1e608cd362fe", null ], + [ "roll", "classmrs__lib_1_1EulerAttitude.html#a7d62c8be0341555c3e03e124a617d765", null ], + [ "yaw", "classmrs__lib_1_1EulerAttitude.html#ab29c3b0fb567107c23eff485e8f2578d", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1IirFilter-members.html b/classmrs__lib_1_1IirFilter-members.html new file mode 100644 index 00000000..6e00a9f0 --- /dev/null +++ b/classmrs__lib_1_1IirFilter-members.html @@ -0,0 +1,106 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::IirFilter Member List
+
+
+ +

This is the complete list of members for mrs_lib::IirFilter, including all inherited members.

+ + + +
IirFilter(const std::vector< double > &a, const std::vector< double > &b) (defined in mrs_lib::IirFilter)mrs_lib::IirFilter
iterate(const double &input) (defined in mrs_lib::IirFilter)mrs_lib::IirFilter
+
+ + + + diff --git a/classmrs__lib_1_1IirFilter.html b/classmrs__lib_1_1IirFilter.html new file mode 100644 index 00000000..24043d54 --- /dev/null +++ b/classmrs__lib_1_1IirFilter.html @@ -0,0 +1,119 @@ + + + + + + + +mrs_lib: mrs_lib::IirFilter Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::IirFilter Class Reference
+
+
+ + + + + + +

+Public Member Functions

IirFilter (const std::vector< double > &a, const std::vector< double > &b)
 
+double iterate (const double &input)
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1IirFilter.js b/classmrs__lib_1_1IirFilter.js new file mode 100644 index 00000000..524005b8 --- /dev/null +++ b/classmrs__lib_1_1IirFilter.js @@ -0,0 +1,5 @@ +var classmrs__lib_1_1IirFilter = +[ + [ "IirFilter", "classmrs__lib_1_1IirFilter.html#a675dd4ebe1bf007f019a703cd049412e", null ], + [ "iterate", "classmrs__lib_1_1IirFilter.html#aa304784bf3e3150e89fa1266e35863f9", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1ImagePublisher-members.html b/classmrs__lib_1_1ImagePublisher-members.html new file mode 100644 index 00000000..70a069a8 --- /dev/null +++ b/classmrs__lib_1_1ImagePublisher-members.html @@ -0,0 +1,106 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::ImagePublisher Member List
+
+
+ +

This is the complete list of members for mrs_lib::ImagePublisher, including all inherited members.

+ + + +
ImagePublisher(ros::NodeHandlePtr nh_) (defined in mrs_lib::ImagePublisher)mrs_lib::ImagePublisher
publish(std::string topic_name, double throttle_period, cv::Mat &image, bool bgr_order=false) (defined in mrs_lib::ImagePublisher)mrs_lib::ImagePublisher
+
+ + + + diff --git a/classmrs__lib_1_1ImagePublisher.html b/classmrs__lib_1_1ImagePublisher.html new file mode 100644 index 00000000..3f9b2dc6 --- /dev/null +++ b/classmrs__lib_1_1ImagePublisher.html @@ -0,0 +1,119 @@ + + + + + + + +mrs_lib: mrs_lib::ImagePublisher Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::ImagePublisher Class Reference
+
+
+ + + + + + +

+Public Member Functions

ImagePublisher (ros::NodeHandlePtr nh_)
 
+bool publish (std::string topic_name, double throttle_period, cv::Mat &image, bool bgr_order=false)
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1ImagePublisher.js b/classmrs__lib_1_1ImagePublisher.js new file mode 100644 index 00000000..4cd8d500 --- /dev/null +++ b/classmrs__lib_1_1ImagePublisher.js @@ -0,0 +1,5 @@ +var classmrs__lib_1_1ImagePublisher = +[ + [ "ImagePublisher", "classmrs__lib_1_1ImagePublisher.html#a00ec635f8012086fc7df35d06bb1d4b5", null ], + [ "publish", "classmrs__lib_1_1ImagePublisher.html#ad95770e8691002b0443b73806a9fe76a", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1JLKF-members.html b/classmrs__lib_1_1JLKF-members.html new file mode 100644 index 00000000..252a7160 --- /dev/null +++ b/classmrs__lib_1_1JLKF-members.html @@ -0,0 +1,131 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases > Member List
+
+
+ +

This is the complete list of members for mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
A_t typedefmrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
B_t typedefmrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
Base_class typedef (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
C_t typedefmrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
computeKalmanGain(const statecov_t &sc, [[maybe_unused]] const z_t &z, const R_t &R, const H_t &H, double &nis, H_t &H_out, const double &nis_thr, const double &nis_avg_thr) const (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >inlineprotectedvirtual
correct(const statecov_t &sc, const z_t &z, const R_t &R) const overridemrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >inlinevirtual
mrs_lib::KalmanFilterAloamGarm::correct(const statecov_t &sc, const z_t &z, const R_t &R) const =0mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >pure virtual
correction_impl(const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >inlineprotected
D_t typedefmrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
generateA_t typedef (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
generateB_t typedef (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
H_t typedefmrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
invert_W(R_t W) (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >inlineprotectedstatic
JLKF(const generateA_t &generateA, const generateB_t &generateB, const H_t &H, const ros::NodeHandle &nh, const double &nis_thr, const double &nis_avg_thr)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >inline
K_t typedefmrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
m (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >static
n (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >static
p (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >static
P_t typedef (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const overridemrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >inlinevirtual
mrs_lib::KalmanFilterAloamGarm::predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >pure virtual
Q_t typedef (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
R_t typedef (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
statecov_t typedef (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
u_t typedef (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
x_t typedef (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
z_t typedef (defined in mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >)mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >
+
+ + + + diff --git a/classmrs__lib_1_1JLKF.html b/classmrs__lib_1_1JLKF.html new file mode 100644 index 00000000..6c83d0d9 --- /dev/null +++ b/classmrs__lib_1_1JLKF.html @@ -0,0 +1,477 @@ + + + + + + + +mrs_lib: mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases > Class Template Reference
+
+
+
+ + Inheritance diagram for mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >:
+
+
+ +
+ + Collaboration diagram for mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >:
+
+
+ + + + + + +

+Classes

struct  inverse_exception
 This exception is thrown when taking the inverse of a matrix fails. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using Base_class = KalmanFilterAloamGarm< n, m, p >
 
+using x_t = typename Base_class::x_t
 
+using u_t = typename Base_class::u_t
 
+using z_t = typename Base_class::z_t
 
+using P_t = typename Base_class::P_t
 
+using R_t = typename Base_class::R_t
 
+using statecov_t = typename Base_class::statecov_t
 
+using Q_t = typename Base_class::Q_t
 
+typedef Eigen::Matrix< double, n, n > A_t
 System transition matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, n, m > B_t
 Input to state mapping matrix type $n \times m$.
 
+typedef Eigen::Matrix< double, p, n > H_t
 State to measurement mapping matrix type $p \times n$.
 
+typedef Eigen::Matrix< double, n, p > K_t
 Kalman gain matrix type $n \times p$.
 
+typedef Eigen::Matrix< double, p, p > C_t
 correntropy gain $p \times p$
 
+typedef Eigen::Matrix< double, n, n > D_t
 D $n \times n$.
 
+using generateA_t = std::function< A_t(double)>
 
+using generateB_t = std::function< B_t(double)>
 
- Public Types inherited from mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >
+typedef Eigen::Matrix< double, n, 1 > x_t
 State vector type $n \times 1$.
 
+typedef Eigen::Matrix< double, m, 1 > u_t
 Input vector type $m \times 1$.
 
+typedef Eigen::Matrix< double, p, 1 > z_t
 Measurement vector type $p \times 1$.
 
+typedef Eigen::Matrix< double, n, nP_t
 State uncertainty covariance matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, p, pR_t
 Measurement noise covariance matrix type $p \times p$.
 
+typedef Eigen::Matrix< double, n, nQ_t
 Process noise covariance matrix type $n \times n$.
 
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 JLKF (const generateA_t &generateA, const generateB_t &generateB, const H_t &H, const ros::NodeHandle &nh, const double &nis_thr, const double &nis_avg_thr)
 The main constructor. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const override
 Applies the prediction (time) step of the Kalman filter. More...
 
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const override
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
- Public Member Functions inherited from mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const =0
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0
 Applies the prediction (time) step of the Kalman filter. More...
 
+ + + + + + + + + + + + + + + + + +

+Static Public Attributes

+static const int n = n_states
 
+static const int m = n_inputs
 
+static const int p = n_measurements
 
- Static Public Attributes inherited from mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >
+static const int n = n_states
 Length of the state vector of the system.
 
+static const int m = n_inputs
 Length of the input vector of the system.
 
+static const int p = n_measurements
 Length of the measurement vector of the system.
 
+ + + + + +

+Protected Member Functions

+virtual K_t computeKalmanGain (const statecov_t &sc, [[maybe_unused]] const z_t &z, const R_t &R, const H_t &H, double &nis, H_t &H_out, const double &nis_thr, const double &nis_avg_thr) const
 
+statecov_t ::type correction_impl (const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const
 
+ + + +

+Static Protected Member Functions

+static R_t invert_W (R_t W)
 
+

Constructor & Destructor Documentation

+ +

◆ JLKF()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements, int n_biases>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >::JLKF (const generateA_t & generateA,
const generateB_t & generateB,
const H_tH,
const ros::NodeHandle & nh,
const double & nis_thr,
const double & nis_avg_thr 
)
+
+inline
+
+ +

The main constructor.

+
Parameters
+ + + + +
generateAa function, which returns the state transition matrix A based on the time difference dt.
generateBa function, which returns the input to state mapping matrix B based on the time difference dt.
Hthe state to measurement mapping matrix.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ correct()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements, int n_biases>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual statecov_t mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >::correct (const statecov_t & sc,
const z_t & z,
const R_t & R 
) const
+
+inlineoverridevirtual
+
+ +

Applies the correction (update, measurement, data) step of the Kalman filter.

+

This method applies the linear Kalman filter correction step to the state and covariance passed in sc using the measurement z and measurement noise R. The updated state and covariance after the correction step is returned.

+
Parameters
+ + + + +
scThe state and covariance to which the correction step is to be applied.
zThe measurement vector to be used for correction.
RThe measurement noise covariance matrix to be used for correction.
+
+
+
Returns
The state and covariance after the correction update.
+ +
+
+ +

◆ predict()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements, int n_biases>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual statecov_t mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >::predict (const statecov_t & sc,
const u_t & u,
const Q_t & Q,
double dt 
) const
+
+inlineoverridevirtual
+
+ +

Applies the prediction (time) step of the Kalman filter.

+

This method applies the linear Kalman filter prediction step to the state and covariance passed in sc using the input u and process noise Q. The process noise covariance Q is scaled by the dt parameter. The updated state and covariance after the prediction step is returned.

+
Parameters
+ + + + + +
scThe state and covariance to which the prediction step is to be applied.
uThe input vector to be used for prediction.
QThe process noise covariance matrix to be used for prediction.
dtUsed to scale the process noise covariance Q and to generate the state transition and input to state mapping matrices A and \B using the functions, passed in the object's constructor.
+
+
+
Returns
The state and covariance after the prediction step.
+
Note
Note that the dt parameter is used to scale the process noise covariance Q and to generate the system matrices #A or #B using the functions, passed in the constructor!
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1JLKF.js b/classmrs__lib_1_1JLKF.js new file mode 100644 index 00000000..dd31242c --- /dev/null +++ b/classmrs__lib_1_1JLKF.js @@ -0,0 +1,25 @@ +var classmrs__lib_1_1JLKF = +[ + [ "inverse_exception", "structmrs__lib_1_1JLKF_1_1inverse__exception.html", "structmrs__lib_1_1JLKF_1_1inverse__exception" ], + [ "A_t", "classmrs__lib_1_1JLKF.html#a72ceb375903022d0dfc396b6f1ead479", null ], + [ "B_t", "classmrs__lib_1_1JLKF.html#ac8971eebc826cd62aadd45d4b64d216c", null ], + [ "Base_class", "classmrs__lib_1_1JLKF.html#a7a362bd5a3713025f631d2694d63e52d", null ], + [ "C_t", "classmrs__lib_1_1JLKF.html#af34d34f55cb8804bd4e873a16c9e9a08", null ], + [ "D_t", "classmrs__lib_1_1JLKF.html#ac047c1625da963988acfc47edc200a57", null ], + [ "generateA_t", "classmrs__lib_1_1JLKF.html#ac35cdcce67580306048f3faf848c52ce", null ], + [ "generateB_t", "classmrs__lib_1_1JLKF.html#aa346736b0780db11650afa85c8837fdc", null ], + [ "H_t", "classmrs__lib_1_1JLKF.html#a7599ec962b434fe92534a58d48cdfacb", null ], + [ "K_t", "classmrs__lib_1_1JLKF.html#a20be98f26b355640d078f196f9495fd5", null ], + [ "P_t", "classmrs__lib_1_1JLKF.html#a554f05f2ecc9d93ce5c24a351fd92ffb", null ], + [ "Q_t", "classmrs__lib_1_1JLKF.html#afdb5e239ba807f51c141a66e0c1531a2", null ], + [ "R_t", "classmrs__lib_1_1JLKF.html#a34b9b5334801adc3f6a658bfa7767528", null ], + [ "statecov_t", "classmrs__lib_1_1JLKF.html#a62e33a1002c24ac5624faf8bede53606", null ], + [ "u_t", "classmrs__lib_1_1JLKF.html#a583b079513c03b057857d6a81c023de1", null ], + [ "x_t", "classmrs__lib_1_1JLKF.html#a13187c4d74326b888098a956811b9dc3", null ], + [ "z_t", "classmrs__lib_1_1JLKF.html#a2ff6765f3b9e0960932433e861222a10", null ], + [ "JLKF", "classmrs__lib_1_1JLKF.html#a0c21f3599fe8ccfb1164ee204a0ae606", null ], + [ "computeKalmanGain", "classmrs__lib_1_1JLKF.html#a06fc93782bb0f77f5f5d3400e785d729", null ], + [ "correct", "classmrs__lib_1_1JLKF.html#a6aa1475ecb42a4ee97e8d7e93cb5c523", null ], + [ "correction_impl", "classmrs__lib_1_1JLKF.html#a0a877719d7fb1bcf4fd03e063eaea3d2", null ], + [ "predict", "classmrs__lib_1_1JLKF.html#acb856c6a2d7378bc6abd46af99efe580", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1JLKF__coll__graph.map b/classmrs__lib_1_1JLKF__coll__graph.map new file mode 100644 index 00000000..01e911d5 --- /dev/null +++ b/classmrs__lib_1_1JLKF__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1JLKF__coll__graph.md5 b/classmrs__lib_1_1JLKF__coll__graph.md5 new file mode 100644 index 00000000..bab53702 --- /dev/null +++ b/classmrs__lib_1_1JLKF__coll__graph.md5 @@ -0,0 +1 @@ +921d466054faada3c50ed70a6984c77a \ No newline at end of file diff --git a/classmrs__lib_1_1JLKF__coll__graph.png b/classmrs__lib_1_1JLKF__coll__graph.png new file mode 100644 index 00000000..a440d02f Binary files /dev/null and b/classmrs__lib_1_1JLKF__coll__graph.png differ diff --git a/classmrs__lib_1_1JLKF__inherit__graph.map b/classmrs__lib_1_1JLKF__inherit__graph.map new file mode 100644 index 00000000..01e911d5 --- /dev/null +++ b/classmrs__lib_1_1JLKF__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1JLKF__inherit__graph.md5 b/classmrs__lib_1_1JLKF__inherit__graph.md5 new file mode 100644 index 00000000..bab53702 --- /dev/null +++ b/classmrs__lib_1_1JLKF__inherit__graph.md5 @@ -0,0 +1 @@ +921d466054faada3c50ed70a6984c77a \ No newline at end of file diff --git a/classmrs__lib_1_1JLKF__inherit__graph.png b/classmrs__lib_1_1JLKF__inherit__graph.png new file mode 100644 index 00000000..a440d02f Binary files /dev/null and b/classmrs__lib_1_1JLKF__inherit__graph.png differ diff --git a/classmrs__lib_1_1KalmanFilter-members.html b/classmrs__lib_1_1KalmanFilter-members.html new file mode 100644 index 00000000..727d2824 --- /dev/null +++ b/classmrs__lib_1_1KalmanFilter-members.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements > Member List
+
+
+ +

This is the complete list of members for mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >, including all inherited members.

+ + + + + + + + + + + + +
correct(const statecov_t &sc, const z_t &z, const R_t &R) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
mmrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >static
nmrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >static
pmrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >static
P_t typedefmrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
Q_t typedefmrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
R_t typedefmrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
u_t typedefmrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
x_t typedefmrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
z_t typedefmrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
+
+ + + + diff --git a/classmrs__lib_1_1KalmanFilter.html b/classmrs__lib_1_1KalmanFilter.html new file mode 100644 index 00000000..5591cf9a --- /dev/null +++ b/classmrs__lib_1_1KalmanFilter.html @@ -0,0 +1,327 @@ + + + + + + + +mrs_lib: mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements > Class Template Referenceabstract
+
+
+ +

This abstract class defines common interfaces and types for a generic Kalman filter. + More...

+ +

#include <kalman_filter.h>

+
+ + Inheritance diagram for mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >:
+
+
+ + + + + + +

+Classes

struct  statecov_t
 Helper struct for passing around the state and its covariance in one variable. More...
 
+ + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef Eigen::Matrix< double, n, 1 > x_t
 State vector type $n \times 1$.
 
+typedef Eigen::Matrix< double, m, 1 > u_t
 Input vector type $m \times 1$.
 
+typedef Eigen::Matrix< double, p, 1 > z_t
 Measurement vector type $p \times 1$.
 
+typedef Eigen::Matrix< double, n, nP_t
 State uncertainty covariance matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, p, pR_t
 Measurement noise covariance matrix type $p \times p$.
 
+typedef Eigen::Matrix< double, n, nQ_t
 Process noise covariance matrix type $n \times n$.
 
+ + + + + + + +

+Public Member Functions

virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const =0
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0
 Applies the prediction (time) step of the Kalman filter. More...
 
+ + + + + + + + + + +

+Static Public Attributes

+static const int n = n_states
 Length of the state vector of the system.
 
+static const int m = n_inputs
 Length of the input vector of the system.
 
+static const int p = n_measurements
 Length of the measurement vector of the system.
 
+

Detailed Description

+

template<int n_states, int n_inputs, int n_measurements>
+class mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >

+ +

This abstract class defines common interfaces and types for a generic Kalman filter.

+
Template Parameters
+ + + + +
n_statesnumber of states of the system (length of the $ \mathbf{x} $ vector).
n_inputsnumber of inputs of the system (length of the $ \mathbf{u} $ vector).
n_measurementsnumber of measurements of the system (length of the $ \mathbf{z} $ vector).
+
+
+

Member Function Documentation

+ +

◆ correct()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual statecov_t mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >::correct (const statecov_tsc,
const z_tz,
const R_tR 
) const
+
+pure virtual
+
+ +

Applies the correction (update, measurement, data) step of the Kalman filter.

+

This method applies the correction step to the state and covariance passed in sc using the measurement z and measurement noise R. An optional parameter param may be used by some implementations, but it is usually ignored. The updated state and covariance after the correction step is returned.

+
Parameters
+ + + + +
scThe state and covariance to which the correction step is to be applied.
zThe measurement vector to be used for correction.
RThe measurement noise covariance matrix to be used for correction.
+
+
+
Returns
The state and covariance after the correction update.
+ +
+
+ +

◆ predict()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual statecov_t mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >::predict (const statecov_tsc,
const u_tu,
const Q_tQ,
double dt 
) const
+
+pure virtual
+
+ +

Applies the prediction (time) step of the Kalman filter.

+

This method applies the prediction step to the state and covariance passed in sc using the input u and process noise Q. The state and covariance are updated by dt into the future, if applicable to the implementation. An optional parameter param may be used by some implementations, but it is usually ignored. The updated state and covariance after the prediction step is returned.

+
Parameters
+ + + + + +
scThe state and covariance to which the prediction step is to be applied.
uThe input vector to be used for prediction.
QThe process noise covariance matrix to be used for prediction.
dtThe time step for the prediction update (the state and covariance will be predicted by dt into the future).
+
+
+
Returns
The state and covariance after the prediction step.
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1KalmanFilter.js b/classmrs__lib_1_1KalmanFilter.js new file mode 100644 index 00000000..475a9915 --- /dev/null +++ b/classmrs__lib_1_1KalmanFilter.js @@ -0,0 +1,12 @@ +var classmrs__lib_1_1KalmanFilter = +[ + [ "statecov_t", "structmrs__lib_1_1KalmanFilter_1_1statecov__t.html", "structmrs__lib_1_1KalmanFilter_1_1statecov__t" ], + [ "P_t", "classmrs__lib_1_1KalmanFilter.html#a8f5e50ea6668129218bd4113f4ffdf6f", null ], + [ "Q_t", "classmrs__lib_1_1KalmanFilter.html#ab2c5ddabe3fc919334595ec1e535c848", null ], + [ "R_t", "classmrs__lib_1_1KalmanFilter.html#a1e4c8aa79cfcea707876d85950132450", null ], + [ "u_t", "classmrs__lib_1_1KalmanFilter.html#ad92ac4f280e849986554bc593e5ab96e", null ], + [ "x_t", "classmrs__lib_1_1KalmanFilter.html#a5b8f47081daf208496a19a4364e6509c", null ], + [ "z_t", "classmrs__lib_1_1KalmanFilter.html#a0825f38a6a4ddc522239bb7bf6279737", null ], + [ "correct", "classmrs__lib_1_1KalmanFilter.html#a66c1e0d2e496f304a4f6166e7b894aac", null ], + [ "predict", "classmrs__lib_1_1KalmanFilter.html#a7c8e64828a78d1a680d1ef467633d9d5", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1KalmanFilterAloamGarm-members.html b/classmrs__lib_1_1KalmanFilterAloamGarm-members.html new file mode 100644 index 00000000..f40164be --- /dev/null +++ b/classmrs__lib_1_1KalmanFilterAloamGarm-members.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements > Member List
+
+
+ +

This is the complete list of members for mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >, including all inherited members.

+ + + + + + + + + + + + +
correct(const statecov_t &sc, const z_t &z, const R_t &R) const =0mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >pure virtual
mmrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >static
nmrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >static
pmrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >static
P_t typedefmrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >
predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >pure virtual
Q_t typedefmrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >
R_t typedefmrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >
u_t typedefmrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >
x_t typedefmrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >
z_t typedefmrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >
+
+ + + + diff --git a/classmrs__lib_1_1KalmanFilterAloamGarm.html b/classmrs__lib_1_1KalmanFilterAloamGarm.html new file mode 100644 index 00000000..ce807dd7 --- /dev/null +++ b/classmrs__lib_1_1KalmanFilterAloamGarm.html @@ -0,0 +1,318 @@ + + + + + + + +mrs_lib: mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements > Class Template Referenceabstract
+
+
+ +

This abstract class defines common interfaces and types for a generic Kalman filter. + More...

+ +

#include <kalman_filter_aloamgarm.h>

+
+ + Inheritance diagram for mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >:
+
+
+ + + + + + +

+Classes

struct  statecov_t
 Helper struct for passing around the state and its covariance in one variable. More...
 
+ + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef Eigen::Matrix< double, n, 1 > x_t
 State vector type $n \times 1$.
 
+typedef Eigen::Matrix< double, m, 1 > u_t
 Input vector type $m \times 1$.
 
+typedef Eigen::Matrix< double, p, 1 > z_t
 Measurement vector type $p \times 1$.
 
+typedef Eigen::Matrix< double, n, nP_t
 State uncertainty covariance matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, p, pR_t
 Measurement noise covariance matrix type $p \times p$.
 
+typedef Eigen::Matrix< double, n, nQ_t
 Process noise covariance matrix type $n \times n$.
 
+ + + + + + + +

+Public Member Functions

virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const =0
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0
 Applies the prediction (time) step of the Kalman filter. More...
 
+ + + + + + + + + + +

+Static Public Attributes

+static const int n = n_states
 Length of the state vector of the system.
 
+static const int m = n_inputs
 Length of the input vector of the system.
 
+static const int p = n_measurements
 Length of the measurement vector of the system.
 
+

Detailed Description

+

template<int n_states, int n_inputs, int n_measurements>
+class mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >

+ +

This abstract class defines common interfaces and types for a generic Kalman filter.

+
Template Parameters
+ + + + +
n_statesnumber of states of the system (length of the $ \mathbf{x} $ vector).
n_inputsnumber of inputs of the system (length of the $ \mathbf{u} $ vector).
n_measurementsnumber of measurements of the system (length of the $ \mathbf{z} $ vector).
+
+
+

Member Function Documentation

+ +

◆ correct()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual statecov_t mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >::correct (const statecov_tsc,
const z_tz,
const R_tR 
) const
+
+pure virtual
+
+ +

Applies the correction (update, measurement, data) step of the Kalman filter.

+

This method applies the correction step to the state and covariance passed in sc using the measurement z and measurement noise R. An optional parameter param may be used by some implementations, but it is usually ignored. The updated state and covariance after the correction step is returned.

+
Parameters
+ + + + +
scThe state and covariance to which the correction step is to be applied.
zThe measurement vector to be used for correction.
RThe measurement noise covariance matrix to be used for correction.
+
+
+
Returns
The state and covariance after the correction update.
+ +
+
+ +

◆ predict()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual statecov_t mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >::predict (const statecov_tsc,
const u_tu,
const Q_tQ,
double dt 
) const
+
+pure virtual
+
+ +

Applies the prediction (time) step of the Kalman filter.

+

This method applies the prediction step to the state and covariance passed in sc using the input u and process noise Q. The state and covariance are updated by dt into the future, if applicable to the implementation. An optional parameter param may be used by some implementations, but it is usually ignored. The updated state and covariance after the prediction step is returned.

+
Parameters
+ + + + + +
scThe state and covariance to which the prediction step is to be applied.
uThe input vector to be used for prediction.
QThe process noise covariance matrix to be used for prediction.
dtThe time step for the prediction update (the state and covariance will be predicted by dt into the future).
+
+
+
Returns
The state and covariance after the prediction step.
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1KalmanFilterAloamGarm.js b/classmrs__lib_1_1KalmanFilterAloamGarm.js new file mode 100644 index 00000000..ae589e5a --- /dev/null +++ b/classmrs__lib_1_1KalmanFilterAloamGarm.js @@ -0,0 +1,12 @@ +var classmrs__lib_1_1KalmanFilterAloamGarm = +[ + [ "statecov_t", "structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html", "structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t" ], + [ "P_t", "classmrs__lib_1_1KalmanFilterAloamGarm.html#a9b8488ef81812059a366fcc2e92e04f6", null ], + [ "Q_t", "classmrs__lib_1_1KalmanFilterAloamGarm.html#ab9efcd795fc6c47ef94c20f9ff9547dc", null ], + [ "R_t", "classmrs__lib_1_1KalmanFilterAloamGarm.html#ab6bf1e91bfeb633b08038f54b2b5d0fa", null ], + [ "u_t", "classmrs__lib_1_1KalmanFilterAloamGarm.html#ae680d65b40883e1678e0365ed3924c16", null ], + [ "x_t", "classmrs__lib_1_1KalmanFilterAloamGarm.html#a0e19e15226a8e251452cd486153fba12", null ], + [ "z_t", "classmrs__lib_1_1KalmanFilterAloamGarm.html#ae7fc4baaa223bf1ccebebc20c4b02bcc", null ], + [ "correct", "classmrs__lib_1_1KalmanFilterAloamGarm.html#a3e541e3ec53df99c77f8cc7031728d6f", null ], + [ "predict", "classmrs__lib_1_1KalmanFilterAloamGarm.html#a139f8d4f64e9e45ca68b9141ecae8c99", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1KalmanFilterAloamGarm__inherit__graph.map b/classmrs__lib_1_1KalmanFilterAloamGarm__inherit__graph.map new file mode 100644 index 00000000..1f6ec346 --- /dev/null +++ b/classmrs__lib_1_1KalmanFilterAloamGarm__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1KalmanFilterAloamGarm__inherit__graph.md5 b/classmrs__lib_1_1KalmanFilterAloamGarm__inherit__graph.md5 new file mode 100644 index 00000000..590ab51f --- /dev/null +++ b/classmrs__lib_1_1KalmanFilterAloamGarm__inherit__graph.md5 @@ -0,0 +1 @@ +ab54fd2f3ac94a1d3866399bc8e1fa9e \ No newline at end of file diff --git a/classmrs__lib_1_1KalmanFilterAloamGarm__inherit__graph.png b/classmrs__lib_1_1KalmanFilterAloamGarm__inherit__graph.png new file mode 100644 index 00000000..89eab45c Binary files /dev/null and b/classmrs__lib_1_1KalmanFilterAloamGarm__inherit__graph.png differ diff --git a/classmrs__lib_1_1KalmanFilter__inherit__graph.map b/classmrs__lib_1_1KalmanFilter__inherit__graph.map new file mode 100644 index 00000000..4ed9bef3 --- /dev/null +++ b/classmrs__lib_1_1KalmanFilter__inherit__graph.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/classmrs__lib_1_1KalmanFilter__inherit__graph.md5 b/classmrs__lib_1_1KalmanFilter__inherit__graph.md5 new file mode 100644 index 00000000..e55449a8 --- /dev/null +++ b/classmrs__lib_1_1KalmanFilter__inherit__graph.md5 @@ -0,0 +1 @@ +dfff49ecc4577c9dc4e93323728b37f3 \ No newline at end of file diff --git a/classmrs__lib_1_1KalmanFilter__inherit__graph.png b/classmrs__lib_1_1KalmanFilter__inherit__graph.png new file mode 100644 index 00000000..f34f81f0 Binary files /dev/null and b/classmrs__lib_1_1KalmanFilter__inherit__graph.png differ diff --git a/classmrs__lib_1_1LKF-members.html b/classmrs__lib_1_1LKF-members.html new file mode 100644 index 00000000..5f658f57 --- /dev/null +++ b/classmrs__lib_1_1LKF-members.html @@ -0,0 +1,134 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::LKF< n_states, n_inputs, n_measurements > Member List
+
+
+ +

This is the complete list of members for mrs_lib::LKF< n_states, n_inputs, n_measurements >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Amrs_lib::LKF< n_states, n_inputs, n_measurements >
A_t typedefmrs_lib::LKF< n_states, n_inputs, n_measurements >
Bmrs_lib::LKF< n_states, n_inputs, n_measurements >
B_t typedefmrs_lib::LKF< n_states, n_inputs, n_measurements >
Base_class typedefmrs_lib::LKF< n_states, n_inputs, n_measurements >
computeKalmanGain(const statecov_t &sc, [[maybe_unused]] const z_t &z, const R_t &R, const H_t &H) const (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedvirtual
correct(const statecov_t &sc, const z_t &z, const R_t &R) const overridemrs_lib::LKF< n_states, n_inputs, n_measurements >inlinevirtual
mrs_lib::KalmanFilter::correct(const statecov_t &sc, const z_t &z, const R_t &R) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
correction_impl(const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotected
covariance_predict(const A_t &A, const P_t &P, const Q_t &Q, const double dt) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
Hmrs_lib::LKF< n_states, n_inputs, n_measurements >
H_t typedefmrs_lib::LKF< n_states, n_inputs, n_measurements >
invert_W(R_t W) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
K_t typedefmrs_lib::LKF< n_states, n_inputs, n_measurements >
LKF()mrs_lib::LKF< n_states, n_inputs, n_measurements >inline
LKF(const A_t &A, const B_t &B, const H_t &H)mrs_lib::LKF< n_states, n_inputs, n_measurements >inline
mmrs_lib::LKF< n_states, n_inputs, n_measurements >static
nmrs_lib::LKF< n_states, n_inputs, n_measurements >static
pmrs_lib::LKF< n_states, n_inputs, n_measurements >static
P_t typedefmrs_lib::LKF< n_states, n_inputs, n_measurements >
predict(const statecov_t &sc, const u_t &u, const Q_t &Q, [[maybe_unused]] double dt) const overridemrs_lib::LKF< n_states, n_inputs, n_measurements >inlinevirtual
mrs_lib::KalmanFilter::predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
Q_t typedefmrs_lib::LKF< n_states, n_inputs, n_measurements >
R_t typedefmrs_lib::LKF< n_states, n_inputs, n_measurements >
state_predict(const A_t &A, const x_t &x, [[maybe_unused]] const B_t &B, [[maybe_unused]] const u_t &u) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
state_predict(const A_t &A, const x_t &x, const B_t &B, const u_t &u) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
statecov_t typedefmrs_lib::LKF< n_states, n_inputs, n_measurements >
u_t typedefmrs_lib::LKF< n_states, n_inputs, n_measurements >
x_t typedefmrs_lib::LKF< n_states, n_inputs, n_measurements >
z_t typedefmrs_lib::LKF< n_states, n_inputs, n_measurements >
+
+ + + + diff --git a/classmrs__lib_1_1LKF.html b/classmrs__lib_1_1LKF.html new file mode 100644 index 00000000..2ea38802 --- /dev/null +++ b/classmrs__lib_1_1LKF.html @@ -0,0 +1,541 @@ + + + + + + + +mrs_lib: mrs_lib::LKF< n_states, n_inputs, n_measurements > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::LKF< n_states, n_inputs, n_measurements > Class Template Reference
+
+
+ +

Implementation of the Linear Kalman filter [3]. + More...

+ +

#include <lkf.h>

+
+ + Inheritance diagram for mrs_lib::LKF< n_states, n_inputs, n_measurements >:
+
+
+ +
+ + Collaboration diagram for mrs_lib::LKF< n_states, n_inputs, n_measurements >:
+
+
+ + + + + + +

+Classes

struct  inverse_exception
 This exception is thrown when taking the inverse of a matrix fails. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using Base_class = KalmanFilter< n, m, p >
 Base class of this class.
 
+using x_t = typename Base_class::x_t
 State vector type $n \times 1$.
 
+using u_t = typename Base_class::u_t
 Input vector type $m \times 1$.
 
+using z_t = typename Base_class::z_t
 Measurement vector type $p \times 1$.
 
+using P_t = typename Base_class::P_t
 State uncertainty covariance matrix type $n \times n$.
 
+using R_t = typename Base_class::R_t
 Measurement noise covariance matrix type $p \times p$.
 
+using Q_t = typename Base_class::Q_t
 Process noise covariance matrix type $n \times n$.
 
+using statecov_t = typename Base_class::statecov_t
 Helper struct for passing around the state and its covariance in one variable.
 
+typedef Eigen::Matrix< double, n, nA_t
 System transition matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, n, mB_t
 Input to state mapping matrix type $n \times m$.
 
+typedef Eigen::Matrix< double, p, nH_t
 State to measurement mapping matrix type $p \times n$.
 
+typedef Eigen::Matrix< double, n, pK_t
 Kalman gain matrix type $n \times p$.
 
- Public Types inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
+typedef Eigen::Matrix< double, n, 1 > x_t
 State vector type $n \times 1$.
 
+typedef Eigen::Matrix< double, m, 1 > u_t
 Input vector type $m \times 1$.
 
+typedef Eigen::Matrix< double, p, 1 > z_t
 Measurement vector type $p \times 1$.
 
+typedef Eigen::Matrix< double, n, nP_t
 State uncertainty covariance matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, p, pR_t
 Measurement noise covariance matrix type $p \times p$.
 
+typedef Eigen::Matrix< double, n, nQ_t
 Process noise covariance matrix type $n \times n$.
 
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 LKF ()
 Convenience default constructor. More...
 
 LKF (const A_t &A, const B_t &B, const H_t &H)
 The main constructor. More...
 
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const override
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, [[maybe_unused]] double dt) const override
 Applies the prediction (time) step of the Kalman filter. More...
 
- Public Member Functions inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const =0
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0
 Applies the prediction (time) step of the Kalman filter. More...
 
+ + + + + + + + + + +

+Public Attributes

+A_t A
 The system transition matrix $n \times n$.
 
+B_t B
 The input to state mapping matrix $n \times m$.
 
+H_t H
 The state to measurement mapping matrix $p \times n$.
 
+ + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

+static constexpr int n = n_states
 Length of the state vector of the system.
 
+static constexpr int m = n_inputs
 Length of the input vector of the system.
 
+static constexpr int p = n_measurements
 Length of the measurement vector of the system.
 
- Static Public Attributes inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
+static const int n = n_states
 Length of the state vector of the system.
 
+static const int m = n_inputs
 Length of the input vector of the system.
 
+static const int p = n_measurements
 Length of the measurement vector of the system.
 
+ + + + + +

+Protected Member Functions

+virtual K_t computeKalmanGain (const statecov_t &sc, [[maybe_unused]] const z_t &z, const R_t &R, const H_t &H) const
 
+statecov_t ::type correction_impl (const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const
 
+ + + + + + + + + + + +

+Static Protected Member Functions

+static P_t covariance_predict (const A_t &A, const P_t &P, const Q_t &Q, const double dt)
 
+template<int check = n_inputs>
static std::enable_if< check==0, x_t >::type state_predict (const A_t &A, const x_t &x, [[maybe_unused]] const B_t &B, [[maybe_unused]] const u_t &u)
 
+template<int check = n_inputs>
static std::enable_if< check !=0, x_t >::type state_predict (const A_t &A, const x_t &x, const B_t &B, const u_t &u)
 
+static R_t invert_W (R_t W)
 
+

Detailed Description

+

template<int n_states, int n_inputs, int n_measurements>
+class mrs_lib::LKF< n_states, n_inputs, n_measurements >

+ +

Implementation of the Linear Kalman filter [3].

+

The Linear Kalman filter (abbreviated LKF, [3]) may be used for state filtration or estimation of linear stochastic discrete systems. It assumes that noise variables are sampled from multivariate gaussian distributions and takes into account apriori known parameters of these distributions (namely zero means and covariance matrices, which have to be specified by the user and are tunable parameters).

+

The LKF C++ class itself is templated. This has its advantages and disadvantages. Main disadvantage is that it may be harder to use if you're not familiar with C++ templates, which, admittedly, can get somewhat messy, espetially during compilation. Another disadvantage is that if used unwisely, the compilation times can get much higher when using templates. The main advantage is compile-time checking (if it compiles, then it has a lower chance of crashing at runtime) and enabling more effective optimalizations during compilation. Also in case of Eigen, the code is arguably more readable when you use aliases to the specific Matrix instances instead of having Eigen::MatrixXd and Eigen::VectorXd everywhere.

+
Template Parameters
+ + + + +
n_statesnumber of states of the system (length of the $ \mathbf{x} $ vector).
n_inputsnumber of inputs of the system (length of the $ \mathbf{u} $ vector).
n_measurementsnumber of measurements of the system (length of the $ \mathbf{z} $ vector).
+
+
+
Examples
lkf/example.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ LKF() [1/2]

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + +
mrs_lib::LKF< n_states, n_inputs, n_measurements >::LKF ()
+
+inline
+
+ +

Convenience default constructor.

+

This constructor should not be used if applicable. If used, the main constructor has to be called afterwards, before using this class, otherwise the LKF object is invalid (not initialized).

+ +
+
+ +

◆ LKF() [2/2]

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::LKF< n_states, n_inputs, n_measurements >::LKF (const A_tA,
const B_tB,
const H_tH 
)
+
+inline
+
+ +

The main constructor.

+
Parameters
+ + + + +
AThe state transition matrix.
BThe input to state mapping matrix.
HThe state to measurement mapping matrix.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ correct()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual statecov_t mrs_lib::LKF< n_states, n_inputs, n_measurements >::correct (const statecov_tsc,
const z_tz,
const R_tR 
) const
+
+inlineoverridevirtual
+
+ +

Applies the correction (update, measurement, data) step of the Kalman filter.

+

This method applies the linear Kalman filter correction step to the state and covariance passed in sc using the measurement z and measurement noise R. The updated state and covariance after the correction step is returned.

+
Parameters
+ + + + +
scThe state and covariance to which the correction step is to be applied.
zThe measurement vector to be used for correction.
RThe measurement noise covariance matrix to be used for correction.
+
+
+
Returns
The state and covariance after the correction update.
+ +
+
+ +

◆ predict()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual statecov_t mrs_lib::LKF< n_states, n_inputs, n_measurements >::predict (const statecov_tsc,
const u_tu,
const Q_tQ,
[[maybe_unused] ] double dt 
) const
+
+inlineoverridevirtual
+
+ +

Applies the prediction (time) step of the Kalman filter.

+

This method applies the linear Kalman filter prediction step to the state and covariance passed in sc using the input u and process noise Q. The process noise covariance Q is scaled by the dt parameter. The updated state and covariance after the prediction step is returned.

+
Parameters
+ + + + + +
scThe state and covariance to which the prediction step is to be applied.
uThe input vector to be used for prediction.
QThe process noise covariance matrix to be used for prediction.
dtUsed to scale the process noise covariance Q.
+
+
+
Returns
The state and covariance after the prediction step.
+
Note
Note that the dt parameter is only used to scale the process noise covariance Q it does not change the system matrices A or B (because there is no unambiguous way to do this)! If you have a changing time step duration and a dynamic system, you have to change the A and B matrices manually.
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1LKF.js b/classmrs__lib_1_1LKF.js new file mode 100644 index 00000000..f410cfce --- /dev/null +++ b/classmrs__lib_1_1LKF.js @@ -0,0 +1,25 @@ +var classmrs__lib_1_1LKF = +[ + [ "inverse_exception", "structmrs__lib_1_1LKF_1_1inverse__exception.html", "structmrs__lib_1_1LKF_1_1inverse__exception" ], + [ "A_t", "classmrs__lib_1_1LKF.html#aa5c83985c5c7685ebe2af0e445fbc0ad", null ], + [ "B_t", "classmrs__lib_1_1LKF.html#a5ca7805e401bd7b718b510269a6ce7bf", null ], + [ "Base_class", "classmrs__lib_1_1LKF.html#ae54a2cc807bafeee1777ffdbd37e3c02", null ], + [ "H_t", "classmrs__lib_1_1LKF.html#a78733a13f277480c5c8c42228d440df7", null ], + [ "K_t", "classmrs__lib_1_1LKF.html#a33b80f4e1b9b7eb7243b71a4ae6d99c6", null ], + [ "P_t", "classmrs__lib_1_1LKF.html#a5d5cee075e30da36ffb946cffcfca688", null ], + [ "Q_t", "classmrs__lib_1_1LKF.html#a5df2fd299b9da75a872e8d9194da1ca9", null ], + [ "R_t", "classmrs__lib_1_1LKF.html#a5d2cb5ed042b660f1a44bdb9f4d2612f", null ], + [ "statecov_t", "classmrs__lib_1_1LKF.html#a54b2b4a3932510daad92da5a2b1274c1", null ], + [ "u_t", "classmrs__lib_1_1LKF.html#a98e130a3d14cd93b01b0b942de8af10c", null ], + [ "x_t", "classmrs__lib_1_1LKF.html#abfad09fe2386fb87eaea7b4dd8b24409", null ], + [ "z_t", "classmrs__lib_1_1LKF.html#af4318056f5e0c024651bb882b60ec640", null ], + [ "LKF", "classmrs__lib_1_1LKF.html#aecd505e79c0102609c9e5ffbd91a7cc3", null ], + [ "LKF", "classmrs__lib_1_1LKF.html#a8bb9eee4045a176b56c28bc7e0113fa0", null ], + [ "computeKalmanGain", "classmrs__lib_1_1LKF.html#adcdde06220c8b30b2b74cb50d988c71b", null ], + [ "correct", "classmrs__lib_1_1LKF.html#a8ba4552b6fa909e5d899d2fe8c8fdaa5", null ], + [ "correction_impl", "classmrs__lib_1_1LKF.html#a3fdb4e57a1b930fd7e98f7a2c49aa052", null ], + [ "predict", "classmrs__lib_1_1LKF.html#af4027c4bef5dda2a12af1f728e92c45a", null ], + [ "A", "classmrs__lib_1_1LKF.html#a0926533d35a53410b4302fda99a45321", null ], + [ "B", "classmrs__lib_1_1LKF.html#a2d88249f1992d772631026387a45445a", null ], + [ "H", "classmrs__lib_1_1LKF.html#a552fedb99ce43148c212c809dcd8191f", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1LKF__MRS__odom-members.html b/classmrs__lib_1_1LKF__MRS__odom-members.html new file mode 100644 index 00000000..97019e84 --- /dev/null +++ b/classmrs__lib_1_1LKF__MRS__odom-members.html @@ -0,0 +1,143 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::LKF_MRS_odom Member List
+
+
+ +

This is the complete list of members for mrs_lib::LKF_MRS_odom, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Amrs_lib::LKF< 3, 1, 1 >
A_t typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
Bmrs_lib::LKF< 3, 1, 1 >
B_t typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
Base_class typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
coeff_A_t typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
coeff_B_t typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
computeKalmanGain(const statecov_t &sc,[[maybe_unused]] const z_t &z, const R_t &R, const H_t &H) const (defined in mrs_lib::LKF< 3, 1, 1 >)mrs_lib::LKF< 3, 1, 1 >inlineprotectedvirtual
correct(const statecov_t &sc, const z_t &z, const R_t &R, int param=0) const (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odomvirtual
LKF< 3, 1, 1 >::correct(const statecov_t &sc, const z_t &z, const R_t &R) const overridemrs_lib::LKF< 3, 1, 1 >inlinevirtual
mrs_lib::KalmanFilter::correct(const statecov_t &sc, const z_t &z, const R_t &R) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
correction_impl(const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const (defined in mrs_lib::LKF< 3, 1, 1 >)mrs_lib::LKF< 3, 1, 1 >inlineprotected
covariance_predict(const A_t &A, const P_t &P, const Q_t &Q, const double dt) (defined in mrs_lib::LKF< 3, 1, 1 >)mrs_lib::LKF< 3, 1, 1 >inlineprotectedstatic
covariance_predict_optimized(const P_t &P, const Q_t &Q, double dt) const (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
dtexp_A_t typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
dtexp_B_t typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
Hmrs_lib::LKF< 3, 1, 1 >
H_t typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
invert_W(R_t W) (defined in mrs_lib::LKF< 3, 1, 1 >)mrs_lib::LKF< 3, 1, 1 >inlineprotectedstatic
K_t typedefmrs_lib::LKF< 3, 1, 1 >
LKF()mrs_lib::LKF< 3, 1, 1 >inline
LKF(const A_t &A, const B_t &B, const H_t &H)mrs_lib::LKF< 3, 1, 1 >inline
LKF_MRS_odom(const std::vector< H_t > &Hs, const double default_dt=1) (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
m (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odomstatic
n (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odomstatic
p (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odomstatic
P_t typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const override (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odomvirtual
LKF< 3, 1, 1 >::predict(const statecov_t &sc, const u_t &u, const Q_t &Q,[[maybe_unused]] double dt) const overridemrs_lib::LKF< 3, 1, 1 >inlinevirtual
mrs_lib::KalmanFilter::predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
Q_t typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
R_t typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
state_predict(const A_t &A, const x_t &x,[[maybe_unused]] const B_t &B,[[maybe_unused]] const u_t &u) (defined in mrs_lib::LKF< 3, 1, 1 >)mrs_lib::LKF< 3, 1, 1 >inlineprotectedstatic
state_predict(const A_t &A, const x_t &x, const B_t &B, const u_t &u) (defined in mrs_lib::LKF< 3, 1, 1 >)mrs_lib::LKF< 3, 1, 1 >inlineprotectedstatic
state_predict_optimized(const x_t &x_prev, const u_t &u, double dt) const (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
statecov_t typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
u_t typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
x_t typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
z_t typedef (defined in mrs_lib::LKF_MRS_odom)mrs_lib::LKF_MRS_odom
+
+ + + + diff --git a/classmrs__lib_1_1LKF__MRS__odom.html b/classmrs__lib_1_1LKF__MRS__odom.html new file mode 100644 index 00000000..d30999d1 --- /dev/null +++ b/classmrs__lib_1_1LKF__MRS__odom.html @@ -0,0 +1,370 @@ + + + + + + + +mrs_lib: mrs_lib::LKF_MRS_odom Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::LKF_MRS_odom Class Reference
+
+
+
+ + Inheritance diagram for mrs_lib::LKF_MRS_odom:
+
+
+ +
+ + Collaboration diagram for mrs_lib::LKF_MRS_odom:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using Base_class = LKF< n, m, p >
 
+using x_t = typename Base_class::x_t
 
+using u_t = typename Base_class::u_t
 
+using z_t = typename Base_class::z_t
 
+using P_t = typename Base_class::P_t
 
+using R_t = typename Base_class::R_t
 
+using statecov_t = typename Base_class::statecov_t
 
+using A_t = typename Base_class::A_t
 
+using B_t = typename Base_class::B_t
 
+using H_t = typename Base_class::H_t
 
+using Q_t = typename Base_class::Q_t
 
+using coeff_A_t = A_t
 
+typedef Eigen::Matrix< unsigned, n, n > dtexp_A_t
 
+using coeff_B_t = B_t
 
+typedef Eigen::Matrix< unsigned, n, m > dtexp_B_t
 
- Public Types inherited from mrs_lib::LKF< 3, 1, 1 >
+using Base_class = KalmanFilter< n, m, p >
 Base class of this class.
 
+using x_t = typename Base_class::x_t
 State vector type $n \times 1$.
 
+using u_t = typename Base_class::u_t
 Input vector type $m \times 1$.
 
+using z_t = typename Base_class::z_t
 Measurement vector type $p \times 1$.
 
+using P_t = typename Base_class::P_t
 State uncertainty covariance matrix type $n \times n$.
 
+using R_t = typename Base_class::R_t
 Measurement noise covariance matrix type $p \times p$.
 
+using Q_t = typename Base_class::Q_t
 Process noise covariance matrix type $n \times n$.
 
+using statecov_t = typename Base_class::statecov_t
 Helper struct for passing around the state and its covariance in one variable.
 
+typedef Eigen::Matrix< double, n, nA_t
 System transition matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, n, mB_t
 Input to state mapping matrix type $n \times m$.
 
+typedef Eigen::Matrix< double, p, nH_t
 State to measurement mapping matrix type $p \times n$.
 
+typedef Eigen::Matrix< double, n, pK_t
 Kalman gain matrix type $n \times p$.
 
- Public Types inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
+typedef Eigen::Matrix< double, n, 1 > x_t
 State vector type $n \times 1$.
 
+typedef Eigen::Matrix< double, m, 1 > u_t
 Input vector type $m \times 1$.
 
+typedef Eigen::Matrix< double, p, 1 > z_t
 Measurement vector type $p \times 1$.
 
+typedef Eigen::Matrix< double, n, nP_t
 State uncertainty covariance matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, p, pR_t
 Measurement noise covariance matrix type $p \times p$.
 
+typedef Eigen::Matrix< double, n, nQ_t
 Process noise covariance matrix type $n \times n$.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

LKF_MRS_odom (const std::vector< H_t > &Hs, const double default_dt=1)
 
+virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const override
 
+virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R, int param=0) const
 
+x_t state_predict_optimized (const x_t &x_prev, const u_t &u, double dt) const
 
+P_t covariance_predict_optimized (const P_t &P, const Q_t &Q, double dt) const
 
- Public Member Functions inherited from mrs_lib::LKF< 3, 1, 1 >
 LKF ()
 Convenience default constructor. More...
 
 LKF (const A_t &A, const B_t &B, const H_t &H)
 The main constructor. More...
 
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const override
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q,[[maybe_unused]] double dt) const override
 Applies the prediction (time) step of the Kalman filter. More...
 
- Public Member Functions inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const =0
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0
 Applies the prediction (time) step of the Kalman filter. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

+static const int n = 3
 
+static const int m = 1
 
+static const int p = 1
 
- Static Public Attributes inherited from mrs_lib::LKF< 3, 1, 1 >
+static constexpr int n
 Length of the state vector of the system.
 
+static constexpr int m
 Length of the input vector of the system.
 
+static constexpr int p
 Length of the measurement vector of the system.
 
- Static Public Attributes inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
+static const int n = n_states
 Length of the state vector of the system.
 
+static const int m = n_inputs
 Length of the input vector of the system.
 
+static const int p = n_measurements
 Length of the measurement vector of the system.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from mrs_lib::LKF< 3, 1, 1 >
+A_t A
 The system transition matrix $n \times n$.
 
+B_t B
 The input to state mapping matrix $n \times m$.
 
+H_t H
 The state to measurement mapping matrix $p \times n$.
 
- Protected Member Functions inherited from mrs_lib::LKF< 3, 1, 1 >
+virtual K_t computeKalmanGain (const statecov_t &sc,[[maybe_unused]] const z_t &z, const R_t &R, const H_t &H) const
 
+statecov_t ::type correction_impl (const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const
 
- Static Protected Member Functions inherited from mrs_lib::LKF< 3, 1, 1 >
+static P_t covariance_predict (const A_t &A, const P_t &P, const Q_t &Q, const double dt)
 
+static std::enable_if< check==0, x_t >::type state_predict (const A_t &A, const x_t &x,[[maybe_unused]] const B_t &B,[[maybe_unused]] const u_t &u)
 
+static std::enable_if< check !=0, x_t >::type state_predict (const A_t &A, const x_t &x, const B_t &B, const u_t &u)
 
+static R_t invert_W (R_t W)
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1LKF__MRS__odom.js b/classmrs__lib_1_1LKF__MRS__odom.js new file mode 100644 index 00000000..28aae3df --- /dev/null +++ b/classmrs__lib_1_1LKF__MRS__odom.js @@ -0,0 +1,23 @@ +var classmrs__lib_1_1LKF__MRS__odom = +[ + [ "A_t", "classmrs__lib_1_1LKF__MRS__odom.html#a09aecefb7fb87d7e9e9dc9e3663a25ba", null ], + [ "B_t", "classmrs__lib_1_1LKF__MRS__odom.html#a96aa8d8e7cabbf158ef5a3b2f801474c", null ], + [ "Base_class", "classmrs__lib_1_1LKF__MRS__odom.html#aeb66a3e27ef38bc25498f98e66ba8169", null ], + [ "coeff_A_t", "classmrs__lib_1_1LKF__MRS__odom.html#a97ea9790fa2fd495ceddf0af9f6c5280", null ], + [ "coeff_B_t", "classmrs__lib_1_1LKF__MRS__odom.html#a6409e849ae9fab7aeef866c9acaa7730", null ], + [ "dtexp_A_t", "classmrs__lib_1_1LKF__MRS__odom.html#a0a22b36fff8f0160a14c586da4b8387e", null ], + [ "dtexp_B_t", "classmrs__lib_1_1LKF__MRS__odom.html#a7e5f00e6dbc4f50accac220a597ade44", null ], + [ "H_t", "classmrs__lib_1_1LKF__MRS__odom.html#a6790100be5843d9702159f185a516e4f", null ], + [ "P_t", "classmrs__lib_1_1LKF__MRS__odom.html#a78259b00ba8e37ccfd4fb520ff4945b2", null ], + [ "Q_t", "classmrs__lib_1_1LKF__MRS__odom.html#a38089d1d8f42e93afadd3ca54b738e26", null ], + [ "R_t", "classmrs__lib_1_1LKF__MRS__odom.html#aab73a89d85dabeaf370b34597829c449", null ], + [ "statecov_t", "classmrs__lib_1_1LKF__MRS__odom.html#a64fb6aad88554272313f57133e54d77c", null ], + [ "u_t", "classmrs__lib_1_1LKF__MRS__odom.html#aff31793f0ceacb7755ff658a1a0a91d7", null ], + [ "x_t", "classmrs__lib_1_1LKF__MRS__odom.html#af2a13b4d363aee6830af4f913cefaa77", null ], + [ "z_t", "classmrs__lib_1_1LKF__MRS__odom.html#a6f33958aa554e958c622cbd04d3347d5", null ], + [ "LKF_MRS_odom", "classmrs__lib_1_1LKF__MRS__odom.html#a8046db3503fe0c724164714bd309cad4", null ], + [ "correct", "classmrs__lib_1_1LKF__MRS__odom.html#a668f845e05a934e46185e768b4669ca5", null ], + [ "covariance_predict_optimized", "classmrs__lib_1_1LKF__MRS__odom.html#a19a12aa3c13ce269ad52f3206c9ee329", null ], + [ "predict", "classmrs__lib_1_1LKF__MRS__odom.html#a6761cb7486eb9c99510805e17d5c2d1c", null ], + [ "state_predict_optimized", "classmrs__lib_1_1LKF__MRS__odom.html#a072921264c196f192b8dba85c78b43bc", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1LKF__MRS__odom__coll__graph.map b/classmrs__lib_1_1LKF__MRS__odom__coll__graph.map new file mode 100644 index 00000000..2d7a6b10 --- /dev/null +++ b/classmrs__lib_1_1LKF__MRS__odom__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmrs__lib_1_1LKF__MRS__odom__coll__graph.md5 b/classmrs__lib_1_1LKF__MRS__odom__coll__graph.md5 new file mode 100644 index 00000000..8f02d5f8 --- /dev/null +++ b/classmrs__lib_1_1LKF__MRS__odom__coll__graph.md5 @@ -0,0 +1 @@ +0e33aa7954d5ff9d60495f236e9ecb76 \ No newline at end of file diff --git a/classmrs__lib_1_1LKF__MRS__odom__coll__graph.png b/classmrs__lib_1_1LKF__MRS__odom__coll__graph.png new file mode 100644 index 00000000..e8db05b9 Binary files /dev/null and b/classmrs__lib_1_1LKF__MRS__odom__coll__graph.png differ diff --git a/classmrs__lib_1_1LKF__MRS__odom__inherit__graph.map b/classmrs__lib_1_1LKF__MRS__odom__inherit__graph.map new file mode 100644 index 00000000..2d7a6b10 --- /dev/null +++ b/classmrs__lib_1_1LKF__MRS__odom__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmrs__lib_1_1LKF__MRS__odom__inherit__graph.md5 b/classmrs__lib_1_1LKF__MRS__odom__inherit__graph.md5 new file mode 100644 index 00000000..8f02d5f8 --- /dev/null +++ b/classmrs__lib_1_1LKF__MRS__odom__inherit__graph.md5 @@ -0,0 +1 @@ +0e33aa7954d5ff9d60495f236e9ecb76 \ No newline at end of file diff --git a/classmrs__lib_1_1LKF__MRS__odom__inherit__graph.png b/classmrs__lib_1_1LKF__MRS__odom__inherit__graph.png new file mode 100644 index 00000000..e8db05b9 Binary files /dev/null and b/classmrs__lib_1_1LKF__MRS__odom__inherit__graph.png differ diff --git a/classmrs__lib_1_1LKF__coll__graph.map b/classmrs__lib_1_1LKF__coll__graph.map new file mode 100644 index 00000000..34f8b72e --- /dev/null +++ b/classmrs__lib_1_1LKF__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1LKF__coll__graph.md5 b/classmrs__lib_1_1LKF__coll__graph.md5 new file mode 100644 index 00000000..d8849876 --- /dev/null +++ b/classmrs__lib_1_1LKF__coll__graph.md5 @@ -0,0 +1 @@ +7f8d1d83e87a8e1ea9fdc8523881a04a \ No newline at end of file diff --git a/classmrs__lib_1_1LKF__coll__graph.png b/classmrs__lib_1_1LKF__coll__graph.png new file mode 100644 index 00000000..86f92f1d Binary files /dev/null and b/classmrs__lib_1_1LKF__coll__graph.png differ diff --git a/classmrs__lib_1_1LKF__inherit__graph.map b/classmrs__lib_1_1LKF__inherit__graph.map new file mode 100644 index 00000000..707d58f2 --- /dev/null +++ b/classmrs__lib_1_1LKF__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classmrs__lib_1_1LKF__inherit__graph.md5 b/classmrs__lib_1_1LKF__inherit__graph.md5 new file mode 100644 index 00000000..4cda1a06 --- /dev/null +++ b/classmrs__lib_1_1LKF__inherit__graph.md5 @@ -0,0 +1 @@ +708b85a4fb102a73d75148021f8cb01b \ No newline at end of file diff --git a/classmrs__lib_1_1LKF__inherit__graph.png b/classmrs__lib_1_1LKF__inherit__graph.png new file mode 100644 index 00000000..2fa7e49e Binary files /dev/null and b/classmrs__lib_1_1LKF__inherit__graph.png differ diff --git a/classmrs__lib_1_1MRSTimer-members.html b/classmrs__lib_1_1MRSTimer-members.html new file mode 100644 index 00000000..22918d9b --- /dev/null +++ b/classmrs__lib_1_1MRSTimer-members.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::MRSTimer Member List
+
+
+ +

This is the complete list of members for mrs_lib::MRSTimer, including all inherited members.

+ + + + + + + + + + + + +
callback_t typedef (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
MRSTimer(const MRSTimer &)=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
MRSTimer(MRSTimer &&)=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
MRSTimer()=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimerprotected
operator=(const MRSTimer &)=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
operator=(MRSTimer &&)=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
running()=0mrs_lib::MRSTimerpure virtual
setPeriod(const ros::Duration &duration, const bool reset=true)=0mrs_lib::MRSTimerpure virtual
start()=0mrs_lib::MRSTimerpure virtual
stop()=0mrs_lib::MRSTimerpure virtual
~MRSTimer()=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimervirtual
+
+ + + + diff --git a/classmrs__lib_1_1MRSTimer.html b/classmrs__lib_1_1MRSTimer.html new file mode 100644 index 00000000..04b4597f --- /dev/null +++ b/classmrs__lib_1_1MRSTimer.html @@ -0,0 +1,244 @@ + + + + + + + +mrs_lib: mrs_lib::MRSTimer Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::MRSTimer Class Referenceabstract
+
+
+ +

Common wrapper representing the functionality of the ros::Timer. + More...

+ +

#include <timer.h>

+
+ + Inheritance diagram for mrs_lib::MRSTimer:
+
+
+ + + + + +

+Public Types

+using callback_t = std::function< void(const ros::TimerEvent &)>
 
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual void stop ()=0
 stop the timer
 
+virtual void start ()=0
 start the timer
 
virtual void setPeriod (const ros::Duration &duration, const bool reset=true)=0
 set the timer period/duration More...
 
virtual bool running ()=0
 returns true if callbacks should be called More...
 
MRSTimer (const MRSTimer &)=default
 
MRSTimer (MRSTimer &&)=default
 
+MRSTimeroperator= (const MRSTimer &)=default
 
+MRSTimeroperator= (MRSTimer &&)=default
 
+

Detailed Description

+

Common wrapper representing the functionality of the ros::Timer.

+

The implementation can then use either ros::Timer (the ROSTimer class) or threads and synchronization primitives from the C++ standard library (the ThreadTimer class). Both these variants implement the same interface.

+
Note
Functionality of the two implementations differs in some details.
+

Member Function Documentation

+ +

◆ running()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool mrs_lib::MRSTimer::running ()
+
+pure virtual
+
+ +

returns true if callbacks should be called

+
Returns
true if timer is running
+ +

Implemented in mrs_lib::ThreadTimer, and mrs_lib::ROSTimer.

+ +
+
+ +

◆ setPeriod()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void mrs_lib::MRSTimer::setPeriod (const ros::Duration & duration,
const bool reset = true 
)
+
+pure virtual
+
+ +

set the timer period/duration

+
Parameters
+ + + +
duration
reset
+
+
+ +

Implemented in mrs_lib::ThreadTimer, and mrs_lib::ROSTimer.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1MRSTimer.js b/classmrs__lib_1_1MRSTimer.js new file mode 100644 index 00000000..5b89c350 --- /dev/null +++ b/classmrs__lib_1_1MRSTimer.js @@ -0,0 +1,14 @@ +var classmrs__lib_1_1MRSTimer = +[ + [ "callback_t", "classmrs__lib_1_1MRSTimer.html#ae519667943aa8289e9c75b8182c75322", null ], + [ "~MRSTimer", "classmrs__lib_1_1MRSTimer.html#a45659d46a9d71bb68a20b3152c42b9aa", null ], + [ "MRSTimer", "classmrs__lib_1_1MRSTimer.html#ab8c67e675c0f51ff31bad5e898d90d33", null ], + [ "MRSTimer", "classmrs__lib_1_1MRSTimer.html#ae06c621b106897104698b62c28b67b84", null ], + [ "MRSTimer", "classmrs__lib_1_1MRSTimer.html#a11e9f9e577d68ab084762d549c5d9a52", null ], + [ "operator=", "classmrs__lib_1_1MRSTimer.html#acf622f64026f1e7dbdeeec3b5512e8fb", null ], + [ "operator=", "classmrs__lib_1_1MRSTimer.html#ae455e462fc33b2021fb2ce0bc768a75e", null ], + [ "running", "classmrs__lib_1_1MRSTimer.html#a54461ff4541da2848c3263e646ff928a", null ], + [ "setPeriod", "classmrs__lib_1_1MRSTimer.html#acf818ea5cffe17b89ed00866ca7cbeff", null ], + [ "start", "classmrs__lib_1_1MRSTimer.html#afda0c038cd360ccaa71b95227e413b44", null ], + [ "stop", "classmrs__lib_1_1MRSTimer.html#aeda0660a5031f17bb57f55f4166e737e", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1MRSTimer__inherit__graph.map b/classmrs__lib_1_1MRSTimer__inherit__graph.map new file mode 100644 index 00000000..161319f3 --- /dev/null +++ b/classmrs__lib_1_1MRSTimer__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmrs__lib_1_1MRSTimer__inherit__graph.md5 b/classmrs__lib_1_1MRSTimer__inherit__graph.md5 new file mode 100644 index 00000000..d179a26a --- /dev/null +++ b/classmrs__lib_1_1MRSTimer__inherit__graph.md5 @@ -0,0 +1 @@ +91b834a2a406e2abf555446a03879b25 \ No newline at end of file diff --git a/classmrs__lib_1_1MRSTimer__inherit__graph.png b/classmrs__lib_1_1MRSTimer__inherit__graph.png new file mode 100644 index 00000000..7eceeafa Binary files /dev/null and b/classmrs__lib_1_1MRSTimer__inherit__graph.png differ diff --git a/classmrs__lib_1_1MedianFilter-members.html b/classmrs__lib_1_1MedianFilter-members.html new file mode 100644 index 00000000..8c35f11f --- /dev/null +++ b/classmrs__lib_1_1MedianFilter-members.html @@ -0,0 +1,121 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::MedianFilter Member List
+
+
+ +

This is the complete list of members for mrs_lib::MedianFilter, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
add(const double value)mrs_lib::MedianFilter
addCheck(const double value)mrs_lib::MedianFilter
check(const double value)mrs_lib::MedianFilter
clear()mrs_lib::MedianFilter
full() constmrs_lib::MedianFilter
initialized() constmrs_lib::MedianFilter
median() constmrs_lib::MedianFilter
MedianFilter(const size_t buffer_length, const double min_value=-std::numeric_limits< double >::infinity(), const double max_value=std::numeric_limits< double >::infinity(), const double max_diff=std::numeric_limits< double >::infinity())mrs_lib::MedianFilter
MedianFilter()mrs_lib::MedianFilter
MedianFilter(const MedianFilter &other)mrs_lib::MedianFilter
MedianFilter(MedianFilter &&other)mrs_lib::MedianFilter
operator=(const MedianFilter &other)mrs_lib::MedianFilter
operator=(MedianFilter &&other)mrs_lib::MedianFilter
setBufferLength(const size_t buffer_length)mrs_lib::MedianFilter
setMaxDifference(const double max_diff)mrs_lib::MedianFilter
setMaxValue(const double max_value)mrs_lib::MedianFilter
setMinValue(const double min_value)mrs_lib::MedianFilter
+
+ + + + diff --git a/classmrs__lib_1_1MedianFilter.html b/classmrs__lib_1_1MedianFilter.html new file mode 100644 index 00000000..3ba795ee --- /dev/null +++ b/classmrs__lib_1_1MedianFilter.html @@ -0,0 +1,628 @@ + + + + + + + +mrs_lib: mrs_lib::MedianFilter Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::MedianFilter Class Reference
+
+
+ +

Implementation of a median filter with a fixed-length buffer. + More...

+ +

#include <median_filter.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 MedianFilter (const size_t buffer_length, const double min_value=-std::numeric_limits< double >::infinity(), const double max_value=std::numeric_limits< double >::infinity(), const double max_diff=std::numeric_limits< double >::infinity())
 The main constructor. More...
 
 MedianFilter ()
 A convenience empty constructor that will construct an invalid filter. More...
 
 MedianFilter (const MedianFilter &other)
 A convenience copy constructor. More...
 
 MedianFilter (MedianFilter &&other)
 A convenience move constructor. More...
 
MedianFilteroperator= (const MedianFilter &other)
 A convenience copy assignment operator. More...
 
MedianFilteroperator= (MedianFilter &&other)
 A convenience move assignment operator. More...
 
void add (const double value)
 Add a new value to the buffer. More...
 
bool check (const double value)
 Check whether a value complies with the constraints. More...
 
bool addCheck (const double value)
 Add a new value to the buffer and check if it complies with the constraints. More...
 
void clear ()
 Clear the buffer of all values. More...
 
bool full () const
 Check whether the buffer is filled with values. More...
 
double median () const
 Obtain the median. More...
 
bool initialized () const
 Check whether the filter was initialized with a valid buffer length. More...
 
void setBufferLength (const size_t buffer_length)
 Set a new size of the buffer. More...
 
void setMinValue (const double min_value)
 Set a new minimal threshold for new values. More...
 
void setMaxValue (const double max_value)
 Set a new maximal threshold for new values. More...
 
void setMaxDifference (const double max_diff)
 Set a new maximal difference from median for new values. More...
 
+

Detailed Description

+

Implementation of a median filter with a fixed-length buffer.

+

Constructor & Destructor Documentation

+ +

◆ MedianFilter() [1/4]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::MedianFilter::MedianFilter (const size_t buffer_length,
const double min_value = -std::numeric_limits<double>::infinity(),
const double max_value = std::numeric_limits<double>::infinity(),
const double max_diff = std::numeric_limits<double>::infinity() 
)
+
+ +

The main constructor.

+
Parameters
+ + + + + +
buffer_lengththe number of last values to be kept in the buffer.
min_valuevalues below this threshold will be discarded (won't be added to the buffer).
max_valuevalues above this threshold will be discarded.
max_diffvalues that differ from the current mean by more than this threshold will be discarded.
+
+
+ +
+
+ +

◆ MedianFilter() [2/4]

+ +
+
+ + + + + + + +
mrs_lib::MedianFilter::MedianFilter ()
+
+ +

A convenience empty constructor that will construct an invalid filter.

+
Warning
This constructor will construct an unusable filter with a zero-length buffer. To actually initialize this object, use the main constructor. You can use the initialized() method to check whether the object is valid.
+ +
+
+ +

◆ MedianFilter() [3/4]

+ +
+
+ + + + + + + + +
mrs_lib::MedianFilter::MedianFilter (const MedianFilterother)
+
+ +

A convenience copy constructor.

+

This constructor copies all data from the object that is being assigned from in a thread-safe manner.

+
Parameters
+ + +
otherthe object to assign from.
+
+
+ +
+
+ +

◆ MedianFilter() [4/4]

+ +
+
+ + + + + + + + +
mrs_lib::MedianFilter::MedianFilter (MedianFilter && other)
+
+ +

A convenience move constructor.

+

This constructor moves all data from the object that is being assigned from in a thread-safe manner, invalidating it.

+
Parameters
+ + +
otherthe object to assign from. It will be invalid after this method returns.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ add()

+ +
+
+ + + + + + + + +
void mrs_lib::MedianFilter::add (const double value)
+
+ +

Add a new value to the buffer.

+
Note
The median value will not be updated until the median() method is called (lazy evaluation).
+
Parameters
+ + +
valuethe new value to be added to the buffer.
+
+
+ +
+
+ +

◆ addCheck()

+ +
+
+ + + + + + + + +
bool mrs_lib::MedianFilter::addCheck (const double value)
+
+ +

Add a new value to the buffer and check if it complies with the constraints.

+

The value is compliant if it's above the min_value, below the max_value and its (absolute) difference from the current mean is below max_diff.

+
Note
The median value will not be updated until the median() method is called (lazy evaluation).
+
Parameters
+ + +
valuethe new value to be added to the buffer and checked.
+
+
+
Returns
true if the value is compliant, false otherwise.
+ +
+
+ +

◆ check()

+ +
+
+ + + + + + + + +
bool mrs_lib::MedianFilter::check (const double value)
+
+ +

Check whether a value complies with the constraints.

+

The value is compliant if it's above the min_value, below the max_value and its (absolute) difference from the current mean is below max_diff.

+
Parameters
+ + +
valuethe value to be checked.
+
+
+
Returns
true if the value is compliant, false otherwise.
+ +
+
+ +

◆ clear()

+ +
+
+ + + + + + + +
void mrs_lib::MedianFilter::clear ()
+
+ +

Clear the buffer of all values.

+

Doesn't change the buffer's length set in the constructor or any other parameters, only clears all stored values.

+ +
+
+ +

◆ full()

+ +
+
+ + + + + + + +
bool mrs_lib::MedianFilter::full () const
+
+ +

Check whether the buffer is filled with values.

+

If true, adding a new value will remove the oldest value in the buffer.

+
Returns
true if the buffer contains buffer_length values.
+ +
+
+ +

◆ initialized()

+ +
+
+ + + + + + + +
bool mrs_lib::MedianFilter::initialized () const
+
+ +

Check whether the filter was initialized with a valid buffer length.

+
Returns
true if the buffer length is larger than zero.
+ +
+
+ +

◆ median()

+ +
+
+ + + + + + + +
double mrs_lib::MedianFilter::median () const
+
+ +

Obtain the median.

+

If an up-to-date median value is available, it's not recalculated. Otherwise, the new median value is calculated and then returned (lazy evaluation).

+
Returns
the current median value (returns nan if the input buffer is empty).
+ +
+
+ +

◆ operator=() [1/2]

+ +
+
+ + + + + + + + +
MedianFilter & mrs_lib::MedianFilter::operator= (const MedianFilterother)
+
+ +

A convenience copy assignment operator.

+

This operator copies all data from the object that is being assigned from in a thread-safe manner.

+
Parameters
+ + +
otherthe object to assign from.
+
+
+
Returns
a reference to the object being assigned to.
+ +
+
+ +

◆ operator=() [2/2]

+ +
+
+ + + + + + + + +
MedianFilter & mrs_lib::MedianFilter::operator= (MedianFilter && other)
+
+ +

A convenience move assignment operator.

+

This operator moves all data from the object that is being assigned from in a thread-safe manner, invalidating it.

+
Parameters
+ + +
otherthe object to assign from. It will be invalid after this method returns.
+
+
+
Returns
a reference to the object being assigned to.
+ +
+
+ +

◆ setBufferLength()

+ +
+
+ + + + + + + + +
void mrs_lib::MedianFilter::setBufferLength (const size_t buffer_length)
+
+ +

Set a new size of the buffer.

+
Note
The median value may change.
+
Parameters
+ + +
buffer_lengththe new size of the buffer.
+
+
+ +
+
+ +

◆ setMaxDifference()

+ +
+
+ + + + + + + + +
void mrs_lib::MedianFilter::setMaxDifference (const double max_diff)
+
+ +

Set a new maximal difference from median for new values.

+
Note
The current buffer is not changed - the change only applies to new values.
+
Parameters
+ + +
max_diffthe new maximal difference of new buffer elements from the current median.
+
+
+ +
+
+ +

◆ setMaxValue()

+ +
+
+ + + + + + + + +
void mrs_lib::MedianFilter::setMaxValue (const double max_value)
+
+ +

Set a new maximal threshold for new values.

+
Note
The current buffer is not changed - the change only applies to new values.
+
Parameters
+ + +
max_valuethe new maximal value of new buffer elements.
+
+
+ +
+
+ +

◆ setMinValue()

+ +
+
+ + + + + + + + +
void mrs_lib::MedianFilter::setMinValue (const double min_value)
+
+ +

Set a new minimal threshold for new values.

+
Note
The current buffer is not changed - the change only applies to new values.
+
Parameters
+ + +
min_valuethe new minimal value of new buffer elements.
+
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1MedianFilter.js b/classmrs__lib_1_1MedianFilter.js new file mode 100644 index 00000000..4bf0f88b --- /dev/null +++ b/classmrs__lib_1_1MedianFilter.js @@ -0,0 +1,20 @@ +var classmrs__lib_1_1MedianFilter = +[ + [ "MedianFilter", "classmrs__lib_1_1MedianFilter.html#a6c6bd20d15d66535b900634396e99f51", null ], + [ "MedianFilter", "classmrs__lib_1_1MedianFilter.html#ae810bd254e4fccfeb883b4585062f166", null ], + [ "MedianFilter", "classmrs__lib_1_1MedianFilter.html#aa17291d605ef5364db2835745a2c669c", null ], + [ "MedianFilter", "classmrs__lib_1_1MedianFilter.html#a46da8f440b739a1d01710104fc38611c", null ], + [ "add", "classmrs__lib_1_1MedianFilter.html#aaf3d8e3bab539001962f2b29dabd314d", null ], + [ "addCheck", "classmrs__lib_1_1MedianFilter.html#a234342f8780bce6019f5183f798fe348", null ], + [ "check", "classmrs__lib_1_1MedianFilter.html#a518d744f114ad6d0b2591d3804f6f095", null ], + [ "clear", "classmrs__lib_1_1MedianFilter.html#a533c6e194f991a9c11b9e2aadf7087a5", null ], + [ "full", "classmrs__lib_1_1MedianFilter.html#acdd73f7ffc9868eb6a05e7b6aea35d85", null ], + [ "initialized", "classmrs__lib_1_1MedianFilter.html#a843ddc70b6daf92fa91f225fab5b36f7", null ], + [ "median", "classmrs__lib_1_1MedianFilter.html#a53562ea9addbf12ba3cd257cdede4af6", null ], + [ "operator=", "classmrs__lib_1_1MedianFilter.html#ab30170b4f0d029c66e0a616936c7b693", null ], + [ "operator=", "classmrs__lib_1_1MedianFilter.html#acc63d667e153c07ea9481eb0b3d74c54", null ], + [ "setBufferLength", "classmrs__lib_1_1MedianFilter.html#af2888fa7449ce3ebc82f3255a519fe6a", null ], + [ "setMaxDifference", "classmrs__lib_1_1MedianFilter.html#a82d854470b0920fac623472721b01601", null ], + [ "setMaxValue", "classmrs__lib_1_1MedianFilter.html#a8162e19bd901f6dcd542d4c8615732f9", null ], + [ "setMinValue", "classmrs__lib_1_1MedianFilter.html#a569e93d2d4be9632db2943fedb8133ba", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1NCLKF-members.html b/classmrs__lib_1_1NCLKF-members.html new file mode 100644 index 00000000..c243d73b --- /dev/null +++ b/classmrs__lib_1_1NCLKF-members.html @@ -0,0 +1,138 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::NCLKF< n_states, n_inputs, n_measurements > Member List
+
+
+ +

This is the complete list of members for mrs_lib::NCLKF< n_states, n_inputs, n_measurements >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Amrs_lib::LKF< n_states, n_inputs, n_measurements >
A_t typedefmrs_lib::NCLKF< n_states, n_inputs, n_measurements >
Bmrs_lib::LKF< n_states, n_inputs, n_measurements >
B_t typedefmrs_lib::NCLKF< n_states, n_inputs, n_measurements >
Base_class typedefmrs_lib::NCLKF< n_states, n_inputs, n_measurements >
computeKalmanGain(const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const override (defined in mrs_lib::NCLKF< n_states, n_inputs, n_measurements >)mrs_lib::NCLKF< n_states, n_inputs, n_measurements >inlineprotectedvirtual
computeKalmanGain(const statecov_t &sc, [[maybe_unused]] const z_t &z, const R_t &R, const H_t &H) const (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedvirtual
correct(const statecov_t &sc, const z_t &z, const R_t &R) const overridemrs_lib::LKF< n_states, n_inputs, n_measurements >inlinevirtual
mrs_lib::KalmanFilter::correct(const statecov_t &sc, const z_t &z, const R_t &R) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
correction_impl(const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotected
covariance_predict(const A_t &A, const P_t &P, const Q_t &Q, const double dt) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
Hmrs_lib::LKF< n_states, n_inputs, n_measurements >
H_t typedefmrs_lib::NCLKF< n_states, n_inputs, n_measurements >
invert_W(R_t W) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
K_t typedefmrs_lib::NCLKF< n_states, n_inputs, n_measurements >
l (defined in mrs_lib::NCLKF< n_states, n_inputs, n_measurements >)mrs_lib::NCLKF< n_states, n_inputs, n_measurements >protected
LKF()mrs_lib::LKF< n_states, n_inputs, n_measurements >inline
LKF(const A_t &A, const B_t &B, const H_t &H)mrs_lib::LKF< n_states, n_inputs, n_measurements >inline
mmrs_lib::NCLKF< n_states, n_inputs, n_measurements >static
nmrs_lib::NCLKF< n_states, n_inputs, n_measurements >static
NCLKF()mrs_lib::NCLKF< n_states, n_inputs, n_measurements >inline
NCLKF(const A_t &A, const B_t &B, const H_t &H, const double l)mrs_lib::NCLKF< n_states, n_inputs, n_measurements >inline
pmrs_lib::NCLKF< n_states, n_inputs, n_measurements >static
P_t typedefmrs_lib::NCLKF< n_states, n_inputs, n_measurements >
predict(const statecov_t &sc, const u_t &u, const Q_t &Q, [[maybe_unused]] double dt) const overridemrs_lib::LKF< n_states, n_inputs, n_measurements >inlinevirtual
mrs_lib::KalmanFilter::predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
Q_t typedefmrs_lib::NCLKF< n_states, n_inputs, n_measurements >
R_t typedefmrs_lib::NCLKF< n_states, n_inputs, n_measurements >
state_predict(const A_t &A, const x_t &x, [[maybe_unused]] const B_t &B, [[maybe_unused]] const u_t &u) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
state_predict(const A_t &A, const x_t &x, const B_t &B, const u_t &u) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
statecov_t typedefmrs_lib::NCLKF< n_states, n_inputs, n_measurements >
u_t typedefmrs_lib::NCLKF< n_states, n_inputs, n_measurements >
x_t typedefmrs_lib::NCLKF< n_states, n_inputs, n_measurements >
z_t typedefmrs_lib::NCLKF< n_states, n_inputs, n_measurements >
+
+ + + + diff --git a/classmrs__lib_1_1NCLKF.html b/classmrs__lib_1_1NCLKF.html new file mode 100644 index 00000000..428fa65f --- /dev/null +++ b/classmrs__lib_1_1NCLKF.html @@ -0,0 +1,487 @@ + + + + + + + +mrs_lib: mrs_lib::NCLKF< n_states, n_inputs, n_measurements > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::NCLKF< n_states, n_inputs, n_measurements > Class Template Reference
+
+
+ +

This class implements the norm-constrained linear Kalman filter [5]. + More...

+ +

#include <nckf.h>

+
+ + Inheritance diagram for mrs_lib::NCLKF< n_states, n_inputs, n_measurements >:
+
+
+ +
+ + Collaboration diagram for mrs_lib::NCLKF< n_states, n_inputs, n_measurements >:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using Base_class = LKF< n, m, p >
 Base class of this class.
 
+using x_t = typename Base_class::x_t
 State vector type $n \times 1$.
 
+using u_t = typename Base_class::u_t
 Input vector type $m \times 1$.
 
+using z_t = typename Base_class::z_t
 Measurement vector type $p \times 1$.
 
+using P_t = typename Base_class::P_t
 State uncertainty covariance matrix type $n \times n$.
 
+using R_t = typename Base_class::R_t
 Measurement noise covariance matrix type $p \times p$.
 
+using Q_t = typename Base_class::Q_t
 Process noise covariance matrix type $n \times n$.
 
+using statecov_t = typename Base_class::statecov_t
 Helper struct for passing around the state and its covariance in one variable.
 
+using A_t = typename Base_class::A_t
 System transition matrix type $n \times n$.
 
+using B_t = typename Base_class::B_t
 Input to state mapping matrix type $n \times m$.
 
+using H_t = typename Base_class::H_t
 State to measurement mapping matrix type $p \times n$.
 
+using K_t = typename Base_class::K_t
 Kalman gain matrix type $n \times p$.
 
- Public Types inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+using Base_class = KalmanFilter< n, m, p >
 Base class of this class.
 
+using x_t = typename Base_class::x_t
 State vector type $n \times 1$.
 
+using u_t = typename Base_class::u_t
 Input vector type $m \times 1$.
 
+using z_t = typename Base_class::z_t
 Measurement vector type $p \times 1$.
 
+using P_t = typename Base_class::P_t
 State uncertainty covariance matrix type $n \times n$.
 
+using R_t = typename Base_class::R_t
 Measurement noise covariance matrix type $p \times p$.
 
+using Q_t = typename Base_class::Q_t
 Process noise covariance matrix type $n \times n$.
 
+using statecov_t = typename Base_class::statecov_t
 Helper struct for passing around the state and its covariance in one variable.
 
+typedef Eigen::Matrix< double, n, nA_t
 System transition matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, n, mB_t
 Input to state mapping matrix type $n \times m$.
 
+typedef Eigen::Matrix< double, p, nH_t
 State to measurement mapping matrix type $p \times n$.
 
+typedef Eigen::Matrix< double, n, pK_t
 Kalman gain matrix type $n \times p$.
 
- Public Types inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
+typedef Eigen::Matrix< double, n, 1 > x_t
 State vector type $n \times 1$.
 
+typedef Eigen::Matrix< double, m, 1 > u_t
 Input vector type $m \times 1$.
 
+typedef Eigen::Matrix< double, p, 1 > z_t
 Measurement vector type $p \times 1$.
 
+typedef Eigen::Matrix< double, n, nP_t
 State uncertainty covariance matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, p, pR_t
 Measurement noise covariance matrix type $p \times p$.
 
+typedef Eigen::Matrix< double, n, nQ_t
 Process noise covariance matrix type $n \times n$.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 NCLKF ()
 Convenience default constructor. More...
 
 NCLKF (const A_t &A, const B_t &B, const H_t &H, const double l)
 The main constructor. More...
 
- Public Member Functions inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
 LKF ()
 Convenience default constructor. More...
 
 LKF (const A_t &A, const B_t &B, const H_t &H)
 The main constructor. More...
 
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const override
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, [[maybe_unused]] double dt) const override
 Applies the prediction (time) step of the Kalman filter. More...
 
- Public Member Functions inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const =0
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0
 Applies the prediction (time) step of the Kalman filter. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

+static const int n = n_states
 Length of the state vector of the system.
 
+static const int m = n_inputs
 Length of the input vector of the system.
 
+static const int p = n_measurements
 Length of the measurement vector of the system.
 
- Static Public Attributes inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+static constexpr int n = n_states
 Length of the state vector of the system.
 
+static constexpr int m = n_inputs
 Length of the input vector of the system.
 
+static constexpr int p = n_measurements
 Length of the measurement vector of the system.
 
- Static Public Attributes inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
+static const int n = n_states
 Length of the state vector of the system.
 
+static const int m = n_inputs
 Length of the input vector of the system.
 
+static const int p = n_measurements
 Length of the measurement vector of the system.
 
+ + + + + + + + +

+Protected Member Functions

+virtual K_t computeKalmanGain (const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const override
 
- Protected Member Functions inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+virtual K_t computeKalmanGain (const statecov_t &sc, [[maybe_unused]] const z_t &z, const R_t &R, const H_t &H) const
 
+statecov_t ::type correction_impl (const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const
 
+ + + +

+Protected Attributes

+double l
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+A_t A
 The system transition matrix $n \times n$.
 
+B_t B
 The input to state mapping matrix $n \times m$.
 
+H_t H
 The state to measurement mapping matrix $p \times n$.
 
- Static Protected Member Functions inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+static P_t covariance_predict (const A_t &A, const P_t &P, const Q_t &Q, const double dt)
 
+template<int check = n_inputs>
static std::enable_if< check==0, x_t >::type state_predict (const A_t &A, const x_t &x, [[maybe_unused]] const B_t &B, [[maybe_unused]] const u_t &u)
 
+template<int check = n_inputs>
static std::enable_if< check !=0, x_t >::type state_predict (const A_t &A, const x_t &x, const B_t &B, const u_t &u)
 
+static R_t invert_W (R_t W)
 
+

Detailed Description

+

template<int n_states, int n_inputs, int n_measurements>
+class mrs_lib::NCLKF< n_states, n_inputs, n_measurements >

+ +

This class implements the norm-constrained linear Kalman filter [5].

+

Note that the class is templated. The template parameters specify the number of states, number of inputs and number of measurements of the system. The last template parameter specifies the number of states which are norm-constrained.

+

The norm constraint is specified in the constructor and applied to the whole state vector of the system.

+

Constructor & Destructor Documentation

+ +

◆ NCLKF() [1/2]

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + +
mrs_lib::NCLKF< n_states, n_inputs, n_measurements >::NCLKF ()
+
+inline
+
+ +

Convenience default constructor.

+

This constructor should not be used if applicable. If used, the main constructor has to be called afterwards, before using this class, otherwise the object is invalid (not initialized).

+ +
+
+ +

◆ NCLKF() [2/2]

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::NCLKF< n_states, n_inputs, n_measurements >::NCLKF (const A_tA,
const B_tB,
const H_tH,
const double l 
)
+
+inline
+
+ +

The main constructor.

+
Parameters
+ + + + + +
AState transition matrix of the system (n x n).
BInput to state mapping matrix of the system (n x m).
HState to measurement mapping matrix of the system (p x n).
lThe norm constraint, applied to the specified states.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1NCLKF.js b/classmrs__lib_1_1NCLKF.js new file mode 100644 index 00000000..76c11501 --- /dev/null +++ b/classmrs__lib_1_1NCLKF.js @@ -0,0 +1,19 @@ +var classmrs__lib_1_1NCLKF = +[ + [ "A_t", "classmrs__lib_1_1NCLKF.html#aa7b38a32abe6a319930d6392178d5e3e", null ], + [ "B_t", "classmrs__lib_1_1NCLKF.html#af283625e8caefbccb8ca64072dab91a8", null ], + [ "Base_class", "classmrs__lib_1_1NCLKF.html#aa670be9fba29c7d8d8c7c849d9d844d1", null ], + [ "H_t", "classmrs__lib_1_1NCLKF.html#a92eb1e6f9fe04297bb54fdfbdc74d460", null ], + [ "K_t", "classmrs__lib_1_1NCLKF.html#ae2d30fe948b17723e0a89450044f8f93", null ], + [ "P_t", "classmrs__lib_1_1NCLKF.html#a1448842265f0b39d5da536488d146db3", null ], + [ "Q_t", "classmrs__lib_1_1NCLKF.html#aab7df7efe1e8e70d0e79ad374c6674a0", null ], + [ "R_t", "classmrs__lib_1_1NCLKF.html#a4b6b964e9491ca80fdfc1afacc9b23fc", null ], + [ "statecov_t", "classmrs__lib_1_1NCLKF.html#abac1b51597611226f2c0642230207e71", null ], + [ "u_t", "classmrs__lib_1_1NCLKF.html#a8992c34838e430a64b070929e92c263a", null ], + [ "x_t", "classmrs__lib_1_1NCLKF.html#a8fa90de14ea4fa4125882bd49d101888", null ], + [ "z_t", "classmrs__lib_1_1NCLKF.html#a80db36613d09068f8daa0dc7e735dc64", null ], + [ "NCLKF", "classmrs__lib_1_1NCLKF.html#a5f970519deaccdbb021df412645f26d5", null ], + [ "NCLKF", "classmrs__lib_1_1NCLKF.html#aa4dcb47ceca9f506407e14858567ea09", null ], + [ "computeKalmanGain", "classmrs__lib_1_1NCLKF.html#a16d5bb9adb1708072bd039ab8355c356", null ], + [ "l", "classmrs__lib_1_1NCLKF.html#a9844bbffd20b73e814d54aebad840fb0", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1NCLKF__coll__graph.map b/classmrs__lib_1_1NCLKF__coll__graph.map new file mode 100644 index 00000000..79425643 --- /dev/null +++ b/classmrs__lib_1_1NCLKF__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmrs__lib_1_1NCLKF__coll__graph.md5 b/classmrs__lib_1_1NCLKF__coll__graph.md5 new file mode 100644 index 00000000..6207a81e --- /dev/null +++ b/classmrs__lib_1_1NCLKF__coll__graph.md5 @@ -0,0 +1 @@ +9b5f7a421a6d634d8650c925d569af45 \ No newline at end of file diff --git a/classmrs__lib_1_1NCLKF__coll__graph.png b/classmrs__lib_1_1NCLKF__coll__graph.png new file mode 100644 index 00000000..c1514078 Binary files /dev/null and b/classmrs__lib_1_1NCLKF__coll__graph.png differ diff --git a/classmrs__lib_1_1NCLKF__inherit__graph.map b/classmrs__lib_1_1NCLKF__inherit__graph.map new file mode 100644 index 00000000..4949a82c --- /dev/null +++ b/classmrs__lib_1_1NCLKF__inherit__graph.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/classmrs__lib_1_1NCLKF__inherit__graph.md5 b/classmrs__lib_1_1NCLKF__inherit__graph.md5 new file mode 100644 index 00000000..e64927bd --- /dev/null +++ b/classmrs__lib_1_1NCLKF__inherit__graph.md5 @@ -0,0 +1 @@ +17888d7784436d4e5ab7188880b89f72 \ No newline at end of file diff --git a/classmrs__lib_1_1NCLKF__inherit__graph.png b/classmrs__lib_1_1NCLKF__inherit__graph.png new file mode 100644 index 00000000..49bda7b9 Binary files /dev/null and b/classmrs__lib_1_1NCLKF__inherit__graph.png differ diff --git a/classmrs__lib_1_1NCLKF__partial-members.html b/classmrs__lib_1_1NCLKF__partial-members.html new file mode 100644 index 00000000..0af18870 --- /dev/null +++ b/classmrs__lib_1_1NCLKF__partial-members.html @@ -0,0 +1,145 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states > Member List
+
+
+ +

This is the complete list of members for mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Amrs_lib::LKF< n_states, n_inputs, n_measurements >
A_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
Bmrs_lib::LKF< n_states, n_inputs, n_measurements >
B_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
Base_class typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
computeKalmanGain(const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const override (defined in mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >)mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >inlineprotectedvirtual
computeKalmanGain(const statecov_t &sc, [[maybe_unused]] const z_t &z, const R_t &R, const H_t &H) const (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedvirtual
correct(const statecov_t &sc, const z_t &z, const R_t &R) const overridemrs_lib::LKF< n_states, n_inputs, n_measurements >inlinevirtual
mrs_lib::KalmanFilter::correct(const statecov_t &sc, const z_t &z, const R_t &R) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
correction_impl(const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotected
covariance_predict(const A_t &A, const P_t &P, const Q_t &Q, const double dt) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
Hmrs_lib::LKF< n_states, n_inputs, n_measurements >
H_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
Hq_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
indices_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
invert_W(R_t W) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
K_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
Kq_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
l (defined in mrs_lib::NCLKF< n_states, n_inputs, n_measurements >)mrs_lib::NCLKF< n_states, n_inputs, n_measurements >protected
LKF()mrs_lib::LKF< n_states, n_inputs, n_measurements >inline
LKF(const A_t &A, const B_t &B, const H_t &H)mrs_lib::LKF< n_states, n_inputs, n_measurements >inline
mmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >static
nmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >static
NCLKF()mrs_lib::NCLKF< n_states, n_inputs, n_measurements >inline
NCLKF(const A_t &A, const B_t &B, const H_t &H, const double l)mrs_lib::NCLKF< n_states, n_inputs, n_measurements >inline
NCLKF_partial()mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >inline
NCLKF_partial(const A_t &A, const B_t &B, const H_t &H, const double l, const indices_t &norm_constrained_indices)mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >inline
nqmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >static
pmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >static
P_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
predict(const statecov_t &sc, const u_t &u, const Q_t &Q, [[maybe_unused]] double dt) const overridemrs_lib::LKF< n_states, n_inputs, n_measurements >inlinevirtual
mrs_lib::KalmanFilter::predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
Q_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
R_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
state_predict(const A_t &A, const x_t &x, [[maybe_unused]] const B_t &B, [[maybe_unused]] const u_t &u) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
state_predict(const A_t &A, const x_t &x, const B_t &B, const u_t &u) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
statecov_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
u_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
x_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
xq_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
z_t typedefmrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >
+
+ + + + diff --git a/classmrs__lib_1_1NCLKF__partial.html b/classmrs__lib_1_1NCLKF__partial.html new file mode 100644 index 00000000..718d9c40 --- /dev/null +++ b/classmrs__lib_1_1NCLKF__partial.html @@ -0,0 +1,789 @@ + + + + + + + +mrs_lib: mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states > Class Template Reference
+
+
+ +

This class implements the partially norm-constrained linear Kalman filter [5]. + More...

+ +

#include <nckf.h>

+
+ + Inheritance diagram for mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >:
+
+
+ +
+ + Collaboration diagram for mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using Base_class = NCLKF< n, m, p >
 Base class of this class.
 
+using x_t = typename Base_class::x_t
 State vector type $n \times 1$.
 
+using u_t = typename Base_class::u_t
 Input vector type $m \times 1$.
 
+using z_t = typename Base_class::z_t
 Measurement vector type $p \times 1$.
 
+using P_t = typename Base_class::P_t
 State uncertainty covariance matrix type $n \times n$.
 
+using R_t = typename Base_class::R_t
 Measurement noise covariance matrix type $p \times p$.
 
+using Q_t = typename Base_class::Q_t
 Process noise covariance matrix type $n \times n$.
 
+using statecov_t = typename Base_class::statecov_t
 Helper struct for passing around the state and its covariance in one variable.
 
+using A_t = typename Base_class::A_t
 System transition matrix type $n \times n$.
 
+using B_t = typename Base_class::B_t
 Input to state mapping matrix type $n \times m$.
 
+using H_t = typename Base_class::H_t
 State to measurement mapping matrix type $p \times n$.
 
+using K_t = typename Base_class::K_t
 Kalman gain matrix type $n \times p$.
 
+using indices_t = std::array< int, nq >
 Indices of the norm-constrained states type.
 
+using xq_t = Eigen::Matrix< double, nq, 1 >
 Norm-constrained states vector type $ n_q \times 1 $.
 
+using Hq_t = Eigen::Matrix< double, p, nq >
 Norm-constrained measurement mapping type $ p \times n_q $.
 
+using Kq_t = Eigen::Matrix< double, nq, p >
 Norm-constrained kalman gain type $ n_q \times p $.
 
- Public Types inherited from mrs_lib::NCLKF< n_states, n_inputs, n_measurements >
+using Base_class = LKF< n, m, p >
 Base class of this class.
 
+using x_t = typename Base_class::x_t
 State vector type $n \times 1$.
 
+using u_t = typename Base_class::u_t
 Input vector type $m \times 1$.
 
+using z_t = typename Base_class::z_t
 Measurement vector type $p \times 1$.
 
+using P_t = typename Base_class::P_t
 State uncertainty covariance matrix type $n \times n$.
 
+using R_t = typename Base_class::R_t
 Measurement noise covariance matrix type $p \times p$.
 
+using Q_t = typename Base_class::Q_t
 Process noise covariance matrix type $n \times n$.
 
+using statecov_t = typename Base_class::statecov_t
 Helper struct for passing around the state and its covariance in one variable.
 
+using A_t = typename Base_class::A_t
 System transition matrix type $n \times n$.
 
+using B_t = typename Base_class::B_t
 Input to state mapping matrix type $n \times m$.
 
+using H_t = typename Base_class::H_t
 State to measurement mapping matrix type $p \times n$.
 
+using K_t = typename Base_class::K_t
 Kalman gain matrix type $n \times p$.
 
- Public Types inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+using Base_class = KalmanFilter< n, m, p >
 Base class of this class.
 
+using x_t = typename Base_class::x_t
 State vector type $n \times 1$.
 
+using u_t = typename Base_class::u_t
 Input vector type $m \times 1$.
 
+using z_t = typename Base_class::z_t
 Measurement vector type $p \times 1$.
 
+using P_t = typename Base_class::P_t
 State uncertainty covariance matrix type $n \times n$.
 
+using R_t = typename Base_class::R_t
 Measurement noise covariance matrix type $p \times p$.
 
+using Q_t = typename Base_class::Q_t
 Process noise covariance matrix type $n \times n$.
 
+using statecov_t = typename Base_class::statecov_t
 Helper struct for passing around the state and its covariance in one variable.
 
+typedef Eigen::Matrix< double, n, nA_t
 System transition matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, n, mB_t
 Input to state mapping matrix type $n \times m$.
 
+typedef Eigen::Matrix< double, p, nH_t
 State to measurement mapping matrix type $p \times n$.
 
+typedef Eigen::Matrix< double, n, pK_t
 Kalman gain matrix type $n \times p$.
 
- Public Types inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
+typedef Eigen::Matrix< double, n, 1 > x_t
 State vector type $n \times 1$.
 
+typedef Eigen::Matrix< double, m, 1 > u_t
 Input vector type $m \times 1$.
 
+typedef Eigen::Matrix< double, p, 1 > z_t
 Measurement vector type $p \times 1$.
 
+typedef Eigen::Matrix< double, n, nP_t
 State uncertainty covariance matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, p, pR_t
 Measurement noise covariance matrix type $p \times p$.
 
+typedef Eigen::Matrix< double, n, nQ_t
 Process noise covariance matrix type $n \times n$.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 NCLKF_partial ()
 Convenience default constructor. More...
 
 NCLKF_partial (const A_t &A, const B_t &B, const H_t &H, const double l, const indices_t &norm_constrained_indices)
 The main constructor. More...
 
- Public Member Functions inherited from mrs_lib::NCLKF< n_states, n_inputs, n_measurements >
 NCLKF ()
 Convenience default constructor. More...
 
 NCLKF (const A_t &A, const B_t &B, const H_t &H, const double l)
 The main constructor. More...
 
- Public Member Functions inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
 LKF ()
 Convenience default constructor. More...
 
 LKF (const A_t &A, const B_t &B, const H_t &H)
 The main constructor. More...
 
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const override
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, [[maybe_unused]] double dt) const override
 Applies the prediction (time) step of the Kalman filter. More...
 
- Public Member Functions inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const =0
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0
 Applies the prediction (time) step of the Kalman filter. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

+static const int n = n_states
 Length of the state vector of the system.
 
+static const int m = n_inputs
 Length of the input vector of the system.
 
+static const int p = n_measurements
 Length of the measurement vector of the system.
 
+static const int nq = n_norm_constrained_states
 Number of states to which the norm constraint applies.
 
- Static Public Attributes inherited from mrs_lib::NCLKF< n_states, n_inputs, n_measurements >
+static const int n = n_states
 Length of the state vector of the system.
 
+static const int m = n_inputs
 Length of the input vector of the system.
 
+static const int p = n_measurements
 Length of the measurement vector of the system.
 
- Static Public Attributes inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+static constexpr int n = n_states
 Length of the state vector of the system.
 
+static constexpr int m = n_inputs
 Length of the input vector of the system.
 
+static constexpr int p = n_measurements
 Length of the measurement vector of the system.
 
- Static Public Attributes inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
+static const int n = n_states
 Length of the state vector of the system.
 
+static const int m = n_inputs
 Length of the input vector of the system.
 
+static const int p = n_measurements
 Length of the measurement vector of the system.
 
+ + + + + + + + +

+Protected Member Functions

+virtual K_t computeKalmanGain (const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const override
 
- Protected Member Functions inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+virtual K_t computeKalmanGain (const statecov_t &sc, [[maybe_unused]] const z_t &z, const R_t &R, const H_t &H) const
 
+statecov_t ::type correction_impl (const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+A_t A
 The system transition matrix $n \times n$.
 
+B_t B
 The input to state mapping matrix $n \times m$.
 
+H_t H
 The state to measurement mapping matrix $p \times n$.
 
- Static Protected Member Functions inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+static P_t covariance_predict (const A_t &A, const P_t &P, const Q_t &Q, const double dt)
 
+template<int check = n_inputs>
static std::enable_if< check==0, x_t >::type state_predict (const A_t &A, const x_t &x, [[maybe_unused]] const B_t &B, [[maybe_unused]] const u_t &u)
 
+template<int check = n_inputs>
static std::enable_if< check !=0, x_t >::type state_predict (const A_t &A, const x_t &x, const B_t &B, const u_t &u)
 
+static R_t invert_W (R_t W)
 
- Protected Attributes inherited from mrs_lib::NCLKF< n_states, n_inputs, n_measurements >
+double l
 
+

Detailed Description

+

template<int n_states, int n_inputs, int n_measurements, int n_norm_constrained_states>
+class mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >

+ +

This class implements the partially norm-constrained linear Kalman filter [5].

+

Note that the class is templated. The template parameters specify the number of states, number of inputs and number of measurements of the system. The last template parameter specifies the number of states which are norm-constrained.

+

The norm constraint is specified in the constructor together with the indices of the states to which the constraint applies.

+

Example usage:

// clang: MatousFormat
+
+
#include <mrs_lib/nckf.h>
+
#include <random>
+
+
namespace mrs_lib
+
{
+
const int n_states = -1;
+
const int n_states_norm_constrained = 2;
+
const int n_inputs = 1;
+
const int n_measurements = 4;
+
+
/* using ukf_t = NCUKF<n_states, n_inputs, n_measurements>; */
+
using lkf_t = NCLKF_partial<n_states, n_inputs, n_measurements, n_states_norm_constrained>;
+
}
+
+
constexpr int n = 4;
+
+
using namespace mrs_lib;
+
using Q_t = lkf_t::Q_t;
+
using x_t = lkf_t::x_t;
+
using P_t = lkf_t::P_t;
+
using u_t = lkf_t::u_t;
+
using z_t = lkf_t::z_t;
+
using R_t = lkf_t::R_t;
+
+
using A_t = lkf_t::A_t;
+
using B_t = lkf_t::B_t;
+
using H_t = lkf_t::H_t;
+
+
A_t A;
+
B_t B;
+
H_t H;
+
+
+
// This function implements the state transition
+
x_t tra_model_f(const x_t& x, const u_t& u, [[maybe_unused]] const double dt)
+
{
+
x_t ret;
+
ret = A*x + B*u;
+
auto xq = ret.block<2, 1>(0, 0);
+
xq = xq/xq.norm();
+
ret.block<2, 1>(2, 0) = xq;
+
return ret;
+
}
+
+
// This function implements the observation generation from a state
+
z_t obs_model_f(const x_t& x)
+
{
+
return H*x;
+
}
+
+
template <int rows>
+
Eigen::Matrix<double, rows, 1> normal_randmat(const Eigen::Matrix<double, rows, rows>& cov)
+
{
+
static std::random_device rd{};
+
static std::mt19937 gen{rd()};
+
static std::normal_distribution<> d{0,1};
+
Eigen::Matrix<double, rows, 1> ret(n, 1);
+
for (int row = 0; row < rows; row++)
+
ret(row, 0) = d(gen);
+
return cov*ret;
+
}
+
+
int main()
+
{
+
srand(std::time(0));
+
const double l = 3.0;
+
+
// dt will be constant in this example
+
const double dt = 1.0;
+
+
// Initialize the process noise matrix
+
Q_t Q(n,n); Q <<
+
1e-3, 0, 0, 0,
+
0, 1e-3, 0, 0,
+
0, 0, 1e-2, 0,
+
0, 0, 0, 1e-2;
+
+
// Initialize the measurement noise matrix
+
R_t R = 1e-2 * R_t::Ones();
+
+
// Initialize the state transition matrix
+
A = A_t(n,n);
+
A <<
+
1, dt, 0.5*dt*dt, 0.25*dt*dt*dt,
+
0, 1, dt, 0.5*dt*dt,
+
0, 0, 1, dt,
+
0, 0, 0, 0.9;
+
+
// Initialize the input matrix
+
B = B_t(n, n_inputs);
+
B <<
+
0,
+
0,
+
0,
+
1;
+
+
// Initialize the observation matrix
+
H = H_t(n_measurements, n);
+
H <<
+
1, 0, 0, 0,
+
0, 1, 0, 0,
+
0, 0, 1, 0,
+
0, 0, 0, 1;
+
+
// Generate initial state and covariance
+
x_t x0 = 100.0*x_t::Random(n);
+
x0(2) = 0.0;
+
x0(3) = 10.0;
+
x0 = x0/x0.norm();
+
P_t P_tmp = P_t::Random(n,n);
+
const P_t P0 = 10.0*P_tmp*P_tmp.transpose();
+
const lkf_t::statecov_t sc0({x0, P0});
+
+
const lkf_t::indices_t nconst_idxs = {0,1}; // these are the norm-constrained states
+
lkf_t lkf(A, B, H, l, nconst_idxs);
+
+
const int n_its = 1e1;
+
std::vector<lkf_t::statecov_t> lscs;
+
std::vector<lkf_t::statecov_t> scs;
+
+
lscs.reserve(n_its+1);
+
scs.reserve(n_its+1);
+
+
lscs.push_back(sc0);
+
scs.push_back(sc0);
+
+
for (int it = 0; it < n_its; it++)
+
{
+
std::cout << "step: " << it << std::endl;
+
+
// Generate a new input vector
+
/* const u_t u = u_t(0.5) + 0.1*u_t::Random(); */
+
const u_t u = u_t(0.0);
+
+
// Generate a new state according to the model and noise parameters
+
auto sc = scs.back();
+
sc.x = tra_model_f(sc.x, u, dt) + normal_randmat(Q);
+
sc.x = sc.x / sc.x.norm();
+
+
// Generate a new observation according to the model and noise parameters
+
const z_t z = obs_model_f(sc.x) + normal_randmat(R);
+
+
scs.push_back(sc);
+
scs.push_back(sc);
+
std::cout << "gt state:" << std::endl << sc.x.transpose() << std::endl;
+
+
{
+
auto lsc = lscs.back();
+
try
+
{
+
std::cout << "lkf_new state:" << std::endl << lsc.x.transpose() << std::endl;
+
lsc = lkf.predict(lsc, u, Q, dt);
+
std::cout << "lkf_new predi:" << std::endl << lsc.x.transpose() << std::endl;
+
lscs.push_back(lsc);
+
lsc = lkf.correct(lsc, z, R);
+
std::cout << "lkf_new corre:" << std::endl << lsc.x.transpose() << std::endl;
+
double sum2 = 0.0;
+
for (const auto it : nconst_idxs)
+
sum2 += lsc.x(it)*lsc.x(it);
+
std::cout << "lkf_new corre norm:" << std::sqrt(sum2) << std::endl;
+
lscs.push_back(lsc);
+
}
+
catch (const std::exception& e)
+
{
+
ROS_ERROR("NEW LKF failed: %s", e.what());
+
}
+
}
+
}
+
+
double x_diff = 0.0;
+
double P_diff = 0.0;
+
for (int it = 0; it < n_its; it++)
+
{
+
const auto lsc = lscs.at(it);
+
const auto cur_x_diff = (lsc.x-lsc.x).norm();
+
const auto cur_P_diff = (lsc.P-lsc.P).norm();
+
x_diff += cur_x_diff;
+
P_diff += cur_P_diff;
+
}
+
+
std::cout << "x diff average: " << x_diff/(n_its+1) << std::endl;
+
std::cout << "P diff average: " << P_diff/(n_its+1) << std::endl;
+
+
return 0;
+
}
+
+

Constructor & Destructor Documentation

+ +

◆ NCLKF_partial() [1/2]

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements, int n_norm_constrained_states>
+ + + + + +
+ + + + + + + +
mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >::NCLKF_partial ()
+
+inline
+
+ +

Convenience default constructor.

+

This constructor should not be used if applicable. If used, the main constructor has to be called afterwards, before using this class, otherwise the object is invalid (not initialized).

+ +
+
+ +

◆ NCLKF_partial() [2/2]

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements, int n_norm_constrained_states>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >::NCLKF_partial (const A_tA,
const B_tB,
const H_tH,
const double l,
const indices_tnorm_constrained_indices 
)
+
+inline
+
+ +

The main constructor.

+
Parameters
+ + + + + + +
AState transition matrix of the system (n x n).
BInput to state mapping matrix of the system (n x m).
HState to measurement mapping matrix of the system (p x n).
lThe norm constraint, applied to the specified states.
norm_constrained_indicesIndices of the norm-constrained states in the state vector.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+
mrs_lib::NCLKF_partial::A_t
typename Base_class::A_t A_t
System transition matrix type .
Definition: nckf.h:130
+
mrs_lib::LKF::Q_t
typename Base_class::Q_t Q_t
Process noise covariance matrix type .
Definition: lkf.h:52
+
mrs_lib::LKF::H_t
Eigen::Matrix< double, p, n > H_t
State to measurement mapping matrix type .
Definition: lkf.h:57
+
mrs_lib::LKF::P_t
typename Base_class::P_t P_t
State uncertainty covariance matrix type .
Definition: lkf.h:50
+
mrs_lib::LKF::H
H_t H
The state to measurement mapping matrix .
Definition: lkf.h:150
+
mrs_lib::LKF::statecov_t
typename Base_class::statecov_t statecov_t
Helper struct for passing around the state and its covariance in one variable.
Definition: lkf.h:53
+
mrs_lib::LKF::R_t
typename Base_class::R_t R_t
Measurement noise covariance matrix type .
Definition: lkf.h:51
+
mrs_lib::NCLKF_partial::u_t
typename Base_class::u_t u_t
Input vector type .
Definition: nckf.h:123
+
mrs_lib::NCLKF_partial::n
static const int n
Length of the state vector of the system.
Definition: nckf.h:116
+
mrs_lib::LKF::B_t
Eigen::Matrix< double, n, m > B_t
Input to state mapping matrix type .
Definition: lkf.h:56
+
mrs_lib::LKF::x_t
typename Base_class::x_t x_t
State vector type .
Definition: lkf.h:47
+
mrs_lib
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
mrs_lib::LKF::A_t
Eigen::Matrix< double, n, n > A_t
System transition matrix type .
Definition: lkf.h:55
+
mrs_lib::LKF::B
B_t B
The input to state mapping matrix .
Definition: lkf.h:149
+
mrs_lib::NCLKF_partial::H_t
typename Base_class::H_t H_t
State to measurement mapping matrix type .
Definition: nckf.h:132
+
mrs_lib::LKF
Implementation of the Linear Kalman filter .
Definition: lkf.h:38
+
mrs_lib::NCLKF_partial::B_t
typename Base_class::B_t B_t
Input to state mapping matrix type .
Definition: nckf.h:131
+
mrs_lib::LKF::z_t
typename Base_class::z_t z_t
Measurement vector type .
Definition: lkf.h:49
+
mrs_lib::LKF::A
A_t A
The system transition matrix .
Definition: lkf.h:144
+
mrs_lib::LKF::u_t
typename Base_class::u_t u_t
Input vector type .
Definition: lkf.h:48
+ + + + diff --git a/classmrs__lib_1_1NCLKF__partial.js b/classmrs__lib_1_1NCLKF__partial.js new file mode 100644 index 00000000..10531a6c --- /dev/null +++ b/classmrs__lib_1_1NCLKF__partial.js @@ -0,0 +1,22 @@ +var classmrs__lib_1_1NCLKF__partial = +[ + [ "A_t", "classmrs__lib_1_1NCLKF__partial.html#a6d62f542c4ee39019c9466e82ed0cd51", null ], + [ "B_t", "classmrs__lib_1_1NCLKF__partial.html#a749bb8222899e2b056e27875c0f951f6", null ], + [ "Base_class", "classmrs__lib_1_1NCLKF__partial.html#a13dac50b4906535f6ff5837b1057597f", null ], + [ "H_t", "classmrs__lib_1_1NCLKF__partial.html#a12079d59b1f0e949c535e478d8e1d88c", null ], + [ "Hq_t", "classmrs__lib_1_1NCLKF__partial.html#a6f311605a0470b290c6917d555bb4c9a", null ], + [ "indices_t", "classmrs__lib_1_1NCLKF__partial.html#a93afd8063033124c0698426cd03d4507", null ], + [ "K_t", "classmrs__lib_1_1NCLKF__partial.html#a47b90d150c6147ab30ae1866b66ea49c", null ], + [ "Kq_t", "classmrs__lib_1_1NCLKF__partial.html#a459ce71ac559eb881415485df4d622fa", null ], + [ "P_t", "classmrs__lib_1_1NCLKF__partial.html#aef875cb026a1a0d8df31a8fc3f02e63b", null ], + [ "Q_t", "classmrs__lib_1_1NCLKF__partial.html#a2ba0fce7ba12825a0c498f7676848fce", null ], + [ "R_t", "classmrs__lib_1_1NCLKF__partial.html#a7754b24176416b24869450c88a1328aa", null ], + [ "statecov_t", "classmrs__lib_1_1NCLKF__partial.html#a2bc4e99acb7f38dc41d6e63cdce5e805", null ], + [ "u_t", "classmrs__lib_1_1NCLKF__partial.html#a5718270798d8227ccaf76a5d3b97fda5", null ], + [ "x_t", "classmrs__lib_1_1NCLKF__partial.html#afaae66f623e768b19c0160fb21be9373", null ], + [ "xq_t", "classmrs__lib_1_1NCLKF__partial.html#a50092f2c99a521668dfd3211c999441c", null ], + [ "z_t", "classmrs__lib_1_1NCLKF__partial.html#ad5308432a3010edabc4598a92786fad5", null ], + [ "NCLKF_partial", "classmrs__lib_1_1NCLKF__partial.html#aabe13461dda8a89463ce87888fd6e428", null ], + [ "NCLKF_partial", "classmrs__lib_1_1NCLKF__partial.html#a1c6b3f2a9bd2d7cafe652d1bb24872e7", null ], + [ "computeKalmanGain", "classmrs__lib_1_1NCLKF__partial.html#a293e0195e2a651bda0b09e40e6f8d7f4", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1NCLKF__partial__coll__graph.map b/classmrs__lib_1_1NCLKF__partial__coll__graph.map new file mode 100644 index 00000000..291304e3 --- /dev/null +++ b/classmrs__lib_1_1NCLKF__partial__coll__graph.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/classmrs__lib_1_1NCLKF__partial__coll__graph.md5 b/classmrs__lib_1_1NCLKF__partial__coll__graph.md5 new file mode 100644 index 00000000..afd9120b --- /dev/null +++ b/classmrs__lib_1_1NCLKF__partial__coll__graph.md5 @@ -0,0 +1 @@ +77f1f25b3808c1f081f3f787e90da284 \ No newline at end of file diff --git a/classmrs__lib_1_1NCLKF__partial__coll__graph.png b/classmrs__lib_1_1NCLKF__partial__coll__graph.png new file mode 100644 index 00000000..0e7d24c5 Binary files /dev/null and b/classmrs__lib_1_1NCLKF__partial__coll__graph.png differ diff --git a/classmrs__lib_1_1NCLKF__partial__inherit__graph.map b/classmrs__lib_1_1NCLKF__partial__inherit__graph.map new file mode 100644 index 00000000..291304e3 --- /dev/null +++ b/classmrs__lib_1_1NCLKF__partial__inherit__graph.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/classmrs__lib_1_1NCLKF__partial__inherit__graph.md5 b/classmrs__lib_1_1NCLKF__partial__inherit__graph.md5 new file mode 100644 index 00000000..afd9120b --- /dev/null +++ b/classmrs__lib_1_1NCLKF__partial__inherit__graph.md5 @@ -0,0 +1 @@ +77f1f25b3808c1f081f3f787e90da284 \ No newline at end of file diff --git a/classmrs__lib_1_1NCLKF__partial__inherit__graph.png b/classmrs__lib_1_1NCLKF__partial__inherit__graph.png new file mode 100644 index 00000000..0e7d24c5 Binary files /dev/null and b/classmrs__lib_1_1NCLKF__partial__inherit__graph.png differ diff --git a/classmrs__lib_1_1NCUKF-members.html b/classmrs__lib_1_1NCUKF-members.html new file mode 100644 index 00000000..b5cb098d --- /dev/null +++ b/classmrs__lib_1_1NCUKF-members.html @@ -0,0 +1,148 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::NCUKF< n_states, n_inputs, n_measurements > Member List
+
+
+ +

This is the complete list of members for mrs_lib::NCUKF< n_states, n_inputs, n_measurements >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Base_class typedef (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >
computeInverse(const Pzz_t &Pzz) const (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
computeKalmanGain(const x_t &x, const z_t &inn, const K_t &Pxz, const Pzz_t &Pzz) const override (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >inlineprotectedvirtual
computeKalmanGain([[maybe_unused]] const x_t &x, [[maybe_unused]] const z_t &inn, const K_t &Pxz, const Pzz_t &Pzz) const (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protectedvirtual
computePaSqrt(const P_t &P) const (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
computeSigmas(const x_t &x, const P_t &P) const (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
computeWeights() (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
correct(const statecov_t &sc, const z_t &z, const R_t &R) const overridemrs_lib::NCUKF< n_states, n_inputs, n_measurements >inlinevirtual
mrs_lib::KalmanFilter::correct(const statecov_t &sc, const z_t &z, const R_t &R) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
K_t typedef (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >
l (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >protected
m (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >static
m_alpha (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
m_beta (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
m_kappa (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
m_lambda (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
m_observation_model (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
m_transition_model (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
m_Wc (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
m_Wm (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
n (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >static
NCUKF() (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >inline
NCUKF(const transition_model_t &transition_model, const observation_model_t &observation_model, const double l, const double alpha=1e-3, const double kappa=1, const double beta=2) (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >inline
observation_model_t typedef (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >
p (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >static
P_t typedef (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >
predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const overridemrs_lib::UKF< n_states, n_inputs, n_measurements >virtual
Pzz_t typedef (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >
Q_t typedef (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >
R_t typedef (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >
setConstants(const double alpha, const double kappa, const double beta)mrs_lib::UKF< n_states, n_inputs, n_measurements >
setObservationModel(const observation_model_t &observation_model)mrs_lib::UKF< n_states, n_inputs, n_measurements >
setTransitionModel(const transition_model_t &transition_model)mrs_lib::UKF< n_states, n_inputs, n_measurements >
statecov_t typedef (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >
transition_model_t typedef (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >
u_t typedef (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >
UKF()mrs_lib::UKF< n_states, n_inputs, n_measurements >
UKF(const transition_model_t &transition_model, const observation_model_t &observation_model, const double alpha=1e-3, const double kappa=1, const double beta=2)mrs_lib::UKF< n_states, n_inputs, n_measurements >
wmrs_lib::UKF< n_states, n_inputs, n_measurements >protectedstatic
W_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >
x_t typedef (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >
X_t typedef (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >
Z_t typedef (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >
z_t typedef (defined in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >)mrs_lib::NCUKF< n_states, n_inputs, n_measurements >
+
+ + + + diff --git a/classmrs__lib_1_1NCUKF.html b/classmrs__lib_1_1NCUKF.html new file mode 100644 index 00000000..a128bbaf --- /dev/null +++ b/classmrs__lib_1_1NCUKF.html @@ -0,0 +1,415 @@ + + + + + + + +mrs_lib: mrs_lib::NCUKF< n_states, n_inputs, n_measurements > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::NCUKF< n_states, n_inputs, n_measurements > Class Template Reference
+
+
+
+ + Inheritance diagram for mrs_lib::NCUKF< n_states, n_inputs, n_measurements >:
+
+
+ +
+ + Collaboration diagram for mrs_lib::NCUKF< n_states, n_inputs, n_measurements >:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using Base_class = UKF< n, m, p >
 
+using x_t = typename Base_class::x_t
 
+using u_t = typename Base_class::u_t
 
+using z_t = typename Base_class::z_t
 
+using P_t = typename Base_class::P_t
 
+using R_t = typename Base_class::R_t
 
+using Q_t = typename Base_class::Q_t
 
+using statecov_t = typename Base_class::statecov_t
 
+using transition_model_t = typename Base_class::transition_model_t
 
+using observation_model_t = typename Base_class::observation_model_t
 
+using X_t = typename Base_class::X_t
 
+using Z_t = typename Base_class::Z_t
 
+using Pzz_t = typename Base_class::Pzz_t
 
+using K_t = typename Base_class::K_t
 
- Public Types inherited from mrs_lib::UKF< n_states, n_inputs, n_measurements >
+using x_t = typename Base_class::x_t
 state vector n*1 typedef
 
+using u_t = typename Base_class::u_t
 input vector m*1 typedef
 
+using z_t = typename Base_class::z_t
 measurement vector p*1 typedef
 
+using P_t = typename Base_class::P_t
 state covariance n*n typedef
 
+using R_t = typename Base_class::R_t
 measurement covariance p*p typedef
 
+using Q_t = typename Base_class::Q_t
 process covariance n*n typedef
 
+using W_t = typename Eigen::Matrix< double, w, 1 >
 weights vector (2n+1)*1 typedef
 
+using statecov_t = typename Base_class::statecov_t
 typedef of a helper struct for state and covariance
 
+using transition_model_t = typename std::function< x_t(const x_t &, const u_t &, double)>
 function of the state transition model typedef
 
+using observation_model_t = typename std::function< z_t(const x_t &)>
 function of the observation model typedef
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

NCUKF (const transition_model_t &transition_model, const observation_model_t &observation_model, const double l, const double alpha=1e-3, const double kappa=1, const double beta=2)
 
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const override
 Implements the state correction step (measurement update). More...
 
- Public Member Functions inherited from mrs_lib::UKF< n_states, n_inputs, n_measurements >
 UKF ()
 Convenience default constructor. More...
 
 UKF (const transition_model_t &transition_model, const observation_model_t &observation_model, const double alpha=1e-3, const double kappa=1, const double beta=2)
 The main constructor. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const override
 Implements the state prediction step (time update). More...
 
void setConstants (const double alpha, const double kappa, const double beta)
 Changes the Unscented Transform parameters. More...
 
void setTransitionModel (const transition_model_t &transition_model)
 Changes the transition model function. More...
 
void setObservationModel (const observation_model_t &observation_model)
 Changes the observation model function. More...
 
+ + + + + + + +

+Static Public Attributes

+static const int n = n_states
 
+static const int m = n_inputs
 
+static const int p = n_measurements
 
+ + + + + + + + + + + + + + +

+Protected Member Functions

+virtual K_t computeKalmanGain (const x_t &x, const z_t &inn, const K_t &Pxz, const Pzz_t &Pzz) const override
 
- Protected Member Functions inherited from mrs_lib::UKF< n_states, n_inputs, n_measurements >
+void computeWeights ()
 
+X_t computeSigmas (const x_t &x, const P_t &P) const
 
+P_t computePaSqrt (const P_t &P) const
 
+Pzz_t computeInverse (const Pzz_t &Pzz) const
 
+virtual K_t computeKalmanGain ([[maybe_unused]] const x_t &x, [[maybe_unused]] const z_t &inn, const K_t &Pxz, const Pzz_t &Pzz) const
 
+ + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

+double l
 
- Protected Attributes inherited from mrs_lib::UKF< n_states, n_inputs, n_measurements >
+double m_alpha
 
+double m_kappa
 
+double m_beta
 
+double m_lambda
 
+W_t m_Wm
 
+W_t m_Wc
 
+transition_model_t m_transition_model
 
+observation_model_t m_observation_model
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Types inherited from mrs_lib::UKF< n_states, n_inputs, n_measurements >
+using Base_class = KalmanFilter< n, m, p >
 Base class of this class.
 
+using X_t = typename Eigen::Matrix< double, n, w >
 State sigma points matrix.
 
+using Z_t = typename Eigen::Matrix< double, p, w >
 Measurement sigma points matrix.
 
+using Pzz_t = typename Eigen::Matrix< double, p, p >
 Pzz helper matrix.
 
+using K_t = typename Eigen::Matrix< double, n, p >
 Kalman gain matrix.
 
- Static Protected Attributes inherited from mrs_lib::UKF< n_states, n_inputs, n_measurements >
+static constexpr int n = n_states
 Length of the state vector of the system.
 
+static constexpr int m = n_inputs
 Length of the input vector of the system.
 
+static constexpr int p = n_measurements
 Length of the measurement vector of the system.
 
+static constexpr int w = 2 * n + 1
 Number of sigma points/weights.
 
+

Member Function Documentation

+ +

◆ correct()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual statecov_t mrs_lib::NCUKF< n_states, n_inputs, n_measurements >::correct (const statecov_t & sc,
const z_tz,
const R_tR 
) const
+
+inlineoverridevirtual
+
+ +

Implements the state correction step (measurement update).

+
Parameters
+ + + + +
scPrevious estimate of the state and covariance.
zMeasurement vector.
RMeasurement covariance matrix.
+
+
+
Returns
The state and covariance after applying the correction step.
+ +

Reimplemented from mrs_lib::UKF< n_states, n_inputs, n_measurements >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1NCUKF.js b/classmrs__lib_1_1NCUKF.js new file mode 100644 index 00000000..8e49af41 --- /dev/null +++ b/classmrs__lib_1_1NCUKF.js @@ -0,0 +1,22 @@ +var classmrs__lib_1_1NCUKF = +[ + [ "Base_class", "classmrs__lib_1_1NCUKF.html#adb3fa88b036f1fc6b80f204cb601ebc7", null ], + [ "K_t", "classmrs__lib_1_1NCUKF.html#a5fb979f0c5139359956a3fdd40f3f535", null ], + [ "observation_model_t", "classmrs__lib_1_1NCUKF.html#a45f922267ff95bcad0d4760d5dbf3e49", null ], + [ "P_t", "classmrs__lib_1_1NCUKF.html#a652482865a512df867d37e654b0b2d4d", null ], + [ "Pzz_t", "classmrs__lib_1_1NCUKF.html#a1f0e64b6d2682ae4afdc8f8e59d96674", null ], + [ "Q_t", "classmrs__lib_1_1NCUKF.html#acbbd4daa96d9ce0d4fca18dc114a9fb1", null ], + [ "R_t", "classmrs__lib_1_1NCUKF.html#a826781b0c822b0f72d8bd9ced7452f81", null ], + [ "statecov_t", "classmrs__lib_1_1NCUKF.html#a7d1795ff05b989b2a69b726d7958dae5", null ], + [ "transition_model_t", "classmrs__lib_1_1NCUKF.html#a6ad5bf2fb59a2265651708ffe2e6526c", null ], + [ "u_t", "classmrs__lib_1_1NCUKF.html#aa65fcd20c676be8399d3016e0203affa", null ], + [ "x_t", "classmrs__lib_1_1NCUKF.html#adf38e41db3b8a80c6742b2a2dd6cb7b2", null ], + [ "X_t", "classmrs__lib_1_1NCUKF.html#aad37acbc7a2fe813c770ff4a705abf22", null ], + [ "z_t", "classmrs__lib_1_1NCUKF.html#ad2b734aae3fea37fc9cfee8c752e5747", null ], + [ "Z_t", "classmrs__lib_1_1NCUKF.html#abf3be33e44e56e023d8475eed0062e71", null ], + [ "NCUKF", "classmrs__lib_1_1NCUKF.html#ab05d1bc34d4fe3715959b5797bc72bf1", null ], + [ "NCUKF", "classmrs__lib_1_1NCUKF.html#ae8bee52a0123cbcb1e898e4785336bf2", null ], + [ "computeKalmanGain", "classmrs__lib_1_1NCUKF.html#af48c26afd4a3cfabcddac78b63714946", null ], + [ "correct", "classmrs__lib_1_1NCUKF.html#ab12dfb8b6ad4c831c761327a3be2d814", null ], + [ "l", "classmrs__lib_1_1NCUKF.html#a8511740030abca1b1b1e9aa5c6451639", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1NCUKF__coll__graph.map b/classmrs__lib_1_1NCUKF__coll__graph.map new file mode 100644 index 00000000..813f875a --- /dev/null +++ b/classmrs__lib_1_1NCUKF__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmrs__lib_1_1NCUKF__coll__graph.md5 b/classmrs__lib_1_1NCUKF__coll__graph.md5 new file mode 100644 index 00000000..73a1e972 --- /dev/null +++ b/classmrs__lib_1_1NCUKF__coll__graph.md5 @@ -0,0 +1 @@ +459b13b13e8c8f9ebf5a85062b4d99e7 \ No newline at end of file diff --git a/classmrs__lib_1_1NCUKF__coll__graph.png b/classmrs__lib_1_1NCUKF__coll__graph.png new file mode 100644 index 00000000..61d78753 Binary files /dev/null and b/classmrs__lib_1_1NCUKF__coll__graph.png differ diff --git a/classmrs__lib_1_1NCUKF__inherit__graph.map b/classmrs__lib_1_1NCUKF__inherit__graph.map new file mode 100644 index 00000000..813f875a --- /dev/null +++ b/classmrs__lib_1_1NCUKF__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmrs__lib_1_1NCUKF__inherit__graph.md5 b/classmrs__lib_1_1NCUKF__inherit__graph.md5 new file mode 100644 index 00000000..73a1e972 --- /dev/null +++ b/classmrs__lib_1_1NCUKF__inherit__graph.md5 @@ -0,0 +1 @@ +459b13b13e8c8f9ebf5a85062b4d99e7 \ No newline at end of file diff --git a/classmrs__lib_1_1NCUKF__inherit__graph.png b/classmrs__lib_1_1NCUKF__inherit__graph.png new file mode 100644 index 00000000..61d78753 Binary files /dev/null and b/classmrs__lib_1_1NCUKF__inherit__graph.png differ diff --git a/classmrs__lib_1_1NotchFilter-members.html b/classmrs__lib_1_1NotchFilter-members.html new file mode 100644 index 00000000..4c00570e --- /dev/null +++ b/classmrs__lib_1_1NotchFilter-members.html @@ -0,0 +1,106 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::NotchFilter Member List
+
+
+ +

This is the complete list of members for mrs_lib::NotchFilter, including all inherited members.

+ + + +
iterate(double &sample_in) (defined in mrs_lib::NotchFilter)mrs_lib::NotchFilter
NotchFilter(const double &sample_rate, const double &frequency_in, const double &bandwidth_in) (defined in mrs_lib::NotchFilter)mrs_lib::NotchFilter
+
+ + + + diff --git a/classmrs__lib_1_1NotchFilter.html b/classmrs__lib_1_1NotchFilter.html new file mode 100644 index 00000000..66bde6d8 --- /dev/null +++ b/classmrs__lib_1_1NotchFilter.html @@ -0,0 +1,119 @@ + + + + + + + +mrs_lib: mrs_lib::NotchFilter Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::NotchFilter Class Reference
+
+
+ + + + + + +

+Public Member Functions

NotchFilter (const double &sample_rate, const double &frequency_in, const double &bandwidth_in)
 
+double iterate (double &sample_in)
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1NotchFilter.js b/classmrs__lib_1_1NotchFilter.js new file mode 100644 index 00000000..5560c791 --- /dev/null +++ b/classmrs__lib_1_1NotchFilter.js @@ -0,0 +1,5 @@ +var classmrs__lib_1_1NotchFilter = +[ + [ "NotchFilter", "classmrs__lib_1_1NotchFilter.html#aba69b0f84c898a16d853a2cdee710840", null ], + [ "iterate", "classmrs__lib_1_1NotchFilter.html#ada5555bb90a375ccba73f8cd2b691b3e", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1ParamLoader-members.html b/classmrs__lib_1_1ParamLoader-members.html new file mode 100644 index 00000000..67a76334 --- /dev/null +++ b/classmrs__lib_1_1ParamLoader-members.html @@ -0,0 +1,142 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::ParamLoader Member List
+
+
+ +

This is the complete list of members for mrs_lib::ParamLoader, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addYamlFile(const std::string &filepath)mrs_lib::ParamLoaderinline
addYamlFileFromParam(const std::string &param_name)mrs_lib::ParamLoaderinline
getPrefix()mrs_lib::ParamLoaderinline
loadedSuccessfully()mrs_lib::ParamLoaderinline
loadMatrixArray(const std::string &name, std::vector< MatrixX< T >> &mat)mrs_lib::ParamLoaderinline
loadMatrixArray(const std::string &name, std::vector< MatrixX< T >> &mat, const std::vector< MatrixX< T >> &default_value)mrs_lib::ParamLoaderinline
loadMatrixArray2(const std::string &name)mrs_lib::ParamLoaderinline
loadMatrixArray2(const std::string &name, const std::vector< MatrixX< T >> &default_value)mrs_lib::ParamLoaderinline
loadMatrixDynamic(const std::string &name, MatrixX< T > &mat, int rows, int cols)mrs_lib::ParamLoaderinline
loadMatrixDynamic(const std::string &name, MatrixX< T > &mat, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)mrs_lib::ParamLoaderinline
loadMatrixDynamic2(const std::string &name, int rows, int cols)mrs_lib::ParamLoaderinline
loadMatrixDynamic2(const std::string &name, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)mrs_lib::ParamLoaderinline
loadMatrixStatic(const std::string &name, Eigen::Matrix< T, rows, cols > &mat)mrs_lib::ParamLoaderinline
loadMatrixStatic(const std::string &name, Eigen::Matrix< T, rows, cols > &mat, const Eigen::MatrixBase< Derived > &default_value)mrs_lib::ParamLoaderinline
loadMatrixStatic(const std::string &name, MatrixX< T > &mat, int rows, int cols)mrs_lib::ParamLoaderinline
loadMatrixStatic(const std::string &name, MatrixX< T > &mat, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)mrs_lib::ParamLoaderinline
loadMatrixStatic2(const std::string &name)mrs_lib::ParamLoaderinline
loadMatrixStatic2(const std::string &name, const Eigen::MatrixBase< Derived > &default_value)mrs_lib::ParamLoaderinline
loadMatrixStatic2(const std::string &name, int rows, int cols)mrs_lib::ParamLoaderinline
loadMatrixStatic2(const std::string &name, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)mrs_lib::ParamLoaderinline
loadParam(const std::string &name, T &out_value, const T &default_value)mrs_lib::ParamLoaderinline
loadParam(const std::string &name, T &out_value)mrs_lib::ParamLoaderinline
loadParam(const std::string &name, ros::Duration &out, const ros::Duration &default_value)mrs_lib::ParamLoaderinline
loadParam(const std::string &name, ros::Duration &out)mrs_lib::ParamLoaderinline
loadParam(const std::string &name, std_msgs::ColorRGBA &out, const std_msgs::ColorRGBA &default_value={})mrs_lib::ParamLoaderinline
loadParam(const std::string &name, MatrixX< T > &mat, const MatrixX< T > &default_value)mrs_lib::ParamLoaderinline
loadParam2(const std::string &name, const T &default_value)mrs_lib::ParamLoaderinline
loadParam2(const std::string &name)mrs_lib::ParamLoaderinline
loadParam2(const std::string &name, const std_msgs::ColorRGBA &default_value={})mrs_lib::ParamLoaderinline
loadParam2(const std::string &name, const MatrixX< T > &default_value)mrs_lib::ParamLoaderinline
loadParamReusable(const std::string &name, T &out_value, const T &default_value)mrs_lib::ParamLoaderinline
loadParamReusable(const std::string &name, T &out_value)mrs_lib::ParamLoaderinline
loadParamReusable2(const std::string &name, const T &default_value)mrs_lib::ParamLoaderinline
loadParamReusable2(const std::string &name)mrs_lib::ParamLoaderinline
ParamLoader(const ros::NodeHandle &nh, bool printValues=true, std::string_view node_name=std::string())mrs_lib::ParamLoaderinline
ParamLoader(const ros::NodeHandle &nh, std::string_view node_name)mrs_lib::ParamLoaderinline
ParamLoader(const std::string &filepath, const ros::NodeHandle &nh)mrs_lib::ParamLoaderinline
setPrefix(const std::string &prefix)mrs_lib::ParamLoaderinline
+
+ + + + diff --git a/classmrs__lib_1_1ParamLoader.html b/classmrs__lib_1_1ParamLoader.html new file mode 100644 index 00000000..bad5931b --- /dev/null +++ b/classmrs__lib_1_1ParamLoader.html @@ -0,0 +1,2180 @@ + + + + + + + +mrs_lib: mrs_lib::ParamLoader Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::ParamLoader Class Reference
+
+
+ +

Convenience class for loading parameters from rosparam server. + More...

+ +

#include <param_loader.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ParamLoader (const ros::NodeHandle &nh, bool printValues=true, std::string_view node_name=std::string())
 Main constructor. More...
 
 ParamLoader (const ros::NodeHandle &nh, std::string_view node_name)
 Convenience overload to enable writing ParamLoader pl(nh, node_name);. More...
 
 ParamLoader (const std::string &filepath, const ros::NodeHandle &nh)
 Convenience overload to enable writing ParamLoader pl(nh, "node_name");. More...
 
void setPrefix (const std::string &prefix)
 All loaded parameters will be prefixed with this string. More...
 
std::string getPrefix ()
 Returns the current parameter name prefix. More...
 
bool addYamlFile (const std::string &filepath)
 Adds the specified file as a source of static parameters. More...
 
bool addYamlFileFromParam (const std::string &param_name)
 Adds the specified file as a source of static parameters. More...
 
bool loadedSuccessfully ()
 Indicates whether all compulsory parameters were successfully loaded. More...
 
template<typename T >
bool loadParam (const std::string &name, T &out_value, const T &default_value)
 Loads a parameter from the rosparam server with a default value. More...
 
template<typename T >
loadParam2 (const std::string &name, const T &default_value)
 Loads a parameter from the rosparam server with a default value. More...
 
template<typename T >
bool loadParamReusable (const std::string &name, T &out_value, const T &default_value)
 Loads a parameter from the rosparam server with a default value. More...
 
template<typename T >
loadParamReusable2 (const std::string &name, const T &default_value)
 Loads an optional reusable parameter from the rosparam server. More...
 
template<typename T >
bool loadParam (const std::string &name, T &out_value)
 Loads a compulsory parameter from the rosparam server. More...
 
template<typename T >
loadParam2 (const std::string &name)
 Loads a compulsory parameter from the rosparam server. More...
 
template<typename T >
bool loadParamReusable (const std::string &name, T &out_value)
 Loads a compulsory parameter from the rosparam server. More...
 
template<typename T >
loadParamReusable2 (const std::string &name)
 Loads a compulsory parameter from the rosparam server. More...
 
bool loadParam (const std::string &name, ros::Duration &out, const ros::Duration &default_value)
 An overload for loading ros::Duration. More...
 
bool loadParam (const std::string &name, ros::Duration &out)
 An overload for loading ros::Duration. More...
 
bool loadParam (const std::string &name, std_msgs::ColorRGBA &out, const std_msgs::ColorRGBA &default_value={})
 An overload for loading std_msgs::ColorRGBA. More...
 
std_msgs::ColorRGBA loadParam2 (const std::string &name, const std_msgs::ColorRGBA &default_value={})
 An overload for loading std_msgs::ColorRGBA. More...
 
template<typename T >
void loadParam (const std::string &name, MatrixX< T > &mat, const MatrixX< T > &default_value)
 An overload for loading Eigen matrices. More...
 
template<typename T >
MatrixX< T > loadParam2 (const std::string &name, const MatrixX< T > &default_value)
 An overload for loading Eigen matrices. More...
 
template<int rows, int cols, typename T >
void loadMatrixStatic (const std::string &name, Eigen::Matrix< T, rows, cols > &mat)
 Specialized method for loading compulsory Eigen matrix parameters. More...
 
template<int rows, int cols, typename T , typename Derived >
void loadMatrixStatic (const std::string &name, Eigen::Matrix< T, rows, cols > &mat, const Eigen::MatrixBase< Derived > &default_value)
 Specialized method for loading Eigen matrix parameters with default value. More...
 
template<int rows, int cols, typename T = double>
Eigen::Matrix< T, rows, cols > loadMatrixStatic2 (const std::string &name)
 Specialized method for loading compulsory Eigen matrix parameters. More...
 
template<int rows, int cols, typename T , typename Derived >
Eigen::Matrix< T, rows, cols > loadMatrixStatic2 (const std::string &name, const Eigen::MatrixBase< Derived > &default_value)
 Specialized method for loading Eigen matrix parameters with default value. More...
 
template<typename T >
void loadMatrixStatic (const std::string &name, MatrixX< T > &mat, int rows, int cols)
 Specialized method for loading compulsory Eigen matrix parameters. More...
 
template<typename T , typename Derived >
void loadMatrixStatic (const std::string &name, MatrixX< T > &mat, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)
 Specialized method for loading Eigen matrix parameters with default value. More...
 
template<typename T = double>
MatrixX< T > loadMatrixStatic2 (const std::string &name, int rows, int cols)
 Specialized method for loading compulsory Eigen matrix parameters. More...
 
template<typename T , typename Derived >
MatrixX< T > loadMatrixStatic2 (const std::string &name, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)
 Specialized method for loading Eigen matrix parameters with default value. More...
 
template<typename T >
void loadMatrixDynamic (const std::string &name, MatrixX< T > &mat, int rows, int cols)
 Specialized method for loading compulsory dynamic Eigen matrix parameters. More...
 
template<typename T , typename Derived >
void loadMatrixDynamic (const std::string &name, MatrixX< T > &mat, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)
 Specialized method for loading compulsory dynamic Eigen matrix parameters. More...
 
template<typename T = double>
MatrixX< T > loadMatrixDynamic2 (const std::string &name, int rows, int cols)
 Specialized method for loading compulsory dynamic Eigen matrix parameters. More...
 
template<typename T , typename Derived >
MatrixX< T > loadMatrixDynamic2 (const std::string &name, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)
 Specialized method for loading compulsory dynamic Eigen matrix parameters. More...
 
template<typename T >
void loadMatrixArray (const std::string &name, std::vector< MatrixX< T >> &mat)
 Specialized method for loading compulsory parameters, interpreted as an array of dynamic Eigen matrices. More...
 
template<typename T >
void loadMatrixArray (const std::string &name, std::vector< MatrixX< T >> &mat, const std::vector< MatrixX< T >> &default_value)
 Specialized method for loading compulsory parameters, interpreted as an array of dynamic Eigen matrices. More...
 
template<typename T = double>
std::vector< MatrixX< T > > loadMatrixArray2 (const std::string &name)
 Specialized method for loading compulsory parameters, interpreted as an array of dynamic Eigen matrices. More...
 
template<typename T >
std::vector< MatrixX< T > > loadMatrixArray2 (const std::string &name, const std::vector< MatrixX< T >> &default_value)
 Specialized method for loading compulsory parameters, interpreted as an array of dynamic Eigen matrices. More...
 
+

Detailed Description

+

Convenience class for loading parameters from rosparam server.

+

The parameters can be loaded as compulsory. If a compulsory parameter is not found on the rosparam server (e.g. because it is missing in the launchfile or the yaml config file), an internal flag is set to false, indicating that the parameter loading procedure failed. This flag can be checked using the loaded_successfully() method after all parameters were attempted to be loaded (see usage example usage below).

+

The loaded parameter names and corresponding values are printed to stdout by default for user convenience. Special cases such as loading of Eigen matrices or loading of std::vectors of various values are also provided.

+

To load parameters into the rosparam server, use a launchfile prefferably. See documentation of ROS launchfiles here: http://wiki.ros.org/roslaunch/XML. Specifically, the param XML tag is used for loading parameters directly from the launchfile: http://wiki.ros.org/roslaunch/XML/param, and the rosparam XML tag tag is used for loading parameters from a yaml file: http://wiki.ros.org/roslaunch/XML/rosparam.

+
Examples
param_loader/example.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ ParamLoader() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::ParamLoader::ParamLoader (const ros::NodeHandle & nh,
bool printValues = true,
std::string_view node_name = std::string() 
)
+
+inline
+
+ +

Main constructor.

+
Parameters
+ + + + +
nhThe parameters will be loaded from rosparam using this node handle.
printValuesIf true, the loaded values will be printed to stdout using std::cout or ROS_INFO if node_name is not empty.
node_nameOptional node name used when printing the loaded values or loading errors.
+
+
+ +
+
+ +

◆ ParamLoader() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
mrs_lib::ParamLoader::ParamLoader (const ros::NodeHandle & nh,
std::string_view node_name 
)
+
+inline
+
+ +

Convenience overload to enable writing ParamLoader pl(nh, node_name);.

+
Parameters
+ + + +
nhThe parameters will be loaded from rosparam using this node handle.
node_nameOptional node name used when printing the loaded values or loading errors.
+
+
+ +
+
+ +

◆ ParamLoader() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
mrs_lib::ParamLoader::ParamLoader (const std::string & filepath,
const ros::NodeHandle & nh 
)
+
+inline
+
+ +

Convenience overload to enable writing ParamLoader pl(nh, "node_name");.

+
Parameters
+ + + +
nhThe parameters will be loaded from rosparam using this node handle.
node_nameOptional node name used when printing the loaded values or loading errors.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ addYamlFile()

+ +
+
+ + + + + +
+ + + + + + + + +
bool mrs_lib::ParamLoader::addYamlFile (const std::string & filepath)
+
+inline
+
+ +

Adds the specified file as a source of static parameters.

+
Parameters
+ + +
filepathThe full path to the yaml file to be loaded.
+
+
+
Returns
true if loading and parsing the file was successful, false otherwise.
+ +
+
+ +

◆ addYamlFileFromParam()

+ +
+
+ + + + + +
+ + + + + + + + +
bool mrs_lib::ParamLoader::addYamlFileFromParam (const std::string & param_name)
+
+inline
+
+ +

Adds the specified file as a source of static parameters.

+
Parameters
+ + +
filepathThe full path to the yaml file to be loaded.
+
+
+
Returns
true if loading and parsing the file was successful, false otherwise.
+ +
+
+ +

◆ getPrefix()

+ +
+
+ + + + + +
+ + + + + + + +
std::string mrs_lib::ParamLoader::getPrefix ()
+
+inline
+
+ +

Returns the current parameter name prefix.

+
Returns
the current prefix to be applied to the loaded parameters.
+ +
+
+ +

◆ loadedSuccessfully()

+ +
+
+ + + + + +
+ + + + + + + +
bool mrs_lib::ParamLoader::loadedSuccessfully ()
+
+inline
+
+ +

Indicates whether all compulsory parameters were successfully loaded.

+
Returns
false if any compulsory parameter was not loaded (is not present at rosparam server). Otherwise returns true.
+
Examples
param_loader/example.cpp.
+
+ +
+
+ +

◆ loadMatrixArray() [1/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void mrs_lib::ParamLoader::loadMatrixArray (const std::string & name,
std::vector< MatrixX< T >> & mat 
)
+
+inline
+
+ +

Specialized method for loading compulsory parameters, interpreted as an array of dynamic Eigen matrices.

+

The number of rows and columns of the matrices to be loaded is specified in the rosparam parameter. Specifically, the name/rows value specifies the number of rows, which must be common to all the loaded matrices (i.e. it is one integer >= 0), and the name/cols value specifies the number of columns of each matrix (i.e. it is an array of integers > 0). The name/data array contains the values of the elements of the matrices and it must have length $ r\sum_i c_i $, where $ r $ is the common number of rows and $ c_i $ is the number of columns of the $ i $-th matrix. A typical structure of a yaml file, specifying the matrix array to be loaded using this method, is

+
matrix_array:
+
rows: 3
+
cols: [1, 2]
+
data: [-5.0, Eigen::Dynamic0.0, 23.0,
+
-5.0, Eigen::Dynamic0.0, 12.0,
+
2.0, 4.0, 7.0]
+

which will be loaded as a std::vector, containing one $ 3\times 1 $ matrix and one $ 3\times 2 $ matrix.

+

If the dimensions of the loaded matrices do not match the specified number of rows and columns, the loading process is unsuccessful (loaded_successfully() will return false). If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the loading process is unsuccessful. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + + +
nameName of the parameter in the rosparam server.
matReference to the variable to which the parameter value will be stored (such as a class member variable).
+
+
+ +
+
+ +

◆ loadMatrixArray() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::ParamLoader::loadMatrixArray (const std::string & name,
std::vector< MatrixX< T >> & mat,
const std::vector< MatrixX< T >> & default_value 
)
+
+inline
+
+ +

Specialized method for loading compulsory parameters, interpreted as an array of dynamic Eigen matrices.

+

This overload of the loadMatrixArray() method takes a default value for the parameter, which is used in case a rosparam with the specified name is not found in the rosparam server, instead of causing an unsuccessful load. This makes specifying the parameter value in the rosparam server optional.

+
Parameters
+ + + + +
nameName of the parameter in the rosparam server.
matReference to the variable to which the parameter value will be stored (such as a class member variable).
default_valueThe default value to be used in case the parameter is not found on the rosparam server.
+
+
+ +
+
+ +

◆ loadMatrixArray2() [1/2]

+ +
+
+
+template<typename T = double>
+ + + + + +
+ + + + + + + + +
std::vector<MatrixX<T> > mrs_lib::ParamLoader::loadMatrixArray2 (const std::string & name)
+
+inline
+
+ +

Specialized method for loading compulsory parameters, interpreted as an array of dynamic Eigen matrices.

+

This method works in the same way as the loadMatrixArray() method for compulsory parameters, except that the loaded parameter is returned and not stored in the reference parameter.

+
Parameters
+ + +
nameName of the parameter in the rosparam server.
+
+
+
Returns
The loaded parameter or a default constructed object of the respective type.
+ +
+
+ +

◆ loadMatrixArray2() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::vector<MatrixX<T> > mrs_lib::ParamLoader::loadMatrixArray2 (const std::string & name,
const std::vector< MatrixX< T >> & default_value 
)
+
+inline
+
+ +

Specialized method for loading compulsory parameters, interpreted as an array of dynamic Eigen matrices.

+

This method works in the same way as the loadMatrixArray() method for optional parameters, except that the loaded parameter is returned and not stored in the reference parameter.

+
Parameters
+ + + +
nameName of the parameter in the rosparam server.
default_valueThe default value to be used in case the parameter is not found on the rosparam server.
+
+
+
Returns
The loaded parameter or the default value.
+ +
+
+ +

◆ loadMatrixDynamic() [1/2]

+ +
+
+
+template<typename T , typename Derived >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::ParamLoader::loadMatrixDynamic (const std::string & name,
MatrixX< T > & mat,
const Eigen::MatrixBase< Derived > & default_value,
int rows,
int cols 
)
+
+inline
+
+ +

Specialized method for loading compulsory dynamic Eigen matrix parameters.

+

If the dimensions of the loaded matrix do not match the specified number of rows and columns, the loading process is unsuccessful (loaded_successfully() will return false). If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the default value is used. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + + + + + +
nameName of the parameter in the rosparam server.
default_valueThis value will be used if the parameter name is not found in the rosparam server.
matReference to the variable to which the parameter value will be stored (such as a class member variable).
rowsExpected number of rows of the matrix (negative value indicates that the number of rows is to be deduced from the specified number of columns and the size of the loaded array).
colsExpected number of columns of the matrix (negative value indicates that the number of columns is to be deduced from the specified number of rows and the size of the loaded array).
+
+
+ +
+
+ +

◆ loadMatrixDynamic() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::ParamLoader::loadMatrixDynamic (const std::string & name,
MatrixX< T > & mat,
int rows,
int cols 
)
+
+inline
+
+ +

Specialized method for loading compulsory dynamic Eigen matrix parameters.

+

If the dimensions of the loaded matrix do not match the specified number of rows and columns, the loading process is unsuccessful (loaded_successfully() will return false). If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the loading process is unsuccessful. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + + + + +
nameName of the parameter in the rosparam server.
matReference to the variable to which the parameter value will be stored (such as a class member variable).
rowsExpected number of rows of the matrix (negative value indicates that the number of rows is to be deduced from the specified number of columns and the size of the loaded array).
colsExpected number of columns of the matrix (negative value indicates that the number of columns is to be deduced from the specified number of rows and the size of the loaded array).
+
+
+ +
+
+ +

◆ loadMatrixDynamic2() [1/2]

+ +
+
+
+template<typename T , typename Derived >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MatrixX<T> mrs_lib::ParamLoader::loadMatrixDynamic2 (const std::string & name,
const Eigen::MatrixBase< Derived > & default_value,
int rows,
int cols 
)
+
+inline
+
+ +

Specialized method for loading compulsory dynamic Eigen matrix parameters.

+

If the dimensions of the loaded matrix do not match the specified number of rows and columns, the loading process is unsuccessful (loaded_successfully() will return false). If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the default value is used. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + + + + +
nameName of the parameter in the rosparam server.
default_valueThis value will be used if the parameter name is not found in the rosparam server.
rowsExpected number of rows of the matrix (negative value indicates that the number of rows is to be deduced from the specified number of columns and the size of the loaded array).
colsExpected number of columns of the matrix (negative value indicates that the number of columns is to be deduced from the specified number of rows and the size of the loaded array).
+
+
+
Returns
The loaded parameter value.
+ +
+
+ +

◆ loadMatrixDynamic2() [2/2]

+ +
+
+
+template<typename T = double>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
MatrixX<T> mrs_lib::ParamLoader::loadMatrixDynamic2 (const std::string & name,
int rows,
int cols 
)
+
+inline
+
+ +

Specialized method for loading compulsory dynamic Eigen matrix parameters.

+

If the dimensions of the loaded matrix do not match the specified number of rows and columns, the loading process is unsuccessful (loaded_successfully() will return false). If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the loading process is unsuccessful. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + + + +
nameName of the parameter in the rosparam server.
rowsExpected number of rows of the matrix (negative value indicates that the number of rows is to be deduced from the specified number of columns and the size of the loaded array).
colsExpected number of columns of the matrix (negative value indicates that the number of columns is to be deduced from the specified number of rows and the size of the loaded array).
+
+
+
Returns
The loaded parameter value.
+ +
+
+ +

◆ loadMatrixStatic() [1/4]

+ +
+
+
+template<int rows, int cols, typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void mrs_lib::ParamLoader::loadMatrixStatic (const std::string & name,
Eigen::Matrix< T, rows, cols > & mat 
)
+
+inline
+
+ +

Specialized method for loading compulsory Eigen matrix parameters.

+

If the dimensions of the loaded matrix do not match the specified number of rows and columns, the loading process is unsuccessful (loaded_successfully() will return false). If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the loading process is unsuccessful. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Template Parameters
+ + + +
rowsExpected number of rows of the matrix.
colsExpected number of columns of the matrix.
+
+
+
Parameters
+ + + +
nameName of the parameter in the rosparam server.
matReference to the variable to which the parameter value will be stored (such as a class member variable).
+
+
+ +
+
+ +

◆ loadMatrixStatic() [2/4]

+ +
+
+
+template<int rows, int cols, typename T , typename Derived >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::ParamLoader::loadMatrixStatic (const std::string & name,
Eigen::Matrix< T, rows, cols > & mat,
const Eigen::MatrixBase< Derived > & default_value 
)
+
+inline
+
+ +

Specialized method for loading Eigen matrix parameters with default value.

+

If the dimensions of the loaded matrix do not match the specified number of rows and columns, the loading process is unsuccessful (loaded_successfully() will return false). If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the default value is used. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Template Parameters
+ + + +
rowsExpected number of rows of the matrix.
colsExpected number of columns of the matrix.
+
+
+
Parameters
+ + + + +
nameName of the parameter in the rosparam server.
matReference to the variable to which the parameter value will be stored (such as a class member variable).
default_valueThis value will be used if the parameter name is not found in the rosparam server.
+
+
+ +
+
+ +

◆ loadMatrixStatic() [3/4]

+ +
+
+
+template<typename T , typename Derived >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::ParamLoader::loadMatrixStatic (const std::string & name,
MatrixX< T > & mat,
const Eigen::MatrixBase< Derived > & default_value,
int rows,
int cols 
)
+
+inline
+
+ +

Specialized method for loading Eigen matrix parameters with default value.

+

If the dimensions of the loaded matrix do not match the specified number of rows and columns, the loading process is unsuccessful (loaded_successfully() will return false). If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the default value is used. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + + + + + +
nameName of the parameter in the rosparam server.
matReference to the variable to which the parameter value will be stored (such as a class member variable).
default_valueThis value will be used if the parameter name is not found in the rosparam server.
rowsExpected number of rows of the matrix.
colsExpected number of columns of the matrix.
+
+
+ +
+
+ +

◆ loadMatrixStatic() [4/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::ParamLoader::loadMatrixStatic (const std::string & name,
MatrixX< T > & mat,
int rows,
int cols 
)
+
+inline
+
+ +

Specialized method for loading compulsory Eigen matrix parameters.

+

If the dimensions of the loaded matrix do not match the specified number of rows and columns, the loading process is unsuccessful (loaded_successfully() will return false). If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the loading process is unsuccessful. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + + + + +
nameName of the parameter in the rosparam server.
matReference to the variable to which the parameter value will be stored (such as a class member variable).
rowsExpected number of rows of the matrix.
colsExpected number of columns of the matrix.
+
+
+ +
+
+ +

◆ loadMatrixStatic2() [1/4]

+ +
+
+
+template<int rows, int cols, typename T = double>
+ + + + + +
+ + + + + + + + +
Eigen::Matrix<T, rows, cols> mrs_lib::ParamLoader::loadMatrixStatic2 (const std::string & name)
+
+inline
+
+ +

Specialized method for loading compulsory Eigen matrix parameters.

+

If the dimensions of the loaded matrix do not match the specified number of rows and columns, the loading process is unsuccessful (loaded_successfully() will return false). If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the loading process is unsuccessful. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Template Parameters
+ + + +
rowsExpected number of rows of the matrix.
colsExpected number of columns of the matrix.
+
+
+
Parameters
+ + +
nameName of the parameter in the rosparam server.
+
+
+
Returns
The loaded parameter value.
+ +
+
+ +

◆ loadMatrixStatic2() [2/4]

+ +
+
+
+template<int rows, int cols, typename T , typename Derived >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Eigen::Matrix<T, rows, cols> mrs_lib::ParamLoader::loadMatrixStatic2 (const std::string & name,
const Eigen::MatrixBase< Derived > & default_value 
)
+
+inline
+
+ +

Specialized method for loading Eigen matrix parameters with default value.

+

If the dimensions of the loaded matrix do not match the specified number of rows and columns, the loading process is unsuccessful (loaded_successfully() will return false). If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the default value is used. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Template Parameters
+ + + +
rowsExpected number of rows of the matrix.
colsExpected number of columns of the matrix.
+
+
+
Parameters
+ + + +
nameName of the parameter in the rosparam server.
default_valueThis value will be used if the parameter name is not found in the rosparam server.
+
+
+
Returns
The loaded parameter value.
+ +
+
+ +

◆ loadMatrixStatic2() [3/4]

+ +
+
+
+template<typename T , typename Derived >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MatrixX<T> mrs_lib::ParamLoader::loadMatrixStatic2 (const std::string & name,
const Eigen::MatrixBase< Derived > & default_value,
int rows,
int cols 
)
+
+inline
+
+ +

Specialized method for loading Eigen matrix parameters with default value.

+

If the dimensions of the loaded matrix do not match the specified number of rows and columns, the loading process is unsuccessful (loaded_successfully() will return false). If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the default value is used. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + + + + +
nameName of the parameter in the rosparam server.
default_valueThis value will be used if the parameter name is not found in the rosparam server.
rowsExpected number of rows of the matrix.
colsExpected number of columns of the matrix.
+
+
+
Returns
The loaded parameter value.
+ +
+
+ +

◆ loadMatrixStatic2() [4/4]

+ +
+
+
+template<typename T = double>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
MatrixX<T> mrs_lib::ParamLoader::loadMatrixStatic2 (const std::string & name,
int rows,
int cols 
)
+
+inline
+
+ +

Specialized method for loading compulsory Eigen matrix parameters.

+

If the dimensions of the loaded matrix do not match the specified number of rows and columns, the loading process is unsuccessful (loaded_successfully() will return false). If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the loading process is unsuccessful. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + + + +
nameName of the parameter in the rosparam server.
rowsExpected number of rows of the matrix.
colsExpected number of columns of the matrix.
+
+
+
Returns
The loaded parameter value.
+ +
+
+ +

◆ loadParam() [1/6]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::ParamLoader::loadParam (const std::string & name,
MatrixX< T > & mat,
const MatrixX< T > & default_value 
)
+
+inline
+
+ +

An overload for loading Eigen matrices.

+

For compulsory Eigen matrices, use loadMatrixStatic() or loadMatrixDynamic(). Matrix dimensions are deduced from the provided default value. If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the default value is used. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + + + +
nameName of the parameter in the rosparam server.
out_valueReference to the variable to which the parameter value will be stored (such as a class member variable).
default_valueThis value will be used if the parameter name is not found in the rosparam server.
+
+
+ +
+
+ +

◆ loadParam() [2/6]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool mrs_lib::ParamLoader::loadParam (const std::string & name,
ros::Duration & out 
)
+
+inline
+
+ +

An overload for loading ros::Duration.

+

The duration will be loaded as a double, representing a number of seconds, and then converted to ros::Duration.

+
Parameters
+ + + +
nameName of the parameter in the rosparam server.
out_valueReference to the variable to which the parameter value will be stored (such as a class member variable).
+
+
+
Returns
true if the parameter was loaded from rosparam, false if the default value was used.
+ +
+
+ +

◆ loadParam() [3/6]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool mrs_lib::ParamLoader::loadParam (const std::string & name,
ros::Duration & out,
const ros::Duration & default_value 
)
+
+inline
+
+ +

An overload for loading ros::Duration.

+

The duration will be loaded as a double, representing a number of seconds, and then converted to ros::Duration.

+
Parameters
+ + + + +
nameName of the parameter in the rosparam server.
out_valueReference to the variable to which the parameter value will be stored (such as a class member variable).
default_valueThis value will be used if the parameter name is not found in the rosparam server.
+
+
+
Returns
true if the parameter was loaded from rosparam, false if the default value was used.
+ +
+
+ +

◆ loadParam() [4/6]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool mrs_lib::ParamLoader::loadParam (const std::string & name,
std_msgs::ColorRGBA & out,
const std_msgs::ColorRGBA & default_value = {} 
)
+
+inline
+
+ +

An overload for loading std_msgs::ColorRGBA.

+

The color will be loaded as several double -typed variables, representing the R, G, B and A color elements.

+
Parameters
+ + + + +
nameName of the parameter in the rosparam server.
out_valueReference to the variable to which the parameter value will be stored (such as a class member variable).
default_valueThis value will be used if the parameter name is not found in the rosparam server.
+
+
+
Returns
true if the parameter was loaded from rosparam, false if the default value was used.
+ +
+
+ +

◆ loadParam() [5/6]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool mrs_lib::ParamLoader::loadParam (const std::string & name,
T & out_value 
)
+
+inline
+
+ +

Loads a compulsory parameter from the rosparam server.

+

If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the loading process is unsuccessful (loaded_successfully() will return false). Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + + +
nameName of the parameter in the rosparam server.
out_valueReference to the variable to which the parameter value will be stored (such as a class member variable).
+
+
+
Returns
true if the parameter was loaded from rosparam, false if the default value was used.
+ +
+
+ +

◆ loadParam() [6/6]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool mrs_lib::ParamLoader::loadParam (const std::string & name,
T & out_value,
const T & default_value 
)
+
+inline
+
+ +

Loads a parameter from the rosparam server with a default value.

+

If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the default value is used. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + + + +
nameName of the parameter in the rosparam server.
out_valueReference to the variable to which the parameter value will be stored (such as a class member variable).
default_valueThis value will be used if the parameter name is not found in the rosparam server.
+
+
+
Returns
true if the parameter was loaded from rosparam, false if the default value was used.
+
Examples
param_loader/example.cpp.
+
+ +
+
+ +

◆ loadParam2() [1/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
T mrs_lib::ParamLoader::loadParam2 (const std::string & name)
+
+inline
+
+ +

Loads a compulsory parameter from the rosparam server.

+

If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the loading process is unsuccessful (loaded_successfully() will return false). Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + +
nameName of the parameter in the rosparam server.
+
+
+
Returns
The loaded parameter value.
+ +
+
+ +

◆ loadParam2() [2/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
MatrixX<T> mrs_lib::ParamLoader::loadParam2 (const std::string & name,
const MatrixX< T > & default_value 
)
+
+inline
+
+ +

An overload for loading Eigen matrices.

+

For compulsory Eigen matrices, use loadMatrixStatic() or loadMatrixDynamic(). Matrix dimensions are deduced from the provided default value. If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the default value is used. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + + +
nameName of the parameter in the rosparam server.
default_valueThis value will be used if the parameter name is not found in the rosparam server.
+
+
+
Returns
The loaded parameter value.
+ +
+
+ +

◆ loadParam2() [3/4]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std_msgs::ColorRGBA mrs_lib::ParamLoader::loadParam2 (const std::string & name,
const std_msgs::ColorRGBA & default_value = {} 
)
+
+inline
+
+ +

An overload for loading std_msgs::ColorRGBA.

+

The color will be loaded as several double -typed variables, representing the R, G, B and A color elements.

+
Parameters
+ + + +
nameName of the parameter in the rosparam server.
default_valueThis value will be used if the parameter name is not found in the rosparam server.
+
+
+
Returns
The loaded parameter value.
+ +
+
+ +

◆ loadParam2() [4/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T mrs_lib::ParamLoader::loadParam2 (const std::string & name,
const T & default_value 
)
+
+inline
+
+ +

Loads a parameter from the rosparam server with a default value.

+

If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the default value is used. Using this method, the parameter can only be loaded once using the same ParamLoader instance without error.

+
Parameters
+ + + +
nameName of the parameter in the rosparam server.
default_valueThis value will be used if the parameter name is not found in the rosparam server.
+
+
+
Returns
The loaded parameter value.
+
Examples
param_loader/example.cpp.
+
+ +
+
+ +

◆ loadParamReusable() [1/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool mrs_lib::ParamLoader::loadParamReusable (const std::string & name,
T & out_value 
)
+
+inline
+
+ +

Loads a compulsory parameter from the rosparam server.

+

If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the loading process is unsuccessful (loaded_successfully() will return false). Using this method, the parameter can be loaded multiple times using the same ParamLoader instance without error.

+
Parameters
+ + + +
nameName of the parameter in the rosparam server.
out_valueReference to the variable to which the parameter value will be stored (such as a class member variable).
+
+
+
Returns
true if the parameter was loaded from rosparam, false if the default value was used.
+ +
+
+ +

◆ loadParamReusable() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool mrs_lib::ParamLoader::loadParamReusable (const std::string & name,
T & out_value,
const T & default_value 
)
+
+inline
+
+ +

Loads a parameter from the rosparam server with a default value.

+

If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the default value is used. Using this method, the parameter can be loaded multiple times using the same ParamLoader instance without error.

+
Parameters
+ + + + +
nameName of the parameter in the rosparam server.
out_valueReference to the variable to which the parameter value will be stored (such as a class member variable).
default_valueThis value will be used if the parameter name is not found in the rosparam server.
+
+
+
Returns
true if the parameter was loaded from rosparam, false if the default value was used.
+ +
+
+ +

◆ loadParamReusable2() [1/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
T mrs_lib::ParamLoader::loadParamReusable2 (const std::string & name)
+
+inline
+
+ +

Loads a compulsory parameter from the rosparam server.

+

If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the loading process is unsuccessful (loaded_successfully() will return false). Using this method, the parameter can be loaded multiple times using the same ParamLoader instance without error.

+
Parameters
+ + +
nameName of the parameter in the rosparam server.
+
+
+
Returns
The loaded parameter value.
+ +
+
+ +

◆ loadParamReusable2() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T mrs_lib::ParamLoader::loadParamReusable2 (const std::string & name,
const T & default_value 
)
+
+inline
+
+ +

Loads an optional reusable parameter from the rosparam server.

+

If the parameter with the specified name is not found on the rosparam server (e.g. because it is not specified in the launchfile or yaml config file), the default value is used. Using this method, the parameter can be loaded multiple times using the same ParamLoader instance without error.

+
Parameters
+ + + +
nameName of the parameter in the rosparam server.
default_valueThis value will be used if the parameter name is not found in the rosparam server.
+
+
+
Returns
The loaded parameter value.
+ +
+
+ +

◆ setPrefix()

+ +
+
+ + + + + +
+ + + + + + + + +
void mrs_lib::ParamLoader::setPrefix (const std::string & prefix)
+
+inline
+
+ +

All loaded parameters will be prefixed with this string.

+
Parameters
+ + +
prefixthe prefix to be applied to all loaded parameters from now on.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1ParamLoader.js b/classmrs__lib_1_1ParamLoader.js new file mode 100644 index 00000000..12d4a209 --- /dev/null +++ b/classmrs__lib_1_1ParamLoader.js @@ -0,0 +1,41 @@ +var classmrs__lib_1_1ParamLoader = +[ + [ "ParamLoader", "classmrs__lib_1_1ParamLoader.html#a26079fe045fe261add0548c40c5d3baa", null ], + [ "ParamLoader", "classmrs__lib_1_1ParamLoader.html#a09d03d4f79736e8269f66ba2f11356c5", null ], + [ "ParamLoader", "classmrs__lib_1_1ParamLoader.html#ac3de917c61f02060c4e28afb2765f71c", null ], + [ "addYamlFile", "classmrs__lib_1_1ParamLoader.html#a7e0a9d3c3ca4e85692999f99b51e53e7", null ], + [ "addYamlFileFromParam", "classmrs__lib_1_1ParamLoader.html#a3ae6c294bc7bcf0fa17557ee36e04b31", null ], + [ "getPrefix", "classmrs__lib_1_1ParamLoader.html#a68eb35df103229cd2de7416252723bf8", null ], + [ "loadedSuccessfully", "classmrs__lib_1_1ParamLoader.html#ad49130b893f09bc2247e2bc37a41f6d5", null ], + [ "loadMatrixArray", "classmrs__lib_1_1ParamLoader.html#af5397147ce0a3ecaf0e1f178a9435183", null ], + [ "loadMatrixArray", "classmrs__lib_1_1ParamLoader.html#aaeaec89a76f044b2e5fe2883ae768942", null ], + [ "loadMatrixArray2", "classmrs__lib_1_1ParamLoader.html#af7ffe39a26bd4a457ab01b83e5d5795d", null ], + [ "loadMatrixArray2", "classmrs__lib_1_1ParamLoader.html#a46bb91300eaa5c0d06d462b950f92897", null ], + [ "loadMatrixDynamic", "classmrs__lib_1_1ParamLoader.html#a6b1fbdb2c1ed41ac533a67abad8638d9", null ], + [ "loadMatrixDynamic", "classmrs__lib_1_1ParamLoader.html#aabecb03ea3643752ddc3154e6c58d390", null ], + [ "loadMatrixDynamic2", "classmrs__lib_1_1ParamLoader.html#a99673cb2d8f39c18da5e6db967238ec9", null ], + [ "loadMatrixDynamic2", "classmrs__lib_1_1ParamLoader.html#a89bdbb61a1de508cc0f247f234d824d6", null ], + [ "loadMatrixStatic", "classmrs__lib_1_1ParamLoader.html#a03dc26f5fad92b0fb8b7437c074b23aa", null ], + [ "loadMatrixStatic", "classmrs__lib_1_1ParamLoader.html#a19bc5cbd5c3ee7d4614555dfe3d96001", null ], + [ "loadMatrixStatic", "classmrs__lib_1_1ParamLoader.html#af96b60fd7bce95d3e1d3aa351bccba9b", null ], + [ "loadMatrixStatic", "classmrs__lib_1_1ParamLoader.html#aafc3bb716f3728d5a1b1cfc45b0d3ddf", null ], + [ "loadMatrixStatic2", "classmrs__lib_1_1ParamLoader.html#a2a78e5b64d8681a46976a6e9d0486b1a", null ], + [ "loadMatrixStatic2", "classmrs__lib_1_1ParamLoader.html#ab6b1b2b00e8548b092893afcfbeee79f", null ], + [ "loadMatrixStatic2", "classmrs__lib_1_1ParamLoader.html#af8ab00da18479e583adf86983e77c577", null ], + [ "loadMatrixStatic2", "classmrs__lib_1_1ParamLoader.html#af06e1f2bdf94f8a18a19ae3e77a0f99a", null ], + [ "loadParam", "classmrs__lib_1_1ParamLoader.html#a6ee4d78d716c92045a38c40d6ae41c4d", null ], + [ "loadParam", "classmrs__lib_1_1ParamLoader.html#ae4893dc129c5f6fd07fc26f6c03279cd", null ], + [ "loadParam", "classmrs__lib_1_1ParamLoader.html#a5368f22f9c1eee287b39bcc91b8d8f42", null ], + [ "loadParam", "classmrs__lib_1_1ParamLoader.html#a472acaab459f4318dc20df8416b6023d", null ], + [ "loadParam", "classmrs__lib_1_1ParamLoader.html#af5d9f2ac1549f9a7f03a04b9cebf9fed", null ], + [ "loadParam", "classmrs__lib_1_1ParamLoader.html#a9e55225fa7d9de0e948b2e64494eb229", null ], + [ "loadParam2", "classmrs__lib_1_1ParamLoader.html#ab8a37a3b88261e120d6ff36a6aebf960", null ], + [ "loadParam2", "classmrs__lib_1_1ParamLoader.html#a080f2c2605b42219c63d62d0fd8e0948", null ], + [ "loadParam2", "classmrs__lib_1_1ParamLoader.html#a708d62a49386efe8334d8c13af2d8f85", null ], + [ "loadParam2", "classmrs__lib_1_1ParamLoader.html#a7b31603059669efa75b00d8e73bc163a", null ], + [ "loadParamReusable", "classmrs__lib_1_1ParamLoader.html#a31b36d7e1109d2c1d663122c689359c0", null ], + [ "loadParamReusable", "classmrs__lib_1_1ParamLoader.html#add294058e4857eda6a8ece7e0b451390", null ], + [ "loadParamReusable2", "classmrs__lib_1_1ParamLoader.html#abe9a7f5aea80c8cdb2d624c12f098a90", null ], + [ "loadParamReusable2", "classmrs__lib_1_1ParamLoader.html#ae3e15767c2e94a1f22a9205ae3f507f1", null ], + [ "setPrefix", "classmrs__lib_1_1ParamLoader.html#a8ad978834d5d6d1745a96f1ecc65a759", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1ParamProvider-members.html b/classmrs__lib_1_1ParamProvider-members.html new file mode 100644 index 00000000..60159a90 --- /dev/null +++ b/classmrs__lib_1_1ParamProvider-members.html @@ -0,0 +1,108 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::ParamProvider Member List
+
+
+ +

This is the complete list of members for mrs_lib::ParamProvider, including all inherited members.

+ + + + + +
addYamlFile(const std::string &filepath) (defined in mrs_lib::ParamProvider)mrs_lib::ParamProvider
getParam(const std::string &param_name, T &value_out) const (defined in mrs_lib::ParamProvider)mrs_lib::ParamProvider
getParam(const std::string &param_name, XmlRpc::XmlRpcValue &value_out) const (defined in mrs_lib::ParamProvider)mrs_lib::ParamProvider
ParamProvider(const ros::NodeHandle &nh, std::string node_name, const bool use_rosparam=true) (defined in mrs_lib::ParamProvider)mrs_lib::ParamProvider
+
+ + + + diff --git a/classmrs__lib_1_1ParamProvider.html b/classmrs__lib_1_1ParamProvider.html new file mode 100644 index 00000000..a3a51f7a --- /dev/null +++ b/classmrs__lib_1_1ParamProvider.html @@ -0,0 +1,138 @@ + + + + + + + +mrs_lib: mrs_lib::ParamProvider Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::ParamProvider Class Reference
+
+
+
+ + Inheritance diagram for mrs_lib::ParamProvider:
+
+
+ + + + + + + + + + + + +

+Public Member Functions

+template<typename T >
bool getParam (const std::string &param_name, T &value_out) const
 
+bool getParam (const std::string &param_name, XmlRpc::XmlRpcValue &value_out) const
 
ParamProvider (const ros::NodeHandle &nh, std::string node_name, const bool use_rosparam=true)
 
+bool addYamlFile (const std::string &filepath)
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1ParamProvider.js b/classmrs__lib_1_1ParamProvider.js new file mode 100644 index 00000000..5e605604 --- /dev/null +++ b/classmrs__lib_1_1ParamProvider.js @@ -0,0 +1,7 @@ +var classmrs__lib_1_1ParamProvider = +[ + [ "ParamProvider", "classmrs__lib_1_1ParamProvider.html#aa6f38dd58d2fd1093d6646134a5d6e59", null ], + [ "addYamlFile", "classmrs__lib_1_1ParamProvider.html#a137506901a03daeaaebcb5544de777f0", null ], + [ "getParam", "classmrs__lib_1_1ParamProvider.html#a6b3be6133e7eecc3f15b3c898c0911e0", null ], + [ "getParam", "classmrs__lib_1_1ParamProvider.html#aa3106f4d258195b890e8583d485c7547", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1ParamProvider__inherit__graph.map b/classmrs__lib_1_1ParamProvider__inherit__graph.map new file mode 100644 index 00000000..58880610 --- /dev/null +++ b/classmrs__lib_1_1ParamProvider__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1ParamProvider__inherit__graph.md5 b/classmrs__lib_1_1ParamProvider__inherit__graph.md5 new file mode 100644 index 00000000..39f82f91 --- /dev/null +++ b/classmrs__lib_1_1ParamProvider__inherit__graph.md5 @@ -0,0 +1 @@ +973d673c560fb5ce6ace0e67115fcd3e \ No newline at end of file diff --git a/classmrs__lib_1_1ParamProvider__inherit__graph.png b/classmrs__lib_1_1ParamProvider__inherit__graph.png new file mode 100644 index 00000000..d831db49 Binary files /dev/null and b/classmrs__lib_1_1ParamProvider__inherit__graph.png differ diff --git a/classmrs__lib_1_1PointObstacle-members.html b/classmrs__lib_1_1PointObstacle-members.html new file mode 100644 index 00000000..cfc6fbb6 --- /dev/null +++ b/classmrs__lib_1_1PointObstacle-members.html @@ -0,0 +1,111 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::PointObstacle Member List
+
+
+ +

This is the complete list of members for mrs_lib::PointObstacle, including all inherited members.

+ + + + + + + + +
doesSectionIntersect2d(const double startX, const double startY, const double endX, const double endY) (defined in mrs_lib::PointObstacle)mrs_lib::PointObstacle
doesSectionIntersect3d(const double startX, const double startY, const double startZ, const double endX, const double endY, const double endZ) (defined in mrs_lib::PointObstacle)mrs_lib::PointObstacle
getPointMessageVector(const double z) (defined in mrs_lib::PointObstacle)mrs_lib::PointObstacle
inflateSelf(double amount) (defined in mrs_lib::PointObstacle)mrs_lib::PointObstacle
isPointInside2d(const double px, const double py) (defined in mrs_lib::PointObstacle)mrs_lib::PointObstacle
isPointInside3d(const double px, const double py, const double pz) (defined in mrs_lib::PointObstacle)mrs_lib::PointObstacle
PointObstacle(const Eigen::RowVector2d center, const double r, const double height) (defined in mrs_lib::PointObstacle)mrs_lib::PointObstacle
+
+ + + + diff --git a/classmrs__lib_1_1PointObstacle.html b/classmrs__lib_1_1PointObstacle.html new file mode 100644 index 00000000..8b4cc76f --- /dev/null +++ b/classmrs__lib_1_1PointObstacle.html @@ -0,0 +1,142 @@ + + + + + + + +mrs_lib: mrs_lib::PointObstacle Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::PointObstacle Class Reference
+
+
+ + + + + + +

+Classes

struct  WrongHeight
 
struct  WrongRadius
 
+ + + + + + + + + + + + + + + +

+Public Member Functions

PointObstacle (const Eigen::RowVector2d center, const double r, const double height)
 
+bool isPointInside3d (const double px, const double py, const double pz)
 
+bool isPointInside2d (const double px, const double py)
 
+bool doesSectionIntersect3d (const double startX, const double startY, const double startZ, const double endX, const double endY, const double endZ)
 
+bool doesSectionIntersect2d (const double startX, const double startY, const double endX, const double endY)
 
+void inflateSelf (double amount)
 
+std::vector< geometry_msgs::Point > getPointMessageVector (const double z)
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1PointObstacle.js b/classmrs__lib_1_1PointObstacle.js new file mode 100644 index 00000000..ef840afa --- /dev/null +++ b/classmrs__lib_1_1PointObstacle.js @@ -0,0 +1,12 @@ +var classmrs__lib_1_1PointObstacle = +[ + [ "WrongHeight", "structmrs__lib_1_1PointObstacle_1_1WrongHeight.html", "structmrs__lib_1_1PointObstacle_1_1WrongHeight" ], + [ "WrongRadius", "structmrs__lib_1_1PointObstacle_1_1WrongRadius.html", "structmrs__lib_1_1PointObstacle_1_1WrongRadius" ], + [ "PointObstacle", "classmrs__lib_1_1PointObstacle.html#ae23a5341163b7fc975ca1718ec773ed8", null ], + [ "doesSectionIntersect2d", "classmrs__lib_1_1PointObstacle.html#a063fa66d5125370dacd8bedb266b3bb4", null ], + [ "doesSectionIntersect3d", "classmrs__lib_1_1PointObstacle.html#ac1709da71828a8f5ffbeddae1487f7b4", null ], + [ "getPointMessageVector", "classmrs__lib_1_1PointObstacle.html#a5a4ef423d30e58063989bca65febae11", null ], + [ "inflateSelf", "classmrs__lib_1_1PointObstacle.html#a099d99ff2989ff9fe1a73a82c290172e", null ], + [ "isPointInside2d", "classmrs__lib_1_1PointObstacle.html#ad46fb8ee8a3db26feaf4e7acfb7518b6", null ], + [ "isPointInside3d", "classmrs__lib_1_1PointObstacle.html#a884a85c236840877232795080c302d90", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1Polygon-members.html b/classmrs__lib_1_1Polygon-members.html new file mode 100644 index 00000000..c9e8b1c8 --- /dev/null +++ b/classmrs__lib_1_1Polygon-members.html @@ -0,0 +1,110 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::Polygon Member List
+
+
+ +

This is the complete list of members for mrs_lib::Polygon, including all inherited members.

+ + + + + + + +
doesSectionIntersect(const double startX, const double startY, const double endX, const double endY) (defined in mrs_lib::Polygon)mrs_lib::Polygon
getPointMessageVector(const double z) (defined in mrs_lib::Polygon)mrs_lib::Polygon
inflateSelf(double amount) (defined in mrs_lib::Polygon)mrs_lib::Polygon
isClockwise() (defined in mrs_lib::Polygon)mrs_lib::Polygon
isPointInside(const double px, const double py) (defined in mrs_lib::Polygon)mrs_lib::Polygon
Polygon(const Eigen::MatrixXd vertices) (defined in mrs_lib::Polygon)mrs_lib::Polygon
+
+ + + + diff --git a/classmrs__lib_1_1Polygon.html b/classmrs__lib_1_1Polygon.html new file mode 100644 index 00000000..348149b0 --- /dev/null +++ b/classmrs__lib_1_1Polygon.html @@ -0,0 +1,141 @@ + + + + + + + +mrs_lib: mrs_lib::Polygon Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::Polygon Class Reference
+
+
+ + + + + + + + +

+Classes

struct  ExtraVertices
 
struct  WrongNumberOfColumns
 
struct  WrongNumberOfVertices
 
+ + + + + + + + + + + + + +

+Public Member Functions

Polygon (const Eigen::MatrixXd vertices)
 
+bool isPointInside (const double px, const double py)
 
+bool doesSectionIntersect (const double startX, const double startY, const double endX, const double endY)
 
+bool isClockwise ()
 
+void inflateSelf (double amount)
 
+std::vector< geometry_msgs::Point > getPointMessageVector (const double z)
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1Polygon.js b/classmrs__lib_1_1Polygon.js new file mode 100644 index 00000000..a77eacd6 --- /dev/null +++ b/classmrs__lib_1_1Polygon.js @@ -0,0 +1,12 @@ +var classmrs__lib_1_1Polygon = +[ + [ "ExtraVertices", "structmrs__lib_1_1Polygon_1_1ExtraVertices.html", "structmrs__lib_1_1Polygon_1_1ExtraVertices" ], + [ "WrongNumberOfColumns", "structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns.html", "structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns" ], + [ "WrongNumberOfVertices", "structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices.html", "structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices" ], + [ "Polygon", "classmrs__lib_1_1Polygon.html#a000afa1f46e867c63100b08fcd8656ee", null ], + [ "doesSectionIntersect", "classmrs__lib_1_1Polygon.html#a3a8003ab7f027475cb416e02b5772d7b", null ], + [ "getPointMessageVector", "classmrs__lib_1_1Polygon.html#a86a38fbc31a7218a8713c4db8aa8d990", null ], + [ "inflateSelf", "classmrs__lib_1_1Polygon.html#a76512a8ac70d056b7bb7661e6b7e5abc", null ], + [ "isClockwise", "classmrs__lib_1_1Polygon.html#a1b1b5c8674b256ca13266a92b3e09d79", null ], + [ "isPointInside", "classmrs__lib_1_1Polygon.html#a65e1c25641c33882c2ad6e913dbcdc84", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1Profiler-members.html b/classmrs__lib_1_1Profiler-members.html new file mode 100644 index 00000000..d9165f5b --- /dev/null +++ b/classmrs__lib_1_1Profiler-members.html @@ -0,0 +1,110 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::Profiler Member List
+
+
+ +

This is the complete list of members for mrs_lib::Profiler, including all inherited members.

+ + + + + + + +
createRoutine(std::string name, double expected_rate, double threshold, ros::TimerEvent event)mrs_lib::Profiler
createRoutine(std::string name)mrs_lib::Profiler
operator=(const Profiler &other)mrs_lib::Profiler
Profiler()mrs_lib::Profiler
Profiler(ros::NodeHandle &nh, std::string node_name, bool profiler_enabled)mrs_lib::Profiler
Profiler(const Profiler &other)mrs_lib::Profiler
+
+ + + + diff --git a/classmrs__lib_1_1Profiler.html b/classmrs__lib_1_1Profiler.html new file mode 100644 index 00000000..e88a1172 --- /dev/null +++ b/classmrs__lib_1_1Profiler.html @@ -0,0 +1,310 @@ + + + + + + + +mrs_lib: mrs_lib::Profiler Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::Profiler Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Profiler ()
 the basic constructor
 
 Profiler (ros::NodeHandle &nh, std::string node_name, bool profiler_enabled)
 the full constructor More...
 
 Profiler (const Profiler &other)
 the copy constructor More...
 
Profileroperator= (const Profiler &other)
 the assignment operator More...
 
Routine createRoutine (std::string name, double expected_rate, double threshold, ros::TimerEvent event)
 create a routine for a periodic function More...
 
Routine createRoutine (std::string name)
 create a routine for an aperiodic function More...
 
+

Constructor & Destructor Documentation

+ +

◆ Profiler() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::Profiler::Profiler (ros::NodeHandle & nh,
std::string node_name,
bool profiler_enabled 
)
+
+ +

the full constructor

+
Parameters
+ + + + +
nhnode handle
node_namethe node name
profiler_enabledif profiling is enabled
+
+
+ +
+
+ +

◆ Profiler() [2/2]

+ +
+
+ + + + + + + + +
mrs_lib::Profiler::Profiler (const Profilerother)
+
+ +

the copy constructor

+
Parameters
+ + +
otherthe other object
+
+
+ +
+
+

Member Function Documentation

+ +

◆ createRoutine() [1/2]

+ +
+
+ + + + + + + + +
Routine mrs_lib::Profiler::createRoutine (std::string name)
+
+ +

create a routine for an aperiodic function

+
Parameters
+ + +
namethe function name
+
+
+
Returns
the Routine
+ +
+
+ +

◆ createRoutine() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Routine mrs_lib::Profiler::createRoutine (std::string name,
double expected_rate,
double threshold,
ros::TimerEvent event 
)
+
+ +

create a routine for a periodic function

+
Parameters
+ + + + + +
namethe function name
expected_ratethe expected rate in Hz
thresholdthe delay threshold to mark it as "late" in s
eventthe ros Timer event
+
+
+
Returns
the Routine
+ +
+
+ +

◆ operator=()

+ +
+
+ + + + + + + + +
Profiler & mrs_lib::Profiler::operator= (const Profilerother)
+
+ +

the assignment operator

+
Parameters
+ + +
otherthe other object
+
+
+
Returns
this object
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1Profiler.js b/classmrs__lib_1_1Profiler.js new file mode 100644 index 00000000..f2801403 --- /dev/null +++ b/classmrs__lib_1_1Profiler.js @@ -0,0 +1,9 @@ +var classmrs__lib_1_1Profiler = +[ + [ "Profiler", "classmrs__lib_1_1Profiler.html#aeb0acb43639e4e29572b1ecbedf6029e", null ], + [ "Profiler", "classmrs__lib_1_1Profiler.html#a1a61b447fb65e1d09a0bd6dab57c73eb", null ], + [ "Profiler", "classmrs__lib_1_1Profiler.html#ac384b6aa30ce0f43ee8d38eaad93ca28", null ], + [ "createRoutine", "classmrs__lib_1_1Profiler.html#a631e75be501cf4353dc8578bd9f66029", null ], + [ "createRoutine", "classmrs__lib_1_1Profiler.html#aaf170ec3c6f67e11931cde978a5d3750", null ], + [ "operator=", "classmrs__lib_1_1Profiler.html#ae054cd2655538ee7b4a0dec35aa0cf16", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1PublisherHandler-members.html b/classmrs__lib_1_1PublisherHandler-members.html new file mode 100644 index 00000000..586b14fd --- /dev/null +++ b/classmrs__lib_1_1PublisherHandler-members.html @@ -0,0 +1,113 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::PublisherHandler< TopicType > Member List
+
+
+ +

This is the complete list of members for mrs_lib::PublisherHandler< TopicType >, including all inherited members.

+ + + + + + + + + + +
getNumSubscribers(void)mrs_lib::PublisherHandler< TopicType >
operator=(const PublisherHandler &other)mrs_lib::PublisherHandler< TopicType >
publish(const TopicType &msg)mrs_lib::PublisherHandler< TopicType >
publish(const boost::shared_ptr< TopicType > &msg)mrs_lib::PublisherHandler< TopicType >
publish(const boost::shared_ptr< TopicType const > &msg)mrs_lib::PublisherHandler< TopicType >
PublisherHandler(void)mrs_lib::PublisherHandler< TopicType >inline
PublisherHandler(const PublisherHandler &other)mrs_lib::PublisherHandler< TopicType >
PublisherHandler(ros::NodeHandle &nh, const std::string &address, const unsigned int &buffer_size=1, const bool &latch=false, const double &rate=0)mrs_lib::PublisherHandler< TopicType >
~PublisherHandler(void)mrs_lib::PublisherHandler< TopicType >inline
+
+ + + + diff --git a/classmrs__lib_1_1PublisherHandler.html b/classmrs__lib_1_1PublisherHandler.html new file mode 100644 index 00000000..eab01af2 --- /dev/null +++ b/classmrs__lib_1_1PublisherHandler.html @@ -0,0 +1,377 @@ + + + + + + + +mrs_lib: mrs_lib::PublisherHandler< TopicType > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::PublisherHandler< TopicType > Class Template Reference
+
+
+ +

user wrapper of the publisher handler implementation + More...

+ +

#include <publisher_handler.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

PublisherHandler (void)
 generic constructor
 
~PublisherHandler (void)
 generic destructor
 
PublisherHandleroperator= (const PublisherHandler &other)
 operator= More...
 
 PublisherHandler (const PublisherHandler &other)
 copy constructor More...
 
 PublisherHandler (ros::NodeHandle &nh, const std::string &address, const unsigned int &buffer_size=1, const bool &latch=false, const double &rate=0)
 constructor More...
 
void publish (const TopicType &msg)
 publish message More...
 
void publish (const boost::shared_ptr< TopicType > &msg)
 publish message, boost ptr overload More...
 
void publish (const boost::shared_ptr< TopicType const > &msg)
 publish message, boost const ptr overload More...
 
unsigned int getNumSubscribers (void)
 get number of subscribers More...
 
+

Detailed Description

+

template<class TopicType>
+class mrs_lib::PublisherHandler< TopicType >

+ +

user wrapper of the publisher handler implementation

+

Constructor & Destructor Documentation

+ +

◆ PublisherHandler() [1/2]

+ +
+
+
+template<class TopicType >
+ + + + + + + + +
mrs_lib::PublisherHandler< TopicType >::PublisherHandler (const PublisherHandler< TopicType > & other)
+
+ +

copy constructor

+
Parameters
+ + +
other
+
+
+ +
+
+ +

◆ PublisherHandler() [2/2]

+ +
+
+
+template<class TopicType >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::PublisherHandler< TopicType >::PublisherHandler (ros::NodeHandle & nh,
const std::string & address,
const unsigned int & buffer_size = 1,
const bool & latch = false,
const double & rate = 0 
)
+
+ +

constructor

+
Parameters
+ + + + + +
nhROS node handler
addresstopic address
buffer_sizebuffer size
latchlatching
+
+
+ +
+
+

Member Function Documentation

+ +

◆ getNumSubscribers()

+ +
+
+
+template<class TopicType >
+ + + + + + + + +
unsigned int mrs_lib::PublisherHandler< TopicType >::getNumSubscribers (void )
+
+ +

get number of subscribers

+
Returns
the number of subscribers
+ +
+
+ +

◆ operator=()

+ +
+
+
+template<class TopicType >
+ + + + + + + + +
PublisherHandler< TopicType > & mrs_lib::PublisherHandler< TopicType >::operator= (const PublisherHandler< TopicType > & other)
+
+ +

operator=

+
Parameters
+ + +
other
+
+
+
Returns
+ +
+
+ +

◆ publish() [1/3]

+ +
+
+
+template<class TopicType >
+ + + + + + + + +
void mrs_lib::PublisherHandler< TopicType >::publish (const boost::shared_ptr< TopicType > & msg)
+
+ +

publish message, boost ptr overload

+
Parameters
+ + +
msg
+
+
+ +
+
+ +

◆ publish() [2/3]

+ +
+
+
+template<class TopicType >
+ + + + + + + + +
void mrs_lib::PublisherHandler< TopicType >::publish (const boost::shared_ptr< TopicType const > & msg)
+
+ +

publish message, boost const ptr overload

+
Parameters
+ + +
msg
+
+
+ +
+
+ +

◆ publish() [3/3]

+ +
+
+
+template<class TopicType >
+ + + + + + + + +
void mrs_lib::PublisherHandler< TopicType >::publish (const TopicType & msg)
+
+ +

publish message

+
Parameters
+ + +
msg
+
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1PublisherHandler.js b/classmrs__lib_1_1PublisherHandler.js new file mode 100644 index 00000000..a0eb9aaa --- /dev/null +++ b/classmrs__lib_1_1PublisherHandler.js @@ -0,0 +1,12 @@ +var classmrs__lib_1_1PublisherHandler = +[ + [ "PublisherHandler", "classmrs__lib_1_1PublisherHandler.html#aefafd64bd0d8a9b9717c94b76368fd0d", null ], + [ "~PublisherHandler", "classmrs__lib_1_1PublisherHandler.html#a9acaa1ef56768636f2163c75dd9e307e", null ], + [ "PublisherHandler", "classmrs__lib_1_1PublisherHandler.html#a08abb836db076c390101880ff34b8fe8", null ], + [ "PublisherHandler", "classmrs__lib_1_1PublisherHandler.html#a334376e25e8fb011ca27736cd2cf12b7", null ], + [ "getNumSubscribers", "classmrs__lib_1_1PublisherHandler.html#acae5a82536022514c6a2cefa2f7980b1", null ], + [ "operator=", "classmrs__lib_1_1PublisherHandler.html#a23a8578213fd78347ebaa259ee17c218", null ], + [ "publish", "classmrs__lib_1_1PublisherHandler.html#a3201fd4703f7e9cec24de7bc189356a5", null ], + [ "publish", "classmrs__lib_1_1PublisherHandler.html#ace9906a5cf9ae33115fc44af0e078f3f", null ], + [ "publish", "classmrs__lib_1_1PublisherHandler.html#a0c5bebc2848b0547048edb1297833290", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1PublisherHandler__impl-members.html b/classmrs__lib_1_1PublisherHandler__impl-members.html new file mode 100644 index 00000000..d02ef64f --- /dev/null +++ b/classmrs__lib_1_1PublisherHandler__impl-members.html @@ -0,0 +1,111 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::PublisherHandler_impl< TopicType > Member List
+
+
+ +

This is the complete list of members for mrs_lib::PublisherHandler_impl< TopicType >, including all inherited members.

+ + + + + + + + +
getNumSubscribers(void)mrs_lib::PublisherHandler_impl< TopicType >
publish(const TopicType &msg)mrs_lib::PublisherHandler_impl< TopicType >
publish(const boost::shared_ptr< TopicType > &msg)mrs_lib::PublisherHandler_impl< TopicType >
publish(const boost::shared_ptr< TopicType const > &msg)mrs_lib::PublisherHandler_impl< TopicType >
PublisherHandler_impl(void)mrs_lib::PublisherHandler_impl< TopicType >
PublisherHandler_impl(ros::NodeHandle &nh, const std::string &address, const unsigned int &buffer_size=1, const bool &latch=false, const double &rate=0.0)mrs_lib::PublisherHandler_impl< TopicType >
~PublisherHandler_impl(void)mrs_lib::PublisherHandler_impl< TopicType >inline
+
+ + + + diff --git a/classmrs__lib_1_1PublisherHandler__impl.html b/classmrs__lib_1_1PublisherHandler__impl.html new file mode 100644 index 00000000..81f851da --- /dev/null +++ b/classmrs__lib_1_1PublisherHandler__impl.html @@ -0,0 +1,314 @@ + + + + + + + +mrs_lib: mrs_lib::PublisherHandler_impl< TopicType > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::PublisherHandler_impl< TopicType > Class Template Reference
+
+
+ +

implementation of the publisher handler + More...

+ +

#include <publisher_handler.h>

+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

PublisherHandler_impl (void)
 default constructor
 
~PublisherHandler_impl (void)
 default destructor
 
 PublisherHandler_impl (ros::NodeHandle &nh, const std::string &address, const unsigned int &buffer_size=1, const bool &latch=false, const double &rate=0.0)
 constructor More...
 
void publish (const TopicType &msg)
 publish message More...
 
void publish (const boost::shared_ptr< TopicType > &msg)
 publish message, boost ptr overload More...
 
void publish (const boost::shared_ptr< TopicType const > &msg)
 publish message, boost const ptr overload More...
 
unsigned int getNumSubscribers (void)
 get number of subscribers More...
 
+

Detailed Description

+

template<class TopicType>
+class mrs_lib::PublisherHandler_impl< TopicType >

+ +

implementation of the publisher handler

+

Constructor & Destructor Documentation

+ +

◆ PublisherHandler_impl()

+ +
+
+
+template<class TopicType >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::PublisherHandler_impl< TopicType >::PublisherHandler_impl (ros::NodeHandle & nh,
const std::string & address,
const unsigned int & buffer_size = 1,
const bool & latch = false,
const double & rate = 0.0 
)
+
+ +

constructor

+
Parameters
+ + + + + +
nhROS node handler
addresstopic address
buffer_sizebuffer size
latchlatching
+
+
+ +
+
+

Member Function Documentation

+ +

◆ getNumSubscribers()

+ +
+
+
+template<class TopicType >
+ + + + + + + + +
unsigned int mrs_lib::PublisherHandler_impl< TopicType >::getNumSubscribers (void )
+
+ +

get number of subscribers

+
Returns
the number of subscribers
+ +
+
+ +

◆ publish() [1/3]

+ +
+
+
+template<class TopicType >
+ + + + + + + + +
void mrs_lib::PublisherHandler_impl< TopicType >::publish (const boost::shared_ptr< TopicType > & msg)
+
+ +

publish message, boost ptr overload

+
Parameters
+ + +
msg
+
+
+ +
+
+ +

◆ publish() [2/3]

+ +
+
+
+template<class TopicType >
+ + + + + + + + +
void mrs_lib::PublisherHandler_impl< TopicType >::publish (const boost::shared_ptr< TopicType const > & msg)
+
+ +

publish message, boost const ptr overload

+
Parameters
+ + +
msg
+
+
+ +
+
+ +

◆ publish() [3/3]

+ +
+
+
+template<class TopicType >
+ + + + + + + + +
void mrs_lib::PublisherHandler_impl< TopicType >::publish (const TopicType & msg)
+
+ +

publish message

+
Parameters
+ + +
msgdata
+
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1PublisherHandler__impl.js b/classmrs__lib_1_1PublisherHandler__impl.js new file mode 100644 index 00000000..579f4d57 --- /dev/null +++ b/classmrs__lib_1_1PublisherHandler__impl.js @@ -0,0 +1,10 @@ +var classmrs__lib_1_1PublisherHandler__impl = +[ + [ "PublisherHandler_impl", "classmrs__lib_1_1PublisherHandler__impl.html#ab6dfde5a454ce357957a2ea8618890fc", null ], + [ "~PublisherHandler_impl", "classmrs__lib_1_1PublisherHandler__impl.html#a685a159577dfe363423c58a91ba92ac6", null ], + [ "PublisherHandler_impl", "classmrs__lib_1_1PublisherHandler__impl.html#a9168a142f84bf96f73563fe5f3589ce7", null ], + [ "getNumSubscribers", "classmrs__lib_1_1PublisherHandler__impl.html#a2043d0a61e0ff0dbd0acd6a64f1e4bef", null ], + [ "publish", "classmrs__lib_1_1PublisherHandler__impl.html#ad41ed622292e537101a2dac779c08f34", null ], + [ "publish", "classmrs__lib_1_1PublisherHandler__impl.html#a80c0caa745661936409fdc93277e7453", null ], + [ "publish", "classmrs__lib_1_1PublisherHandler__impl.html#a4404a3234f548fe9184ec43ac18c9671", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1RHEIV-members.html b/classmrs__lib_1_1RHEIV-members.html new file mode 100644 index 00000000..7b2f1050 --- /dev/null +++ b/classmrs__lib_1_1RHEIV-members.html @@ -0,0 +1,130 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::RHEIV< n_states, n_params > Member List
+
+
+ +

This is the complete list of members for mrs_lib::RHEIV< n_states, n_params >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
dzdx_t typedefmrs_lib::RHEIV< n_states, n_params >
dzdxs_t typedefmrs_lib::RHEIV< n_states, n_params >
eta_t typedefmrs_lib::RHEIV< n_states, n_params >
f_dzdx_t typedefmrs_lib::RHEIV< n_states, n_params >
f_z_t typedefmrs_lib::RHEIV< n_states, n_params >
fit(const xs_t &xs, const Ps_t &Ps)mrs_lib::RHEIV< n_states, n_params >inline
fit(const T_it1 &xs_begin, const T_it1 &xs_end, const T_it2 &Ps_begin, const T_it2 &Ps_end)mrs_lib::RHEIV< n_states, n_params >inline
fit_ALS(const xs_t &xs)mrs_lib::RHEIV< n_states, n_params >inline
get_ALS_estimate() constmrs_lib::RHEIV< n_states, n_params >inline
get_last_estimate() constmrs_lib::RHEIV< n_states, n_params >inline
kmrs_lib::RHEIV< n_states, n_params >static
lmrs_lib::RHEIV< n_states, n_params >static
lrmrs_lib::RHEIV< n_states, n_params >static
P_t typedefmrs_lib::RHEIV< n_states, n_params >
Ps_t typedefmrs_lib::RHEIV< n_states, n_params >
RHEIV()mrs_lib::RHEIV< n_states, n_params >inline
RHEIV(const f_z_t &f_z, const f_dzdx_t &f_dzdx, const double min_dtheta=1e-15, const unsigned max_its=100)mrs_lib::RHEIV< n_states, n_params >inline
RHEIV(const f_z_t &f_z, const f_dzdx_t &f_dzdx, const double min_dtheta=1e-15, const unsigned max_its=100, const time_t &timeout=std::chrono::duration_cast< time_t >(ms_t::zero()), const int debug_nth_it=-1)mrs_lib::RHEIV< n_states, n_params >inline
RHEIV(const f_z_t &f_z, const dzdx_t &dzdx, const double min_dtheta=1e-15, const unsigned max_its=100)mrs_lib::RHEIV< n_states, n_params >inline
RHEIV(const f_z_t &f_z, const dzdx_t &dzdx, const double min_dtheta=1e-15, const unsigned max_its=100, const time_t &timeout=std::chrono::duration_cast< time_t >(ms_t::zero()), const int debug_nth_it=-1)mrs_lib::RHEIV< n_states, n_params >inline
theta_t typedefmrs_lib::RHEIV< n_states, n_params >
u_t typedefmrs_lib::RHEIV< n_states, n_params >
x_t typedefmrs_lib::RHEIV< n_states, n_params >
xs_t typedefmrs_lib::RHEIV< n_states, n_params >
z_t typedefmrs_lib::RHEIV< n_states, n_params >
zs_t typedefmrs_lib::RHEIV< n_states, n_params >
+
+ + + + diff --git a/classmrs__lib_1_1RHEIV.html b/classmrs__lib_1_1RHEIV.html new file mode 100644 index 00000000..4bc2a114 --- /dev/null +++ b/classmrs__lib_1_1RHEIV.html @@ -0,0 +1,773 @@ + + + + + + + +mrs_lib: mrs_lib::RHEIV< n_states, n_params > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::RHEIV< n_states, n_params > Class Template Reference
+
+
+ +

Implementation of the Reduced Heteroscedastic Errors In Variables surface fitting algorithm [2]. + More...

+ +

#include <rheiv.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using x_t = Eigen::Matrix< double, k, 1 >
 Input vector type $k \times 1$.
 
+using xs_t = Eigen::Matrix< double, k, -1 >
 Container type for the input data array.
 
+using u_t = Eigen::Matrix< double, l, 1 >
 Transformed input vector type $l \times 1$.
 
+using P_t = Eigen::Matrix< double, k, k >
 Covariance type of the input vector $k \times k$.
 
+using Ps_t = std::vector< P_t >
 Container type for covariances P of the input data array.
 
+using z_t = Eigen::Matrix< double, lr, 1 >
 Type of a reduced transformed input vector $l_r \times 1$.
 
+using zs_t = Eigen::Matrix< double, lr, -1 >
 Container type for an array of the reduced transformed input vectors z.
 
+using f_z_t = typename std::function< zs_t(const xs_t &)>
 Function signature of the $ \mathbf{z}\left( \mathbf{x} \right) $ mapping function.
 
+using dzdx_t = Eigen::Matrix< double, lr, k >
 Type of the jacobian matrix $ \mathbf{J} \mathbf{z}\left( \mathbf{x} \right) $, evaluated at $ \mathbf{x} $.
 
+using dzdxs_t = std::vector< dzdx_t >
 Contained type for an array of the jacobian matrices.
 
+using f_dzdx_t = typename std::function< dzdx_t(const xs_t &)>
 Function signature of the jacobian $ \mathbf{J} \mathbf{z}\left( \mathbf{x} \right) $.
 
+using theta_t = Eigen::Matrix< double, l, 1 >
 Parameter vector type $l \times 1$.
 
+using eta_t = z_t
 Reduced parameter vector type $l_r \times 1$.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RHEIV ()
 Convenience default constructor. More...
 
 RHEIV (const f_z_t &f_z, const f_dzdx_t &f_dzdx, const double min_dtheta=1e-15, const unsigned max_its=100)
 The main constructor. More...
 
template<typename time_t >
 RHEIV (const f_z_t &f_z, const f_dzdx_t &f_dzdx, const double min_dtheta=1e-15, const unsigned max_its=100, const time_t &timeout=std::chrono::duration_cast< time_t >(ms_t::zero()), const int debug_nth_it=-1)
 The main constructor. More...
 
 RHEIV (const f_z_t &f_z, const dzdx_t &dzdx, const double min_dtheta=1e-15, const unsigned max_its=100)
 A convenience constructor constructor. More...
 
template<typename time_t >
 RHEIV (const f_z_t &f_z, const dzdx_t &dzdx, const double min_dtheta=1e-15, const unsigned max_its=100, const time_t &timeout=std::chrono::duration_cast< time_t >(ms_t::zero()), const int debug_nth_it=-1)
 A convenience constructor constructor. More...
 
theta_t fit (const xs_t &xs, const Ps_t &Ps)
 Fit the defined model to the provided data. More...
 
template<class T_it1 , class T_it2 >
theta_t fit (const T_it1 &xs_begin, const T_it1 &xs_end, const T_it2 &Ps_begin, const T_it2 &Ps_end)
 Fit the defined model to the provided data. More...
 
theta_t fit_ALS (const xs_t &xs)
 Fit the defined model to the provided data using Algebraic Least Squares (not RHEIV). More...
 
theta_t get_last_estimate () const
 Returns the last valid estimate of $ \mathbf{\theta} $. More...
 
theta_t get_ALS_estimate () const
 Returns the Algebraic Least Squares estimate of $ \mathbf{\theta} $. More...
 
+ + + + + + + + + + +

+Static Public Attributes

+static const int k = n_states
 Length of the state vector x.
 
+static const int l = n_params
 Length of the parameter vector $ \mathbf{\theta} $.
 
+static const int lr = l - 1
 Length of the reduced parameter vector $ \mathbf{\eta} $.
 
+

Detailed Description

+

template<int n_states, int n_params>
+class mrs_lib::RHEIV< n_states, n_params >

+ +

Implementation of the Reduced Heteroscedastic Errors In Variables surface fitting algorithm [2].

+

This class estimates a vector of parameters $ \mathbf{\theta} $ of a model, which is defined by an equation $ \mathbf{\theta}^T \mathbf{u}\left( \mathbf{x} \right) = 0 $, where $ \mathbf{x} $ is a data sample vector and $ \mathbf{u}\left( \mathbf{x} \right) $ is a vector, obtained by transforming $ \mathbf{x} $ in a problem-dependent manner.

+

Note that $ \mathbf{u}\left( \mathbf{x} \right) $ must fulfill two conditions:

    +
  • each element of $ \mathbf{u}\left( \mathbf{x} \right) $ is a quadratic form of a vector $ \left[ \mathbf{x}, 1 \right] $, and
  • +
  • the last element of $ \mathbf{u}\left( \mathbf{x} \right) $ is equal to one.
  • +
+

Such model can be used to describe e.g. various surfaces, such as planes or conics, which makes this class a useful tool for computer vision. The model is described in the context of the RHEIV class by the length of the vector $ \mathbf{x} $, the length of the vector $ \mathbf{\theta} $, and the Jacobian matrix of $ \partial_{\mathbf{x}} \mathbf{z}\left( \mathbf{x} \right) $, where $ \mathbf{z}\left( \mathbf{x} \right) $ is defined by the formula $ \mathbf{u}\left( \mathbf{x} \right) = \left[ \mathbf{z}\left( \mathbf{x} \right), 1 \right] $.

+

For more information, see [2].

+
Examples
rheiv/example.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ RHEIV() [1/5]

+ +
+
+
+template<int n_states, int n_params>
+ + + + + +
+ + + + + + + +
mrs_lib::RHEIV< n_states, n_params >::RHEIV ()
+
+inline
+
+ +

Convenience default constructor.

+
Warning
This constructor should not be used if applicable. If used, the main constructor has to be called afterwards, before using this class, otherwise the RHEIV object is invalid (not initialized).
+ +
+
+ +

◆ RHEIV() [2/5]

+ +
+
+
+template<int n_states, int n_params>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::RHEIV< n_states, n_params >::RHEIV (const f_z_tf_z,
const f_dzdx_tf_dzdx,
const double min_dtheta = 1e-15,
const unsigned max_its = 100 
)
+
+inline
+
+ +

The main constructor.

+

The dzdx parameter gives the relation between $ \mathbf{z}\left( \mathbf{x} \right) $ and $ \mathbf{x} $. It is the full jacobian matrix $ \partial_{\mathbf{x}} \mathbf{z}\left( \mathbf{x} \right) $.

+

The optimization algorithm is iterative with two possible stopping conditions:

    +
  • if change of the estimate of $ \mathbf{\theta} $ between two iterations is smaller than a defined threshold, or
  • +
  • if a maximal number of iterations was reached.
  • +
+
Parameters
+ + + + + +
f_zthe mapping function $ \mathbf{z}\left( \mathbf{x} \right) $.
f_dzdxa function, returning the jacobian matrix of partial derivations of $ \mathbf{z}\left( \mathbf{x} \right) $ by $ \mathbf{x} $, evaluated at $ \mathbf{x} $.
min_dthetaif the difference of $ \mathbf{\theta}_{k} $ and $ \mathbf{\theta}_{k-1} $ is smaller than this number, the iteration is stopped.
max_itsif the iteration is stopped after this number of iterations.
+
+
+ +
+
+ +

◆ RHEIV() [3/5]

+ +
+
+
+template<int n_states, int n_params>
+
+template<typename time_t >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::RHEIV< n_states, n_params >::RHEIV (const f_z_tf_z,
const f_dzdx_tf_dzdx,
const double min_dtheta = 1e-15,
const unsigned max_its = 100,
const time_t & timeout = std::chrono::duration_cast<time_t>(ms_t::zero()),
const int debug_nth_it = -1 
)
+
+inline
+
+ +

The main constructor.

+

The dzdx parameter gives the relation between $ \mathbf{z}\left( \mathbf{x} \right) $ and $ \mathbf{x} $. It is the full jacobian matrix $ \partial_{\mathbf{x}} \mathbf{z}\left( \mathbf{x} \right) $.

+

The optimization algorithm is iterative with two possible stopping conditions:

    +
  • if change of the estimate of $ \mathbf{\theta} $ between two iterations is smaller than a defined threshold, or
  • +
  • if a maximal number of iterations was reached.
  • +
+
Parameters
+ + + + + + + +
f_zthe mapping function $ \mathbf{z}\left( \mathbf{x} \right) $.
f_dzdxa function, returning the jacobian matrix of partial derivations of $ \mathbf{z}\left( \mathbf{x} \right) $ by $ \mathbf{x} $, evaluated at $ \mathbf{x} $.
min_dthetaif the difference of $ \mathbf{\theta}_{k} $ and $ \mathbf{\theta}_{k-1} $ is smaller than this number, the iteration is stopped.
max_itsif the iteration is stopped after this number of iterations.
timeoutif the calculation takes longer than this time, the iteration is stopped.
debug_nth_ita debug message will be printed every debug_nth_it th iteration (negative number disables debug).
+
+
+ +
+
+ +

◆ RHEIV() [4/5]

+ +
+
+
+template<int n_states, int n_params>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::RHEIV< n_states, n_params >::RHEIV (const f_z_tf_z,
const dzdx_tdzdx,
const double min_dtheta = 1e-15,
const unsigned max_its = 100 
)
+
+inline
+
+ +

A convenience constructor constructor.

+

This constructor differs from the main one only in the parameters it takes. Instead of the function f_dzdx, it takes directly the dzdx matrix. This variant is meant to be used for systems where the jacobian matrix $ \mathbf{z}\left( \mathbf{x} \right) $ by $ \mathbf{x} $ does not depend on $ \mathbf{x} $.

+
Parameters
+ + + + +
f_zthe mapping function $ \mathbf{z}\left( \mathbf{x} \right) $.
dzdxthe jacobian matrix of partial derivations of $ \mathbf{z}\left( \mathbf{x} \right) $ by $ \mathbf{x} $.
min_dthetaif the difference of $ \mathbf{\theta}_{k} $ and $ \mathbf{\theta}_{k-1} $ is smaller than this number, the iteration is stopped.
+
+
+ +
+
+ +

◆ RHEIV() [5/5]

+ +
+
+
+template<int n_states, int n_params>
+
+template<typename time_t >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::RHEIV< n_states, n_params >::RHEIV (const f_z_tf_z,
const dzdx_tdzdx,
const double min_dtheta = 1e-15,
const unsigned max_its = 100,
const time_t & timeout = std::chrono::duration_cast<time_t>(ms_t::zero()),
const int debug_nth_it = -1 
)
+
+inline
+
+ +

A convenience constructor constructor.

+

This constructor differs from the main one only in the parameters it takes. Instead of the function f_dzdx, it takes directly the dzdx matrix. This variant is meant to be used for systems where the jacobian matrix $ \mathbf{z}\left( \mathbf{x} \right) $ by $ \mathbf{x} $ does not depend on $ \mathbf{x} $.

+
Parameters
+ + + + + + + +
f_zthe mapping function $ \mathbf{z}\left( \mathbf{x} \right) $.
dzdxthe jacobian matrix of partial derivations of $ \mathbf{z}\left( \mathbf{x} \right) $ by $ \mathbf{x} $.
min_dthetaif the difference of $ \mathbf{\theta}_{k} $ and $ \mathbf{\theta}_{k-1} $ is smaller than this number, the iteration is stopped.
timeoutif the calculation takes longer than this time, the iteration is stopped.
max_itsif the iteration is stopped after this number of iterations.
debug_nth_ita debug message will be printed every debug_nth_it th iteration (negative number disables debug).
+
+
+ +
+
+

Member Function Documentation

+ +

◆ fit() [1/2]

+ +
+
+
+template<int n_states, int n_params>
+
+template<class T_it1 , class T_it2 >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
theta_t mrs_lib::RHEIV< n_states, n_params >::fit (const T_it1 & xs_begin,
const T_it1 & xs_end,
const T_it2 & Ps_begin,
const T_it2 & Ps_end 
)
+
+inline
+
+ +

Fit the defined model to the provided data.

+

The RHEIV iterative optimization algorithm will be applied to estimate optimal parameters of the model based on the provided data. This is a conveinence overload, which takes the data points and covariances in a general container, supporting std::begin() and std::end().

+
Parameters
+ + + + + +
xs_beginbegin iterator of a container, containing the data points $ \mathbf{x}_i $.
xs_endend iterator of a container, containing the data points $ \mathbf{x}_i $.
Ps_beginbegin iterator of a container, containing the corresponding covariance matrices $ \mathbf{P}_i $ .
Ps_endend iterator of a container, containing the corresponding covariance matrices $ \mathbf{P}_i $ .
+
+
+
Returns
estimate of the parameter vector $ \mathbf{\theta} $.
+
Warning
Note that length of xs and Ps must be the same!
+ +
+
+ +

◆ fit() [2/2]

+ +
+
+
+template<int n_states, int n_params>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
theta_t mrs_lib::RHEIV< n_states, n_params >::fit (const xs_txs,
const Ps_tPs 
)
+
+inline
+
+ +

Fit the defined model to the provided data.

+

The RHEIV iterative optimization algorithm will be applied to estimate optimal parameters of the model based on the provided data.

+
Parameters
+ + + +
xsthe data points $ \mathbf{x}_i $.
Psthe corresponding covariance matrices $ \mathbf{P}_i $ .
+
+
+
Returns
estimate of the parameter vector $ \mathbf{\theta} $.
+
Warning
Note that length of xs and Ps must be the same!
+ +
+
+ +

◆ fit_ALS()

+ +
+
+
+template<int n_states, int n_params>
+ + + + + +
+ + + + + + + + +
theta_t mrs_lib::RHEIV< n_states, n_params >::fit_ALS (const xs_txs)
+
+inline
+
+ +

Fit the defined model to the provided data using Algebraic Least Squares (not RHEIV).

+

Instead of using the iterative RHEIV algorithm to fit the data, just use the simple ALS (which basically does eigenvector decomposition). This can be useful in cases of degenerate data where the RHEIV algorithm fails or when covariances of the data are not available.

+
Parameters
+ + +
xsthe data points $ \mathbf{x}_i $.
+
+
+
Returns
estimate of the parameter vector $ \mathbf{\theta} $.
+ +
+
+ +

◆ get_ALS_estimate()

+ +
+
+
+template<int n_states, int n_params>
+ + + + + +
+ + + + + + + +
theta_t mrs_lib::RHEIV< n_states, n_params >::get_ALS_estimate () const
+
+inline
+
+ +

Returns the Algebraic Least Squares estimate of $ \mathbf{\theta} $.

+

You can use this method in case of an exception to retreive the Algebraic Least Squares estimate of the parameter vector, which is more stable than the RHEIV algorithm, and can be used as a more rough estimate of the parameters.

+
Returns
the ALS estimate of the parameter vector $ \mathbf{\theta} $.
+
Warning
The fit() method must be called prior to attempting to get the last ALS estimate!
+ +
+
+ +

◆ get_last_estimate()

+ +
+
+
+template<int n_states, int n_params>
+ + + + + +
+ + + + + + + +
theta_t mrs_lib::RHEIV< n_states, n_params >::get_last_estimate () const
+
+inline
+
+ +

Returns the last valid estimate of $ \mathbf{\theta} $.

+

You can use this method in case of an exception to retreive the last valid estimate of the parameter vector before the crash, which is sometimes useful.

+
Returns
the last valid estimate of the parameter vector $ \mathbf{\theta} $.
+
Warning
The fit() method must be called prior to attempting to get the last valid estimate!
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1RHEIV.js b/classmrs__lib_1_1RHEIV.js new file mode 100644 index 00000000..baf07f6b --- /dev/null +++ b/classmrs__lib_1_1RHEIV.js @@ -0,0 +1,26 @@ +var classmrs__lib_1_1RHEIV = +[ + [ "dzdx_t", "classmrs__lib_1_1RHEIV.html#abec4cb102b681ff3ec39786dc1d2bd4b", null ], + [ "dzdxs_t", "classmrs__lib_1_1RHEIV.html#ad85f14fb415e2fbe69ad05db0dc56e7b", null ], + [ "eta_t", "classmrs__lib_1_1RHEIV.html#a238b7a1a44cb7711756bd7b94a11797d", null ], + [ "f_dzdx_t", "classmrs__lib_1_1RHEIV.html#ac5b425f7782114173db5a275bea2c871", null ], + [ "f_z_t", "classmrs__lib_1_1RHEIV.html#abfea65ce9c912fcde3e805a66dc8ca42", null ], + [ "P_t", "classmrs__lib_1_1RHEIV.html#a9adfedc8dfbe38ccf06f556481a6c5c9", null ], + [ "Ps_t", "classmrs__lib_1_1RHEIV.html#aab24b461160051b3537f76e633d47d8d", null ], + [ "theta_t", "classmrs__lib_1_1RHEIV.html#af6d8212b941ad45ce6b53bc4e8449de1", null ], + [ "u_t", "classmrs__lib_1_1RHEIV.html#a3bc18fd815c8f09123b0a9083ca3b959", null ], + [ "x_t", "classmrs__lib_1_1RHEIV.html#a6482f5ff13cbfaef9f8dc86912c1258d", null ], + [ "xs_t", "classmrs__lib_1_1RHEIV.html#aee3df85ac46e5b29259f8898388324ec", null ], + [ "z_t", "classmrs__lib_1_1RHEIV.html#a8e01ed1580572ec20f0230d9bfe5273f", null ], + [ "zs_t", "classmrs__lib_1_1RHEIV.html#a3b4e40932aae907ae8185df7703d5677", null ], + [ "RHEIV", "classmrs__lib_1_1RHEIV.html#a057ffc158ceb64e933d3ae73e96bb033", null ], + [ "RHEIV", "classmrs__lib_1_1RHEIV.html#a4712a3306cdd759a73d2124b23bb388b", null ], + [ "RHEIV", "classmrs__lib_1_1RHEIV.html#a8c8f7b9c1b3ea4daafc08e1a29941558", null ], + [ "RHEIV", "classmrs__lib_1_1RHEIV.html#a66a840487d929607a3385e90b3c35ec5", null ], + [ "RHEIV", "classmrs__lib_1_1RHEIV.html#a9c0c437bea8612516cb37d9503b6a852", null ], + [ "fit", "classmrs__lib_1_1RHEIV.html#a9eaa3b7a946a9c590326d3b47295d728", null ], + [ "fit", "classmrs__lib_1_1RHEIV.html#aad00da516e55bb60661b5cf234487932", null ], + [ "fit_ALS", "classmrs__lib_1_1RHEIV.html#a2123ee2ffa07063a8a50275b998874ca", null ], + [ "get_ALS_estimate", "classmrs__lib_1_1RHEIV.html#a96de075c76bf79a411606d762e4b9728", null ], + [ "get_last_estimate", "classmrs__lib_1_1RHEIV.html#ac7f24b984bcfdee4f21de1206942f986", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1ROSTimer-members.html b/classmrs__lib_1_1ROSTimer-members.html new file mode 100644 index 00000000..f6913ed4 --- /dev/null +++ b/classmrs__lib_1_1ROSTimer-members.html @@ -0,0 +1,125 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::ROSTimer Member List
+
+
+ +

This is the complete list of members for mrs_lib::ROSTimer, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
callback_t typedef (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
MRSTimer(const MRSTimer &)=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
MRSTimer(MRSTimer &&)=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
MRSTimer()=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimerprotected
operator=(const ROSTimer &)=delete (defined in mrs_lib::ROSTimer)mrs_lib::ROSTimer
operator=(ROSTimer &&)=delete (defined in mrs_lib::ROSTimer)mrs_lib::ROSTimer
operator=(const MRSTimer &)=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
operator=(MRSTimer &&)=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
ROSTimer() (defined in mrs_lib::ROSTimer)mrs_lib::ROSTimer
ROSTimer(const ros::NodeHandle &nh, const ros::Rate &rate, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot=false, const bool autostart=true)mrs_lib::ROSTimer
ROSTimer(const ros::NodeHandle &nh, const ros::Duration &duration, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot=false, const bool autostart=true)mrs_lib::ROSTimer
ROSTimer(const ROSTimer &)=delete (defined in mrs_lib::ROSTimer)mrs_lib::ROSTimer
ROSTimer(ROSTimer &&)=delete (defined in mrs_lib::ROSTimer)mrs_lib::ROSTimer
ROSTimer(const ros::NodeHandle &nh, const ros::Duration &duration, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot, const bool autostart) (defined in mrs_lib::ROSTimer)mrs_lib::ROSTimer
ROSTimer(const ros::NodeHandle &nh, const ros::Rate &rate, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot, const bool autostart) (defined in mrs_lib::ROSTimer)mrs_lib::ROSTimer
running() overridemrs_lib::ROSTimervirtual
setPeriod(const ros::Duration &duration, const bool reset=true) overridemrs_lib::ROSTimervirtual
start() overridemrs_lib::ROSTimervirtual
stop() overridemrs_lib::ROSTimervirtual
~MRSTimer()=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimervirtual
~ROSTimer() override (defined in mrs_lib::ROSTimer)mrs_lib::ROSTimerinlinevirtual
+
+ + + + diff --git a/classmrs__lib_1_1ROSTimer.html b/classmrs__lib_1_1ROSTimer.html new file mode 100644 index 00000000..c62dd161 --- /dev/null +++ b/classmrs__lib_1_1ROSTimer.html @@ -0,0 +1,430 @@ + + + + + + + +mrs_lib: mrs_lib::ROSTimer Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::ROSTimer Class Reference
+
+
+ +

ros::Timer wrapper. The interface is the same as with ros::Timer, except for the initialization method. + More...

+ +

#include <timer.h>

+
+ + Inheritance diagram for mrs_lib::ROSTimer:
+
+
+ +
+ + Collaboration diagram for mrs_lib::ROSTimer:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

template<class ObjectType >
 ROSTimer (const ros::NodeHandle &nh, const ros::Rate &rate, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot=false, const bool autostart=true)
 Constructs the object. More...
 
template<class ObjectType >
 ROSTimer (const ros::NodeHandle &nh, const ros::Duration &duration, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot=false, const bool autostart=true)
 full constructor More...
 
+virtual void stop () override
 stop the timer
 
+virtual void start () override
 start the timer
 
virtual void setPeriod (const ros::Duration &duration, const bool reset=true) override
 set the timer period/duration More...
 
virtual bool running () override
 returns true if callbacks should be called More...
 
ROSTimer (const ROSTimer &)=delete
 
ROSTimer (ROSTimer &&)=delete
 
+ROSTimeroperator= (const ROSTimer &)=delete
 
+ROSTimeroperator= (ROSTimer &&)=delete
 
+template<class ObjectType >
 ROSTimer (const ros::NodeHandle &nh, const ros::Duration &duration, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot, const bool autostart)
 
+template<class ObjectType >
 ROSTimer (const ros::NodeHandle &nh, const ros::Rate &rate, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot, const bool autostart)
 
- Public Member Functions inherited from mrs_lib::MRSTimer
MRSTimer (const MRSTimer &)=default
 
MRSTimer (MRSTimer &&)=default
 
+MRSTimeroperator= (const MRSTimer &)=default
 
+MRSTimeroperator= (MRSTimer &&)=default
 
+ + + + +

+Additional Inherited Members

- Public Types inherited from mrs_lib::MRSTimer
+using callback_t = std::function< void(const ros::TimerEvent &)>
 
+

Detailed Description

+

ros::Timer wrapper. The interface is the same as with ros::Timer, except for the initialization method.

+

Constructor & Destructor Documentation

+ +

◆ ROSTimer() [1/2]

+ +
+
+
+template<class ObjectType >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::ROSTimer::ROSTimer (const ros::NodeHandle & nh,
const ros::Rate & rate,
void(ObjectType::*)(const ros::TimerEvent &) callback,
ObjectType *const obj,
const bool oneshot = false,
const bool autostart = true 
)
+
+ +

Constructs the object.

+
Template Parameters
+ + +
ObjectType
+
+
+
Parameters
+ + + + + + + +
nhROS node handle to be used for creating the underlying ros::Timer object.
raterate at which the callback should be called.
ObjectType::*constcallback callback method to be called.
objobject for the method.
oneshotwhether the callback should only be called once after starting.
autostartwhether the timer should immediately start after construction.
+
+
+ +
+
+ +

◆ ROSTimer() [2/2]

+ +
+
+
+template<class ObjectType >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::ROSTimer::ROSTimer (const ros::NodeHandle & nh,
const ros::Duration & duration,
void(ObjectType::*)(const ros::TimerEvent &) callback,
ObjectType *const obj,
const bool oneshot = false,
const bool autostart = true 
)
+
+ +

full constructor

+
Template Parameters
+ + +
ObjectType
+
+
+
Parameters
+ + + + + + + +
nhROS node handle to be used for creating the underlying ros::Timer object.
durationdesired callback period.
ObjectType::*constcallback callback method to be called.
objobject for the method.
oneshotwhether the callback should only be called once after starting.
autostartwhether the timer should immediately start after construction.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ running()

+ +
+
+ + + + + +
+ + + + + + + +
bool mrs_lib::ROSTimer::running ()
+
+overridevirtual
+
+ +

returns true if callbacks should be called

+
Returns
true if timer is running
+ +

Implements mrs_lib::MRSTimer.

+ +
+
+ +

◆ setPeriod()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void mrs_lib::ROSTimer::setPeriod (const ros::Duration & duration,
const bool reset = true 
)
+
+overridevirtual
+
+ +

set the timer period/duration

+
Parameters
+ + + +
duration
reset
+
+
+ +

Implements mrs_lib::MRSTimer.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1ROSTimer.js b/classmrs__lib_1_1ROSTimer.js new file mode 100644 index 00000000..dbb977d5 --- /dev/null +++ b/classmrs__lib_1_1ROSTimer.js @@ -0,0 +1,17 @@ +var classmrs__lib_1_1ROSTimer = +[ + [ "ROSTimer", "classmrs__lib_1_1ROSTimer.html#a279f348615fa132944657499c7430365", null ], + [ "ROSTimer", "classmrs__lib_1_1ROSTimer.html#aaf683893d28eca7f91e4b2333cf4eed5", null ], + [ "ROSTimer", "classmrs__lib_1_1ROSTimer.html#ad4913fe0402a8be9b131ad5afb9d7d05", null ], + [ "~ROSTimer", "classmrs__lib_1_1ROSTimer.html#af787df1a0c745a5f97b147479ed83aed", null ], + [ "ROSTimer", "classmrs__lib_1_1ROSTimer.html#a7c10fdefa4336a0ccaa5e3946eda6824", null ], + [ "ROSTimer", "classmrs__lib_1_1ROSTimer.html#a6ac090d048d684dce77c2cbf721e7a4b", null ], + [ "ROSTimer", "classmrs__lib_1_1ROSTimer.html#a0dfc38d13fe6c1311cad6d11ddea7443", null ], + [ "ROSTimer", "classmrs__lib_1_1ROSTimer.html#afe594c985a1338f4f6c6de4a37b5f0ba", null ], + [ "operator=", "classmrs__lib_1_1ROSTimer.html#a23c218adf410d480d424ccfc16ea6047", null ], + [ "operator=", "classmrs__lib_1_1ROSTimer.html#afe803ecb15e947501c86b64df4c4f5dc", null ], + [ "running", "classmrs__lib_1_1ROSTimer.html#af5074139258db68cf314b1bf4868243a", null ], + [ "setPeriod", "classmrs__lib_1_1ROSTimer.html#a7dd4d03428c7abe2de8ea260a9a4eeff", null ], + [ "start", "classmrs__lib_1_1ROSTimer.html#afd70b40e8e4b84b48215eeafc5e27520", null ], + [ "stop", "classmrs__lib_1_1ROSTimer.html#a6a774123e3400848884fa83fe01e1955", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1ROSTimer__coll__graph.map b/classmrs__lib_1_1ROSTimer__coll__graph.map new file mode 100644 index 00000000..22799d86 --- /dev/null +++ b/classmrs__lib_1_1ROSTimer__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1ROSTimer__coll__graph.md5 b/classmrs__lib_1_1ROSTimer__coll__graph.md5 new file mode 100644 index 00000000..38fde2d5 --- /dev/null +++ b/classmrs__lib_1_1ROSTimer__coll__graph.md5 @@ -0,0 +1 @@ +5debd548a8a8d5eedbb039dc177aaa0e \ No newline at end of file diff --git a/classmrs__lib_1_1ROSTimer__coll__graph.png b/classmrs__lib_1_1ROSTimer__coll__graph.png new file mode 100644 index 00000000..fc14a2f3 Binary files /dev/null and b/classmrs__lib_1_1ROSTimer__coll__graph.png differ diff --git a/classmrs__lib_1_1ROSTimer__inherit__graph.map b/classmrs__lib_1_1ROSTimer__inherit__graph.map new file mode 100644 index 00000000..22799d86 --- /dev/null +++ b/classmrs__lib_1_1ROSTimer__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1ROSTimer__inherit__graph.md5 b/classmrs__lib_1_1ROSTimer__inherit__graph.md5 new file mode 100644 index 00000000..38fde2d5 --- /dev/null +++ b/classmrs__lib_1_1ROSTimer__inherit__graph.md5 @@ -0,0 +1 @@ +5debd548a8a8d5eedbb039dc177aaa0e \ No newline at end of file diff --git a/classmrs__lib_1_1ROSTimer__inherit__graph.png b/classmrs__lib_1_1ROSTimer__inherit__graph.png new file mode 100644 index 00000000..fc14a2f3 Binary files /dev/null and b/classmrs__lib_1_1ROSTimer__inherit__graph.png differ diff --git a/classmrs__lib_1_1Repredictor-members.html b/classmrs__lib_1_1Repredictor-members.html new file mode 100644 index 00000000..c86c1448 --- /dev/null +++ b/classmrs__lib_1_1Repredictor-members.html @@ -0,0 +1,131 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::Repredictor< Model, disable_reprediction > Member List
+
+
+ +

This is the complete list of members for mrs_lib::Repredictor< Model, disable_reprediction >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addInputChange(const u_t &u, const ros::Time &stamp, const ModelPtr &model=nullptr)mrs_lib::Repredictor< Model, disable_reprediction >inline
addInputChange(const u_t &u, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)mrs_lib::Repredictor< Model, disable_reprediction >inline
addInputChangeWithNoise(const u_t &u, const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)mrs_lib::Repredictor< Model, disable_reprediction >inline
addInputChangeWithNoise(const u_t &u, const Q_t &Q, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)mrs_lib::Repredictor< Model, disable_reprediction >inline
addMeasurement(const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)mrs_lib::Repredictor< Model, disable_reprediction >inline
addMeasurement(const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)mrs_lib::Repredictor< Model, disable_reprediction >inline
addProcessNoiseChange(const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)mrs_lib::Repredictor< Model, disable_reprediction >inline
addProcessNoiseChange(const Q_t &Q, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)mrs_lib::Repredictor< Model, disable_reprediction >inline
checkMonotonicity(const T &buf) (defined in mrs_lib::Repredictor< Model, disable_reprediction >)mrs_lib::Repredictor< Model, disable_reprediction >inlineprotected
history_t typedef (defined in mrs_lib::Repredictor< Model, disable_reprediction >)mrs_lib::Repredictor< Model, disable_reprediction >protected
m_default_model (defined in mrs_lib::Repredictor< Model, disable_reprediction >)mrs_lib::Repredictor< Model, disable_reprediction >protected
m_history (defined in mrs_lib::Repredictor< Model, disable_reprediction >)mrs_lib::Repredictor< Model, disable_reprediction >protected
m_sc (defined in mrs_lib::Repredictor< Model, disable_reprediction >)mrs_lib::Repredictor< Model, disable_reprediction >protected
ModelPtr typedefmrs_lib::Repredictor< Model, disable_reprediction >
P_t typedefmrs_lib::Repredictor< Model, disable_reprediction >
predictTo(const ros::Time &to_stamp)mrs_lib::Repredictor< Model, disable_reprediction >inline
predictTo(const ros::Time &to_stamp)mrs_lib::Repredictor< Model, disable_reprediction >inline
printBuffer(const T &buf) (defined in mrs_lib::Repredictor< Model, disable_reprediction >)mrs_lib::Repredictor< Model, disable_reprediction >inlineprotected
Q_t typedefmrs_lib::Repredictor< Model, disable_reprediction >
R_t typedefmrs_lib::Repredictor< Model, disable_reprediction >
Repredictor(const x_t &x0, const P_t &P0, const u_t &u0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len)mrs_lib::Repredictor< Model, disable_reprediction >inline
Repredictor()mrs_lib::Repredictor< Model, disable_reprediction >inline
Repredictor(const x_t &x0, const P_t &P0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len)mrs_lib::Repredictor< Model, disable_reprediction >inline
statecov_t typedefmrs_lib::Repredictor< Model, disable_reprediction >
u_t typedefmrs_lib::Repredictor< Model, disable_reprediction >
x_t typedefmrs_lib::Repredictor< Model, disable_reprediction >
z_t typedefmrs_lib::Repredictor< Model, disable_reprediction >
+
+ + + + diff --git a/classmrs__lib_1_1Repredictor.html b/classmrs__lib_1_1Repredictor.html new file mode 100644 index 00000000..01b56793 --- /dev/null +++ b/classmrs__lib_1_1Repredictor.html @@ -0,0 +1,1025 @@ + + + + + + + +mrs_lib: mrs_lib::Repredictor< Model, disable_reprediction > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::Repredictor< Model, disable_reprediction > Class Template Reference
+
+
+ +

Implementation of the Repredictor for fusing measurements with variable delays. + More...

+ +

#include <repredictor.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using x_t = typename Model::x_t
 State vector type $n \times 1$.
 
+using u_t = typename Model::u_t
 Input vector type $m \times 1$.
 
+using z_t = typename Model::z_t
 Measurement vector type $p \times 1$.
 
+using P_t = typename Model::P_t
 State uncertainty covariance matrix type $n \times n$.
 
+using R_t = typename Model::R_t
 Measurement noise covariance matrix type $p \times p$.
 
+using Q_t = typename Model::Q_t
 Process noise covariance matrix type $n \times n$.
 
+using statecov_t = typename Model::statecov_t
 Helper struct for passing around the state and its covariance in one variable.
 
+using ModelPtr = typename std::shared_ptr< Model >
 Shorthand type for a shared pointer-to-Model.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

template<bool check = disable_reprediction>
std::enable_if_t<!check, statecov_tpredictTo (const ros::Time &to_stamp)
 Estimates the system state and covariance matrix at the specified time. More...
 
template<bool check = disable_reprediction>
std::enable_if_t< check, statecov_tpredictTo (const ros::Time &to_stamp)
 Estimates the system state and covariance matrix at the specified time. More...
 
template<bool check = disable_reprediction>
std::enable_if_t<!check > addInputChangeWithNoise (const u_t &u, const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)
 Adds one system input to the history buffer, removing the oldest element in the buffer if it is full. More...
 
template<bool check = disable_reprediction>
std::enable_if_t< check > addInputChangeWithNoise (const u_t &u, const Q_t &Q, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)
 Adds one system input to the history buffer, removing the oldest element in the buffer if it is full. More...
 
template<bool check = disable_reprediction>
std::enable_if_t<!check > addInputChange (const u_t &u, const ros::Time &stamp, const ModelPtr &model=nullptr)
 Adds one system input to the history buffer, removing the oldest element in the buffer if it is full. More...
 
template<bool check = disable_reprediction>
std::enable_if_t< check > addInputChange (const u_t &u, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)
 Adds one system input to the history buffer, removing the oldest element in the buffer if it is full. More...
 
template<bool check = disable_reprediction>
std::enable_if_t<!check > addProcessNoiseChange (const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)
 Adds one system input to the history buffer, removing the oldest element in the buffer if it is full. More...
 
template<bool check = disable_reprediction>
std::enable_if_t< check > addProcessNoiseChange (const Q_t &Q, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)
 Adds one system input to the history buffer, removing the oldest element in the buffer if it is full. More...
 
template<bool check = disable_reprediction>
std::enable_if_t<!check > addMeasurement (const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)
 Adds one measurement to the history buffer, removing the oldest element in the buffer if it is full. More...
 
template<bool check = disable_reprediction>
std::enable_if_t< check > addMeasurement (const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)
 Adds one measurement to the history buffer, removing the oldest element in the buffer if it is full. More...
 
 Repredictor (const x_t &x0, const P_t &P0, const u_t &u0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len)
 The main constructor. More...
 
 Repredictor ()
 Empty constructor. More...
 
 Repredictor (const x_t &x0, const P_t &P0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len)
 Variation of the constructor for cases without a system input. More...
 
+ + + +

+Protected Types

+using history_t = boost::circular_buffer< info_t >
 
+ + + + + + + +

+Protected Member Functions

+template<typename T >
bool checkMonotonicity (const T &buf)
 
+template<typename T >
void printBuffer (const T &buf)
 
+ + + + + + + +

+Protected Attributes

+statecov_t m_sc
 
+ModelPtr m_default_model
 
+history_t m_history
 
+

Detailed Description

+

template<class Model, bool disable_reprediction = false>
+class mrs_lib::Repredictor< Model, disable_reprediction >

+ +

Implementation of the Repredictor for fusing measurements with variable delays.

+

A standard state-space system model is assumed for the repredictor with system inputs and measurements, generated from the system state vector. The inputs and measurements may be delayed with varying durations (an older measurement may become available after a newer one). A typical use-case scenario is when you have one "fast" but imprecise sensor and one "slow" but precise sensor and you want to use them both to get a good prediction (eg. height from the Garmin LiDAR, which comes at 100Hz, and position from a SLAM, which comes at 10Hz with a long delay). If the slow sensor is significantly slower than the fast one, fusing its measurement at the time it arrives without taking into account the sensor's delay may significantly bias your latest estimate.

+

To accomodate this, the Repredictor keeps a buffer of N last inputs and measurements (N is specified in the constructor). This buffer is then used to re-predict the desired state to a specific time, as requested by the user. Note that the re-prediction is evaluated in a lazy manner only when the user requests it, so it goes through the whole history buffer every time a prediction is requested.

+

The Repredictor utilizes a fusion Model (specified as the template parameter), which should implement the predict() and correct() methods. This Model is used for fusing the system inputs and measurements as well as for predictions. Typically, this Model will be some kind of a Kalman Filter (LKF, UKF etc.).

Note
The Model should be able to accomodate predictions with varying time steps in order for the Repredictor to work correctly (see eg. the varstepLKF class).
+
Template Parameters
+ + + +
Modelthe prediction and correction model (eg. a Kalman Filter).
disable_repredictionif true, reprediction is disabled and the class will act like a dumb LKF (for evaluation purposes).
+
+
+
Examples
repredictor/example.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ Repredictor() [1/3]

+ +
+
+
+template<class Model , bool disable_reprediction = false>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::Repredictor< Model, disable_reprediction >::Repredictor (const x_tx0,
const P_tP0,
const u_tu0,
const Q_tQ0,
const ros::Time & t0,
const ModelPtrmodel,
const unsigned hist_len 
)
+
+inline
+
+ +

The main constructor.

+

Initializes the Repredictor with the necessary initial and default values.

+
Parameters
+ + + + + + + + +
x0Initial state.
P0Covariance matrix of the initial state uncertainty.
u0Initial system input.
Q0Default covariance matrix of the process noise.
t0Time stamp of the initial state.
modelDefault prediction and correction model.
hist_lenLength of the history buffer for system inputs and measurements.
+
+
+ +
+
+ +

◆ Repredictor() [2/3]

+ +
+
+
+template<class Model , bool disable_reprediction = false>
+ + + + + +
+ + + + + + + +
mrs_lib::Repredictor< Model, disable_reprediction >::Repredictor ()
+
+inline
+
+ +

Empty constructor.

+ +
+
+ +

◆ Repredictor() [3/3]

+ +
+
+
+template<class Model , bool disable_reprediction = false>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::Repredictor< Model, disable_reprediction >::Repredictor (const x_tx0,
const P_tP0,
const Q_tQ0,
const ros::Time & t0,
const ModelPtrmodel,
const unsigned hist_len 
)
+
+inline
+
+ +

Variation of the constructor for cases without a system input.

+

Initializes the Repredictor with the necessary initial and default values. Assumes the system input is zero at t0.

+
Parameters
+ + + + + + + +
x0Initial state.
P0Covariance matrix of the initial state uncertainty.
Q0Default covariance matrix of the process noise.
t0Time stamp of the initial state.
modelDefault prediction and correction model.
hist_lenLength of the history buffer for system inputs and measurements.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ addInputChange() [1/2]

+ +
+
+
+template<class Model , bool disable_reprediction = false>
+
+template<bool check = disable_reprediction>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::enable_if_t<check> mrs_lib::Repredictor< Model, disable_reprediction >::addInputChange (const u_tu,
[[maybe_unused] ] const ros::Time & stamp,
const ModelPtrmodel = nullptr 
)
+
+inline
+
+ +

Adds one system input to the history buffer, removing the oldest element in the buffer if it is full.

+
Parameters
+ + + + +
uThe system input vector to be added.
stampTime stamp of the input vector and covariance matrix.
modelOptional pointer to a specific Model to be used with this input (eg. mapping it to different states). If it equals to nullptr, the default model specified in the constructor will be used.
+
+
+
Note
This is the variant of the method when reprediction is disabled and will function like a dumb LKF.
+ +
+
+ +

◆ addInputChange() [2/2]

+ +
+
+
+template<class Model , bool disable_reprediction = false>
+
+template<bool check = disable_reprediction>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::enable_if_t<!check> mrs_lib::Repredictor< Model, disable_reprediction >::addInputChange (const u_tu,
const ros::Time & stamp,
const ModelPtrmodel = nullptr 
)
+
+inline
+
+ +

Adds one system input to the history buffer, removing the oldest element in the buffer if it is full.

+
Parameters
+ + + + +
uThe system input vector to be added.
stampTime stamp of the input vector and covariance matrix.
modelOptional pointer to a specific Model to be used with this input (eg. mapping it to different states). If it equals to nullptr, the default model specified in the constructor will be used.
+
+
+
Note
The system input vector will not be added if it is older than the oldest element in the history buffer.
+ +
+
+ +

◆ addInputChangeWithNoise() [1/2]

+ +
+
+
+template<class Model , bool disable_reprediction = false>
+
+template<bool check = disable_reprediction>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::enable_if_t<check> mrs_lib::Repredictor< Model, disable_reprediction >::addInputChangeWithNoise (const u_tu,
const Q_tQ,
[[maybe_unused] ] const ros::Time & stamp,
const ModelPtrmodel = nullptr 
)
+
+inline
+
+ +

Adds one system input to the history buffer, removing the oldest element in the buffer if it is full.

+
Parameters
+ + + + + +
uThe system input vector to be added.
QThe process noise covariance matrix.
stampTime stamp of the input vector and covariance matrix.
modelOptional pointer to a specific Model to be used with this input (eg. mapping it to different states). If it equals to nullptr, the default model specified in the constructor will be used.
+
+
+
Note
This is the variant of the method when reprediction is disabled and will function like a dumb LKF.
+ +
+
+ +

◆ addInputChangeWithNoise() [2/2]

+ +
+
+
+template<class Model , bool disable_reprediction = false>
+
+template<bool check = disable_reprediction>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::enable_if_t<!check> mrs_lib::Repredictor< Model, disable_reprediction >::addInputChangeWithNoise (const u_tu,
const Q_tQ,
const ros::Time & stamp,
const ModelPtrmodel = nullptr 
)
+
+inline
+
+ +

Adds one system input to the history buffer, removing the oldest element in the buffer if it is full.

+
Parameters
+ + + + + +
uThe system input vector to be added.
QThe process noise covariance matrix.
stampTime stamp of the input vector and covariance matrix.
modelOptional pointer to a specific Model to be used with this input (eg. mapping it to different states). If it equals to nullptr, the default model specified in the constructor will be used.
+
+
+
Note
The system input vector will not be added if it is older than the oldest element in the history buffer.
+
Examples
repredictor/example.cpp.
+
+ +
+
+ +

◆ addMeasurement() [1/2]

+ +
+
+
+template<class Model , bool disable_reprediction = false>
+
+template<bool check = disable_reprediction>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::enable_if_t<!check> mrs_lib::Repredictor< Model, disable_reprediction >::addMeasurement (const z_tz,
const R_tR,
const ros::Time & stamp,
const ModelPtrmodel = nullptr,
const double & meas_id = -1 
)
+
+inline
+
+ +

Adds one measurement to the history buffer, removing the oldest element in the buffer if it is full.

+
Parameters
+ + + + + +
zThe measurement vector to be added.
RThe measurement noise covariance matrix, corresponding to the measurement vector.
stampTime stamp of the measurement vector and covariance matrix.
modelOptional pointer to a specific Model to be used with this measurement (eg. mapping it from different states). If it equals to nullptr, the default model specified in the constructor will be used.
+
+
+
Note
The measurement vector will not be added if it is older than the oldest element in the history buffer.
+
Examples
repredictor/example.cpp.
+
+ +
+
+ +

◆ addMeasurement() [2/2]

+ +
+
+
+template<class Model , bool disable_reprediction = false>
+
+template<bool check = disable_reprediction>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::enable_if_t<check> mrs_lib::Repredictor< Model, disable_reprediction >::addMeasurement (const z_tz,
const R_tR,
const ros::Time & stamp,
const ModelPtrmodel = nullptr,
const double & meas_id = -1 
)
+
+inline
+
+ +

Adds one measurement to the history buffer, removing the oldest element in the buffer if it is full.

+
Parameters
+ + + + + +
zThe measurement vector to be added.
RThe measurement noise covariance matrix, corresponding to the measurement vector.
stampTime stamp of the measurement vector and covariance matrix.
modelOptional pointer to a specific Model to be used with this measurement (eg. mapping it from different states). If it equals to nullptr, the default model specified in the constructor will be used.
+
+
+
Note
This is the variant of the method when reprediction is disabled and will function like a dumb LKF.
+ +
+
+ +

◆ addProcessNoiseChange() [1/2]

+ +
+
+
+template<class Model , bool disable_reprediction = false>
+
+template<bool check = disable_reprediction>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::enable_if_t<check> mrs_lib::Repredictor< Model, disable_reprediction >::addProcessNoiseChange (const Q_tQ,
[[maybe_unused] ] const ros::Time & stamp,
const ModelPtrmodel = nullptr 
)
+
+inline
+
+ +

Adds one system input to the history buffer, removing the oldest element in the buffer if it is full.

+
Parameters
+ + + + +
QThe process noise covariance matrix.
stampTime stamp of the input vector and covariance matrix.
modelOptional pointer to a specific Model to be used with this covariance matrix (eg. mapping it to different states). If it equals to nullptr, the default model specified in the constructor will be used.
+
+
+
Note
This is the variant of the method when reprediction is disabled and will function like a dumb LKF.
+ +
+
+ +

◆ addProcessNoiseChange() [2/2]

+ +
+
+
+template<class Model , bool disable_reprediction = false>
+
+template<bool check = disable_reprediction>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::enable_if_t<!check> mrs_lib::Repredictor< Model, disable_reprediction >::addProcessNoiseChange (const Q_tQ,
const ros::Time & stamp,
const ModelPtrmodel = nullptr 
)
+
+inline
+
+ +

Adds one system input to the history buffer, removing the oldest element in the buffer if it is full.

+
Parameters
+ + + + +
QThe process noise covariance matrix.
stampTime stamp of the input vector and covariance matrix.
modelOptional pointer to a specific Model to be used with this covariance matrix (eg. mapping it to different states). If it equals to nullptr, the default model specified in the constructor will be used.
+
+
+
Note
The new element will not be added if it is older than the oldest element in the history buffer.
+ +
+
+ +

◆ predictTo() [1/2]

+ +
+
+
+template<class Model , bool disable_reprediction = false>
+
+template<bool check = disable_reprediction>
+ + + + + +
+ + + + + + + + +
std::enable_if_t<!check, statecov_t> mrs_lib::Repredictor< Model, disable_reprediction >::predictTo (const ros::Time & to_stamp)
+
+inline
+
+ +

Estimates the system state and covariance matrix at the specified time.

+

The measurement and system input histories are used to estimate the state vector and covariance matrix values at the specified time, which are returned.

+
Parameters
+ + +
to_stampThe desired time at which the state vector and covariance matrix should be estimated.
+
+
+
Returns
Returns the estimated state vector and covariance matrix in a single struct.
+
Examples
repredictor/example.cpp.
+
+ +
+
+ +

◆ predictTo() [2/2]

+ +
+
+
+template<class Model , bool disable_reprediction = false>
+
+template<bool check = disable_reprediction>
+ + + + + +
+ + + + + + + + +
std::enable_if_t<check, statecov_t> mrs_lib::Repredictor< Model, disable_reprediction >::predictTo (const ros::Time & to_stamp)
+
+inline
+
+ +

Estimates the system state and covariance matrix at the specified time.

+

The measurement and system input histories are used to estimate the state vector and covariance matrix values at the specified time, which are returned.

+
Parameters
+ + +
to_stampThe desired time at which the state vector and covariance matrix should be estimated.
+
+
+
Returns
Returns the estimated state vector and covariance matrix in a single struct.
+
Note
This is the variant of the method when reprediction is disabled and will function like a dumb LKF.
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1Repredictor.js b/classmrs__lib_1_1Repredictor.js new file mode 100644 index 00000000..dd5372d8 --- /dev/null +++ b/classmrs__lib_1_1Repredictor.js @@ -0,0 +1,30 @@ +var classmrs__lib_1_1Repredictor = +[ + [ "history_t", "classmrs__lib_1_1Repredictor.html#a4f62944beacf99f22b71726d2cb5a0c1", null ], + [ "ModelPtr", "classmrs__lib_1_1Repredictor.html#acb4a34d97aab3896de9565012a890381", null ], + [ "P_t", "classmrs__lib_1_1Repredictor.html#aca5fb76c2e698ed1dd2c58e340adca58", null ], + [ "Q_t", "classmrs__lib_1_1Repredictor.html#af0b9dfd5f21b220e87c79298b061f63d", null ], + [ "R_t", "classmrs__lib_1_1Repredictor.html#aac7c07ba0237230fa7346932fb542ae9", null ], + [ "statecov_t", "classmrs__lib_1_1Repredictor.html#a794952d1627187223300848cd3e1bf66", null ], + [ "u_t", "classmrs__lib_1_1Repredictor.html#a19532d9b875ac33f80ffe313dfb26e6d", null ], + [ "x_t", "classmrs__lib_1_1Repredictor.html#ac9550981d03dc3c898dcbd39c4bc461f", null ], + [ "z_t", "classmrs__lib_1_1Repredictor.html#a4f12cadd7f0377eccb70b8d61e7ee8e3", null ], + [ "Repredictor", "classmrs__lib_1_1Repredictor.html#a035888099138efba982bda818c5fe390", null ], + [ "Repredictor", "classmrs__lib_1_1Repredictor.html#a0245871abc8208f13b4b33a7c2ece708", null ], + [ "Repredictor", "classmrs__lib_1_1Repredictor.html#a6ffbce95c9194f159c203378845851d0", null ], + [ "addInputChange", "classmrs__lib_1_1Repredictor.html#a2fa01fc3dbe7a557b80b6104466c8b7e", null ], + [ "addInputChange", "classmrs__lib_1_1Repredictor.html#a4db1b1896eb17c54bc906d0e9da1eee9", null ], + [ "addInputChangeWithNoise", "classmrs__lib_1_1Repredictor.html#a203a2fc80f2ab2d0caeb2b09e2c410a3", null ], + [ "addInputChangeWithNoise", "classmrs__lib_1_1Repredictor.html#ac85faca4dca9e6f785078eac6819f10f", null ], + [ "addMeasurement", "classmrs__lib_1_1Repredictor.html#a5e1db8bec67cabd386b8924c5312f648", null ], + [ "addMeasurement", "classmrs__lib_1_1Repredictor.html#a0aed856752f139230db775620b4b97da", null ], + [ "addProcessNoiseChange", "classmrs__lib_1_1Repredictor.html#ad07b1f478d926355157c46d93cde1b4b", null ], + [ "addProcessNoiseChange", "classmrs__lib_1_1Repredictor.html#a1a409036d5c94ee2115b2e31465fd2c7", null ], + [ "checkMonotonicity", "classmrs__lib_1_1Repredictor.html#abcd77c1a5c4a58a9e87ad47d5270f8ed", null ], + [ "predictTo", "classmrs__lib_1_1Repredictor.html#a018a96efcc5533e0e43b195cc23ee42e", null ], + [ "predictTo", "classmrs__lib_1_1Repredictor.html#ac4bd7a77f3a9c73309108c35cad4936c", null ], + [ "printBuffer", "classmrs__lib_1_1Repredictor.html#aece422abbff5ac9b83b79b0fd128b85d", null ], + [ "m_default_model", "classmrs__lib_1_1Repredictor.html#a53e46cd8b6ef87f1a716f879883807cf", null ], + [ "m_history", "classmrs__lib_1_1Repredictor.html#a1a3d0fc65e325813bbdbbcb62ba1d0eb", null ], + [ "m_sc", "classmrs__lib_1_1Repredictor.html#a0353caac9435795af6495ea3ea6a7352", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1RepredictorAloamgarm-members.html b/classmrs__lib_1_1RepredictorAloamgarm-members.html new file mode 100644 index 00000000..510f6aec --- /dev/null +++ b/classmrs__lib_1_1RepredictorAloamgarm-members.html @@ -0,0 +1,132 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::RepredictorAloamgarm< Model > Member List
+
+
+ +

This is the complete list of members for mrs_lib::RepredictorAloamgarm< Model >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addInputChange(const u_t &u, const ros::Time &stamp, const ModelPtr &model=nullptr)mrs_lib::Repredictor< Model >inline
addInputChange(const u_t &u,[[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)mrs_lib::Repredictor< Model >inline
addInputChangeWithNoise(const u_t &u, const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)mrs_lib::Repredictor< Model >inline
addInputChangeWithNoise(const u_t &u, const Q_t &Q,[[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)mrs_lib::Repredictor< Model >inline
addMeasurement(const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)mrs_lib::Repredictor< Model >inline
addMeasurement(const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)mrs_lib::Repredictor< Model >inline
addProcessNoiseChange(const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)mrs_lib::Repredictor< Model >inline
addProcessNoiseChange(const Q_t &Q,[[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)mrs_lib::Repredictor< Model >inline
checkMonotonicity(const T &buf) (defined in mrs_lib::Repredictor< Model >)mrs_lib::Repredictor< Model >inlineprotected
history_t typedef (defined in mrs_lib::RepredictorAloamgarm< Model >)mrs_lib::RepredictorAloamgarm< Model >
m_default_model (defined in mrs_lib::Repredictor< Model >)mrs_lib::Repredictor< Model >protected
m_history (defined in mrs_lib::Repredictor< Model >)mrs_lib::Repredictor< Model >protected
m_sc (defined in mrs_lib::Repredictor< Model >)mrs_lib::Repredictor< Model >protected
ModelPtr typedefmrs_lib::RepredictorAloamgarm< Model >
P_t typedefmrs_lib::RepredictorAloamgarm< Model >
predictTo(const ros::Time &to_stamp)mrs_lib::Repredictor< Model >inline
predictTo(const ros::Time &to_stamp)mrs_lib::Repredictor< Model >inline
printBuffer(const T &buf) (defined in mrs_lib::Repredictor< Model >)mrs_lib::Repredictor< Model >inlineprotected
Q_t typedefmrs_lib::RepredictorAloamgarm< Model >
R_t typedefmrs_lib::RepredictorAloamgarm< Model >
Repredictor(const x_t &x0, const P_t &P0, const u_t &u0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len)mrs_lib::Repredictor< Model >inline
Repredictor()mrs_lib::Repredictor< Model >inline
Repredictor(const x_t &x0, const P_t &P0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len)mrs_lib::Repredictor< Model >inline
RepredictorAloamgarm(const x_t &x0, const P_t &P0, const u_t &u0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len, const std::shared_ptr< boost::circular_buffer< double >> &nis_buffer)mrs_lib::RepredictorAloamgarm< Model >inline
statecov_t typedefmrs_lib::RepredictorAloamgarm< Model >
u_t typedefmrs_lib::RepredictorAloamgarm< Model >
x_t typedefmrs_lib::RepredictorAloamgarm< Model >
z_t typedefmrs_lib::RepredictorAloamgarm< Model >
+
+ + + + diff --git a/classmrs__lib_1_1RepredictorAloamgarm.html b/classmrs__lib_1_1RepredictorAloamgarm.html new file mode 100644 index 00000000..4a15b78d --- /dev/null +++ b/classmrs__lib_1_1RepredictorAloamgarm.html @@ -0,0 +1,383 @@ + + + + + + + +mrs_lib: mrs_lib::RepredictorAloamgarm< Model > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::RepredictorAloamgarm< Model > Class Template Reference
+
+
+ +

Implementation of the RepredictorAloamgarm for fusing measurements with variable delays. + More...

+ +

#include <repredictor_aloamgarm.h>

+
+ + Inheritance diagram for mrs_lib::RepredictorAloamgarm< Model >:
+
+
+ +
+ + Collaboration diagram for mrs_lib::RepredictorAloamgarm< Model >:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using x_t = typename Model::x_t
 State vector type $n \times 1$.
 
+using u_t = typename Model::u_t
 Input vector type $m \times 1$.
 
+using z_t = typename Model::z_t
 Measurement vector type $p \times 1$.
 
+using P_t = typename Model::P_t
 State uncertainty covariance matrix type $n \times n$.
 
+using R_t = typename Model::R_t
 Measurement noise covariance matrix type $p \times p$.
 
+using Q_t = typename Model::Q_t
 Process noise covariance matrix type $n \times n$.
 
+using statecov_t = typename Model::statecov_t
 Helper struct for passing around the state and its covariance in one variable.
 
+using ModelPtr = typename std::shared_ptr< Model >
 Shorthand type for a shared pointer-to-Model.
 
+using history_t = typename Repredictor< Model >::history_t
 
- Public Types inherited from mrs_lib::Repredictor< Model >
+using x_t = typename Model::x_t
 State vector type $n \times 1$.
 
+using u_t = typename Model::u_t
 Input vector type $m \times 1$.
 
+using z_t = typename Model::z_t
 Measurement vector type $p \times 1$.
 
+using P_t = typename Model::P_t
 State uncertainty covariance matrix type $n \times n$.
 
+using R_t = typename Model::R_t
 Measurement noise covariance matrix type $p \times p$.
 
+using Q_t = typename Model::Q_t
 Process noise covariance matrix type $n \times n$.
 
+using statecov_t = typename Model::statecov_t
 Helper struct for passing around the state and its covariance in one variable.
 
+using ModelPtr = typename std::shared_ptr< Model >
 Shorthand type for a shared pointer-to-Model.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RepredictorAloamgarm (const x_t &x0, const P_t &P0, const u_t &u0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len, const std::shared_ptr< boost::circular_buffer< double >> &nis_buffer)
 Variation of the constructor for kalman filter using nis_buffer (ALOAMGARM) More...
 
- Public Member Functions inherited from mrs_lib::Repredictor< Model >
std::enable_if_t<!check, statecov_tpredictTo (const ros::Time &to_stamp)
 Estimates the system state and covariance matrix at the specified time. More...
 
std::enable_if_t< check, statecov_tpredictTo (const ros::Time &to_stamp)
 Estimates the system state and covariance matrix at the specified time. More...
 
std::enable_if_t<!check > addInputChangeWithNoise (const u_t &u, const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)
 Adds one system input to the history buffer, removing the oldest element in the buffer if it is full. More...
 
std::enable_if_t< check > addInputChangeWithNoise (const u_t &u, const Q_t &Q,[[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)
 Adds one system input to the history buffer, removing the oldest element in the buffer if it is full. More...
 
std::enable_if_t<!check > addInputChange (const u_t &u, const ros::Time &stamp, const ModelPtr &model=nullptr)
 Adds one system input to the history buffer, removing the oldest element in the buffer if it is full. More...
 
std::enable_if_t< check > addInputChange (const u_t &u,[[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)
 Adds one system input to the history buffer, removing the oldest element in the buffer if it is full. More...
 
std::enable_if_t<!check > addProcessNoiseChange (const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)
 Adds one system input to the history buffer, removing the oldest element in the buffer if it is full. More...
 
std::enable_if_t< check > addProcessNoiseChange (const Q_t &Q,[[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)
 Adds one system input to the history buffer, removing the oldest element in the buffer if it is full. More...
 
std::enable_if_t<!check > addMeasurement (const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)
 Adds one measurement to the history buffer, removing the oldest element in the buffer if it is full. More...
 
std::enable_if_t< check > addMeasurement (const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)
 Adds one measurement to the history buffer, removing the oldest element in the buffer if it is full. More...
 
 Repredictor (const x_t &x0, const P_t &P0, const u_t &u0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len)
 The main constructor. More...
 
 Repredictor ()
 Empty constructor. More...
 
 Repredictor (const x_t &x0, const P_t &P0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len)
 Variation of the constructor for cases without a system input. More...
 
+ + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Types inherited from mrs_lib::Repredictor< Model >
+using history_t = boost::circular_buffer< info_t >
 
- Protected Member Functions inherited from mrs_lib::Repredictor< Model >
+bool checkMonotonicity (const T &buf)
 
+void printBuffer (const T &buf)
 
- Protected Attributes inherited from mrs_lib::Repredictor< Model >
+statecov_t m_sc
 
+ModelPtr m_default_model
 
+history_t m_history
 
+

Detailed Description

+

template<class Model>
+class mrs_lib::RepredictorAloamgarm< Model >

+ +

Implementation of the RepredictorAloamgarm for fusing measurements with variable delays.

+

A standard state-space system model is assumed for the repredictor with system inputs and measurements, generated from the system state vector. The inputs and measurements may be delayed with varying durations (an older measurement may become available after a newer one). A typical use-case scenario is when you have one "fast" but imprecise sensor and one "slow" but precise sensor and you want to use them both to get a good prediction (eg. height from the Garmin LiDAR, which comes at 100Hz, and position from a SLAM, which comes at 10Hz with a long delay). If the slow sensor is significantly slower than the fast one, fusing its measurement at the time it arrives without taking into account the sensor's delay may significantly bias your latest estimate.

+

To accomodate this, the RepredictorAloamgarm keeps a buffer of N last inputs and measurements (N is specified in the constructor). This buffer is then used to re-predict the desired state to a specific time, as requested by the user. Note that the re-prediction is evaluated in a lazy manner only when the user requests it, so it goes through the whole history buffer every time a prediction is requested.

+

The RepredictorAloamgarm utilizes a fusion Model (specified as the template parameter), which should implement the predict() and correct() methods. This Model is used for fusing the system inputs and measurements as well as for predictions. Typically, this Model will be some kind of a Kalman Filter (LKF, UKF etc.).

Note
The Model should be able to accomodate predictions with varying time steps in order for the RepredictorAloamgarm to work correctly (see eg. the varstepLKF class).
+
Template Parameters
+ + +
Modelthe prediction and correction model (eg. a Kalman Filter).
+
+
+

Constructor & Destructor Documentation

+ +

◆ RepredictorAloamgarm()

+ +
+
+
+template<class Model >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::RepredictorAloamgarm< Model >::RepredictorAloamgarm (const x_tx0,
const P_tP0,
const u_tu0,
const Q_tQ0,
const ros::Time & t0,
const ModelPtrmodel,
const unsigned hist_len,
const std::shared_ptr< boost::circular_buffer< double >> & nis_buffer 
)
+
+inline
+
+ +

Variation of the constructor for kalman filter using nis_buffer (ALOAMGARM)

+

Initializes the RepredictorAloamgarm with the necessary initial and default values.

+
Parameters
+ + + + + + + + + +
x0Initial state.
P0Covariance matrix of the initial state uncertainty.
u0Initial system input.
Q0Default covariance matrix of the process noise.
t0Time stamp of the initial state.
modelDefault prediction and correction model.
hist_lenLength of the history buffer for system inputs and measurements.
nis_bufferCircular buffer for NIS values.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1RepredictorAloamgarm.js b/classmrs__lib_1_1RepredictorAloamgarm.js new file mode 100644 index 00000000..d65cdcee --- /dev/null +++ b/classmrs__lib_1_1RepredictorAloamgarm.js @@ -0,0 +1,13 @@ +var classmrs__lib_1_1RepredictorAloamgarm = +[ + [ "history_t", "classmrs__lib_1_1RepredictorAloamgarm.html#adfbe585577a0feda074bad4e18d617dc", null ], + [ "ModelPtr", "classmrs__lib_1_1RepredictorAloamgarm.html#a7766d3dbccd04fcbe584cca6730153ca", null ], + [ "P_t", "classmrs__lib_1_1RepredictorAloamgarm.html#a1f2bffb8cbea233b14036e016e8bb654", null ], + [ "Q_t", "classmrs__lib_1_1RepredictorAloamgarm.html#aa031cc536ee7a46c3e79287c65fc1fa7", null ], + [ "R_t", "classmrs__lib_1_1RepredictorAloamgarm.html#afa36b8b183f868a84dc182e4ac562d44", null ], + [ "statecov_t", "classmrs__lib_1_1RepredictorAloamgarm.html#a4d5da8a5d296bf98bff6f99eaf550ae7", null ], + [ "u_t", "classmrs__lib_1_1RepredictorAloamgarm.html#acf7e98ab597eeeb4766b9794cf861f13", null ], + [ "x_t", "classmrs__lib_1_1RepredictorAloamgarm.html#a5c2992c6bde2dd8f3bdc7673fc3977da", null ], + [ "z_t", "classmrs__lib_1_1RepredictorAloamgarm.html#a3e265f15f9b8b031af819d1d2045909b", null ], + [ "RepredictorAloamgarm", "classmrs__lib_1_1RepredictorAloamgarm.html#a1e1d3245d8f2fd98c9f80d4795061395", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1RepredictorAloamgarm__coll__graph.map b/classmrs__lib_1_1RepredictorAloamgarm__coll__graph.map new file mode 100644 index 00000000..68c827b9 --- /dev/null +++ b/classmrs__lib_1_1RepredictorAloamgarm__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1RepredictorAloamgarm__coll__graph.md5 b/classmrs__lib_1_1RepredictorAloamgarm__coll__graph.md5 new file mode 100644 index 00000000..4419632f --- /dev/null +++ b/classmrs__lib_1_1RepredictorAloamgarm__coll__graph.md5 @@ -0,0 +1 @@ +4018511dbda9a0f596989656ba14d0ad \ No newline at end of file diff --git a/classmrs__lib_1_1RepredictorAloamgarm__coll__graph.png b/classmrs__lib_1_1RepredictorAloamgarm__coll__graph.png new file mode 100644 index 00000000..b3442949 Binary files /dev/null and b/classmrs__lib_1_1RepredictorAloamgarm__coll__graph.png differ diff --git a/classmrs__lib_1_1RepredictorAloamgarm__inherit__graph.map b/classmrs__lib_1_1RepredictorAloamgarm__inherit__graph.map new file mode 100644 index 00000000..68c827b9 --- /dev/null +++ b/classmrs__lib_1_1RepredictorAloamgarm__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1RepredictorAloamgarm__inherit__graph.md5 b/classmrs__lib_1_1RepredictorAloamgarm__inherit__graph.md5 new file mode 100644 index 00000000..4419632f --- /dev/null +++ b/classmrs__lib_1_1RepredictorAloamgarm__inherit__graph.md5 @@ -0,0 +1 @@ +4018511dbda9a0f596989656ba14d0ad \ No newline at end of file diff --git a/classmrs__lib_1_1RepredictorAloamgarm__inherit__graph.png b/classmrs__lib_1_1RepredictorAloamgarm__inherit__graph.png new file mode 100644 index 00000000..b3442949 Binary files /dev/null and b/classmrs__lib_1_1RepredictorAloamgarm__inherit__graph.png differ diff --git a/classmrs__lib_1_1RosParamProvider-members.html b/classmrs__lib_1_1RosParamProvider-members.html new file mode 100644 index 00000000..7f7523a9 --- /dev/null +++ b/classmrs__lib_1_1RosParamProvider-members.html @@ -0,0 +1,110 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::RosParamProvider Member List
+
+
+ +

This is the complete list of members for mrs_lib::RosParamProvider, including all inherited members.

+ + + + + + + +
addYamlFile(const std::string &filepath) (defined in mrs_lib::ParamProvider)mrs_lib::ParamProvider
getParam(const std::string &param_name, T &value_out) (defined in mrs_lib::RosParamProvider)mrs_lib::RosParamProvider
getParam(const std::string &param_name, T &value_out) const (defined in mrs_lib::ParamProvider)mrs_lib::ParamProvider
getParam(const std::string &param_name, XmlRpc::XmlRpcValue &value_out) const (defined in mrs_lib::ParamProvider)mrs_lib::ParamProvider
ParamProvider()=delete (defined in mrs_lib::RosParamProvider)mrs_lib::RosParamProvider
ParamProvider(const ros::NodeHandle &nh, std::string node_name, const bool use_rosparam=true) (defined in mrs_lib::ParamProvider)mrs_lib::ParamProvider
+
+ + + + diff --git a/classmrs__lib_1_1RosParamProvider.html b/classmrs__lib_1_1RosParamProvider.html new file mode 100644 index 00000000..9fa01e23 --- /dev/null +++ b/classmrs__lib_1_1RosParamProvider.html @@ -0,0 +1,155 @@ + + + + + + + +mrs_lib: mrs_lib::RosParamProvider Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::RosParamProvider Class Reference
+
+
+
+ + Inheritance diagram for mrs_lib::RosParamProvider:
+
+
+ +
+ + Collaboration diagram for mrs_lib::RosParamProvider:
+
+
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

+template<typename T >
bool getParam (const std::string &param_name, T &value_out)
 
ParamProvider ()=delete
 
- Public Member Functions inherited from mrs_lib::ParamProvider
+template<typename T >
bool getParam (const std::string &param_name, T &value_out) const
 
+bool getParam (const std::string &param_name, XmlRpc::XmlRpcValue &value_out) const
 
ParamProvider (const ros::NodeHandle &nh, std::string node_name, const bool use_rosparam=true)
 
+bool addYamlFile (const std::string &filepath)
 
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1RosParamProvider.js b/classmrs__lib_1_1RosParamProvider.js new file mode 100644 index 00000000..a3d2c3d5 --- /dev/null +++ b/classmrs__lib_1_1RosParamProvider.js @@ -0,0 +1,5 @@ +var classmrs__lib_1_1RosParamProvider = +[ + [ "getParam", "classmrs__lib_1_1RosParamProvider.html#a9d38bf19db16823ac03e639d5dd6a594", null ], + [ "ParamProvider", "classmrs__lib_1_1RosParamProvider.html#adbd92642f661318a98d5891d20f36e83", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1RosParamProvider__coll__graph.map b/classmrs__lib_1_1RosParamProvider__coll__graph.map new file mode 100644 index 00000000..32bd7efb --- /dev/null +++ b/classmrs__lib_1_1RosParamProvider__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1RosParamProvider__coll__graph.md5 b/classmrs__lib_1_1RosParamProvider__coll__graph.md5 new file mode 100644 index 00000000..dd289e41 --- /dev/null +++ b/classmrs__lib_1_1RosParamProvider__coll__graph.md5 @@ -0,0 +1 @@ +d2bf7adfb34e89d1e089b1a2b9655557 \ No newline at end of file diff --git a/classmrs__lib_1_1RosParamProvider__coll__graph.png b/classmrs__lib_1_1RosParamProvider__coll__graph.png new file mode 100644 index 00000000..0488ff1e Binary files /dev/null and b/classmrs__lib_1_1RosParamProvider__coll__graph.png differ diff --git a/classmrs__lib_1_1RosParamProvider__inherit__graph.map b/classmrs__lib_1_1RosParamProvider__inherit__graph.map new file mode 100644 index 00000000..32bd7efb --- /dev/null +++ b/classmrs__lib_1_1RosParamProvider__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1RosParamProvider__inherit__graph.md5 b/classmrs__lib_1_1RosParamProvider__inherit__graph.md5 new file mode 100644 index 00000000..dd289e41 --- /dev/null +++ b/classmrs__lib_1_1RosParamProvider__inherit__graph.md5 @@ -0,0 +1 @@ +d2bf7adfb34e89d1e089b1a2b9655557 \ No newline at end of file diff --git a/classmrs__lib_1_1RosParamProvider__inherit__graph.png b/classmrs__lib_1_1RosParamProvider__inherit__graph.png new file mode 100644 index 00000000..0488ff1e Binary files /dev/null and b/classmrs__lib_1_1RosParamProvider__inherit__graph.png differ diff --git a/classmrs__lib_1_1Routine-members.html b/classmrs__lib_1_1Routine-members.html new file mode 100644 index 00000000..386bf128 --- /dev/null +++ b/classmrs__lib_1_1Routine-members.html @@ -0,0 +1,108 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::Routine Member List
+
+
+ +

This is the complete list of members for mrs_lib::Routine, including all inherited members.

+ + + + + +
end(void) (defined in mrs_lib::Routine)mrs_lib::Routine
Routine(std::string name, std::string node_name, std::shared_ptr< ros::Publisher > publisher, std::shared_ptr< std::mutex > mutex_publisher, bool profiler_enabled) (defined in mrs_lib::Routine)mrs_lib::Routine
Routine(std::string name, std::string node_name, double expected_rate, double threshold, std::shared_ptr< ros::Publisher > publisher, std::shared_ptr< std::mutex > mutex_publisher, bool profiler_enabled, ros::TimerEvent event) (defined in mrs_lib::Routine)mrs_lib::Routine
~Routine() (defined in mrs_lib::Routine)mrs_lib::Routine
+
+ + + + diff --git a/classmrs__lib_1_1Routine.html b/classmrs__lib_1_1Routine.html new file mode 100644 index 00000000..150eb3ca --- /dev/null +++ b/classmrs__lib_1_1Routine.html @@ -0,0 +1,122 @@ + + + + + + + +mrs_lib: mrs_lib::Routine Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::Routine Class Reference
+
+
+ + + + + + + + +

+Public Member Functions

Routine (std::string name, std::string node_name, std::shared_ptr< ros::Publisher > publisher, std::shared_ptr< std::mutex > mutex_publisher, bool profiler_enabled)
 
Routine (std::string name, std::string node_name, double expected_rate, double threshold, std::shared_ptr< ros::Publisher > publisher, std::shared_ptr< std::mutex > mutex_publisher, bool profiler_enabled, ros::TimerEvent event)
 
+void end (void)
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1Routine.js b/classmrs__lib_1_1Routine.js new file mode 100644 index 00000000..00d07904 --- /dev/null +++ b/classmrs__lib_1_1Routine.js @@ -0,0 +1,7 @@ +var classmrs__lib_1_1Routine = +[ + [ "Routine", "classmrs__lib_1_1Routine.html#a0fdaedd9d006a1a3ab935783fd45ad4f", null ], + [ "Routine", "classmrs__lib_1_1Routine.html#a97f405ab968c85699c3b3c6d60ee8b79", null ], + [ "~Routine", "classmrs__lib_1_1Routine.html#a30d39155a75b06030d7539566d2068d2", null ], + [ "end", "classmrs__lib_1_1Routine.html#aec3b10482c1b3b3ba80bde4f60c919a7", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1SafetyZone-members.html b/classmrs__lib_1_1SafetyZone-members.html new file mode 100644 index 00000000..40511ced --- /dev/null +++ b/classmrs__lib_1_1SafetyZone-members.html @@ -0,0 +1,114 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::SafetyZone Member List
+
+
+ +

This is the complete list of members for mrs_lib::SafetyZone, including all inherited members.

+ + + + + + + + + + + +
getBorder() (defined in mrs_lib::SafetyZone)mrs_lib::SafetyZone
getObstacles() (defined in mrs_lib::SafetyZone)mrs_lib::SafetyZone
getPointObstacles() (defined in mrs_lib::SafetyZone)mrs_lib::SafetyZone
isPathValid2d(const double p1x, const double p1y, const double p2x, const double p2y) (defined in mrs_lib::SafetyZone)mrs_lib::SafetyZone
isPathValid3d(const double p1x, const double p1y, const double p1z, const double p2x, const double p2y, const double p2z) (defined in mrs_lib::SafetyZone)mrs_lib::SafetyZone
isPointValid2d(const double px, const double py) (defined in mrs_lib::SafetyZone)mrs_lib::SafetyZone
isPointValid3d(const double px, const double py, const double pz) (defined in mrs_lib::SafetyZone)mrs_lib::SafetyZone
SafetyZone(Polygon outerBorder, std::vector< Polygon > innerObstacles, std::vector< PointObstacle > pointObstacles) (defined in mrs_lib::SafetyZone)mrs_lib::SafetyZone
SafetyZone(const Eigen::MatrixXd &outerBorderMatrix, const std::vector< Eigen::MatrixXd > &innerObstaclesMatrixes, const std::vector< Eigen::MatrixXd > &pointObstaclesMatrixes) (defined in mrs_lib::SafetyZone)mrs_lib::SafetyZone
~SafetyZone() (defined in mrs_lib::SafetyZone)mrs_lib::SafetyZone
+
+ + + + diff --git a/classmrs__lib_1_1SafetyZone.html b/classmrs__lib_1_1SafetyZone.html new file mode 100644 index 00000000..58bd9ba9 --- /dev/null +++ b/classmrs__lib_1_1SafetyZone.html @@ -0,0 +1,150 @@ + + + + + + + +mrs_lib: mrs_lib::SafetyZone Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::SafetyZone Class Reference
+
+
+ + + + + + + + +

+Classes

struct  BorderError
 
struct  PointObstacleError
 
struct  PolygonObstacleError
 
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

SafetyZone (Polygon outerBorder, std::vector< Polygon > innerObstacles, std::vector< PointObstacle > pointObstacles)
 
SafetyZone (const Eigen::MatrixXd &outerBorderMatrix, const std::vector< Eigen::MatrixXd > &innerObstaclesMatrixes, const std::vector< Eigen::MatrixXd > &pointObstaclesMatrixes)
 
+bool isPointValid3d (const double px, const double py, const double pz)
 
+bool isPointValid2d (const double px, const double py)
 
+bool isPathValid3d (const double p1x, const double p1y, const double p1z, const double p2x, const double p2y, const double p2z)
 
+bool isPathValid2d (const double p1x, const double p1y, const double p2x, const double p2y)
 
+Polygon getBorder ()
 
+std::vector< PolygongetObstacles ()
 
+std::vector< PointObstaclegetPointObstacles ()
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1SafetyZone.js b/classmrs__lib_1_1SafetyZone.js new file mode 100644 index 00000000..d6b0b813 --- /dev/null +++ b/classmrs__lib_1_1SafetyZone.js @@ -0,0 +1,16 @@ +var classmrs__lib_1_1SafetyZone = +[ + [ "BorderError", "structmrs__lib_1_1SafetyZone_1_1BorderError.html", "structmrs__lib_1_1SafetyZone_1_1BorderError" ], + [ "PointObstacleError", "structmrs__lib_1_1SafetyZone_1_1PointObstacleError.html", "structmrs__lib_1_1SafetyZone_1_1PointObstacleError" ], + [ "PolygonObstacleError", "structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError.html", "structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError" ], + [ "SafetyZone", "classmrs__lib_1_1SafetyZone.html#a4a2e6e95359f49c27709471c1febe4f8", null ], + [ "~SafetyZone", "classmrs__lib_1_1SafetyZone.html#a2bb02ed16ded0e81467cbf1d8d08bd9e", null ], + [ "SafetyZone", "classmrs__lib_1_1SafetyZone.html#a48a363d1440ecdd5266e43ccb3f68e08", null ], + [ "getBorder", "classmrs__lib_1_1SafetyZone.html#aa42fec6e604ceb9605b47b92d6c210b0", null ], + [ "getObstacles", "classmrs__lib_1_1SafetyZone.html#a88f387698bed3964e34422aef8d3c6bf", null ], + [ "getPointObstacles", "classmrs__lib_1_1SafetyZone.html#ab454e1924916517f0c369988e2bf9022", null ], + [ "isPathValid2d", "classmrs__lib_1_1SafetyZone.html#a6c500442a6cf1fae262d45eab255370f", null ], + [ "isPathValid3d", "classmrs__lib_1_1SafetyZone.html#a0885538976813eb475cb23993616e099", null ], + [ "isPointValid2d", "classmrs__lib_1_1SafetyZone.html#aa9b5e3f7f0e482e4fd26aee747245302", null ], + [ "isPointValid3d", "classmrs__lib_1_1SafetyZone.html#a0f85e0224fec959051bd6e2d97620d52", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1ScopeTimer-members.html b/classmrs__lib_1_1ScopeTimer-members.html new file mode 100644 index 00000000..4dec607a --- /dev/null +++ b/classmrs__lib_1_1ScopeTimer-members.html @@ -0,0 +1,110 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::ScopeTimer Member List
+
+
+ +

This is the complete list of members for mrs_lib::ScopeTimer, including all inherited members.

+ + + + + + + +
checkpoint(const std::string &label)mrs_lib::ScopeTimer
getLifetime()mrs_lib::ScopeTimer
ScopeTimer(const std::string &label, const ros::Duration &throttle_period=ros::Duration(0), const bool enable=true, const std::shared_ptr< ScopeTimerLogger > scope_timer_logger=nullptr)mrs_lib::ScopeTimer
ScopeTimer(const std::string &label, const time_point &tp0, const ros::Duration &throttle_period=ros::Duration(0), const bool enable=true, const std::shared_ptr< ScopeTimerLogger > scope_timer_logger=nullptr)mrs_lib::ScopeTimer
ScopeTimer(const std::string &label, const std::shared_ptr< ScopeTimerLogger > scope_timer_logger, const bool enable=true)mrs_lib::ScopeTimer
~ScopeTimer()mrs_lib::ScopeTimer
+
+ + + + diff --git a/classmrs__lib_1_1ScopeTimer.html b/classmrs__lib_1_1ScopeTimer.html new file mode 100644 index 00000000..a292441d --- /dev/null +++ b/classmrs__lib_1_1ScopeTimer.html @@ -0,0 +1,170 @@ + + + + + + + +mrs_lib: mrs_lib::ScopeTimer Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::ScopeTimer Class Reference
+
+
+ +

Simple timer which will time a duration of a scope and checkpoints inside the scope in ros time and std::chrono time. + More...

+ +

#include <scope_timer.h>

+ + + + +

+Classes

struct  time_point
 
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ScopeTimer (const std::string &label, const ros::Duration &throttle_period=ros::Duration(0), const bool enable=true, const std::shared_ptr< ScopeTimerLogger > scope_timer_logger=nullptr)
 The basic constructor with a user-defined label of the timer, throttled period and file logger.
 
ScopeTimer (const std::string &label, const time_point &tp0, const ros::Duration &throttle_period=ros::Duration(0), const bool enable=true, const std::shared_ptr< ScopeTimerLogger > scope_timer_logger=nullptr)
 The basic constructor with a user-defined label of the timer and a pre-start time, which will also be measured.
 
ScopeTimer (const std::string &label, const std::shared_ptr< ScopeTimerLogger > scope_timer_logger, const bool enable=true)
 The basic constructor with a user-defined label of the timer and file logger.
 
+void checkpoint (const std::string &label)
 Checkpoint, prints the time passed until the point this function is called.
 
float getLifetime ()
 Getter for scope timer lifetime. More...
 
~ScopeTimer ()
 The basic destructor which prints out or logs the scope times, if enabled.
 
+

Detailed Description

+

Simple timer which will time a duration of a scope and checkpoints inside the scope in ros time and std::chrono time.

+

Member Function Documentation

+ +

◆ getLifetime()

+ +
+
+ + + + + + + +
float mrs_lib::ScopeTimer::getLifetime ()
+
+ +

Getter for scope timer lifetime.

+
Returns
lifetime as floating point milliseconds
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1ScopeTimer.js b/classmrs__lib_1_1ScopeTimer.js new file mode 100644 index 00000000..b0cf4d12 --- /dev/null +++ b/classmrs__lib_1_1ScopeTimer.js @@ -0,0 +1,10 @@ +var classmrs__lib_1_1ScopeTimer = +[ + [ "time_point", "structmrs__lib_1_1ScopeTimer_1_1time__point.html", "structmrs__lib_1_1ScopeTimer_1_1time__point" ], + [ "ScopeTimer", "classmrs__lib_1_1ScopeTimer.html#aebac3a7bad2d63f49d5777e08b504661", null ], + [ "ScopeTimer", "classmrs__lib_1_1ScopeTimer.html#a8943aec6fbe491633b7f698eb3f0d131", null ], + [ "ScopeTimer", "classmrs__lib_1_1ScopeTimer.html#abdaf77484c74055916b8e491c8ffe318", null ], + [ "~ScopeTimer", "classmrs__lib_1_1ScopeTimer.html#a243e048e46a8ef623b60c465dc7ee102", null ], + [ "checkpoint", "classmrs__lib_1_1ScopeTimer.html#acbb378343cba8f94ef228024d7a4b938", null ], + [ "getLifetime", "classmrs__lib_1_1ScopeTimer.html#abe8dc75be918b3a2ca7bbb043a022106", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1ScopeTimerLogger-members.html b/classmrs__lib_1_1ScopeTimerLogger-members.html new file mode 100644 index 00000000..534066c0 --- /dev/null +++ b/classmrs__lib_1_1ScopeTimerLogger-members.html @@ -0,0 +1,112 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::ScopeTimerLogger Member List
+
+
+ +

This is the complete list of members for mrs_lib::ScopeTimerLogger, including all inherited members.

+ + + + + + + + + +
chrono_tp typedef (defined in mrs_lib::ScopeTimerLogger)mrs_lib::ScopeTimerLogger
getLogFilepath()mrs_lib::ScopeTimerLoggerinline
log(const std::string &scope, const chrono_tp &time_start, const chrono_tp &time_end)mrs_lib::ScopeTimerLogger
log(const std::string &scope, const std::string &label_from, const std::string &label_to, const chrono_tp &time_start, const chrono_tp &time_end)mrs_lib::ScopeTimerLogger
loggingEnabled()mrs_lib::ScopeTimerLoggerinline
ScopeTimerLogger(const std::string &logfile, const bool enable_logging=true, const int log_precision=10)mrs_lib::ScopeTimerLogger
shouldLog()mrs_lib::ScopeTimerLoggerinline
~ScopeTimerLogger()mrs_lib::ScopeTimerLogger
+
+ + + + diff --git a/classmrs__lib_1_1ScopeTimerLogger.html b/classmrs__lib_1_1ScopeTimerLogger.html new file mode 100644 index 00000000..3a1cde4f --- /dev/null +++ b/classmrs__lib_1_1ScopeTimerLogger.html @@ -0,0 +1,155 @@ + + + + + + + +mrs_lib: mrs_lib::ScopeTimerLogger Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::ScopeTimerLogger Class Reference
+
+
+ +

Simple file logger of scope timer and its checkpoints. + More...

+ +

#include <scope_timer.h>

+ + + + +

+Public Types

+using chrono_tp = std::chrono::time_point< std::chrono::steady_clock >
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ScopeTimerLogger (const std::string &logfile, const bool enable_logging=true, const int log_precision=10)
 The basic constructor with a user-defined path to the logger file, enable flag and float-logging precision.
 
~ScopeTimerLogger ()
 The basic destructor which closes the logging file.
 
+bool shouldLog ()
 Returns true if a non-empty path to a logger file was given by the user.
 
+bool loggingEnabled ()
 Returns true if the enable flag was set to true, a non-empty path to a logger file was given by the user and the logger file stream was successfully opened.
 
+std::string getLogFilepath ()
 Returns the path to the log.
 
+void log (const std::string &scope, const chrono_tp &time_start, const chrono_tp &time_end)
 Writes the time data of the given scope and empty checkpoints into the logger stream.
 
+void log (const std::string &scope, const std::string &label_from, const std::string &label_to, const chrono_tp &time_start, const chrono_tp &time_end)
 Writes the time data of the given scope and checkpoint labels into the logger stream.
 
+

Detailed Description

+

Simple file logger of scope timer and its checkpoints.

+

The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1ScopeTimerLogger.js b/classmrs__lib_1_1ScopeTimerLogger.js new file mode 100644 index 00000000..fa593e89 --- /dev/null +++ b/classmrs__lib_1_1ScopeTimerLogger.js @@ -0,0 +1,11 @@ +var classmrs__lib_1_1ScopeTimerLogger = +[ + [ "chrono_tp", "classmrs__lib_1_1ScopeTimerLogger.html#ac495e41e5cac5285245d56d6e7cdd235", null ], + [ "ScopeTimerLogger", "classmrs__lib_1_1ScopeTimerLogger.html#a5369b8ec91eab0a06b87485bed5c130c", null ], + [ "~ScopeTimerLogger", "classmrs__lib_1_1ScopeTimerLogger.html#a0152ea8087d16a05027e66c44d99662e", null ], + [ "getLogFilepath", "classmrs__lib_1_1ScopeTimerLogger.html#addb114f39d72c3c3ee2ea8a4074cf455", null ], + [ "log", "classmrs__lib_1_1ScopeTimerLogger.html#a98f7fe29f151e4d0b88952530f40ef06", null ], + [ "log", "classmrs__lib_1_1ScopeTimerLogger.html#a8f3794f5477960606a86543ddb708b1f", null ], + [ "loggingEnabled", "classmrs__lib_1_1ScopeTimerLogger.html#aaf51a60a214ab18976a354c328fc9d09", null ], + [ "shouldLog", "classmrs__lib_1_1ScopeTimerLogger.html#a8bb5c6453336967529f118a717f20825", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1ServiceClientHandler-members.html b/classmrs__lib_1_1ServiceClientHandler-members.html new file mode 100644 index 00000000..cdf8d22c --- /dev/null +++ b/classmrs__lib_1_1ServiceClientHandler-members.html @@ -0,0 +1,116 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::ServiceClientHandler< ServiceType > Member List
+
+
+ +

This is the complete list of members for mrs_lib::ServiceClientHandler< ServiceType >, including all inherited members.

+ + + + + + + + + + + + + +
call(ServiceType &srv)mrs_lib::ServiceClientHandler< ServiceType >
call(ServiceType &srv, const int &attempts)mrs_lib::ServiceClientHandler< ServiceType >
call(ServiceType &srv, const int &attempts, const double &repeat_delay)mrs_lib::ServiceClientHandler< ServiceType >
callAsync(ServiceType &srv)mrs_lib::ServiceClientHandler< ServiceType >
callAsync(ServiceType &srv, const int &attempts)mrs_lib::ServiceClientHandler< ServiceType >
callAsync(ServiceType &srv, const int &attempts, const double &repeat_delay)mrs_lib::ServiceClientHandler< ServiceType >
initialize(ros::NodeHandle &nh, const std::string &address)mrs_lib::ServiceClientHandler< ServiceType >
operator=(const ServiceClientHandler &other)mrs_lib::ServiceClientHandler< ServiceType >
ServiceClientHandler(void)mrs_lib::ServiceClientHandler< ServiceType >inline
ServiceClientHandler(const ServiceClientHandler &other)mrs_lib::ServiceClientHandler< ServiceType >
ServiceClientHandler(ros::NodeHandle &nh, const std::string &address)mrs_lib::ServiceClientHandler< ServiceType >
~ServiceClientHandler(void)mrs_lib::ServiceClientHandler< ServiceType >inline
+
+ + + + diff --git a/classmrs__lib_1_1ServiceClientHandler.html b/classmrs__lib_1_1ServiceClientHandler.html new file mode 100644 index 00000000..63f871ed --- /dev/null +++ b/classmrs__lib_1_1ServiceClientHandler.html @@ -0,0 +1,530 @@ + + + + + + + +mrs_lib: mrs_lib::ServiceClientHandler< ServiceType > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::ServiceClientHandler< ServiceType > Class Template Reference
+
+
+ +

user wrapper of the service client handler implementation + More...

+ +

#include <service_client_handler.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ServiceClientHandler (void)
 generic constructor
 
~ServiceClientHandler (void)
 generic destructor
 
ServiceClientHandleroperator= (const ServiceClientHandler &other)
 operator= More...
 
 ServiceClientHandler (const ServiceClientHandler &other)
 copy constructor More...
 
 ServiceClientHandler (ros::NodeHandle &nh, const std::string &address)
 constructor More...
 
void initialize (ros::NodeHandle &nh, const std::string &address)
 initializer More...
 
bool call (ServiceType &srv)
 "standard" synchronous call More...
 
bool call (ServiceType &srv, const int &attempts)
 "standard" synchronous call with repeats after failure More...
 
bool call (ServiceType &srv, const int &attempts, const double &repeat_delay)
 "standard" synchronous call with repeats after failure More...
 
std::future< ServiceType > callAsync (ServiceType &srv)
 asynchronous call More...
 
std::future< ServiceType > callAsync (ServiceType &srv, const int &attempts)
 asynchronous call with repeats after failure More...
 
std::future< ServiceType > callAsync (ServiceType &srv, const int &attempts, const double &repeat_delay)
 asynchronous call with repeats after failure More...
 
+

Detailed Description

+

template<class ServiceType>
+class mrs_lib::ServiceClientHandler< ServiceType >

+ +

user wrapper of the service client handler implementation

+

Constructor & Destructor Documentation

+ +

◆ ServiceClientHandler() [1/2]

+ +
+
+
+template<class ServiceType >
+ + + + + + + + +
mrs_lib::ServiceClientHandler< ServiceType >::ServiceClientHandler (const ServiceClientHandler< ServiceType > & other)
+
+ +

copy constructor

+
Parameters
+ + +
other
+
+
+ +
+
+ +

◆ ServiceClientHandler() [2/2]

+ +
+
+
+template<class ServiceType >
+ + + + + + + + + + + + + + + + + + +
mrs_lib::ServiceClientHandler< ServiceType >::ServiceClientHandler (ros::NodeHandle & nh,
const std::string & address 
)
+
+ +

constructor

+
Parameters
+ + + +
nhROS node handler
addressservice address
+
+
+ +
+
+

Member Function Documentation

+ +

◆ call() [1/3]

+ +
+
+
+template<class ServiceType >
+ + + + + + + + +
bool mrs_lib::ServiceClientHandler< ServiceType >::call (ServiceType & srv)
+
+ +

"standard" synchronous call

+
Parameters
+ + +
srvdata
+
+
+
Returns
true when success
+ +
+
+ +

◆ call() [2/3]

+ +
+
+
+template<class ServiceType >
+ + + + + + + + + + + + + + + + + + +
bool mrs_lib::ServiceClientHandler< ServiceType >::call (ServiceType & srv,
const int & attempts 
)
+
+ +

"standard" synchronous call with repeats after failure

+
Parameters
+ + + +
srvdata
attemptshow many attempts for the call
+
+
+
Returns
true when success
+ +
+
+ +

◆ call() [3/3]

+ +
+
+
+template<class ServiceType >
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool mrs_lib::ServiceClientHandler< ServiceType >::call (ServiceType & srv,
const int & attempts,
const double & repeat_delay 
)
+
+ +

"standard" synchronous call with repeats after failure

+
Parameters
+ + + + +
srvdata
attemptshow many attempts for the call
repeat_delayhow long to wait before repeating the call
+
+
+
Returns
true when success
+ +
+
+ +

◆ callAsync() [1/3]

+ +
+
+
+template<class ServiceType >
+ + + + + + + + +
std::future< ServiceType > mrs_lib::ServiceClientHandler< ServiceType >::callAsync (ServiceType & srv)
+
+ +

asynchronous call

+
Parameters
+ + +
srvdata
+
+
+
Returns
future result
+ +
+
+ +

◆ callAsync() [2/3]

+ +
+
+
+template<class ServiceType >
+ + + + + + + + + + + + + + + + + + +
std::future< ServiceType > mrs_lib::ServiceClientHandler< ServiceType >::callAsync (ServiceType & srv,
const int & attempts 
)
+
+ +

asynchronous call with repeats after failure

+
Parameters
+ + + +
srvdata
attemptshow many attemps for the call
+
+
+
Returns
future result
+ +
+
+ +

◆ callAsync() [3/3]

+ +
+
+
+template<class ServiceType >
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::future< ServiceType > mrs_lib::ServiceClientHandler< ServiceType >::callAsync (ServiceType & srv,
const int & attempts,
const double & repeat_delay 
)
+
+ +

asynchronous call with repeats after failure

+
Parameters
+ + + + +
srvdata
attemptshow many attemps for the call
repeat_delayhow long to wait before repeating the call
+
+
+
Returns
future result
+ +
+
+ +

◆ initialize()

+ +
+
+
+template<class ServiceType >
+ + + + + + + + + + + + + + + + + + +
void mrs_lib::ServiceClientHandler< ServiceType >::initialize (ros::NodeHandle & nh,
const std::string & address 
)
+
+ +

initializer

+
Parameters
+ + + +
nhROS node handler
addressservice address
+
+
+ +
+
+ +

◆ operator=()

+ +
+
+
+template<class ServiceType >
+ + + + + + + + +
ServiceClientHandler< ServiceType > & mrs_lib::ServiceClientHandler< ServiceType >::operator= (const ServiceClientHandler< ServiceType > & other)
+
+ +

operator=

+
Parameters
+ + +
other
+
+
+
Returns
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1ServiceClientHandler.js b/classmrs__lib_1_1ServiceClientHandler.js new file mode 100644 index 00000000..0ad4b5cb --- /dev/null +++ b/classmrs__lib_1_1ServiceClientHandler.js @@ -0,0 +1,15 @@ +var classmrs__lib_1_1ServiceClientHandler = +[ + [ "ServiceClientHandler", "classmrs__lib_1_1ServiceClientHandler.html#a7d0e35cfbbe280ab0d739c23a26189de", null ], + [ "~ServiceClientHandler", "classmrs__lib_1_1ServiceClientHandler.html#ad796fc7f9044bdeeacdf549faa1d2f48", null ], + [ "ServiceClientHandler", "classmrs__lib_1_1ServiceClientHandler.html#acf286dd2720d41fa05e98c7327d94413", null ], + [ "ServiceClientHandler", "classmrs__lib_1_1ServiceClientHandler.html#a6da5592ce8388bd1aa08b63fd3d3d060", null ], + [ "call", "classmrs__lib_1_1ServiceClientHandler.html#acd827db26db5d8e1f310769509176fe2", null ], + [ "call", "classmrs__lib_1_1ServiceClientHandler.html#a7eee51ebff7a805d425673ddc166d489", null ], + [ "call", "classmrs__lib_1_1ServiceClientHandler.html#afdf41e0cf6b2fa0941ee0ae703facc71", null ], + [ "callAsync", "classmrs__lib_1_1ServiceClientHandler.html#aa7f3a5d1566aa2a361594797f162ca0d", null ], + [ "callAsync", "classmrs__lib_1_1ServiceClientHandler.html#a390d8d24962c3efd849f44627b29387e", null ], + [ "callAsync", "classmrs__lib_1_1ServiceClientHandler.html#ac6babcda855d48bc3b8fc72f45f7672b", null ], + [ "initialize", "classmrs__lib_1_1ServiceClientHandler.html#adff9526494a62051bf864ef6a7178450", null ], + [ "operator=", "classmrs__lib_1_1ServiceClientHandler.html#a03d184432cd8b51f683746e87b071bdb", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1ServiceClientHandler__impl-members.html b/classmrs__lib_1_1ServiceClientHandler__impl-members.html new file mode 100644 index 00000000..438da373 --- /dev/null +++ b/classmrs__lib_1_1ServiceClientHandler__impl-members.html @@ -0,0 +1,113 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::ServiceClientHandler_impl< ServiceType > Member List
+
+
+ +

This is the complete list of members for mrs_lib::ServiceClientHandler_impl< ServiceType >, including all inherited members.

+ + + + + + + + + + +
call(ServiceType &srv)mrs_lib::ServiceClientHandler_impl< ServiceType >
call(ServiceType &srv, const int &attempts)mrs_lib::ServiceClientHandler_impl< ServiceType >
call(ServiceType &srv, const int &attempts, const double &repeat_delay)mrs_lib::ServiceClientHandler_impl< ServiceType >
callAsync(ServiceType &srv)mrs_lib::ServiceClientHandler_impl< ServiceType >
callAsync(ServiceType &srv, const int &attempts)mrs_lib::ServiceClientHandler_impl< ServiceType >
callAsync(ServiceType &srv, const int &attempts, const double &repeat_delay)mrs_lib::ServiceClientHandler_impl< ServiceType >
ServiceClientHandler_impl(void)mrs_lib::ServiceClientHandler_impl< ServiceType >
ServiceClientHandler_impl(ros::NodeHandle &nh, const std::string &address)mrs_lib::ServiceClientHandler_impl< ServiceType >
~ServiceClientHandler_impl(void)mrs_lib::ServiceClientHandler_impl< ServiceType >inline
+
+ + + + diff --git a/classmrs__lib_1_1ServiceClientHandler__impl.html b/classmrs__lib_1_1ServiceClientHandler__impl.html new file mode 100644 index 00000000..307578a2 --- /dev/null +++ b/classmrs__lib_1_1ServiceClientHandler__impl.html @@ -0,0 +1,425 @@ + + + + + + + +mrs_lib: mrs_lib::ServiceClientHandler_impl< ServiceType > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::ServiceClientHandler_impl< ServiceType > Class Template Reference
+
+
+ +

implementation of the service client handler + More...

+ +

#include <service_client_handler.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ServiceClientHandler_impl (void)
 default constructor
 
~ServiceClientHandler_impl (void)
 default destructor
 
 ServiceClientHandler_impl (ros::NodeHandle &nh, const std::string &address)
 constructor More...
 
bool call (ServiceType &srv)
 "classic" synchronous service call More...
 
bool call (ServiceType &srv, const int &attempts)
 "classic" synchronous service call with repeats after an error More...
 
bool call (ServiceType &srv, const int &attempts, const double &repeat_delay)
 "classic" synchronous service call with repeats after an error More...
 
std::future< ServiceType > callAsync (ServiceType &srv)
 asynchronous service call More...
 
std::future< ServiceType > callAsync (ServiceType &srv, const int &attempts)
 asynchronous service call with repeates after an error More...
 
std::future< ServiceType > callAsync (ServiceType &srv, const int &attempts, const double &repeat_delay)
 asynchronous service call with repeates after an error More...
 
+

Detailed Description

+

template<class ServiceType>
+class mrs_lib::ServiceClientHandler_impl< ServiceType >

+ +

implementation of the service client handler

+

Constructor & Destructor Documentation

+ +

◆ ServiceClientHandler_impl()

+ +
+
+
+template<class ServiceType >
+ + + + + + + + + + + + + + + + + + +
mrs_lib::ServiceClientHandler_impl< ServiceType >::ServiceClientHandler_impl (ros::NodeHandle & nh,
const std::string & address 
)
+
+ +

constructor

+
Parameters
+ + + +
nhROS node handler
addressservice address
+
+
+ +
+
+

Member Function Documentation

+ +

◆ call() [1/3]

+ +
+
+
+template<class ServiceType >
+ + + + + + + + +
bool mrs_lib::ServiceClientHandler_impl< ServiceType >::call (ServiceType & srv)
+
+ +

"classic" synchronous service call

+
Parameters
+ + +
srvdata
+
+
+
Returns
true when success
+ +
+
+ +

◆ call() [2/3]

+ +
+
+
+template<class ServiceType >
+ + + + + + + + + + + + + + + + + + +
bool mrs_lib::ServiceClientHandler_impl< ServiceType >::call (ServiceType & srv,
const int & attempts 
)
+
+ +

"classic" synchronous service call with repeats after an error

+
Parameters
+ + + +
srvdata
attemptshow many attempts for the call
+
+
+
Returns
true when success
+ +
+
+ +

◆ call() [3/3]

+ +
+
+
+template<class ServiceType >
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool mrs_lib::ServiceClientHandler_impl< ServiceType >::call (ServiceType & srv,
const int & attempts,
const double & repeat_delay 
)
+
+ +

"classic" synchronous service call with repeats after an error

+
Parameters
+ + + + +
srvdata
attemptshow many attempts for the call
repeat_delayhow long to wait before repeating the call
+
+
+
Returns
true when success
+ +
+
+ +

◆ callAsync() [1/3]

+ +
+
+
+template<class ServiceType >
+ + + + + + + + +
std::future< ServiceType > mrs_lib::ServiceClientHandler_impl< ServiceType >::callAsync (ServiceType & srv)
+
+ +

asynchronous service call

+
Parameters
+ + +
srvdata
+
+
+
Returns
future result
+ +
+
+ +

◆ callAsync() [2/3]

+ +
+
+
+template<class ServiceType >
+ + + + + + + + + + + + + + + + + + +
std::future< ServiceType > mrs_lib::ServiceClientHandler_impl< ServiceType >::callAsync (ServiceType & srv,
const int & attempts 
)
+
+ +

asynchronous service call with repeates after an error

+
Parameters
+ + + +
srvdata
attemptshow many attempts for the call
+
+
+
Returns
future result
+ +
+
+ +

◆ callAsync() [3/3]

+ +
+
+
+template<class ServiceType >
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::future< ServiceType > mrs_lib::ServiceClientHandler_impl< ServiceType >::callAsync (ServiceType & srv,
const int & attempts,
const double & repeat_delay 
)
+
+ +

asynchronous service call with repeates after an error

+
Parameters
+ + + + +
srvdata
attemptshow many attempts for the call
repeat_delayhow long to wait before repeating the call
+
+
+
Returns
future result
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1ServiceClientHandler__impl.js b/classmrs__lib_1_1ServiceClientHandler__impl.js new file mode 100644 index 00000000..ee5325c7 --- /dev/null +++ b/classmrs__lib_1_1ServiceClientHandler__impl.js @@ -0,0 +1,12 @@ +var classmrs__lib_1_1ServiceClientHandler__impl = +[ + [ "ServiceClientHandler_impl", "classmrs__lib_1_1ServiceClientHandler__impl.html#ae1f6eb48630bf4d3eb9e92b95c6269c8", null ], + [ "~ServiceClientHandler_impl", "classmrs__lib_1_1ServiceClientHandler__impl.html#a2d906a4c237db032edfb7578d0eb2be1", null ], + [ "ServiceClientHandler_impl", "classmrs__lib_1_1ServiceClientHandler__impl.html#a4ae10aba33d5d46013bf25a61c005ac0", null ], + [ "call", "classmrs__lib_1_1ServiceClientHandler__impl.html#a50394dc3190eafbce4c58b20823942d6", null ], + [ "call", "classmrs__lib_1_1ServiceClientHandler__impl.html#a35cc1c54991d1eb2801e2dfd205e1ef0", null ], + [ "call", "classmrs__lib_1_1ServiceClientHandler__impl.html#aecd6585588ea75d444577651591fb847", null ], + [ "callAsync", "classmrs__lib_1_1ServiceClientHandler__impl.html#a39ed1a2c10f97d75447224bd9cb9e968", null ], + [ "callAsync", "classmrs__lib_1_1ServiceClientHandler__impl.html#acbc6113b775545e89e7fa4fd41cf15ed", null ], + [ "callAsync", "classmrs__lib_1_1ServiceClientHandler__impl.html#ae15fc00b04219ae241e03c0973a00c5a", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1SubscribeHandler-members.html b/classmrs__lib_1_1SubscribeHandler-members.html new file mode 100644 index 00000000..e6e9aee6 --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler-members.html @@ -0,0 +1,132 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::SubscribeHandler< MessageType > Member List
+
+
+ +

This is the complete list of members for mrs_lib::SubscribeHandler< MessageType >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
getMsg()mrs_lib::SubscribeHandler< MessageType >inlinevirtual
hasMsg() constmrs_lib::SubscribeHandler< MessageType >inlinevirtual
lastMsgTime() constmrs_lib::SubscribeHandler< MessageType >inlinevirtual
message_callback_t typedefmrs_lib::SubscribeHandler< MessageType >
message_type typedefmrs_lib::SubscribeHandler< MessageType >
newMsg() constmrs_lib::SubscribeHandler< MessageType >inlinevirtual
operator=(const SubscribeHandler &)=delete (defined in mrs_lib::SubscribeHandler< MessageType >)mrs_lib::SubscribeHandler< MessageType >
operator=(SubscribeHandler &&other) (defined in mrs_lib::SubscribeHandler< MessageType >)mrs_lib::SubscribeHandler< MessageType >inline
peekMsg() constmrs_lib::SubscribeHandler< MessageType >inlinevirtual
start()mrs_lib::SubscribeHandler< MessageType >inlinevirtual
stop()mrs_lib::SubscribeHandler< MessageType >inlinevirtual
subscribedTopicName() constmrs_lib::SubscribeHandler< MessageType >inlinevirtual
SubscribeHandler()mrs_lib::SubscribeHandler< MessageType >inline
SubscribeHandler(const SubscribeHandlerOptions &options, const std::string &topic_name, Types ... args)mrs_lib::SubscribeHandler< MessageType >inline
SubscribeHandler(const SubscribeHandlerOptions &options, const message_callback_t &message_callback={})mrs_lib::SubscribeHandler< MessageType >inline
SubscribeHandler(const SubscribeHandlerOptions &options, const timeout_callback_t &timeout_callback, Types ... args)mrs_lib::SubscribeHandler< MessageType >inline
SubscribeHandler(const SubscribeHandlerOptions &options, void(ObjectType1::*const timeout_callback)(const std::string &topic_name, const ros::Time &last_msg), ObjectType1 *const obj1, Types ... args)mrs_lib::SubscribeHandler< MessageType >inline
SubscribeHandler(const SubscribeHandlerOptions &options, void(ObjectType2::*const message_callback)(typename MessageType::ConstPtr), ObjectType2 *const obj2, Types ... args)mrs_lib::SubscribeHandler< MessageType >inline
SubscribeHandler(const SubscribeHandlerOptions &options, void(ObjectType2::*const message_callback)(typename MessageType::ConstPtr), ObjectType2 *const obj2, void(ObjectType1::*const timeout_callback)(const std::string &topic_name, const ros::Time &last_msg), ObjectType1 *const obj1, Types ... args)mrs_lib::SubscribeHandler< MessageType >inline
SubscribeHandler(const SubscribeHandlerOptions &options, const ros::Duration &no_message_timeout, Types ... args)mrs_lib::SubscribeHandler< MessageType >inline
SubscribeHandler(const SubscribeHandlerOptions &options, mrs_lib::TimeoutManager &timeout_manager, Types ... args)mrs_lib::SubscribeHandler< MessageType >inline
SubscribeHandler(const SubscribeHandler &)=delete (defined in mrs_lib::SubscribeHandler< MessageType >)mrs_lib::SubscribeHandler< MessageType >
SubscribeHandler(SubscribeHandler &&other) (defined in mrs_lib::SubscribeHandler< MessageType >)mrs_lib::SubscribeHandler< MessageType >inline
timeout_callback_t typedefmrs_lib::SubscribeHandler< MessageType >
topicName() constmrs_lib::SubscribeHandler< MessageType >inlinevirtual
usedMsg() constmrs_lib::SubscribeHandler< MessageType >inlinevirtual
waitForNew(const ros::WallDuration &timeout)mrs_lib::SubscribeHandler< MessageType >inlinevirtual
~SubscribeHandler()=default (defined in mrs_lib::SubscribeHandler< MessageType >)mrs_lib::SubscribeHandler< MessageType >
+
+ + + + diff --git a/classmrs__lib_1_1SubscribeHandler.html b/classmrs__lib_1_1SubscribeHandler.html new file mode 100644 index 00000000..454f7364 --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler.html @@ -0,0 +1,1069 @@ + + + + + + + +mrs_lib: mrs_lib::SubscribeHandler< MessageType > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::SubscribeHandler< MessageType > Class Template Reference
+
+
+ +

The main class for ROS topic subscription, message timeout handling etc. + More...

+ +

#include <subscribe_handler.h>

+ + + + + + +

+Classes

class  Impl
 
class  ImplThreadsafe
 
+ + + + + + + + + + +

+Public Types

+using message_type = MessageType
 Convenience type for the template parameter to enable nice aliasing.
 
+using timeout_callback_t = std::function< void(const std::string &topic_name, const ros::Time &last_msg)>
 Type for the timeout callback function.
 
+using message_callback_t = std::function< void(typename MessageType::ConstPtr)>
 Convenience type for the message callback function.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual MessageType::ConstPtr getMsg ()
 Returns the last received message on the topic, handled by this SubscribeHandler. Use hasMsg() first to check if at least one message is available or newMsg() to check if a new message since the last call to getMsg() is available. More...
 
virtual MessageType::ConstPtr peekMsg () const
 Returns the last received message on the topic without modifying the newMsg() or usedMsg() flags. More...
 
virtual bool hasMsg () const
 Used to check whether at least one message has been received on the handled topic. More...
 
virtual bool newMsg () const
 Used to check whether at least one message has been received on the handled topic since the last call to getMsg(). More...
 
virtual bool usedMsg () const
 Used to check whether getMsg() was called at least once on this SubscribeHandler. More...
 
virtual MessageType::ConstPtr waitForNew (const ros::WallDuration &timeout)
 Blocks until new data becomes available or until the timeout runs out or until a spurious wake-up. More...
 
virtual ros::Time lastMsgTime () const
 Returns time of the last received message on the topic, handled by this SubscribeHandler. More...
 
virtual std::string topicName () const
 Returns the resolved (full) name of the topic, handled by this SubscribeHandler. More...
 
virtual std::string subscribedTopicName () const
 Returns the subscribed (unresolved) name of the topic, handled by this SubscribeHandler. More...
 
virtual void start ()
 Enables the callbacks for the handled topic. More...
 
virtual void stop ()
 Disables the callbacks for the handled topic. More...
 
 SubscribeHandler ()
 Default constructor to avoid having to use pointers. More...
 
template<class ... Types>
 SubscribeHandler (const SubscribeHandlerOptions &options, const std::string &topic_name, Types ... args)
 Main constructor. More...
 
 SubscribeHandler (const SubscribeHandlerOptions &options, const message_callback_t &message_callback={})
 Convenience constructor overload. More...
 
template<class ... Types>
 SubscribeHandler (const SubscribeHandlerOptions &options, const timeout_callback_t &timeout_callback, Types ... args)
 Convenience constructor overload. More...
 
template<class ObjectType1 , class ... Types>
 SubscribeHandler (const SubscribeHandlerOptions &options, void(ObjectType1::*const timeout_callback)(const std::string &topic_name, const ros::Time &last_msg), ObjectType1 *const obj1, Types ... args)
 Convenience constructor overload. More...
 
template<class ObjectType2 , class ... Types>
 SubscribeHandler (const SubscribeHandlerOptions &options, void(ObjectType2::*const message_callback)(typename MessageType::ConstPtr), ObjectType2 *const obj2, Types ... args)
 Convenience constructor overload. More...
 
template<class ObjectType1 , class ObjectType2 , class ... Types>
 SubscribeHandler (const SubscribeHandlerOptions &options, void(ObjectType2::*const message_callback)(typename MessageType::ConstPtr), ObjectType2 *const obj2, void(ObjectType1::*const timeout_callback)(const std::string &topic_name, const ros::Time &last_msg), ObjectType1 *const obj1, Types ... args)
 Convenience constructor overload. More...
 
template<class ... Types>
 SubscribeHandler (const SubscribeHandlerOptions &options, const ros::Duration &no_message_timeout, Types ... args)
 Convenience constructor overload. More...
 
template<class ... Types>
 SubscribeHandler (const SubscribeHandlerOptions &options, mrs_lib::TimeoutManager &timeout_manager, Types ... args)
 Convenience constructor overload. More...
 
SubscribeHandler (const SubscribeHandler &)=delete
 
+SubscribeHandleroperator= (const SubscribeHandler &)=delete
 
SubscribeHandler (SubscribeHandler &&other)
 
+SubscribeHandleroperator= (SubscribeHandler &&other)
 
+

Detailed Description

+

template<typename MessageType>
+class mrs_lib::SubscribeHandler< MessageType >

+ +

The main class for ROS topic subscription, message timeout handling etc.

+

This class handles the raw ROS Subscriber for a specified topic. The last message received on the topic is remembered and may be retrieved by calling the getMsg() method. To check whether at least one message was received, use hasMsg() (if no message was received and you call getMsg(), a nullptr is returned and an error message is printed). To check whether a new message has arrived since the last call to getMsg(), use newMsg() (useful to check whether a new message needs to be processed in a loop or ROS Timer callback).

+

A timeout callback function may be specified, which is called if no message is received on the topic for a specified timeout (use the timeout_callback and no_message_timeout parameters). If the timeout callback is not set by the user, an error message is printed to the console after the timeout by default.

+

A message callback function may be specified, which is called whenever a new message is received (use the message_callback parameter).

+

The callbacks and timeouts may be stopped and started using the stop() and start() methods.

+

For more details, see the example below (I recommend starting with the simple_example which covers most use-cases).

+
Examples
subscribe_handler/example.cpp, and subscribe_handler/simple_example.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ SubscribeHandler() [1/9]

+ +
+
+
+template<typename MessageType >
+ + + + + +
+ + + + + + + +
mrs_lib::SubscribeHandler< MessageType >::SubscribeHandler ()
+
+inline
+
+ +

Default constructor to avoid having to use pointers.

+

It does nothing and the SubscribeHandler it constructs will also do nothing. Use some of the other constructors for actual construction of a usable SubscribeHandler.

+ +
+
+ +

◆ SubscribeHandler() [2/9]

+ +
+
+
+template<typename MessageType >
+
+template<class ... Types>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::SubscribeHandler< MessageType >::SubscribeHandler (const SubscribeHandlerOptionsoptions,
const std::string & topic_name,
Types ... args 
)
+
+inline
+
+ +

Main constructor.

+
Parameters
+ + + + +
optionsThe common options struct (see documentation of SubscribeHandlerOptions).
topic_nameName of the topic to be handled by this subscribed.
argsRemaining arguments to be parsed (see other constructors).
+
+
+ +
+
+ +

◆ SubscribeHandler() [3/9]

+ +
+
+
+template<typename MessageType >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
mrs_lib::SubscribeHandler< MessageType >::SubscribeHandler (const SubscribeHandlerOptionsoptions,
const message_callback_tmessage_callback = {} 
)
+
+inline
+
+ +

Convenience constructor overload.

+
Parameters
+ + + +
optionsThe common options struct (see documentation of SubscribeHandlerOptions).
message_callbackThe callback function to call when a new message is received (you can leave this argument empty and just use the newMsg()/hasMsg() and getMsg() interface).
+
+
+ +
+
+ +

◆ SubscribeHandler() [4/9]

+ +
+
+
+template<typename MessageType >
+
+template<class ... Types>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::SubscribeHandler< MessageType >::SubscribeHandler (const SubscribeHandlerOptionsoptions,
const timeout_callback_ttimeout_callback,
Types ... args 
)
+
+inline
+
+ +

Convenience constructor overload.

+
Parameters
+ + + + +
optionsThe common options struct (see documentation of SubscribeHandlerOptions).
timeout_callbackThe callback function to call when a new message is not received for the duration, specified in options or in the no_message_timeout parameter.
argsRemaining arguments to be parsed (see other constructors).
+
+
+ +
+
+ +

◆ SubscribeHandler() [5/9]

+ +
+
+
+template<typename MessageType >
+
+template<class ObjectType1 , class ... Types>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::SubscribeHandler< MessageType >::SubscribeHandler (const SubscribeHandlerOptionsoptions,
void(ObjectType1::*)(const std::string &topic_name, const ros::Time &last_msg) timeout_callback,
ObjectType1 *const obj1,
Types ... args 
)
+
+inline
+
+ +

Convenience constructor overload.

+
Parameters
+ + + + + +
optionsThe common options struct (see documentation of SubscribeHandlerOptions).
timeout_callbackThe callback method to call when a new message is not received for the duration, specified in options or in the no_message_timeout parameter.
obj1The object on which the callback method timeout_callback will be called.
argsRemaining arguments to be parsed (see other constructors).
+
+
+ +
+
+ +

◆ SubscribeHandler() [6/9]

+ +
+
+
+template<typename MessageType >
+
+template<class ObjectType2 , class ... Types>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::SubscribeHandler< MessageType >::SubscribeHandler (const SubscribeHandlerOptionsoptions,
void(ObjectType2::*)(typename MessageType::ConstPtr) message_callback,
ObjectType2 *const obj2,
Types ... args 
)
+
+inline
+
+ +

Convenience constructor overload.

+
Parameters
+ + + + + +
optionsThe common options struct (see documentation of SubscribeHandlerOptions).
message_callbackThe callback method to call when a new message is received.
obj2The object on which the callback method timeout_callback will be called.
argsRemaining arguments to be parsed (see other constructors).
+
+
+ +
+
+ +

◆ SubscribeHandler() [7/9]

+ +
+
+
+template<typename MessageType >
+
+template<class ObjectType1 , class ObjectType2 , class ... Types>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::SubscribeHandler< MessageType >::SubscribeHandler (const SubscribeHandlerOptionsoptions,
void(ObjectType2::*)(typename MessageType::ConstPtr) message_callback,
ObjectType2 *const obj2,
void(ObjectType1::*)(const std::string &topic_name, const ros::Time &last_msg) timeout_callback,
ObjectType1 *const obj1,
Types ... args 
)
+
+inline
+
+ +

Convenience constructor overload.

+
Parameters
+ + + + + + + +
optionsThe common options struct (see documentation of SubscribeHandlerOptions).
message_callbackThe callback method to call when a new message is received.
obj2The object on which the callback method timeout_callback will be called.
timeout_callbackThe callback method to call when a new message is not received for the duration, specified in options or in the no_message_timeout parameter.
obj1The object on which the callback method timeout_callback will be called.
argsRemaining arguments to be parsed (see other constructors).
+
+
+ +
+
+ +

◆ SubscribeHandler() [8/9]

+ +
+
+
+template<typename MessageType >
+
+template<class ... Types>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::SubscribeHandler< MessageType >::SubscribeHandler (const SubscribeHandlerOptionsoptions,
const ros::Duration & no_message_timeout,
Types ... args 
)
+
+inline
+
+ +

Convenience constructor overload.

+
Parameters
+ + + + +
optionsThe common options struct (see documentation of SubscribeHandlerOptions).
no_message_timeoutIf no message is received for this duration, the timeout callback function is called. If no timeout callback is specified, an error message is printed to the console.
argsRemaining arguments to be parsed (see other constructors).
+
+
+ +
+
+ +

◆ SubscribeHandler() [9/9]

+ +
+
+
+template<typename MessageType >
+
+template<class ... Types>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::SubscribeHandler< MessageType >::SubscribeHandler (const SubscribeHandlerOptionsoptions,
mrs_lib::TimeoutManagertimeout_manager,
Types ... args 
)
+
+inline
+
+ +

Convenience constructor overload.

+
Parameters
+ + + + +
optionsThe common options struct (see documentation of SubscribeHandlerOptions).
timeout_managerThe manager for timeout callbacks.
argsRemaining arguments to be parsed (see other constructors).
+
+
+ +
+
+

Member Function Documentation

+ +

◆ getMsg()

+ +
+
+
+template<typename MessageType >
+ + + + + +
+ + + + + + + +
virtual MessageType::ConstPtr mrs_lib::SubscribeHandler< MessageType >::getMsg ()
+
+inlinevirtual
+
+ +

Returns the last received message on the topic, handled by this SubscribeHandler. Use hasMsg() first to check if at least one message is available or newMsg() to check if a new message since the last call to getMsg() is available.

+
Returns
the last received message.
+ +
+
+ +

◆ hasMsg()

+ +
+
+
+template<typename MessageType >
+ + + + + +
+ + + + + + + +
virtual bool mrs_lib::SubscribeHandler< MessageType >::hasMsg () const
+
+inlinevirtual
+
+ +

Used to check whether at least one message has been received on the handled topic.

+
Returns
true if at least one message was received, otherwise false.
+ +
+
+ +

◆ lastMsgTime()

+ +
+
+
+template<typename MessageType >
+ + + + + +
+ + + + + + + +
virtual ros::Time mrs_lib::SubscribeHandler< MessageType >::lastMsgTime () const
+
+inlinevirtual
+
+ +

Returns time of the last received message on the topic, handled by this SubscribeHandler.

+
Returns
time when the last message was received.
+ +
+
+ +

◆ newMsg()

+ +
+
+
+template<typename MessageType >
+ + + + + +
+ + + + + + + +
virtual bool mrs_lib::SubscribeHandler< MessageType >::newMsg () const
+
+inlinevirtual
+
+ +

Used to check whether at least one message has been received on the handled topic since the last call to getMsg().

+
Returns
true if at least one message was received, otherwise false.
+ +
+
+ +

◆ peekMsg()

+ +
+
+
+template<typename MessageType >
+ + + + + +
+ + + + + + + +
virtual MessageType::ConstPtr mrs_lib::SubscribeHandler< MessageType >::peekMsg () const
+
+inlinevirtual
+
+ +

Returns the last received message on the topic without modifying the newMsg() or usedMsg() flags.

+
Returns
the last received message.
+ +
+
+ +

◆ start()

+ +
+
+
+template<typename MessageType >
+ + + + + +
+ + + + + + + +
virtual void mrs_lib::SubscribeHandler< MessageType >::start ()
+
+inlinevirtual
+
+ +

Enables the callbacks for the handled topic.

+

If the SubscribeHandler object is stopped using the stop() method, no callbacks will be called until the start() method is called.

+ +
+
+ +

◆ stop()

+ +
+
+
+template<typename MessageType >
+ + + + + +
+ + + + + + + +
virtual void mrs_lib::SubscribeHandler< MessageType >::stop ()
+
+inlinevirtual
+
+ +

Disables the callbacks for the handled topic.

+

All messages after this method is called will be ignored until start() is called again. Timeout checking will also be disabled.

+ +
+
+ +

◆ subscribedTopicName()

+ +
+
+
+template<typename MessageType >
+ + + + + +
+ + + + + + + +
virtual std::string mrs_lib::SubscribeHandler< MessageType >::subscribedTopicName () const
+
+inlinevirtual
+
+ +

Returns the subscribed (unresolved) name of the topic, handled by this SubscribeHandler.

+
Returns
name of the handled topic.
+ +
+
+ +

◆ topicName()

+ +
+
+
+template<typename MessageType >
+ + + + + +
+ + + + + + + +
virtual std::string mrs_lib::SubscribeHandler< MessageType >::topicName () const
+
+inlinevirtual
+
+ +

Returns the resolved (full) name of the topic, handled by this SubscribeHandler.

+
Returns
name of the handled topic.
+ +
+
+ +

◆ usedMsg()

+ +
+
+
+template<typename MessageType >
+ + + + + +
+ + + + + + + +
virtual bool mrs_lib::SubscribeHandler< MessageType >::usedMsg () const
+
+inlinevirtual
+
+ +

Used to check whether getMsg() was called at least once on this SubscribeHandler.

+
Returns
true if getMsg() was called at least once, otherwise false.
+ +
+
+ +

◆ waitForNew()

+ +
+
+
+template<typename MessageType >
+ + + + + +
+ + + + + + + + +
virtual MessageType::ConstPtr mrs_lib::SubscribeHandler< MessageType >::waitForNew (const ros::WallDuration & timeout)
+
+inlinevirtual
+
+ +

Blocks until new data becomes available or until the timeout runs out or until a spurious wake-up.

+
Returns
the message if a new message is available after waking up, nullptr otherwise.
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1SubscribeHandler.js b/classmrs__lib_1_1SubscribeHandler.js new file mode 100644 index 00000000..22d053b1 --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler.js @@ -0,0 +1,33 @@ +var classmrs__lib_1_1SubscribeHandler = +[ + [ "Impl", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html", "classmrs__lib_1_1SubscribeHandler_1_1Impl" ], + [ "ImplThreadsafe", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe" ], + [ "message_callback_t", "classmrs__lib_1_1SubscribeHandler.html#a38b7371b24896e5ea21f5a8dd2821cf6", null ], + [ "message_type", "classmrs__lib_1_1SubscribeHandler.html#aab546ccb302e3e05d8e97e9085f62b9a", null ], + [ "timeout_callback_t", "classmrs__lib_1_1SubscribeHandler.html#a6f12a82506c6967a8af9c2c878a1803a", null ], + [ "SubscribeHandler", "classmrs__lib_1_1SubscribeHandler.html#a13159347fe9f13d778d7c02f2d1b1a98", null ], + [ "SubscribeHandler", "classmrs__lib_1_1SubscribeHandler.html#aaceb7739b06d44d7fe619418d5cecd4e", null ], + [ "SubscribeHandler", "classmrs__lib_1_1SubscribeHandler.html#a40f16a8553532b9685feb4b33f342602", null ], + [ "SubscribeHandler", "classmrs__lib_1_1SubscribeHandler.html#aa625f9d69548da72d92f7e8a25b078e3", null ], + [ "SubscribeHandler", "classmrs__lib_1_1SubscribeHandler.html#ab24f400bfd36d733366d25b63ec8889d", null ], + [ "SubscribeHandler", "classmrs__lib_1_1SubscribeHandler.html#a27ac792b1dfa8a62d087b565bec33925", null ], + [ "SubscribeHandler", "classmrs__lib_1_1SubscribeHandler.html#a14c1c92e119c047a3c40724f1152b7b9", null ], + [ "SubscribeHandler", "classmrs__lib_1_1SubscribeHandler.html#a367e7245e60ee2a87f680a27c0e1a8e5", null ], + [ "SubscribeHandler", "classmrs__lib_1_1SubscribeHandler.html#ab3499b8b5910450df90c905d1811e4a3", null ], + [ "~SubscribeHandler", "classmrs__lib_1_1SubscribeHandler.html#a0998c70780beecf1c27330cc40e2e075", null ], + [ "SubscribeHandler", "classmrs__lib_1_1SubscribeHandler.html#a07bab35d51c35fa0498a179f2038e393", null ], + [ "SubscribeHandler", "classmrs__lib_1_1SubscribeHandler.html#a7f9384fb3e3f96f53fc7c1023a0386c5", null ], + [ "getMsg", "classmrs__lib_1_1SubscribeHandler.html#a19a708c3f200ccfac2695a649b9d6e77", null ], + [ "hasMsg", "classmrs__lib_1_1SubscribeHandler.html#a9c6bcd07e10b60c70f02de2c6d5f632e", null ], + [ "lastMsgTime", "classmrs__lib_1_1SubscribeHandler.html#ab96777b29e74827ad109346504565f9b", null ], + [ "newMsg", "classmrs__lib_1_1SubscribeHandler.html#a46bde5660a9480814caa801e2baf3cd3", null ], + [ "operator=", "classmrs__lib_1_1SubscribeHandler.html#a97d2dff2ee17407fd2981d5682bea986", null ], + [ "operator=", "classmrs__lib_1_1SubscribeHandler.html#a819be17785380080c27761374e17cecc", null ], + [ "peekMsg", "classmrs__lib_1_1SubscribeHandler.html#a6638d8d589149edba21bf08fa571f18e", null ], + [ "start", "classmrs__lib_1_1SubscribeHandler.html#af8bc123e16de75e3b6c00724b817eaaf", null ], + [ "stop", "classmrs__lib_1_1SubscribeHandler.html#a36a097cf480a16bf239885be6e35b5d0", null ], + [ "subscribedTopicName", "classmrs__lib_1_1SubscribeHandler.html#a2ee619f8b6fe5ce56599752e63161b51", null ], + [ "topicName", "classmrs__lib_1_1SubscribeHandler.html#a512ffa88a2164e420f1c4a6ae1823e68", null ], + [ "usedMsg", "classmrs__lib_1_1SubscribeHandler.html#ab027bb4a6edece35701e17ba0c137cfc", null ], + [ "waitForNew", "classmrs__lib_1_1SubscribeHandler.html#a94f4bedf9229325ca6a14202f5cfbcc5", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1SubscribeHandler_1_1Impl-members.html b/classmrs__lib_1_1SubscribeHandler_1_1Impl-members.html new file mode 100644 index 00000000..9e81315a --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler_1_1Impl-members.html @@ -0,0 +1,137 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType > Member List
+
+
+ +

This is the complete list of members for mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
data_callback(const typename MessageType::ConstPtr &msg) (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlineprotectedvirtual
data_callback_t typedef (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >
default_timeout_callback(const std::string &topic_name, const ros::Time &last_msg) (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlineprotected
getMsg() (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlinevirtual
hasMsg() const (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlinevirtual
Impl(const SubscribeHandlerOptions &options, const message_callback_t &message_callback=message_callback_t()) (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inline
lastMsgTime() const (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlinevirtual
m_got_data (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_latest_message (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_latest_message_time (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_message_callback (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_new_data (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_new_data_cv (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >mutableprotected
m_new_data_mtx (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >mutableprotected
m_nh (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_node_name (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_sub (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_timeout_id (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_timeout_manager (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_topic_name (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_used_data (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
message_callback_t typedef (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >
newMsg() const (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlinevirtual
peekMsg() const (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlinevirtual
process_new_message(const typename MessageType::ConstPtr &msg) (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlineprotected
start() (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlinevirtual
stop() (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlinevirtual
SubscribeHandler< MessageType > (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >friend
timeout_callback_t typedef (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >
topicName() const (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlinevirtual
usedMsg() const (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlinevirtual
waitForNew(const ros::WallDuration &timeout) (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlinevirtual
~Impl()=default (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >virtual
+
+ + + + diff --git a/classmrs__lib_1_1SubscribeHandler_1_1Impl.html b/classmrs__lib_1_1SubscribeHandler_1_1Impl.html new file mode 100644 index 00000000..2465f924 --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler_1_1Impl.html @@ -0,0 +1,235 @@ + + + + + + + +mrs_lib: mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType > Class Template Reference
+
+
+
+ + Inheritance diagram for mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >:
+
+
+ + + + + + + + + +

+Public Types

+using timeout_callback_t = typename SubscribeHandler< MessageType >::timeout_callback_t
 
+using message_callback_t = typename SubscribeHandler< MessageType >::message_callback_t
 
+using data_callback_t = std::function< void(const typename MessageType::ConstPtr &)>
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Impl (const SubscribeHandlerOptions &options, const message_callback_t &message_callback=message_callback_t())
 
+virtual MessageType::ConstPtr getMsg ()
 
+virtual MessageType::ConstPtr peekMsg () const
 
+virtual bool hasMsg () const
 
+virtual bool newMsg () const
 
+virtual bool usedMsg () const
 
+virtual MessageType::ConstPtr waitForNew (const ros::WallDuration &timeout)
 
+virtual ros::Time lastMsgTime () const
 
+virtual std::string topicName () const
 
+virtual void start ()
 
+virtual void stop ()
 
+ + + + + + + +

+Protected Member Functions

+void default_timeout_callback (const std::string &topic_name, const ros::Time &last_msg)
 
+void process_new_message (const typename MessageType::ConstPtr &msg)
 
+virtual void data_callback (const typename MessageType::ConstPtr &msg)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

+ros::NodeHandle m_nh
 
+ros::Subscriber m_sub
 
+std::string m_topic_name
 
+std::string m_node_name
 
+bool m_got_data
 
+std::mutex m_new_data_mtx
 
+std::condition_variable m_new_data_cv
 
+bool m_new_data
 
+bool m_used_data
 
+std::shared_ptr< mrs_lib::TimeoutManagerm_timeout_manager
 
+mrs_lib::TimeoutManager::timeout_id_t m_timeout_id
 
+ros::Time m_latest_message_time
 
+MessageType::ConstPtr m_latest_message
 
+message_callback_t m_message_callback
 
+ + + +

+Friends

+class SubscribeHandler< MessageType >
 
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1SubscribeHandler_1_1Impl.js b/classmrs__lib_1_1SubscribeHandler_1_1Impl.js new file mode 100644 index 00000000..8c478c0c --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler_1_1Impl.js @@ -0,0 +1,36 @@ +var classmrs__lib_1_1SubscribeHandler_1_1Impl = +[ + [ "data_callback_t", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a89bb4d49903f55eb790ead15582ccd05", null ], + [ "message_callback_t", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a19157dcc4440a0fa0e283a17f19d5485", null ], + [ "timeout_callback_t", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#aa65463365778487a41552febfe3931d6", null ], + [ "Impl", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#ada5369f408df3cabd3a25a795e76eb49", null ], + [ "~Impl", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#ad51b14e5e42e9c91ffb930420f554c6c", null ], + [ "data_callback", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#ac85af50444ae0b553c63ce4a670c8d96", null ], + [ "default_timeout_callback", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a52d8b09cd1355cf7e5fac187e7a7dde8", null ], + [ "getMsg", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a61d2ef76608dc33a70c76847f57e85fe", null ], + [ "hasMsg", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#acc18c8db6a849b4fb9c7fd64057767c6", null ], + [ "lastMsgTime", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a53d5cbf53519cd6e3593c8fa5671543d", null ], + [ "newMsg", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#aa3924b5f6b81bec1b87efa9c3491263f", null ], + [ "peekMsg", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#affc322724df698018685f231ee268dc0", null ], + [ "process_new_message", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a514a48538f4274d53a5754b03c1423a0", null ], + [ "start", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a2befe840e5845a3a5f7740a2926353a3", null ], + [ "stop", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a8008c57727936335f6391f1ee4a76827", null ], + [ "topicName", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#aab47ab2bc38ef2d98aa39e64f5a40684", null ], + [ "usedMsg", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a7d65da6f26ad33681d974c13c20caa71", null ], + [ "waitForNew", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#acd9e00eba5485260f3298fe1ee0bc983", null ], + [ "SubscribeHandler< MessageType >", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a5d89598edbe518d7c8361ffee1338b1f", null ], + [ "m_got_data", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a469824a3611aaf0be7cc78025934e6c2", null ], + [ "m_latest_message", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a939ad78600cde6f1f26aa107e47ccc4b", null ], + [ "m_latest_message_time", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#ab8cfa618e9abb7449518243e2c3b2153", null ], + [ "m_message_callback", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#ad0ae2c6dfdf85295274ef0697d329212", null ], + [ "m_new_data", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a452854cb52f9d66ce4ed7a260c924d32", null ], + [ "m_new_data_cv", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#aee968b4238c2358e8453ce3118bc5b4d", null ], + [ "m_new_data_mtx", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#afa3f3a02ed2b9288331b87740c9e3c11", null ], + [ "m_nh", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#ad7ea1462737db59b6f5fc24cef317bde", null ], + [ "m_node_name", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#ac6c39708344e50fc417eb8ed9fcf162a", null ], + [ "m_sub", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a21c301a2e394e0f84c4e15eafa985af3", null ], + [ "m_timeout_id", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#aef32a0e5255a7af437d8c43531fe50f1", null ], + [ "m_timeout_manager", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#a28b6576623069f62af301ac15140cf20", null ], + [ "m_topic_name", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#ae8c35aafab690edfac687551da0c1ba1", null ], + [ "m_used_data", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html#afaf3e823c1c50cd539540212d26f826e", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe-members.html b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe-members.html new file mode 100644 index 00000000..a8d03ad4 --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe-members.html @@ -0,0 +1,139 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType > Member List
+
+
+ +

This is the complete list of members for mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
data_callback(const typename MessageType::ConstPtr &msg) override (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >inlineprotectedvirtual
data_callback_t typedef (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >
default_timeout_callback(const std::string &topic_name, const ros::Time &last_msg) (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlineprotected
getMsg() override (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >inlinevirtual
hasMsg() const override (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >inlinevirtual
Impl(const SubscribeHandlerOptions &options, const message_callback_t &message_callback=message_callback_t()) (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inline
ImplThreadsafe(const SubscribeHandlerOptions &options, const message_callback_t &message_callback=message_callback_t()) (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >inline
lastMsgTime() const override (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >inlinevirtual
m_got_data (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_latest_message (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_latest_message_time (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_message_callback (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_new_data (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_new_data_cv (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >mutableprotected
m_new_data_mtx (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >mutableprotected
m_nh (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_node_name (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_sub (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_timeout_id (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_timeout_manager (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_topic_name (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
m_used_data (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >protected
message_callback_t typedef (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >
newMsg() const override (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >inlinevirtual
peekMsg() const override (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >inlinevirtual
process_new_message(const typename MessageType::ConstPtr &msg) (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlineprotected
start() override (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >inlinevirtual
stop() override (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >inlinevirtual
SubscribeHandler< MessageType > (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >friend
timeout_callback_t typedef (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >
topicName() const override (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >inlinevirtual
usedMsg() const override (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >inlinevirtual
waitForNew(const ros::WallDuration &timeout) (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >inlinevirtual
~Impl()=default (defined in mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >)mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >virtual
~ImplThreadsafe() override=default (defined in mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >)mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >virtual
+
+ + + + diff --git a/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html new file mode 100644 index 00000000..1b446027 --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html @@ -0,0 +1,258 @@ + + + + + + + +mrs_lib: mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType > Class Template Reference
+
+
+
+ + Inheritance diagram for mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >:
+
+
+ +
+ + Collaboration diagram for mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >:
+
+
+ + + + + + + + + + + + + + +

+Public Types

+using timeout_callback_t = typename impl_class_t::timeout_callback_t
 
+using message_callback_t = typename impl_class_t::message_callback_t
 
- Public Types inherited from mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >
+using timeout_callback_t = typename SubscribeHandler< MessageType >::timeout_callback_t
 
+using message_callback_t = typename SubscribeHandler< MessageType >::message_callback_t
 
+using data_callback_t = std::function< void(const typename MessageType::ConstPtr &)>
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ImplThreadsafe (const SubscribeHandlerOptions &options, const message_callback_t &message_callback=message_callback_t())
 
+virtual bool hasMsg () const override
 
+virtual bool newMsg () const override
 
+virtual bool usedMsg () const override
 
+virtual MessageType::ConstPtr getMsg () override
 
+virtual MessageType::ConstPtr peekMsg () const override
 
+virtual ros::Time lastMsgTime () const override
 
+virtual std::string topicName () const override
 
+virtual void start () override
 
+virtual void stop () override
 
- Public Member Functions inherited from mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >
Impl (const SubscribeHandlerOptions &options, const message_callback_t &message_callback=message_callback_t())
 
+virtual MessageType::ConstPtr waitForNew (const ros::WallDuration &timeout)
 
+ + + + + + + + +

+Protected Member Functions

+virtual void data_callback (const typename MessageType::ConstPtr &msg) override
 
- Protected Member Functions inherited from mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >
+void default_timeout_callback (const std::string &topic_name, const ros::Time &last_msg)
 
+void process_new_message (const typename MessageType::ConstPtr &msg)
 
+ + + +

+Friends

+class SubscribeHandler< MessageType >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >
+ros::NodeHandle m_nh
 
+ros::Subscriber m_sub
 
+std::string m_topic_name
 
+std::string m_node_name
 
+bool m_got_data
 
+std::mutex m_new_data_mtx
 
+std::condition_variable m_new_data_cv
 
+bool m_new_data
 
+bool m_used_data
 
+std::shared_ptr< mrs_lib::TimeoutManagerm_timeout_manager
 
+mrs_lib::TimeoutManager::timeout_id_t m_timeout_id
 
+ros::Time m_latest_message_time
 
+MessageType::ConstPtr m_latest_message
 
+message_callback_t m_message_callback
 
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.js b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.js new file mode 100644 index 00000000..ac3fbcc9 --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.js @@ -0,0 +1,18 @@ +var classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe = +[ + [ "message_callback_t", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#a9e7cb71939d6a240d0bc832af779aa19", null ], + [ "timeout_callback_t", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#a3a9882fa62b740b62e627dd49525be0c", null ], + [ "ImplThreadsafe", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#a38d1a156c17a76eb9ef72d2d97732a42", null ], + [ "~ImplThreadsafe", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#a3af936a107fd3f114aa61b996113a51f", null ], + [ "data_callback", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#a441aee22642f0d5471520693ba2898c3", null ], + [ "getMsg", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#a789925f2ea5df5120d8ca21007b86fb3", null ], + [ "hasMsg", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#ad79f33835407688ccd931124b28ad698", null ], + [ "lastMsgTime", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#aa8083b8f538ff2a566303a03a0921c66", null ], + [ "newMsg", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#a6f929f4d55f7cf94ecd4080819cc8709", null ], + [ "peekMsg", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#aa32577a0057ebd1de797050340da2c36", null ], + [ "start", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#a587dd0aae17d21da6f6e4a070a2ff320", null ], + [ "stop", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#aee90c5d7a54e567cddf382f01ed8eae4", null ], + [ "topicName", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#a1167a6f31c8e2a956f76323b266d2875", null ], + [ "usedMsg", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#ae65eaec53030b58b0fc686672a267b9f", null ], + [ "SubscribeHandler< MessageType >", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html#a5d89598edbe518d7c8361ffee1338b1f", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__coll__graph.map b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__coll__graph.map new file mode 100644 index 00000000..deda5763 --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__coll__graph.md5 b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__coll__graph.md5 new file mode 100644 index 00000000..11da4bc1 --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__coll__graph.md5 @@ -0,0 +1 @@ +16e3cd6a2cab9ba5c99660c3e4170aaa \ No newline at end of file diff --git a/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__coll__graph.png b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__coll__graph.png new file mode 100644 index 00000000..d921a7d1 Binary files /dev/null and b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__coll__graph.png differ diff --git a/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__inherit__graph.map b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__inherit__graph.map new file mode 100644 index 00000000..deda5763 --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__inherit__graph.md5 b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__inherit__graph.md5 new file mode 100644 index 00000000..11da4bc1 --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__inherit__graph.md5 @@ -0,0 +1 @@ +16e3cd6a2cab9ba5c99660c3e4170aaa \ No newline at end of file diff --git a/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__inherit__graph.png b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__inherit__graph.png new file mode 100644 index 00000000..d921a7d1 Binary files /dev/null and b/classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe__inherit__graph.png differ diff --git a/classmrs__lib_1_1SubscribeHandler_1_1Impl__inherit__graph.map b/classmrs__lib_1_1SubscribeHandler_1_1Impl__inherit__graph.map new file mode 100644 index 00000000..4ce4cf69 --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler_1_1Impl__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1SubscribeHandler_1_1Impl__inherit__graph.md5 b/classmrs__lib_1_1SubscribeHandler_1_1Impl__inherit__graph.md5 new file mode 100644 index 00000000..79e66f5f --- /dev/null +++ b/classmrs__lib_1_1SubscribeHandler_1_1Impl__inherit__graph.md5 @@ -0,0 +1 @@ +b4bdda37e14263126ea2e5cc022a72ae \ No newline at end of file diff --git a/classmrs__lib_1_1SubscribeHandler_1_1Impl__inherit__graph.png b/classmrs__lib_1_1SubscribeHandler_1_1Impl__inherit__graph.png new file mode 100644 index 00000000..efdf7c6f Binary files /dev/null and b/classmrs__lib_1_1SubscribeHandler_1_1Impl__inherit__graph.png differ diff --git a/classmrs__lib_1_1ThreadTimer-members.html b/classmrs__lib_1_1ThreadTimer-members.html new file mode 100644 index 00000000..52820f7d --- /dev/null +++ b/classmrs__lib_1_1ThreadTimer-members.html @@ -0,0 +1,123 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::ThreadTimer Member List
+
+
+ +

This is the complete list of members for mrs_lib::ThreadTimer, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
callback_t typedef (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
MRSTimer(const MRSTimer &)=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
MRSTimer(MRSTimer &&)=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
MRSTimer()=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimerprotected
operator=(const ThreadTimer &)=delete (defined in mrs_lib::ThreadTimer)mrs_lib::ThreadTimer
operator=(ThreadTimer &&)=delete (defined in mrs_lib::ThreadTimer)mrs_lib::ThreadTimer
operator=(const MRSTimer &)=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
operator=(MRSTimer &&)=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimer
running() overridemrs_lib::ThreadTimervirtual
setPeriod(const ros::Duration &duration, const bool reset=true) overridemrs_lib::ThreadTimervirtual
start() overridemrs_lib::ThreadTimervirtual
stop() overridemrs_lib::ThreadTimervirtual
ThreadTimer() (defined in mrs_lib::ThreadTimer)mrs_lib::ThreadTimer
ThreadTimer(const ros::NodeHandle &nh, const ros::Rate &rate, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot=false, const bool autostart=true)mrs_lib::ThreadTimer
ThreadTimer(const ros::NodeHandle &nh, const ros::Duration &duration, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, bool oneshot=false, const bool autostart=true)mrs_lib::ThreadTimer
ThreadTimer(const ThreadTimer &)=delete (defined in mrs_lib::ThreadTimer)mrs_lib::ThreadTimer
ThreadTimer(ThreadTimer &&)=delete (defined in mrs_lib::ThreadTimer)mrs_lib::ThreadTimer
~MRSTimer()=default (defined in mrs_lib::MRSTimer)mrs_lib::MRSTimervirtual
~ThreadTimer() overridemrs_lib::ThreadTimerinlinevirtual
+
+ + + + diff --git a/classmrs__lib_1_1ThreadTimer.html b/classmrs__lib_1_1ThreadTimer.html new file mode 100644 index 00000000..9b421924 --- /dev/null +++ b/classmrs__lib_1_1ThreadTimer.html @@ -0,0 +1,512 @@ + + + + + + + +mrs_lib: mrs_lib::ThreadTimer Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::ThreadTimer Class Reference
+
+
+ +

Custom thread-based Timers with the same interface as mrs_lib::ROSTimer. + More...

+ +

#include <timer.h>

+
+ + Inheritance diagram for mrs_lib::ThreadTimer:
+
+
+ +
+ + Collaboration diagram for mrs_lib::ThreadTimer:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

template<class ObjectType >
 ThreadTimer (const ros::NodeHandle &nh, const ros::Rate &rate, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot=false, const bool autostart=true)
 Constructs the object. More...
 
template<class ObjectType >
 ThreadTimer (const ros::NodeHandle &nh, const ros::Duration &duration, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, bool oneshot=false, const bool autostart=true)
 Constructs the object. More...
 
virtual void stop () override
 stop the timer More...
 
virtual void start () override
 start the timer More...
 
virtual void setPeriod (const ros::Duration &duration, const bool reset=true) override
 set the timer period/duration More...
 
virtual bool running () override
 returns true if callbacks should be called More...
 
virtual ~ThreadTimer () override
 stops the timer and then destroys the object More...
 
ThreadTimer (const ThreadTimer &)=delete
 
ThreadTimer (ThreadTimer &&)=delete
 
+ThreadTimeroperator= (const ThreadTimer &)=delete
 
+ThreadTimeroperator= (ThreadTimer &&)=delete
 
- Public Member Functions inherited from mrs_lib::MRSTimer
MRSTimer (const MRSTimer &)=default
 
MRSTimer (MRSTimer &&)=default
 
+MRSTimeroperator= (const MRSTimer &)=default
 
+MRSTimeroperator= (MRSTimer &&)=default
 
+ + + + +

+Additional Inherited Members

- Public Types inherited from mrs_lib::MRSTimer
+using callback_t = std::function< void(const ros::TimerEvent &)>
 
+

Detailed Description

+

Custom thread-based Timers with the same interface as mrs_lib::ROSTimer.

+

Constructor & Destructor Documentation

+ +

◆ ThreadTimer() [1/2]

+ +
+
+
+template<class ObjectType >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::ThreadTimer::ThreadTimer (const ros::NodeHandle & nh,
const ros::Rate & rate,
void(ObjectType::*)(const ros::TimerEvent &) callback,
ObjectType *const obj,
const bool oneshot = false,
const bool autostart = true 
)
+
+ +

Constructs the object.

+
Template Parameters
+ + +
ObjectType
+
+
+
Parameters
+ + + + + + + +
nhignored (used just for consistency with ROSTimer)
raterate at which the callback should be called.
ObjectType::*constcallback callback method to be called.
objobject for the method.
oneshotwhether the callback should only be called once after starting.
autostartwhether the timer should immediately start after construction.
+
+
+ +
+
+ +

◆ ThreadTimer() [2/2]

+ +
+
+
+template<class ObjectType >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::ThreadTimer::ThreadTimer (const ros::NodeHandle & nh,
const ros::Duration & duration,
void(ObjectType::*)(const ros::TimerEvent &) callback,
ObjectType *const obj,
bool oneshot = false,
const bool autostart = true 
)
+
+ +

Constructs the object.

+
Template Parameters
+ + +
ObjectType
+
+
+
Parameters
+ + + + + + + +
nhignored (used just for consistency with ROSTimer)
durationdesired callback period.
ObjectType::*constcallback callback method to be called.
objobject for the method.
oneshotwhether the callback should only be called once after starting.
autostartwhether the timer should immediately start after construction.
+
+
+ +
+
+ +

◆ ~ThreadTimer()

+ +
+
+ + + + + +
+ + + + + + + +
virtual mrs_lib::ThreadTimer::~ThreadTimer ()
+
+inlineoverridevirtual
+
+ +

stops the timer and then destroys the object

+

No more callbacks will be called when the destructor is started.

+ +
+
+

Member Function Documentation

+ +

◆ running()

+ +
+
+ + + + + +
+ + + + + + + +
bool mrs_lib::ThreadTimer::running ()
+
+overridevirtual
+
+ +

returns true if callbacks should be called

+
Returns
true if timer is running
+ +

Implements mrs_lib::MRSTimer.

+ +
+
+ +

◆ setPeriod()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void mrs_lib::ThreadTimer::setPeriod (const ros::Duration & duration,
const bool reset = true 
)
+
+overridevirtual
+
+ +

set the timer period/duration

+

The new period will be applied after the next callback.

+
Parameters
+ + + +
durationthe new desired callback period.
resetignored in this implementation.
+
+
+ +

Implements mrs_lib::MRSTimer.

+ +
+
+ +

◆ start()

+ +
+
+ + + + + +
+ + + + + + + +
void mrs_lib::ThreadTimer::start ()
+
+overridevirtual
+
+ +

start the timer

+

The first callback will be called in now + period.

+
Note
If the timer is already started, nothing will change.
+ +

Implements mrs_lib::MRSTimer.

+ +
+
+ +

◆ stop()

+ +
+
+ + + + + +
+ + + + + + + +
void mrs_lib::ThreadTimer::stop ()
+
+overridevirtual
+
+ +

stop the timer

+

No more callbacks will be called after this method returns.

+ +

Implements mrs_lib::MRSTimer.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1ThreadTimer.js b/classmrs__lib_1_1ThreadTimer.js new file mode 100644 index 00000000..e211b9d1 --- /dev/null +++ b/classmrs__lib_1_1ThreadTimer.js @@ -0,0 +1,15 @@ +var classmrs__lib_1_1ThreadTimer = +[ + [ "ThreadTimer", "classmrs__lib_1_1ThreadTimer.html#adeeefbee9903e230a18edea3868cc412", null ], + [ "ThreadTimer", "classmrs__lib_1_1ThreadTimer.html#ac2e365201eccac6aae67400e4da4438f", null ], + [ "ThreadTimer", "classmrs__lib_1_1ThreadTimer.html#a2ccbea65e537f1f73da1fa75f37833fc", null ], + [ "~ThreadTimer", "classmrs__lib_1_1ThreadTimer.html#a175a2bcce428cfca8bbf3f4ef836f4ed", null ], + [ "ThreadTimer", "classmrs__lib_1_1ThreadTimer.html#aefe278c61da9ed8f45f673dc609c06ab", null ], + [ "ThreadTimer", "classmrs__lib_1_1ThreadTimer.html#a0205a00458be53b0f4d6b852d928e80a", null ], + [ "operator=", "classmrs__lib_1_1ThreadTimer.html#a47415fa3c6e6434d1070c41c96f9fc14", null ], + [ "operator=", "classmrs__lib_1_1ThreadTimer.html#a1651fa6c2eea20f0214dd5eab311db95", null ], + [ "running", "classmrs__lib_1_1ThreadTimer.html#ab3ecdba649fd5c849acd94ce9ad0c824", null ], + [ "setPeriod", "classmrs__lib_1_1ThreadTimer.html#a038246468811544860d5d2d1c4091e2d", null ], + [ "start", "classmrs__lib_1_1ThreadTimer.html#a0425600320550d52408d1499ee3d7891", null ], + [ "stop", "classmrs__lib_1_1ThreadTimer.html#a26d89795a716aa2ae6d7f890626c0aaa", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1ThreadTimer__coll__graph.map b/classmrs__lib_1_1ThreadTimer__coll__graph.map new file mode 100644 index 00000000..9da02825 --- /dev/null +++ b/classmrs__lib_1_1ThreadTimer__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1ThreadTimer__coll__graph.md5 b/classmrs__lib_1_1ThreadTimer__coll__graph.md5 new file mode 100644 index 00000000..cbc45e81 --- /dev/null +++ b/classmrs__lib_1_1ThreadTimer__coll__graph.md5 @@ -0,0 +1 @@ +7cc0dd2cc3b839666ec74c9bd53436fc \ No newline at end of file diff --git a/classmrs__lib_1_1ThreadTimer__coll__graph.png b/classmrs__lib_1_1ThreadTimer__coll__graph.png new file mode 100644 index 00000000..9ce79ddc Binary files /dev/null and b/classmrs__lib_1_1ThreadTimer__coll__graph.png differ diff --git a/classmrs__lib_1_1ThreadTimer__inherit__graph.map b/classmrs__lib_1_1ThreadTimer__inherit__graph.map new file mode 100644 index 00000000..9da02825 --- /dev/null +++ b/classmrs__lib_1_1ThreadTimer__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1ThreadTimer__inherit__graph.md5 b/classmrs__lib_1_1ThreadTimer__inherit__graph.md5 new file mode 100644 index 00000000..cbc45e81 --- /dev/null +++ b/classmrs__lib_1_1ThreadTimer__inherit__graph.md5 @@ -0,0 +1 @@ +7cc0dd2cc3b839666ec74c9bd53436fc \ No newline at end of file diff --git a/classmrs__lib_1_1ThreadTimer__inherit__graph.png b/classmrs__lib_1_1ThreadTimer__inherit__graph.png new file mode 100644 index 00000000..9ce79ddc Binary files /dev/null and b/classmrs__lib_1_1ThreadTimer__inherit__graph.png differ diff --git a/classmrs__lib_1_1TimeoutManager-members.html b/classmrs__lib_1_1TimeoutManager-members.html new file mode 100644 index 00000000..10091b48 --- /dev/null +++ b/classmrs__lib_1_1TimeoutManager-members.html @@ -0,0 +1,116 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::TimeoutManager Member List
+
+
+ +

This is the complete list of members for mrs_lib::TimeoutManager, including all inherited members.

+ + + + + + + + + + + + + +
callback_t typedef (defined in mrs_lib::TimeoutManager)mrs_lib::TimeoutManager
change(const timeout_id_t id, const ros::Duration &timeout, const callback_t &callback, const ros::Time &last_reset=ros::Time::now(), const bool oneshot=false, const bool autostart=true) (defined in mrs_lib::TimeoutManager)mrs_lib::TimeoutManager
lastReset(const timeout_id_t id) (defined in mrs_lib::TimeoutManager)mrs_lib::TimeoutManager
pause(const timeout_id_t id) (defined in mrs_lib::TimeoutManager)mrs_lib::TimeoutManager
pauseAll() (defined in mrs_lib::TimeoutManager)mrs_lib::TimeoutManager
registerNew(const ros::Duration &timeout, const callback_t &callback, const ros::Time &last_reset=ros::Time::now(), const bool oneshot=false, const bool autostart=true) (defined in mrs_lib::TimeoutManager)mrs_lib::TimeoutManager
reset(const timeout_id_t id, const ros::Time &time=ros::Time::now()) (defined in mrs_lib::TimeoutManager)mrs_lib::TimeoutManager
start(const timeout_id_t id, const ros::Time &time=ros::Time::now()) (defined in mrs_lib::TimeoutManager)mrs_lib::TimeoutManager
startAll(const ros::Time &time=ros::Time::now()) (defined in mrs_lib::TimeoutManager)mrs_lib::TimeoutManager
started(const timeout_id_t id) (defined in mrs_lib::TimeoutManager)mrs_lib::TimeoutManager
timeout_id_t typedef (defined in mrs_lib::TimeoutManager)mrs_lib::TimeoutManager
TimeoutManager(const ros::NodeHandle &nh, const ros::Rate &update_rate)mrs_lib::TimeoutManager
+
+ + + + diff --git a/classmrs__lib_1_1TimeoutManager.html b/classmrs__lib_1_1TimeoutManager.html new file mode 100644 index 00000000..4f095fbd --- /dev/null +++ b/classmrs__lib_1_1TimeoutManager.html @@ -0,0 +1,192 @@ + + + + + + + +mrs_lib: mrs_lib::TimeoutManager Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::TimeoutManager Class Reference
+
+
+ +

TODO. + More...

+ +

#include <timeout_manager.h>

+ + + + + + +

+Public Types

+using timeout_id_t = size_t
 
+using callback_t = std::function< void(const ros::Time &)>
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 TimeoutManager (const ros::NodeHandle &nh, const ros::Rate &update_rate)
 TODO. More...
 
+timeout_id_t registerNew (const ros::Duration &timeout, const callback_t &callback, const ros::Time &last_reset=ros::Time::now(), const bool oneshot=false, const bool autostart=true)
 
+void reset (const timeout_id_t id, const ros::Time &time=ros::Time::now())
 
+void pause (const timeout_id_t id)
 
+void start (const timeout_id_t id, const ros::Time &time=ros::Time::now())
 
+void pauseAll ()
 
+void startAll (const ros::Time &time=ros::Time::now())
 
+void change (const timeout_id_t id, const ros::Duration &timeout, const callback_t &callback, const ros::Time &last_reset=ros::Time::now(), const bool oneshot=false, const bool autostart=true)
 
+ros::Time lastReset (const timeout_id_t id)
 
+bool started (const timeout_id_t id)
 
+

Detailed Description

+

TODO.

+

Constructor & Destructor Documentation

+ +

◆ TimeoutManager()

+ +
+
+ + + + + + + + + + + + + + + + + + +
mrs_lib::TimeoutManager::TimeoutManager (const ros::NodeHandle & nh,
const ros::Rate & update_rate 
)
+
+ +

TODO.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1TimeoutManager.js b/classmrs__lib_1_1TimeoutManager.js new file mode 100644 index 00000000..14d1f47f --- /dev/null +++ b/classmrs__lib_1_1TimeoutManager.js @@ -0,0 +1,15 @@ +var classmrs__lib_1_1TimeoutManager = +[ + [ "callback_t", "classmrs__lib_1_1TimeoutManager.html#aaa362ddd47a87442c46f763fc74045d7", null ], + [ "timeout_id_t", "classmrs__lib_1_1TimeoutManager.html#a5607caa89e3da009d39c6343f5d2b2fb", null ], + [ "TimeoutManager", "classmrs__lib_1_1TimeoutManager.html#a7627ccd5204a4f13c832db2cb558128f", null ], + [ "change", "classmrs__lib_1_1TimeoutManager.html#a2acb13d7a30b3e62ccbbf41a3a9f4755", null ], + [ "lastReset", "classmrs__lib_1_1TimeoutManager.html#ae70c094760d7b3b707872dbd78318563", null ], + [ "pause", "classmrs__lib_1_1TimeoutManager.html#ad9eac0dcd59c253eb559f1a8da6495eb", null ], + [ "pauseAll", "classmrs__lib_1_1TimeoutManager.html#aeec77f82c5c403b914ba29640ca6c1a2", null ], + [ "registerNew", "classmrs__lib_1_1TimeoutManager.html#a7e7f174308a44ab6ed647bcc8db8bf42", null ], + [ "reset", "classmrs__lib_1_1TimeoutManager.html#a0fdaec453e6db200aa47f38999c5aa44", null ], + [ "start", "classmrs__lib_1_1TimeoutManager.html#aded1164d59ca86f39ebaf147c91187c8", null ], + [ "startAll", "classmrs__lib_1_1TimeoutManager.html#a2dfe6dc322c5e159f21b8bb131e54766", null ], + [ "started", "classmrs__lib_1_1TimeoutManager.html#ad4eefb7364d8f62ac18186a3d9001f28", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1TransformBroadcaster-members.html b/classmrs__lib_1_1TransformBroadcaster-members.html new file mode 100644 index 00000000..cbb3b0c0 --- /dev/null +++ b/classmrs__lib_1_1TransformBroadcaster-members.html @@ -0,0 +1,107 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::TransformBroadcaster Member List
+
+
+ +

This is the complete list of members for mrs_lib::TransformBroadcaster, including all inherited members.

+ + + + +
sendTransform(const geometry_msgs::TransformStamped &transform)mrs_lib::TransformBroadcaster
sendTransform(const std::vector< geometry_msgs::TransformStamped > &transforms)mrs_lib::TransformBroadcaster
TransformBroadcaster()mrs_lib::TransformBroadcaster
+
+ + + + diff --git a/classmrs__lib_1_1TransformBroadcaster.html b/classmrs__lib_1_1TransformBroadcaster.html new file mode 100644 index 00000000..9e56da12 --- /dev/null +++ b/classmrs__lib_1_1TransformBroadcaster.html @@ -0,0 +1,183 @@ + + + + + + + +mrs_lib: mrs_lib::TransformBroadcaster Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::TransformBroadcaster Class Reference
+
+
+ +

Wrapper for the tf2_ros::TransformBroadcaster. With each sendTransform() command, the message is checked against the last message with the same frame IDs. If the transform was already published in this ros::Time step, then the transform is skipped. Prevents endless stream of warnings from spamming the console output. + More...

+ +

#include <transform_broadcaster.h>

+ + + + + + + + + + + +

+Public Member Functions

TransformBroadcaster ()
 constructor, internally starts the TransformBroadcaster
 
void sendTransform (const geometry_msgs::TransformStamped &transform)
 check if the transform is newer than the last published one and publish it. Transform is skipped if a duplicit timestamp is found More...
 
void sendTransform (const std::vector< geometry_msgs::TransformStamped > &transforms)
 check if the transforms are newer than the last published ones and publish them. A transform is skipped if a duplicit timestamp is found More...
 
+

Detailed Description

+

Wrapper for the tf2_ros::TransformBroadcaster. With each sendTransform() command, the message is checked against the last message with the same frame IDs. If the transform was already published in this ros::Time step, then the transform is skipped. Prevents endless stream of warnings from spamming the console output.

+

Member Function Documentation

+ +

◆ sendTransform() [1/2]

+ +
+
+ + + + + + + + +
void mrs_lib::TransformBroadcaster::sendTransform (const geometry_msgs::TransformStamped & transform)
+
+ +

check if the transform is newer than the last published one and publish it. Transform is skipped if a duplicit timestamp is found

+
Parameters
+ + +
transformto be published
+
+
+ +
+
+ +

◆ sendTransform() [2/2]

+ +
+
+ + + + + + + + +
void mrs_lib::TransformBroadcaster::sendTransform (const std::vector< geometry_msgs::TransformStamped > & transforms)
+
+ +

check if the transforms are newer than the last published ones and publish them. A transform is skipped if a duplicit timestamp is found

+
Parameters
+ + +
transformsvector of transforms to be published
+
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1TransformBroadcaster.js b/classmrs__lib_1_1TransformBroadcaster.js new file mode 100644 index 00000000..a724f72d --- /dev/null +++ b/classmrs__lib_1_1TransformBroadcaster.js @@ -0,0 +1,6 @@ +var classmrs__lib_1_1TransformBroadcaster = +[ + [ "TransformBroadcaster", "classmrs__lib_1_1TransformBroadcaster.html#ab8760c98f2d7111cc029f45b11e24bb9", null ], + [ "sendTransform", "classmrs__lib_1_1TransformBroadcaster.html#a93913661cb31baeedb7d4e1f72142b93", null ], + [ "sendTransform", "classmrs__lib_1_1TransformBroadcaster.html#a2adf5bd449b5561323fb7d8633e04bf5", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1Transformer-members.html b/classmrs__lib_1_1Transformer-members.html new file mode 100644 index 00000000..98777281 --- /dev/null +++ b/classmrs__lib_1_1Transformer-members.html @@ -0,0 +1,135 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::Transformer Member List
+
+
+ +

This is the complete list of members for mrs_lib::Transformer, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
beQuiet(const bool quiet=true)mrs_lib::Transformerinline
frame_from(const geometry_msgs::TransformStamped &msg)mrs_lib::Transformerinlinestatic
frame_from(geometry_msgs::TransformStamped &msg)mrs_lib::Transformerinlinestatic
frame_to(const geometry_msgs::TransformStamped &msg)mrs_lib::Transformerinlinestatic
frame_to(geometry_msgs::TransformStamped &msg)mrs_lib::Transformerinlinestatic
getTransform(const std::string &from_frame, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))mrs_lib::Transformer
getTransform(const std::string &from_frame, const ros::Time &from_stamp, const std::string &to_frame, const ros::Time &to_stamp, const std::string &fixed_frame)mrs_lib::Transformer
inverse(const geometry_msgs::TransformStamped &msg)mrs_lib::Transformerinlinestatic
operator=(Transformer &&other)mrs_lib::Transformer
resolveFrame(const std::string &frame_id)mrs_lib::Transformerinline
retryLookupNewest(const bool retry=true)mrs_lib::Transformerinline
setDefaultFrame(const std::string &frame_id)mrs_lib::Transformerinline
setDefaultPrefix(const std::string &prefix)mrs_lib::Transformerinline
setLatLon(const double lat, const double lon)mrs_lib::Transformer
setLookupTimeout(const ros::Duration timeout=ros::Duration(0))mrs_lib::Transformerinline
transform(const T &what, const geometry_msgs::TransformStamped &tf)mrs_lib::Transformer
transform(const boost::shared_ptr< const T > &what, const geometry_msgs::TransformStamped &tf)mrs_lib::Transformerinline
transform(const boost::shared_ptr< T > &what, const geometry_msgs::TransformStamped &tf)mrs_lib::Transformerinline
transformAsPoint(const Eigen::Vector3d &what, const geometry_msgs::TransformStamped &tf)mrs_lib::Transformer
transformAsPoint(const std::string &from_frame, const Eigen::Vector3d &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))mrs_lib::Transformer
transformAsVector(const Eigen::Vector3d &what, const geometry_msgs::TransformStamped &tf)mrs_lib::Transformer
transformAsVector(const std::string &from_frame, const Eigen::Vector3d &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))mrs_lib::Transformer
Transformer()mrs_lib::Transformer
Transformer(const std::string &node_name, const ros::Duration &cache_time=ros::Duration(tf2_ros::Buffer::DEFAULT_CACHE_TIME))mrs_lib::Transformer
Transformer(const ros::NodeHandle &nh, const std::string &node_name=std::string(), const ros::Duration &cache_time=ros::Duration(tf2_ros::Buffer::DEFAULT_CACHE_TIME))mrs_lib::Transformer
transformSingle(const T &what, const std::string &to_frame)mrs_lib::Transformer
transformSingle(const boost::shared_ptr< T > &what, const std::string &to_frame)mrs_lib::Transformerinline
transformSingle(const boost::shared_ptr< const T > &what, const std::string &to_frame)mrs_lib::Transformerinline
transformSingle(const std::string &from_frame, const T &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))mrs_lib::Transformer
transformSingle(const std::string &from_frame, const boost::shared_ptr< T > &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))mrs_lib::Transformerinline
transformSingle(const std::string &from_frame, const boost::shared_ptr< const T > &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))mrs_lib::Transformerinline
+
+ + + + diff --git a/classmrs__lib_1_1Transformer.html b/classmrs__lib_1_1Transformer.html new file mode 100644 index 00000000..78022bee --- /dev/null +++ b/classmrs__lib_1_1Transformer.html @@ -0,0 +1,1541 @@ + + + + + + + +mrs_lib: mrs_lib::Transformer Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::Transformer Class Reference
+
+
+ +

A convenience wrapper class for ROS's native TF2 API to simplify transforming of various messages. + More...

+ +

#include <transformer.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Transformer ()
 A convenience constructor that doesn't initialize anything. More...
 
 Transformer (const std::string &node_name, const ros::Duration &cache_time=ros::Duration(tf2_ros::Buffer::DEFAULT_CACHE_TIME))
 The main constructor that actually initializes stuff. More...
 
 Transformer (const ros::NodeHandle &nh, const std::string &node_name=std::string(), const ros::Duration &cache_time=ros::Duration(tf2_ros::Buffer::DEFAULT_CACHE_TIME))
 The main constructor that actually initializes stuff. More...
 
Transformeroperator= (Transformer &&other)
 A convenience move assignment operator. More...
 
void setDefaultFrame (const std::string &frame_id)
 Sets the default frame ID to be used instead of any empty frame ID. More...
 
void setDefaultPrefix (const std::string &prefix)
 Sets the default frame ID prefix to be used if no prefix is present in the frame. More...
 
void setLatLon (const double lat, const double lon)
 Sets the curret lattitude and longitude for UTM zone calculation. More...
 
void setLookupTimeout (const ros::Duration timeout=ros::Duration(0))
 Set a timeout for transform lookup. More...
 
void retryLookupNewest (const bool retry=true)
 Enable/disable retry of a failed transform lookup with ros::Time(0). More...
 
void beQuiet (const bool quiet=true)
 Enable/disable some prints that may be too noisy. More...
 
std::string resolveFrame (const std::string &frame_id)
 Deduce the full frame ID from a shortened or empty string using current default prefix and default frame rules. More...
 
template<class T >
std::optional< T > transformSingle (const T &what, const std::string &to_frame)
 Transforms a single variable to a new frame and returns it or std::nullopt if transformation fails. More...
 
template<class T >
std::optional< boost::shared_ptr< T > > transformSingle (const boost::shared_ptr< T > &what, const std::string &to_frame)
 Transforms a single variable to a new frame. More...
 
template<class T >
std::optional< boost::shared_ptr< T > > transformSingle (const boost::shared_ptr< const T > &what, const std::string &to_frame)
 Transforms a single variable to a new frame. More...
 
template<class T >
std::optional< T > transformSingle (const std::string &from_frame, const T &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))
 Transforms a single variable to a new frame and returns it or std::nullopt if transformation fails. More...
 
template<class T >
std::optional< boost::shared_ptr< T > > transformSingle (const std::string &from_frame, const boost::shared_ptr< T > &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))
 Transforms a single variable to a new frame and returns it or std::nullopt if transformation fails. More...
 
template<class T >
std::optional< boost::shared_ptr< T > > transformSingle (const std::string &from_frame, const boost::shared_ptr< const T > &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))
 Transforms a single variable to a new frame and returns it or std::nullopt if transformation fails. More...
 
template<class T >
std::optional< T > transform (const T &what, const geometry_msgs::TransformStamped &tf)
 Transform a variable to new frame using a particular transformation. More...
 
template<class T >
std::optional< boost::shared_ptr< T > > transform (const boost::shared_ptr< const T > &what, const geometry_msgs::TransformStamped &tf)
 Transform a variable to new frame using a particular transformation. More...
 
template<class T >
std::optional< boost::shared_ptr< T > > transform (const boost::shared_ptr< T > &what, const geometry_msgs::TransformStamped &tf)
 Transform a variable to new frame using a particular transformation. More...
 
std::optional< Eigen::Vector3d > transformAsVector (const Eigen::Vector3d &what, const geometry_msgs::TransformStamped &tf)
 Transform an Eigen::Vector3d (interpreting it as a vector). More...
 
std::optional< Eigen::Vector3d > transformAsVector (const std::string &from_frame, const Eigen::Vector3d &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))
 Transform an Eigen::Vector3d (interpreting it as a vector). More...
 
std::optional< Eigen::Vector3d > transformAsPoint (const Eigen::Vector3d &what, const geometry_msgs::TransformStamped &tf)
 Transform an Eigen::Vector3d (interpreting it as a point). More...
 
std::optional< Eigen::Vector3d > transformAsPoint (const std::string &from_frame, const Eigen::Vector3d &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))
 Transform an Eigen::Vector3d (interpreting it as a point). More...
 
std::optional< geometry_msgs::TransformStamped > getTransform (const std::string &from_frame, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))
 Obtains a transform between two frames in a given time. More...
 
std::optional< geometry_msgs::TransformStamped > getTransform (const std::string &from_frame, const ros::Time &from_stamp, const std::string &to_frame, const ros::Time &to_stamp, const std::string &fixed_frame)
 Obtains a transform between two frames in a given time. More...
 
+ + + + + + + + + + + + + + + + +

+Static Public Member Functions

static constexpr const std::string & frame_from (const geometry_msgs::TransformStamped &msg)
 A convenience function that returns the frame from which the message transforms. More...
 
static constexpr std::string & frame_from (geometry_msgs::TransformStamped &msg)
 A convenience function that returns the frame from which the message transforms. More...
 
static constexpr const std::string & frame_to (const geometry_msgs::TransformStamped &msg)
 A convenience function that returns the frame to which the message transforms. More...
 
static constexpr std::string & frame_to (geometry_msgs::TransformStamped &msg)
 A convenience function that returns the frame to which the message transforms. More...
 
static geometry_msgs::TransformStamped inverse (const geometry_msgs::TransformStamped &msg)
 A convenience function implements returns the inverse of the transform message as a one-liner. More...
 
+

Detailed Description

+

A convenience wrapper class for ROS's native TF2 API to simplify transforming of various messages.

+

Implements optional automatic frame prefix deduction, seamless transformation lattitude/longitude coordinates and UTM coordinates, simple transformation of MRS messages etc.

+

Constructor & Destructor Documentation

+ +

◆ Transformer() [1/3]

+ +
+
+ + + + + + + +
mrs_lib::Transformer::Transformer ()
+
+ +

A convenience constructor that doesn't initialize anything.

+

This constructor is just to enable usign the Transformer as a member variable of nodelets etc. To actually initialize the class, use the alternative constructor.

+
Note
This constructor doesn't initialize the TF2 transform listener and all calls to the transformation-related methods of an object constructed using this method will fail.
+ +
+
+ +

◆ Transformer() [2/3]

+ +
+
+ + + + + + + + + + + + + + + + + + +
mrs_lib::Transformer::Transformer (const std::string & node_name,
const ros::Duration & cache_time = ros::Duration(tf2_ros::Buffer::DEFAULT_CACHE_TIME) 
)
+
+ +

The main constructor that actually initializes stuff.

+

This constructor initializes the class and the TF2 transform listener.

+
Parameters
+ + + +
node_namethe name of the node running the transformer, is used in ROS prints. If you don't care, just set it to an empty string.
cache_timeduration of the transformation buffer's cache into the past that will be kept.
+
+
+ +
+
+ +

◆ Transformer() [3/3]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::Transformer::Transformer (const ros::NodeHandle & nh,
const std::string & node_name = std::string(),
const ros::Duration & cache_time = ros::Duration(tf2_ros::Buffer::DEFAULT_CACHE_TIME) 
)
+
+ +

The main constructor that actually initializes stuff.

+

This constructor initializes the class and the TF2 transform listener.

+
Parameters
+ + + + +
nhthe node handle to be used for subscribing to the transformations.
node_namethe name of the node running the transformer, is used in ROS prints. If you don't care, just set it to an empty string.
cache_timeduration of the transformation buffer's cache into the past that will be kept.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ beQuiet()

+ +
+
+ + + + + +
+ + + + + + + + +
void mrs_lib::Transformer::beQuiet (const bool quiet = true)
+
+inline
+
+ +

Enable/disable some prints that may be too noisy.

+
Parameters
+ + +
quietenables or disables quiet mode.
+
+
+
Note
Disabled by default.
+ +
+
+ +

◆ frame_from() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static constexpr const std::string& mrs_lib::Transformer::frame_from (const geometry_msgs::TransformStamped & msg)
+
+inlinestaticconstexpr
+
+ +

A convenience function that returns the frame from which the message transforms.

+
Parameters
+ + +
msgthe message representing the transformation.
+
+
+
Returns
the frame from which the transformation in \msg transforms.
+ +
+
+ +

◆ frame_from() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static constexpr std::string& mrs_lib::Transformer::frame_from (geometry_msgs::TransformStamped & msg)
+
+inlinestaticconstexpr
+
+ +

A convenience function that returns the frame from which the message transforms.

+

This overload returns a reference to the string in the message representing the frame id so that it can be modified.

+
Parameters
+ + +
msgthe message representing the transformation.
+
+
+
Returns
a reference to the field in the message containing the string with the frame id from which the transformation in \msg transforms.
+ +
+
+ +

◆ frame_to() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static constexpr const std::string& mrs_lib::Transformer::frame_to (const geometry_msgs::TransformStamped & msg)
+
+inlinestaticconstexpr
+
+ +

A convenience function that returns the frame to which the message transforms.

+
Parameters
+ + +
msgthe message representing the transformation.
+
+
+
Returns
the frame to which the transformation in \msg transforms.
+ +
+
+ +

◆ frame_to() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static constexpr std::string& mrs_lib::Transformer::frame_to (geometry_msgs::TransformStamped & msg)
+
+inlinestaticconstexpr
+
+ +

A convenience function that returns the frame to which the message transforms.

+

This overload returns a reference to the string in the message representing the frame id so that it can be modified.

+
Parameters
+ + +
msgthe message representing the transformation.
+
+
+
Returns
a reference to the field in the message containing the string with the frame id to which the transformation in \msg transforms.
+ +
+
+ +

◆ getTransform() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::optional< geometry_msgs::TransformStamped > mrs_lib::Transformer::getTransform (const std::string & from_frame,
const ros::Time & from_stamp,
const std::string & to_frame,
const ros::Time & to_stamp,
const std::string & fixed_frame 
)
+
+ +

Obtains a transform between two frames in a given time.

+

This overload enables the user to select a different time of the source frame and the target frame.

+
Parameters
+ + + + + + +
from_frameThe original frame of the transformation.
from_stampThe time at which the original frame should be evaluated. (0 will get the latest)
to_frameThe target frame of the transformation.
to_stampThe time to which the data should be transformed. (0 will get the latest)
fixed_frameThe frame that may be assumed constant in time (the "world" frame).
+
+
+
Returns
std::nullopt if failed, optional containing the requested transformation otherwise.
+
Note
An example of when this API may be useful is explained here: http://wiki.ros.org/tf2/Tutorials/Time%20travel%20with%20tf2%20%28C%2B%2B%29
+ +
+
+ +

◆ getTransform() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::optional< geometry_msgs::TransformStamped > mrs_lib::Transformer::getTransform (const std::string & from_frame,
const std::string & to_frame,
const ros::Time & time_stamp = ros::Time(0) 
)
+
+ +

Obtains a transform between two frames in a given time.

+
Parameters
+ + + + +
from_frameThe original frame of the transformation.
to_frameThe target frame of the transformation.
time_stampThe time stamp of the transformation. (0 will get the latest)
+
+
+
Returns
std::nullopt if failed, optional containing the requested transformation otherwise.
+ +
+
+ +

◆ inverse()

+ +
+
+ + + + + +
+ + + + + + + + +
static geometry_msgs::TransformStamped mrs_lib::Transformer::inverse (const geometry_msgs::TransformStamped & msg)
+
+inlinestatic
+
+ +

A convenience function implements returns the inverse of the transform message as a one-liner.

+
Parameters
+ + +
msgthe message representing the transformation.
+
+
+
Returns
a new message representing an inverse of the original transformation.
+ +
+
+ +

◆ operator=()

+ +
+
+ + + + + + + + +
Transformer & mrs_lib::Transformer::operator= (Transformer && other)
+
+ +

A convenience move assignment operator.

+

This operator moves all data from the object that is being assigned from, invalidating it.

+
Parameters
+ + +
otherthe object to assign from. It will be invalid after this method returns.
+
+
+
Returns
a reference to the object being assigned to.
+ +
+
+ +

◆ resolveFrame()

+ +
+
+ + + + + +
+ + + + + + + + +
std::string mrs_lib::Transformer::resolveFrame (const std::string & frame_id)
+
+inline
+
+ +

Deduce the full frame ID from a shortened or empty string using current default prefix and default frame rules.

+

Example assuming default prefix is "uav1" and default frame is "uav1/gps_origin": "" -> "uav1/gps_origin" "local_origin" -> "uav1/local_origin"

+
Parameters
+ + +
frame_idThe frame ID to be resolved.
+
+
+
Returns
The resolved frame ID.
+ +
+
+ +

◆ retryLookupNewest()

+ +
+
+ + + + + +
+ + + + + + + + +
void mrs_lib::Transformer::retryLookupNewest (const bool retry = true)
+
+inline
+
+ +

Enable/disable retry of a failed transform lookup with ros::Time(0).

+

If enabled, a failed transform lookup will be retried. The new try will ignore the requested timestamp and will attempt to fetch the latest transformation between the two frames.

+
Note
Disabled by default.
+
Parameters
+ + +
retryenables or disables retry.
+
+
+ +
+
+ +

◆ setDefaultFrame()

+ +
+
+ + + + + +
+ + + + + + + + +
void mrs_lib::Transformer::setDefaultFrame (const std::string & frame_id)
+
+inline
+
+ +

Sets the default frame ID to be used instead of any empty frame ID.

+

If you call e.g. the transform() method with a message that has an empty header.frame_id field, this value will be used instead.

+
Parameters
+ + +
frame_idthe default frame ID. Use an empty string to disable default frame ID deduction.
+
+
+
Note
Disabled by default.
+ +
+
+ +

◆ setDefaultPrefix()

+ +
+
+ + + + + +
+ + + + + + + + +
void mrs_lib::Transformer::setDefaultPrefix (const std::string & prefix)
+
+inline
+
+ +

Sets the default frame ID prefix to be used if no prefix is present in the frame.

+

If you call any method with a frame ID that doesn't begin with this string, it will be automatically prefixed including a forward slash between the prefix and raw frame ID. The forward slash should therefore not be included in the prefix.

+

Example frame ID resolution assuming default prefix is "uav1": "local_origin" -> "uav1/local_origin"

+
Parameters
+ + +
prefixthe default frame ID prefix (without the forward slash at the end). Use an empty string to disable default frame ID prefixing.
+
+
+
Note
Disabled by default. The prefix will be applied as a namespace (with a forward slash between the prefix and raw frame ID).
+ +
+
+ +

◆ setLatLon()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void mrs_lib::Transformer::setLatLon (const double lat,
const double lon 
)
+
+ +

Sets the curret lattitude and longitude for UTM zone calculation.

+

The Transformer uses this to deduce the current UTM zone used for transforming stuff to latlon_origin.

+
Parameters
+ + + +
latthe latitude in degrees.
lonthe longitude in degrees.
+
+
+
Note
Any transformation to latlon_origin will fail if this function is not called first!
+ +
+
+ +

◆ setLookupTimeout()

+ +
+
+ + + + + +
+ + + + + + + + +
void mrs_lib::Transformer::setLookupTimeout (const ros::Duration timeout = ros::Duration(0))
+
+inline
+
+ +

Set a timeout for transform lookup.

+

The transform lookup operation will block up to this duration if the transformation is not available immediately.

+
Note
Disabled by default.
+
Parameters
+ + +
timeoutthe lookup timeout. Set to zero to disable blocking.
+
+
+ +
+
+ +

◆ transform() [1/3]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::optional<boost::shared_ptr<T> > mrs_lib::Transformer::transform (const boost::shared_ptr< const T > & what,
const geometry_msgs::TransformStamped & tf 
)
+
+inline
+
+ +

Transform a variable to new frame using a particular transformation.

+

A convenience override for shared pointers to const.

+
Parameters
+ + + +
tfThe transformation to be used.
whatThe object to be transformed.
+
+
+
Returns
std::nullopt if failed, optional containing the transformed object otherwise.
+ +
+
+ +

◆ transform() [2/3]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::optional<boost::shared_ptr<T> > mrs_lib::Transformer::transform (const boost::shared_ptr< T > & what,
const geometry_msgs::TransformStamped & tf 
)
+
+inline
+
+ +

Transform a variable to new frame using a particular transformation.

+

A convenience override for shared pointers.

+
Parameters
+ + + +
tfThe transformation to be used.
whatThe object to be transformed.
+
+
+
Returns
std::nullopt if failed, optional containing the transformed object otherwise.
+ +
+
+ +

◆ transform() [3/3]

+ +
+
+
+template<class T >
+ + + + + + + + + + + + + + + + + + +
std::optional< T > mrs_lib::Transformer::transform (const T & what,
const geometry_msgs::TransformStamped & tf 
)
+
+ +

Transform a variable to new frame using a particular transformation.

+
Parameters
+ + + +
tfThe transformation to be used.
whatThe object to be transformed.
+
+
+
Returns
std::nullopt if failed, optional containing the transformed object otherwise.
+ +
+
+ +

◆ transformAsPoint() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::optional< Eigen::Vector3d > mrs_lib::Transformer::transformAsPoint (const Eigen::Vector3d & what,
const geometry_msgs::TransformStamped & tf 
)
+
+ +

Transform an Eigen::Vector3d (interpreting it as a point).

+

Both the rotation and translation will be applied to the variable.

+
Parameters
+ + + +
tfThe transformation to be used.
whatThe object to be transformed.
+
+
+
Returns
std::nullopt if failed, optional containing the transformed object otherwise.
+ +
+
+ +

◆ transformAsPoint() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::optional< Eigen::Vector3d > mrs_lib::Transformer::transformAsPoint (const std::string & from_frame,
const Eigen::Vector3d & what,
const std::string & to_frame,
const ros::Time & time_stamp = ros::Time(0) 
)
+
+ +

Transform an Eigen::Vector3d (interpreting it as a point).

+

Both the rotation and translation will be applied to the variable.

+
Parameters
+ + + + + +
from_frameThe current frame of what.
whatThe object to be transformed.
to_frameThe desired frame of what.
time_stampFrom which time to take the transformation (use ros::Time(0) for the latest time).
+
+
+
Returns
std::nullopt if failed, optional containing the transformed object otherwise.
+ +
+
+ +

◆ transformAsVector() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::optional< Eigen::Vector3d > mrs_lib::Transformer::transformAsVector (const Eigen::Vector3d & what,
const geometry_msgs::TransformStamped & tf 
)
+
+ +

Transform an Eigen::Vector3d (interpreting it as a vector).

+

Only the rotation will be applied to the variable.

+
Parameters
+ + + +
tfThe transformation to be used.
whatThe vector to be transformed.
+
+
+
Returns
std::nullopt if failed, optional containing the transformed object otherwise.
+ +
+
+ +

◆ transformAsVector() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::optional< Eigen::Vector3d > mrs_lib::Transformer::transformAsVector (const std::string & from_frame,
const Eigen::Vector3d & what,
const std::string & to_frame,
const ros::Time & time_stamp = ros::Time(0) 
)
+
+ +

Transform an Eigen::Vector3d (interpreting it as a vector).

+

Only the rotation will be applied to the variable.

+
Parameters
+ + + + + +
from_frameThe current frame of what.
whatThe vector to be transformed.
to_frameThe desired frame of what.
time_stampFrom which time to take the transformation (use ros::Time(0) for the latest time).
+
+
+
Returns
std::nullopt if failed, optional containing the transformed object otherwise.
+ +
+
+ +

◆ transformSingle() [1/6]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::optional<boost::shared_ptr<T> > mrs_lib::Transformer::transformSingle (const boost::shared_ptr< const T > & what,
const std::string & to_frame 
)
+
+inline
+
+ +

Transforms a single variable to a new frame.

+

A convenience override for shared pointers to const.

+
Parameters
+ + + +
whatThe object to be transformed.
to_frameThe target fram ID.
+
+
+
Returns
std::nullopt if failed, optional containing the transformed object otherwise.
+ +
+
+ +

◆ transformSingle() [2/6]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::optional<boost::shared_ptr<T> > mrs_lib::Transformer::transformSingle (const boost::shared_ptr< T > & what,
const std::string & to_frame 
)
+
+inline
+
+ +

Transforms a single variable to a new frame.

+

A convenience override for shared pointers.

+
Parameters
+ + + +
whatThe object to be transformed.
to_frameThe target fram ID.
+
+
+
Returns
std::nullopt if failed, optional containing the transformed object otherwise.
+ +
+
+ +

◆ transformSingle() [3/6]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::optional<boost::shared_ptr<T> > mrs_lib::Transformer::transformSingle (const std::string & from_frame,
const boost::shared_ptr< const T > & what,
const std::string & to_frame,
const ros::Time & time_stamp = ros::Time(0) 
)
+
+inline
+
+ +

Transforms a single variable to a new frame and returns it or std::nullopt if transformation fails.

+

A convenience overload for shared pointers to const headerless variables.

+
Parameters
+ + + + + +
from_framethe original target frame ID.
whatthe object to be transformed.
to_framethe target frame ID.
time_stampthe time of the transformation.
+
+
+
Returns
std::nullopt if failed, optional containing the transformed object otherwise.
+ +
+
+ +

◆ transformSingle() [4/6]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::optional<boost::shared_ptr<T> > mrs_lib::Transformer::transformSingle (const std::string & from_frame,
const boost::shared_ptr< T > & what,
const std::string & to_frame,
const ros::Time & time_stamp = ros::Time(0) 
)
+
+inline
+
+ +

Transforms a single variable to a new frame and returns it or std::nullopt if transformation fails.

+

A convenience overload for shared pointers to headerless variables.

+
Parameters
+ + + + + +
from_framethe original target frame ID.
whatthe object to be transformed.
to_framethe target frame ID.
time_stampthe time of the transformation.
+
+
+
Returns
std::nullopt if failed, optional containing the transformed object otherwise.
+ +
+
+ +

◆ transformSingle() [5/6]

+ +
+
+
+template<class T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::optional< T > mrs_lib::Transformer::transformSingle (const std::string & from_frame,
const T & what,
const std::string & to_frame,
const ros::Time & time_stamp = ros::Time(0) 
)
+
+ +

Transforms a single variable to a new frame and returns it or std::nullopt if transformation fails.

+

A convenience overload for headerless variables.

+
Parameters
+ + + + + +
from_framethe original target frame ID.
whatthe object to be transformed.
to_framethe target frame ID.
time_stampthe time of the transformation.
+
+
+
Returns
std::nullopt if failed, optional containing the transformed object otherwise.
+ +
+
+ +

◆ transformSingle() [6/6]

+ +
+
+
+template<class T >
+ + + + + + + + + + + + + + + + + + +
std::optional< T > mrs_lib::Transformer::transformSingle (const T & what,
const std::string & to_frame 
)
+
+ +

Transforms a single variable to a new frame and returns it or std::nullopt if transformation fails.

+
Parameters
+ + + +
whatthe object to be transformed.
to_framethe target frame ID.
+
+
+
Returns
std::nullopt if failed, optional containing the transformed object otherwise.
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1Transformer.js b/classmrs__lib_1_1Transformer.js new file mode 100644 index 00000000..01a5b8d3 --- /dev/null +++ b/classmrs__lib_1_1Transformer.js @@ -0,0 +1,29 @@ +var classmrs__lib_1_1Transformer = +[ + [ "Transformer", "classmrs__lib_1_1Transformer.html#aca0408b710e4fa6e163ac23719d30fd1", null ], + [ "Transformer", "classmrs__lib_1_1Transformer.html#ae1a34c10d53059f9dfaf4c8c05a4f617", null ], + [ "Transformer", "classmrs__lib_1_1Transformer.html#a561b0c5342c38dea6071ab400b8eaae4", null ], + [ "beQuiet", "classmrs__lib_1_1Transformer.html#ab1e3fff472e6c6320a41d6f6ca331ca0", null ], + [ "getTransform", "classmrs__lib_1_1Transformer.html#a73ce6b60499d9ed491859a444f8d8afd", null ], + [ "getTransform", "classmrs__lib_1_1Transformer.html#a3a29dfb385f1b9c4deee695181880995", null ], + [ "operator=", "classmrs__lib_1_1Transformer.html#a6c4c846758bf173c7aeb488c8ff773b1", null ], + [ "resolveFrame", "classmrs__lib_1_1Transformer.html#aa4cf06770b355a01c66f227363a4967f", null ], + [ "retryLookupNewest", "classmrs__lib_1_1Transformer.html#abef2a59ed83e09ab103c060abb31dbb1", null ], + [ "setDefaultFrame", "classmrs__lib_1_1Transformer.html#a16a54cd35b1f071a80197cbccccfe9c0", null ], + [ "setDefaultPrefix", "classmrs__lib_1_1Transformer.html#a5d6f4288d53f09474c92bda26d0c9f55", null ], + [ "setLatLon", "classmrs__lib_1_1Transformer.html#a54764308675cc6df1782954870e1f3c2", null ], + [ "setLookupTimeout", "classmrs__lib_1_1Transformer.html#ac073019d60f1d9c6d48a0c207bafb678", null ], + [ "transform", "classmrs__lib_1_1Transformer.html#a8b05fe85c78f490b938bbf3d5884fce4", null ], + [ "transform", "classmrs__lib_1_1Transformer.html#a6509524feeb70fe794964b7462f28409", null ], + [ "transform", "classmrs__lib_1_1Transformer.html#a8a66075edc7025976292ebd401d7de16", null ], + [ "transformAsPoint", "classmrs__lib_1_1Transformer.html#ae56ae48888d4fcaf21c912ed491b35d1", null ], + [ "transformAsPoint", "classmrs__lib_1_1Transformer.html#ab1533c559b6c94b406322bfbfc700ef7", null ], + [ "transformAsVector", "classmrs__lib_1_1Transformer.html#af17729e67e82876f6bbce2d5cec55613", null ], + [ "transformAsVector", "classmrs__lib_1_1Transformer.html#a1c71e387e846a2591616e83a88071d24", null ], + [ "transformSingle", "classmrs__lib_1_1Transformer.html#a2c45ff29ac5f482ba9b9c2537d82b8fb", null ], + [ "transformSingle", "classmrs__lib_1_1Transformer.html#a58e8e6d80098e192a0d415a14c6deec0", null ], + [ "transformSingle", "classmrs__lib_1_1Transformer.html#a4d01ec1804bb492694d328704dada907", null ], + [ "transformSingle", "classmrs__lib_1_1Transformer.html#a5afde5d58bc9a558cba5da9e0c2d4d1b", null ], + [ "transformSingle", "classmrs__lib_1_1Transformer.html#a7cea399425c4a51a676ba5aa285612d4", null ], + [ "transformSingle", "classmrs__lib_1_1Transformer.html#a623af4e8100b71ac700ad5ffac96d2e2", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1UKF-members.html b/classmrs__lib_1_1UKF-members.html new file mode 100644 index 00000000..06f91d2f --- /dev/null +++ b/classmrs__lib_1_1UKF-members.html @@ -0,0 +1,145 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::UKF< n_states, n_inputs, n_measurements > Member List
+
+
+ +

This is the complete list of members for mrs_lib::UKF< n_states, n_inputs, n_measurements >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Base_class typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >protected
computeInverse(const Pzz_t &Pzz) const (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
computeKalmanGain([[maybe_unused]] const x_t &x, [[maybe_unused]] const z_t &inn, const K_t &Pxz, const Pzz_t &Pzz) const (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protectedvirtual
computePaSqrt(const P_t &P) const (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
computeSigmas(const x_t &x, const P_t &P) const (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
computeWeights() (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
correct(const statecov_t &sc, const z_t &z, const R_t &R) const overridemrs_lib::UKF< n_states, n_inputs, n_measurements >virtual
mrs_lib::KalmanFilter::correct(const statecov_t &sc, const z_t &z, const R_t &R) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >privatepure virtual
K_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >protected
mmrs_lib::UKF< n_states, n_inputs, n_measurements >protectedstatic
m_alpha (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
m_beta (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
m_kappa (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
m_lambda (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
m_observation_model (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
m_transition_model (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
m_Wc (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
m_Wm (defined in mrs_lib::UKF< n_states, n_inputs, n_measurements >)mrs_lib::UKF< n_states, n_inputs, n_measurements >protected
nmrs_lib::UKF< n_states, n_inputs, n_measurements >protectedstatic
observation_model_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >
pmrs_lib::UKF< n_states, n_inputs, n_measurements >protectedstatic
P_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >
predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const overridemrs_lib::UKF< n_states, n_inputs, n_measurements >virtual
mrs_lib::KalmanFilter::predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >privatepure virtual
Pzz_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >protected
Q_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >
R_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >
setConstants(const double alpha, const double kappa, const double beta)mrs_lib::UKF< n_states, n_inputs, n_measurements >
setObservationModel(const observation_model_t &observation_model)mrs_lib::UKF< n_states, n_inputs, n_measurements >
setTransitionModel(const transition_model_t &transition_model)mrs_lib::UKF< n_states, n_inputs, n_measurements >
statecov_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >
transition_model_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >
u_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >
UKF()mrs_lib::UKF< n_states, n_inputs, n_measurements >
UKF(const transition_model_t &transition_model, const observation_model_t &observation_model, const double alpha=1e-3, const double kappa=1, const double beta=2)mrs_lib::UKF< n_states, n_inputs, n_measurements >
wmrs_lib::UKF< n_states, n_inputs, n_measurements >protectedstatic
W_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >
X_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >protected
x_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >
z_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >
Z_t typedefmrs_lib::UKF< n_states, n_inputs, n_measurements >protected
+
+ + + + diff --git a/classmrs__lib_1_1UKF.html b/classmrs__lib_1_1UKF.html new file mode 100644 index 00000000..32356b72 --- /dev/null +++ b/classmrs__lib_1_1UKF.html @@ -0,0 +1,626 @@ + + + + + + + +mrs_lib: mrs_lib::UKF< n_states, n_inputs, n_measurements > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::UKF< n_states, n_inputs, n_measurements > Class Template Reference
+
+
+ +

Implementation of the Unscented Kalman filter [4]. + More...

+ +

#include <ukf.h>

+
+ + Inheritance diagram for mrs_lib::UKF< n_states, n_inputs, n_measurements >:
+
+
+ +
+ + Collaboration diagram for mrs_lib::UKF< n_states, n_inputs, n_measurements >:
+
+
+ + + + + + + + + +

+Classes

struct  inverse_exception
 is thrown when taking the inverse of a matrix fails during kalman gain calculation More...
 
struct  square_root_exception
 is thrown when taking the square root of a matrix fails during sigma generation More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using x_t = typename Base_class::x_t
 state vector n*1 typedef
 
+using u_t = typename Base_class::u_t
 input vector m*1 typedef
 
+using z_t = typename Base_class::z_t
 measurement vector p*1 typedef
 
+using P_t = typename Base_class::P_t
 state covariance n*n typedef
 
+using R_t = typename Base_class::R_t
 measurement covariance p*p typedef
 
+using Q_t = typename Base_class::Q_t
 process covariance n*n typedef
 
+using W_t = typename Eigen::Matrix< double, w, 1 >
 weights vector (2n+1)*1 typedef
 
+using statecov_t = typename Base_class::statecov_t
 typedef of a helper struct for state and covariance
 
+using transition_model_t = typename std::function< x_t(const x_t &, const u_t &, double)>
 function of the state transition model typedef
 
+using observation_model_t = typename std::function< z_t(const x_t &)>
 function of the observation model typedef
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 UKF ()
 Convenience default constructor. More...
 
 UKF (const transition_model_t &transition_model, const observation_model_t &observation_model, const double alpha=1e-3, const double kappa=1, const double beta=2)
 The main constructor. More...
 
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const override
 Implements the state correction step (measurement update). More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const override
 Implements the state prediction step (time update). More...
 
void setConstants (const double alpha, const double kappa, const double beta)
 Changes the Unscented Transform parameters. More...
 
void setTransitionModel (const transition_model_t &transition_model)
 Changes the transition model function. More...
 
void setObservationModel (const observation_model_t &observation_model)
 Changes the observation model function. More...
 
+ + + + + + + + + + + + + + + + +

+Protected Types

+using Base_class = KalmanFilter< n, m, p >
 Base class of this class.
 
+using X_t = typename Eigen::Matrix< double, n, w >
 State sigma points matrix.
 
+using Z_t = typename Eigen::Matrix< double, p, w >
 Measurement sigma points matrix.
 
+using Pzz_t = typename Eigen::Matrix< double, p, p >
 Pzz helper matrix.
 
+using K_t = typename Eigen::Matrix< double, n, p >
 Kalman gain matrix.
 
+ + + + + + + + + + + +

+Protected Member Functions

+void computeWeights ()
 
+X_t computeSigmas (const x_t &x, const P_t &P) const
 
+P_t computePaSqrt (const P_t &P) const
 
+Pzz_t computeInverse (const Pzz_t &Pzz) const
 
+virtual K_t computeKalmanGain ([[maybe_unused]] const x_t &x, [[maybe_unused]] const z_t &inn, const K_t &Pxz, const Pzz_t &Pzz) const
 
+ + + + + + + + + + + + + + + + + +

+Protected Attributes

+double m_alpha
 
+double m_kappa
 
+double m_beta
 
+double m_lambda
 
+W_t m_Wm
 
+W_t m_Wc
 
+transition_model_t m_transition_model
 
+observation_model_t m_observation_model
 
+ + + + + + + + + + + + + +

+Static Protected Attributes

+static constexpr int n = n_states
 Length of the state vector of the system.
 
+static constexpr int m = n_inputs
 Length of the input vector of the system.
 
+static constexpr int p = n_measurements
 Length of the measurement vector of the system.
 
+static constexpr int w = 2 * n + 1
 Number of sigma points/weights.
 
+

Detailed Description

+

template<int n_states, int n_inputs, int n_measurements>
+class mrs_lib::UKF< n_states, n_inputs, n_measurements >

+ +

Implementation of the Unscented Kalman filter [4].

+

The Unscented Kalman filter (abbreviated UKF, [4]) is a variant of the Kalman filter, which may be used for state filtration or estimation of non-linear systems as opposed to the Linear Kalman Filter (which is implemented in LKF). The UKF tends to be more accurate than the simpler Extended Kalman Filter, espetially for highly non-linear systems. However, it is generally less stable than the LKF because of the extra matrix square root in the sigma points calculation, so it is recommended to use LKF for linear systems.

+

The UKF C++ class itself is templated. This has its advantages and disadvantages. Main disadvantage is that it may be harder to use if you're not familiar with C++ templates, which, admittedly, can get somewhat messy, espetially during compilation. Another disadvantage is that if used unwisely, the compilation times can get much higher when using templates. The main advantage is compile-time checking (if it compiles, then it has a lower chance of crashing at runtime) and enabling more effective optimalizations during compilation. Also in case of Eigen, the code is arguably more readable when you use aliases to the specific Matrix instances instead of having Eigen::MatrixXd and Eigen::VectorXd everywhere.

+
Template Parameters
+ + + + +
n_statesnumber of states of the system (length of the $ \mathbf{x} $ vector).
n_inputsnumber of inputs of the system (length of the $ \mathbf{u} $ vector).
n_measurementsnumber of measurements of the system (length of the $ \mathbf{z} $ vector).
+
+
+
Examples
ukf/example.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ UKF() [1/2]

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + +
mrs_lib::UKF< n_states, n_inputs, n_measurements >::UKF
+
+ +

Convenience default constructor.

+

This constructor should not be used if applicable. If used, the main constructor has to be called afterwards, otherwise the UKF object is invalid (not initialized).

+ +
+
+ +

◆ UKF() [2/2]

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::UKF< n_states, n_inputs, n_measurements >::UKF (const transition_model_ttransition_model,
const observation_model_tobservation_model,
const double alpha = 1e-3,
const double kappa = 1,
const double beta = 2 
)
+
+ +

The main constructor.

+
Parameters
+ + + + + + +
alphaScaling parameter of the sigma generation (a small positive value, e.g. 1e-3).
kappaSecondary scaling parameter of the sigma generation (usually set to 0 or 1).
betaIncorporates prior knowledge about the distribution (for Gaussian distribution, 2 is optimal).
transition_modelState transition model function.
observation_modelObservation model function.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ correct()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
UKF< n_states, n_inputs, n_measurements >::statecov_t mrs_lib::UKF< n_states, n_inputs, n_measurements >::correct (const statecov_tsc,
const z_tz,
const R_tR 
) const
+
+overridevirtual
+
+ +

Implements the state correction step (measurement update).

+
Parameters
+ + + + +
scPrevious estimate of the state and covariance.
zMeasurement vector.
RMeasurement covariance matrix.
+
+
+
Returns
The state and covariance after applying the correction step.
+ +

Reimplemented in mrs_lib::NCUKF< n_states, n_inputs, n_measurements >.

+ +
+
+ +

◆ predict()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UKF< n_states, n_inputs, n_measurements >::statecov_t mrs_lib::UKF< n_states, n_inputs, n_measurements >::predict (const statecov_tsc,
const u_tu,
const Q_tQ,
double dt 
) const
+
+overridevirtual
+
+ +

Implements the state prediction step (time update).

+
Parameters
+ + + + + +
scPrevious estimate of the state and covariance.
uInput vector.
QProcess noise covariance matrix.
dtDuration since the previous estimate.
+
+
+
Returns
The state and covariance after applying the correction step.
+ +
+
+ +

◆ setConstants()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + + + + + + + + + + + + + + + + + + + + +
void mrs_lib::UKF< n_states, n_inputs, n_measurements >::setConstants (const double alpha,
const double kappa,
const double beta 
)
+
+ +

Changes the Unscented Transform parameters.

+
Parameters
+ + + + +
alphaScaling parameter of the sigma generation (a small positive value - e.g. 1e-3).
kappaSecondary scaling parameter of the sigma generation (usually set to 0 or 1).
betaIncorporates prior knowledge about the distribution (for Gaussian distribution, 2 is optimal).
+
+
+ +
+
+ +

◆ setObservationModel()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + + + + +
void mrs_lib::UKF< n_states, n_inputs, n_measurements >::setObservationModel (const observation_model_tobservation_model)
+
+ +

Changes the observation model function.

+
Parameters
+ + +
observation_modelthe new observation model
+
+
+ +
+
+ +

◆ setTransitionModel()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + + + + +
void mrs_lib::UKF< n_states, n_inputs, n_measurements >::setTransitionModel (const transition_model_ttransition_model)
+
+ +

Changes the transition model function.

+
Parameters
+ + +
transition_modelthe new transition model
+
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1UKF.js b/classmrs__lib_1_1UKF.js new file mode 100644 index 00000000..07a159b3 --- /dev/null +++ b/classmrs__lib_1_1UKF.js @@ -0,0 +1,40 @@ +var classmrs__lib_1_1UKF = +[ + [ "inverse_exception", "structmrs__lib_1_1UKF_1_1inverse__exception.html", "structmrs__lib_1_1UKF_1_1inverse__exception" ], + [ "square_root_exception", "structmrs__lib_1_1UKF_1_1square__root__exception.html", "structmrs__lib_1_1UKF_1_1square__root__exception" ], + [ "Base_class", "classmrs__lib_1_1UKF.html#ae5a0eb2f31131ed4cec117d4a1000080", null ], + [ "K_t", "classmrs__lib_1_1UKF.html#ace5416fd8ac52fba822337bceaf751a7", null ], + [ "observation_model_t", "classmrs__lib_1_1UKF.html#ac515ea8c688d7ee67250c384417f9ab9", null ], + [ "P_t", "classmrs__lib_1_1UKF.html#ac1128f5d7fa36305a52859a752a97fda", null ], + [ "Pzz_t", "classmrs__lib_1_1UKF.html#af11dc75b608a43930e8289c51e8ab7c6", null ], + [ "Q_t", "classmrs__lib_1_1UKF.html#abd8f845f1b3f138949bd95c7dc12e011", null ], + [ "R_t", "classmrs__lib_1_1UKF.html#a0af0d9a246df0798b1cb1308cec82fd2", null ], + [ "statecov_t", "classmrs__lib_1_1UKF.html#a604c0bfee69ee5a34dc4412af3cc6e53", null ], + [ "transition_model_t", "classmrs__lib_1_1UKF.html#a986f17f015282a33b140af4adabce091", null ], + [ "u_t", "classmrs__lib_1_1UKF.html#a6589d6a1f5eba355f1bec91e99826b71", null ], + [ "W_t", "classmrs__lib_1_1UKF.html#aca628bd6d14b59b9d0a10652a2665a32", null ], + [ "X_t", "classmrs__lib_1_1UKF.html#a1435f2ed4e333151990355813cee95ba", null ], + [ "x_t", "classmrs__lib_1_1UKF.html#a5ab9d25f7b2470c7abeacda7f8b80630", null ], + [ "Z_t", "classmrs__lib_1_1UKF.html#a06a3fae37e8a0613d8169b638c4c0001", null ], + [ "z_t", "classmrs__lib_1_1UKF.html#a7a68877ffa7bd8bb10f16d1f104e0a73", null ], + [ "UKF", "classmrs__lib_1_1UKF.html#acf37d546ec0e03f1ef4c031f96057733", null ], + [ "UKF", "classmrs__lib_1_1UKF.html#a43f196bc0b8ef4dd75feba3b025576cb", null ], + [ "computeInverse", "classmrs__lib_1_1UKF.html#a2d0824ac1a567b4542a6cc26d0672fba", null ], + [ "computeKalmanGain", "classmrs__lib_1_1UKF.html#ad22d268a16cf223c7853225038f02ee6", null ], + [ "computePaSqrt", "classmrs__lib_1_1UKF.html#ac2eb18554e24af946d18b3b1f56d6cd9", null ], + [ "computeSigmas", "classmrs__lib_1_1UKF.html#a2655c5ad51b0a5c3a7e07430637bd216", null ], + [ "computeWeights", "classmrs__lib_1_1UKF.html#a82f19aab6f21c1c8794024b9ae9d88c9", null ], + [ "correct", "classmrs__lib_1_1UKF.html#ad31a0a6b6c1ea433daa0bae83e6fb6e4", null ], + [ "predict", "classmrs__lib_1_1UKF.html#a4c9c1e158bb4b6739b8bfdbdc1369c41", null ], + [ "setConstants", "classmrs__lib_1_1UKF.html#a646b7755aaa478bb86d89e1923d5ed2a", null ], + [ "setObservationModel", "classmrs__lib_1_1UKF.html#a272c7435d05b9a8867df4bd131f01177", null ], + [ "setTransitionModel", "classmrs__lib_1_1UKF.html#a724d2e508dd45e4e6cb7b08b023cae34", null ], + [ "m_alpha", "classmrs__lib_1_1UKF.html#a6fc172677f265d23c58dd44d24f9d00a", null ], + [ "m_beta", "classmrs__lib_1_1UKF.html#add72fa54f7a0e53cb8d6c804d5bec410", null ], + [ "m_kappa", "classmrs__lib_1_1UKF.html#afc26c675257c6be3eb3d09ac2eece61f", null ], + [ "m_lambda", "classmrs__lib_1_1UKF.html#a6b89b8f55bb6574760d2b4eb4281b35a", null ], + [ "m_observation_model", "classmrs__lib_1_1UKF.html#af6339fd2d89c4e7223c2646ec7cb490c", null ], + [ "m_transition_model", "classmrs__lib_1_1UKF.html#ad1ca73c805660d45a2c77393f7a14374", null ], + [ "m_Wc", "classmrs__lib_1_1UKF.html#abecb7ce280f0f1ff79d6b094c7a78299", null ], + [ "m_Wm", "classmrs__lib_1_1UKF.html#a135f047421ef49fb886a3259bf545096", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1UKF__coll__graph.map b/classmrs__lib_1_1UKF__coll__graph.map new file mode 100644 index 00000000..3093075c --- /dev/null +++ b/classmrs__lib_1_1UKF__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classmrs__lib_1_1UKF__coll__graph.md5 b/classmrs__lib_1_1UKF__coll__graph.md5 new file mode 100644 index 00000000..944f7113 --- /dev/null +++ b/classmrs__lib_1_1UKF__coll__graph.md5 @@ -0,0 +1 @@ +63ef0b009c70a1fa3d5a344012b7d3b1 \ No newline at end of file diff --git a/classmrs__lib_1_1UKF__coll__graph.png b/classmrs__lib_1_1UKF__coll__graph.png new file mode 100644 index 00000000..262070c2 Binary files /dev/null and b/classmrs__lib_1_1UKF__coll__graph.png differ diff --git a/classmrs__lib_1_1UKF__inherit__graph.map b/classmrs__lib_1_1UKF__inherit__graph.map new file mode 100644 index 00000000..5419e566 --- /dev/null +++ b/classmrs__lib_1_1UKF__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmrs__lib_1_1UKF__inherit__graph.md5 b/classmrs__lib_1_1UKF__inherit__graph.md5 new file mode 100644 index 00000000..1ca0fbd8 --- /dev/null +++ b/classmrs__lib_1_1UKF__inherit__graph.md5 @@ -0,0 +1 @@ +c8291fc1663bc04ac7dc0f6f0aab5ec2 \ No newline at end of file diff --git a/classmrs__lib_1_1UKF__inherit__graph.png b/classmrs__lib_1_1UKF__inherit__graph.png new file mode 100644 index 00000000..343ee820 Binary files /dev/null and b/classmrs__lib_1_1UKF__inherit__graph.png differ diff --git a/classmrs__lib_1_1Vector3Converter-members.html b/classmrs__lib_1_1Vector3Converter-members.html new file mode 100644 index 00000000..c5b07848 --- /dev/null +++ b/classmrs__lib_1_1Vector3Converter-members.html @@ -0,0 +1,111 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::Vector3Converter Member List
+
+
+ +

This is the complete list of members for mrs_lib::Vector3Converter, including all inherited members.

+ + + + + + + + +
operator Eigen::Vector3d() constmrs_lib::Vector3Converter
operator geometry_msgs::Vector3() constmrs_lib::Vector3Converter
operator tf2::Vector3() constmrs_lib::Vector3Converter
Vector3Converter(const tf2::Vector3 &vector3)mrs_lib::Vector3Converterinline
Vector3Converter(const Eigen::Vector3d &vector3)mrs_lib::Vector3Converter
Vector3Converter(const geometry_msgs::Vector3 &vector3)mrs_lib::Vector3Converter
Vector3Converter(const double &x, const double &y, const double &z)mrs_lib::Vector3Converter
+
+ + + + diff --git a/classmrs__lib_1_1Vector3Converter.html b/classmrs__lib_1_1Vector3Converter.html new file mode 100644 index 00000000..1f31702c --- /dev/null +++ b/classmrs__lib_1_1Vector3Converter.html @@ -0,0 +1,333 @@ + + + + + + + +mrs_lib: mrs_lib::Vector3Converter Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::Vector3Converter Class Reference
+
+
+ +

Converter of Vector3 representations. Instantiate it with any type of vector3 in constructor and convert it by assigning it to any other type of vector3 variable. + More...

+ +

#include <attitude_converter.h>

+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Vector3Converter (const tf2::Vector3 &vector3)
 Constructor with tf2::Vector3. More...
 
 Vector3Converter (const Eigen::Vector3d &vector3)
 Constructor with Eigen::Vector3. More...
 
 Vector3Converter (const geometry_msgs::Vector3 &vector3)
 Constructor with geometry_msgs::Vector3. More...
 
 Vector3Converter (const double &x, const double &y, const double &z)
 Constructor with doubles: x, y, z. More...
 
 operator tf2::Vector3 () const
 typecast overloaded for tf2::Vector3 More...
 
 operator Eigen::Vector3d () const
 typecast overloaded for Eigen::Vector3 More...
 
 operator geometry_msgs::Vector3 () const
 typecast overloaded for geometry_msgs::Vector3 More...
 
+

Detailed Description

+

Converter of Vector3 representations. Instantiate it with any type of vector3 in constructor and convert it by assigning it to any other type of vector3 variable.

+

Constructor & Destructor Documentation

+ +

◆ Vector3Converter() [1/4]

+ +
+
+ + + + + +
+ + + + + + + + +
mrs_lib::Vector3Converter::Vector3Converter (const tf2::Vector3 & vector3)
+
+inline
+
+ +

Constructor with tf2::Vector3.

+
Parameters
+ + +
vector3
+
+
+ +
+
+ +

◆ Vector3Converter() [2/4]

+ +
+
+ + + + + + + + +
mrs_lib::Vector3Converter::Vector3Converter (const Eigen::Vector3d & vector3)
+
+ +

Constructor with Eigen::Vector3.

+
Parameters
+ + +
vector3
+
+
+ +
+
+ +

◆ Vector3Converter() [3/4]

+ +
+
+ + + + + + + + +
mrs_lib::Vector3Converter::Vector3Converter (const geometry_msgs::Vector3 & vector3)
+
+ +

Constructor with geometry_msgs::Vector3.

+
Parameters
+ + +
vector3
+
+
+ +
+
+ +

◆ Vector3Converter() [4/4]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::Vector3Converter::Vector3Converter (const double & x,
const double & y,
const double & z 
)
+
+ +

Constructor with doubles: x, y, z.

+
Parameters
+ + + + +
x
y
z
+
+
+ +
+
+

Member Function Documentation

+ +

◆ operator Eigen::Vector3d()

+ +
+
+ + + + + + + +
mrs_lib::Vector3Converter::operator Eigen::Vector3d () const
+
+ +

typecast overloaded for Eigen::Vector3

+
Returns
vector3
+ +
+
+ +

◆ operator geometry_msgs::Vector3()

+ +
+
+ + + + + + + +
mrs_lib::Vector3Converter::operator geometry_msgs::Vector3 () const
+
+ +

typecast overloaded for geometry_msgs::Vector3

+
Returns
vector3
+ +
+
+ +

◆ operator tf2::Vector3()

+ +
+
+ + + + + + + +
mrs_lib::Vector3Converter::operator tf2::Vector3 () const
+
+ +

typecast overloaded for tf2::Vector3

+
Returns
vector3
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1Vector3Converter.js b/classmrs__lib_1_1Vector3Converter.js new file mode 100644 index 00000000..d46afbc9 --- /dev/null +++ b/classmrs__lib_1_1Vector3Converter.js @@ -0,0 +1,10 @@ +var classmrs__lib_1_1Vector3Converter = +[ + [ "Vector3Converter", "classmrs__lib_1_1Vector3Converter.html#ac5cf91c41293661ea55749d55aec4d48", null ], + [ "Vector3Converter", "classmrs__lib_1_1Vector3Converter.html#abf2c3e688787834522c8a99c374f656e", null ], + [ "Vector3Converter", "classmrs__lib_1_1Vector3Converter.html#aec2780b4e6f0b58ee2c465ab2338df17", null ], + [ "Vector3Converter", "classmrs__lib_1_1Vector3Converter.html#a3936cad709ed1018aba1d05d47639c80", null ], + [ "operator Eigen::Vector3d", "classmrs__lib_1_1Vector3Converter.html#a69c3a9a8dbcff2876e40d28022c019e3", null ], + [ "operator geometry_msgs::Vector3", "classmrs__lib_1_1Vector3Converter.html#a6f6edf59403aded9e3bffcd603cce5c0", null ], + [ "operator tf2::Vector3", "classmrs__lib_1_1Vector3Converter.html#a96b9daae53786acb4f52e09e8fb7bc8a", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1VisualObject-members.html b/classmrs__lib_1_1VisualObject-members.html new file mode 100644 index 00000000..64bdc549 --- /dev/null +++ b/classmrs__lib_1_1VisualObject-members.html @@ -0,0 +1,121 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::VisualObject Member List
+
+
+ +

This is the complete list of members for mrs_lib::VisualObject, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
getColors() const (defined in mrs_lib::VisualObject)mrs_lib::VisualObject
getID() const (defined in mrs_lib::VisualObject)mrs_lib::VisualObject
getPoints() const (defined in mrs_lib::VisualObject)mrs_lib::VisualObject
getType() const (defined in mrs_lib::VisualObject)mrs_lib::VisualObject
isTimedOut() const (defined in mrs_lib::VisualObject)mrs_lib::VisualObject
operator<(const VisualObject &other) const (defined in mrs_lib::VisualObject)mrs_lib::VisualObjectinline
operator==(const VisualObject &other) const (defined in mrs_lib::VisualObject)mrs_lib::VisualObjectinline
operator>(const VisualObject &other) const (defined in mrs_lib::VisualObject)mrs_lib::VisualObjectinline
VisualObject(const Eigen::Vector3d &point, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const unsigned long &id) (defined in mrs_lib::VisualObject)mrs_lib::VisualObject
VisualObject(const mrs_lib::geometry::Ray &ray, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const unsigned long &id) (defined in mrs_lib::VisualObject)mrs_lib::VisualObject
VisualObject(const mrs_lib::geometry::Triangle &triangle, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const bool filled, const unsigned long &id) (defined in mrs_lib::VisualObject)mrs_lib::VisualObject
VisualObject(const mrs_lib::geometry::Rectangle &rectangle, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const bool filled, const unsigned long &id) (defined in mrs_lib::VisualObject)mrs_lib::VisualObject
VisualObject(const mrs_lib::geometry::Cuboid &cuboid, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const bool filled, const unsigned long &id) (defined in mrs_lib::VisualObject)mrs_lib::VisualObject
VisualObject(const mrs_lib::geometry::Ellipse &ellipse, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const bool filled, const unsigned long &id, const int num_points=DEFAULT_ELLIPSE_POINTS) (defined in mrs_lib::VisualObject)mrs_lib::VisualObject
VisualObject(const mrs_lib::geometry::Cylinder &cylinder, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const bool filled, const bool capped, const unsigned long &id, const int num_sides=DEFAULT_ELLIPSE_POINTS) (defined in mrs_lib::VisualObject)mrs_lib::VisualObject
VisualObject(const mrs_lib::geometry::Cone &cone, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const bool filled, const bool capped, const unsigned long &id, const int num_sides=DEFAULT_ELLIPSE_POINTS) (defined in mrs_lib::VisualObject)mrs_lib::VisualObject
VisualObject(const mrs_msgs::TrajectoryReference &traj, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const bool filled, const unsigned long &id) (defined in mrs_lib::VisualObject)mrs_lib::VisualObject
+
+ + + + diff --git a/classmrs__lib_1_1VisualObject.html b/classmrs__lib_1_1VisualObject.html new file mode 100644 index 00000000..2770ccdf --- /dev/null +++ b/classmrs__lib_1_1VisualObject.html @@ -0,0 +1,164 @@ + + + + + + + +mrs_lib: mrs_lib::VisualObject Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::VisualObject Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

VisualObject (const Eigen::Vector3d &point, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const unsigned long &id)
 
VisualObject (const mrs_lib::geometry::Ray &ray, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const unsigned long &id)
 
VisualObject (const mrs_lib::geometry::Triangle &triangle, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const bool filled, const unsigned long &id)
 
VisualObject (const mrs_lib::geometry::Rectangle &rectangle, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const bool filled, const unsigned long &id)
 
VisualObject (const mrs_lib::geometry::Cuboid &cuboid, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const bool filled, const unsigned long &id)
 
VisualObject (const mrs_lib::geometry::Ellipse &ellipse, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const bool filled, const unsigned long &id, const int num_points=DEFAULT_ELLIPSE_POINTS)
 
VisualObject (const mrs_lib::geometry::Cylinder &cylinder, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const bool filled, const bool capped, const unsigned long &id, const int num_sides=DEFAULT_ELLIPSE_POINTS)
 
VisualObject (const mrs_lib::geometry::Cone &cone, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const bool filled, const bool capped, const unsigned long &id, const int num_sides=DEFAULT_ELLIPSE_POINTS)
 
VisualObject (const mrs_msgs::TrajectoryReference &traj, const double r, const double g, const double b, const double a, const ros::Duration &timeout, const bool filled, const unsigned long &id)
 
+unsigned long getID () const
 
+int getType () const
 
+bool isTimedOut () const
 
+const std::vector< geometry_msgs::Point > getPoints () const
 
+const std::vector< std_msgs::ColorRGBA > getColors () const
 
+bool operator< (const VisualObject &other) const
 
+bool operator> (const VisualObject &other) const
 
+bool operator== (const VisualObject &other) const
 
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1VisualObject.js b/classmrs__lib_1_1VisualObject.js new file mode 100644 index 00000000..6644a983 --- /dev/null +++ b/classmrs__lib_1_1VisualObject.js @@ -0,0 +1,20 @@ +var classmrs__lib_1_1VisualObject = +[ + [ "VisualObject", "classmrs__lib_1_1VisualObject.html#a537ad5e03d10f706e84aeb1a6df41dc2", null ], + [ "VisualObject", "classmrs__lib_1_1VisualObject.html#a505ca7f7b51e0f8efb819bf053c735da", null ], + [ "VisualObject", "classmrs__lib_1_1VisualObject.html#aad92d42138c0dad5afd9130123ca2127", null ], + [ "VisualObject", "classmrs__lib_1_1VisualObject.html#ae8e57406273b7d5c00f8ecaba37ee81c", null ], + [ "VisualObject", "classmrs__lib_1_1VisualObject.html#a449c8ae671d076894e96ed63fcec510b", null ], + [ "VisualObject", "classmrs__lib_1_1VisualObject.html#a6f616e3ec81d7002c723894c626d5d82", null ], + [ "VisualObject", "classmrs__lib_1_1VisualObject.html#a5a36ccd92270bab79ac997a83d003c41", null ], + [ "VisualObject", "classmrs__lib_1_1VisualObject.html#ae564f914d9ebd0356ba34895fe463ec2", null ], + [ "VisualObject", "classmrs__lib_1_1VisualObject.html#a9ed70bde3a0a02eec25631f98398fb04", null ], + [ "getColors", "classmrs__lib_1_1VisualObject.html#a9d899ed5c052674c63659b4e78387c2d", null ], + [ "getID", "classmrs__lib_1_1VisualObject.html#aed4d30ede23a86744b3a4f71f5d3d3f4", null ], + [ "getPoints", "classmrs__lib_1_1VisualObject.html#a9114ebc384c0f43adbfad0032f1bd005", null ], + [ "getType", "classmrs__lib_1_1VisualObject.html#a3f49d662c10bffb3e813adb2cb0359c9", null ], + [ "isTimedOut", "classmrs__lib_1_1VisualObject.html#af6fb444f6a341a8c00678b501a00a33d", null ], + [ "operator<", "classmrs__lib_1_1VisualObject.html#a296a929f9957021c1dbf0f22e12a6e04", null ], + [ "operator==", "classmrs__lib_1_1VisualObject.html#a5a9fccab5d43bb63a3b1392476f8e2f4", null ], + [ "operator>", "classmrs__lib_1_1VisualObject.html#a3d3550fd1da2c29f60b9e61e7a586103", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1geometry_1_1Cone-members.html b/classmrs__lib_1_1geometry_1_1Cone-members.html new file mode 100644 index 00000000..82c127f4 --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Cone-members.html @@ -0,0 +1,114 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::geometry::Cone Member List
+
+
+ +

This is the complete list of members for mrs_lib::geometry::Cone, including all inherited members.

+ + + + + + + + + + + +
center() constmrs_lib::geometry::Cone
Cone()mrs_lib::geometry::Cone
Cone(Eigen::Vector3d origin_point, double angle, double height, Eigen::Vector3d orientation)mrs_lib::geometry::Cone
direction() constmrs_lib::geometry::Cone
getCap() constmrs_lib::geometry::Cone
h() constmrs_lib::geometry::Cone
origin() constmrs_lib::geometry::Cone
projectPoint(const Eigen::Vector3d &point) constmrs_lib::geometry::Cone
theta() constmrs_lib::geometry::Cone
~Cone()mrs_lib::geometry::Cone
+
+ + + + diff --git a/classmrs__lib_1_1geometry_1_1Cone.html b/classmrs__lib_1_1geometry_1_1Cone.html new file mode 100644 index 00000000..a3ec7c4b --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Cone.html @@ -0,0 +1,352 @@ + + + + + + + +mrs_lib: mrs_lib::geometry::Cone Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::geometry::Cone Class Reference
+
+
+ +

geometric representaiton of a cone + More...

+ +

#include <shapes.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Cone ()
 constructor without setting the internal variables
 
~Cone ()
 destructor
 
 Cone (Eigen::Vector3d origin_point, double angle, double height, Eigen::Vector3d orientation)
 constructor from a given origin point (tip of the cone), angle, height and orientation More...
 
const Eigen::Vector3d origin () const
 getter for the tip point More...
 
const Eigen::Vector3d direction () const
 getter for the direction. Normalized direction from origin towards base More...
 
const Eigen::Vector3d center () const
 getter for the center point. Center point lies in half of the body height More...
 
double theta () const
 getter for angle between body height and body side More...
 
double h () const
 getter for body height More...
 
const Ellipse getCap () const
 getter for the cap of the cone More...
 
const std::optional< Eigen::Vector3d > projectPoint (const Eigen::Vector3d &point) const
 Project a 3D point orthogonally onto the Cone surface. More...
 
+

Detailed Description

+

geometric representaiton of a cone

+

Constructor & Destructor Documentation

+ +

◆ Cone()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::geometry::Cone::Cone (Eigen::Vector3d origin_point,
double angle,
double height,
Eigen::Vector3d orientation 
)
+
+ +

constructor from a given origin point (tip of the cone), angle, height and orientation

+
Parameters
+ + + + + +
origin_pointtip of the cone
angleangle between body height and side in radians
heightdistance between tip and base
orientationoffset from the default orientation. Default orientation is with body height aligned with Z axis, standing on the tip
+
+
+ +
+
+

Member Function Documentation

+ +

◆ center()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Cone::center () const
+
+ +

getter for the center point. Center point lies in half of the body height

+
Returns
vector3
+ +
+
+ +

◆ direction()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Cone::direction () const
+
+ +

getter for the direction. Normalized direction from origin towards base

+
Returns
vector3, normalized
+ +
+
+ +

◆ getCap()

+ +
+
+ + + + + + + +
const Ellipse mrs_lib::geometry::Cone::getCap () const
+
+ +

getter for the cap of the cone

+
Returns
ellipse representing the cap of the cone
+ +
+
+ +

◆ h()

+ +
+
+ + + + + + + +
double mrs_lib::geometry::Cone::h () const
+
+ +

getter for body height

+
Returns
+ +
+
+ +

◆ origin()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Cone::origin () const
+
+ +

getter for the tip point

+
Returns
vector3
+ +
+
+ +

◆ projectPoint()

+ +
+
+ + + + + + + + +
const std::optional< Eigen::Vector3d > mrs_lib::geometry::Cone::projectPoint (const Eigen::Vector3d & point) const
+
+ +

Project a 3D point orthogonally onto the Cone surface.

+
Parameters
+ + +
pointin 3D
+
+
+
Returns
projected point
+ +
+
+ +

◆ theta()

+ +
+
+ + + + + + + +
double mrs_lib::geometry::Cone::theta () const
+
+ +

getter for angle between body height and body side

+
Returns
angle in radians
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1geometry_1_1Cone.js b/classmrs__lib_1_1geometry_1_1Cone.js new file mode 100644 index 00000000..a0b72b5e --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Cone.js @@ -0,0 +1,13 @@ +var classmrs__lib_1_1geometry_1_1Cone = +[ + [ "Cone", "classmrs__lib_1_1geometry_1_1Cone.html#a27103a8552d930ae3a3a2513990d9399", null ], + [ "~Cone", "classmrs__lib_1_1geometry_1_1Cone.html#ae687be891abfb2db67245cd2c13f8586", null ], + [ "Cone", "classmrs__lib_1_1geometry_1_1Cone.html#a078bc613852240cbf2a0adb086d3d127", null ], + [ "center", "classmrs__lib_1_1geometry_1_1Cone.html#a2553c04b3dfef8dfceb938699e11f432", null ], + [ "direction", "classmrs__lib_1_1geometry_1_1Cone.html#aa973eb3025776015d9e542af7aea730f", null ], + [ "getCap", "classmrs__lib_1_1geometry_1_1Cone.html#a2e0546bb5ccb22ee88f1056dccc9a488", null ], + [ "h", "classmrs__lib_1_1geometry_1_1Cone.html#a319fa2045f6d56c94f3fa198bd7ae7fc", null ], + [ "origin", "classmrs__lib_1_1geometry_1_1Cone.html#a35b559777042218051ff46c3b7353232", null ], + [ "projectPoint", "classmrs__lib_1_1geometry_1_1Cone.html#a80223a2934d899aead407545c044e279", null ], + [ "theta", "classmrs__lib_1_1geometry_1_1Cone.html#a708721c0fde7cb53e7ba4e585a2d5743", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1geometry_1_1Cuboid-members.html b/classmrs__lib_1_1geometry_1_1Cuboid-members.html new file mode 100644 index 00000000..daa35390 --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Cuboid-members.html @@ -0,0 +1,113 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::geometry::Cuboid Member List
+
+
+ +

This is the complete list of members for mrs_lib::geometry::Cuboid, including all inherited members.

+ + + + + + + + + + +
center() constmrs_lib::geometry::Cuboid
Cuboid()mrs_lib::geometry::Cuboid
Cuboid(Eigen::Vector3d p0, Eigen::Vector3d p1, Eigen::Vector3d p2, Eigen::Vector3d p3, Eigen::Vector3d p4, Eigen::Vector3d p5, Eigen::Vector3d p6, Eigen::Vector3d p7)mrs_lib::geometry::Cuboid
Cuboid(std::vector< Eigen::Vector3d > points)mrs_lib::geometry::Cuboid
Cuboid(Eigen::Vector3d center, Eigen::Vector3d size, Eigen::Quaterniond orientation)mrs_lib::geometry::Cuboid
getRectangle(int face_idx) constmrs_lib::geometry::Cuboid
intersectionRay(Ray r, double epsilon=1e-4) constmrs_lib::geometry::Cuboid
vertices() constmrs_lib::geometry::Cuboid
~Cuboid()mrs_lib::geometry::Cuboid
+
+ + + + diff --git a/classmrs__lib_1_1geometry_1_1Cuboid.html b/classmrs__lib_1_1geometry_1_1Cuboid.html new file mode 100644 index 00000000..f2e5c3ad --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Cuboid.html @@ -0,0 +1,405 @@ + + + + + + + +mrs_lib: mrs_lib::geometry::Cuboid Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::geometry::Cuboid Class Reference
+
+
+ +

geometric representation of a cuboid + More...

+ +

#include <shapes.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Cuboid ()
 constructor for initialization with all points set to [0,0,0]
 
~Cuboid ()
 virtual destructor
 
 Cuboid (Eigen::Vector3d p0, Eigen::Vector3d p1, Eigen::Vector3d p2, Eigen::Vector3d p3, Eigen::Vector3d p4, Eigen::Vector3d p5, Eigen::Vector3d p6, Eigen::Vector3d p7)
 constructor from six provided points (vector3) More...
 
 Cuboid (std::vector< Eigen::Vector3d > points)
 constructor from a std::vector of provided points More...
 
 Cuboid (Eigen::Vector3d center, Eigen::Vector3d size, Eigen::Quaterniond orientation)
 constructor from a provided center point, size and orientation More...
 
const std::vector< Eigen::Vector3d > vertices () const
 getter for all vertices (vector3) of this cuboid More...
 
const Eigen::Vector3d center () const
 getter for the center point More...
 
const Rectangle getRectangle (int face_idx) const
 getter for one side corresponding to a provided index More...
 
const std::vector< Eigen::Vector3d > intersectionRay (Ray r, double epsilon=1e-4) const
 calculate the intersection between this cuboid and a provided ray within a given tolerance. Can result in 0, 1 or 2 intersection points More...
 
+

Detailed Description

+

geometric representation of a cuboid

+

Constructor & Destructor Documentation

+ +

◆ Cuboid() [1/3]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::geometry::Cuboid::Cuboid (Eigen::Vector3d p0,
Eigen::Vector3d p1,
Eigen::Vector3d p2,
Eigen::Vector3d p3,
Eigen::Vector3d p4,
Eigen::Vector3d p5,
Eigen::Vector3d p6,
Eigen::Vector3d p7 
)
+
+ +

constructor from six provided points (vector3)

+
Parameters
+ + + + + + + + + +
p0vector3
p1vector3
p2vector3
p3vector3
p4vector3
p5vector3
p6vector3
p7vector3
+
+
+ +
+
+ +

◆ Cuboid() [2/3]

+ +
+
+ + + + + + + + +
mrs_lib::geometry::Cuboid::Cuboid (std::vector< Eigen::Vector3d > points)
+
+ +

constructor from a std::vector of provided points

+
Parameters
+ + +
pointsstd::vector<vector3>
+
+
+ +
+
+ +

◆ Cuboid() [3/3]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::geometry::Cuboid::Cuboid (Eigen::Vector3d center,
Eigen::Vector3d size,
Eigen::Quaterniond orientation 
)
+
+ +

constructor from a provided center point, size and orientation

+
Parameters
+ + + + +
centervector3
sizevector3
orientationquaternion
+
+
+ +
+
+

Member Function Documentation

+ +

◆ center()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Cuboid::center () const
+
+ +

getter for the center point

+
Returns
vector3
+ +
+
+ +

◆ getRectangle()

+ +
+
+ + + + + + + + +
const Rectangle mrs_lib::geometry::Cuboid::getRectangle (int face_idx) const
+
+ +

getter for one side corresponding to a provided index

+
Parameters
+ + +
face_idxindex of the side to lookup points for
+
+
+
Returns
rectangle representing the cuboid side
+ +
+
+ +

◆ intersectionRay()

+ +
+
+ + + + + + + + + + + + + + + + + + +
const std::vector< Eigen::Vector3d > mrs_lib::geometry::Cuboid::intersectionRay (Ray r,
double epsilon = 1e-4 
) const
+
+ +

calculate the intersection between this cuboid and a provided ray within a given tolerance. Can result in 0, 1 or 2 intersection points

+
Parameters
+ + + +
rray to check intersection with
epsilontolerance for the calculation
+
+
+
Returns
std::vector<vector3> list of intersection points (depending on the geometry, can yield 0, 1 or 2 points)
+ +
+
+ +

◆ vertices()

+ +
+
+ + + + + + + +
const std::vector< Eigen::Vector3d > mrs_lib::geometry::Cuboid::vertices () const
+
+ +

getter for all vertices (vector3) of this cuboid

+
Returns
std::vector<vector3>
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1geometry_1_1Cuboid.js b/classmrs__lib_1_1geometry_1_1Cuboid.js new file mode 100644 index 00000000..db59ce75 --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Cuboid.js @@ -0,0 +1,12 @@ +var classmrs__lib_1_1geometry_1_1Cuboid = +[ + [ "Cuboid", "classmrs__lib_1_1geometry_1_1Cuboid.html#a31a698a34b8443596be58a06f3046c79", null ], + [ "~Cuboid", "classmrs__lib_1_1geometry_1_1Cuboid.html#a5a78508d282bd8d273d97f3055ae0357", null ], + [ "Cuboid", "classmrs__lib_1_1geometry_1_1Cuboid.html#a1dfbd69913658cddfc2394d8cfed8215", null ], + [ "Cuboid", "classmrs__lib_1_1geometry_1_1Cuboid.html#adcacc925347e73dbfd81529842ff3c21", null ], + [ "Cuboid", "classmrs__lib_1_1geometry_1_1Cuboid.html#a34b3cc64de7244e0b3ac2f71cdb22d95", null ], + [ "center", "classmrs__lib_1_1geometry_1_1Cuboid.html#a7ce6626c7018bdae2722073490c1729f", null ], + [ "getRectangle", "classmrs__lib_1_1geometry_1_1Cuboid.html#a4279ad2916689b183e9647fbede9bcfb", null ], + [ "intersectionRay", "classmrs__lib_1_1geometry_1_1Cuboid.html#adfde2a501c9806bd6e6e99dcf0cac6ff", null ], + [ "vertices", "classmrs__lib_1_1geometry_1_1Cuboid.html#ae03413de879b1dd07df7a8f26b0a75f2", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1geometry_1_1Cylinder-members.html b/classmrs__lib_1_1geometry_1_1Cylinder-members.html new file mode 100644 index 00000000..afbd26d7 --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Cylinder-members.html @@ -0,0 +1,114 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::geometry::Cylinder Member List
+
+
+ +

This is the complete list of members for mrs_lib::geometry::Cylinder, including all inherited members.

+ + + + + + + + + + + +
BOTTOM enum value (defined in mrs_lib::geometry::Cylinder)mrs_lib::geometry::Cylinder
center() constmrs_lib::geometry::Cylinder
Cylinder()mrs_lib::geometry::Cylinder
Cylinder(Eigen::Vector3d center, double radius, double height, Eigen::Quaterniond orientation)mrs_lib::geometry::Cylinder
getCap(int index) constmrs_lib::geometry::Cylinder
h() constmrs_lib::geometry::Cylinder
orientation() constmrs_lib::geometry::Cylinder
r() constmrs_lib::geometry::Cylinder
TOP enum value (defined in mrs_lib::geometry::Cylinder)mrs_lib::geometry::Cylinder
~Cylinder()mrs_lib::geometry::Cylinder
+
+ + + + diff --git a/classmrs__lib_1_1geometry_1_1Cylinder.html b/classmrs__lib_1_1geometry_1_1Cylinder.html new file mode 100644 index 00000000..03601ed4 --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Cylinder.html @@ -0,0 +1,315 @@ + + + + + + + +mrs_lib: mrs_lib::geometry::Cylinder Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::geometry::Cylinder Class Reference
+
+
+ +

geometric representation of a cylinder + More...

+ +

#include <shapes.h>

+ + + + + +

+Public Types

enum  { BOTTOM = 0, +TOP = 1 + }
 cap indexing
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Cylinder ()
 constructor without setting the internal variables
 
~Cylinder ()
 destructor
 
 Cylinder (Eigen::Vector3d center, double radius, double height, Eigen::Quaterniond orientation)
 constructor using a given center point, radius, height and orietnation More...
 
const Eigen::Vector3d center () const
 getter for the center point More...
 
const Eigen::Quaterniond orientation () const
 getter for the orientation More...
 
double r () const
 getter for cap radius More...
 
double h () const
 getter for the body height More...
 
const Ellipse getCap (int index) const
 getter for a cap corresponding to a provided index More...
 
+

Detailed Description

+

geometric representation of a cylinder

+

Constructor & Destructor Documentation

+ +

◆ Cylinder()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::geometry::Cylinder::Cylinder (Eigen::Vector3d center,
double radius,
double height,
Eigen::Quaterniond orientation 
)
+
+ +

constructor using a given center point, radius, height and orietnation

+
Parameters
+ + + + + +
centergeometric center in the middle of body height
radiusradius of the cap
heightdistance between caps
orientationquaternion
+
+
+ +
+
+

Member Function Documentation

+ +

◆ center()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Cylinder::center () const
+
+ +

getter for the center point

+
Returns
vector3
+ +
+
+ +

◆ getCap()

+ +
+
+ + + + + + + + +
const Ellipse mrs_lib::geometry::Cylinder::getCap (int index) const
+
+ +

getter for a cap corresponding to a provided index

+
Parameters
+ + +
indexof the cap
+
+
+
Returns
ellipse representing the cap
+ +
+
+ +

◆ h()

+ +
+
+ + + + + + + +
double mrs_lib::geometry::Cylinder::h () const
+
+ +

getter for the body height

+
Returns
body height
+ +
+
+ +

◆ orientation()

+ +
+
+ + + + + + + +
const Eigen::Quaterniond mrs_lib::geometry::Cylinder::orientation () const
+
+ +

getter for the orientation

+
Returns
quaternion
+ +
+
+ +

◆ r()

+ +
+
+ + + + + + + +
double mrs_lib::geometry::Cylinder::r () const
+
+ +

getter for cap radius

+
Returns
radius of the cap
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1geometry_1_1Cylinder.js b/classmrs__lib_1_1geometry_1_1Cylinder.js new file mode 100644 index 00000000..c9eca599 --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Cylinder.js @@ -0,0 +1,13 @@ +var classmrs__lib_1_1geometry_1_1Cylinder = +[ + [ "BOTTOM", "classmrs__lib_1_1geometry_1_1Cylinder.html#a5546b5ccb1073d1ced17e242137e9366a19aca8f1f4fd2193d246c741c6328aae", null ], + [ "TOP", "classmrs__lib_1_1geometry_1_1Cylinder.html#a5546b5ccb1073d1ced17e242137e9366abbf05c17c362c360fcdf14aa1cf61922", null ], + [ "Cylinder", "classmrs__lib_1_1geometry_1_1Cylinder.html#ae4b5f3500ae892f398ab88f5e545e0aa", null ], + [ "~Cylinder", "classmrs__lib_1_1geometry_1_1Cylinder.html#a9a558196740fd2be133a3c2df7173f4f", null ], + [ "Cylinder", "classmrs__lib_1_1geometry_1_1Cylinder.html#a868fdc0baa204d3bf78d614b532aa32e", null ], + [ "center", "classmrs__lib_1_1geometry_1_1Cylinder.html#a766270eba57b916335ad0901fec74355", null ], + [ "getCap", "classmrs__lib_1_1geometry_1_1Cylinder.html#a9730caea8c6bd44467038a8e04212fe6", null ], + [ "h", "classmrs__lib_1_1geometry_1_1Cylinder.html#a730fee04b106aa4ec3fe08be6bb90751", null ], + [ "orientation", "classmrs__lib_1_1geometry_1_1Cylinder.html#aa7eccea15c92f1df02fc48684bb4d219", null ], + [ "r", "classmrs__lib_1_1geometry_1_1Cylinder.html#aa442455784da2246f8bc25aa0eccadbb", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1geometry_1_1Ellipse-members.html b/classmrs__lib_1_1geometry_1_1Ellipse-members.html new file mode 100644 index 00000000..1e2a772b --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Ellipse-members.html @@ -0,0 +1,111 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::geometry::Ellipse Member List
+
+
+ +

This is the complete list of members for mrs_lib::geometry::Ellipse, including all inherited members.

+ + + + + + + + +
a() constmrs_lib::geometry::Ellipse
b() constmrs_lib::geometry::Ellipse
center() constmrs_lib::geometry::Ellipse
Ellipse()mrs_lib::geometry::Ellipse
Ellipse(Eigen::Vector3d center, Eigen::Quaterniond orientation, double a, double b)mrs_lib::geometry::Ellipse
orientation() constmrs_lib::geometry::Ellipse
~Ellipse()mrs_lib::geometry::Ellipse
+
+ + + + diff --git a/classmrs__lib_1_1geometry_1_1Ellipse.html b/classmrs__lib_1_1geometry_1_1Ellipse.html new file mode 100644 index 00000000..80d004f2 --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Ellipse.html @@ -0,0 +1,276 @@ + + + + + + + +mrs_lib: mrs_lib::geometry::Ellipse Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::geometry::Ellipse Class Reference
+
+
+ +

geometric representation of an ellipse + More...

+ +

#include <shapes.h>

+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Ellipse ()
 constructor for initialization without setting internal variables
 
~Ellipse ()
 destructor
 
 Ellipse (Eigen::Vector3d center, Eigen::Quaterniond orientation, double a, double b)
 constructor using a provided center point, orientation, major semi-axis length and minor semi-axis length More...
 
double a () const
 getter for major semi-axis More...
 
double b () const
 getter for minor semi-axis More...
 
const Eigen::Vector3d center () const
 getter for the center point More...
 
const Eigen::Quaterniond orientation () const
 getter for the orientation More...
 
+

Detailed Description

+

geometric representation of an ellipse

+

Constructor & Destructor Documentation

+ +

◆ Ellipse()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::geometry::Ellipse::Ellipse (Eigen::Vector3d center,
Eigen::Quaterniond orientation,
double a,
double b 
)
+
+ +

constructor using a provided center point, orientation, major semi-axis length and minor semi-axis length

+
Parameters
+ + + + + +
centervector3
orientationquaternion
amajor semi-axis length
bminor semi-axis length
+
+
+ +
+
+

Member Function Documentation

+ +

◆ a()

+ +
+
+ + + + + + + +
double mrs_lib::geometry::Ellipse::a () const
+
+ +

getter for major semi-axis

+
Returns
length of major semi-axis
+ +
+
+ +

◆ b()

+ +
+
+ + + + + + + +
double mrs_lib::geometry::Ellipse::b () const
+
+ +

getter for minor semi-axis

+
Returns
length of minor semi-axis
+ +
+
+ +

◆ center()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Ellipse::center () const
+
+ +

getter for the center point

+
Returns
vector3
+ +
+
+ +

◆ orientation()

+ +
+
+ + + + + + + +
const Eigen::Quaterniond mrs_lib::geometry::Ellipse::orientation () const
+
+ +

getter for the orientation

+
Returns
quaternion
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1geometry_1_1Ellipse.js b/classmrs__lib_1_1geometry_1_1Ellipse.js new file mode 100644 index 00000000..cf01bda4 --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Ellipse.js @@ -0,0 +1,10 @@ +var classmrs__lib_1_1geometry_1_1Ellipse = +[ + [ "Ellipse", "classmrs__lib_1_1geometry_1_1Ellipse.html#ab891e8f86df11bb34f0571ebeb136c2a", null ], + [ "~Ellipse", "classmrs__lib_1_1geometry_1_1Ellipse.html#a973caa18f7b0c2e41b263a4267914650", null ], + [ "Ellipse", "classmrs__lib_1_1geometry_1_1Ellipse.html#ad64c67ccd7e0c21b5698a6791adf6831", null ], + [ "a", "classmrs__lib_1_1geometry_1_1Ellipse.html#aee622887a91b50f8fa8bbd476614006e", null ], + [ "b", "classmrs__lib_1_1geometry_1_1Ellipse.html#ab42e4c580aeda44204c5854e1ccd4513", null ], + [ "center", "classmrs__lib_1_1geometry_1_1Ellipse.html#a058c83435e1cf0f393c1bde54e94f570", null ], + [ "orientation", "classmrs__lib_1_1geometry_1_1Ellipse.html#a65f59ca228eea37a914ce0d6d6695b2d", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1geometry_1_1Ray-members.html b/classmrs__lib_1_1geometry_1_1Ray-members.html new file mode 100644 index 00000000..4e6f69ee --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Ray-members.html @@ -0,0 +1,112 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::geometry::Ray Member List
+
+
+ +

This is the complete list of members for mrs_lib::geometry::Ray, including all inherited members.

+ + + + + + + + + +
direction() constmrs_lib::geometry::Ray
directionCast(Eigen::Vector3d origin, Eigen::Vector3d direction)mrs_lib::geometry::Raystatic
p1() constmrs_lib::geometry::Ray
p2() constmrs_lib::geometry::Ray
Ray()mrs_lib::geometry::Ray
Ray(Eigen::Vector3d p1, Eigen::Vector3d p2)mrs_lib::geometry::Ray
twopointCast(Eigen::Vector3d pointFrom, Eigen::Vector3d pointTo)mrs_lib::geometry::Raystatic
~Ray()mrs_lib::geometry::Ray
+
+ + + + diff --git a/classmrs__lib_1_1geometry_1_1Ray.html b/classmrs__lib_1_1geometry_1_1Ray.html new file mode 100644 index 00000000..37239095 --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Ray.html @@ -0,0 +1,341 @@ + + + + + + + +mrs_lib: mrs_lib::geometry::Ray Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::geometry::Ray Class Reference
+
+
+ +

geometric representation of a ray. Instantiate it by two input Vector3. Use static methods for from-to raycast, or a point-direction raycast. + More...

+ +

#include <shapes.h>

+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Ray ()
 constructor without initialization of internal variables
 
~Ray ()
 destructor
 
 Ray (Eigen::Vector3d p1, Eigen::Vector3d p2)
 default constructor More...
 
const Eigen::Vector3d p1 () const
 get the origin point More...
 
const Eigen::Vector3d p2 () const
 get the end point More...
 
const Eigen::Vector3d direction () const
 get the direction of ray (normalized) More...
 
+ + + + + + + +

+Static Public Member Functions

static Ray twopointCast (Eigen::Vector3d pointFrom, Eigen::Vector3d pointTo)
 static method for generating new rays by raycasting from-to More...
 
static Ray directionCast (Eigen::Vector3d origin, Eigen::Vector3d direction)
 static method for generating new rays by raycasting origin-direction More...
 
+

Detailed Description

+

geometric representation of a ray. Instantiate it by two input Vector3. Use static methods for from-to raycast, or a point-direction raycast.

+

Constructor & Destructor Documentation

+ +

◆ Ray()

+ +
+
+ + + + + + + + + + + + + + + + + + +
mrs_lib::geometry::Ray::Ray (Eigen::Vector3d p1,
Eigen::Vector3d p2 
)
+
+ +

default constructor

+
Parameters
+ + + +
p1origin of the ray
p2endpoint of the ray
+
+
+ +
+
+

Member Function Documentation

+ +

◆ direction()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Ray::direction () const
+
+ +

get the direction of ray (normalized)

+
Returns
direction (normalized)
+ +
+
+ +

◆ directionCast()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Ray mrs_lib::geometry::Ray::directionCast (Eigen::Vector3d origin,
Eigen::Vector3d direction 
)
+
+static
+
+ +

static method for generating new rays by raycasting origin-direction

+
Parameters
+ + + +
originorigin of the ray
directionof the ray
+
+
+
Returns
new Ray instance created by raycasting
+ +
+
+ +

◆ p1()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Ray::p1 () const
+
+ +

get the origin point

+
Returns
ray origin point
+ +
+
+ +

◆ p2()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Ray::p2 () const
+
+ +

get the end point

+
Returns
ray end point
+ +
+
+ +

◆ twopointCast()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Ray mrs_lib::geometry::Ray::twopointCast (Eigen::Vector3d pointFrom,
Eigen::Vector3d pointTo 
)
+
+static
+
+ +

static method for generating new rays by raycasting from-to

+
Parameters
+ + + +
pointFromorigin of the ray
pointToendpoint of the ray
+
+
+
Returns
new Ray instance created by raycasting
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1geometry_1_1Ray.js b/classmrs__lib_1_1geometry_1_1Ray.js new file mode 100644 index 00000000..27db87bf --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Ray.js @@ -0,0 +1,9 @@ +var classmrs__lib_1_1geometry_1_1Ray = +[ + [ "Ray", "classmrs__lib_1_1geometry_1_1Ray.html#aa0bff9427d14806607b5689f1d71604d", null ], + [ "~Ray", "classmrs__lib_1_1geometry_1_1Ray.html#ad79e6fdb9416510694f14fd92ca41c7a", null ], + [ "Ray", "classmrs__lib_1_1geometry_1_1Ray.html#ab7466369083c82552f805fb20a16a8aa", null ], + [ "direction", "classmrs__lib_1_1geometry_1_1Ray.html#a01b7ff2bb88b61c178f4991c8cd847bf", null ], + [ "p1", "classmrs__lib_1_1geometry_1_1Ray.html#a8591c6b82a120832a7ed349fbd90163a", null ], + [ "p2", "classmrs__lib_1_1geometry_1_1Ray.html#a7c830a43aa9550ef6d7b798dcb69f3f5", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1geometry_1_1Rectangle-members.html b/classmrs__lib_1_1geometry_1_1Rectangle-members.html new file mode 100644 index 00000000..f2045511 --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Rectangle-members.html @@ -0,0 +1,119 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::geometry::Rectangle Member List
+
+
+ +

This is the complete list of members for mrs_lib::geometry::Rectangle, including all inherited members.

+ + + + + + + + + + + + + + + + +
a() constmrs_lib::geometry::Rectangle
b() constmrs_lib::geometry::Rectangle
c() constmrs_lib::geometry::Rectangle
center() constmrs_lib::geometry::Rectangle
d() constmrs_lib::geometry::Rectangle
intersectionRay(Ray r, double epsilon=1e-4) constmrs_lib::geometry::Rectangle
isFacing(Eigen::Vector3d point) constmrs_lib::geometry::Rectangle
normal() constmrs_lib::geometry::Rectangle
Rectangle()mrs_lib::geometry::Rectangle
Rectangle(std::vector< Eigen::Vector3d > points)mrs_lib::geometry::Rectangle
Rectangle(Eigen::Vector3d a, Eigen::Vector3d b, Eigen::Vector3d c, Eigen::Vector3d d)mrs_lib::geometry::Rectangle
solidAngleRelativeTo(Eigen::Vector3d point) constmrs_lib::geometry::Rectangle
triangles() constmrs_lib::geometry::Rectangle
vertices() constmrs_lib::geometry::Rectangle
~Rectangle()mrs_lib::geometry::Rectangle
+
+ + + + diff --git a/classmrs__lib_1_1geometry_1_1Rectangle.html b/classmrs__lib_1_1geometry_1_1Rectangle.html new file mode 100644 index 00000000..3db2197b --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Rectangle.html @@ -0,0 +1,498 @@ + + + + + + + +mrs_lib: mrs_lib::geometry::Rectangle Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::geometry::Rectangle Class Reference
+
+
+ +

geometric representation of a rectangle (can represent any quadrilateral) + More...

+ +

#include <shapes.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Rectangle ()
 constructor for initialization with points set to [0,0,0], [1,0,0], [1,1,0] and [0,1,0]
 
~Rectangle ()
 destructor
 
 Rectangle (std::vector< Eigen::Vector3d > points)
 constructor using a std::vector of points (vector3). Provide points in a counter-clockwise order for correct behavior More...
 
 Rectangle (Eigen::Vector3d a, Eigen::Vector3d b, Eigen::Vector3d c, Eigen::Vector3d d)
 constructor using four points (vector3). Provide points in a counter-clockwise order for correct behavior More...
 
const Eigen::Vector3d a () const
 getter for first point More...
 
const Eigen::Vector3d b () const
 getter for the second point More...
 
const Eigen::Vector3d c () const
 getter for the third point More...
 
const Eigen::Vector3d d () const
 getter for the fourth point More...
 
const Eigen::Vector3d center () const
 getter for center point More...
 
const Eigen::Vector3d normal () const
 getter for the normal vector. It originates in the center of the Rectangle, length is normalized, orientation follows the right-hand rule, assuiming the points are provided in counter-clockwise order More...
 
const std::vector< Eigen::Vector3d > vertices () const
 getter for all the points of this rectangle provided as std::vector More...
 
const std::vector< Triangletriangles () const
 getter for the triangles forming this rectangle More...
 
const boost::optional< Eigen::Vector3d > intersectionRay (Ray r, double epsilon=1e-4) const
 calculate an intersection of this rectangle with a given ray with given tolerance More...
 
bool isFacing (Eigen::Vector3d point) const
 check if the normal is facing a given point, i.e. if the point lies in the same half-space as the rectangle normal More...
 
double solidAngleRelativeTo (Eigen::Vector3d point) const
 compute the solid angle of this rectangle relative to a given sphere center More...
 
+

Detailed Description

+

geometric representation of a rectangle (can represent any quadrilateral)

+

Constructor & Destructor Documentation

+ +

◆ Rectangle() [1/2]

+ +
+
+ + + + + + + + +
mrs_lib::geometry::Rectangle::Rectangle (std::vector< Eigen::Vector3d > points)
+
+ +

constructor using a std::vector of points (vector3). Provide points in a counter-clockwise order for correct behavior

+
Parameters
+ + +
pointsstd::vector of points in 3d
+
+
+ +
+
+ +

◆ Rectangle() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::geometry::Rectangle::Rectangle (Eigen::Vector3d a,
Eigen::Vector3d b,
Eigen::Vector3d c,
Eigen::Vector3d d 
)
+
+ +

constructor using four points (vector3). Provide points in a counter-clockwise order for correct behavior

+
Parameters
+ + + + + +
a
b
c
d
+
+
+ +
+
+

Member Function Documentation

+ +

◆ a()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Rectangle::a () const
+
+ +

getter for first point

+
Returns
1st point (vector3)
+ +
+
+ +

◆ b()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Rectangle::b () const
+
+ +

getter for the second point

+
Returns
2nd point (vector3)
+ +
+
+ +

◆ c()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Rectangle::c () const
+
+ +

getter for the third point

+
Returns
3rd point (vector3)
+ +
+
+ +

◆ center()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Rectangle::center () const
+
+ +

getter for center point

+
Returns
center point (vector3)
+ +
+
+ +

◆ d()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Rectangle::d () const
+
+ +

getter for the fourth point

+
Returns
4th point (vector3)
+ +
+
+ +

◆ intersectionRay()

+ +
+
+ + + + + + + + + + + + + + + + + + +
const boost::optional< Eigen::Vector3d > mrs_lib::geometry::Rectangle::intersectionRay (Ray r,
double epsilon = 1e-4 
) const
+
+ +

calculate an intersection of this rectangle with a given ray with given tolerance

+
Parameters
+ + + +
rray to calculate intersection with
epsiloncalculation tolerance
+
+
+
Returns
vector3 intersection if exists, boost::none if no intersection is found
+ +
+
+ +

◆ isFacing()

+ +
+
+ + + + + + + + +
bool mrs_lib::geometry::Rectangle::isFacing (Eigen::Vector3d point) const
+
+ +

check if the normal is facing a given point, i.e. if the point lies in the same half-space as the rectangle normal

+
Parameters
+ + +
pointvector3 to check against
+
+
+
Returns
true if the normal is facing given point. Returns false for angle >= 90 degrees
+ +
+
+ +

◆ normal()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Rectangle::normal () const
+
+ +

getter for the normal vector. It originates in the center of the Rectangle, length is normalized, orientation follows the right-hand rule, assuiming the points are provided in counter-clockwise order

+
Returns
normal vector3
+ +
+
+ +

◆ solidAngleRelativeTo()

+ +
+
+ + + + + + + + +
double mrs_lib::geometry::Rectangle::solidAngleRelativeTo (Eigen::Vector3d point) const
+
+ +

compute the solid angle of this rectangle relative to a given sphere center

+
Parameters
+ + +
pointcenter of a sphere to compute the solid angle for
+
+
+
Returns
solid angle in steradians
+ +
+
+ +

◆ triangles()

+ +
+
+ + + + + + + +
const std::vector< Triangle > mrs_lib::geometry::Rectangle::triangles () const
+
+ +

getter for the triangles forming this rectangle

+
Returns
std::vector of triangles
+ +
+
+ +

◆ vertices()

+ +
+
+ + + + + + + +
const std::vector< Eigen::Vector3d > mrs_lib::geometry::Rectangle::vertices () const
+
+ +

getter for all the points of this rectangle provided as std::vector

+
Returns
std::vector of points (vector3)
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1geometry_1_1Rectangle.js b/classmrs__lib_1_1geometry_1_1Rectangle.js new file mode 100644 index 00000000..20d66be7 --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Rectangle.js @@ -0,0 +1,18 @@ +var classmrs__lib_1_1geometry_1_1Rectangle = +[ + [ "Rectangle", "classmrs__lib_1_1geometry_1_1Rectangle.html#af119a484beb0dbae7dd0a9a2d5f5123d", null ], + [ "~Rectangle", "classmrs__lib_1_1geometry_1_1Rectangle.html#a66d9286f92d6f8ea5c7ebc7400cb29be", null ], + [ "Rectangle", "classmrs__lib_1_1geometry_1_1Rectangle.html#a3b85d8ba9c03a1b2962eda68293da077", null ], + [ "Rectangle", "classmrs__lib_1_1geometry_1_1Rectangle.html#a707a6df742b90d626e5321a4324d75fd", null ], + [ "a", "classmrs__lib_1_1geometry_1_1Rectangle.html#a5370711517c0449167cfd0efaee8e821", null ], + [ "b", "classmrs__lib_1_1geometry_1_1Rectangle.html#a82cb0598bd97e772d5fdbeeb5fde3657", null ], + [ "c", "classmrs__lib_1_1geometry_1_1Rectangle.html#a9cd35540a57a2b0663a2a4b360e02d8c", null ], + [ "center", "classmrs__lib_1_1geometry_1_1Rectangle.html#ab541a2748c4876234b4af0f3c220fb2d", null ], + [ "d", "classmrs__lib_1_1geometry_1_1Rectangle.html#aec6ae68b84c5a24580068fbc70a9452d", null ], + [ "intersectionRay", "classmrs__lib_1_1geometry_1_1Rectangle.html#a0b92252c39c755b3a7cba989fbb5c854", null ], + [ "isFacing", "classmrs__lib_1_1geometry_1_1Rectangle.html#a62a1b7d39bd141d4c38d8079d43ffe02", null ], + [ "normal", "classmrs__lib_1_1geometry_1_1Rectangle.html#a5cf41dfd6e82f02c8bcc18bc134d235b", null ], + [ "solidAngleRelativeTo", "classmrs__lib_1_1geometry_1_1Rectangle.html#a803dbb3eb6f8a24146bd4c01877769ce", null ], + [ "triangles", "classmrs__lib_1_1geometry_1_1Rectangle.html#a4f2e1bce541675c91179b723aa4f9176", null ], + [ "vertices", "classmrs__lib_1_1geometry_1_1Rectangle.html#a05fbbe3a262e09d5834431bc31f2648b", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1geometry_1_1Triangle-members.html b/classmrs__lib_1_1geometry_1_1Triangle-members.html new file mode 100644 index 00000000..85c2d158 --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Triangle-members.html @@ -0,0 +1,114 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::geometry::Triangle Member List
+
+
+ +

This is the complete list of members for mrs_lib::geometry::Triangle, including all inherited members.

+ + + + + + + + + + + +
a() constmrs_lib::geometry::Triangle
b() constmrs_lib::geometry::Triangle
c() constmrs_lib::geometry::Triangle
center() constmrs_lib::geometry::Triangle
intersectionRay(Ray r, double epsilon=1e-4) constmrs_lib::geometry::Triangle
normal() constmrs_lib::geometry::Triangle
Triangle()mrs_lib::geometry::Triangle
Triangle(Eigen::Vector3d a, Eigen::Vector3d b, Eigen::Vector3d c)mrs_lib::geometry::Triangle
vertices() constmrs_lib::geometry::Triangle
~Triangle()mrs_lib::geometry::Triangle
+
+ + + + diff --git a/classmrs__lib_1_1geometry_1_1Triangle.html b/classmrs__lib_1_1geometry_1_1Triangle.html new file mode 100644 index 00000000..6d97953c --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Triangle.html @@ -0,0 +1,356 @@ + + + + + + + +mrs_lib: mrs_lib::geometry::Triangle Class Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::geometry::Triangle Class Reference
+
+
+ +

geometric representation of a triangle. Instantiate a new triangle by providing three vertices + More...

+ +

#include <shapes.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Triangle ()
 constructor for initialization with default values (points [0,0,0], [1,0,0] and [0,0,1]
 
~Triangle ()
 destructor
 
 Triangle (Eigen::Vector3d a, Eigen::Vector3d b, Eigen::Vector3d c)
 default constructor for creating a new triangle from given vertices More...
 
const Eigen::Vector3d a () const
 getter for first point More...
 
const Eigen::Vector3d b () const
 getter for second point More...
 
const Eigen::Vector3d c () const
 getter for third point More...
 
const Eigen::Vector3d center () const
 get position on the triangle center More...
 
const Eigen::Vector3d normal () const
 get normal vector of this triangle. The vector origin is placed at triangle center, length is normalized and direction follows the right-hand rule with respect to vertex order a-b-c More...
 
const std::vector< Eigen::Vector3d > vertices () const
 get a vector of all vertices More...
 
const boost::optional< Eigen::Vector3d > intersectionRay (Ray r, double epsilon=1e-4) const
 calculate an intersection of this triangle with a given ray with given tolerance More...
 
+

Detailed Description

+

geometric representation of a triangle. Instantiate a new triangle by providing three vertices

+

Constructor & Destructor Documentation

+ +

◆ Triangle()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::geometry::Triangle::Triangle (Eigen::Vector3d a,
Eigen::Vector3d b,
Eigen::Vector3d c 
)
+
+ +

default constructor for creating a new triangle from given vertices

+
Parameters
+ + + + +
a
b
c
+
+
+ +
+
+

Member Function Documentation

+ +

◆ a()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Triangle::a () const
+
+ +

getter for first point

+
Returns
1st point (vector3)
+ +
+
+ +

◆ b()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Triangle::b () const
+
+ +

getter for second point

+
Returns
2nd point (vector3)
+ +
+
+ +

◆ c()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Triangle::c () const
+
+ +

getter for third point

+
Returns
3rd point (vector3)
+ +
+
+ +

◆ center()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Triangle::center () const
+
+ +

get position on the triangle center

+
Returns
vector3
+ +
+
+ +

◆ intersectionRay()

+ +
+
+ + + + + + + + + + + + + + + + + + +
const boost::optional< Eigen::Vector3d > mrs_lib::geometry::Triangle::intersectionRay (Ray r,
double epsilon = 1e-4 
) const
+
+ +

calculate an intersection of this triangle with a given ray with given tolerance

+
Parameters
+ + + +
rray to calculate intersection with
epsiloncalculation tolerance
+
+
+
Returns
vector3 intersection if exists, boost::none if no intersection is found
+ +
+
+ +

◆ normal()

+ +
+
+ + + + + + + +
const Eigen::Vector3d mrs_lib::geometry::Triangle::normal () const
+
+ +

get normal vector of this triangle. The vector origin is placed at triangle center, length is normalized and direction follows the right-hand rule with respect to vertex order a-b-c

+
Returns
vector3
+ +
+
+ +

◆ vertices()

+ +
+
+ + + + + + + +
const std::vector< Eigen::Vector3d > mrs_lib::geometry::Triangle::vertices () const
+
+ +

get a vector of all vertices

+
Returns
std::vector<vector3>
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classmrs__lib_1_1geometry_1_1Triangle.js b/classmrs__lib_1_1geometry_1_1Triangle.js new file mode 100644 index 00000000..712c47c1 --- /dev/null +++ b/classmrs__lib_1_1geometry_1_1Triangle.js @@ -0,0 +1,13 @@ +var classmrs__lib_1_1geometry_1_1Triangle = +[ + [ "Triangle", "classmrs__lib_1_1geometry_1_1Triangle.html#a14203384b0eb6d3a7ff01330ab24f679", null ], + [ "~Triangle", "classmrs__lib_1_1geometry_1_1Triangle.html#ad5cc0e9eb09f9f4900f94fa1908b60f3", null ], + [ "Triangle", "classmrs__lib_1_1geometry_1_1Triangle.html#af765e8be7fef5ae4cfb972ec51c4a6e8", null ], + [ "a", "classmrs__lib_1_1geometry_1_1Triangle.html#abd847d705725f4dffa10e6e00ba5f24c", null ], + [ "b", "classmrs__lib_1_1geometry_1_1Triangle.html#a6ac4e01a62fbb343d177bf47b3d38219", null ], + [ "c", "classmrs__lib_1_1geometry_1_1Triangle.html#aff6f8fb09fb5e7d4ebf2116142b85638", null ], + [ "center", "classmrs__lib_1_1geometry_1_1Triangle.html#a419f55d2c47dac6035495004fec746c9", null ], + [ "intersectionRay", "classmrs__lib_1_1geometry_1_1Triangle.html#a94238065a0e8d0c27135f55e1daa4ed3", null ], + [ "normal", "classmrs__lib_1_1geometry_1_1Triangle.html#ac9b355e443d37f91d83ab76bbfa35aa6", null ], + [ "vertices", "classmrs__lib_1_1geometry_1_1Triangle.html#ad873b5c4ba04613f24dd12348f898487", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1varstepLKF-members.html b/classmrs__lib_1_1varstepLKF-members.html new file mode 100644 index 00000000..cb0d11be --- /dev/null +++ b/classmrs__lib_1_1varstepLKF-members.html @@ -0,0 +1,138 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib::varstepLKF< n_states, n_inputs, n_measurements > Member List
+
+
+ +

This is the complete list of members for mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Amrs_lib::LKF< n_states, n_inputs, n_measurements >
A_t typedef (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >
Bmrs_lib::LKF< n_states, n_inputs, n_measurements >
B_t typedef (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >
Base_class typedef (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >
computeKalmanGain(const statecov_t &sc, [[maybe_unused]] const z_t &z, const R_t &R, const H_t &H) const (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedvirtual
correct(const statecov_t &sc, const z_t &z, const R_t &R) const overridemrs_lib::LKF< n_states, n_inputs, n_measurements >inlinevirtual
mrs_lib::KalmanFilter::correct(const statecov_t &sc, const z_t &z, const R_t &R) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
correction_impl(const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotected
covariance_predict(const A_t &A, const P_t &P, const Q_t &Q, const double dt) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
generateA_t typedef (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >
generateB_t typedef (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >
Hmrs_lib::LKF< n_states, n_inputs, n_measurements >
H_t typedef (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >
invert_W(R_t W) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
K_t typedefmrs_lib::LKF< n_states, n_inputs, n_measurements >
LKF()mrs_lib::LKF< n_states, n_inputs, n_measurements >inline
LKF(const A_t &A, const B_t &B, const H_t &H)mrs_lib::LKF< n_states, n_inputs, n_measurements >inline
m (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >static
n (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >static
p (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >static
P_t typedef (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >
predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const overridemrs_lib::varstepLKF< n_states, n_inputs, n_measurements >inlinevirtual
mrs_lib::LKF::predict(const statecov_t &sc, const u_t &u, const Q_t &Q, [[maybe_unused]] double dt) const overridemrs_lib::LKF< n_states, n_inputs, n_measurements >inlinevirtual
mrs_lib::KalmanFilter::predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >pure virtual
Q_t typedef (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >
R_t typedef (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >
state_predict(const A_t &A, const x_t &x, [[maybe_unused]] const B_t &B, [[maybe_unused]] const u_t &u) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
state_predict(const A_t &A, const x_t &x, const B_t &B, const u_t &u) (defined in mrs_lib::LKF< n_states, n_inputs, n_measurements >)mrs_lib::LKF< n_states, n_inputs, n_measurements >inlineprotectedstatic
statecov_t typedef (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >
u_t typedef (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >
varstepLKF(const generateA_t &generateA, const generateB_t &generateB, const H_t &H)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >inline
x_t typedef (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >
z_t typedef (defined in mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >)mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >
+
+ + + + diff --git a/classmrs__lib_1_1varstepLKF.html b/classmrs__lib_1_1varstepLKF.html new file mode 100644 index 00000000..4ef0ce80 --- /dev/null +++ b/classmrs__lib_1_1varstepLKF.html @@ -0,0 +1,476 @@ + + + + + + + +mrs_lib: mrs_lib::varstepLKF< n_states, n_inputs, n_measurements > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
mrs_lib::varstepLKF< n_states, n_inputs, n_measurements > Class Template Reference
+
+
+
+ + Inheritance diagram for mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >:
+
+
+ +
+ + Collaboration diagram for mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using Base_class = LKF< n, m, p >
 
+using x_t = typename Base_class::x_t
 
+using u_t = typename Base_class::u_t
 
+using z_t = typename Base_class::z_t
 
+using P_t = typename Base_class::P_t
 
+using R_t = typename Base_class::R_t
 
+using statecov_t = typename Base_class::statecov_t
 
+using A_t = typename Base_class::A_t
 
+using B_t = typename Base_class::B_t
 
+using H_t = typename Base_class::H_t
 
+using Q_t = typename Base_class::Q_t
 
+using generateA_t = std::function< A_t(double)>
 
+using generateB_t = std::function< B_t(double)>
 
- Public Types inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+using Base_class = KalmanFilter< n, m, p >
 Base class of this class.
 
+using x_t = typename Base_class::x_t
 State vector type $n \times 1$.
 
+using u_t = typename Base_class::u_t
 Input vector type $m \times 1$.
 
+using z_t = typename Base_class::z_t
 Measurement vector type $p \times 1$.
 
+using P_t = typename Base_class::P_t
 State uncertainty covariance matrix type $n \times n$.
 
+using R_t = typename Base_class::R_t
 Measurement noise covariance matrix type $p \times p$.
 
+using Q_t = typename Base_class::Q_t
 Process noise covariance matrix type $n \times n$.
 
+using statecov_t = typename Base_class::statecov_t
 Helper struct for passing around the state and its covariance in one variable.
 
+typedef Eigen::Matrix< double, n, nA_t
 System transition matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, n, mB_t
 Input to state mapping matrix type $n \times m$.
 
+typedef Eigen::Matrix< double, p, nH_t
 State to measurement mapping matrix type $p \times n$.
 
+typedef Eigen::Matrix< double, n, pK_t
 Kalman gain matrix type $n \times p$.
 
- Public Types inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
+typedef Eigen::Matrix< double, n, 1 > x_t
 State vector type $n \times 1$.
 
+typedef Eigen::Matrix< double, m, 1 > u_t
 Input vector type $m \times 1$.
 
+typedef Eigen::Matrix< double, p, 1 > z_t
 Measurement vector type $p \times 1$.
 
+typedef Eigen::Matrix< double, n, nP_t
 State uncertainty covariance matrix type $n \times n$.
 
+typedef Eigen::Matrix< double, p, pR_t
 Measurement noise covariance matrix type $p \times p$.
 
+typedef Eigen::Matrix< double, n, nQ_t
 Process noise covariance matrix type $n \times n$.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 varstepLKF (const generateA_t &generateA, const generateB_t &generateB, const H_t &H)
 The main constructor. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const override
 Applies the prediction (time) step of the Kalman filter. More...
 
- Public Member Functions inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
 LKF ()
 Convenience default constructor. More...
 
 LKF (const A_t &A, const B_t &B, const H_t &H)
 The main constructor. More...
 
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const override
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, [[maybe_unused]] double dt) const override
 Applies the prediction (time) step of the Kalman filter. More...
 
- Public Member Functions inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
virtual statecov_t correct (const statecov_t &sc, const z_t &z, const R_t &R) const =0
 Applies the correction (update, measurement, data) step of the Kalman filter. More...
 
virtual statecov_t predict (const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0
 Applies the prediction (time) step of the Kalman filter. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

+static const int n = n_states
 
+static const int m = n_inputs
 
+static const int p = n_measurements
 
- Static Public Attributes inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+static constexpr int n = n_states
 Length of the state vector of the system.
 
+static constexpr int m = n_inputs
 Length of the input vector of the system.
 
+static constexpr int p = n_measurements
 Length of the measurement vector of the system.
 
- Static Public Attributes inherited from mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
+static const int n = n_states
 Length of the state vector of the system.
 
+static const int m = n_inputs
 Length of the input vector of the system.
 
+static const int p = n_measurements
 Length of the measurement vector of the system.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+A_t A
 The system transition matrix $n \times n$.
 
+B_t B
 The input to state mapping matrix $n \times m$.
 
+H_t H
 The state to measurement mapping matrix $p \times n$.
 
- Protected Member Functions inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+virtual K_t computeKalmanGain (const statecov_t &sc, [[maybe_unused]] const z_t &z, const R_t &R, const H_t &H) const
 
+statecov_t ::type correction_impl (const statecov_t &sc, const z_t &z, const R_t &R, const H_t &H) const
 
- Static Protected Member Functions inherited from mrs_lib::LKF< n_states, n_inputs, n_measurements >
+static P_t covariance_predict (const A_t &A, const P_t &P, const Q_t &Q, const double dt)
 
+template<int check = n_inputs>
static std::enable_if< check==0, x_t >::type state_predict (const A_t &A, const x_t &x, [[maybe_unused]] const B_t &B, [[maybe_unused]] const u_t &u)
 
+template<int check = n_inputs>
static std::enable_if< check !=0, x_t >::type state_predict (const A_t &A, const x_t &x, const B_t &B, const u_t &u)
 
+static R_t invert_W (R_t W)
 
+

Constructor & Destructor Documentation

+ +

◆ varstepLKF()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >::varstepLKF (const generateA_t & generateA,
const generateB_t & generateB,
const H_tH 
)
+
+inline
+
+ +

The main constructor.

+
Parameters
+ + + + +
generateAa function, which returns the state transition matrix A based on the time difference dt.
generateBa function, which returns the input to state mapping matrix B based on the time difference dt.
Hthe state to measurement mapping matrix.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ predict()

+ +
+
+
+template<int n_states, int n_inputs, int n_measurements>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual statecov_t mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >::predict (const statecov_tsc,
const u_tu,
const Q_tQ,
double dt 
) const
+
+inlineoverridevirtual
+
+ +

Applies the prediction (time) step of the Kalman filter.

+

This method applies the linear Kalman filter prediction step to the state and covariance passed in sc using the input u and process noise Q. The process noise covariance Q is scaled by the dt parameter. The updated state and covariance after the prediction step is returned.

+
Parameters
+ + + + + +
scThe state and covariance to which the prediction step is to be applied.
uThe input vector to be used for prediction.
QThe process noise covariance matrix to be used for prediction.
dtUsed to scale the process noise covariance Q and to generate the state transition and input to state mapping matrices A and \B using the functions, passed in the object's constructor.
+
+
+
Returns
The state and covariance after the prediction step.
+
Note
Note that the dt parameter is used to scale the process noise covariance Q and to generate the system matrices A or B using the functions, passed in the constructor!
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmrs__lib_1_1varstepLKF.js b/classmrs__lib_1_1varstepLKF.js new file mode 100644 index 00000000..35f5d193 --- /dev/null +++ b/classmrs__lib_1_1varstepLKF.js @@ -0,0 +1,18 @@ +var classmrs__lib_1_1varstepLKF = +[ + [ "A_t", "classmrs__lib_1_1varstepLKF.html#a1f797193292783fd0d33698b8f459b6a", null ], + [ "B_t", "classmrs__lib_1_1varstepLKF.html#a2b26991ee6df4fd05e67f8f673149368", null ], + [ "Base_class", "classmrs__lib_1_1varstepLKF.html#a83cfe493b5409677ec83f01b9f0065bc", null ], + [ "generateA_t", "classmrs__lib_1_1varstepLKF.html#ae85acc5f4b5d251aa70cdda71c0aabfd", null ], + [ "generateB_t", "classmrs__lib_1_1varstepLKF.html#a2b40f86a3d5a5973664ffcccd9c37b4d", null ], + [ "H_t", "classmrs__lib_1_1varstepLKF.html#a0aa9bddf3faf5aa9e09053283df32a7e", null ], + [ "P_t", "classmrs__lib_1_1varstepLKF.html#a346cbdb27120fda35ebc6ec6f6c69cbe", null ], + [ "Q_t", "classmrs__lib_1_1varstepLKF.html#ac69552920fcb4c6db997539466ae5e67", null ], + [ "R_t", "classmrs__lib_1_1varstepLKF.html#a48a9d5c6e193d88308b7b17186b3432c", null ], + [ "statecov_t", "classmrs__lib_1_1varstepLKF.html#af7abb1064d60846b89590e5c95e5841b", null ], + [ "u_t", "classmrs__lib_1_1varstepLKF.html#ac8cb341dceca8811dc40c0891fd71ad2", null ], + [ "x_t", "classmrs__lib_1_1varstepLKF.html#aa948acd2a6adacf7fa10667f2f307994", null ], + [ "z_t", "classmrs__lib_1_1varstepLKF.html#a60b15acb8d478affcf2190b54724f060", null ], + [ "varstepLKF", "classmrs__lib_1_1varstepLKF.html#afe2d9f3643f3f8e4c82879384a4a5eea", null ], + [ "predict", "classmrs__lib_1_1varstepLKF.html#ac1f671eb73017a1c05303e29ddf0c1f2", null ] +]; \ No newline at end of file diff --git a/classmrs__lib_1_1varstepLKF__coll__graph.map b/classmrs__lib_1_1varstepLKF__coll__graph.map new file mode 100644 index 00000000..da1f355f --- /dev/null +++ b/classmrs__lib_1_1varstepLKF__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmrs__lib_1_1varstepLKF__coll__graph.md5 b/classmrs__lib_1_1varstepLKF__coll__graph.md5 new file mode 100644 index 00000000..0de052ba --- /dev/null +++ b/classmrs__lib_1_1varstepLKF__coll__graph.md5 @@ -0,0 +1 @@ +972c6314f93bcaf4328e7b5702f86e4c \ No newline at end of file diff --git a/classmrs__lib_1_1varstepLKF__coll__graph.png b/classmrs__lib_1_1varstepLKF__coll__graph.png new file mode 100644 index 00000000..8560e0aa Binary files /dev/null and b/classmrs__lib_1_1varstepLKF__coll__graph.png differ diff --git a/classmrs__lib_1_1varstepLKF__inherit__graph.map b/classmrs__lib_1_1varstepLKF__inherit__graph.map new file mode 100644 index 00000000..da1f355f --- /dev/null +++ b/classmrs__lib_1_1varstepLKF__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmrs__lib_1_1varstepLKF__inherit__graph.md5 b/classmrs__lib_1_1varstepLKF__inherit__graph.md5 new file mode 100644 index 00000000..0de052ba --- /dev/null +++ b/classmrs__lib_1_1varstepLKF__inherit__graph.md5 @@ -0,0 +1 @@ +972c6314f93bcaf4328e7b5702f86e4c \ No newline at end of file diff --git a/classmrs__lib_1_1varstepLKF__inherit__graph.png b/classmrs__lib_1_1varstepLKF__inherit__graph.png new file mode 100644 index 00000000..8560e0aa Binary files /dev/null and b/classmrs__lib_1_1varstepLKF__inherit__graph.png differ diff --git a/closed.png b/closed.png new file mode 100644 index 00000000..98cc2c90 Binary files /dev/null and b/closed.png differ diff --git a/conversions_8h_source.html b/conversions_8h_source.html new file mode 100644 index 00000000..72e7d610 --- /dev/null +++ b/conversions_8h_source.html @@ -0,0 +1,109 @@ + + + + + + + +mrs_lib: include/mrs_lib/geometry/conversions.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
conversions.h
+
+
+
1 #ifndef GEOMETRY_CONVERSIONS_H
+
2 #define GEOMETRY_CONVERSIONS_H
+
3 
+
4 #include <mrs_lib/geometry/conversions_eigen.h>
+
5 #include <mrs_lib/geometry/conversions_opencv.h>
+
6 
+
7 #endif // GEOMETRY_CONVERSIONS_H
+
+
+ + + + diff --git a/conversions__eigen_8h_source.html b/conversions__eigen_8h_source.html new file mode 100644 index 00000000..3222de26 --- /dev/null +++ b/conversions__eigen_8h_source.html @@ -0,0 +1,139 @@ + + + + + + + +mrs_lib: include/mrs_lib/geometry/conversions_eigen.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
conversions_eigen.h
+
+
+
1 #ifndef GEOMETRY_CONVERSIONS_EIGEN_H
+
2 #define GEOMETRY_CONVERSIONS_EIGEN_H
+
3 
+
4 #include <geometry_msgs/PoseStamped.h>
+
5 #include <geometry_msgs/Vector3.h>
+
6 
+
7 #include <Eigen/Core>
+
8 #include <Eigen/Geometry>
+
9 
+
10 namespace mrs_lib
+
11 {
+
12  namespace geometry
+
13  {
+
14 
+
15  /* conversions from/to Eigen //{ */
+
16 
+
17  geometry_msgs::Point fromEigen(const Eigen::Vector3d& what);
+
18 
+
19  geometry_msgs::Vector3 fromEigenVec(const Eigen::Vector3d& what);
+
20 
+
21  Eigen::Vector3d toEigen(const geometry_msgs::Point& what);
+
22 
+
23  Eigen::Vector3d toEigen(const geometry_msgs::Vector3& what);
+
24 
+
25  Eigen::Matrix<double, 6, 6> toEigenMatrix(const boost::array<double, 36>& what);
+
26 
+
27  geometry_msgs::Quaternion fromEigen(const Eigen::Quaterniond& what);
+
28 
+
29  Eigen::Quaterniond toEigen(const geometry_msgs::Quaternion& what);
+
30 
+
31  //}
+
32 
+
33  }
+
34 }
+
35 
+
36 #endif // GEOMETRY_CONVERSIONS_EIGEN_H
+
+
+
mrs_lib
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+ + + + diff --git a/conversions__opencv_8h_source.html b/conversions__opencv_8h_source.html new file mode 100644 index 00000000..058217a9 --- /dev/null +++ b/conversions__opencv_8h_source.html @@ -0,0 +1,130 @@ + + + + + + + +mrs_lib: include/mrs_lib/geometry/conversions_opencv.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
conversions_opencv.h
+
+
+
1 #ifndef GEOMETRY_CONVERSIONS_OPENCV_H
+
2 #define GEOMETRY_CONVERSIONS_OPENCV_H
+
3 
+
4 #include <geometry_msgs/PoseStamped.h>
+
5 #include <geometry_msgs/Vector3.h>
+
6 
+
7 #include <opencv2/core/types.hpp>
+
8 
+
9 namespace mrs_lib
+
10 {
+
11  namespace geometry
+
12  {
+
13 
+
14  /* conversions from/to OpenCV //{ */
+
15 
+
16  geometry_msgs::Point fromCV(const cv::Point3d& what);
+
17 
+
18  cv::Point3d toCV(const geometry_msgs::Point& what);
+
19 
+
20  cv::Point3d toCV(const geometry_msgs::Vector3& what);
+
21 
+
22  //}
+
23 
+
24  }
+
25 }
+
26 
+
27 #endif // GEOMETRY_CONVERSIONS_OPENCV_H
+
+
+
mrs_lib
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+ + + + diff --git a/cyclic_8h.html b/cyclic_8h.html new file mode 100644 index 00000000..570c6430 --- /dev/null +++ b/cyclic_8h.html @@ -0,0 +1,302 @@ + + + + + + + +mrs_lib: include/mrs_lib/geometry/cyclic.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
cyclic.h File Reference
+
+
+ +

Defines the cyclic class for calculations with cyclic quantities. +More...

+
#include <cmath>
+#include <ostream>
+
+ + Include dependency graph for cyclic.h:
+
+
+ +
+ + This graph shows which files directly or indirectly include this file:
+
+
+ +
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + +

+Classes

struct  mrs_lib::geometry::cyclic< flt, spec >
 Implementation of the a general cyclic value (such as angles in radians/degrees etc). More...
 
struct  mrs_lib::geometry::radians
 Convenience specialization of the cyclic class for unsigned radians (from $0$ to $2\pi$). More...
 
struct  mrs_lib::geometry::sradians
 Convenience specialization of the cyclic class for signed radians (from $-\pi$ to $\pi$). More...
 
struct  mrs_lib::geometry::degrees
 Convenience specialization of the cyclic class for unsigned degrees (from $0$ to $360$). More...
 
struct  mrs_lib::geometry::sdegrees
 Convenience specialization of the cyclic class for signed degrees (from $-180$ to $180$). More...
 
+ + + + +

+Namespaces

 mrs_lib
 All mrs_lib functions, classes, variables and definitions are contained in this namespace.
 
+ + + + + + + + + + + + + +

+Functions

template<typename flt , class spec >
bool mrs_lib::geometry::operator< (const cyclic< flt, spec > &lhs, const cyclic< flt, spec > &rhs)
 Implementation of the comparison operation between two angles. More...
 
template<typename flt , class spec >
bool mrs_lib::geometry::operator> (const cyclic< flt, spec > &lhs, const cyclic< flt, spec > &rhs)
 Implementation of the comparison operation between two angles. More...
 
template<typename flt , class spec >
std::ostream & mrs_lib::geometry::operator<< (std::ostream &out, const cyclic< flt, spec > &ang)
 Implementation of the stream output operator. More...
 
+

Detailed Description

+

Defines the cyclic class for calculations with cyclic quantities.

+
Author
Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
+

Function Documentation

+ +

◆ operator<()

+ +
+
+
+template<typename flt , class spec >
+ + + + + + + + + + + + + + + + + + +
bool mrs_lib::geometry::operator< (const cyclic< flt, spec > & lhs,
const cyclic< flt, spec > & rhs 
)
+
+ +

Implementation of the comparison operation between two angles.

+

An angle is considered to be smaller than another angle if it is shorter - closer to zero.

+
Parameters
+ + + +
lhsleft-hand-side.
rhsright-hand-side.
+
+
+
Returns
true iff the shortest unsigned walk from lhs to 0 is less than from rhs to 0.
+ +
+
+ +

◆ operator<<()

+ +
+
+
+template<typename flt , class spec >
+ + + + + + + + + + + + + + + + + + +
std::ostream& mrs_lib::geometry::operator<< (std::ostream & out,
const cyclic< flt, spec > & ang 
)
+
+ +

Implementation of the stream output operator.

+
Parameters
+ + + +
outthe stream to write the angle to.
angthe angle to be written.
+
+
+
Returns
a reference to the stream.
+ +
+
+ +

◆ operator>()

+ +
+
+
+template<typename flt , class spec >
+ + + + + + + + + + + + + + + + + + +
bool mrs_lib::geometry::operator> (const cyclic< flt, spec > & lhs,
const cyclic< flt, spec > & rhs 
)
+
+ +

Implementation of the comparison operation between two angles.

+

An angle is considered to be larger than another angle if it is longer - further from zero.

+
Parameters
+ + + +
lhsleft-hand-side.
rhsright-hand-side.
+
+
+
Returns
true iff the shortest unsigned walk from lhs to 0 is more than from rhs to 0.
+ +
+
+
+
+ + + + diff --git a/cyclic_8h.js b/cyclic_8h.js new file mode 100644 index 00000000..03bb671d --- /dev/null +++ b/cyclic_8h.js @@ -0,0 +1,11 @@ +var cyclic_8h = +[ + [ "cyclic", "structmrs__lib_1_1geometry_1_1cyclic.html", "structmrs__lib_1_1geometry_1_1cyclic" ], + [ "radians", "structmrs__lib_1_1geometry_1_1radians.html", null ], + [ "sradians", "structmrs__lib_1_1geometry_1_1sradians.html", null ], + [ "degrees", "structmrs__lib_1_1geometry_1_1degrees.html", null ], + [ "sdegrees", "structmrs__lib_1_1geometry_1_1sdegrees.html", null ], + [ "operator<", "cyclic_8h.html#a8bb4c24541320f151f1781100c789cd3", null ], + [ "operator<<", "cyclic_8h.html#aebc05b8cec59b7a37a72024e26a449f7", null ], + [ "operator>", "cyclic_8h.html#a60745f66bbc41c3cb323c8b1c3f050d7", null ] +]; \ No newline at end of file diff --git a/cyclic_8h__dep__incl.map b/cyclic_8h__dep__incl.map new file mode 100644 index 00000000..72780697 --- /dev/null +++ b/cyclic_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/cyclic_8h__dep__incl.md5 b/cyclic_8h__dep__incl.md5 new file mode 100644 index 00000000..c774e999 --- /dev/null +++ b/cyclic_8h__dep__incl.md5 @@ -0,0 +1 @@ +a1358b704fb3ade8de3d4c603443a657 \ No newline at end of file diff --git a/cyclic_8h__dep__incl.png b/cyclic_8h__dep__incl.png new file mode 100644 index 00000000..ff4fcdba Binary files /dev/null and b/cyclic_8h__dep__incl.png differ diff --git a/cyclic_8h__incl.map b/cyclic_8h__incl.map new file mode 100644 index 00000000..7b91b518 --- /dev/null +++ b/cyclic_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/cyclic_8h__incl.md5 b/cyclic_8h__incl.md5 new file mode 100644 index 00000000..5ea28071 --- /dev/null +++ b/cyclic_8h__incl.md5 @@ -0,0 +1 @@ +639eab034e05be9669ef05a33099b25f \ No newline at end of file diff --git a/cyclic_8h__incl.png b/cyclic_8h__incl.png new file mode 100644 index 00000000..074c378d Binary files /dev/null and b/cyclic_8h__incl.png differ diff --git a/cyclic_8h_source.html b/cyclic_8h_source.html new file mode 100644 index 00000000..edcd0f7a --- /dev/null +++ b/cyclic_8h_source.html @@ -0,0 +1,387 @@ + + + + + + + +mrs_lib: include/mrs_lib/geometry/cyclic.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
cyclic.h
+
+
+Go to the documentation of this file.
1 // clang: MatousFormat
+
7 #ifndef CYCLIC_H
+
8 #define CYCLIC_H
+
9 
+
10 #include <cmath>
+
11 #include <ostream>
+
12 
+
13 namespace mrs_lib
+
14 {
+
15  namespace geometry
+
16  {
+
47  template <typename flt, class spec>
+
48  struct cyclic
+
49  {
+
55  cyclic() : val(minimum){};
+
61  cyclic(const flt val) : val(wrap(val)){};
+
67  cyclic(const cyclic& other) : val(other.val){};
+
73  cyclic(const spec& other) : val(other.val){};
+
74 
+
80  flt value() const
+
81  {
+
82  return val;
+
83  };
+
84 
+
85  static constexpr flt minimum = spec::minimum;
+
86  static constexpr flt supremum = spec::supremum;
+
87  static constexpr flt range =
+
88  supremum - minimum;
+
89  static constexpr flt half_range =
+
90  range / flt(2);
+
92  /* static_assert((supremum > minimum), "cyclic value: Range not valid"); */
+
93 
+
100  static bool inRange(const flt val)
+
101  {
+
102  return val >= minimum && val < supremum;
+
103  }
+
104 
+
114  static flt wrap(const flt val)
+
115  {
+
116  // these few ifs should cover most cases, improving speed and precision
+
117  if (val >= minimum)
+
118  {
+
119  if (val < supremum) // value is actually in range and doesn't need to be wrapped
+
120  return val;
+
121  else if (val < supremum + range)
+
122  return val - range; // to avoid unnecessary costly fmod operation for this case (assumed to be significantly more common than the general case)
+
123  } else
+
124  {
+
125  if (val >= minimum - range)
+
126  return val + range; // to avoid unnecessary costly fmod operation for this case (assumed to be significantly more common than the general case)
+
127  }
+
128 
+
129  // general case
+
130  const flt rem = std::fmod(val - minimum, range);
+
131  const flt wrapped = rem + minimum + std::signbit(rem) * range;
+
132  return wrapped;
+
133  }
+
134 
+
157  static flt unwrap(const flt what, const flt from)
+
158  {
+
159  return from + diff(what, from);
+
160  }
+
161 
+
171  static flt pdist(const flt from, const flt to)
+
172  {
+
173  return pdist(cyclic(from), cyclic(to));
+
174  }
+
175 
+
176  static flt pdist(const cyclic from, const cyclic to)
+
177  {
+
178  const flt tmp = to.val - from.val;
+
179  const flt dist = tmp + std::signbit(tmp) * range;
+
180  return dist;
+
181  }
+
182 
+
193  static flt diff(const flt minuend, const flt subtrahend)
+
194  {
+
195  return diff(cyclic(minuend), cyclic(subtrahend));
+
196  }
+
197 
+
198  static flt diff(const cyclic minuend, const cyclic subtrahend)
+
199  {
+
200  const flt d = minuend.val - subtrahend.val;
+
201  if (d < -half_range)
+
202  return d + range;
+
203  if (d >= half_range)
+
204  return d - range;
+
205  return d;
+
206  }
+
207 
+
219  static flt dist(const flt from, const flt to)
+
220  {
+
221  return dist(cyclic(from), cyclic(to));
+
222  }
+
223 
+
224  static flt dist(const cyclic from, const cyclic to)
+
225  {
+
226  return std::abs(diff(from, to));
+
227  }
+
228 
+
242  static flt interpUnwrapped(const flt from, const flt to, const flt coeff)
+
243  {
+
244  return interpUnwrapped(cyclic(from), cyclic(to), coeff);
+
245  }
+
246 
+
247  static flt interpUnwrapped(const cyclic from, const cyclic to, const flt coeff)
+
248  {
+
249  const flt dang = diff(to, from);
+
250  const flt intp = from.val + coeff * dang;
+
251  return intp;
+
252  }
+
253 
+
264  static flt interp(const flt from, const flt to, const flt coeff)
+
265  {
+
266  return wrap(interpUnwrapped(from, to, coeff));
+
267  }
+
268 
+
269  static flt interp(const cyclic from, const cyclic to, const flt coeff)
+
270  {
+
271  return wrap(interpUnwrapped(from, to, coeff));
+
272  }
+
273 
+
288  static flt pinterpUnwrapped(const flt from, const flt to, const flt coeff)
+
289  {
+
290  return pinterpUnwrapped(cyclic(from), cyclic(to), coeff);
+
291  }
+
292 
+
293  static flt pinterpUnwrapped(const cyclic from, const cyclic to, const flt coeff)
+
294  {
+
295  const flt dang = pdist(to, from);
+
296  const flt intp = from.val + coeff * dang;
+
297  return intp;
+
298  }
+
299 
+
311  static flt pinterp(const flt from, const flt to, const flt coeff)
+
312  {
+
313  return pinterpUnwrapped(cyclic(from), cyclic(to), coeff);
+
314  }
+
315 
+
316  static flt pinterp(const cyclic from, const cyclic to, const flt coeff)
+
317  {
+
318  return wrap(pinterpUnwrapped(from, to, coeff));
+
319  }
+
320 
+
333  template <class other_t>
+
334  static other_t convert(const cyclic& what)
+
335  {
+
336  return other_t(what.val / range * other_t::range);
+
337  }
+
338 
+
350  template <class other_t>
+
351  other_t convert() const
+
352  {
+
353  return other_t(val / range * other_t::range);
+
354  }
+
355 
+
356  // | ------------------------ Operators ----------------------- |
+
363  cyclic& operator=(const flt nval)
+
364  {
+
365  val = wrap(nval);
+
366  return *this;
+
367  };
+
374  cyclic& operator=(const cyclic& other)
+
375  {
+
376  val = other.val;
+
377  return *this;
+
378  };
+ +
386  {
+
387  val = other.val;
+
388  return *this;
+
389  };
+
390 
+
397  cyclic& operator+=(const cyclic& other)
+
398  {
+
399  val = wrap(val + other.val);
+
400  return *this;
+
401  };
+
402 
+
409  cyclic& operator-=(const cyclic& other)
+
410  {
+
411  val = diff(val, other.val);
+
412  return *this;
+
413  };
+
414 
+
422  friend spec operator+(const cyclic& lhs, const cyclic& rhs)
+
423  {
+
424  return wrap(lhs.val + rhs.val);
+
425  }
+
426 
+
434  friend flt operator-(const cyclic& lhs, const cyclic& rhs)
+
435  {
+
436  return diff(lhs, rhs);
+
437  }
+
438 
+
439  protected:
+
440  flt val;
+
441  };
+
442 
+
452  template <typename flt, class spec>
+
453  bool operator<(const cyclic<flt, spec>& lhs, const cyclic<flt, spec>& rhs)
+
454  {
+
455  return cyclic<flt, spec>::dist(lhs, 0) < cyclic<flt, spec>::dist(rhs, 0);
+
456  }
+
457 
+
467  template <typename flt, class spec>
+
468  bool operator>(const cyclic<flt, spec>& lhs, const cyclic<flt, spec>& rhs)
+
469  {
+
470  return cyclic<flt, spec>::dist(lhs, 0) > cyclic<flt, spec>::dist(rhs, 0);
+
471  }
+
472 
+
480  template <typename flt, class spec>
+
481  std::ostream& operator<<(std::ostream &out, const cyclic<flt, spec>& ang)
+
482  {
+
483  return (out << ang.value());
+
484  }
+
485 
+
489  struct radians : public cyclic<double, radians>
+
490  {
+
491  using cyclic<double, radians>::cyclic; // necessary to inherit constructors
+
492  static constexpr double minimum = 0;
+
493  static constexpr double supremum = 2 * M_PI;
+
494  };
+
495 
+
499  struct sradians : public cyclic<double, sradians>
+
500  {
+
501  using cyclic<double, sradians>::cyclic; // necessary to inherit constructors
+
502  static constexpr double minimum = -M_PI;
+
503  static constexpr double supremum = M_PI;
+
504  };
+
505 
+
509  struct degrees : public cyclic<double, degrees>
+
510  {
+
511  using cyclic<double, degrees>::cyclic; // necessary to inherit constructors
+
512  static constexpr double minimum = 0;
+
513  static constexpr double supremum = 360;
+
514  };
+
515 
+
519  struct sdegrees : public cyclic<double, sdegrees>
+
520  {
+
521  using cyclic<double, sdegrees>::cyclic; // necessary to inherit constructors
+
522  static constexpr double minimum = -180;
+
523  static constexpr double supremum = 180;
+
524  };
+
525  } // namespace geometry
+
526 } // namespace mrs_lib
+
527 
+
528 #endif // CYCLIC_H
+
+
+
mrs_lib::geometry::cyclic::value
flt value() const
Getter for val.
Definition: cyclic.h:80
+
mrs_lib::geometry::cyclic::pdist
static flt pdist(const flt from, const flt to)
Returns length of the shortest walk in the positive direction from the first parameter to the second ...
Definition: cyclic.h:171
+
mrs_lib::geometry::sdegrees
Convenience specialization of the cyclic class for signed degrees (from $-180$ to $180$).
Definition: cyclic.h:519
+
mrs_lib::geometry::cyclic::operator=
cyclic & operator=(const flt nval)
Assignment operator.
Definition: cyclic.h:363
+
mrs_lib::geometry::cyclic::cyclic
cyclic()
Default constructor.
Definition: cyclic.h:55
+
mrs_lib::geometry::operator<
bool operator<(const cyclic< flt, spec > &lhs, const cyclic< flt, spec > &rhs)
Implementation of the comparison operation between two angles.
Definition: cyclic.h:453
+
mrs_lib::geometry::operator<<
std::ostream & operator<<(std::ostream &out, const cyclic< flt, spec > &ang)
Implementation of the stream output operator.
Definition: cyclic.h:481
+
mrs_lib::geometry::cyclic::interpUnwrapped
static flt interpUnwrapped(const flt from, const flt to, const flt coeff)
Interpolation between two circular quantities without wrapping of the result.
Definition: cyclic.h:242
+
mrs_lib::geometry::cyclic::operator+
friend spec operator+(const cyclic &lhs, const cyclic &rhs)
Addition operator.
Definition: cyclic.h:422
+
mrs_lib::geometry::cyclic::diff
static flt diff(const flt minuend, const flt subtrahend)
Returns the difference between the two circular values.
Definition: cyclic.h:193
+
mrs_lib::geometry::cyclic::dist
static flt dist(const flt from, const flt to)
Returns the distance between the two circular values.
Definition: cyclic.h:219
+
mrs_lib::geometry::degrees
Convenience specialization of the cyclic class for unsigned degrees (from $0$ to $360$).
Definition: cyclic.h:509
+
mrs_lib::geometry::cyclic::cyclic
cyclic(const cyclic &other)
Copy constructor.
Definition: cyclic.h:67
+
mrs_lib::geometry::cyclic
Implementation of the a general cyclic value (such as angles in radians/degrees etc).
Definition: cyclic.h:48
+
mrs_lib::geometry::radians
Convenience specialization of the cyclic class for unsigned radians (from $0$ to $2\pi$).
Definition: cyclic.h:489
+
mrs_lib::geometry::sradians
Convenience specialization of the cyclic class for signed radians (from $-\pi$ to $\pi$).
Definition: cyclic.h:499
+
mrs_lib::geometry::cyclic::cyclic
cyclic(const spec &other)
Copy constructor.
Definition: cyclic.h:73
+
mrs_lib::geometry::operator>
bool operator>(const cyclic< flt, spec > &lhs, const cyclic< flt, spec > &rhs)
Implementation of the comparison operation between two angles.
Definition: cyclic.h:468
+
mrs_lib::geometry::cyclic::inRange
static bool inRange(const flt val)
Checks if val is within the valid interval of wrapped values.
Definition: cyclic.h:100
+
mrs_lib::geometry::cyclic::unwrap
static flt unwrap(const flt what, const flt from)
Returns value of the parameter what modified so that there is no "jump" between from and \t what.
Definition: cyclic.h:157
+
mrs_lib::geometry::cyclic::supremum
static constexpr flt supremum
Supremum of the valid interval of wrapped values .
Definition: cyclic.h:86
+
mrs_lib::geometry::cyclic::half_range
static constexpr flt half_range
Half of the range of the valid interval of wrapped values (used for some calculations).
Definition: cyclic.h:89
+
mrs_lib::geometry::cyclic::minimum
static constexpr flt minimum
Minimum of the valid interval of wrapped values .
Definition: cyclic.h:85
+
mrs_lib::geometry::cyclic::operator=
cyclic & operator=(const cyclic &other)
Assignment operator.
Definition: cyclic.h:374
+
mrs_lib
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
mrs_lib::geometry::cyclic::cyclic
cyclic(const flt val)
Constructor overload.
Definition: cyclic.h:61
+
mrs_lib::geometry::cyclic::operator-
friend flt operator-(const cyclic &lhs, const cyclic &rhs)
Subtraction operator (uses the diff() method).
Definition: cyclic.h:434
+
mrs_lib::geometry::cyclic::convert
other_t convert() const
Conversion between two different circular quantities.
Definition: cyclic.h:351
+
mrs_lib::geometry::cyclic::operator=
cyclic & operator=(cyclic &&other)
Move operator.
Definition: cyclic.h:385
+
mrs_lib::geometry::cyclic::pinterp
static flt pinterp(const flt from, const flt to, const flt coeff)
Interpolation between two circular quantities in the positive direction.
Definition: cyclic.h:311
+
mrs_lib::geometry::cyclic::operator+=
cyclic & operator+=(const cyclic &other)
Addition compound operator.
Definition: cyclic.h:397
+
mrs_lib::geometry::cyclic::interp
static flt interp(const flt from, const flt to, const flt coeff)
Interpolation between two circular quantities.
Definition: cyclic.h:264
+
mrs_lib::geometry::cyclic::operator-=
cyclic & operator-=(const cyclic &other)
Subtraction compound operator.
Definition: cyclic.h:409
+
mrs_lib::geometry::cyclic::pinterpUnwrapped
static flt pinterpUnwrapped(const flt from, const flt to, const flt coeff)
Interpolation between two circular quantities in the positive direction without wrapping of the resul...
Definition: cyclic.h:288
+
mrs_lib::geometry::cyclic::wrap
static flt wrap(const flt val)
Returns val, converted to the valid interval of values.
Definition: cyclic.h:114
+
mrs_lib::geometry::cyclic::range
static constexpr flt range
Range of the valid interval of wrapped values (also the period of the cyclic quantity).
Definition: cyclic.h:87
+
mrs_lib::geometry::cyclic::convert
static other_t convert(const cyclic &what)
Conversion between two different circular quantities.
Definition: cyclic.h:334
+ + + + diff --git a/cyclic__example_8cpp.html b/cyclic__example_8cpp.html new file mode 100644 index 00000000..2913cfb6 --- /dev/null +++ b/cyclic__example_8cpp.html @@ -0,0 +1,161 @@ + + + + + + + +mrs_lib: src/geometry/cyclic_example.cpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
cyclic_example.cpp File Reference
+
+
+ +

Example file for the cyclical values implementation (see the cyclic class) +More...

+
#include <mrs_lib/geometry/cyclic.h>
+#include <random>
+#include <ros/ros.h>
+
+ + Include dependency graph for cyclic_example.cpp:
+
+
+ +
+ + + +

+Classes

struct  degrees
 
+ + + + + +

+Typedefs

+using radians = mrs_lib::geometry::radians
 
+using sradians = mrs_lib::geometry::sradians
 
+ + + + + + + + + +

+Functions

+template<class T >
void printit (const T &a, const std::string &name)
 
+template<class T >
void printcont (const T &cont, const std::string &name)
 
+int main ()
 
+

Detailed Description

+

Example file for the cyclical values implementation (see the cyclic class)

+
Author
Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
+

This example may be run after building mrs_lib by executing rosrun mrs_lib cyclic_example.

+

See geometry/cyclic_example.cpp.

+
+
+ + + + diff --git a/cyclic__example_8cpp.js b/cyclic__example_8cpp.js new file mode 100644 index 00000000..59cff1de --- /dev/null +++ b/cyclic__example_8cpp.js @@ -0,0 +1,9 @@ +var cyclic__example_8cpp = +[ + [ "degrees", "structdegrees.html", null ], + [ "radians", "cyclic__example_8cpp.html#a71facd116ff8e4ba2919e639ce57c843", null ], + [ "sradians", "cyclic__example_8cpp.html#a88fa1de76b3de0c8c9546625214f6d3e", null ], + [ "main", "cyclic__example_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4", null ], + [ "printcont", "cyclic__example_8cpp.html#a2051a3b3cac629f0a52bd0d305dc6370", null ], + [ "printit", "cyclic__example_8cpp.html#a5505149b5d840ca0ec0c223194fe0cb5", null ] +]; \ No newline at end of file diff --git a/cyclic__example_8cpp__incl.map b/cyclic__example_8cpp__incl.map new file mode 100644 index 00000000..e9ab10dd --- /dev/null +++ b/cyclic__example_8cpp__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cyclic__example_8cpp__incl.md5 b/cyclic__example_8cpp__incl.md5 new file mode 100644 index 00000000..940e4bc6 --- /dev/null +++ b/cyclic__example_8cpp__incl.md5 @@ -0,0 +1 @@ +673bc3e9cd79c9c1895611b2d3b15ddc \ No newline at end of file diff --git a/cyclic__example_8cpp__incl.png b/cyclic__example_8cpp__incl.png new file mode 100644 index 00000000..d03f89cb Binary files /dev/null and b/cyclic__example_8cpp__incl.png differ diff --git a/dir_000001_000002.html b/dir_000001_000002.html new file mode 100644 index 00000000..24e012f5 --- /dev/null +++ b/dir_000001_000002.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: include/mrs_lib -> geometry Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

mrs_lib → geometry Relation

File in include/mrs_libIncludes file in include/mrs_lib/geometry
attitude_converter.hmisc.h
batch_visualizer.hshapes.h
dkf.hmisc.h
transformer.hmisc.h
visual_object.hshapes.h
+
+ + + + diff --git a/dir_000001_000003.html b/dir_000001_000003.html new file mode 100644 index 00000000..cd3604d9 --- /dev/null +++ b/dir_000001_000003.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: include/mrs_lib -> impl Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

mrs_lib → impl Relation

File in include/mrs_libIncludes file in include/mrs_lib/impl
ukf.hukf.hpp
vector_converter.hvector_converter.hpp
+
+ + + + diff --git a/dir_000007_000000.html b/dir_000007_000000.html new file mode 100644 index 00000000..2f2f6fd7 --- /dev/null +++ b/dir_000007_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/attitude_converter -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

attitude_converter → include Relation

File in src/attitude_converterIncludes file in include
attitude_converter.cppmrs_lib / attitude_converter.h
attitude_converter.cppmrs_lib / utils.h
+
+ + + + diff --git a/dir_000008_000000.html b/dir_000008_000000.html new file mode 100644 index 00000000..10a0ba96 --- /dev/null +++ b/dir_000008_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/batch_visualizer -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

batch_visualizer → include Relation

File in src/batch_visualizerIncludes file in include
batch_visualizer.cppmrs_lib / batch_visualizer.h
batch_visualizer.cppmrs_lib / geometry / shapes.h
batch_visualizer_demo.cppmrs_lib / batch_visualizer.h
batch_visualizer_demo.cppmrs_lib / geometry / misc.h
batch_visualizer_demo.cppmrs_lib / geometry / shapes.h
visual_object.cppmrs_lib / visual_object.h
+
+ + + + diff --git a/dir_000009_000000.html b/dir_000009_000000.html new file mode 100644 index 00000000..c68edc88 --- /dev/null +++ b/dir_000009_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/dynamic_publisher -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

dynamic_publisher → include Relation

File in src/dynamic_publisherIncludes file in include
dynamic_publisher.cppmrs_lib / dynamic_publisher.h
example.cppmrs_lib / dynamic_publisher.h
+
+ + + + diff --git a/dir_000011_000000.html b/dir_000011_000000.html new file mode 100644 index 00000000..2c69d259 --- /dev/null +++ b/dir_000011_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/param_loader -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

param_loader → include Relation

File in src/param_loaderIncludes file in include
example.cppmrs_lib / param_loader.h
param_loader.cppmrs_lib / param_loader.h
+
+ + + + diff --git a/dir_000012_000000.html b/dir_000012_000000.html new file mode 100644 index 00000000..338d50ad --- /dev/null +++ b/dir_000012_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/repredictor -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

repredictor → include Relation

File in src/repredictorIncludes file in include
example.cppmrs_lib / mutex.h
+
+ + + + diff --git a/dir_000013_000000.html b/dir_000013_000000.html new file mode 100644 index 00000000..67ad5644 --- /dev/null +++ b/dir_000013_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/rheiv -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

rheiv → include Relation

File in src/rheivIncludes file in include
example.cppmrs_lib / rheiv.h
+
+ + + + diff --git a/dir_000014_000000.html b/dir_000014_000000.html new file mode 100644 index 00000000..14a3b325 --- /dev/null +++ b/dir_000014_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/service_client_handler -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

service_client_handler → include Relation

File in src/service_client_handlerIncludes file in include
example.cppmrs_lib / service_client_handler.h
+
+ + + + diff --git a/dir_000015_000000.html b/dir_000015_000000.html new file mode 100644 index 00000000..3bd55fb4 --- /dev/null +++ b/dir_000015_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/subscribe_handler -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

subscribe_handler → include Relation

File in src/subscribe_handlerIncludes file in include
example.cppmrs_lib / subscribe_handler.h
simple_example.cppmrs_lib / subscribe_handler.h
+
+ + + + diff --git a/dir_000016_000000.html b/dir_000016_000000.html new file mode 100644 index 00000000..fc3135f7 --- /dev/null +++ b/dir_000016_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/transformer -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

transformer → include Relation

File in src/transformerIncludes file in include
transformer.cppmrs_lib / gps_conversions.h
+
+ + + + diff --git a/dir_000017_000000.html b/dir_000017_000000.html new file mode 100644 index 00000000..f806b33a --- /dev/null +++ b/dir_000017_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/ukf -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

ukf → include Relation

File in src/ukfIncludes file in include
example.cppmrs_lib / ukf.h
+
+ + + + diff --git a/dir_000018_000000.html b/dir_000018_000000.html new file mode 100644 index 00000000..294b5815 --- /dev/null +++ b/dir_000018_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/vector_converter -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

vector_converter → include Relation

File in src/vector_converterIncludes file in include
example.cppmrs_lib / vector_converter.h
vector_converter.cppmrs_lib / vector_converter.h
+
+ + + + diff --git a/dir_000019_000000.html b/dir_000019_000000.html new file mode 100644 index 00000000..a67bde7e --- /dev/null +++ b/dir_000019_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/geometry -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

geometry → include Relation

File in src/geometryIncludes file in include
cyclic.cppmrs_lib / geometry / cyclic.h
cyclic_example.cppmrs_lib / geometry / cyclic.h
misc.cppmrs_lib / geometry / misc.h
shapes.cppmrs_lib / geometry / misc.h
shapes.cppmrs_lib / geometry / shapes.h
tests.cppmrs_lib / geometry / cyclic.h
+
+ + + + diff --git a/dir_000020_000000.html b/dir_000020_000000.html new file mode 100644 index 00000000..0802ab84 --- /dev/null +++ b/dir_000020_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/iir_filter -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

iir_filter → include Relation

File in src/iir_filterIncludes file in include
iir_filter.cppmrs_lib / iir_filter.h
+
+ + + + diff --git a/dir_000022_000000.html b/dir_000022_000000.html new file mode 100644 index 00000000..21ac868b --- /dev/null +++ b/dir_000022_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/math -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

math → include Relation

File in src/mathIncludes file in include
math.cppmrs_lib / math.h
+
+ + + + diff --git a/dir_000023_000000.html b/dir_000023_000000.html new file mode 100644 index 00000000..f563f423 --- /dev/null +++ b/dir_000023_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/median_filter -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

median_filter → include Relation

File in src/median_filterIncludes file in include
median_filter.cppmrs_lib / median_filter.h
+
+ + + + diff --git a/dir_000024_000000.html b/dir_000024_000000.html new file mode 100644 index 00000000..a899bf99 --- /dev/null +++ b/dir_000024_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/mutex -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

mutex → include Relation

File in src/mutexIncludes file in include
mutex_tests.cppmrs_lib / mutex.h
+
+ + + + diff --git a/dir_000026_000000.html b/dir_000026_000000.html new file mode 100644 index 00000000..57c1234d --- /dev/null +++ b/dir_000026_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/notch_filter -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

notch_filter → include Relation

File in src/notch_filterIncludes file in include
notch_filter.cppmrs_lib / notch_filter.h
+
+ + + + diff --git a/dir_000027_000000.html b/dir_000027_000000.html new file mode 100644 index 00000000..3eaaaff0 --- /dev/null +++ b/dir_000027_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/profiler -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

profiler → include Relation

File in src/profilerIncludes file in include
profiler.cppmrs_lib / profiler.h
+
+ + + + diff --git a/dir_000028_000000.html b/dir_000028_000000.html new file mode 100644 index 00000000..09450e88 --- /dev/null +++ b/dir_000028_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/safety_zone -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

safety_zone → include Relation

File in src/safety_zoneIncludes file in include
point_obstacle / point_obstacle.cppmrs_lib / math.h
+
+ + + + diff --git a/dir_000029_000000.html b/dir_000029_000000.html new file mode 100644 index 00000000..3ad89a20 --- /dev/null +++ b/dir_000029_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/safety_zone/point_obstacle -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

point_obstacle → include Relation

File in src/safety_zone/point_obstacleIncludes file in include
point_obstacle.cppmrs_lib / math.h
+
+ + + + diff --git a/dir_000031_000000.html b/dir_000031_000000.html new file mode 100644 index 00000000..146e38b7 --- /dev/null +++ b/dir_000031_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/scope_timer -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

scope_timer → include Relation

File in src/scope_timerIncludes file in include
scope_timer.cppmrs_lib / scope_timer.h
+
+ + + + diff --git a/dir_000032_000000.html b/dir_000032_000000.html new file mode 100644 index 00000000..394b690c --- /dev/null +++ b/dir_000032_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/timeout_manager -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

timeout_manager → include Relation

File in src/timeout_managerIncludes file in include
timeout_manager.cppmrs_lib / timeout_manager.h
+
+ + + + diff --git a/dir_000035_000000.html b/dir_000035_000000.html new file mode 100644 index 00000000..2c2da400 --- /dev/null +++ b/dir_000035_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: src/utils -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

utils → include Relation

File in src/utilsIncludes file in include
utils.cppmrs_lib / utils.h
+
+ + + + diff --git a/dir_000037_000000.html b/dir_000037_000000.html new file mode 100644 index 00000000..d16cc575 --- /dev/null +++ b/dir_000037_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: test/attitude_converter -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

attitude_converter → include Relation

File in test/attitude_converterIncludes file in include
test.cppmrs_lib / attitude_converter.h
test.cppmrs_lib / geometry / cyclic.h
+
+ + + + diff --git a/dir_000038_000000.html b/dir_000038_000000.html new file mode 100644 index 00000000..337a5076 --- /dev/null +++ b/dir_000038_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: test/geometry -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

geometry → include Relation

File in test/geometryIncludes file in include
test.cppmrs_lib / geometry / cyclic.h
test.cppmrs_lib / geometry / misc.h
+
+ + + + diff --git a/dir_000039_000000.html b/dir_000039_000000.html new file mode 100644 index 00000000..9708451c --- /dev/null +++ b/dir_000039_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: test/math -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

math → include Relation

File in test/mathIncludes file in include
test.cppmrs_lib / math.h
+
+ + + + diff --git a/dir_000040_000000.html b/dir_000040_000000.html new file mode 100644 index 00000000..32dfbdb7 --- /dev/null +++ b/dir_000040_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: test/median_filter -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

median_filter → include Relation

File in test/median_filterIncludes file in include
test.cppmrs_lib / median_filter.h
+
+ + + + diff --git a/dir_000041_000000.html b/dir_000041_000000.html new file mode 100644 index 00000000..75e0af5d --- /dev/null +++ b/dir_000041_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: test/param_loader -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

param_loader → include Relation

File in test/param_loaderIncludes file in include
test.cppmrs_lib / param_loader.h
+
+ + + + diff --git a/dir_000042_000000.html b/dir_000042_000000.html new file mode 100644 index 00000000..8bf54628 --- /dev/null +++ b/dir_000042_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: test/publisher_handler -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

publisher_handler → include Relation

File in test/publisher_handlerIncludes file in include
test.cppmrs_lib / publisher_handler.h
+
+ + + + diff --git a/dir_000044_000000.html b/dir_000044_000000.html new file mode 100644 index 00000000..d967bb5a --- /dev/null +++ b/dir_000044_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: test/service_client_handler -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

service_client_handler → include Relation

File in test/service_client_handlerIncludes file in include
test.cppmrs_lib / service_client_handler.h
+
+ + + + diff --git a/dir_000045_000000.html b/dir_000045_000000.html new file mode 100644 index 00000000..ead7fa04 --- /dev/null +++ b/dir_000045_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: test/subscribe_handler -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

subscribe_handler → include Relation

File in test/subscribe_handlerIncludes file in include
test.cppmrs_lib / subscribe_handler.h
+
+ + + + diff --git a/dir_000046_000000.html b/dir_000046_000000.html new file mode 100644 index 00000000..5796db32 --- /dev/null +++ b/dir_000046_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: test/timeout_manager -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

timeout_manager → include Relation

File in test/timeout_managerIncludes file in include
test.cppmrs_lib / timeout_manager.h
test.cppmrs_lib / utils.h
+
+ + + + diff --git a/dir_000047_000000.html b/dir_000047_000000.html new file mode 100644 index 00000000..f976a418 --- /dev/null +++ b/dir_000047_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: test/timer -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

timer → include Relation

File in test/timerIncludes file in include
test.cppmrs_lib / utils.h
+
+ + + + diff --git a/dir_000048_000000.html b/dir_000048_000000.html new file mode 100644 index 00000000..424eb104 --- /dev/null +++ b/dir_000048_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: test/transformer -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

transformer → include Relation

File in test/transformerIncludes file in include
test.cppmrs_lib / attitude_converter.h
test.cppmrs_lib / gps_conversions.h
+
+ + + + diff --git a/dir_000049_000000.html b/dir_000049_000000.html new file mode 100644 index 00000000..cd29c606 --- /dev/null +++ b/dir_000049_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: test/ukf -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

ukf → include Relation

File in test/ukfIncludes file in include
test.cppmrs_lib / ukf.h
+
+ + + + diff --git a/dir_000050_000000.html b/dir_000050_000000.html new file mode 100644 index 00000000..7b8f34c2 --- /dev/null +++ b/dir_000050_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: test/utils -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

utils → include Relation

File in test/utilsIncludes file in include
test.cppmrs_lib / utils.h
+
+ + + + diff --git a/dir_000051_000000.html b/dir_000051_000000.html new file mode 100644 index 00000000..c47c451f --- /dev/null +++ b/dir_000051_000000.html @@ -0,0 +1,98 @@ + + + + + + + +mrs_lib: test/vector_converter -> include Relation + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+

vector_converter → include Relation

File in test/vector_converterIncludes file in include
test.cppmrs_lib / vector_converter.h
+
+ + + + diff --git a/dir_137818f07b93cd14b6ce92e51caad2df.html b/dir_137818f07b93cd14b6ce92e51caad2df.html new file mode 100644 index 00000000..a1c90850 --- /dev/null +++ b/dir_137818f07b93cd14b6ce92e51caad2df.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: test/math Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
math Directory Reference
+
+
+
+ + Directory dependency graph for math:
+
+
+ +
+
+ + + + diff --git a/dir_137818f07b93cd14b6ce92e51caad2df.js b/dir_137818f07b93cd14b6ce92e51caad2df.js new file mode 100644 index 00000000..59ebf7bc --- /dev/null +++ b/dir_137818f07b93cd14b6ce92e51caad2df.js @@ -0,0 +1,4 @@ +var dir_137818f07b93cd14b6ce92e51caad2df = +[ + [ "probit_gts.h", "probit__gts_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_137818f07b93cd14b6ce92e51caad2df_dep.map b/dir_137818f07b93cd14b6ce92e51caad2df_dep.map new file mode 100644 index 00000000..0bc8a287 --- /dev/null +++ b/dir_137818f07b93cd14b6ce92e51caad2df_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_137818f07b93cd14b6ce92e51caad2df_dep.md5 b/dir_137818f07b93cd14b6ce92e51caad2df_dep.md5 new file mode 100644 index 00000000..0462727c --- /dev/null +++ b/dir_137818f07b93cd14b6ce92e51caad2df_dep.md5 @@ -0,0 +1 @@ +a6658211ef7beb45fb9e80ee1409263a \ No newline at end of file diff --git a/dir_137818f07b93cd14b6ce92e51caad2df_dep.png b/dir_137818f07b93cd14b6ce92e51caad2df_dep.png new file mode 100644 index 00000000..833def93 Binary files /dev/null and b/dir_137818f07b93cd14b6ce92e51caad2df_dep.png differ diff --git a/dir_13e138d54eb8818da29c3992edef070a.html b/dir_13e138d54eb8818da29c3992edef070a.html new file mode 100644 index 00000000..dcb7966d --- /dev/null +++ b/dir_13e138d54eb8818da29c3992edef070a.html @@ -0,0 +1,146 @@ + + + + + + + +mrs_lib: test Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
test Directory Reference
+
+
+
+ + Directory dependency graph for test:
+
+
+ + + +

+Directories

+
+
+ + + + diff --git a/dir_13e138d54eb8818da29c3992edef070a.js b/dir_13e138d54eb8818da29c3992edef070a.js new file mode 100644 index 00000000..122e6d4b --- /dev/null +++ b/dir_13e138d54eb8818da29c3992edef070a.js @@ -0,0 +1,4 @@ +var dir_13e138d54eb8818da29c3992edef070a = +[ + [ "math", "dir_137818f07b93cd14b6ce92e51caad2df.html", "dir_137818f07b93cd14b6ce92e51caad2df" ] +]; \ No newline at end of file diff --git a/dir_13e138d54eb8818da29c3992edef070a_dep.map b/dir_13e138d54eb8818da29c3992edef070a_dep.map new file mode 100644 index 00000000..ef7f40f5 --- /dev/null +++ b/dir_13e138d54eb8818da29c3992edef070a_dep.map @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dir_13e138d54eb8818da29c3992edef070a_dep.md5 b/dir_13e138d54eb8818da29c3992edef070a_dep.md5 new file mode 100644 index 00000000..ae5d1ff5 --- /dev/null +++ b/dir_13e138d54eb8818da29c3992edef070a_dep.md5 @@ -0,0 +1 @@ +fca8fc13ffcc2ad1c476a3620d4255b8 \ No newline at end of file diff --git a/dir_13e138d54eb8818da29c3992edef070a_dep.png b/dir_13e138d54eb8818da29c3992edef070a_dep.png new file mode 100644 index 00000000..438538e3 Binary files /dev/null and b/dir_13e138d54eb8818da29c3992edef070a_dep.png differ diff --git a/dir_2489d4eba4efb8e04d8467655cf06abd.html b/dir_2489d4eba4efb8e04d8467655cf06abd.html new file mode 100644 index 00000000..4bcb5ed8 --- /dev/null +++ b/dir_2489d4eba4efb8e04d8467655cf06abd.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: src/timeout_manager Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
timeout_manager Directory Reference
+
+
+
+ + Directory dependency graph for timeout_manager:
+
+
+ +
+
+ + + + diff --git a/dir_2489d4eba4efb8e04d8467655cf06abd_dep.map b/dir_2489d4eba4efb8e04d8467655cf06abd_dep.map new file mode 100644 index 00000000..38c278f4 --- /dev/null +++ b/dir_2489d4eba4efb8e04d8467655cf06abd_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_2489d4eba4efb8e04d8467655cf06abd_dep.md5 b/dir_2489d4eba4efb8e04d8467655cf06abd_dep.md5 new file mode 100644 index 00000000..6f96b70c --- /dev/null +++ b/dir_2489d4eba4efb8e04d8467655cf06abd_dep.md5 @@ -0,0 +1 @@ +33f73ea71f4bb344b4340a8bed667490 \ No newline at end of file diff --git a/dir_2489d4eba4efb8e04d8467655cf06abd_dep.png b/dir_2489d4eba4efb8e04d8467655cf06abd_dep.png new file mode 100644 index 00000000..56fc2b85 Binary files /dev/null and b/dir_2489d4eba4efb8e04d8467655cf06abd_dep.png differ diff --git a/dir_313caf1132e152dd9b58bea13a4052ca.html b/dir_313caf1132e152dd9b58bea13a4052ca.html new file mode 100644 index 00000000..0f7066c6 --- /dev/null +++ b/dir_313caf1132e152dd9b58bea13a4052ca.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: src/utils Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
utils Directory Reference
+
+
+
+ + Directory dependency graph for utils:
+
+
+ +
+
+ + + + diff --git a/dir_313caf1132e152dd9b58bea13a4052ca_dep.map b/dir_313caf1132e152dd9b58bea13a4052ca_dep.map new file mode 100644 index 00000000..07dfa8d3 --- /dev/null +++ b/dir_313caf1132e152dd9b58bea13a4052ca_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_313caf1132e152dd9b58bea13a4052ca_dep.md5 b/dir_313caf1132e152dd9b58bea13a4052ca_dep.md5 new file mode 100644 index 00000000..bfe0668b --- /dev/null +++ b/dir_313caf1132e152dd9b58bea13a4052ca_dep.md5 @@ -0,0 +1 @@ +d1d216bf6e57e044161cce00d0f82fa4 \ No newline at end of file diff --git a/dir_313caf1132e152dd9b58bea13a4052ca_dep.png b/dir_313caf1132e152dd9b58bea13a4052ca_dep.png new file mode 100644 index 00000000..4b6035af Binary files /dev/null and b/dir_313caf1132e152dd9b58bea13a4052ca_dep.png differ diff --git a/dir_405fd32de3649961a5f009c7a3fe84df.html b/dir_405fd32de3649961a5f009c7a3fe84df.html new file mode 100644 index 00000000..fc80412d --- /dev/null +++ b/dir_405fd32de3649961a5f009c7a3fe84df.html @@ -0,0 +1,122 @@ + + + + + + + +mrs_lib: src/geometry Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
geometry Directory Reference
+
+
+
+ + Directory dependency graph for geometry:
+
+
+ + + + + + +

+Files

file  cyclic_example.cpp
 Example file for the cyclical values implementation (see the cyclic class)
 
+
+
+ + + + diff --git a/dir_405fd32de3649961a5f009c7a3fe84df.js b/dir_405fd32de3649961a5f009c7a3fe84df.js new file mode 100644 index 00000000..d3ad75fc --- /dev/null +++ b/dir_405fd32de3649961a5f009c7a3fe84df.js @@ -0,0 +1,4 @@ +var dir_405fd32de3649961a5f009c7a3fe84df = +[ + [ "cyclic_example.cpp", "cyclic__example_8cpp.html", "cyclic__example_8cpp" ] +]; \ No newline at end of file diff --git a/dir_405fd32de3649961a5f009c7a3fe84df_dep.map b/dir_405fd32de3649961a5f009c7a3fe84df_dep.map new file mode 100644 index 00000000..edc11f2b --- /dev/null +++ b/dir_405fd32de3649961a5f009c7a3fe84df_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_405fd32de3649961a5f009c7a3fe84df_dep.md5 b/dir_405fd32de3649961a5f009c7a3fe84df_dep.md5 new file mode 100644 index 00000000..5cde60ab --- /dev/null +++ b/dir_405fd32de3649961a5f009c7a3fe84df_dep.md5 @@ -0,0 +1 @@ +5e0a571841dd7d1ddb1a4cf6c4d4d458 \ No newline at end of file diff --git a/dir_405fd32de3649961a5f009c7a3fe84df_dep.png b/dir_405fd32de3649961a5f009c7a3fe84df_dep.png new file mode 100644 index 00000000..09f5d45d Binary files /dev/null and b/dir_405fd32de3649961a5f009c7a3fe84df_dep.png differ diff --git a/dir_459eb1320bcc4da5aac4b85751529118.html b/dir_459eb1320bcc4da5aac4b85751529118.html new file mode 100644 index 00000000..b28a99d6 --- /dev/null +++ b/dir_459eb1320bcc4da5aac4b85751529118.html @@ -0,0 +1,122 @@ + + + + + + + +mrs_lib: src/repredictor Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
repredictor Directory Reference
+
+
+
+ + Directory dependency graph for repredictor:
+
+
+ + + + + + +

+Files

file  example.cpp
 Example file for the Repredictor implementation.
 
+
+
+ + + + diff --git a/dir_459eb1320bcc4da5aac4b85751529118.js b/dir_459eb1320bcc4da5aac4b85751529118.js new file mode 100644 index 00000000..ab565f2f --- /dev/null +++ b/dir_459eb1320bcc4da5aac4b85751529118.js @@ -0,0 +1,4 @@ +var dir_459eb1320bcc4da5aac4b85751529118 = +[ + [ "example.cpp", "repredictor_2example_8cpp.html", "repredictor_2example_8cpp" ] +]; \ No newline at end of file diff --git a/dir_459eb1320bcc4da5aac4b85751529118_dep.map b/dir_459eb1320bcc4da5aac4b85751529118_dep.map new file mode 100644 index 00000000..c29e7164 --- /dev/null +++ b/dir_459eb1320bcc4da5aac4b85751529118_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_459eb1320bcc4da5aac4b85751529118_dep.md5 b/dir_459eb1320bcc4da5aac4b85751529118_dep.md5 new file mode 100644 index 00000000..03b4bead --- /dev/null +++ b/dir_459eb1320bcc4da5aac4b85751529118_dep.md5 @@ -0,0 +1 @@ +cd99201d1730fcdc4de7fc0c9cb2e3d8 \ No newline at end of file diff --git a/dir_459eb1320bcc4da5aac4b85751529118_dep.png b/dir_459eb1320bcc4da5aac4b85751529118_dep.png new file mode 100644 index 00000000..6252b78f Binary files /dev/null and b/dir_459eb1320bcc4da5aac4b85751529118_dep.png differ diff --git a/dir_47f9543a1dcda4cfb704fcee5b674cab.html b/dir_47f9543a1dcda4cfb704fcee5b674cab.html new file mode 100644 index 00000000..5ba60752 --- /dev/null +++ b/dir_47f9543a1dcda4cfb704fcee5b674cab.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: test/median_filter Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
median_filter Directory Reference
+
+
+
+ + Directory dependency graph for median_filter:
+
+
+ +
+
+ + + + diff --git a/dir_47f9543a1dcda4cfb704fcee5b674cab_dep.map b/dir_47f9543a1dcda4cfb704fcee5b674cab_dep.map new file mode 100644 index 00000000..d1aff082 --- /dev/null +++ b/dir_47f9543a1dcda4cfb704fcee5b674cab_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_47f9543a1dcda4cfb704fcee5b674cab_dep.md5 b/dir_47f9543a1dcda4cfb704fcee5b674cab_dep.md5 new file mode 100644 index 00000000..02490243 --- /dev/null +++ b/dir_47f9543a1dcda4cfb704fcee5b674cab_dep.md5 @@ -0,0 +1 @@ +c06bebd4dfcfe9d46a88f7a4395d792e \ No newline at end of file diff --git a/dir_47f9543a1dcda4cfb704fcee5b674cab_dep.png b/dir_47f9543a1dcda4cfb704fcee5b674cab_dep.png new file mode 100644 index 00000000..157bc6e7 Binary files /dev/null and b/dir_47f9543a1dcda4cfb704fcee5b674cab_dep.png differ diff --git a/dir_4c2e94721b2acbf7eee2d1efd59bf8db.html b/dir_4c2e94721b2acbf7eee2d1efd59bf8db.html new file mode 100644 index 00000000..d95ce23d --- /dev/null +++ b/dir_4c2e94721b2acbf7eee2d1efd59bf8db.html @@ -0,0 +1,122 @@ + + + + + + + +mrs_lib: src/dynamic_publisher Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
dynamic_publisher Directory Reference
+
+
+
+ + Directory dependency graph for dynamic_publisher:
+
+
+ + + + + + +

+Files

file  example.cpp
 Example file for the DynamicPublisher convenience class.
 
+
+
+ + + + diff --git a/dir_4c2e94721b2acbf7eee2d1efd59bf8db.js b/dir_4c2e94721b2acbf7eee2d1efd59bf8db.js new file mode 100644 index 00000000..223a5dda --- /dev/null +++ b/dir_4c2e94721b2acbf7eee2d1efd59bf8db.js @@ -0,0 +1,4 @@ +var dir_4c2e94721b2acbf7eee2d1efd59bf8db = +[ + [ "example.cpp", "dynamic__publisher_2example_8cpp.html", "dynamic__publisher_2example_8cpp" ] +]; \ No newline at end of file diff --git a/dir_4c2e94721b2acbf7eee2d1efd59bf8db_dep.map b/dir_4c2e94721b2acbf7eee2d1efd59bf8db_dep.map new file mode 100644 index 00000000..129ab45e --- /dev/null +++ b/dir_4c2e94721b2acbf7eee2d1efd59bf8db_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_4c2e94721b2acbf7eee2d1efd59bf8db_dep.md5 b/dir_4c2e94721b2acbf7eee2d1efd59bf8db_dep.md5 new file mode 100644 index 00000000..9e3c40f3 --- /dev/null +++ b/dir_4c2e94721b2acbf7eee2d1efd59bf8db_dep.md5 @@ -0,0 +1 @@ +aaee0fd5077c1f169de4a4f661073d58 \ No newline at end of file diff --git a/dir_4c2e94721b2acbf7eee2d1efd59bf8db_dep.png b/dir_4c2e94721b2acbf7eee2d1efd59bf8db_dep.png new file mode 100644 index 00000000..ddc0d783 Binary files /dev/null and b/dir_4c2e94721b2acbf7eee2d1efd59bf8db_dep.png differ diff --git a/dir_4e76df18d944fae8b852653d4ae3a030.html b/dir_4e76df18d944fae8b852653d4ae3a030.html new file mode 100644 index 00000000..c98ce79d --- /dev/null +++ b/dir_4e76df18d944fae8b852653d4ae3a030.html @@ -0,0 +1,109 @@ + + + + + + + +mrs_lib: src/nckf Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
nckf Directory Reference
+
+
+ + + + + +

+Files

file  nckf_tests.cpp
 Tests for the UKF implementation.
 
+
+
+ + + + diff --git a/dir_4e76df18d944fae8b852653d4ae3a030.js b/dir_4e76df18d944fae8b852653d4ae3a030.js new file mode 100644 index 00000000..7c6a6202 --- /dev/null +++ b/dir_4e76df18d944fae8b852653d4ae3a030.js @@ -0,0 +1,4 @@ +var dir_4e76df18d944fae8b852653d4ae3a030 = +[ + [ "nckf_tests.cpp", "nckf__tests_8cpp.html", "nckf__tests_8cpp" ] +]; \ No newline at end of file diff --git a/dir_52bd7864aeac0cbd0134df90af2e1447.html b/dir_52bd7864aeac0cbd0134df90af2e1447.html new file mode 100644 index 00000000..d654291f --- /dev/null +++ b/dir_52bd7864aeac0cbd0134df90af2e1447.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: src/notch_filter Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
notch_filter Directory Reference
+
+
+
+ + Directory dependency graph for notch_filter:
+
+
+ +
+
+ + + + diff --git a/dir_52bd7864aeac0cbd0134df90af2e1447_dep.map b/dir_52bd7864aeac0cbd0134df90af2e1447_dep.map new file mode 100644 index 00000000..19be5f4e --- /dev/null +++ b/dir_52bd7864aeac0cbd0134df90af2e1447_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_52bd7864aeac0cbd0134df90af2e1447_dep.md5 b/dir_52bd7864aeac0cbd0134df90af2e1447_dep.md5 new file mode 100644 index 00000000..4853783a --- /dev/null +++ b/dir_52bd7864aeac0cbd0134df90af2e1447_dep.md5 @@ -0,0 +1 @@ +1255d3eb667b632b6c8eb921daaddd1a \ No newline at end of file diff --git a/dir_52bd7864aeac0cbd0134df90af2e1447_dep.png b/dir_52bd7864aeac0cbd0134df90af2e1447_dep.png new file mode 100644 index 00000000..f682740c Binary files /dev/null and b/dir_52bd7864aeac0cbd0134df90af2e1447_dep.png differ diff --git a/dir_53e6fa9553ac22a5646d2a2b2d7b97a1.html b/dir_53e6fa9553ac22a5646d2a2b2d7b97a1.html new file mode 100644 index 00000000..f9005ea2 --- /dev/null +++ b/dir_53e6fa9553ac22a5646d2a2b2d7b97a1.html @@ -0,0 +1,102 @@ + + + + + + + +mrs_lib: scripts Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
scripts Directory Reference
+
+
+
+
+ + + + diff --git a/dir_59dc5f73bda78a76f6ce4f5474a95632.html b/dir_59dc5f73bda78a76f6ce4f5474a95632.html new file mode 100644 index 00000000..81d0923f --- /dev/null +++ b/dir_59dc5f73bda78a76f6ce4f5474a95632.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: src/attitude_converter Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
attitude_converter Directory Reference
+
+
+
+ + Directory dependency graph for attitude_converter:
+
+
+ +
+
+ + + + diff --git a/dir_59dc5f73bda78a76f6ce4f5474a95632_dep.map b/dir_59dc5f73bda78a76f6ce4f5474a95632_dep.map new file mode 100644 index 00000000..fe8f4822 --- /dev/null +++ b/dir_59dc5f73bda78a76f6ce4f5474a95632_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_59dc5f73bda78a76f6ce4f5474a95632_dep.md5 b/dir_59dc5f73bda78a76f6ce4f5474a95632_dep.md5 new file mode 100644 index 00000000..d90bce86 --- /dev/null +++ b/dir_59dc5f73bda78a76f6ce4f5474a95632_dep.md5 @@ -0,0 +1 @@ +10eb6123b0d0ce1d5f1ae350e83b55da \ No newline at end of file diff --git a/dir_59dc5f73bda78a76f6ce4f5474a95632_dep.png b/dir_59dc5f73bda78a76f6ce4f5474a95632_dep.png new file mode 100644 index 00000000..4f920790 Binary files /dev/null and b/dir_59dc5f73bda78a76f6ce4f5474a95632_dep.png differ diff --git a/dir_5b7f8725d4f972ca8245f6a979e7a433.html b/dir_5b7f8725d4f972ca8245f6a979e7a433.html new file mode 100644 index 00000000..259fd177 --- /dev/null +++ b/dir_5b7f8725d4f972ca8245f6a979e7a433.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: src/mutex Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mutex Directory Reference
+
+
+
+ + Directory dependency graph for mutex:
+
+
+ +
+
+ + + + diff --git a/dir_5b7f8725d4f972ca8245f6a979e7a433_dep.map b/dir_5b7f8725d4f972ca8245f6a979e7a433_dep.map new file mode 100644 index 00000000..fd25eb64 --- /dev/null +++ b/dir_5b7f8725d4f972ca8245f6a979e7a433_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_5b7f8725d4f972ca8245f6a979e7a433_dep.md5 b/dir_5b7f8725d4f972ca8245f6a979e7a433_dep.md5 new file mode 100644 index 00000000..430c67b6 --- /dev/null +++ b/dir_5b7f8725d4f972ca8245f6a979e7a433_dep.md5 @@ -0,0 +1 @@ +1cb34f43e583a194221e95a7def0158c \ No newline at end of file diff --git a/dir_5b7f8725d4f972ca8245f6a979e7a433_dep.png b/dir_5b7f8725d4f972ca8245f6a979e7a433_dep.png new file mode 100644 index 00000000..372bf508 Binary files /dev/null and b/dir_5b7f8725d4f972ca8245f6a979e7a433_dep.png differ diff --git a/dir_5cd313a56eb052b35bf1996eeb3f0983.html b/dir_5cd313a56eb052b35bf1996eeb3f0983.html new file mode 100644 index 00000000..84269871 --- /dev/null +++ b/dir_5cd313a56eb052b35bf1996eeb3f0983.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: test/service_client_handler Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
service_client_handler Directory Reference
+
+
+
+ + Directory dependency graph for service_client_handler:
+
+
+ +
+
+ + + + diff --git a/dir_5cd313a56eb052b35bf1996eeb3f0983_dep.map b/dir_5cd313a56eb052b35bf1996eeb3f0983_dep.map new file mode 100644 index 00000000..959d9e05 --- /dev/null +++ b/dir_5cd313a56eb052b35bf1996eeb3f0983_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_5cd313a56eb052b35bf1996eeb3f0983_dep.md5 b/dir_5cd313a56eb052b35bf1996eeb3f0983_dep.md5 new file mode 100644 index 00000000..edc9642c --- /dev/null +++ b/dir_5cd313a56eb052b35bf1996eeb3f0983_dep.md5 @@ -0,0 +1 @@ +b9bbaac7cca101e3015769cfd9d98372 \ No newline at end of file diff --git a/dir_5cd313a56eb052b35bf1996eeb3f0983_dep.png b/dir_5cd313a56eb052b35bf1996eeb3f0983_dep.png new file mode 100644 index 00000000..cdd99e55 Binary files /dev/null and b/dir_5cd313a56eb052b35bf1996eeb3f0983_dep.png differ diff --git a/dir_627f9e3e44b98db30b77a80b8afbb9e4.html b/dir_627f9e3e44b98db30b77a80b8afbb9e4.html new file mode 100644 index 00000000..30046209 --- /dev/null +++ b/dir_627f9e3e44b98db30b77a80b8afbb9e4.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: test/ukf Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ukf Directory Reference
+
+
+
+ + Directory dependency graph for ukf:
+
+
+ +
+
+ + + + diff --git a/dir_627f9e3e44b98db30b77a80b8afbb9e4_dep.map b/dir_627f9e3e44b98db30b77a80b8afbb9e4_dep.map new file mode 100644 index 00000000..17999aa8 --- /dev/null +++ b/dir_627f9e3e44b98db30b77a80b8afbb9e4_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_627f9e3e44b98db30b77a80b8afbb9e4_dep.md5 b/dir_627f9e3e44b98db30b77a80b8afbb9e4_dep.md5 new file mode 100644 index 00000000..6f21b51f --- /dev/null +++ b/dir_627f9e3e44b98db30b77a80b8afbb9e4_dep.md5 @@ -0,0 +1 @@ +2e9333598b8e5d4c48012a3c407c06b4 \ No newline at end of file diff --git a/dir_627f9e3e44b98db30b77a80b8afbb9e4_dep.png b/dir_627f9e3e44b98db30b77a80b8afbb9e4_dep.png new file mode 100644 index 00000000..24ce07f3 Binary files /dev/null and b/dir_627f9e3e44b98db30b77a80b8afbb9e4_dep.png differ diff --git a/dir_6584bc0d88c193127476cb5dc95baf39.html b/dir_6584bc0d88c193127476cb5dc95baf39.html new file mode 100644 index 00000000..eb88ff9a --- /dev/null +++ b/dir_6584bc0d88c193127476cb5dc95baf39.html @@ -0,0 +1,102 @@ + + + + + + + +mrs_lib: src/image_publisher Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
image_publisher Directory Reference
+
+
+
+
+ + + + diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 00000000..13f4df84 --- /dev/null +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,166 @@ + + + + + + + +mrs_lib: src Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
src Directory Reference
+
+
+
+ + Directory dependency graph for src:
+
+
+ + + +

+Directories

+
+
+ + + + diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.js b/dir_68267d1309a1af8e8297ef4c3efbcdba.js new file mode 100644 index 00000000..3fa81237 --- /dev/null +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba.js @@ -0,0 +1,13 @@ +var dir_68267d1309a1af8e8297ef4c3efbcdba = +[ + [ "dynamic_publisher", "dir_4c2e94721b2acbf7eee2d1efd59bf8db.html", "dir_4c2e94721b2acbf7eee2d1efd59bf8db" ], + [ "geometry", "dir_405fd32de3649961a5f009c7a3fe84df.html", "dir_405fd32de3649961a5f009c7a3fe84df" ], + [ "lkf", "dir_9e9e485811fd7b0342cca4e7c3cf123b.html", "dir_9e9e485811fd7b0342cca4e7c3cf123b" ], + [ "nckf", "dir_4e76df18d944fae8b852653d4ae3a030.html", "dir_4e76df18d944fae8b852653d4ae3a030" ], + [ "param_loader", "dir_d81f13436e73f242cdf25a742f3a9678.html", "dir_d81f13436e73f242cdf25a742f3a9678" ], + [ "repredictor", "dir_459eb1320bcc4da5aac4b85751529118.html", "dir_459eb1320bcc4da5aac4b85751529118" ], + [ "rheiv", "dir_d20a67be47c1454b19aa07d8b0143440.html", "dir_d20a67be47c1454b19aa07d8b0143440" ], + [ "subscribe_handler", "dir_f003de2bf99885e59674f01f3665fb82.html", "dir_f003de2bf99885e59674f01f3665fb82" ], + [ "ukf", "dir_a5078ef47331b4526bf3f96e987ee465.html", "dir_a5078ef47331b4526bf3f96e987ee465" ], + [ "vector_converter", "dir_dcbbf3bfcdb3d005110c6ee2b744bf08.html", "dir_dcbbf3bfcdb3d005110c6ee2b744bf08" ] +]; \ No newline at end of file diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map b/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map new file mode 100644 index 00000000..75c61ce4 --- /dev/null +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 b/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 new file mode 100644 index 00000000..d42ba37a --- /dev/null +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 @@ -0,0 +1 @@ +979cfce9ad81bc54b1a534570bb0725e \ No newline at end of file diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png b/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png new file mode 100644 index 00000000..b4a39864 Binary files /dev/null and b/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png differ diff --git a/dir_6aa5eb41b348da9a1414d58156a58f5e.html b/dir_6aa5eb41b348da9a1414d58156a58f5e.html new file mode 100644 index 00000000..5e03befd --- /dev/null +++ b/dir_6aa5eb41b348da9a1414d58156a58f5e.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: test/subscribe_handler Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
subscribe_handler Directory Reference
+
+
+
+ + Directory dependency graph for subscribe_handler:
+
+
+ +
+
+ + + + diff --git a/dir_6aa5eb41b348da9a1414d58156a58f5e_dep.map b/dir_6aa5eb41b348da9a1414d58156a58f5e_dep.map new file mode 100644 index 00000000..f6640f12 --- /dev/null +++ b/dir_6aa5eb41b348da9a1414d58156a58f5e_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_6aa5eb41b348da9a1414d58156a58f5e_dep.md5 b/dir_6aa5eb41b348da9a1414d58156a58f5e_dep.md5 new file mode 100644 index 00000000..ed323e13 --- /dev/null +++ b/dir_6aa5eb41b348da9a1414d58156a58f5e_dep.md5 @@ -0,0 +1 @@ +e579bb2fb3ff7b2732f4dbca4d25327c \ No newline at end of file diff --git a/dir_6aa5eb41b348da9a1414d58156a58f5e_dep.png b/dir_6aa5eb41b348da9a1414d58156a58f5e_dep.png new file mode 100644 index 00000000..620b2a1a Binary files /dev/null and b/dir_6aa5eb41b348da9a1414d58156a58f5e_dep.png differ diff --git a/dir_7164529cd9c8f96b25598799ea656806.html b/dir_7164529cd9c8f96b25598799ea656806.html new file mode 100644 index 00000000..7caa222d --- /dev/null +++ b/dir_7164529cd9c8f96b25598799ea656806.html @@ -0,0 +1,123 @@ + + + + + + + +mrs_lib: include/mrs_lib/impl Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
impl Directory Reference
+
+
+
+ + Directory dependency graph for impl:
+
+
+ + + + + + + + + +

+Files

file  ukf.hpp [code]
 Implements UKF - a class implementing the Unscented Kalman Filter.
 
file  vector_converter.hpp [code]
 Implements the convertTo() and convertFrom() functions for conversion between different vector representations (Eigen, OpenCV, tf2 etc.).
 
+
+
+ + + + diff --git a/dir_7164529cd9c8f96b25598799ea656806.js b/dir_7164529cd9c8f96b25598799ea656806.js new file mode 100644 index 00000000..eecba817 --- /dev/null +++ b/dir_7164529cd9c8f96b25598799ea656806.js @@ -0,0 +1,13 @@ +var dir_7164529cd9c8f96b25598799ea656806 = +[ + [ "dynamic_publisher.hpp", "dynamic__publisher_8hpp_source.html", null ], + [ "param_provider.hpp", "param__provider_8hpp_source.html", null ], + [ "publisher_handler.hpp", "publisher__handler_8hpp_source.html", null ], + [ "service_client_handler.hpp", "service__client__handler_8hpp_source.html", null ], + [ "subscribe_handler.hpp", "subscribe__handler_8hpp_source.html", null ], + [ "timer.hpp", "timer_8hpp_source.html", null ], + [ "transformer.hpp", "transformer_8hpp_source.html", null ], + [ "ukf.hpp", "ukf_8hpp.html", null ], + [ "vector_converter.hpp", "vector__converter_8hpp.html", "vector__converter_8hpp" ], + [ "vector_converter_types.h", "vector__converter__types_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_7164529cd9c8f96b25598799ea656806_dep.map b/dir_7164529cd9c8f96b25598799ea656806_dep.map new file mode 100644 index 00000000..bb8537d9 --- /dev/null +++ b/dir_7164529cd9c8f96b25598799ea656806_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_7164529cd9c8f96b25598799ea656806_dep.md5 b/dir_7164529cd9c8f96b25598799ea656806_dep.md5 new file mode 100644 index 00000000..98ea4795 --- /dev/null +++ b/dir_7164529cd9c8f96b25598799ea656806_dep.md5 @@ -0,0 +1 @@ +f63840359d9981fde8b945d5739d027e \ No newline at end of file diff --git a/dir_7164529cd9c8f96b25598799ea656806_dep.png b/dir_7164529cd9c8f96b25598799ea656806_dep.png new file mode 100644 index 00000000..136e86ce Binary files /dev/null and b/dir_7164529cd9c8f96b25598799ea656806_dep.png differ diff --git a/dir_85b0de967ad5400027712e30c95ca897.html b/dir_85b0de967ad5400027712e30c95ca897.html new file mode 100644 index 00000000..e925dc90 --- /dev/null +++ b/dir_85b0de967ad5400027712e30c95ca897.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: include/mrs_lib/geometry Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
geometry Directory Reference
+
+
+ + + + + + + + + + + +

+Files

file  cyclic.h [code]
 Defines the cyclic class for calculations with cyclic quantities.
 
file  misc.h [code]
 Defines useful geometry utilities and functions.
 
file  shapes.h [code]
 Defines various geometrical shapes and their relations.
 
+
+
+ + + + diff --git a/dir_85b0de967ad5400027712e30c95ca897.js b/dir_85b0de967ad5400027712e30c95ca897.js new file mode 100644 index 00000000..f941fea7 --- /dev/null +++ b/dir_85b0de967ad5400027712e30c95ca897.js @@ -0,0 +1,17 @@ +var dir_85b0de967ad5400027712e30c95ca897 = +[ + [ "conversions.h", "conversions_8h_source.html", null ], + [ "conversions_eigen.h", "conversions__eigen_8h_source.html", null ], + [ "conversions_opencv.h", "conversions__opencv_8h_source.html", null ], + [ "cyclic.h", "cyclic_8h.html", "cyclic_8h" ], + [ "misc.h", "misc_8h.html", "misc_8h" ], + [ "shapes.h", "shapes_8h.html", [ + [ "Ray", "classmrs__lib_1_1geometry_1_1Ray.html", "classmrs__lib_1_1geometry_1_1Ray" ], + [ "Triangle", "classmrs__lib_1_1geometry_1_1Triangle.html", "classmrs__lib_1_1geometry_1_1Triangle" ], + [ "Rectangle", "classmrs__lib_1_1geometry_1_1Rectangle.html", "classmrs__lib_1_1geometry_1_1Rectangle" ], + [ "Cuboid", "classmrs__lib_1_1geometry_1_1Cuboid.html", "classmrs__lib_1_1geometry_1_1Cuboid" ], + [ "Ellipse", "classmrs__lib_1_1geometry_1_1Ellipse.html", "classmrs__lib_1_1geometry_1_1Ellipse" ], + [ "Cylinder", "classmrs__lib_1_1geometry_1_1Cylinder.html", "classmrs__lib_1_1geometry_1_1Cylinder" ], + [ "Cone", "classmrs__lib_1_1geometry_1_1Cone.html", "classmrs__lib_1_1geometry_1_1Cone" ] + ] ] +]; \ No newline at end of file diff --git a/dir_8607dcdb705c79ef4c5b76c004c42748.html b/dir_8607dcdb705c79ef4c5b76c004c42748.html new file mode 100644 index 00000000..a31f2db0 --- /dev/null +++ b/dir_8607dcdb705c79ef4c5b76c004c42748.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: src/transformer Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
transformer Directory Reference
+
+
+
+ + Directory dependency graph for transformer:
+
+
+ +
+
+ + + + diff --git a/dir_8607dcdb705c79ef4c5b76c004c42748_dep.map b/dir_8607dcdb705c79ef4c5b76c004c42748_dep.map new file mode 100644 index 00000000..59ed0c37 --- /dev/null +++ b/dir_8607dcdb705c79ef4c5b76c004c42748_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_8607dcdb705c79ef4c5b76c004c42748_dep.md5 b/dir_8607dcdb705c79ef4c5b76c004c42748_dep.md5 new file mode 100644 index 00000000..7ced09cd --- /dev/null +++ b/dir_8607dcdb705c79ef4c5b76c004c42748_dep.md5 @@ -0,0 +1 @@ +5136fba78cea884a5edfd2a27b47993a \ No newline at end of file diff --git a/dir_8607dcdb705c79ef4c5b76c004c42748_dep.png b/dir_8607dcdb705c79ef4c5b76c004c42748_dep.png new file mode 100644 index 00000000..bbb7b96f Binary files /dev/null and b/dir_8607dcdb705c79ef4c5b76c004c42748_dep.png differ diff --git a/dir_8727baefb60589e29135367809dcd3f5.html b/dir_8727baefb60589e29135367809dcd3f5.html new file mode 100644 index 00000000..748879ab --- /dev/null +++ b/dir_8727baefb60589e29135367809dcd3f5.html @@ -0,0 +1,102 @@ + + + + + + + +mrs_lib: src/safety_zone/polygon Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
polygon Directory Reference
+
+
+
+
+ + + + diff --git a/dir_8c35c1873c2690b478a9950d0638d637.html b/dir_8c35c1873c2690b478a9950d0638d637.html new file mode 100644 index 00000000..573bce94 --- /dev/null +++ b/dir_8c35c1873c2690b478a9950d0638d637.html @@ -0,0 +1,102 @@ + + + + + + + +mrs_lib: src/timer Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
timer Directory Reference
+
+
+
+
+ + + + diff --git a/dir_90cd026696fbcd71297c0f7b96e13f91.html b/dir_90cd026696fbcd71297c0f7b96e13f91.html new file mode 100644 index 00000000..e61a9a03 --- /dev/null +++ b/dir_90cd026696fbcd71297c0f7b96e13f91.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: src/batch_visualizer Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
batch_visualizer Directory Reference
+
+
+
+ + Directory dependency graph for batch_visualizer:
+
+
+ +
+
+ + + + diff --git a/dir_90cd026696fbcd71297c0f7b96e13f91_dep.map b/dir_90cd026696fbcd71297c0f7b96e13f91_dep.map new file mode 100644 index 00000000..530aaaad --- /dev/null +++ b/dir_90cd026696fbcd71297c0f7b96e13f91_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_90cd026696fbcd71297c0f7b96e13f91_dep.md5 b/dir_90cd026696fbcd71297c0f7b96e13f91_dep.md5 new file mode 100644 index 00000000..6a6edf0e --- /dev/null +++ b/dir_90cd026696fbcd71297c0f7b96e13f91_dep.md5 @@ -0,0 +1 @@ +acd57d76d8e07d0ae74d5818dbf74b2f \ No newline at end of file diff --git a/dir_90cd026696fbcd71297c0f7b96e13f91_dep.png b/dir_90cd026696fbcd71297c0f7b96e13f91_dep.png new file mode 100644 index 00000000..13191933 Binary files /dev/null and b/dir_90cd026696fbcd71297c0f7b96e13f91_dep.png differ diff --git a/dir_9940084939548468b1ec99592b6e2693.html b/dir_9940084939548468b1ec99592b6e2693.html new file mode 100644 index 00000000..c6740d26 --- /dev/null +++ b/dir_9940084939548468b1ec99592b6e2693.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: src/service_client_handler Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
service_client_handler Directory Reference
+
+
+
+ + Directory dependency graph for service_client_handler:
+
+
+ +
+
+ + + + diff --git a/dir_9940084939548468b1ec99592b6e2693_dep.map b/dir_9940084939548468b1ec99592b6e2693_dep.map new file mode 100644 index 00000000..3b4ce9b3 --- /dev/null +++ b/dir_9940084939548468b1ec99592b6e2693_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_9940084939548468b1ec99592b6e2693_dep.md5 b/dir_9940084939548468b1ec99592b6e2693_dep.md5 new file mode 100644 index 00000000..b5b18ef0 --- /dev/null +++ b/dir_9940084939548468b1ec99592b6e2693_dep.md5 @@ -0,0 +1 @@ +5082602023290ae5cbf6a8028da89b09 \ No newline at end of file diff --git a/dir_9940084939548468b1ec99592b6e2693_dep.png b/dir_9940084939548468b1ec99592b6e2693_dep.png new file mode 100644 index 00000000..9318ef06 Binary files /dev/null and b/dir_9940084939548468b1ec99592b6e2693_dep.png differ diff --git a/dir_9dc292e6fbe26797bd73250f006569d0.html b/dir_9dc292e6fbe26797bd73250f006569d0.html new file mode 100644 index 00000000..7b0246f3 --- /dev/null +++ b/dir_9dc292e6fbe26797bd73250f006569d0.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: src/iir_filter Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
iir_filter Directory Reference
+
+
+
+ + Directory dependency graph for iir_filter:
+
+
+ +
+
+ + + + diff --git a/dir_9dc292e6fbe26797bd73250f006569d0_dep.map b/dir_9dc292e6fbe26797bd73250f006569d0_dep.map new file mode 100644 index 00000000..f36c23d5 --- /dev/null +++ b/dir_9dc292e6fbe26797bd73250f006569d0_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_9dc292e6fbe26797bd73250f006569d0_dep.md5 b/dir_9dc292e6fbe26797bd73250f006569d0_dep.md5 new file mode 100644 index 00000000..4dc8139f --- /dev/null +++ b/dir_9dc292e6fbe26797bd73250f006569d0_dep.md5 @@ -0,0 +1 @@ +c61ecb8b3900ddc9a35e88998772a782 \ No newline at end of file diff --git a/dir_9dc292e6fbe26797bd73250f006569d0_dep.png b/dir_9dc292e6fbe26797bd73250f006569d0_dep.png new file mode 100644 index 00000000..676dbc54 Binary files /dev/null and b/dir_9dc292e6fbe26797bd73250f006569d0_dep.png differ diff --git a/dir_9de178b262a8e864e9086749ac0a3a65.html b/dir_9de178b262a8e864e9086749ac0a3a65.html new file mode 100644 index 00000000..75f893d1 --- /dev/null +++ b/dir_9de178b262a8e864e9086749ac0a3a65.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: src/scope_timer Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
scope_timer Directory Reference
+
+
+
+ + Directory dependency graph for scope_timer:
+
+
+ +
+
+ + + + diff --git a/dir_9de178b262a8e864e9086749ac0a3a65_dep.map b/dir_9de178b262a8e864e9086749ac0a3a65_dep.map new file mode 100644 index 00000000..adfe343f --- /dev/null +++ b/dir_9de178b262a8e864e9086749ac0a3a65_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_9de178b262a8e864e9086749ac0a3a65_dep.md5 b/dir_9de178b262a8e864e9086749ac0a3a65_dep.md5 new file mode 100644 index 00000000..87d9847b --- /dev/null +++ b/dir_9de178b262a8e864e9086749ac0a3a65_dep.md5 @@ -0,0 +1 @@ +8e4a160feed7419b82f113d138f5166b \ No newline at end of file diff --git a/dir_9de178b262a8e864e9086749ac0a3a65_dep.png b/dir_9de178b262a8e864e9086749ac0a3a65_dep.png new file mode 100644 index 00000000..d38931b6 Binary files /dev/null and b/dir_9de178b262a8e864e9086749ac0a3a65_dep.png differ diff --git a/dir_9e9e485811fd7b0342cca4e7c3cf123b.html b/dir_9e9e485811fd7b0342cca4e7c3cf123b.html new file mode 100644 index 00000000..7e2b91fb --- /dev/null +++ b/dir_9e9e485811fd7b0342cca4e7c3cf123b.html @@ -0,0 +1,109 @@ + + + + + + + +mrs_lib: src/lkf Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
lkf Directory Reference
+
+
+ + + + + +

+Files

file  example.cpp
 Example file for the LKF implementation.
 
+
+
+ + + + diff --git a/dir_9e9e485811fd7b0342cca4e7c3cf123b.js b/dir_9e9e485811fd7b0342cca4e7c3cf123b.js new file mode 100644 index 00000000..c7b4e9fb --- /dev/null +++ b/dir_9e9e485811fd7b0342cca4e7c3cf123b.js @@ -0,0 +1,4 @@ +var dir_9e9e485811fd7b0342cca4e7c3cf123b = +[ + [ "example.cpp", "lkf_2example_8cpp.html", "lkf_2example_8cpp" ] +]; \ No newline at end of file diff --git a/dir_a1544262e4e34d2792f5ebccef9b84d2.html b/dir_a1544262e4e34d2792f5ebccef9b84d2.html new file mode 100644 index 00000000..e07b649d --- /dev/null +++ b/dir_a1544262e4e34d2792f5ebccef9b84d2.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: test/publisher_handler Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
publisher_handler Directory Reference
+
+
+
+ + Directory dependency graph for publisher_handler:
+
+
+ +
+
+ + + + diff --git a/dir_a1544262e4e34d2792f5ebccef9b84d2_dep.map b/dir_a1544262e4e34d2792f5ebccef9b84d2_dep.map new file mode 100644 index 00000000..4d7160da --- /dev/null +++ b/dir_a1544262e4e34d2792f5ebccef9b84d2_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_a1544262e4e34d2792f5ebccef9b84d2_dep.md5 b/dir_a1544262e4e34d2792f5ebccef9b84d2_dep.md5 new file mode 100644 index 00000000..b9fb7722 --- /dev/null +++ b/dir_a1544262e4e34d2792f5ebccef9b84d2_dep.md5 @@ -0,0 +1 @@ +ad772774011d64cf4dd398cf77e8f8e5 \ No newline at end of file diff --git a/dir_a1544262e4e34d2792f5ebccef9b84d2_dep.png b/dir_a1544262e4e34d2792f5ebccef9b84d2_dep.png new file mode 100644 index 00000000..217d03e2 Binary files /dev/null and b/dir_a1544262e4e34d2792f5ebccef9b84d2_dep.png differ diff --git a/dir_a17ab943082f893adca96bf9769a804b.html b/dir_a17ab943082f893adca96bf9769a804b.html new file mode 100644 index 00000000..1070f68c --- /dev/null +++ b/dir_a17ab943082f893adca96bf9769a804b.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: test/vector_converter Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
vector_converter Directory Reference
+
+
+
+ + Directory dependency graph for vector_converter:
+
+
+ +
+
+ + + + diff --git a/dir_a17ab943082f893adca96bf9769a804b_dep.map b/dir_a17ab943082f893adca96bf9769a804b_dep.map new file mode 100644 index 00000000..4b0d48da --- /dev/null +++ b/dir_a17ab943082f893adca96bf9769a804b_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_a17ab943082f893adca96bf9769a804b_dep.md5 b/dir_a17ab943082f893adca96bf9769a804b_dep.md5 new file mode 100644 index 00000000..486cb49b --- /dev/null +++ b/dir_a17ab943082f893adca96bf9769a804b_dep.md5 @@ -0,0 +1 @@ +5232042fc90bc171212b108f642820aa \ No newline at end of file diff --git a/dir_a17ab943082f893adca96bf9769a804b_dep.png b/dir_a17ab943082f893adca96bf9769a804b_dep.png new file mode 100644 index 00000000..9fbdb3b9 Binary files /dev/null and b/dir_a17ab943082f893adca96bf9769a804b_dep.png differ diff --git a/dir_a5078ef47331b4526bf3f96e987ee465.html b/dir_a5078ef47331b4526bf3f96e987ee465.html new file mode 100644 index 00000000..63a1898e --- /dev/null +++ b/dir_a5078ef47331b4526bf3f96e987ee465.html @@ -0,0 +1,122 @@ + + + + + + + +mrs_lib: src/ukf Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ukf Directory Reference
+
+
+
+ + Directory dependency graph for ukf:
+
+
+ + + + + + +

+Files

file  example.cpp
 Example file for the UKF implementation.
 
+
+
+ + + + diff --git a/dir_a5078ef47331b4526bf3f96e987ee465.js b/dir_a5078ef47331b4526bf3f96e987ee465.js new file mode 100644 index 00000000..4aee7f47 --- /dev/null +++ b/dir_a5078ef47331b4526bf3f96e987ee465.js @@ -0,0 +1,4 @@ +var dir_a5078ef47331b4526bf3f96e987ee465 = +[ + [ "example.cpp", "ukf_2example_8cpp.html", "ukf_2example_8cpp" ] +]; \ No newline at end of file diff --git a/dir_a5078ef47331b4526bf3f96e987ee465_dep.map b/dir_a5078ef47331b4526bf3f96e987ee465_dep.map new file mode 100644 index 00000000..038059b2 --- /dev/null +++ b/dir_a5078ef47331b4526bf3f96e987ee465_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_a5078ef47331b4526bf3f96e987ee465_dep.md5 b/dir_a5078ef47331b4526bf3f96e987ee465_dep.md5 new file mode 100644 index 00000000..a63263b1 --- /dev/null +++ b/dir_a5078ef47331b4526bf3f96e987ee465_dep.md5 @@ -0,0 +1 @@ +d8e8743b9f2cbafdc31ade08885fabc4 \ No newline at end of file diff --git a/dir_a5078ef47331b4526bf3f96e987ee465_dep.png b/dir_a5078ef47331b4526bf3f96e987ee465_dep.png new file mode 100644 index 00000000..5debc29b Binary files /dev/null and b/dir_a5078ef47331b4526bf3f96e987ee465_dep.png differ diff --git a/dir_a801eb2785f54179a3e523b657d76987.html b/dir_a801eb2785f54179a3e523b657d76987.html new file mode 100644 index 00000000..bb009f1c --- /dev/null +++ b/dir_a801eb2785f54179a3e523b657d76987.html @@ -0,0 +1,102 @@ + + + + + + + +mrs_lib: test/repredictor Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
repredictor Directory Reference
+
+
+
+
+ + + + diff --git a/dir_a891666b40284627c385858212667a8e.html b/dir_a891666b40284627c385858212667a8e.html new file mode 100644 index 00000000..7b46736a --- /dev/null +++ b/dir_a891666b40284627c385858212667a8e.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: src/median_filter Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
median_filter Directory Reference
+
+
+
+ + Directory dependency graph for median_filter:
+
+
+ +
+
+ + + + diff --git a/dir_a891666b40284627c385858212667a8e_dep.map b/dir_a891666b40284627c385858212667a8e_dep.map new file mode 100644 index 00000000..04989dec --- /dev/null +++ b/dir_a891666b40284627c385858212667a8e_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_a891666b40284627c385858212667a8e_dep.md5 b/dir_a891666b40284627c385858212667a8e_dep.md5 new file mode 100644 index 00000000..6a505157 --- /dev/null +++ b/dir_a891666b40284627c385858212667a8e_dep.md5 @@ -0,0 +1 @@ +4668f6f4cce609e7120c1903b3e3f883 \ No newline at end of file diff --git a/dir_a891666b40284627c385858212667a8e_dep.png b/dir_a891666b40284627c385858212667a8e_dep.png new file mode 100644 index 00000000..f452f47b Binary files /dev/null and b/dir_a891666b40284627c385858212667a8e_dep.png differ diff --git a/dir_a91f64f59277207d470dc7e676106e2d.html b/dir_a91f64f59277207d470dc7e676106e2d.html new file mode 100644 index 00000000..53d429cf --- /dev/null +++ b/dir_a91f64f59277207d470dc7e676106e2d.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: test/param_loader Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
param_loader Directory Reference
+
+
+
+ + Directory dependency graph for param_loader:
+
+
+ +
+
+ + + + diff --git a/dir_a91f64f59277207d470dc7e676106e2d_dep.map b/dir_a91f64f59277207d470dc7e676106e2d_dep.map new file mode 100644 index 00000000..a0e08f38 --- /dev/null +++ b/dir_a91f64f59277207d470dc7e676106e2d_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_a91f64f59277207d470dc7e676106e2d_dep.md5 b/dir_a91f64f59277207d470dc7e676106e2d_dep.md5 new file mode 100644 index 00000000..d5a55af9 --- /dev/null +++ b/dir_a91f64f59277207d470dc7e676106e2d_dep.md5 @@ -0,0 +1 @@ +76448235f354161ca408c6a71e385fa4 \ No newline at end of file diff --git a/dir_a91f64f59277207d470dc7e676106e2d_dep.png b/dir_a91f64f59277207d470dc7e676106e2d_dep.png new file mode 100644 index 00000000..efbe99aa Binary files /dev/null and b/dir_a91f64f59277207d470dc7e676106e2d_dep.png differ diff --git a/dir_aa9be1b82c48662217aefeaa0c6781c6.html b/dir_aa9be1b82c48662217aefeaa0c6781c6.html new file mode 100644 index 00000000..89977b41 --- /dev/null +++ b/dir_aa9be1b82c48662217aefeaa0c6781c6.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: test/utils Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
utils Directory Reference
+
+
+
+ + Directory dependency graph for utils:
+
+
+ +
+
+ + + + diff --git a/dir_aa9be1b82c48662217aefeaa0c6781c6_dep.map b/dir_aa9be1b82c48662217aefeaa0c6781c6_dep.map new file mode 100644 index 00000000..66855270 --- /dev/null +++ b/dir_aa9be1b82c48662217aefeaa0c6781c6_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_aa9be1b82c48662217aefeaa0c6781c6_dep.md5 b/dir_aa9be1b82c48662217aefeaa0c6781c6_dep.md5 new file mode 100644 index 00000000..2f569177 --- /dev/null +++ b/dir_aa9be1b82c48662217aefeaa0c6781c6_dep.md5 @@ -0,0 +1 @@ +8da95333a4592f7322be930b95416315 \ No newline at end of file diff --git a/dir_aa9be1b82c48662217aefeaa0c6781c6_dep.png b/dir_aa9be1b82c48662217aefeaa0c6781c6_dep.png new file mode 100644 index 00000000..4e00d109 Binary files /dev/null and b/dir_aa9be1b82c48662217aefeaa0c6781c6_dep.png differ diff --git a/dir_ae9a93452e2a84339148a16bcf2eb561.html b/dir_ae9a93452e2a84339148a16bcf2eb561.html new file mode 100644 index 00000000..136f0c19 --- /dev/null +++ b/dir_ae9a93452e2a84339148a16bcf2eb561.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: src/math Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
math Directory Reference
+
+
+
+ + Directory dependency graph for math:
+
+
+ +
+
+ + + + diff --git a/dir_ae9a93452e2a84339148a16bcf2eb561_dep.map b/dir_ae9a93452e2a84339148a16bcf2eb561_dep.map new file mode 100644 index 00000000..a584473b --- /dev/null +++ b/dir_ae9a93452e2a84339148a16bcf2eb561_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_ae9a93452e2a84339148a16bcf2eb561_dep.md5 b/dir_ae9a93452e2a84339148a16bcf2eb561_dep.md5 new file mode 100644 index 00000000..753fc788 --- /dev/null +++ b/dir_ae9a93452e2a84339148a16bcf2eb561_dep.md5 @@ -0,0 +1 @@ +72884bda4c1943a7a9ca2eb3fd0f8632 \ No newline at end of file diff --git a/dir_ae9a93452e2a84339148a16bcf2eb561_dep.png b/dir_ae9a93452e2a84339148a16bcf2eb561_dep.png new file mode 100644 index 00000000..5749e06c Binary files /dev/null and b/dir_ae9a93452e2a84339148a16bcf2eb561_dep.png differ diff --git a/dir_b45211e520e4a09b6829419ceab557b0.html b/dir_b45211e520e4a09b6829419ceab557b0.html new file mode 100644 index 00000000..4ed3a47e --- /dev/null +++ b/dir_b45211e520e4a09b6829419ceab557b0.html @@ -0,0 +1,102 @@ + + + + + + + +mrs_lib: include/mrs_lib/safety_zone Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
safety_zone Directory Reference
+
+
+
+
+ + + + diff --git a/dir_b45211e520e4a09b6829419ceab557b0.js b/dir_b45211e520e4a09b6829419ceab557b0.js new file mode 100644 index 00000000..1b90df62 --- /dev/null +++ b/dir_b45211e520e4a09b6829419ceab557b0.js @@ -0,0 +1,7 @@ +var dir_b45211e520e4a09b6829419ceab557b0 = +[ + [ "line_operations.h", "line__operations_8h_source.html", null ], + [ "point_obstacle.h", "point__obstacle_8h_source.html", null ], + [ "polygon.h", "polygon_8h_source.html", null ], + [ "safety_zone.h", "safety__zone_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_b51f180547f8d0f0e77de7f16caceac3.html b/dir_b51f180547f8d0f0e77de7f16caceac3.html new file mode 100644 index 00000000..03eea917 --- /dev/null +++ b/dir_b51f180547f8d0f0e77de7f16caceac3.html @@ -0,0 +1,198 @@ + + + + + + + +mrs_lib: include/mrs_lib Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mrs_lib Directory Reference
+
+
+
+ + Directory dependency graph for mrs_lib:
+
+
+ + + +

+Directories

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  attitude_converter.h [code]
 Conversions between various representations of object attitude in 3D. Supports Quaternions, Euler angles, Angle-axis and Rotational matrices from tf, tf2, Eigen and geometry_msgs libraries. The default Euler angle notation is the extrinsic RPY.
 
file  batch_visualizer.h [code]
 For convenient and computationally lightweight drawing of geometry in RVIZ using marker arrays.
 
file  dynamic_publisher.h [code]
 Defines DynamicPublisher for easy debug publishing of ROS messages.
 
file  dynamic_reconfigure_mgr.h [code]
 Defines DynamicReconfigureMgr - a convenience class for managing dynamic ROS parameters through dynamic reconfigure.
 
file  gps_conversions.h [code]
 Universal Transverse Mercator transforms. Functions to convert (spherical) latitude and longitude to and from (Euclidean) UTM coordinates.
 
file  iir_filter.h [code]
 
file  kalman_filter.h [code]
 Defines KalmanFilter - an abstract class, defining common interfaces and types for a generic Kalman filter.
 
file  kalman_filter_aloamgarm.h [code]
 Defines KalmanFilter - an abstract class, defining common interfaces and types for a generic Kalman filter.
 
file  math.h [code]
 Defines useful math functions that are not part of the cmath STD library.
 
file  median_filter.h [code]
 Defines the MedianFilter class.
 
file  msg_extractor.h [code]
 utility functions for getting stuff from ROS msgs
 
file  mutex.h [code]
 Defines helper routines for getting and setting variables under mutex locks.
 
file  notch_filter.h [code]
 
file  param_loader.h [code]
 Defines ParamLoader - a convenience class for loading static ROS parameters.
 
file  profiler.h [code]
 A scoped function profiler which publishes ROS messages.
 
file  publisher_handler.h [code]
 Defines PublisherHandler and related convenience classes for upgrading the ROS publisher.
 
file  rheiv.h [code]
 Defines RHEIV and related stuff for surface fitting to points with known covariances according to [2].
 
file  scope_timer.h [code]
 Simple timer which times a duration of its scope, with additional optional checkpoints.
 
file  service_client_handler.h [code]
 Defines ServiceClientHandler and related convenience classes for upgrading the ROS service client.
 
file  subscribe_handler.h [code]
 Defines SubscribeHandler and related convenience classes for subscribing to ROS topics.
 
file  timeout_manager.h [code]
 TODO.
 
file  ukf.h [code]
 Defines UKF - a class implementing the Unscented Kalman Filter [4].
 
file  utils.h [code]
 Defines various general utility functions.
 
file  vector_converter.h [code]
 Defines the convert() function for conversion between different vector representations (Eigen, OpenCV, tf2 etc.).
 
file  visual_object.h [code]
 Object abstraction for the Batch Visualizer.
 
+
+
+ + + + diff --git a/dir_b51f180547f8d0f0e77de7f16caceac3.js b/dir_b51f180547f8d0f0e77de7f16caceac3.js new file mode 100644 index 00000000..e5549a76 --- /dev/null +++ b/dir_b51f180547f8d0f0e77de7f16caceac3.js @@ -0,0 +1,83 @@ +var dir_b51f180547f8d0f0e77de7f16caceac3 = +[ + [ "geometry", "dir_85b0de967ad5400027712e30c95ca897.html", "dir_85b0de967ad5400027712e30c95ca897" ], + [ "impl", "dir_7164529cd9c8f96b25598799ea656806.html", "dir_7164529cd9c8f96b25598799ea656806" ], + [ "safety_zone", "dir_b45211e520e4a09b6829419ceab557b0.html", "dir_b45211e520e4a09b6829419ceab557b0" ], + [ "attitude_converter.h", "attitude__converter_8h.html", "attitude__converter_8h" ], + [ "batch_visualizer.h", "batch__visualizer_8h.html", "batch__visualizer_8h" ], + [ "dkf.h", "dkf_8h_source.html", null ], + [ "dynamic_publisher.h", "dynamic__publisher_8h.html", [ + [ "DynamicPublisher", "classmrs__lib_1_1DynamicPublisher.html", "classmrs__lib_1_1DynamicPublisher" ] + ] ], + [ "dynamic_reconfigure_mgr.h", "dynamic__reconfigure__mgr_8h.html", [ + [ "DynamicReconfigureMgr", "classmrs__lib_1_1DynamicReconfigureMgr.html", "classmrs__lib_1_1DynamicReconfigureMgr" ] + ] ], + [ "gps_conversions.h", "gps__conversions_8h.html", "gps__conversions_8h" ], + [ "iir_filter.h", "iir__filter_8h.html", [ + [ "IirFilter", "classmrs__lib_1_1IirFilter.html", "classmrs__lib_1_1IirFilter" ] + ] ], + [ "image_publisher.h", "image__publisher_8h_source.html", null ], + [ "jlkf.h", "jlkf_8h_source.html", null ], + [ "kalman_filter.h", "kalman__filter_8h.html", [ + [ "KalmanFilter", "classmrs__lib_1_1KalmanFilter.html", "classmrs__lib_1_1KalmanFilter" ], + [ "statecov_t", "structmrs__lib_1_1KalmanFilter_1_1statecov__t.html", "structmrs__lib_1_1KalmanFilter_1_1statecov__t" ] + ] ], + [ "kalman_filter_aloamgarm.h", "kalman__filter__aloamgarm_8h.html", [ + [ "KalmanFilterAloamGarm", "classmrs__lib_1_1KalmanFilterAloamGarm.html", "classmrs__lib_1_1KalmanFilterAloamGarm" ], + [ "statecov_t", "structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html", "structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t" ] + ] ], + [ "lkf.h", "lkf_8h_source.html", null ], + [ "math.h", "math_8h.html", "math_8h" ], + [ "median_filter.h", "median__filter_8h.html", [ + [ "MedianFilter", "classmrs__lib_1_1MedianFilter.html", "classmrs__lib_1_1MedianFilter" ] + ] ], + [ "mrs_lib.h", "mrs__lib_8h_source.html", null ], + [ "msg_extractor.h", "msg__extractor_8h.html", "msg__extractor_8h" ], + [ "mutex.h", "mutex_8h.html", "mutex_8h" ], + [ "nckf.h", "nckf_8h_source.html", null ], + [ "notch_filter.h", "notch__filter_8h.html", [ + [ "NotchFilter", "classmrs__lib_1_1NotchFilter.html", "classmrs__lib_1_1NotchFilter" ] + ] ], + [ "param_loader.h", "param__loader_8h.html", "param__loader_8h" ], + [ "param_provider.h", "param__provider_8h_source.html", null ], + [ "profiler.h", "profiler_8h.html", [ + [ "Routine", "classmrs__lib_1_1Routine.html", "classmrs__lib_1_1Routine" ], + [ "Profiler", "classmrs__lib_1_1Profiler.html", "classmrs__lib_1_1Profiler" ] + ] ], + [ "publisher_handler.h", "publisher__handler_8h.html", [ + [ "PublisherHandler_impl", "classmrs__lib_1_1PublisherHandler__impl.html", "classmrs__lib_1_1PublisherHandler__impl" ], + [ "PublisherHandler", "classmrs__lib_1_1PublisherHandler.html", "classmrs__lib_1_1PublisherHandler" ] + ] ], + [ "quadratic_throttle_model.h", "quadratic__throttle__model_8h_source.html", null ], + [ "repredictor.h", "repredictor_8h_source.html", null ], + [ "repredictor_aloamgarm.h", "repredictor__aloamgarm_8h_source.html", null ], + [ "rheiv.h", "rheiv_8h.html", [ + [ "eigenvector_exception", "structmrs__lib_1_1eigenvector__exception.html", "structmrs__lib_1_1eigenvector__exception" ], + [ "RHEIV", "classmrs__lib_1_1RHEIV.html", "classmrs__lib_1_1RHEIV" ] + ] ], + [ "ros_param_provider.h", "ros__param__provider_8h_source.html", null ], + [ "scope_timer.h", "scope__timer_8h.html", [ + [ "ScopeTimerLogger", "classmrs__lib_1_1ScopeTimerLogger.html", "classmrs__lib_1_1ScopeTimerLogger" ], + [ "ScopeTimer", "classmrs__lib_1_1ScopeTimer.html", "classmrs__lib_1_1ScopeTimer" ], + [ "time_point", "structmrs__lib_1_1ScopeTimer_1_1time__point.html", "structmrs__lib_1_1ScopeTimer_1_1time__point" ] + ] ], + [ "service_client_handler.h", "service__client__handler_8h.html", [ + [ "ServiceClientHandler_impl", "classmrs__lib_1_1ServiceClientHandler__impl.html", "classmrs__lib_1_1ServiceClientHandler__impl" ], + [ "ServiceClientHandler", "classmrs__lib_1_1ServiceClientHandler.html", "classmrs__lib_1_1ServiceClientHandler" ] + ] ], + [ "subscribe_handler.h", "subscribe__handler_8h.html", "subscribe__handler_8h" ], + [ "timeout_manager.h", "timeout__manager_8h.html", [ + [ "TimeoutManager", "classmrs__lib_1_1TimeoutManager.html", "classmrs__lib_1_1TimeoutManager" ] + ] ], + [ "timer.h", "timer_8h_source.html", null ], + [ "transform_broadcaster.h", "transform__broadcaster_8h_source.html", null ], + [ "transformer.h", "transformer_8h_source.html", null ], + [ "ukf.h", "ukf_8h.html", [ + [ "UKF", "classmrs__lib_1_1UKF.html", "classmrs__lib_1_1UKF" ], + [ "square_root_exception", "structmrs__lib_1_1UKF_1_1square__root__exception.html", "structmrs__lib_1_1UKF_1_1square__root__exception" ], + [ "inverse_exception", "structmrs__lib_1_1UKF_1_1inverse__exception.html", "structmrs__lib_1_1UKF_1_1inverse__exception" ] + ] ], + [ "utils.h", "utils_8h.html", "utils_8h" ], + [ "vector_converter.h", "vector__converter_8h.html", "vector__converter_8h" ], + [ "visual_object.h", "visual__object_8h.html", "visual__object_8h" ] +]; \ No newline at end of file diff --git a/dir_b51f180547f8d0f0e77de7f16caceac3_dep.map b/dir_b51f180547f8d0f0e77de7f16caceac3_dep.map new file mode 100644 index 00000000..d3b7e51a --- /dev/null +++ b/dir_b51f180547f8d0f0e77de7f16caceac3_dep.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/dir_b51f180547f8d0f0e77de7f16caceac3_dep.md5 b/dir_b51f180547f8d0f0e77de7f16caceac3_dep.md5 new file mode 100644 index 00000000..28632714 --- /dev/null +++ b/dir_b51f180547f8d0f0e77de7f16caceac3_dep.md5 @@ -0,0 +1 @@ +083cb302dff9efabe73354801cc6ceb2 \ No newline at end of file diff --git a/dir_b51f180547f8d0f0e77de7f16caceac3_dep.png b/dir_b51f180547f8d0f0e77de7f16caceac3_dep.png new file mode 100644 index 00000000..332443ca Binary files /dev/null and b/dir_b51f180547f8d0f0e77de7f16caceac3_dep.png differ diff --git a/dir_bd43be0586985cbd0dfeaf1ebce92195.html b/dir_bd43be0586985cbd0dfeaf1ebce92195.html new file mode 100644 index 00000000..a6abcb71 --- /dev/null +++ b/dir_bd43be0586985cbd0dfeaf1ebce92195.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: test/timer Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
timer Directory Reference
+
+
+
+ + Directory dependency graph for timer:
+
+
+ +
+
+ + + + diff --git a/dir_bd43be0586985cbd0dfeaf1ebce92195_dep.map b/dir_bd43be0586985cbd0dfeaf1ebce92195_dep.map new file mode 100644 index 00000000..90bd73a3 --- /dev/null +++ b/dir_bd43be0586985cbd0dfeaf1ebce92195_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_bd43be0586985cbd0dfeaf1ebce92195_dep.md5 b/dir_bd43be0586985cbd0dfeaf1ebce92195_dep.md5 new file mode 100644 index 00000000..75797110 --- /dev/null +++ b/dir_bd43be0586985cbd0dfeaf1ebce92195_dep.md5 @@ -0,0 +1 @@ +d8f627804a7e81b0c17476810f06f22e \ No newline at end of file diff --git a/dir_bd43be0586985cbd0dfeaf1ebce92195_dep.png b/dir_bd43be0586985cbd0dfeaf1ebce92195_dep.png new file mode 100644 index 00000000..4ec949a4 Binary files /dev/null and b/dir_bd43be0586985cbd0dfeaf1ebce92195_dep.png differ diff --git a/dir_c34e1a38474b6d602bc9081a27b1a010.html b/dir_c34e1a38474b6d602bc9081a27b1a010.html new file mode 100644 index 00000000..c27f53cb --- /dev/null +++ b/dir_c34e1a38474b6d602bc9081a27b1a010.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: test/timeout_manager Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
timeout_manager Directory Reference
+
+
+
+ + Directory dependency graph for timeout_manager:
+
+
+ +
+
+ + + + diff --git a/dir_c34e1a38474b6d602bc9081a27b1a010_dep.map b/dir_c34e1a38474b6d602bc9081a27b1a010_dep.map new file mode 100644 index 00000000..a44b4f87 --- /dev/null +++ b/dir_c34e1a38474b6d602bc9081a27b1a010_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_c34e1a38474b6d602bc9081a27b1a010_dep.md5 b/dir_c34e1a38474b6d602bc9081a27b1a010_dep.md5 new file mode 100644 index 00000000..92d24814 --- /dev/null +++ b/dir_c34e1a38474b6d602bc9081a27b1a010_dep.md5 @@ -0,0 +1 @@ +932e88bc68fef3df8394b23159d6bf8e \ No newline at end of file diff --git a/dir_c34e1a38474b6d602bc9081a27b1a010_dep.png b/dir_c34e1a38474b6d602bc9081a27b1a010_dep.png new file mode 100644 index 00000000..e95df6cb Binary files /dev/null and b/dir_c34e1a38474b6d602bc9081a27b1a010_dep.png differ diff --git a/dir_cfc0c72890b8d1e009b6260caa55cd65.html b/dir_cfc0c72890b8d1e009b6260caa55cd65.html new file mode 100644 index 00000000..01274ab8 --- /dev/null +++ b/dir_cfc0c72890b8d1e009b6260caa55cd65.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: src/profiler Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
profiler Directory Reference
+
+
+
+ + Directory dependency graph for profiler:
+
+
+ +
+
+ + + + diff --git a/dir_cfc0c72890b8d1e009b6260caa55cd65_dep.map b/dir_cfc0c72890b8d1e009b6260caa55cd65_dep.map new file mode 100644 index 00000000..b69bb8d9 --- /dev/null +++ b/dir_cfc0c72890b8d1e009b6260caa55cd65_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_cfc0c72890b8d1e009b6260caa55cd65_dep.md5 b/dir_cfc0c72890b8d1e009b6260caa55cd65_dep.md5 new file mode 100644 index 00000000..95598476 --- /dev/null +++ b/dir_cfc0c72890b8d1e009b6260caa55cd65_dep.md5 @@ -0,0 +1 @@ +33adb992522c32406f079d816cc450ce \ No newline at end of file diff --git a/dir_cfc0c72890b8d1e009b6260caa55cd65_dep.png b/dir_cfc0c72890b8d1e009b6260caa55cd65_dep.png new file mode 100644 index 00000000..01bde094 Binary files /dev/null and b/dir_cfc0c72890b8d1e009b6260caa55cd65_dep.png differ diff --git a/dir_d20a67be47c1454b19aa07d8b0143440.html b/dir_d20a67be47c1454b19aa07d8b0143440.html new file mode 100644 index 00000000..f4112799 --- /dev/null +++ b/dir_d20a67be47c1454b19aa07d8b0143440.html @@ -0,0 +1,122 @@ + + + + + + + +mrs_lib: src/rheiv Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
rheiv Directory Reference
+
+
+
+ + Directory dependency graph for rheiv:
+
+
+ + + + + + +

+Files

file  example.cpp
 Example file for the RHEIV implementation.
 
+
+
+ + + + diff --git a/dir_d20a67be47c1454b19aa07d8b0143440.js b/dir_d20a67be47c1454b19aa07d8b0143440.js new file mode 100644 index 00000000..b43d486b --- /dev/null +++ b/dir_d20a67be47c1454b19aa07d8b0143440.js @@ -0,0 +1,4 @@ +var dir_d20a67be47c1454b19aa07d8b0143440 = +[ + [ "example.cpp", "rheiv_2example_8cpp.html", "rheiv_2example_8cpp" ] +]; \ No newline at end of file diff --git a/dir_d20a67be47c1454b19aa07d8b0143440_dep.map b/dir_d20a67be47c1454b19aa07d8b0143440_dep.map new file mode 100644 index 00000000..fa06cb27 --- /dev/null +++ b/dir_d20a67be47c1454b19aa07d8b0143440_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_d20a67be47c1454b19aa07d8b0143440_dep.md5 b/dir_d20a67be47c1454b19aa07d8b0143440_dep.md5 new file mode 100644 index 00000000..00ecfdf4 --- /dev/null +++ b/dir_d20a67be47c1454b19aa07d8b0143440_dep.md5 @@ -0,0 +1 @@ +facb5ab87cc308776a92b8be456dd601 \ No newline at end of file diff --git a/dir_d20a67be47c1454b19aa07d8b0143440_dep.png b/dir_d20a67be47c1454b19aa07d8b0143440_dep.png new file mode 100644 index 00000000..587f2f35 Binary files /dev/null and b/dir_d20a67be47c1454b19aa07d8b0143440_dep.png differ diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 00000000..453d4da9 --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,117 @@ + + + + + + + +mrs_lib: include Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
include Directory Reference
+
+
+
+ + Directory dependency graph for include:
+
+
+ + + +

+Directories

+
+
+ + + + diff --git a/dir_d44c64559bbebec7f509842c48db8b23.js b/dir_d44c64559bbebec7f509842c48db8b23.js new file mode 100644 index 00000000..b06dc3d9 --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.js @@ -0,0 +1,4 @@ +var dir_d44c64559bbebec7f509842c48db8b23 = +[ + [ "mrs_lib", "dir_b51f180547f8d0f0e77de7f16caceac3.html", "dir_b51f180547f8d0f0e77de7f16caceac3" ] +]; \ No newline at end of file diff --git a/dir_d44c64559bbebec7f509842c48db8b23_dep.map b/dir_d44c64559bbebec7f509842c48db8b23_dep.map new file mode 100644 index 00000000..8062d00b --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_d44c64559bbebec7f509842c48db8b23_dep.md5 b/dir_d44c64559bbebec7f509842c48db8b23_dep.md5 new file mode 100644 index 00000000..9112cb0a --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23_dep.md5 @@ -0,0 +1 @@ +f57f40f891732e0fdb51abdbcfc4b765 \ No newline at end of file diff --git a/dir_d44c64559bbebec7f509842c48db8b23_dep.png b/dir_d44c64559bbebec7f509842c48db8b23_dep.png new file mode 100644 index 00000000..5c635c82 Binary files /dev/null and b/dir_d44c64559bbebec7f509842c48db8b23_dep.png differ diff --git a/dir_d49d4fe2bb593f3112f8bcbe6fb5f73b.html b/dir_d49d4fe2bb593f3112f8bcbe6fb5f73b.html new file mode 100644 index 00000000..84283bc1 --- /dev/null +++ b/dir_d49d4fe2bb593f3112f8bcbe6fb5f73b.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: test/geometry Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
geometry Directory Reference
+
+
+
+ + Directory dependency graph for geometry:
+
+
+ +
+
+ + + + diff --git a/dir_d49d4fe2bb593f3112f8bcbe6fb5f73b_dep.map b/dir_d49d4fe2bb593f3112f8bcbe6fb5f73b_dep.map new file mode 100644 index 00000000..f4f865f8 --- /dev/null +++ b/dir_d49d4fe2bb593f3112f8bcbe6fb5f73b_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_d49d4fe2bb593f3112f8bcbe6fb5f73b_dep.md5 b/dir_d49d4fe2bb593f3112f8bcbe6fb5f73b_dep.md5 new file mode 100644 index 00000000..bef464c1 --- /dev/null +++ b/dir_d49d4fe2bb593f3112f8bcbe6fb5f73b_dep.md5 @@ -0,0 +1 @@ +16b42851d8fde199224aaa9070d883c5 \ No newline at end of file diff --git a/dir_d49d4fe2bb593f3112f8bcbe6fb5f73b_dep.png b/dir_d49d4fe2bb593f3112f8bcbe6fb5f73b_dep.png new file mode 100644 index 00000000..23bcbb4b Binary files /dev/null and b/dir_d49d4fe2bb593f3112f8bcbe6fb5f73b_dep.png differ diff --git a/dir_d81f13436e73f242cdf25a742f3a9678.html b/dir_d81f13436e73f242cdf25a742f3a9678.html new file mode 100644 index 00000000..e9b3f8b4 --- /dev/null +++ b/dir_d81f13436e73f242cdf25a742f3a9678.html @@ -0,0 +1,122 @@ + + + + + + + +mrs_lib: src/param_loader Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
param_loader Directory Reference
+
+
+
+ + Directory dependency graph for param_loader:
+
+
+ + + + + + +

+Files

file  example.cpp
 Example file for the ParamLoader convenience class.
 
+
+
+ + + + diff --git a/dir_d81f13436e73f242cdf25a742f3a9678.js b/dir_d81f13436e73f242cdf25a742f3a9678.js new file mode 100644 index 00000000..0f828bd4 --- /dev/null +++ b/dir_d81f13436e73f242cdf25a742f3a9678.js @@ -0,0 +1,4 @@ +var dir_d81f13436e73f242cdf25a742f3a9678 = +[ + [ "example.cpp", "param__loader_2example_8cpp.html", "param__loader_2example_8cpp" ] +]; \ No newline at end of file diff --git a/dir_d81f13436e73f242cdf25a742f3a9678_dep.map b/dir_d81f13436e73f242cdf25a742f3a9678_dep.map new file mode 100644 index 00000000..eda427f0 --- /dev/null +++ b/dir_d81f13436e73f242cdf25a742f3a9678_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_d81f13436e73f242cdf25a742f3a9678_dep.md5 b/dir_d81f13436e73f242cdf25a742f3a9678_dep.md5 new file mode 100644 index 00000000..5665752a --- /dev/null +++ b/dir_d81f13436e73f242cdf25a742f3a9678_dep.md5 @@ -0,0 +1 @@ +87a19658b52aed2c65da29384f97b877 \ No newline at end of file diff --git a/dir_d81f13436e73f242cdf25a742f3a9678_dep.png b/dir_d81f13436e73f242cdf25a742f3a9678_dep.png new file mode 100644 index 00000000..c9e8a7fe Binary files /dev/null and b/dir_d81f13436e73f242cdf25a742f3a9678_dep.png differ diff --git a/dir_dbeb4cbddd5bb6f84539c6e271d9141e.html b/dir_dbeb4cbddd5bb6f84539c6e271d9141e.html new file mode 100644 index 00000000..e21afb80 --- /dev/null +++ b/dir_dbeb4cbddd5bb6f84539c6e271d9141e.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: test/transformer Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
transformer Directory Reference
+
+
+
+ + Directory dependency graph for transformer:
+
+
+ +
+
+ + + + diff --git a/dir_dbeb4cbddd5bb6f84539c6e271d9141e_dep.map b/dir_dbeb4cbddd5bb6f84539c6e271d9141e_dep.map new file mode 100644 index 00000000..4b676d12 --- /dev/null +++ b/dir_dbeb4cbddd5bb6f84539c6e271d9141e_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_dbeb4cbddd5bb6f84539c6e271d9141e_dep.md5 b/dir_dbeb4cbddd5bb6f84539c6e271d9141e_dep.md5 new file mode 100644 index 00000000..488f6217 --- /dev/null +++ b/dir_dbeb4cbddd5bb6f84539c6e271d9141e_dep.md5 @@ -0,0 +1 @@ +231b7942a5bcd1c4d9c37271043e0953 \ No newline at end of file diff --git a/dir_dbeb4cbddd5bb6f84539c6e271d9141e_dep.png b/dir_dbeb4cbddd5bb6f84539c6e271d9141e_dep.png new file mode 100644 index 00000000..ee755b6a Binary files /dev/null and b/dir_dbeb4cbddd5bb6f84539c6e271d9141e_dep.png differ diff --git a/dir_dcbbf3bfcdb3d005110c6ee2b744bf08.html b/dir_dcbbf3bfcdb3d005110c6ee2b744bf08.html new file mode 100644 index 00000000..df2d449e --- /dev/null +++ b/dir_dcbbf3bfcdb3d005110c6ee2b744bf08.html @@ -0,0 +1,122 @@ + + + + + + + +mrs_lib: src/vector_converter Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
vector_converter Directory Reference
+
+
+
+ + Directory dependency graph for vector_converter:
+
+
+ + + + + + +

+Files

file  example.cpp
 Example file for the convert() vector type conversion function.
 
+
+
+ + + + diff --git a/dir_dcbbf3bfcdb3d005110c6ee2b744bf08.js b/dir_dcbbf3bfcdb3d005110c6ee2b744bf08.js new file mode 100644 index 00000000..10852695 --- /dev/null +++ b/dir_dcbbf3bfcdb3d005110c6ee2b744bf08.js @@ -0,0 +1,4 @@ +var dir_dcbbf3bfcdb3d005110c6ee2b744bf08 = +[ + [ "example.cpp", "vector__converter_2example_8cpp.html", "vector__converter_2example_8cpp" ] +]; \ No newline at end of file diff --git a/dir_dcbbf3bfcdb3d005110c6ee2b744bf08_dep.map b/dir_dcbbf3bfcdb3d005110c6ee2b744bf08_dep.map new file mode 100644 index 00000000..d296bbb5 --- /dev/null +++ b/dir_dcbbf3bfcdb3d005110c6ee2b744bf08_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_dcbbf3bfcdb3d005110c6ee2b744bf08_dep.md5 b/dir_dcbbf3bfcdb3d005110c6ee2b744bf08_dep.md5 new file mode 100644 index 00000000..0591c62d --- /dev/null +++ b/dir_dcbbf3bfcdb3d005110c6ee2b744bf08_dep.md5 @@ -0,0 +1 @@ +bc3ab36c3730d3ca0c5fe93316dff847 \ No newline at end of file diff --git a/dir_dcbbf3bfcdb3d005110c6ee2b744bf08_dep.png b/dir_dcbbf3bfcdb3d005110c6ee2b744bf08_dep.png new file mode 100644 index 00000000..23d4563d Binary files /dev/null and b/dir_dcbbf3bfcdb3d005110c6ee2b744bf08_dep.png differ diff --git a/dir_df4ba55d073265bfa281b5d186f7d37a.html b/dir_df4ba55d073265bfa281b5d186f7d37a.html new file mode 100644 index 00000000..3f5cfbc9 --- /dev/null +++ b/dir_df4ba55d073265bfa281b5d186f7d37a.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: test/attitude_converter Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
attitude_converter Directory Reference
+
+
+
+ + Directory dependency graph for attitude_converter:
+
+
+ +
+
+ + + + diff --git a/dir_df4ba55d073265bfa281b5d186f7d37a_dep.map b/dir_df4ba55d073265bfa281b5d186f7d37a_dep.map new file mode 100644 index 00000000..d3eae4c7 --- /dev/null +++ b/dir_df4ba55d073265bfa281b5d186f7d37a_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_df4ba55d073265bfa281b5d186f7d37a_dep.md5 b/dir_df4ba55d073265bfa281b5d186f7d37a_dep.md5 new file mode 100644 index 00000000..f28d822d --- /dev/null +++ b/dir_df4ba55d073265bfa281b5d186f7d37a_dep.md5 @@ -0,0 +1 @@ +d767d07de34de3759f2dcb7e5c63d917 \ No newline at end of file diff --git a/dir_df4ba55d073265bfa281b5d186f7d37a_dep.png b/dir_df4ba55d073265bfa281b5d186f7d37a_dep.png new file mode 100644 index 00000000..381c2e3a Binary files /dev/null and b/dir_df4ba55d073265bfa281b5d186f7d37a_dep.png differ diff --git a/dir_e55805edabc475f3fe5ed114dc40d256.html b/dir_e55805edabc475f3fe5ed114dc40d256.html new file mode 100644 index 00000000..e867b967 --- /dev/null +++ b/dir_e55805edabc475f3fe5ed114dc40d256.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: src/safety_zone/point_obstacle Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
point_obstacle Directory Reference
+
+
+
+ + Directory dependency graph for point_obstacle:
+
+
+ +
+
+ + + + diff --git a/dir_e55805edabc475f3fe5ed114dc40d256_dep.map b/dir_e55805edabc475f3fe5ed114dc40d256_dep.map new file mode 100644 index 00000000..0df3818e --- /dev/null +++ b/dir_e55805edabc475f3fe5ed114dc40d256_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_e55805edabc475f3fe5ed114dc40d256_dep.md5 b/dir_e55805edabc475f3fe5ed114dc40d256_dep.md5 new file mode 100644 index 00000000..081c83db --- /dev/null +++ b/dir_e55805edabc475f3fe5ed114dc40d256_dep.md5 @@ -0,0 +1 @@ +7ba6cb5106dae5a91cc1a878286f9050 \ No newline at end of file diff --git a/dir_e55805edabc475f3fe5ed114dc40d256_dep.png b/dir_e55805edabc475f3fe5ed114dc40d256_dep.png new file mode 100644 index 00000000..addd3797 Binary files /dev/null and b/dir_e55805edabc475f3fe5ed114dc40d256_dep.png differ diff --git a/dir_e6bb757187894633b963babd59fca1e5.html b/dir_e6bb757187894633b963babd59fca1e5.html new file mode 100644 index 00000000..01ff74e7 --- /dev/null +++ b/dir_e6bb757187894633b963babd59fca1e5.html @@ -0,0 +1,121 @@ + + + + + + + +mrs_lib: src/safety_zone Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
safety_zone Directory Reference
+
+
+
+ + Directory dependency graph for safety_zone:
+
+
+ + + +

+Directories

+
+
+ + + + diff --git a/dir_e6bb757187894633b963babd59fca1e5_dep.map b/dir_e6bb757187894633b963babd59fca1e5_dep.map new file mode 100644 index 00000000..51f556c9 --- /dev/null +++ b/dir_e6bb757187894633b963babd59fca1e5_dep.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/dir_e6bb757187894633b963babd59fca1e5_dep.md5 b/dir_e6bb757187894633b963babd59fca1e5_dep.md5 new file mode 100644 index 00000000..03f0a476 --- /dev/null +++ b/dir_e6bb757187894633b963babd59fca1e5_dep.md5 @@ -0,0 +1 @@ +d44bf05cad861baefbfe5ccdf8941888 \ No newline at end of file diff --git a/dir_e6bb757187894633b963babd59fca1e5_dep.png b/dir_e6bb757187894633b963babd59fca1e5_dep.png new file mode 100644 index 00000000..b077ddfb Binary files /dev/null and b/dir_e6bb757187894633b963babd59fca1e5_dep.png differ diff --git a/dir_f003de2bf99885e59674f01f3665fb82.html b/dir_f003de2bf99885e59674f01f3665fb82.html new file mode 100644 index 00000000..1f942f29 --- /dev/null +++ b/dir_f003de2bf99885e59674f01f3665fb82.html @@ -0,0 +1,125 @@ + + + + + + + +mrs_lib: src/subscribe_handler Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
subscribe_handler Directory Reference
+
+
+
+ + Directory dependency graph for subscribe_handler:
+
+
+ + + + + + + + + +

+Files

file  example.cpp
 Example file for the SubscribeHandler convenience class.
 
file  simple_example.cpp
 Example file for the SubscribeHandler convenience class.
 
+
+
+ + + + diff --git a/dir_f003de2bf99885e59674f01f3665fb82.js b/dir_f003de2bf99885e59674f01f3665fb82.js new file mode 100644 index 00000000..fc122e7f --- /dev/null +++ b/dir_f003de2bf99885e59674f01f3665fb82.js @@ -0,0 +1,5 @@ +var dir_f003de2bf99885e59674f01f3665fb82 = +[ + [ "example.cpp", "subscribe__handler_2example_8cpp.html", "subscribe__handler_2example_8cpp" ], + [ "simple_example.cpp", "simple__example_8cpp.html", "simple__example_8cpp" ] +]; \ No newline at end of file diff --git a/dir_f003de2bf99885e59674f01f3665fb82_dep.map b/dir_f003de2bf99885e59674f01f3665fb82_dep.map new file mode 100644 index 00000000..feacb71a --- /dev/null +++ b/dir_f003de2bf99885e59674f01f3665fb82_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_f003de2bf99885e59674f01f3665fb82_dep.md5 b/dir_f003de2bf99885e59674f01f3665fb82_dep.md5 new file mode 100644 index 00000000..5f9531e4 --- /dev/null +++ b/dir_f003de2bf99885e59674f01f3665fb82_dep.md5 @@ -0,0 +1 @@ +f048f33341a81052e53013bf86d83182 \ No newline at end of file diff --git a/dir_f003de2bf99885e59674f01f3665fb82_dep.png b/dir_f003de2bf99885e59674f01f3665fb82_dep.png new file mode 100644 index 00000000..f2463e34 Binary files /dev/null and b/dir_f003de2bf99885e59674f01f3665fb82_dep.png differ diff --git a/dir_fbb9f35580885fae6f87a033a53c348d.html b/dir_fbb9f35580885fae6f87a033a53c348d.html new file mode 100644 index 00000000..f7fdd554 --- /dev/null +++ b/dir_fbb9f35580885fae6f87a033a53c348d.html @@ -0,0 +1,102 @@ + + + + + + + +mrs_lib: src/transform_broadcaster Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
transform_broadcaster Directory Reference
+
+
+
+
+ + + + diff --git a/dkf_8h_source.html b/dkf_8h_source.html new file mode 100644 index 00000000..57d3bf7f --- /dev/null +++ b/dkf_8h_source.html @@ -0,0 +1,200 @@ + + + + + + + +mrs_lib: include/mrs_lib/dkf.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
dkf.h
+
+
+
1 // clang: MatousFormat
+
7 #ifndef DKF_H
+
8 #define DKF_H
+
9 
+
10 #include <mrs_lib/lkf.h>
+
11 #include <mrs_lib/geometry/misc.h>
+
12 #include <iostream>
+
13 
+
14 namespace mrs_lib
+
15 {
+
16 
+
17  /* class DKF //{ */
+
26  class DKF : public LKF<3, -1, 2>
+
27  {
+
28  public:
+
29  /* DKF definitions (typedefs, constants etc) //{ */
+ +
32  static constexpr int n = Base_class::n;
+
33  static constexpr int m = Base_class::m;
+
34  static constexpr int p = Base_class::p;
+
36  using x_t = typename Base_class::x_t;
+
37  using u_t = typename Base_class::u_t;
+
38  using z_t = typename Base_class::z_t;
+
39  using P_t = typename Base_class::P_t;
+
40  using R_t = typename Base_class::R_t;
+
41  using Q_t = typename Base_class::Q_t;
+ +
44  typedef Eigen::Matrix<double, n, n> A_t;
+
45  typedef Eigen::Matrix<double, n, m> B_t;
+
46  typedef Eigen::Matrix<double, p, n> H_t;
+
47  typedef Eigen::Matrix<double, n, p> K_t;
+
49  using mat2_t = Eigen::Matrix<double, 2, 2>;
+
50  using mat3_t = Eigen::Matrix<double, 3, 3>;
+
51  using pt3_t = mrs_lib::geometry::vec3_t;
+
52  using vec3_t = mrs_lib::geometry::vec3_t;
+
53 
+
54  public:
+
61  DKF(){};
+
62 
+
70  DKF(const A_t& A, const B_t& B) : Base_class(A, B, {}) {};
+
71 
+
72  /* correct() method //{ */
+
86  virtual statecov_t correctLine(const statecov_t& sc, const pt3_t& line_origin, const vec3_t& line_direction, const double line_variance) const
+
87  {
+
88  assert(line_direction.norm() > 0.0);
+
89  const vec3_t zunit {0.0, 0.0, 1.0};
+
90  // rot is a rotation matrix, transforming from F to F'
+
91  const mat3_t rot = mrs_lib::geometry::rotationBetween(line_direction, zunit);
+
92  /* const mat3_t rotT = rot.transpose(); */
+
93 
+
94  const H_t Hprime = rot.block<2, 2>(0, 0);
+
95 
+
96  const pt3_t oprime = rot*line_origin;
+
97  const z_t z = oprime.block<2, 1>(0, 0);
+
98 
+
99  const R_t R = line_variance*R_t::Identity();
+
100  return correction_impl(sc, z, R, Hprime);
+
101  };
+
102  //}
+
103  };
+
104  //}
+
105 
+
106 } // namespace mrs_lib
+
107 
+
108 #endif // DKF_H
+
+
+
mrs_lib::DKF::statecov_t
typename Base_class::statecov_t statecov_t
Helper struct for passing around the state and its covariance in one variable.
Definition: dkf.h:42
+
mrs_lib::DKF::R_t
typename Base_class::R_t R_t
Measurement noise covariance matrix type .
Definition: dkf.h:40
+
mrs_lib::LKF::Q_t
typename Base_class::Q_t Q_t
Process noise covariance matrix type .
Definition: lkf.h:52
+
mrs_lib::LKF::p
static constexpr int p
Length of the measurement vector of the system.
Definition: lkf.h:44
+
mrs_lib::DKF::p
static constexpr int p
Length of the measurement vector of the system.
Definition: dkf.h:34
+
mrs_lib::LKF::P_t
typename Base_class::P_t P_t
State uncertainty covariance matrix type .
Definition: lkf.h:50
+
mrs_lib::DKF::z_t
typename Base_class::z_t z_t
Measurement vector type .
Definition: dkf.h:38
+
mrs_lib::DKF::n
static constexpr int n
Length of the state vector of the system.
Definition: dkf.h:32
+
mrs_lib::LKF::statecov_t
typename Base_class::statecov_t statecov_t
Helper struct for passing around the state and its covariance in one variable.
Definition: lkf.h:53
+
mrs_lib::LKF::R_t
typename Base_class::R_t R_t
Measurement noise covariance matrix type .
Definition: lkf.h:51
+
mrs_lib::DKF::P_t
typename Base_class::P_t P_t
State uncertainty covariance matrix type .
Definition: dkf.h:39
+
mrs_lib::DKF::DKF
DKF(const A_t &A, const B_t &B)
The main constructor.
Definition: dkf.h:70
+
mrs_lib::DKF::K_t
Eigen::Matrix< double, n, p > K_t
Kalman gain matrix type .
Definition: dkf.h:47
+
mrs_lib::DKF::correctLine
virtual statecov_t correctLine(const statecov_t &sc, const pt3_t &line_origin, const vec3_t &line_direction, const double line_variance) const
Applies the correction (update, measurement, data) step of the Kalman filter.
Definition: dkf.h:86
+
mrs_lib::DKF::H_t
Eigen::Matrix< double, p, n > H_t
State to measurement mapping matrix type .
Definition: dkf.h:46
+
misc.h
Defines useful geometry utilities and functions.
+
mrs_lib::LKF::x_t
typename Base_class::x_t x_t
State vector type .
Definition: lkf.h:47
+
mrs_lib::DKF::DKF
DKF()
Convenience default constructor.
Definition: dkf.h:61
+
mrs_lib
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
mrs_lib::LKF::n
static constexpr int n
Length of the state vector of the system.
Definition: lkf.h:42
+
mrs_lib::DKF::m
static constexpr int m
Length of the input vector of the system.
Definition: dkf.h:33
+
mrs_lib::LKF< 3, -1, 2 >::B
B_t B
The input to state mapping matrix .
Definition: lkf.h:149
+
mrs_lib::DKF::B_t
Eigen::Matrix< double, n, m > B_t
Input to state mapping matrix type .
Definition: dkf.h:45
+
mrs_lib::LKF
Implementation of the Linear Kalman filter .
Definition: lkf.h:38
+
mrs_lib::DKF::x_t
typename Base_class::x_t x_t
State vector type .
Definition: dkf.h:36
+
mrs_lib::DKF::Q_t
typename Base_class::Q_t Q_t
Process noise covariance matrix type .
Definition: dkf.h:41
+
mrs_lib::LKF::z_t
typename Base_class::z_t z_t
Measurement vector type .
Definition: lkf.h:49
+
mrs_lib::LKF::m
static constexpr int m
Length of the input vector of the system.
Definition: lkf.h:43
+
mrs_lib::LKF< 3, -1, 2 >::A
A_t A
The system transition matrix .
Definition: lkf.h:144
+
mrs_lib::LKF::u_t
typename Base_class::u_t u_t
Input vector type .
Definition: lkf.h:48
+
mrs_lib::DKF
Implementation of the Degenerate measurement Linear Kalman filter.
Definition: dkf.h:26
+
mrs_lib::DKF::A_t
Eigen::Matrix< double, n, n > A_t
System transition matrix type .
Definition: dkf.h:44
+
mrs_lib::DKF::u_t
typename Base_class::u_t u_t
Input vector type .
Definition: dkf.h:37
+ + + + diff --git a/doc.png b/doc.png new file mode 100644 index 00000000..17edabff Binary files /dev/null and b/doc.png differ diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 00000000..73ecbb2c --- /dev/null +++ b/doxygen.css @@ -0,0 +1,1771 @@ +/* The standard CSS for doxygen 1.8.17 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, p.intertd, p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #FFFFFF; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/doxygen.png b/doxygen.png new file mode 100644 index 00000000..3ff17d80 Binary files /dev/null and b/doxygen.png differ diff --git a/dynamic__publisher_2example_8cpp.html b/dynamic__publisher_2example_8cpp.html new file mode 100644 index 00000000..8efc3434 --- /dev/null +++ b/dynamic__publisher_2example_8cpp.html @@ -0,0 +1,143 @@ + + + + + + + +mrs_lib: src/dynamic_publisher/example.cpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
example.cpp File Reference
+
+
+ +

Example file for the DynamicPublisher convenience class. +More...

+
#include <mrs_lib/dynamic_publisher.h>
+#include <std_msgs/Float32.h>
+#include <geometry_msgs/Point.h>
+
+ + Include dependency graph for example.cpp:
+
+
+ +
+ + + +

+Functions

+int main (int argc, char **argv)
 
+

Detailed Description

+

Example file for the DynamicPublisher convenience class.

+
Author
Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
+

This example may be run after building mrs_lib by executing rosrun mrs_lib dynamic_publisher_example.

+

See dynamic_publisher/example.cpp.

+
+
+ + + + diff --git a/dynamic__publisher_2example_8cpp.js b/dynamic__publisher_2example_8cpp.js new file mode 100644 index 00000000..f29375a3 --- /dev/null +++ b/dynamic__publisher_2example_8cpp.js @@ -0,0 +1,4 @@ +var dynamic__publisher_2example_8cpp = +[ + [ "main", "dynamic__publisher_2example_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627", null ] +]; \ No newline at end of file diff --git a/dynamic__publisher_2example_8cpp__incl.map b/dynamic__publisher_2example_8cpp__incl.map new file mode 100644 index 00000000..1a9a9007 --- /dev/null +++ b/dynamic__publisher_2example_8cpp__incl.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/dynamic__publisher_2example_8cpp__incl.md5 b/dynamic__publisher_2example_8cpp__incl.md5 new file mode 100644 index 00000000..08f88272 --- /dev/null +++ b/dynamic__publisher_2example_8cpp__incl.md5 @@ -0,0 +1 @@ +4e2c598e4daa4f871c9f4c7b78aced19 \ No newline at end of file diff --git a/dynamic__publisher_2example_8cpp__incl.png b/dynamic__publisher_2example_8cpp__incl.png new file mode 100644 index 00000000..2b1d793c Binary files /dev/null and b/dynamic__publisher_2example_8cpp__incl.png differ diff --git a/dynamic__publisher_8h.html b/dynamic__publisher_8h.html new file mode 100644 index 00000000..f7f87cdf --- /dev/null +++ b/dynamic__publisher_8h.html @@ -0,0 +1,161 @@ + + + + + + + +mrs_lib: include/mrs_lib/dynamic_publisher.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
dynamic_publisher.h File Reference
+
+
+ +

Defines DynamicPublisher for easy debug publishing of ROS messages. +More...

+
#include <mutex>
+#include <ros/ros.h>
+#include <mrs_lib/publisher_handler.h>
+#include <mrs_lib/impl/dynamic_publisher.hpp>
+
+ + Include dependency graph for dynamic_publisher.h:
+
+
+ +
+ + This graph shows which files directly or indirectly include this file:
+
+
+ +
+

Go to the source code of this file.

+ + + + + +

+Classes

class  mrs_lib::DynamicPublisher
 A helper class for easy publishing of ROS messages for debugging purposes. More...
 
+ + + + +

+Namespaces

 mrs_lib
 All mrs_lib functions, classes, variables and definitions are contained in this namespace.
 
+

Detailed Description

+

Defines DynamicPublisher for easy debug publishing of ROS messages.

+
Author
Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
+
+Tomáš Báča - bacat.nosp@m.oma@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
+
+
+ + + + diff --git a/dynamic__publisher_8h__dep__incl.map b/dynamic__publisher_8h__dep__incl.map new file mode 100644 index 00000000..d63ab902 --- /dev/null +++ b/dynamic__publisher_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/dynamic__publisher_8h__dep__incl.md5 b/dynamic__publisher_8h__dep__incl.md5 new file mode 100644 index 00000000..66d86d89 --- /dev/null +++ b/dynamic__publisher_8h__dep__incl.md5 @@ -0,0 +1 @@ +6325853d5d03c0319eeb1e6f33c800a7 \ No newline at end of file diff --git a/dynamic__publisher_8h__dep__incl.png b/dynamic__publisher_8h__dep__incl.png new file mode 100644 index 00000000..ea74603b Binary files /dev/null and b/dynamic__publisher_8h__dep__incl.png differ diff --git a/dynamic__publisher_8h__incl.map b/dynamic__publisher_8h__incl.map new file mode 100644 index 00000000..b77a45ff --- /dev/null +++ b/dynamic__publisher_8h__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/dynamic__publisher_8h__incl.md5 b/dynamic__publisher_8h__incl.md5 new file mode 100644 index 00000000..4c1e3e59 --- /dev/null +++ b/dynamic__publisher_8h__incl.md5 @@ -0,0 +1 @@ +944aae8f568ea95237d7c854ae452773 \ No newline at end of file diff --git a/dynamic__publisher_8h__incl.png b/dynamic__publisher_8h__incl.png new file mode 100644 index 00000000..fcd15ebf Binary files /dev/null and b/dynamic__publisher_8h__incl.png differ diff --git a/dynamic__publisher_8h_source.html b/dynamic__publisher_8h_source.html new file mode 100644 index 00000000..5894a2f3 --- /dev/null +++ b/dynamic__publisher_8h_source.html @@ -0,0 +1,138 @@ + + + + + + + +mrs_lib: include/mrs_lib/dynamic_publisher.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
dynamic_publisher.h
+
+
+Go to the documentation of this file.
1 // clang: MatousFormat
+
8 #ifndef DYNAMIC_PUBLISHER_H
+
9 #define DYNAMIC_PUBLISHER_H
+
10 
+
11 #include <mutex>
+
12 #include <ros/ros.h>
+ +
14 
+
15 namespace mrs_lib
+
16 {
+
17 
+ +
27  {
+
28  public:
+ +
35 
+
42  DynamicPublisher(const ros::NodeHandle& nh);
+
43 
+
52  template <class T>
+
53  void publish(const std::string name, const T& msg);
+
54 
+
55  private:
+
56  class impl;
+
57  std::unique_ptr<impl> m_impl;
+
58  };
+
59 
+
60 #include <mrs_lib/impl/dynamic_publisher.hpp>
+
61 
+
62 } // namespace mrs_lib
+
63 
+
64 #endif // DYNAMIC_PUBLISHER_H
+
+
+
mrs_lib::DynamicPublisher::publish
void publish(const std::string name, const T &msg)
Publishes a message to a topic, advertising the topic if necessary.
+
mrs_lib::DynamicPublisher
A helper class for easy publishing of ROS messages for debugging purposes.
Definition: dynamic_publisher.h:26
+
mrs_lib
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
mrs_lib::DynamicPublisher::DynamicPublisher
DynamicPublisher()
A no-parameter constructor.
Definition: dynamic_publisher.cpp:5
+
publisher_handler.h
Defines PublisherHandler and related convenience classes for upgrading the ROS publisher.
+ + + + diff --git a/dynamic__publisher_8hpp_source.html b/dynamic__publisher_8hpp_source.html new file mode 100644 index 00000000..e1e4e372 --- /dev/null +++ b/dynamic__publisher_8hpp_source.html @@ -0,0 +1,152 @@ + + + + + + + +mrs_lib: include/mrs_lib/impl/dynamic_publisher.hpp Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
dynamic_publisher.hpp
+
+
+
+
2 {
+
3 public:
+
4  impl() = default;
+
5 
+
6  impl(const ros::NodeHandle& nh) : m_nh(nh)
+
7  {
+
8  }
+
9 
+
10  template <class T>
+
11  void publish(const std::string name, const T& msg)
+
12  {
+
13  std::scoped_lock lck(m_mtx);
+
14  const std::string msg_md5 = ros::message_traits::MD5Sum<T>::value();
+
15  const std::string msg_datatype = ros::message_traits::DataType<T>::value();
+
16  if (m_publishers.count(name) == 0)
+
17  m_publishers.emplace(name, pub_info_t{m_nh.advertise<T>(name, 10), msg_md5, msg_datatype});
+
18 
+
19  const auto& pub_info = m_publishers.at(name);
+
20  if (pub_info.msg_md5 == "*" ||
+
21  msg_md5 == "*" ||
+
22  pub_info.msg_md5 == msg_md5)
+
23  {
+
24  pub_info.pub.publish(msg);
+
25  }
+
26  else
+
27  {
+
28  ROS_ERROR_STREAM("[DynamicPublisher]: Trying to publish message of type [" << msg_datatype << "/" << msg_md5
+
29  << "] on a publisher with type [" << pub_info.datatype << "/" << pub_info.msg_md5 << "], ignoring!");
+
30  }
+
31  }
+
32 
+
33 private:
+
34  struct pub_info_t
+
35  {
+
36  ros::Publisher pub;
+
37  std::string msg_md5;
+
38  std::string datatype;
+
39  };
+
40  std::mutex m_mtx;
+
41  ros::NodeHandle m_nh;
+
42  std::unordered_map<std::string, pub_info_t> m_publishers;
+
43 };
+
44 
+
45 template <class T>
+
46 void DynamicPublisher::publish(const std::string name, const T& msg)
+
47 {
+
48  m_impl->publish(name, msg);
+
49 }
+
+
+
DynamicPublisher::impl
Definition: dynamic_publisher.hpp:1
+ + + + diff --git a/dynamic__reconfigure__mgr_8h.html b/dynamic__reconfigure__mgr_8h.html new file mode 100644 index 00000000..41792dde --- /dev/null +++ b/dynamic__reconfigure__mgr_8h.html @@ -0,0 +1,163 @@ + + + + + + + +mrs_lib: include/mrs_lib/dynamic_reconfigure_mgr.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
dynamic_reconfigure_mgr.h File Reference
+
+
+ +

Defines DynamicReconfigureMgr - a convenience class for managing dynamic ROS parameters through dynamic reconfigure. +More...

+
#include <ros/ros.h>
+#include <dynamic_reconfigure/server.h>
+#include <string>
+#include <map>
+#include <unordered_set>
+#include <mutex>
+#include <iostream>
+#include <boost/any.hpp>
+#include <Eigen/Dense>
+#include <mrs_lib/param_loader.h>
+
+ + Include dependency graph for dynamic_reconfigure_mgr.h:
+
+
+ +
+

Go to the source code of this file.

+ + + + +

+Classes

class  mrs_lib::DynamicReconfigureMgr< ConfigType >
 
+ + + + +

+Namespaces

 mrs_lib
 All mrs_lib functions, classes, variables and definitions are contained in this namespace.
 
+

Detailed Description

+

Defines DynamicReconfigureMgr - a convenience class for managing dynamic ROS parameters through dynamic reconfigure.

+
Author
Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
+
+
+ + + + diff --git a/dynamic__reconfigure__mgr_8h__incl.map b/dynamic__reconfigure__mgr_8h__incl.map new file mode 100644 index 00000000..05015db5 --- /dev/null +++ b/dynamic__reconfigure__mgr_8h__incl.map @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/dynamic__reconfigure__mgr_8h__incl.md5 b/dynamic__reconfigure__mgr_8h__incl.md5 new file mode 100644 index 00000000..9a432772 --- /dev/null +++ b/dynamic__reconfigure__mgr_8h__incl.md5 @@ -0,0 +1 @@ +9a53d97d442b3848bdaca4d853376bfd \ No newline at end of file diff --git a/dynamic__reconfigure__mgr_8h__incl.png b/dynamic__reconfigure__mgr_8h__incl.png new file mode 100644 index 00000000..5f18b5f0 Binary files /dev/null and b/dynamic__reconfigure__mgr_8h__incl.png differ diff --git a/dynamic__reconfigure__mgr_8h_source.html b/dynamic__reconfigure__mgr_8h_source.html new file mode 100644 index 00000000..d9b2de14 --- /dev/null +++ b/dynamic__reconfigure__mgr_8h_source.html @@ -0,0 +1,362 @@ + + + + + + + +mrs_lib: include/mrs_lib/dynamic_reconfigure_mgr.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
dynamic_reconfigure_mgr.h
+
+
+Go to the documentation of this file.
1 // clang: MatousFormat
+
6 #ifndef DYNAMIC_RECONFIGURE_MGR_H
+
7 #define DYNAMIC_RECONFIGURE_MGR_H
+
8 
+
9 #include <ros/ros.h>
+
10 #include <dynamic_reconfigure/server.h>
+
11 #include <string>
+
12 #include <map>
+
13 #include <unordered_set>
+
14 #include <mutex>
+
15 #include <iostream>
+
16 #include <boost/any.hpp>
+
17 #include <Eigen/Dense>
+
18 #include <mrs_lib/param_loader.h>
+
19 
+
20 
+
21 namespace mrs_lib
+
22 {
+
23 
+
25 // This class handles dynamic reconfiguration of parameters using dynamic_reconfigure server.
+
26 // Initialize this manager simply by instantiating an object of this templated class
+
27 // with the template parameter corresponding to the type of your config message, e.g. as
+
28 // DynamicReconfigureMgr<MyConfig> drmgr;
+
29 // This will automatically initialize the dynamic_reconfigure server and a callback method
+
30 // to asynchronously update the values in the config.
+
31 // Optionally, you can specify the ros NodeHandle to initialize the dynamic_reconfigure server
+
32 // and a flag 'print_values' to indicate whether to print new received values (only changed ones,
+
33 // default is true).
+
34 // The latest configuration is available through the public member 'config'. This should be
+
35 // changed externally with care since any change risks being overwritten in the next call to
+
36 // the 'dynamic_reconfigure_callback' method.
+
37 // Note that in case of a multithreaded ROS node, external mutexes _might_ be necessary
+
38 // to make access to the 'config' member thread-safe.
+
39 template <typename ConfigType>
+ +
41 {
+
42  private:
+
43  using callback_t = typename dynamic_reconfigure::Server<ConfigType>::CallbackType;
+
44 public:
+
45  // this variable holds the latest received configuration
+
46  ConfigType config;
+
47  // initialize some stuff in the constructor
+
48  DynamicReconfigureMgr(const ros::NodeHandle& nh = ros::NodeHandle("~"), bool print_values = true, std::string node_name = std::string(), const callback_t& user_callback = {})
+
49  : m_not_initialized(true),
+
50  m_loaded_invalid_default(false),
+
51  m_print_values(print_values),
+
52  m_node_name(node_name),
+
53  m_server(m_server_mtx, nh),
+
54  m_usr_cbf(user_callback),
+
55  m_pl(nh, print_values, node_name)
+
56  {
+
57  // initialize the dynamic reconfigure callback
+
58  m_server.setCallback(boost::bind(&DynamicReconfigureMgr<ConfigType>::dynamic_reconfigure_callback, this, _1, _2));
+
59  };
+
60 
+
61  /* Constructor overloads //{ */
+
62  // Convenience constructor to enable writing DynamicReconfigureMgr<MyConfig> drmgr(nh, node_name)
+
63  DynamicReconfigureMgr(const ros::NodeHandle& nh, std::string node_name) : DynamicReconfigureMgr(nh, true, node_name){};
+
64  // Convenience constructor to enable writing DynamicReconfigureMgr<MyConfig> drmgr(nh, "node_name")
+
65  DynamicReconfigureMgr(const ros::NodeHandle& nh, const char* node_name) : DynamicReconfigureMgr(nh, std::string(node_name)){};
+
66  // Convenience constructor to enable writing DynamicReconfigureMgr<MyConfig> drmgr(node_name)
+
67  DynamicReconfigureMgr(std::string node_name) : DynamicReconfigureMgr(ros::NodeHandle("~"), node_name){};
+
68  //}
+
69 
+
70  // pushes this config to the server
+
71  void update_config(const ConfigType& cfg)
+
72  {
+
73  m_server.updateConfig(cfg);
+
74  }
+
75 
+
76  // pushes the current config to the server
+
77  void update_config()
+
78  {
+
79  m_server.updateConfig(config);
+
80  }
+
81 
+
82  void publish_descriptions()
+
83  {
+
84  ConfigType dflt;
+
85  m_server.getConfigDefault(dflt);
+
86  m_server.setConfigDefault(dflt);
+
87  }
+
88 
+
89  bool loaded_successfully()
+
90  {
+
91  return !m_not_initialized && !m_loaded_invalid_default && m_pl.loadedSuccessfully();
+
92  }
+
93 
+
94 private:
+
95  bool m_not_initialized, m_loaded_invalid_default, m_print_values;
+
96  std::string m_node_name;
+
97  // dynamic_reconfigure server variables
+
98  boost::recursive_mutex m_server_mtx;
+
99  typename dynamic_reconfigure::Server<ConfigType> m_server;
+
100  callback_t m_usr_cbf;
+
101 
+
102  ParamLoader m_pl;
+
103  std::unordered_set<std::string> m_to_init;
+
104 
+
105  // the callback itself
+
106  void dynamic_reconfigure_callback(ConfigType& new_config, uint32_t level)
+
107  {
+
108  if (m_print_values)
+
109  {
+
110  if (m_node_name.empty())
+
111  ROS_INFO("Dynamic reconfigure request received");
+
112  else
+
113  ROS_INFO("[%s]: Dynamic reconfigure request received", m_node_name.c_str());
+
114  }
+
115 
+
116  if (m_not_initialized)
+
117  {
+
118  load_defaults(new_config);
+
119  update_config(new_config);
+
120  }
+
121  if (m_print_values)
+
122  {
+
123  print_changed_params(new_config);
+
124  }
+
125  m_not_initialized = false;
+
126  config = new_config;
+
127  if (m_usr_cbf)
+
128  m_usr_cbf(new_config, level);
+
129  }
+
130 
+
131  template <typename T>
+
132  void load_param(const std::string& name, typename ConfigType::AbstractParamDescriptionConstPtr& descr, ConfigType& config)
+
133  {
+
134  using param_descr_t = typename ConfigType::template ParamDescription<T>;
+
135  boost::shared_ptr<const param_descr_t> cast_descr = boost::dynamic_pointer_cast<const param_descr_t>(descr);
+
136  m_pl.loadParam(name, config.*(cast_descr->field));
+
137  }
+
138 
+
139  void load_defaults(ConfigType& new_config)
+
140  {
+
141  // Note that this part of the API is still unstable and may change! It was tested with ROS Kinetic and Melodic.
+
142  std::vector<typename ConfigType::AbstractParamDescriptionConstPtr> descrs = new_config.__getParamDescriptions__();
+
143  for (auto& descr : descrs)
+
144  {
+
145  std::string name = descr->name;
+
146  size_t pos = name.find("__");
+
147  while (pos != name.npos)
+
148  {
+
149  name.replace(pos, 2, "/");
+
150  pos = name.find("__");
+
151  }
+
152 
+
153  if (descr->type == "bool")
+
154  load_param<bool>(name, descr, new_config);
+
155  else if (descr->type == "int")
+
156  load_param<int>(name, descr, new_config);
+
157  else if (descr->type == "double")
+
158  load_param<double>(name, descr, new_config);
+
159  else if (descr->type == "str")
+
160  load_param<std::string>(name, descr, new_config);
+
161  else
+
162  {
+
163  ROS_ERROR("[%s]: Unknown parameter type: '%s'", m_node_name.c_str(), descr->type.c_str());
+
164  m_loaded_invalid_default = true;
+
165  }
+
166  }
+
167  }
+
168 
+
169  // method for printing names and values of new received parameters (prints only the changed ones) //{
+
170  void print_changed_params(const ConfigType& new_config)
+
171  {
+
172  // Note that this part of the API is still unstable and may change! It was tested with ROS Kinetic and Melodic.
+
173  std::vector<typename ConfigType::AbstractParamDescriptionConstPtr> descrs = new_config.__getParamDescriptions__();
+
174  for (auto& descr : descrs)
+
175  {
+
176  boost::any val, old_val;
+
177  descr->getValue(new_config, val);
+
178  descr->getValue(config, old_val);
+
179  std::string name = descr->name;
+
180  const size_t pos = name.find("__");
+
181  if (pos != name.npos)
+
182  {
+
183  if (m_not_initialized)
+
184  {
+
185  continue;
+
186  } else
+
187  {
+
188  name.replace(pos, 2, "/");
+
189  }
+
190  }
+
191 
+
192  // try to guess the correct type of the parameter (these should be the only ones supported)
+
193  int* intval;
+
194  double* doubleval;
+
195  bool* boolval;
+
196  std::string* stringval;
+
197 
+
198  if (try_cast(val, intval))
+
199  {
+
200  if (m_not_initialized || !try_compare(old_val, intval))
+
201  print_value(name, *intval);
+
202  } else if (try_cast(val, doubleval))
+
203  {
+
204  if (m_not_initialized || !try_compare(old_val, doubleval))
+
205  print_value(name, *doubleval);
+
206  } else if (try_cast(val, boolval))
+
207  {
+
208  if (m_not_initialized || !try_compare(old_val, boolval))
+
209  print_value(name, *boolval);
+
210  } else if (try_cast(val, stringval))
+
211  {
+
212  if (m_not_initialized || !try_compare(old_val, stringval))
+
213  print_value(name, *stringval);
+
214  } else
+
215  {
+
216  print_value(name, std::string("unknown dynamic reconfigure type"));
+
217  }
+
218  }
+
219  }
+
220  //}
+
221 
+
222  // helper method for parameter printing
+
223  template <typename T>
+
224  inline void print_value(const std::string& name, const T& val)
+
225  {
+
226  if (m_node_name.empty())
+
227  std::cout << "\t" << name << ":\t" << val << std::endl;
+
228  else
+
229  ROS_INFO_STREAM("[" << m_node_name << "]: parameter '" << name << "':\t" << val);
+
230  }
+
231  // helper methods for automatic parameter value parsing
+
232  template <typename T>
+
233  inline bool try_cast(boost::any& val, T*& out)
+
234  {
+
235  return (out = boost::any_cast<T>(&val));
+
236  };
+
237  template <typename T>
+
238  inline bool try_compare(boost::any& val, T*& to_what)
+
239  {
+
240  T* tmp;
+
241  if ((tmp = boost::any_cast<T>(&val)))
+
242  {
+
243  /* std::cout << std::endl << *tmp << " vs " << *to_what << std::endl; */
+
244  return *tmp == *to_what;
+
245  } else
+
246  { // the value should not change during runtime - this should never happen (but its better to be safe than sorry)
+
247  if (m_node_name.empty())
+
248  ROS_WARN("DynamicReconfigure value type has changed - this should not happen!");
+
249  else
+
250  ROS_WARN_STREAM("[" << m_node_name << "]: DynamicReconfigure value type has changed - this should not happen!");
+
251  return false;
+
252  }
+
253  };
+
254 };
+
255 //}
+
256 
+
257 }
+
258 
+
259 #endif // DYNAMIC_RECONFIGURE_MGR_H
+
+
+
mrs_lib::ParamLoader::loadedSuccessfully
bool loadedSuccessfully()
Indicates whether all compulsory parameters were successfully loaded.
Definition: param_loader.h:608
+
mrs_lib
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
param_loader.h
Defines ParamLoader - a convenience class for loading static ROS parameters.
+
mrs_lib::ParamLoader::loadParam
bool loadParam(const std::string &name, T &out_value, const T &default_value)
Loads a parameter from the rosparam server with a default value.
Definition: param_loader.h:628
+
mrs_lib::DynamicReconfigureMgr
Definition: dynamic_reconfigure_mgr.h:40
+
mrs_lib::ParamLoader
Convenience class for loading parameters from rosparam server.
Definition: param_loader.h:43
+ + + + diff --git a/dynamic_publisher_2example_8cpp-example.html b/dynamic_publisher_2example_8cpp-example.html new file mode 100644 index 00000000..13f81ba2 --- /dev/null +++ b/dynamic_publisher_2example_8cpp-example.html @@ -0,0 +1,147 @@ + + + + + + + +mrs_lib: dynamic_publisher/example.cpp + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
dynamic_publisher/example.cpp
+
+
+

This example may be run after building mrs_lib by executing rosrun mrs_lib dynamic_publisher_example.

+
// clang: MatousFormat
+ +
#include <std_msgs/Float32.h>
+
#include <geometry_msgs/Point.h>
+
+
int main(int argc, char **argv)
+
{
+
/* Set up ROS. */
+
const std::string node_name("dynamic_publisher_example");
+
ros::init(argc, argv, node_name);
+
ros::NodeHandle nh;
+
+
// the class can be copied or initialized without a parameter (but then it won't use your node's namespacing, remapping etc.)
+
mrs_lib::DynamicPublisher dynpub, dynpub2;
+ +
+
ros::Duration slp(0.5);
+
+
std_msgs::Float32 float_msg;
+
geometry_msgs::Point pt_msg;
+
+
ROS_INFO("Publishing topics! Use `rostopic list` and `rostopic echo <topic_name>` to see them.");
+
while (ros::ok())
+
{
+
float_msg.data += 666.0f;
+
dynpub.publish("float_topic", float_msg);
+
/* Avoid publishing a message of different type on the same topic! */
+
/* dynpub.publish("float_topic", pt_msg); */
+
+
pt_msg.x = float_msg.data/1;
+
pt_msg.y = float_msg.data/2;
+
pt_msg.z = float_msg.data/3;
+
dynpub.publish("point_topic", pt_msg);
+
/* Avoid publishing a message of different type on the same topic! They will be ignored and will spam you with errors. */
+
dynpub.publish("point_topic", float_msg);
+
+
ros::spinOnce();
+
slp.sleep();
+
}
+
+
return 0;
+
}
+
+
+
mrs_lib::DynamicPublisher::publish
void publish(const std::string name, const T &msg)
Publishes a message to a topic, advertising the topic if necessary.
+
dynamic_publisher.h
Defines DynamicPublisher for easy debug publishing of ROS messages.
+
mrs_lib::DynamicPublisher
A helper class for easy publishing of ROS messages for debugging purposes.
Definition: dynamic_publisher.h:26
+ + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 00000000..ea0a7b39 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,120 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +mrs_lib: Examples + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Examples
+
+ +
+ + + + diff --git a/examples.js b/examples.js new file mode 100644 index 00000000..7e59eb0d --- /dev/null +++ b/examples.js @@ -0,0 +1,13 @@ +var examples = +[ + [ "dynamic_publisher/example.cpp", "dynamic_publisher_2example_8cpp-example.html", null ], + [ "geometry/cyclic_example.cpp", "geometry_2cyclic_example_8cpp-example.html", null ], + [ "lkf/example.cpp", "lkf_2example_8cpp-example.html", null ], + [ "param_loader/example.cpp", "param_loader_2example_8cpp-example.html", null ], + [ "repredictor/example.cpp", "repredictor_2example_8cpp-example.html", null ], + [ "rheiv/example.cpp", "rheiv_2example_8cpp-example.html", null ], + [ "subscribe_handler/example.cpp", "subscribe_handler_2example_8cpp-example.html", null ], + [ "subscribe_handler/simple_example.cpp", "subscribe_handler_2simple_example_8cpp-example.html", null ], + [ "ukf/example.cpp", "ukf_2example_8cpp-example.html", null ], + [ "vector_converter/example.cpp", "vector_converter_2example_8cpp-example.html", null ] +]; \ No newline at end of file diff --git a/files.html b/files.html new file mode 100644 index 00000000..11bffef5 --- /dev/null +++ b/files.html @@ -0,0 +1,194 @@ + + + + + + + +mrs_lib: File List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  include
  mrs_lib
  geometry
 conversions.h
 conversions_eigen.h
 conversions_opencv.h
 cyclic.hDefines the cyclic class for calculations with cyclic quantities
 misc.hDefines useful geometry utilities and functions
 shapes.hDefines various geometrical shapes and their relations
  impl
 dynamic_publisher.hpp
 param_provider.hpp
 publisher_handler.hpp
 service_client_handler.hpp
 subscribe_handler.hpp
 timer.hpp
 transformer.hpp
 ukf.hppImplements UKF - a class implementing the Unscented Kalman Filter
 vector_converter.hppImplements the convertTo() and convertFrom() functions for conversion between different vector representations (Eigen, OpenCV, tf2 etc.)
 vector_converter_types.h
  safety_zone
 line_operations.h
 point_obstacle.h
 polygon.h
 safety_zone.h
 attitude_converter.hConversions between various representations of object attitude in 3D. Supports Quaternions, Euler angles, Angle-axis and Rotational matrices from tf, tf2, Eigen and geometry_msgs libraries. The default Euler angle notation is the extrinsic RPY
 batch_visualizer.hFor convenient and computationally lightweight drawing of geometry in RVIZ using marker arrays
 dkf.h
 dynamic_publisher.hDefines DynamicPublisher for easy debug publishing of ROS messages
 dynamic_reconfigure_mgr.hDefines DynamicReconfigureMgr - a convenience class for managing dynamic ROS parameters through dynamic reconfigure
 gps_conversions.hUniversal Transverse Mercator transforms. Functions to convert (spherical) latitude and longitude to and from (Euclidean) UTM coordinates
 iir_filter.h
 image_publisher.h
 jlkf.h
 kalman_filter.hDefines KalmanFilter - an abstract class, defining common interfaces and types for a generic Kalman filter
 kalman_filter_aloamgarm.hDefines KalmanFilter - an abstract class, defining common interfaces and types for a generic Kalman filter
 lkf.h
 math.hDefines useful math functions that are not part of the cmath STD library
 median_filter.hDefines the MedianFilter class
 mrs_lib.h
 msg_extractor.hUtility functions for getting stuff from ROS msgs
 mutex.hDefines helper routines for getting and setting variables under mutex locks
 nckf.h
 notch_filter.h
 param_loader.hDefines ParamLoader - a convenience class for loading static ROS parameters
 param_provider.h
 profiler.hA scoped function profiler which publishes ROS messages
 publisher_handler.hDefines PublisherHandler and related convenience classes for upgrading the ROS publisher
 quadratic_throttle_model.h
 repredictor.h
 repredictor_aloamgarm.h
 rheiv.hDefines RHEIV and related stuff for surface fitting to points with known covariances according to [2]
 ros_param_provider.h
 scope_timer.hSimple timer which times a duration of its scope, with additional optional checkpoints
 service_client_handler.hDefines ServiceClientHandler and related convenience classes for upgrading the ROS service client
 subscribe_handler.hDefines SubscribeHandler and related convenience classes for subscribing to ROS topics
 timeout_manager.hTODO
 timer.h
 transform_broadcaster.h
 transformer.h
 ukf.hDefines UKF - a class implementing the Unscented Kalman Filter [4]
 utils.hDefines various general utility functions
 vector_converter.hDefines the convert() function for conversion between different vector representations (Eigen, OpenCV, tf2 etc.)
 visual_object.hObject abstraction for the Batch Visualizer
  src
  dynamic_publisher
 example.cppExample file for the DynamicPublisher convenience class
  geometry
 cyclic_example.cppExample file for the cyclical values implementation (see the cyclic class)
  lkf
 example.cppExample file for the LKF implementation
  nckf
 nckf_tests.cppTests for the UKF implementation
  param_loader
 example.cppExample file for the ParamLoader convenience class
  repredictor
 example.cppExample file for the Repredictor implementation
  rheiv
 example.cppExample file for the RHEIV implementation
  subscribe_handler
 example.cppExample file for the SubscribeHandler convenience class
 simple_example.cppExample file for the SubscribeHandler convenience class
  ukf
 example.cppExample file for the UKF implementation
  vector_converter
 example.cppExample file for the convert() vector type conversion function
  test
  math
 probit_gts.h
+
+
+
+ + + + diff --git a/files_dup.js b/files_dup.js new file mode 100644 index 00000000..5c7a7a2b --- /dev/null +++ b/files_dup.js @@ -0,0 +1,6 @@ +var files_dup = +[ + [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ], + [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ], + [ "test", "dir_13e138d54eb8818da29c3992edef070a.html", "dir_13e138d54eb8818da29c3992edef070a" ] +]; \ No newline at end of file diff --git a/folderclosed.png b/folderclosed.png new file mode 100644 index 00000000..bb8ab35e Binary files /dev/null and b/folderclosed.png differ diff --git a/folderopen.png b/folderopen.png new file mode 100644 index 00000000..d6c7f676 Binary files /dev/null and b/folderopen.png differ diff --git a/formula.repository b/formula.repository new file mode 100644 index 00000000..24410277 --- /dev/null +++ b/formula.repository @@ -0,0 +1,64 @@ +\_form#0:$ \mathbf{x} $ +\_form#1:$ \mathbf{u} $ +\_form#2:$ \mathbf{z} $ +\_form#3:$n \times 1$ +\_form#4:$m \times 1$ +\_form#5:$p \times 1$ +\_form#6:$n \times n$ +\_form#7:$p \times p$ +\_form#8:$n \times m$ +\_form#9:$p \times n$ +\_form#10:$n \times p$ +\_form#11:$ r \in {\rm I\!R} $ +\_form#12:$ v \in {\rm I\!R} $ +\_form#13:$ v + kr,~k \in {\rm I\!N} $ +\_form#14:$ v $ +\_form#15:$ v \in [~m,~s~[ $ +\_form#16:$ m $ +\_form#17:$ s $ +\_form#18:$ s = m + r $ +\_form#19:$ v \in [~-\pi,~\pi~[ $ +\_form#20:$ v \in [~0,~2\pi~[ $ +\_form#21:$ r $ +\_form#22:$ r/2 $ +\_form#23:$ v' = v + kr $ +\_form#24:$ v' $ +\_form#25:$ m = 0,~s=360 $ +\_form#26:$ \pi $ +\_form#27:$ a \times b $ +\_form#28:$ n_q \times 1 $ +\_form#29:$ p \times n_q $ +\_form#30:$ n_q \times p $ +\_form#31:$ r\sum_i c_i $ +\_form#32:$ c_i $ +\_form#33:$ i $ +\_form#34:$ 3\times 1 $ +\_form#35:$ 3\times 2 $ +\_form#36:$ \mathbf{\theta} $ +\_form#37:$ \mathbf{\theta}^T \mathbf{u}\left( \mathbf{x} \right) = 0 $ +\_form#38:$ \mathbf{u}\left( \mathbf{x} \right) $ +\_form#39:$ \left[ \mathbf{x}, 1 \right] $ +\_form#40:$ \partial_{\mathbf{x}} \mathbf{z}\left( \mathbf{x} \right) $ +\_form#41:$ \mathbf{z}\left( \mathbf{x} \right) $ +\_form#42:$ \mathbf{u}\left( \mathbf{x} \right) = \left[ \mathbf{z}\left( \mathbf{x} \right), 1 \right] $ +\_form#43:$ \mathbf{\eta} $ +\_form#44:$k \times 1$ +\_form#45:$l \times 1$ +\_form#46:$k \times k$ +\_form#47:$l_r \times 1$ +\_form#48:$ \mathbf{J} \mathbf{z}\left( \mathbf{x} \right) $ +\_form#49:$m \mathbf{A} 1$ +\_form#50:$l_r \times l_r$ +\_form#51:$m \mathbf{B} 1$ +\_form#52:$m \mathbf{M} 1$ +\_form#53:$m \mathbf{N} 1$ +\_form#54:$ \mathbf{\theta}_{k} $ +\_form#55:$ \mathbf{\theta}_{k-1} $ +\_form#56:$ \mathbf{x}_i $ +\_form#57:$ \mathbf{P}_i $ +\_form#58:$ a x + b y + c z + d = 0 $ +\_form#59:$ a $ +\_form#60:$ b $ +\_form#61:$ c $ +\_form#62:$ d $ +\_form#63:$ \mathbf{ \theta } $ diff --git a/functions.html b/functions.html new file mode 100644 index 00000000..c9e2e443 --- /dev/null +++ b/functions.html @@ -0,0 +1,185 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
+
+ + + + diff --git a/functions_b.html b/functions_b.html new file mode 100644 index 00000000..d71ab4d9 --- /dev/null +++ b/functions_b.html @@ -0,0 +1,129 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_c.html b/functions_c.html new file mode 100644 index 00000000..37b0d568 --- /dev/null +++ b/functions_c.html @@ -0,0 +1,168 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
+
+ + + + diff --git a/functions_d.html b/functions_d.html new file mode 100644 index 00000000..5a55f005 --- /dev/null +++ b/functions_d.html @@ -0,0 +1,132 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
+
+ + + + diff --git a/functions_dup.js b/functions_dup.js new file mode 100644 index 00000000..dce297a9 --- /dev/null +++ b/functions_dup.js @@ -0,0 +1,30 @@ +var functions_dup = +[ + [ "a", "functions.html", null ], + [ "b", "functions_b.html", null ], + [ "c", "functions_c.html", null ], + [ "d", "functions_d.html", null ], + [ "e", "functions_e.html", null ], + [ "f", "functions_f.html", null ], + [ "g", "functions_g.html", null ], + [ "h", "functions_h.html", null ], + [ "i", "functions_i.html", null ], + [ "j", "functions_j.html", null ], + [ "k", "functions_k.html", null ], + [ "l", "functions_l.html", null ], + [ "m", "functions_m.html", null ], + [ "n", "functions_n.html", null ], + [ "o", "functions_o.html", null ], + [ "p", "functions_p.html", null ], + [ "q", "functions_q.html", null ], + [ "r", "functions_r.html", null ], + [ "s", "functions_s.html", null ], + [ "t", "functions_t.html", null ], + [ "u", "functions_u.html", null ], + [ "v", "functions_v.html", null ], + [ "w", "functions_w.html", null ], + [ "x", "functions_x.html", null ], + [ "y", "functions_y.html", null ], + [ "z", "functions_z.html", null ], + [ "~", "functions_~.html", null ] +]; \ No newline at end of file diff --git a/functions_e.html b/functions_e.html new file mode 100644 index 00000000..77d5e38c --- /dev/null +++ b/functions_e.html @@ -0,0 +1,110 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
+
+ + + + diff --git a/functions_f.html b/functions_f.html new file mode 100644 index 00000000..94d42947 --- /dev/null +++ b/functions_f.html @@ -0,0 +1,122 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- f -

+
+
+ + + + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 00000000..ee390552 --- /dev/null +++ b/functions_func.html @@ -0,0 +1,172 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+
+
+ + + + diff --git a/functions_func.js b/functions_func.js new file mode 100644 index 00000000..66108c74 --- /dev/null +++ b/functions_func.js @@ -0,0 +1,26 @@ +var functions_func = +[ + [ "a", "functions_func.html", null ], + [ "b", "functions_func_b.html", null ], + [ "c", "functions_func_c.html", null ], + [ "d", "functions_func_d.html", null ], + [ "e", "functions_func_e.html", null ], + [ "f", "functions_func_f.html", null ], + [ "g", "functions_func_g.html", null ], + [ "h", "functions_func_h.html", null ], + [ "i", "functions_func_i.html", null ], + [ "j", "functions_func_j.html", null ], + [ "l", "functions_func_l.html", null ], + [ "m", "functions_func_m.html", null ], + [ "n", "functions_func_n.html", null ], + [ "o", "functions_func_o.html", null ], + [ "p", "functions_func_p.html", null ], + [ "r", "functions_func_r.html", null ], + [ "s", "functions_func_s.html", null ], + [ "t", "functions_func_t.html", null ], + [ "u", "functions_func_u.html", null ], + [ "v", "functions_func_v.html", null ], + [ "w", "functions_func_w.html", null ], + [ "y", "functions_func_y.html", null ], + [ "~", "functions_func_~.html", null ] +]; \ No newline at end of file diff --git a/functions_func_b.html b/functions_func_b.html new file mode 100644 index 00000000..6ef7544c --- /dev/null +++ b/functions_func_b.html @@ -0,0 +1,112 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_func_c.html b/functions_func_c.html new file mode 100644 index 00000000..33595528 --- /dev/null +++ b/functions_func_c.html @@ -0,0 +1,165 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_func_d.html b/functions_func_d.html new file mode 100644 index 00000000..84eb68bf --- /dev/null +++ b/functions_func_d.html @@ -0,0 +1,123 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- d -

+
+
+ + + + diff --git a/functions_func_e.html b/functions_func_e.html new file mode 100644 index 00000000..71319238 --- /dev/null +++ b/functions_func_e.html @@ -0,0 +1,107 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- e -

+
+
+ + + + diff --git a/functions_func_f.html b/functions_func_f.html new file mode 100644 index 00000000..db08a092 --- /dev/null +++ b/functions_func_f.html @@ -0,0 +1,116 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- f -

+
+
+ + + + diff --git a/functions_func_g.html b/functions_func_g.html new file mode 100644 index 00000000..71be0003 --- /dev/null +++ b/functions_func_g.html @@ -0,0 +1,166 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- g -

+
+
+ + + + diff --git a/functions_func_h.html b/functions_func_h.html new file mode 100644 index 00000000..2ac5e71c --- /dev/null +++ b/functions_func_h.html @@ -0,0 +1,108 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_func_i.html b/functions_func_i.html new file mode 100644 index 00000000..e0cd92d4 --- /dev/null +++ b/functions_func_i.html @@ -0,0 +1,127 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_func_j.html b/functions_func_j.html new file mode 100644 index 00000000..c136f10b --- /dev/null +++ b/functions_func_j.html @@ -0,0 +1,104 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_func_l.html b/functions_func_l.html new file mode 100644 index 00000000..930330d5 --- /dev/null +++ b/functions_func_l.html @@ -0,0 +1,146 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- l -

+
+
+ + + + diff --git a/functions_func_m.html b/functions_func_m.html new file mode 100644 index 00000000..37903af5 --- /dev/null +++ b/functions_func_m.html @@ -0,0 +1,107 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- m -

+
+
+ + + + diff --git a/functions_func_n.html b/functions_func_n.html new file mode 100644 index 00000000..d563dca7 --- /dev/null +++ b/functions_func_n.html @@ -0,0 +1,114 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_func_o.html b/functions_func_o.html new file mode 100644 index 00000000..5c79202d --- /dev/null +++ b/functions_func_o.html @@ -0,0 +1,158 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- o -

+
+
+ + + + diff --git a/functions_func_p.html b/functions_func_p.html new file mode 100644 index 00000000..ae2e976e --- /dev/null +++ b/functions_func_p.html @@ -0,0 +1,154 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_func_r.html b/functions_func_r.html new file mode 100644 index 00000000..4b393195 --- /dev/null +++ b/functions_func_r.html @@ -0,0 +1,136 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- r -

+
+
+ + + + diff --git a/functions_func_s.html b/functions_func_s.html new file mode 100644 index 00000000..c57f0a68 --- /dev/null +++ b/functions_func_s.html @@ -0,0 +1,196 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- s -

+
+
+ + + + diff --git a/functions_func_t.html b/functions_func_t.html new file mode 100644 index 00000000..70911bca --- /dev/null +++ b/functions_func_t.html @@ -0,0 +1,140 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- t -

+
+
+ + + + diff --git a/functions_func_u.html b/functions_func_u.html new file mode 100644 index 00000000..c5e6eb7f --- /dev/null +++ b/functions_func_u.html @@ -0,0 +1,110 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_func_v.html b/functions_func_v.html new file mode 100644 index 00000000..007ef661 --- /dev/null +++ b/functions_func_v.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_func_w.html b/functions_func_w.html new file mode 100644 index 00000000..7f88e5c9 --- /dev/null +++ b/functions_func_w.html @@ -0,0 +1,112 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_func_y.html b/functions_func_y.html new file mode 100644 index 00000000..aa8b4bbc --- /dev/null +++ b/functions_func_y.html @@ -0,0 +1,104 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- y -

+
+
+ + + + diff --git a/functions_func_~.html b/functions_func_~.html new file mode 100644 index 00000000..bd6082f8 --- /dev/null +++ b/functions_func_~.html @@ -0,0 +1,149 @@ + + + + + + + +mrs_lib: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- ~ -

+
+
+ + + + diff --git a/functions_g.html b/functions_g.html new file mode 100644 index 00000000..b5759ad5 --- /dev/null +++ b/functions_g.html @@ -0,0 +1,166 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
+
+ + + + diff --git a/functions_h.html b/functions_h.html new file mode 100644 index 00000000..9dabf2c1 --- /dev/null +++ b/functions_h.html @@ -0,0 +1,124 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_i.html b/functions_i.html new file mode 100644 index 00000000..2ce303f1 --- /dev/null +++ b/functions_i.html @@ -0,0 +1,130 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
+
+ + + + diff --git a/functions_j.html b/functions_j.html new file mode 100644 index 00000000..9783253e --- /dev/null +++ b/functions_j.html @@ -0,0 +1,104 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- j -

+
+
+ + + + diff --git a/functions_k.html b/functions_k.html new file mode 100644 index 00000000..77d2c09b --- /dev/null +++ b/functions_k.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_l.html b/functions_l.html new file mode 100644 index 00000000..4a14b22a --- /dev/null +++ b/functions_l.html @@ -0,0 +1,152 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
+
+ + + + diff --git a/functions_m.html b/functions_m.html new file mode 100644 index 00000000..d58abde2 --- /dev/null +++ b/functions_m.html @@ -0,0 +1,129 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_n.html b/functions_n.html new file mode 100644 index 00000000..56db08fe --- /dev/null +++ b/functions_n.html @@ -0,0 +1,135 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_o.html b/functions_o.html new file mode 100644 index 00000000..9b73c605 --- /dev/null +++ b/functions_o.html @@ -0,0 +1,167 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
+
+ + + + diff --git a/functions_p.html b/functions_p.html new file mode 100644 index 00000000..13ee9874 --- /dev/null +++ b/functions_p.html @@ -0,0 +1,191 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
+
+ + + + diff --git a/functions_q.html b/functions_q.html new file mode 100644 index 00000000..7a558762 --- /dev/null +++ b/functions_q.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_r.html b/functions_r.html new file mode 100644 index 00000000..aa5b3bd9 --- /dev/null +++ b/functions_r.html @@ -0,0 +1,150 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_rela.html b/functions_rela.html new file mode 100644 index 00000000..aea4cf2b --- /dev/null +++ b/functions_rela.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Class Members - Related Functions + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_s.html b/functions_s.html new file mode 100644 index 00000000..2da9f9dc --- /dev/null +++ b/functions_s.html @@ -0,0 +1,211 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
+
+ + + + diff --git a/functions_t.html b/functions_t.html new file mode 100644 index 00000000..c680c72f --- /dev/null +++ b/functions_t.html @@ -0,0 +1,164 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
+
+ + + + diff --git a/functions_type.html b/functions_type.html new file mode 100644 index 00000000..84f3b94c --- /dev/null +++ b/functions_type.html @@ -0,0 +1,368 @@ + + + + + + + +mrs_lib: Class Members - Typedefs + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- h -

+ + +

- i -

+ + +

- k -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- w -

+ + +

- x -

+ + +

- z -

+
+
+ + + + diff --git a/functions_u.html b/functions_u.html new file mode 100644 index 00000000..cfbb7ea8 --- /dev/null +++ b/functions_u.html @@ -0,0 +1,122 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_v.html b/functions_v.html new file mode 100644 index 00000000..c56eb03d --- /dev/null +++ b/functions_v.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- v -

+
+
+ + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 00000000..d1bb7f3e --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,263 @@ + + + + + + + +mrs_lib: Class Members - Variables + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- h -

+ + +

- k -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- p -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- w -

+ + +

- x -

+
+
+ + + + diff --git a/functions_w.html b/functions_w.html new file mode 100644 index 00000000..41cd219f --- /dev/null +++ b/functions_w.html @@ -0,0 +1,118 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_x.html b/functions_x.html new file mode 100644 index 00000000..e8218ee8 --- /dev/null +++ b/functions_x.html @@ -0,0 +1,126 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_y.html b/functions_y.html new file mode 100644 index 00000000..63cbc8b2 --- /dev/null +++ b/functions_y.html @@ -0,0 +1,104 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- y -

+
+
+ + + + diff --git a/functions_z.html b/functions_z.html new file mode 100644 index 00000000..c595c43a --- /dev/null +++ b/functions_z.html @@ -0,0 +1,119 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/functions_~.html b/functions_~.html new file mode 100644 index 00000000..97b1ac5b --- /dev/null +++ b/functions_~.html @@ -0,0 +1,149 @@ + + + + + + + +mrs_lib: Class Members + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- ~ -

+
+
+ + + + diff --git a/geometry_2cyclic_example_8cpp-example.html b/geometry_2cyclic_example_8cpp-example.html new file mode 100644 index 00000000..124b2e62 --- /dev/null +++ b/geometry_2cyclic_example_8cpp-example.html @@ -0,0 +1,324 @@ + + + + + + + +mrs_lib: geometry/cyclic_example.cpp + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
geometry/cyclic_example.cpp
+
+
+

This example may be run after building mrs_lib by executing rosrun mrs_lib cyclic_example.

+
// clang: MatousFormat
+
// Include the header
+ +
#include <random>
+
#include <ros/ros.h>
+
+
// Define the cyclic quantity we will be using (just a float redefinition of degrees)
+
struct degrees : public mrs_lib::geometry::cyclic<float, degrees>
+
{
+
using cyclic<float, degrees>::cyclic; // necessary to inherit constructors
+
static constexpr double minimum = -180;
+
static constexpr double supremum = 180;
+
};
+
+
// A few helpful aliases to make writing of types shorter
+ + +
+
/* helper printing functions //{ */
+
+
template <class T>
+
void printit(const T& a, const std::string& name)
+
{
+
std::cout << name << ":\t" << std::left << std::showpos << std::setprecision(4) << a.value() << "\tin [ " << a.minimum << ",\t" << a.supremum << "\t["
+
<< std::endl;
+
}
+
+
template <class T>
+
void printcont(const T& cont, const std::string& name)
+
{
+
std::cout << name << ":\t";
+
for (const auto& el : cont)
+
std::cout << el << "\t";
+
std::cout << std::endl;
+
}
+
+
//}
+
+
int main()
+
{
+
// | ---------- Basic initialization and conversions ---------- |
+
+
/* initialization, assignment, conversion //{ */
+
+
degrees a(721.0f); // constructor (equal to 1 degree)
+
radians b(-M_PI_2); // constructor (equal to -45 degrees)
+
radians c(b); // copy constructor
+
radians d = 65; // assignment operator using primitive types will automatically wrap the value to the valid interval
+
radians e = b; // assignment operator (radians class)
+
degrees f = b.convert<degrees>(); // conversion from radians to degrees
+
sradians g = b.convert<sradians>(); // conversion from radians to signed radians
+
degrees h = radians::convert<degrees>(5 * M_PI_2); // static conversion from radians to degrees
+
+
printit(a, "a");
+
printit(b, "b");
+
printit(c, "c");
+
printit(d, "d");
+
printit(e, "e");
+
printit(f, "f");
+
printit(g, "g");
+
printit(h, "h");
+
+
//}
+
+
/* wrong way of converting //{ */
+
+
// this is a wrong way of converting radians to degrees - the argument will be interpreted as degrees (the compiler has no way o knowing whether you mean
+
// radians or degrees - it's all float to him)
+
degrees WRONG1 = degrees(5 * M_PI_2);
+
// this is forbidden (and will not compile) - use the convert methods for conversions between different types of cyclic quantities
+
/* degrees WRONG2 = degrees(b); */
+
+
printit(WRONG1, "WRONG1");
+
/* printit(WRONG2, "WRONG2"); */
+
+
//}
+
+
/* accessors //{ */
+
+
// value of the cyclic quantity object can be accessed using a getter
+
double adouble = a.value();
+
// the minimum, supremum and range are a static property of the class and can be retrieved either from an object of from the class
+
double amin = a.minimum;
+
double asup = degrees::supremum;
+
double aran = degrees::range;
+
std::cout << "adouble:" << std::left << std::showpos << std::setprecision(4) << adouble << "\tin [ " << amin << ",\t" << asup << "\t[\trange: " << aran
+
<< std::endl;
+
+
//}
+
+
std::cout << "----------------------------------------------------------------" << std::endl;
+
// | -------------------- Utility functions ------------------- |
+
+
/* wrapping //{ */
+
+
// you can check whether a value is in the valid range of a type
+
double ang = 666;
+
if (!degrees::inRange(ang))
+
{
+
std::cout << std::left << std::showpos << std::setprecision(4) << ang << "\tis not within [ " << degrees::minimum << ",\t" << degrees::supremum << "\t["
+
<< std::endl;
+
// and wrap it to the correct range if needed
+
double wang = degrees::wrap(ang);
+
std::cout << std::left << std::showpos << std::setprecision(4) << ang << "\tafter wrapping: " << wang << std::endl;
+
}
+
+
//}
+
+
/* unwrapping //{ */
+
+
// if you have a sequence of cyclic values and want to "linearize" it (eg. for a Kalman filter or smh, idk), you can use the unwrap function
+
std::vector<double> data = {0, 61, 122, 183, 244, 305, 6, 67, 128, 189};
+
printcont(data, "data before unwrapping");
+
+
for (size_t it = 1; it < data.size(); it++)
+
{
+
const auto prev = data.at(it - 1);
+
auto& cur = data.at(it);
+
cur = degrees::unwrap(cur, prev);
+
}
+
printcont(data, "data after unwrapping");
+
+
// and then you can wrap it to the corresponding interval! Go crazy!
+
for (auto& el : data)
+
el = degrees::wrap(el);
+
printcont(data, "data after wrapping");
+
+
// AND UNWRAP IT AGAIN BECAUSE IT WORKS LIKE MAGIC!!!
+
for (size_t it = 1; it < data.size(); it++)
+
{
+
const auto prev = data.at(it - 1);
+
auto& cur = data.at(it);
+
cur = degrees::unwrap(cur, prev);
+
}
+
printcont(data, "data after unwrapping");
+
+
//}
+
+
std::cout << "----------------------------------------------------------------" << std::endl;
+
// | ------------------- Distance functions ------------------- |
+
+
/* dist() //{ */
+
+
// there are three distance-related functions provided, each with its own uses
+
// firstly, there is the dist() function, which simply returns the shortest distance from A to B in the cyclic sense
+
degrees A(+33.3);
+
degrees B(-33.3);
+
std::cout << std::left << std::showpos << std::setprecision(4) << "A:\t" << A.value() << std::endl
+
<< "B:\t" << B.value() << std::endl
+
<< "dist(A, B):\t" << degrees::dist(A, B) << std::endl
+
<< "dist(B, A):\t" << degrees::dist(B, A) << std::endl;
+
// notice, that dist() is commutative (perhaps unsurprisingly)
+
+
//}
+
+
/* diff() //{ */
+
+
// secondly, diff() returns the difference between B, subtracted from A
+
// this is the same as dist() except that it is signed (the sign depending on the order of the operands)
+
degrees C(+146.7);
+
degrees D(-146.7);
+
std::cout << std::left << std::showpos << std::setprecision(4) << "C:\t" << C.value() << std::endl
+
<< "D:\t" << D.value() << std::endl
+
<< "diff(C, D):\t" << degrees::diff(C, D) << std::endl
+
<< "diff(D, C):\t" << degrees::diff(D, C) << std::endl;
+
// naturally, uncomutatitve, and diff(C, D) = -diff(D, C) as you'd expect from subtraction
+
+
//}
+
+
/* pdist() //{ */
+
+
// lastly, there is the pdist function, which returns distance from A to B in a positive direction
+
degrees E(+1);
+
degrees F(-1);
+
std::cout << std::left << std::showpos << std::setprecision(4) << "E:\t" << E.value() << std::endl
+
<< "F:\t" << F.value() << std::endl
+
<< "pdist(E, F):\t" << degrees::pdist(E, F) << std::endl
+
<< "pdist(F, E):\t" << degrees::pdist(F, E) << std::endl;
+
// naturally, the result is always positive
+
+
//}
+
+
std::cout << "----------------------------------------------------------------" << std::endl;
+
// | ----------------- Interpolation functions ---------------- |
+
+
/* interpolation //{ */
+
+
// it may happen that during your carrier as a human being, you might want to interpolate two angles
+
// worry not, I've got your back!
+
// this is implemented by the interp() and interpUnwrapped() functions
+
// these differ only whether the result is wrapped to the valid interval of values or not (which might be sometimes useful and is sliiightly faster)
+
// BEHOLD:
+
double a1 = -359;
+
double a2 = -2;
+
double coeff = 1.0 / 3.0;
+
std::cout << std::left << std::showpos << std::setprecision(4) << "a1:\t" << a1 << std::endl
+
<< "a2:\t" << a2 << std::endl
+
<< "coeff:\t" << coeff << std::endl
+
<< "interp(a1, a2, coeff):\t" << degrees::interp(a1, a2, coeff) << std::endl
+
<< "interpUnwrapped(a1, a2, coeff):\t" << degrees::interpUnwrapped(a1, a2, coeff) << std::endl;
+
+
//}
+
+
return 0;
+
}
+
+
+
+
Defines the cyclic class for calculations with cyclic quantities.
+
Definition: cyclic_example.cpp:22
+
static float pdist(const float from, const float to)
Returns length of the shortest walk in the positive direction from the first parameter to the second ...
Definition: cyclic.h:171
+
cyclic()
Default constructor.
Definition: cyclic.h:55
+
static float interpUnwrapped(const float from, const float to, const float coeff)
Interpolation between two circular quantities without wrapping of the result.
Definition: cyclic.h:242
+
static float diff(const float minuend, const float subtrahend)
Returns the difference between the two circular values.
Definition: cyclic.h:193
+
static float dist(const float from, const float to)
Returns the distance between the two circular values.
Definition: cyclic.h:219
+
Implementation of the a general cyclic value (such as angles in radians/degrees etc).
Definition: cyclic.h:48
+
Convenience specialization of the cyclic class for unsigned radians (from $0$ to $2\pi$).
Definition: cyclic.h:489
+
Convenience specialization of the cyclic class for signed radians (from $-\pi$ to $\pi$).
Definition: cyclic.h:499
+
static bool inRange(const float val)
Checks if val is within the valid interval of wrapped values.
Definition: cyclic.h:100
+
static float unwrap(const float what, const float from)
Returns value of the parameter what modified so that there is no "jump" between from and \t what.
Definition: cyclic.h:157
+
static float interp(const float from, const float to, const float coeff)
Interpolation between two circular quantities.
Definition: cyclic.h:264
+
static float wrap(const float val)
Returns val, converted to the valid interval of values.
Definition: cyclic.h:114
+
static constexpr float range
Range of the valid interval of wrapped values (also the period of the cyclic quantity).
Definition: cyclic.h:87
+
static other_t convert(const cyclic &what)
Conversion between two different circular quantities.
Definition: cyclic.h:334
+ + + + diff --git a/gps__conversions_8h.html b/gps__conversions_8h.html new file mode 100644 index 00000000..b13c51ea --- /dev/null +++ b/gps__conversions_8h.html @@ -0,0 +1,186 @@ + + + + + + + +mrs_lib: include/mrs_lib/gps_conversions.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
gps_conversions.h File Reference
+
+
+ +

Universal Transverse Mercator transforms. Functions to convert (spherical) latitude and longitude to and from (Euclidean) UTM coordinates. +More...

+
#include <cmath>
+#include <cstdio>
+#include <cstdlib>
+#include <string>
+
+ + Include dependency graph for gps_conversions.h:
+
+
+ +
+

Go to the source code of this file.

+ + + + + +

+Namespaces

 mrs_lib
 All mrs_lib functions, classes, variables and definitions are contained in this namespace.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Variables

+const double mrs_lib::RADIANS_PER_DEGREE = M_PI / 180.0
 
+const double mrs_lib::DEGREES_PER_RADIAN = 180.0 / M_PI
 
+const double mrs_lib::WGS84_A = 6378137.0
 
+const double mrs_lib::WGS84_B = 6356752.31424518
 
+const double mrs_lib::WGS84_F = 0.0033528107
 
+const double mrs_lib::WGS84_E = 0.0818191908
 
+const double mrs_lib::WGS84_EP = 0.0820944379
 
+const double mrs_lib::UTM_K0 = 0.9996
 
+const double mrs_lib::UTM_FE = 500000.0
 
+const double mrs_lib::UTM_FN_N = 0.0
 
+const double mrs_lib::UTM_FN_S = 10000000.0
 
+const double mrs_lib::UTM_E2 = (WGS84_E * WGS84_E)
 
+const double mrs_lib::UTM_E4 = (UTM_E2 * UTM_E2)
 
+const double mrs_lib::UTM_E6 = (UTM_E4 * UTM_E2)
 
+const double mrs_lib::UTM_EP2 = (UTM_E2 / (1 - UTM_E2))
 
+

Detailed Description

+

Universal Transverse Mercator transforms. Functions to convert (spherical) latitude and longitude to and from (Euclidean) UTM coordinates.

+
Author
Chuck Gantz- chuck.nosp@m..gan.nosp@m.tz@gl.nosp@m.obal.nosp@m.star..nosp@m.com
+
+
+ + + + diff --git a/gps__conversions_8h.js b/gps__conversions_8h.js new file mode 100644 index 00000000..16a056f0 --- /dev/null +++ b/gps__conversions_8h.js @@ -0,0 +1,18 @@ +var gps__conversions_8h = +[ + [ "DEGREES_PER_RADIAN", "gps__conversions_8h.html#a936ac9b087815cba51d58fc1f79e0df5", null ], + [ "RADIANS_PER_DEGREE", "gps__conversions_8h.html#a1b0be1888d6415e50bccf1d97b67569a", null ], + [ "UTM_E2", "gps__conversions_8h.html#af541534981355b9db12705282012786a", null ], + [ "UTM_E4", "gps__conversions_8h.html#a8699db73026f4d4bc2f9147815c92eec", null ], + [ "UTM_E6", "gps__conversions_8h.html#ab21d4291d66fc4b83ec94cf6cfaa5740", null ], + [ "UTM_EP2", "gps__conversions_8h.html#a062139851c2a315cee44dd8c57453e14", null ], + [ "UTM_FE", "gps__conversions_8h.html#a634786a113a5b773e4b51d6235d33ece", null ], + [ "UTM_FN_N", "gps__conversions_8h.html#ab78760950af658f01b7c63bd34b98426", null ], + [ "UTM_FN_S", "gps__conversions_8h.html#a773b1a8b8b3ae12a59841c1a962883a9", null ], + [ "UTM_K0", "gps__conversions_8h.html#a22a17cb8ca411d7cd8b249ba01803aa1", null ], + [ "WGS84_A", "gps__conversions_8h.html#a4c4520b3f93b357fba7dbde5fdb88a9c", null ], + [ "WGS84_B", "gps__conversions_8h.html#a11399734244c9153d49d112430b60d25", null ], + [ "WGS84_E", "gps__conversions_8h.html#addc466a492d572ac9cb23fa2b2a12b4f", null ], + [ "WGS84_EP", "gps__conversions_8h.html#a1c9799ab8aefb1b9b773cca6d94155a0", null ], + [ "WGS84_F", "gps__conversions_8h.html#aa70cc3837c0593f3e96f709a0e4e70eb", null ] +]; \ No newline at end of file diff --git a/gps__conversions_8h__incl.map b/gps__conversions_8h__incl.map new file mode 100644 index 00000000..4147c9fb --- /dev/null +++ b/gps__conversions_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/gps__conversions_8h__incl.md5 b/gps__conversions_8h__incl.md5 new file mode 100644 index 00000000..699084dc --- /dev/null +++ b/gps__conversions_8h__incl.md5 @@ -0,0 +1 @@ +d7ee4c81a10eff367170cd37f9e5d621 \ No newline at end of file diff --git a/gps__conversions_8h__incl.png b/gps__conversions_8h__incl.png new file mode 100644 index 00000000..3112d85a Binary files /dev/null and b/gps__conversions_8h__incl.png differ diff --git a/gps__conversions_8h_source.html b/gps__conversions_8h_source.html new file mode 100644 index 00000000..e9e42011 --- /dev/null +++ b/gps__conversions_8h_source.html @@ -0,0 +1,366 @@ + + + + + + + +mrs_lib: include/mrs_lib/gps_conversions.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
gps_conversions.h
+
+
+Go to the documentation of this file.
1 /* Taken from utexas-art-ros-pkg:art_vehicle/applanix */
+
2 
+
3 /*
+
4  * Conversions between coordinate systems.
+
5  *
+
6  * Includes LatLong<->UTM.
+
7  */
+
8 
+
9 #ifndef _UTM_H
+
10 #define _UTM_H
+
11 
+
19 #include <cmath>
+
20 #include <cstdio>
+
21 #include <cstdlib>
+
22 #include <string>
+
23 
+
24 namespace mrs_lib
+
25 {
+
26 
+
27  const double RADIANS_PER_DEGREE = M_PI / 180.0;
+
28  const double DEGREES_PER_RADIAN = 180.0 / M_PI;
+
29 
+
30  // WGS84 Parameters
+
31  const double WGS84_A = 6378137.0; // major axis
+
32  const double WGS84_B = 6356752.31424518; // minor axis
+
33  const double WGS84_F = 0.0033528107; // ellipsoid flattening
+
34  const double WGS84_E = 0.0818191908; // first eccentricity
+
35  const double WGS84_EP = 0.0820944379; // second eccentricity
+
36 
+
37  // UTM Parameters
+
38  const double UTM_K0 = 0.9996; // scale factor
+
39  const double UTM_FE = 500000.0; // false easting
+
40  const double UTM_FN_N = 0.0; // false northing on north hemisphere
+
41  const double UTM_FN_S = 10000000.0; // false northing on south hemisphere
+
42  const double UTM_E2 = (WGS84_E * WGS84_E); // e^2
+
43  const double UTM_E4 = (UTM_E2 * UTM_E2); // e^4
+
44  const double UTM_E6 = (UTM_E4 * UTM_E2); // e^6
+
45  const double UTM_EP2 = (UTM_E2 / (1 - UTM_E2)); // e'^2
+
46 
+
54  static inline void UTM(double lat, double lon, double* x, double* y) {
+
55  // constants
+
56  const static double m0 = (1 - UTM_E2 / 4 - 3 * UTM_E4 / 64 - 5 * UTM_E6 / 256);
+
57  const static double m1 = -(3 * UTM_E2 / 8 + 3 * UTM_E4 / 32 + 45 * UTM_E6 / 1024);
+
58  const static double m2 = (15 * UTM_E4 / 256 + 45 * UTM_E6 / 1024);
+
59  const static double m3 = -(35 * UTM_E6 / 3072);
+
60 
+
61  // compute the central meridian
+
62  int cm = ((lon >= 0.0) ? ((int)lon - ((int)lon) % 6 + 3) : ((int)lon - ((int)lon) % 6 - 3));
+
63 
+
64  // convert degrees into radians
+
65  double rlat = lat * RADIANS_PER_DEGREE;
+
66  double rlon = lon * RADIANS_PER_DEGREE;
+
67  double rlon0 = cm * RADIANS_PER_DEGREE;
+
68 
+
69  // compute trigonometric functions
+
70  double slat = sin(rlat);
+
71  double clat = cos(rlat);
+
72  double tlat = tan(rlat);
+
73 
+
74  // decide the false northing at origin
+
75  double fn = (lat > 0) ? UTM_FN_N : UTM_FN_S;
+
76 
+
77  double T = tlat * tlat;
+
78  double C = UTM_EP2 * clat * clat;
+
79  double A = (rlon - rlon0) * clat;
+
80  double M = WGS84_A * (m0 * rlat + m1 * sin(2 * rlat) + m2 * sin(4 * rlat) + m3 * sin(6 * rlat));
+
81  double V = WGS84_A / sqrt(1 - UTM_E2 * slat * slat);
+
82 
+
83  // compute the easting-northing coordinates
+
84  *x = UTM_FE + UTM_K0 * V * (A + (1 - T + C) * pow(A, 3) / 6 + (5 - 18 * T + T * T + 72 * C - 58 * UTM_EP2) * pow(A, 5) / 120);
+
85  *y = fn +
+
86  UTM_K0 *
+
87  (M + V * tlat * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * pow(A, 4) / 24 + ((61 - 58 * T + T * T + 600 * C - 330 * UTM_EP2) * pow(A, 6) / 720)));
+
88 
+
89  return;
+
90  }
+
91 
+
92 
+
101  static inline char UTMLetterDesignator(double Lat) {
+
102  char LetterDesignator;
+
103 
+
104  if ((84 >= Lat) && (Lat >= 72))
+
105  LetterDesignator = 'X';
+
106  else if ((72 > Lat) && (Lat >= 64))
+
107  LetterDesignator = 'W';
+
108  else if ((64 > Lat) && (Lat >= 56))
+
109  LetterDesignator = 'V';
+
110  else if ((56 > Lat) && (Lat >= 48))
+
111  LetterDesignator = 'U';
+
112  else if ((48 > Lat) && (Lat >= 40))
+
113  LetterDesignator = 'T';
+
114  else if ((40 > Lat) && (Lat >= 32))
+
115  LetterDesignator = 'S';
+
116  else if ((32 > Lat) && (Lat >= 24))
+
117  LetterDesignator = 'R';
+
118  else if ((24 > Lat) && (Lat >= 16))
+
119  LetterDesignator = 'Q';
+
120  else if ((16 > Lat) && (Lat >= 8))
+
121  LetterDesignator = 'P';
+
122  else if ((8 > Lat) && (Lat >= 0))
+
123  LetterDesignator = 'N';
+
124  else if ((0 > Lat) && (Lat >= -8))
+
125  LetterDesignator = 'M';
+
126  else if ((-8 > Lat) && (Lat >= -16))
+
127  LetterDesignator = 'L';
+
128  else if ((-16 > Lat) && (Lat >= -24))
+
129  LetterDesignator = 'K';
+
130  else if ((-24 > Lat) && (Lat >= -32))
+
131  LetterDesignator = 'J';
+
132  else if ((-32 > Lat) && (Lat >= -40))
+
133  LetterDesignator = 'H';
+
134  else if ((-40 > Lat) && (Lat >= -48))
+
135  LetterDesignator = 'G';
+
136  else if ((-48 > Lat) && (Lat >= -56))
+
137  LetterDesignator = 'F';
+
138  else if ((-56 > Lat) && (Lat >= -64))
+
139  LetterDesignator = 'E';
+
140  else if ((-64 > Lat) && (Lat >= -72))
+
141  LetterDesignator = 'D';
+
142  else if ((-72 > Lat) && (Lat >= -80))
+
143  LetterDesignator = 'C';
+
144  // 'Z' is an error flag, the Latitude is outside the UTM limits
+
145  else
+
146  LetterDesignator = 'Z';
+
147  return LetterDesignator;
+
148  }
+
149 
+
159  static inline void LLtoUTM(const double Lat, const double Long, double& UTMNorthing, double& UTMEasting, char* UTMZone) {
+
160  double a = WGS84_A;
+
161  double eccSquared = UTM_E2;
+
162  double k0 = UTM_K0;
+
163 
+
164  double LongOrigin;
+
165  double eccPrimeSquared;
+
166  double N, T, C, A, M;
+
167 
+
168  // Make sure the longitude is between -180.00 .. 179.9
+
169  double LongTemp = (Long + 180) - int((Long + 180) / 360) * 360 - 180;
+
170 
+
171  double LatRad = Lat * RADIANS_PER_DEGREE;
+
172  double LongRad = LongTemp * RADIANS_PER_DEGREE;
+
173  double LongOriginRad;
+
174  int ZoneNumber;
+
175 
+
176  ZoneNumber = int((LongTemp + 180) / 6) + 1;
+
177  // range clamping to shut up some compiler warnings
+
178  // (the UTM Zone number should in reality be in the range <1, 60>)
+
179  if (ZoneNumber > 99)
+
180  ZoneNumber = 99;
+
181  if (ZoneNumber < -9)
+
182  ZoneNumber = -9;
+
183 
+
184  if (Lat >= 56.0 && Lat < 64.0 && LongTemp >= 3.0 && LongTemp < 12.0)
+
185  ZoneNumber = 32;
+
186 
+
187  // Special zones for Svalbard
+
188  if (Lat >= 72.0 && Lat < 84.0) {
+
189  if (LongTemp >= 0.0 && LongTemp < 9.0)
+
190  ZoneNumber = 31;
+
191  else if (LongTemp >= 9.0 && LongTemp < 21.0)
+
192  ZoneNumber = 33;
+
193  else if (LongTemp >= 21.0 && LongTemp < 33.0)
+
194  ZoneNumber = 35;
+
195  else if (LongTemp >= 33.0 && LongTemp < 42.0)
+
196  ZoneNumber = 37;
+
197  }
+
198  // +3 puts origin in middle of zone
+
199  LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3;
+
200  LongOriginRad = LongOrigin * RADIANS_PER_DEGREE;
+
201 
+
202  // compute the UTM Zone from the latitude and longitude
+
203  snprintf(UTMZone, 4, "%d%c", ZoneNumber, UTMLetterDesignator(Lat));
+
204 
+
205  eccPrimeSquared = (eccSquared) / (1 - eccSquared);
+
206 
+
207  N = a / sqrt(1 - eccSquared * sin(LatRad) * sin(LatRad));
+
208  T = tan(LatRad) * tan(LatRad);
+
209  C = eccPrimeSquared * cos(LatRad) * cos(LatRad);
+
210  A = cos(LatRad) * (LongRad - LongOriginRad);
+
211 
+
212  M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad -
+
213  (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * sin(2 * LatRad) +
+
214  (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * sin(4 * LatRad) -
+
215  (35 * eccSquared * eccSquared * eccSquared / 3072) * sin(6 * LatRad));
+
216 
+
217  UTMEasting =
+
218  (double)(k0 * N * (A + (1 - T + C) * A * A * A / 6 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120) + 500000.0);
+
219 
+
220  UTMNorthing = (double)(k0 * (M + N * tan(LatRad) *
+
221  (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24 +
+
222  (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720)));
+
223  if (Lat < 0)
+
224  UTMNorthing += 10000000.0; // 10000000 meter offset for southern hemisphere
+
225  }
+
226 
+
227  static inline void LLtoUTM(const double Lat, const double Long, double& UTMNorthing, double& UTMEasting, std::string& UTMZone) {
+
228  char zone_buf[] = {0, 0, 0, 0};
+
229 
+
230  LLtoUTM(Lat, Long, UTMNorthing, UTMEasting, zone_buf);
+
231 
+
232  UTMZone = zone_buf;
+
233  }
+
234 
+
235 
+
245  static inline void UTMtoLL(const double UTMNorthing, const double UTMEasting, const char* UTMZone, double& Lat, double& Long) {
+
246  double k0 = UTM_K0;
+
247  double a = WGS84_A;
+
248  double eccSquared = UTM_E2;
+
249  double eccPrimeSquared;
+
250  double e1 = (1 - sqrt(1 - eccSquared)) / (1 + sqrt(1 - eccSquared));
+
251  double N1, T1, C1, R1, D, M;
+
252  double LongOrigin;
+
253  double mu, phi1Rad;
+
254  [[maybe_unused]] double phi1;
+
255  double x, y;
+
256  int ZoneNumber;
+
257  char* ZoneLetter;
+
258  [[maybe_unused]] int NorthernHemisphere; // 1 for northern hemispher, 0 for southern
+
259 
+
260  x = UTMEasting - 500000.0; // remove 500,000 meter offset for longitude
+
261  y = UTMNorthing;
+
262 
+
263  ZoneNumber = strtoul(UTMZone, &ZoneLetter, 10);
+
264  if ((*ZoneLetter - 'N') >= 0)
+
265  NorthernHemisphere = 1; // point is in northern hemisphere
+
266  else {
+
267  NorthernHemisphere = 0; // point is in southern hemisphere
+
268  y -= 10000000.0; // remove 10,000,000 meter offset used for southern hemisphere
+
269  }
+
270 
+
271  LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin in middle of zone
+
272 
+
273  eccPrimeSquared = (eccSquared) / (1 - eccSquared);
+
274 
+
275  M = y / k0;
+
276  mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));
+
277 
+
278  phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * sin(4 * mu) +
+
279  (151 * e1 * e1 * e1 / 96) * sin(6 * mu);
+
280  phi1 = phi1Rad * DEGREES_PER_RADIAN;
+
281 
+
282  N1 = a / sqrt(1 - eccSquared * sin(phi1Rad) * sin(phi1Rad));
+
283  T1 = tan(phi1Rad) * tan(phi1Rad);
+
284  C1 = eccPrimeSquared * cos(phi1Rad) * cos(phi1Rad);
+
285  R1 = a * (1 - eccSquared) / pow(1 - eccSquared * sin(phi1Rad) * sin(phi1Rad), 1.5);
+
286  D = x / (N1 * k0);
+
287 
+
288  Lat = phi1Rad - (N1 * tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 +
+
289  (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);
+
290  Lat = Lat * DEGREES_PER_RADIAN;
+
291 
+
292  Long = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) /
+
293  cos(phi1Rad);
+
294  Long = LongOrigin + Long * DEGREES_PER_RADIAN;
+
295  }
+
296 
+
297  static inline void UTMtoLL(const double UTMNorthing, const double UTMEasting, std::string UTMZone, double& Lat, double& Long) {
+
298  UTMtoLL(UTMNorthing, UTMEasting, UTMZone.c_str(), Lat, Long);
+
299  }
+
300 
+
301 } // namespace mrs_lib
+
302 
+
303 #endif // _UTM_H
+
+
+
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+ + + + diff --git a/graph_legend.html b/graph_legend.html new file mode 100644 index 00000000..2b83f5df --- /dev/null +++ b/graph_legend.html @@ -0,0 +1,161 @@ + + + + + + + +mrs_lib: Graph Legend + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a gray border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • +
+
+
+ + + + diff --git a/graph_legend.md5 b/graph_legend.md5 new file mode 100644 index 00000000..8fcdccd1 --- /dev/null +++ b/graph_legend.md5 @@ -0,0 +1 @@ +f51bf6e9a10430aafef59831b08dcbfe \ No newline at end of file diff --git a/graph_legend.png b/graph_legend.png new file mode 100644 index 00000000..7e2cbcfb Binary files /dev/null and b/graph_legend.png differ diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 00000000..479e97b5 --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,214 @@ + + + + + + + +mrs_lib: Class Hierarchy + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
+

Go to the graphical class hierarchy

+This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Cmrs_lib::AtomicScopeFlagConvenience class for automatically setting and unsetting an atomic boolean based on the object's scope. Useful e.g. for indicating whether a thread is running or not
 Cmrs_lib::AttitudeConverterThe main convertor class. Instantiate with any type in constructor and get the value in any other type by assigning the instance to your variable, as: tf::Quaternion tf1_quaternion = AttitudeConverter(roll, pitch, yaw); All the default Euler angles are in the extrinsic RPY notation
 Cmrs_lib::BatchVisualizerLibrary for drawing large amounts of geometric objects in RVIZ at the same time
 Cmrs_lib::geometry::ConeGeometric representaiton of a cone
 Cmrs_lib::geometry::CuboidGeometric representation of a cuboid
 Cmrs_lib::geometry::cyclic< flt, spec >Implementation of the a general cyclic value (such as angles in radians/degrees etc)
 Cmrs_lib::geometry::cyclic< double, degrees >
 Cmrs_lib::geometry::cyclic< double, radians >
 Cmrs_lib::geometry::cyclic< double, sdegrees >
 Cmrs_lib::geometry::cyclic< double, sradians >
 Cmrs_lib::geometry::cyclic< float, degrees >
 Cmrs_lib::geometry::CylinderGeometric representation of a cylinder
 Cmrs_lib::DynamicPublisherA helper class for easy publishing of ROS messages for debugging purposes
 Cmrs_lib::DynamicReconfigureMgr< ConfigType >
 Cmrs_lib::geometry::EllipseGeometric representation of an ellipse
 Cmrs_lib::EulerAttitudeA small class for storing the Euler angles
 Cexception
 Cmrs_lib::IirFilter
 Cmrs_lib::ImagePubliserData
 Cmrs_lib::ImagePublisher
 CDynamicPublisher::impl
 Cmrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >
 CThreadTimer::Impl
 Cmrs_lib::Intersection
 Cmrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >This abstract class defines common interfaces and types for a generic Kalman filter
 Cmrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >This abstract class defines common interfaces and types for a generic Kalman filter
 Cmrs_lib::MedianFilterImplementation of a median filter with a fixed-length buffer
 Cmrs_lib::quadratic_throttle_model::MotorParams_t
 Cmrs_lib::MRSTimerCommon wrapper representing the functionality of the ros::Timer
 CMyPoint
 Cmrs_lib::NotchFilter
 Cobj_t
 Cmrs_lib::ParamLoaderConvenience class for loading parameters from rosparam server
 Cmrs_lib::ParamProvider
 Cmrs_lib::PointObstacle
 Cmrs_lib::Polygon
 Cmrs_lib::Profiler
 Cmrs_lib::PublisherHandler< TopicType >User wrapper of the publisher handler implementation
 Cmrs_lib::PublisherHandler_impl< TopicType >Implementation of the publisher handler
 Cmrs_lib::geometry::RayGeometric representation of a ray. Instantiate it by two input Vector3. Use static methods for from-to raycast, or a point-direction raycast
 Cmrs_lib::geometry::RectangleGeometric representation of a rectangle (can represent any quadrilateral)
 Cmrs_lib::Repredictor< Model, disable_reprediction >Implementation of the Repredictor for fusing measurements with variable delays
 Cmrs_lib::Repredictor< Model >
 Cmrs_lib::RHEIV< n_states, n_params >Implementation of the Reduced Heteroscedastic Errors In Variables surface fitting algorithm [2]
 Cmrs_lib::Routine
 Cmrs_lib::SafetyZone
 Cmrs_lib::ScopeTimerSimple timer which will time a duration of a scope and checkpoints inside the scope in ros time and std::chrono time
 Cmrs_lib::ScopeTimerLoggerSimple file logger of scope timer and its checkpoints
 Cmrs_lib::ServiceClientHandler< ServiceType >User wrapper of the service client handler implementation
 Cmrs_lib::ServiceClientHandler_impl< ServiceType >Implementation of the service client handler
 Cmrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >::statecov_tHelper struct for passing around the state and its covariance in one variable
 Cmrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >::statecov_tHelper struct for passing around the state and its covariance in one variable
 CSubObject
 Cmrs_lib::SubscribeHandler< MessageType >The main class for ROS topic subscription, message timeout handling etc
 Cmrs_lib::SubscribeHandlerOptionsA helper class to simplify setup of SubscribeHandler construction. This class is passed to the SubscribeHandler constructor and specifies its common options
 CTest
 Cmrs_lib::ScopeTimer::time_point
 Cmrs_lib::TimeoutManagerTODO
 Cmrs_lib::TransformBroadcasterWrapper for the tf2_ros::TransformBroadcaster. With each sendTransform() command, the message is checked against the last message with the same frame IDs. If the transform was already published in this ros::Time step, then the transform is skipped. Prevents endless stream of warnings from spamming the console output
 Cmrs_lib::TransformerA convenience wrapper class for ROS's native TF2 API to simplify transforming of various messages
 Cmrs_lib::geometry::TriangleGeometric representation of a triangle. Instantiate a new triangle by providing three vertices
 Cstd::tuple_element< 0, mrs_lib::AttitudeConverter >
 Cstd::tuple_element< 1, mrs_lib::AttitudeConverter >
 Cstd::tuple_element< 2, mrs_lib::AttitudeConverter >
 Cstd::tuple_size< mrs_lib::AttitudeConverter >
 Cmrs_lib::Vector3ConverterConverter of Vector3 representations. Instantiate it with any type of vector3 in constructor and convert it by assigning it to any other type of vector3 variable
 Cmrs_lib::VisualObject
+
+
+
+ + + + diff --git a/hierarchy.js b/hierarchy.js new file mode 100644 index 00000000..8cdccba4 --- /dev/null +++ b/hierarchy.js @@ -0,0 +1,128 @@ +var hierarchy = +[ + [ "mrs_lib::AtomicScopeFlag", "classmrs__lib_1_1AtomicScopeFlag.html", null ], + [ "mrs_lib::AttitudeConverter", "classmrs__lib_1_1AttitudeConverter.html", null ], + [ "mrs_lib::BatchVisualizer", "classmrs__lib_1_1BatchVisualizer.html", null ], + [ "mrs_lib::geometry::Cone", "classmrs__lib_1_1geometry_1_1Cone.html", null ], + [ "mrs_lib::geometry::Cuboid", "classmrs__lib_1_1geometry_1_1Cuboid.html", null ], + [ "mrs_lib::geometry::cyclic< flt, spec >", "structmrs__lib_1_1geometry_1_1cyclic.html", null ], + [ "mrs_lib::geometry::cyclic< double, degrees >", "structmrs__lib_1_1geometry_1_1cyclic.html", [ + [ "mrs_lib::geometry::degrees", "structmrs__lib_1_1geometry_1_1degrees.html", null ] + ] ], + [ "mrs_lib::geometry::cyclic< double, radians >", "structmrs__lib_1_1geometry_1_1cyclic.html", [ + [ "mrs_lib::geometry::radians", "structmrs__lib_1_1geometry_1_1radians.html", null ] + ] ], + [ "mrs_lib::geometry::cyclic< double, sdegrees >", "structmrs__lib_1_1geometry_1_1cyclic.html", [ + [ "mrs_lib::geometry::sdegrees", "structmrs__lib_1_1geometry_1_1sdegrees.html", null ] + ] ], + [ "mrs_lib::geometry::cyclic< double, sradians >", "structmrs__lib_1_1geometry_1_1cyclic.html", [ + [ "mrs_lib::geometry::sradians", "structmrs__lib_1_1geometry_1_1sradians.html", null ] + ] ], + [ "mrs_lib::geometry::cyclic< float, degrees >", "structmrs__lib_1_1geometry_1_1cyclic.html", [ + [ "degrees", "structdegrees.html", null ] + ] ], + [ "mrs_lib::geometry::Cylinder", "classmrs__lib_1_1geometry_1_1Cylinder.html", null ], + [ "mrs_lib::DynamicPublisher", "classmrs__lib_1_1DynamicPublisher.html", null ], + [ "mrs_lib::DynamicReconfigureMgr< ConfigType >", "classmrs__lib_1_1DynamicReconfigureMgr.html", null ], + [ "mrs_lib::geometry::Ellipse", "classmrs__lib_1_1geometry_1_1Ellipse.html", null ], + [ "mrs_lib::EulerAttitude", "classmrs__lib_1_1EulerAttitude.html", null ], + [ "exception", null, [ + [ "mrs_lib::AttitudeConverter::EulerFormatException", "structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException.html", null ], + [ "mrs_lib::AttitudeConverter::GetHeadingException", "structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException.html", null ], + [ "mrs_lib::AttitudeConverter::InvalidAttitudeException", "structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException.html", null ], + [ "mrs_lib::AttitudeConverter::MathErrorException", "structmrs__lib_1_1AttitudeConverter_1_1MathErrorException.html", null ], + [ "mrs_lib::AttitudeConverter::SetHeadingException", "structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException.html", null ], + [ "mrs_lib::eigenvector_exception", "structmrs__lib_1_1eigenvector__exception.html", null ], + [ "mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >::inverse_exception", "structmrs__lib_1_1JLKF_1_1inverse__exception.html", null ], + [ "mrs_lib::LKF< n_states, n_inputs, n_measurements >::inverse_exception", "structmrs__lib_1_1LKF_1_1inverse__exception.html", null ], + [ "mrs_lib::PointObstacle::WrongHeight", "structmrs__lib_1_1PointObstacle_1_1WrongHeight.html", null ], + [ "mrs_lib::PointObstacle::WrongRadius", "structmrs__lib_1_1PointObstacle_1_1WrongRadius.html", null ], + [ "mrs_lib::Polygon::ExtraVertices", "structmrs__lib_1_1Polygon_1_1ExtraVertices.html", null ], + [ "mrs_lib::Polygon::WrongNumberOfColumns", "structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns.html", null ], + [ "mrs_lib::Polygon::WrongNumberOfVertices", "structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices.html", null ], + [ "mrs_lib::SafetyZone::BorderError", "structmrs__lib_1_1SafetyZone_1_1BorderError.html", null ], + [ "mrs_lib::SafetyZone::PointObstacleError", "structmrs__lib_1_1SafetyZone_1_1PointObstacleError.html", null ], + [ "mrs_lib::SafetyZone::PolygonObstacleError", "structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError.html", null ], + [ "mrs_lib::UKF< n_states, n_inputs, n_measurements >::inverse_exception", "structmrs__lib_1_1UKF_1_1inverse__exception.html", null ], + [ "mrs_lib::UKF< n_states, n_inputs, n_measurements >::square_root_exception", "structmrs__lib_1_1UKF_1_1square__root__exception.html", null ] + ] ], + [ "mrs_lib::IirFilter", "classmrs__lib_1_1IirFilter.html", null ], + [ "mrs_lib::ImagePubliserData", "structmrs__lib_1_1ImagePubliserData.html", null ], + [ "mrs_lib::ImagePublisher", "classmrs__lib_1_1ImagePublisher.html", null ], + [ "DynamicPublisher::impl", "classDynamicPublisher_1_1impl.html", null ], + [ "mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >", "classmrs__lib_1_1SubscribeHandler_1_1Impl.html", [ + [ "mrs_lib::SubscribeHandler< MessageType >::ImplThreadsafe< MessageType >", "classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html", null ] + ] ], + [ "ThreadTimer::Impl", "classThreadTimer_1_1Impl.html", null ], + [ "mrs_lib::Intersection", "structmrs__lib_1_1Intersection.html", null ], + [ "mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >", "classmrs__lib_1_1KalmanFilter.html", [ + [ "mrs_lib::LKF< 3, -1, 2 >", "classmrs__lib_1_1LKF.html", [ + [ "mrs_lib::DKF", "classmrs__lib_1_1DKF.html", null ] + ] ], + [ "mrs_lib::LKF< 3, 1, 1 >", "classmrs__lib_1_1LKF.html", [ + [ "mrs_lib::LKF_MRS_odom", "classmrs__lib_1_1LKF__MRS__odom.html", null ] + ] ], + [ "mrs_lib::LKF< n_states, n_inputs, n_measurements >", "classmrs__lib_1_1LKF.html", [ + [ "mrs_lib::NCLKF< n_states, n_inputs, n_measurements >", "classmrs__lib_1_1NCLKF.html", [ + [ "mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >", "classmrs__lib_1_1NCLKF__partial.html", null ] + ] ], + [ "mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >", "classmrs__lib_1_1varstepLKF.html", null ] + ] ], + [ "mrs_lib::UKF< n_states, n_inputs, n_measurements >", "classmrs__lib_1_1UKF.html", [ + [ "mrs_lib::NCUKF< n_states, n_inputs, n_measurements >", "classmrs__lib_1_1NCUKF.html", null ] + ] ] + ] ], + [ "mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >", "classmrs__lib_1_1KalmanFilterAloamGarm.html", [ + [ "mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >", "classmrs__lib_1_1JLKF.html", null ] + ] ], + [ "mrs_lib::MedianFilter", "classmrs__lib_1_1MedianFilter.html", null ], + [ "mrs_lib::quadratic_throttle_model::MotorParams_t", "structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t.html", null ], + [ "mrs_lib::MRSTimer", "classmrs__lib_1_1MRSTimer.html", [ + [ "mrs_lib::ROSTimer", "classmrs__lib_1_1ROSTimer.html", null ], + [ "mrs_lib::ThreadTimer", "classmrs__lib_1_1ThreadTimer.html", null ] + ] ], + [ "MyPoint", "structMyPoint.html", null ], + [ "mrs_lib::NotchFilter", "classmrs__lib_1_1NotchFilter.html", null ], + [ "obj_t", "structobj__t.html", null ], + [ "mrs_lib::ParamLoader", "classmrs__lib_1_1ParamLoader.html", null ], + [ "mrs_lib::ParamProvider", "classmrs__lib_1_1ParamProvider.html", [ + [ "mrs_lib::RosParamProvider", "classmrs__lib_1_1RosParamProvider.html", null ] + ] ], + [ "mrs_lib::PointObstacle", "classmrs__lib_1_1PointObstacle.html", null ], + [ "mrs_lib::Polygon", "classmrs__lib_1_1Polygon.html", null ], + [ "mrs_lib::Profiler", "classmrs__lib_1_1Profiler.html", null ], + [ "mrs_lib::PublisherHandler< TopicType >", "classmrs__lib_1_1PublisherHandler.html", null ], + [ "mrs_lib::PublisherHandler_impl< TopicType >", "classmrs__lib_1_1PublisherHandler__impl.html", null ], + [ "mrs_lib::geometry::Ray", "classmrs__lib_1_1geometry_1_1Ray.html", null ], + [ "mrs_lib::geometry::Rectangle", "classmrs__lib_1_1geometry_1_1Rectangle.html", null ], + [ "mrs_lib::Repredictor< Model, disable_reprediction >", "classmrs__lib_1_1Repredictor.html", null ], + [ "mrs_lib::Repredictor< Model >", "classmrs__lib_1_1Repredictor.html", [ + [ "mrs_lib::RepredictorAloamgarm< Model >", "classmrs__lib_1_1RepredictorAloamgarm.html", null ] + ] ], + [ "mrs_lib::RHEIV< n_states, n_params >", "classmrs__lib_1_1RHEIV.html", null ], + [ "mrs_lib::Routine", "classmrs__lib_1_1Routine.html", null ], + [ "mrs_lib::SafetyZone", "classmrs__lib_1_1SafetyZone.html", null ], + [ "mrs_lib::ScopeTimer", "classmrs__lib_1_1ScopeTimer.html", null ], + [ "mrs_lib::ScopeTimerLogger", "classmrs__lib_1_1ScopeTimerLogger.html", null ], + [ "mrs_lib::ServiceClientHandler< ServiceType >", "classmrs__lib_1_1ServiceClientHandler.html", null ], + [ "mrs_lib::ServiceClientHandler_impl< ServiceType >", "classmrs__lib_1_1ServiceClientHandler__impl.html", null ], + [ "mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >::statecov_t", "structmrs__lib_1_1KalmanFilter_1_1statecov__t.html", null ], + [ "mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >::statecov_t", "structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html", null ], + [ "SubObject", "classSubObject.html", null ], + [ "mrs_lib::SubscribeHandler< MessageType >", "classmrs__lib_1_1SubscribeHandler.html", null ], + [ "mrs_lib::SubscribeHandlerOptions", "structmrs__lib_1_1SubscribeHandlerOptions.html", null ], + [ "Test", null, [ + [ "VectorConverterTest< T >", "classVectorConverterTest.html", null ] + ] ], + [ "mrs_lib::ScopeTimer::time_point", "structmrs__lib_1_1ScopeTimer_1_1time__point.html", null ], + [ "mrs_lib::TimeoutManager", "classmrs__lib_1_1TimeoutManager.html", null ], + [ "mrs_lib::TransformBroadcaster", "classmrs__lib_1_1TransformBroadcaster.html", null ], + [ "mrs_lib::Transformer", "classmrs__lib_1_1Transformer.html", null ], + [ "mrs_lib::geometry::Triangle", "classmrs__lib_1_1geometry_1_1Triangle.html", null ], + [ "std::tuple_element< 0, mrs_lib::AttitudeConverter >", "structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4.html", null ], + [ "std::tuple_element< 1, mrs_lib::AttitudeConverter >", "structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4.html", null ], + [ "std::tuple_element< 2, mrs_lib::AttitudeConverter >", "structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4.html", null ], + [ "std::tuple_size< mrs_lib::AttitudeConverter >", "structstd_1_1tuple__size_3_01mrs__lib_1_1AttitudeConverter_01_4.html", null ], + [ "mrs_lib::Vector3Converter", "classmrs__lib_1_1Vector3Converter.html", null ], + [ "mrs_lib::VisualObject", "classmrs__lib_1_1VisualObject.html", null ] +]; \ No newline at end of file diff --git a/iir__filter_8h.html b/iir__filter_8h.html new file mode 100644 index 00000000..56c310da --- /dev/null +++ b/iir__filter_8h.html @@ -0,0 +1,144 @@ + + + + + + + +mrs_lib: include/mrs_lib/iir_filter.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
iir_filter.h File Reference
+
+
+
#include <ros/ros.h>
+
+ + Include dependency graph for iir_filter.h:
+
+
+ +
+ + This graph shows which files directly or indirectly include this file:
+
+
+ +
+

Go to the source code of this file.

+ + + + +

+Classes

class  mrs_lib::IirFilter
 
+ + + + +

+Namespaces

 mrs_lib
 All mrs_lib functions, classes, variables and definitions are contained in this namespace.
 
+

Detailed Description

+
+
+ + + + diff --git a/iir__filter_8h__dep__incl.map b/iir__filter_8h__dep__incl.map new file mode 100644 index 00000000..064b1faa --- /dev/null +++ b/iir__filter_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/iir__filter_8h__dep__incl.md5 b/iir__filter_8h__dep__incl.md5 new file mode 100644 index 00000000..6cbb6d54 --- /dev/null +++ b/iir__filter_8h__dep__incl.md5 @@ -0,0 +1 @@ +d5954449838f983536a58c263d70bb27 \ No newline at end of file diff --git a/iir__filter_8h__dep__incl.png b/iir__filter_8h__dep__incl.png new file mode 100644 index 00000000..f2128b53 Binary files /dev/null and b/iir__filter_8h__dep__incl.png differ diff --git a/iir__filter_8h__incl.map b/iir__filter_8h__incl.map new file mode 100644 index 00000000..a75daaf3 --- /dev/null +++ b/iir__filter_8h__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/iir__filter_8h__incl.md5 b/iir__filter_8h__incl.md5 new file mode 100644 index 00000000..450eb2c3 --- /dev/null +++ b/iir__filter_8h__incl.md5 @@ -0,0 +1 @@ +6fd681bcfbf038c0c337c630624730ff \ No newline at end of file diff --git a/iir__filter_8h__incl.png b/iir__filter_8h__incl.png new file mode 100644 index 00000000..eff5b273 Binary files /dev/null and b/iir__filter_8h__incl.png differ diff --git a/iir__filter_8h_source.html b/iir__filter_8h_source.html new file mode 100644 index 00000000..f165251e --- /dev/null +++ b/iir__filter_8h_source.html @@ -0,0 +1,131 @@ + + + + + + + +mrs_lib: include/mrs_lib/iir_filter.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
iir_filter.h
+
+
+Go to the documentation of this file.
1 
+
4 #ifndef IIR_FILTER_H
+
5 #define IIR_FILTER_H
+
6 
+
7 #include <ros/ros.h>
+
8 
+
9 namespace mrs_lib
+
10 {
+
11 
+
12 class IirFilter {
+
13 
+
14 public:
+
15  IirFilter(const std::vector<double>& a, const std::vector<double>& b);
+
16 
+
17  double iterate(const double& input);
+
18 
+
19 
+
20 private:
+
21  std::vector<double> a_;
+
22  std::vector<double> b_;
+
23  size_t order_;
+
24  std::vector<double> buffer_;
+
25 };
+
26 
+
27 } // namespace mrs_lib
+
28 
+
29 #endif
+
+
+
Definition: iir_filter.h:12
+
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+ + + + diff --git a/image__publisher_8h_source.html b/image__publisher_8h_source.html new file mode 100644 index 00000000..f1e3374d --- /dev/null +++ b/image__publisher_8h_source.html @@ -0,0 +1,151 @@ + + + + + + + +mrs_lib: include/mrs_lib/image_publisher.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
image_publisher.h
+
+
+
1 #ifndef _IMAGE_TRANSPORTER_
+
2 #define _IMAGE_TRANSPORTER_
+
3 
+
4 #include <opencv2/core/core.hpp>
+
5 #include <cv_bridge/cv_bridge.h>
+
6 #include <image_transport/image_transport.h>
+
7 #include <ros/ros.h>
+
8 #include <mutex>
+
9 #include <memory>
+
10 
+
11 namespace mrs_lib {
+
12 
+ +
14  ImagePubliserData(const image_transport::Publisher& publisher, const std::string& topic_name, const ros::Time& last_hit)
+
15  :
+
16  publisher(publisher),
+
17  topic_name(topic_name),
+
18  last_hit(last_hit) {};
+
19  image_transport::Publisher publisher;
+
20  std::string topic_name;
+
21  std::mutex pub_mutex;
+
22  ros::Time last_hit;
+
23  };
+
24 
+ +
26  public:
+
27  ImagePublisher(ros::NodeHandlePtr nh_);
+
28  bool publish(std::string topic_name, double throttle_period, cv::Mat& image, bool bgr_order = false);
+
29 
+
30  private:
+
31  std::string getEncoding(cv::Mat& input, bool bgr_order);
+
32  bool throttle(int index, double throttle_period);
+
33 
+
34  ros::NodeHandlePtr nh;
+
35  std::vector<std::unique_ptr<ImagePubliserData>> imagePublishers;
+
36  std::unique_ptr<image_transport::ImageTransport> transport;
+
37  cv_bridge::CvImage outputImage;
+
38  sensor_msgs::ImagePtr msg;
+
39  bool throttle_pass;
+
40  std::mutex main_pub_mutex;
+
41 
+
42 
+
43  };
+
44 
+
45 }
+
46 #endif //_IMAGE_TRANSPORTER_
+
+
+
Definition: image_publisher.h:13
+
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
Definition: image_publisher.h:25
+ + + + diff --git a/index.html b/index.html new file mode 100644 index 00000000..35b288ab --- /dev/null +++ b/index.html @@ -0,0 +1,125 @@ + + + + + + + +mrs_lib: MRS libraries + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
MRS libraries
+
+
+

+
+

:warning: Attention please: This README is outdated.

+

The MRS UAV System 1.5 is being released and this page needs updating. Please, keep in mind that the information on this page might not be valid.

+
+

+Overview

+

This ROS package contains various useful libraries (mostly C++) for the MRS UAV system.

+ +

+Notable libraries:

+
    +
  • ParamLoader - wrapper around ROS's param loading for C++ (documentation)
  • +
  • Transformer - wrapper around ROS's transfomation library (documentation)
  • +
  • SubscribeHandler - wrapper around ROS's subscriber (documentation)
  • +
  • AttitudeConverter - a proxy class for converting representations of 3D orientation (documentation)
  • +
  • LKF - Linear Kalman Filter (documentation)
  • +
  • UKF - Unscented Kalman Filter (documentation)
  • +
  • Repredictor - algorithm for fusing variably time-delayed measurements (documentation)
  • +
  • Profiler - scoped profiling routine (documentation)
  • +
+
+
+
+ + + + diff --git a/inherit_graph_0.map b/inherit_graph_0.map new file mode 100644 index 00000000..038102cb --- /dev/null +++ b/inherit_graph_0.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_0.md5 b/inherit_graph_0.md5 new file mode 100644 index 00000000..14f960fb --- /dev/null +++ b/inherit_graph_0.md5 @@ -0,0 +1 @@ +0241e8942447845c64994ffe3967e84b \ No newline at end of file diff --git a/inherit_graph_0.png b/inherit_graph_0.png new file mode 100644 index 00000000..190007c4 Binary files /dev/null and b/inherit_graph_0.png differ diff --git a/inherit_graph_1.map b/inherit_graph_1.map new file mode 100644 index 00000000..abf3afa0 --- /dev/null +++ b/inherit_graph_1.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_1.md5 b/inherit_graph_1.md5 new file mode 100644 index 00000000..34dc54d7 --- /dev/null +++ b/inherit_graph_1.md5 @@ -0,0 +1 @@ +5640707098c638512660aef3e7d2d0ff \ No newline at end of file diff --git a/inherit_graph_1.png b/inherit_graph_1.png new file mode 100644 index 00000000..de94de40 Binary files /dev/null and b/inherit_graph_1.png differ diff --git a/inherit_graph_10.map b/inherit_graph_10.map new file mode 100644 index 00000000..53c6eebd --- /dev/null +++ b/inherit_graph_10.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_10.md5 b/inherit_graph_10.md5 new file mode 100644 index 00000000..336298b0 --- /dev/null +++ b/inherit_graph_10.md5 @@ -0,0 +1 @@ +8ff9a2e7d4e15417cbee4abc34a2cfb2 \ No newline at end of file diff --git a/inherit_graph_10.png b/inherit_graph_10.png new file mode 100644 index 00000000..7a7a47cc Binary files /dev/null and b/inherit_graph_10.png differ diff --git a/inherit_graph_11.map b/inherit_graph_11.map new file mode 100644 index 00000000..4b2cda44 --- /dev/null +++ b/inherit_graph_11.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_11.md5 b/inherit_graph_11.md5 new file mode 100644 index 00000000..e7045e40 --- /dev/null +++ b/inherit_graph_11.md5 @@ -0,0 +1 @@ +c58f15a981013f4babf7e51ec7d19397 \ No newline at end of file diff --git a/inherit_graph_11.png b/inherit_graph_11.png new file mode 100644 index 00000000..5ca09971 Binary files /dev/null and b/inherit_graph_11.png differ diff --git a/inherit_graph_12.map b/inherit_graph_12.map new file mode 100644 index 00000000..55575631 --- /dev/null +++ b/inherit_graph_12.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_12.md5 b/inherit_graph_12.md5 new file mode 100644 index 00000000..706ae7f2 --- /dev/null +++ b/inherit_graph_12.md5 @@ -0,0 +1 @@ +3a5cb4a02aa998f48e980cef6faf2de6 \ No newline at end of file diff --git a/inherit_graph_12.png b/inherit_graph_12.png new file mode 100644 index 00000000..87d237b3 Binary files /dev/null and b/inherit_graph_12.png differ diff --git a/inherit_graph_13.map b/inherit_graph_13.map new file mode 100644 index 00000000..bf6813df --- /dev/null +++ b/inherit_graph_13.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_13.md5 b/inherit_graph_13.md5 new file mode 100644 index 00000000..86738a0a --- /dev/null +++ b/inherit_graph_13.md5 @@ -0,0 +1 @@ +c6458c8d3c3dbb8032f1a67c0f6c60df \ No newline at end of file diff --git a/inherit_graph_13.png b/inherit_graph_13.png new file mode 100644 index 00000000..897de497 Binary files /dev/null and b/inherit_graph_13.png differ diff --git a/inherit_graph_14.map b/inherit_graph_14.map new file mode 100644 index 00000000..05947492 --- /dev/null +++ b/inherit_graph_14.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_14.md5 b/inherit_graph_14.md5 new file mode 100644 index 00000000..5e3486b1 --- /dev/null +++ b/inherit_graph_14.md5 @@ -0,0 +1 @@ +4355414a5c7160b285ca6e63621b5a36 \ No newline at end of file diff --git a/inherit_graph_14.png b/inherit_graph_14.png new file mode 100644 index 00000000..e41f18b1 Binary files /dev/null and b/inherit_graph_14.png differ diff --git a/inherit_graph_15.map b/inherit_graph_15.map new file mode 100644 index 00000000..3874689c --- /dev/null +++ b/inherit_graph_15.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_15.md5 b/inherit_graph_15.md5 new file mode 100644 index 00000000..69c87dd7 --- /dev/null +++ b/inherit_graph_15.md5 @@ -0,0 +1 @@ +59762c9735b0dbc187f274c369d6c72a \ No newline at end of file diff --git a/inherit_graph_15.png b/inherit_graph_15.png new file mode 100644 index 00000000..b2d83ffc Binary files /dev/null and b/inherit_graph_15.png differ diff --git a/inherit_graph_16.map b/inherit_graph_16.map new file mode 100644 index 00000000..0af5c047 --- /dev/null +++ b/inherit_graph_16.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_16.md5 b/inherit_graph_16.md5 new file mode 100644 index 00000000..fac0f659 --- /dev/null +++ b/inherit_graph_16.md5 @@ -0,0 +1 @@ +54211a121173cb8504aa4968b94a390c \ No newline at end of file diff --git a/inherit_graph_16.png b/inherit_graph_16.png new file mode 100644 index 00000000..1bbe7b7c Binary files /dev/null and b/inherit_graph_16.png differ diff --git a/inherit_graph_17.map b/inherit_graph_17.map new file mode 100644 index 00000000..03fc21cf --- /dev/null +++ b/inherit_graph_17.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_17.md5 b/inherit_graph_17.md5 new file mode 100644 index 00000000..a0060176 --- /dev/null +++ b/inherit_graph_17.md5 @@ -0,0 +1 @@ +1cd25db510966414ae5635af63c37194 \ No newline at end of file diff --git a/inherit_graph_17.png b/inherit_graph_17.png new file mode 100644 index 00000000..8f020957 Binary files /dev/null and b/inherit_graph_17.png differ diff --git a/inherit_graph_18.map b/inherit_graph_18.map new file mode 100644 index 00000000..5a118331 --- /dev/null +++ b/inherit_graph_18.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_18.md5 b/inherit_graph_18.md5 new file mode 100644 index 00000000..addd4cf5 --- /dev/null +++ b/inherit_graph_18.md5 @@ -0,0 +1 @@ +ae4fc37d94cf18424afcd61ee9f82b4d \ No newline at end of file diff --git a/inherit_graph_18.png b/inherit_graph_18.png new file mode 100644 index 00000000..c021e928 Binary files /dev/null and b/inherit_graph_18.png differ diff --git a/inherit_graph_19.map b/inherit_graph_19.map new file mode 100644 index 00000000..197a4ab1 --- /dev/null +++ b/inherit_graph_19.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_19.md5 b/inherit_graph_19.md5 new file mode 100644 index 00000000..0bfc362c --- /dev/null +++ b/inherit_graph_19.md5 @@ -0,0 +1 @@ +0154f7002a8e3234fb151e7e41a57368 \ No newline at end of file diff --git a/inherit_graph_19.png b/inherit_graph_19.png new file mode 100644 index 00000000..1c835551 Binary files /dev/null and b/inherit_graph_19.png differ diff --git a/inherit_graph_2.map b/inherit_graph_2.map new file mode 100644 index 00000000..7cdf192e --- /dev/null +++ b/inherit_graph_2.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_2.md5 b/inherit_graph_2.md5 new file mode 100644 index 00000000..7af8bd76 --- /dev/null +++ b/inherit_graph_2.md5 @@ -0,0 +1 @@ +e6d55d2ffc452aa2a60641610f869858 \ No newline at end of file diff --git a/inherit_graph_2.png b/inherit_graph_2.png new file mode 100644 index 00000000..fc49a9ac Binary files /dev/null and b/inherit_graph_2.png differ diff --git a/inherit_graph_20.map b/inherit_graph_20.map new file mode 100644 index 00000000..91447e18 --- /dev/null +++ b/inherit_graph_20.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_20.md5 b/inherit_graph_20.md5 new file mode 100644 index 00000000..6fed5f76 --- /dev/null +++ b/inherit_graph_20.md5 @@ -0,0 +1 @@ +9b0e7d4de7e2797b9f2a0b78b2eedcc5 \ No newline at end of file diff --git a/inherit_graph_20.png b/inherit_graph_20.png new file mode 100644 index 00000000..8b3bcbb0 Binary files /dev/null and b/inherit_graph_20.png differ diff --git a/inherit_graph_21.map b/inherit_graph_21.map new file mode 100644 index 00000000..fb2315b6 --- /dev/null +++ b/inherit_graph_21.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_21.md5 b/inherit_graph_21.md5 new file mode 100644 index 00000000..75db4972 --- /dev/null +++ b/inherit_graph_21.md5 @@ -0,0 +1 @@ +d91dde2b5c68391de150ef84fee298bd \ No newline at end of file diff --git a/inherit_graph_21.png b/inherit_graph_21.png new file mode 100644 index 00000000..d6ffd49e Binary files /dev/null and b/inherit_graph_21.png differ diff --git a/inherit_graph_22.map b/inherit_graph_22.map new file mode 100644 index 00000000..7178f74c --- /dev/null +++ b/inherit_graph_22.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_22.md5 b/inherit_graph_22.md5 new file mode 100644 index 00000000..9957585f --- /dev/null +++ b/inherit_graph_22.md5 @@ -0,0 +1 @@ +d6b204009b39cd863d499716b8ceb8d3 \ No newline at end of file diff --git a/inherit_graph_22.png b/inherit_graph_22.png new file mode 100644 index 00000000..da02f256 Binary files /dev/null and b/inherit_graph_22.png differ diff --git a/inherit_graph_23.map b/inherit_graph_23.map new file mode 100644 index 00000000..52ca6baa --- /dev/null +++ b/inherit_graph_23.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_23.md5 b/inherit_graph_23.md5 new file mode 100644 index 00000000..4b9588df --- /dev/null +++ b/inherit_graph_23.md5 @@ -0,0 +1 @@ +c9ac2e740f8fa22b8ad5983f51417e84 \ No newline at end of file diff --git a/inherit_graph_23.png b/inherit_graph_23.png new file mode 100644 index 00000000..559fbd85 Binary files /dev/null and b/inherit_graph_23.png differ diff --git a/inherit_graph_24.map b/inherit_graph_24.map new file mode 100644 index 00000000..6eb0ff40 --- /dev/null +++ b/inherit_graph_24.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_24.md5 b/inherit_graph_24.md5 new file mode 100644 index 00000000..b7ade448 --- /dev/null +++ b/inherit_graph_24.md5 @@ -0,0 +1 @@ +2f494b4d9e51e1ab10d1273623ce2fd4 \ No newline at end of file diff --git a/inherit_graph_24.png b/inherit_graph_24.png new file mode 100644 index 00000000..76e60959 Binary files /dev/null and b/inherit_graph_24.png differ diff --git a/inherit_graph_25.map b/inherit_graph_25.map new file mode 100644 index 00000000..d0bfb0b2 --- /dev/null +++ b/inherit_graph_25.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/inherit_graph_25.md5 b/inherit_graph_25.md5 new file mode 100644 index 00000000..1f5d83ea --- /dev/null +++ b/inherit_graph_25.md5 @@ -0,0 +1 @@ +de98fea7c1229081ffd6db7eae896a75 \ No newline at end of file diff --git a/inherit_graph_25.png b/inherit_graph_25.png new file mode 100644 index 00000000..f076f245 Binary files /dev/null and b/inherit_graph_25.png differ diff --git a/inherit_graph_26.map b/inherit_graph_26.map new file mode 100644 index 00000000..12397cbb --- /dev/null +++ b/inherit_graph_26.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_26.md5 b/inherit_graph_26.md5 new file mode 100644 index 00000000..0232ab8d --- /dev/null +++ b/inherit_graph_26.md5 @@ -0,0 +1 @@ +394b3cd6ca392805d1269f9ba550a065 \ No newline at end of file diff --git a/inherit_graph_26.png b/inherit_graph_26.png new file mode 100644 index 00000000..b250b735 Binary files /dev/null and b/inherit_graph_26.png differ diff --git a/inherit_graph_27.map b/inherit_graph_27.map new file mode 100644 index 00000000..9deab16a --- /dev/null +++ b/inherit_graph_27.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_27.md5 b/inherit_graph_27.md5 new file mode 100644 index 00000000..cbea0247 --- /dev/null +++ b/inherit_graph_27.md5 @@ -0,0 +1 @@ +88c6e44d1cf08262c0ce67acc35434a8 \ No newline at end of file diff --git a/inherit_graph_27.png b/inherit_graph_27.png new file mode 100644 index 00000000..16a435d4 Binary files /dev/null and b/inherit_graph_27.png differ diff --git a/inherit_graph_28.map b/inherit_graph_28.map new file mode 100644 index 00000000..285c5a44 --- /dev/null +++ b/inherit_graph_28.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_28.md5 b/inherit_graph_28.md5 new file mode 100644 index 00000000..7e20f240 --- /dev/null +++ b/inherit_graph_28.md5 @@ -0,0 +1 @@ +4f33985b5f49c5395b126fbc42e4e449 \ No newline at end of file diff --git a/inherit_graph_28.png b/inherit_graph_28.png new file mode 100644 index 00000000..b8a38908 Binary files /dev/null and b/inherit_graph_28.png differ diff --git a/inherit_graph_29.map b/inherit_graph_29.map new file mode 100644 index 00000000..071cd821 --- /dev/null +++ b/inherit_graph_29.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_29.md5 b/inherit_graph_29.md5 new file mode 100644 index 00000000..4bf45501 --- /dev/null +++ b/inherit_graph_29.md5 @@ -0,0 +1 @@ +93a0d9605aa39fb60b47cdfc3f79662b \ No newline at end of file diff --git a/inherit_graph_29.png b/inherit_graph_29.png new file mode 100644 index 00000000..e5aae231 Binary files /dev/null and b/inherit_graph_29.png differ diff --git a/inherit_graph_3.map b/inherit_graph_3.map new file mode 100644 index 00000000..4b553de7 --- /dev/null +++ b/inherit_graph_3.map @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/inherit_graph_3.md5 b/inherit_graph_3.md5 new file mode 100644 index 00000000..b3d118d9 --- /dev/null +++ b/inherit_graph_3.md5 @@ -0,0 +1 @@ +68be2e40b5a925dcafb80b21624203ad \ No newline at end of file diff --git a/inherit_graph_3.png b/inherit_graph_3.png new file mode 100644 index 00000000..a408ff85 Binary files /dev/null and b/inherit_graph_3.png differ diff --git a/inherit_graph_30.map b/inherit_graph_30.map new file mode 100644 index 00000000..15d51350 --- /dev/null +++ b/inherit_graph_30.map @@ -0,0 +1,5 @@ + + + + + diff --git a/inherit_graph_30.md5 b/inherit_graph_30.md5 new file mode 100644 index 00000000..6bd131d4 --- /dev/null +++ b/inherit_graph_30.md5 @@ -0,0 +1 @@ +d47627af1977ac67869b23fb15e85312 \ No newline at end of file diff --git a/inherit_graph_30.png b/inherit_graph_30.png new file mode 100644 index 00000000..4ef015cc Binary files /dev/null and b/inherit_graph_30.png differ diff --git a/inherit_graph_31.map b/inherit_graph_31.map new file mode 100644 index 00000000..2d3470a1 --- /dev/null +++ b/inherit_graph_31.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_31.md5 b/inherit_graph_31.md5 new file mode 100644 index 00000000..25009f55 --- /dev/null +++ b/inherit_graph_31.md5 @@ -0,0 +1 @@ +4f7e27387b36cd05377f2a8dee9f789c \ No newline at end of file diff --git a/inherit_graph_31.png b/inherit_graph_31.png new file mode 100644 index 00000000..6f0962a4 Binary files /dev/null and b/inherit_graph_31.png differ diff --git a/inherit_graph_32.map b/inherit_graph_32.map new file mode 100644 index 00000000..e95de130 --- /dev/null +++ b/inherit_graph_32.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_32.md5 b/inherit_graph_32.md5 new file mode 100644 index 00000000..b97998c7 --- /dev/null +++ b/inherit_graph_32.md5 @@ -0,0 +1 @@ +9665b516e066a820bab1a9a7d34660f5 \ No newline at end of file diff --git a/inherit_graph_32.png b/inherit_graph_32.png new file mode 100644 index 00000000..bd9946cd Binary files /dev/null and b/inherit_graph_32.png differ diff --git a/inherit_graph_33.map b/inherit_graph_33.map new file mode 100644 index 00000000..1b2104d6 --- /dev/null +++ b/inherit_graph_33.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_33.md5 b/inherit_graph_33.md5 new file mode 100644 index 00000000..db2e47d9 --- /dev/null +++ b/inherit_graph_33.md5 @@ -0,0 +1 @@ +a0639f37c3d2c5518048c6d424d576cd \ No newline at end of file diff --git a/inherit_graph_33.png b/inherit_graph_33.png new file mode 100644 index 00000000..64b0773b Binary files /dev/null and b/inherit_graph_33.png differ diff --git a/inherit_graph_34.map b/inherit_graph_34.map new file mode 100644 index 00000000..ee343399 --- /dev/null +++ b/inherit_graph_34.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_34.md5 b/inherit_graph_34.md5 new file mode 100644 index 00000000..8b56b98e --- /dev/null +++ b/inherit_graph_34.md5 @@ -0,0 +1 @@ +6ca6126daf6db4e0b3d9fd855d21ca3c \ No newline at end of file diff --git a/inherit_graph_34.png b/inherit_graph_34.png new file mode 100644 index 00000000..7f999884 Binary files /dev/null and b/inherit_graph_34.png differ diff --git a/inherit_graph_35.map b/inherit_graph_35.map new file mode 100644 index 00000000..86faef1d --- /dev/null +++ b/inherit_graph_35.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_35.md5 b/inherit_graph_35.md5 new file mode 100644 index 00000000..b9351588 --- /dev/null +++ b/inherit_graph_35.md5 @@ -0,0 +1 @@ +889ac9c0c4782e654e10370790733666 \ No newline at end of file diff --git a/inherit_graph_35.png b/inherit_graph_35.png new file mode 100644 index 00000000..a259f8cb Binary files /dev/null and b/inherit_graph_35.png differ diff --git a/inherit_graph_36.map b/inherit_graph_36.map new file mode 100644 index 00000000..7baa471a --- /dev/null +++ b/inherit_graph_36.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_36.md5 b/inherit_graph_36.md5 new file mode 100644 index 00000000..23294624 --- /dev/null +++ b/inherit_graph_36.md5 @@ -0,0 +1 @@ +59f3c1872d1765b359113a59c59a2e64 \ No newline at end of file diff --git a/inherit_graph_36.png b/inherit_graph_36.png new file mode 100644 index 00000000..c9148861 Binary files /dev/null and b/inherit_graph_36.png differ diff --git a/inherit_graph_37.map b/inherit_graph_37.map new file mode 100644 index 00000000..7f1c2c91 --- /dev/null +++ b/inherit_graph_37.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_37.md5 b/inherit_graph_37.md5 new file mode 100644 index 00000000..b2ae2d84 --- /dev/null +++ b/inherit_graph_37.md5 @@ -0,0 +1 @@ +03ce98642c8f65f7115a35ff82788469 \ No newline at end of file diff --git a/inherit_graph_37.png b/inherit_graph_37.png new file mode 100644 index 00000000..6dea9680 Binary files /dev/null and b/inherit_graph_37.png differ diff --git a/inherit_graph_38.map b/inherit_graph_38.map new file mode 100644 index 00000000..62a91f9a --- /dev/null +++ b/inherit_graph_38.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_38.md5 b/inherit_graph_38.md5 new file mode 100644 index 00000000..275a8667 --- /dev/null +++ b/inherit_graph_38.md5 @@ -0,0 +1 @@ +39929e33a61b397655f0fe800dc91cca \ No newline at end of file diff --git a/inherit_graph_38.png b/inherit_graph_38.png new file mode 100644 index 00000000..06e2216d Binary files /dev/null and b/inherit_graph_38.png differ diff --git a/inherit_graph_39.map b/inherit_graph_39.map new file mode 100644 index 00000000..a025ede3 --- /dev/null +++ b/inherit_graph_39.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_39.md5 b/inherit_graph_39.md5 new file mode 100644 index 00000000..362b58ca --- /dev/null +++ b/inherit_graph_39.md5 @@ -0,0 +1 @@ +403975f9fff2ac4726a78e10644ece5b \ No newline at end of file diff --git a/inherit_graph_39.png b/inherit_graph_39.png new file mode 100644 index 00000000..0faa5b1b Binary files /dev/null and b/inherit_graph_39.png differ diff --git a/inherit_graph_4.map b/inherit_graph_4.map new file mode 100644 index 00000000..76be07e7 --- /dev/null +++ b/inherit_graph_4.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_4.md5 b/inherit_graph_4.md5 new file mode 100644 index 00000000..cd77ea8d --- /dev/null +++ b/inherit_graph_4.md5 @@ -0,0 +1 @@ +2807343d80cad7493eae7d564f8b3630 \ No newline at end of file diff --git a/inherit_graph_4.png b/inherit_graph_4.png new file mode 100644 index 00000000..0d8c5c7c Binary files /dev/null and b/inherit_graph_4.png differ diff --git a/inherit_graph_40.map b/inherit_graph_40.map new file mode 100644 index 00000000..69c86f8c --- /dev/null +++ b/inherit_graph_40.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_40.md5 b/inherit_graph_40.md5 new file mode 100644 index 00000000..f1730b85 --- /dev/null +++ b/inherit_graph_40.md5 @@ -0,0 +1 @@ +5432811fd61eeaaa0721afffa137daee \ No newline at end of file diff --git a/inherit_graph_40.png b/inherit_graph_40.png new file mode 100644 index 00000000..1556e32b Binary files /dev/null and b/inherit_graph_40.png differ diff --git a/inherit_graph_41.map b/inherit_graph_41.map new file mode 100644 index 00000000..8d83a2d6 --- /dev/null +++ b/inherit_graph_41.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_41.md5 b/inherit_graph_41.md5 new file mode 100644 index 00000000..84e0f824 --- /dev/null +++ b/inherit_graph_41.md5 @@ -0,0 +1 @@ +e96f98c092a2d7ec0e2d92d43d93d8c2 \ No newline at end of file diff --git a/inherit_graph_41.png b/inherit_graph_41.png new file mode 100644 index 00000000..0dd124b4 Binary files /dev/null and b/inherit_graph_41.png differ diff --git a/inherit_graph_42.map b/inherit_graph_42.map new file mode 100644 index 00000000..5d5242dd --- /dev/null +++ b/inherit_graph_42.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_42.md5 b/inherit_graph_42.md5 new file mode 100644 index 00000000..06a1b396 --- /dev/null +++ b/inherit_graph_42.md5 @@ -0,0 +1 @@ +5617995742b895162dfe812eeb77ef35 \ No newline at end of file diff --git a/inherit_graph_42.png b/inherit_graph_42.png new file mode 100644 index 00000000..57060f9a Binary files /dev/null and b/inherit_graph_42.png differ diff --git a/inherit_graph_43.map b/inherit_graph_43.map new file mode 100644 index 00000000..8eacf884 --- /dev/null +++ b/inherit_graph_43.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_43.md5 b/inherit_graph_43.md5 new file mode 100644 index 00000000..8c620f67 --- /dev/null +++ b/inherit_graph_43.md5 @@ -0,0 +1 @@ +4eaa7019a6967595a00a6e56beda1ece \ No newline at end of file diff --git a/inherit_graph_43.png b/inherit_graph_43.png new file mode 100644 index 00000000..1b780e5b Binary files /dev/null and b/inherit_graph_43.png differ diff --git a/inherit_graph_44.map b/inherit_graph_44.map new file mode 100644 index 00000000..653545cf --- /dev/null +++ b/inherit_graph_44.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_44.md5 b/inherit_graph_44.md5 new file mode 100644 index 00000000..428bdae0 --- /dev/null +++ b/inherit_graph_44.md5 @@ -0,0 +1 @@ +8bba6df488c21d9472556f439d29b22f \ No newline at end of file diff --git a/inherit_graph_44.png b/inherit_graph_44.png new file mode 100644 index 00000000..004d8e82 Binary files /dev/null and b/inherit_graph_44.png differ diff --git a/inherit_graph_45.map b/inherit_graph_45.map new file mode 100644 index 00000000..37674bbf --- /dev/null +++ b/inherit_graph_45.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_45.md5 b/inherit_graph_45.md5 new file mode 100644 index 00000000..dbb13725 --- /dev/null +++ b/inherit_graph_45.md5 @@ -0,0 +1 @@ +e7842aabc8c41d2106f846d37d401156 \ No newline at end of file diff --git a/inherit_graph_45.png b/inherit_graph_45.png new file mode 100644 index 00000000..a2c7f10d Binary files /dev/null and b/inherit_graph_45.png differ diff --git a/inherit_graph_46.map b/inherit_graph_46.map new file mode 100644 index 00000000..1c84814a --- /dev/null +++ b/inherit_graph_46.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_46.md5 b/inherit_graph_46.md5 new file mode 100644 index 00000000..dc8f4a18 --- /dev/null +++ b/inherit_graph_46.md5 @@ -0,0 +1 @@ +1105797aedf6a20223ec8c14d2054ce0 \ No newline at end of file diff --git a/inherit_graph_46.png b/inherit_graph_46.png new file mode 100644 index 00000000..69bb86a3 Binary files /dev/null and b/inherit_graph_46.png differ diff --git a/inherit_graph_47.map b/inherit_graph_47.map new file mode 100644 index 00000000..7c71865f --- /dev/null +++ b/inherit_graph_47.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_47.md5 b/inherit_graph_47.md5 new file mode 100644 index 00000000..055fbe4e --- /dev/null +++ b/inherit_graph_47.md5 @@ -0,0 +1 @@ +413db63486b61425e9c76063b772418d \ No newline at end of file diff --git a/inherit_graph_47.png b/inherit_graph_47.png new file mode 100644 index 00000000..e08ccdf8 Binary files /dev/null and b/inherit_graph_47.png differ diff --git a/inherit_graph_48.map b/inherit_graph_48.map new file mode 100644 index 00000000..7ea4dfbd --- /dev/null +++ b/inherit_graph_48.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_48.md5 b/inherit_graph_48.md5 new file mode 100644 index 00000000..703e7564 --- /dev/null +++ b/inherit_graph_48.md5 @@ -0,0 +1 @@ +b7aa8bc35cd8a15215fa7bbe3754801f \ No newline at end of file diff --git a/inherit_graph_48.png b/inherit_graph_48.png new file mode 100644 index 00000000..321e2a2f Binary files /dev/null and b/inherit_graph_48.png differ diff --git a/inherit_graph_49.map b/inherit_graph_49.map new file mode 100644 index 00000000..838a115d --- /dev/null +++ b/inherit_graph_49.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_49.md5 b/inherit_graph_49.md5 new file mode 100644 index 00000000..e73783c2 --- /dev/null +++ b/inherit_graph_49.md5 @@ -0,0 +1 @@ +420610f30a8c198ef368fe0a77e09dc0 \ No newline at end of file diff --git a/inherit_graph_49.png b/inherit_graph_49.png new file mode 100644 index 00000000..ff1aeed8 Binary files /dev/null and b/inherit_graph_49.png differ diff --git a/inherit_graph_5.map b/inherit_graph_5.map new file mode 100644 index 00000000..ae995c37 --- /dev/null +++ b/inherit_graph_5.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_5.md5 b/inherit_graph_5.md5 new file mode 100644 index 00000000..452cd808 --- /dev/null +++ b/inherit_graph_5.md5 @@ -0,0 +1 @@ +c19219901a925d0912375822cd8c2f88 \ No newline at end of file diff --git a/inherit_graph_5.png b/inherit_graph_5.png new file mode 100644 index 00000000..f93d3af9 Binary files /dev/null and b/inherit_graph_5.png differ diff --git a/inherit_graph_50.map b/inherit_graph_50.map new file mode 100644 index 00000000..280aeaa7 --- /dev/null +++ b/inherit_graph_50.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_50.md5 b/inherit_graph_50.md5 new file mode 100644 index 00000000..6aace65c --- /dev/null +++ b/inherit_graph_50.md5 @@ -0,0 +1 @@ +91a10fae25bb81e706d4bf317256b1db \ No newline at end of file diff --git a/inherit_graph_50.png b/inherit_graph_50.png new file mode 100644 index 00000000..72f4c676 Binary files /dev/null and b/inherit_graph_50.png differ diff --git a/inherit_graph_51.map b/inherit_graph_51.map new file mode 100644 index 00000000..c85322c1 --- /dev/null +++ b/inherit_graph_51.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_51.md5 b/inherit_graph_51.md5 new file mode 100644 index 00000000..a3121312 --- /dev/null +++ b/inherit_graph_51.md5 @@ -0,0 +1 @@ +d7dec8ea0c3809ebc1fa2b4a653d2817 \ No newline at end of file diff --git a/inherit_graph_51.png b/inherit_graph_51.png new file mode 100644 index 00000000..8f4559f5 Binary files /dev/null and b/inherit_graph_51.png differ diff --git a/inherit_graph_52.map b/inherit_graph_52.map new file mode 100644 index 00000000..9b9f2bb3 --- /dev/null +++ b/inherit_graph_52.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_52.md5 b/inherit_graph_52.md5 new file mode 100644 index 00000000..f6c1b4e3 --- /dev/null +++ b/inherit_graph_52.md5 @@ -0,0 +1 @@ +840761a9c1ca2de900fbc28b52d09f5c \ No newline at end of file diff --git a/inherit_graph_52.png b/inherit_graph_52.png new file mode 100644 index 00000000..98f97da2 Binary files /dev/null and b/inherit_graph_52.png differ diff --git a/inherit_graph_53.map b/inherit_graph_53.map new file mode 100644 index 00000000..e1f0359e --- /dev/null +++ b/inherit_graph_53.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_53.md5 b/inherit_graph_53.md5 new file mode 100644 index 00000000..2e383471 --- /dev/null +++ b/inherit_graph_53.md5 @@ -0,0 +1 @@ +b57d81213cfabfcb536d60b55ce1dc09 \ No newline at end of file diff --git a/inherit_graph_53.png b/inherit_graph_53.png new file mode 100644 index 00000000..12a172c7 Binary files /dev/null and b/inherit_graph_53.png differ diff --git a/inherit_graph_54.map b/inherit_graph_54.map new file mode 100644 index 00000000..9f5db9b9 --- /dev/null +++ b/inherit_graph_54.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_54.md5 b/inherit_graph_54.md5 new file mode 100644 index 00000000..9ba91750 --- /dev/null +++ b/inherit_graph_54.md5 @@ -0,0 +1 @@ +a05dc455b4d92dc0e07b801355d66942 \ No newline at end of file diff --git a/inherit_graph_54.png b/inherit_graph_54.png new file mode 100644 index 00000000..ba2db1aa Binary files /dev/null and b/inherit_graph_54.png differ diff --git a/inherit_graph_55.map b/inherit_graph_55.map new file mode 100644 index 00000000..748287e1 --- /dev/null +++ b/inherit_graph_55.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_55.md5 b/inherit_graph_55.md5 new file mode 100644 index 00000000..e1a22fc0 --- /dev/null +++ b/inherit_graph_55.md5 @@ -0,0 +1 @@ +2f5727f8cf90c01d1432009ca26eb31e \ No newline at end of file diff --git a/inherit_graph_55.png b/inherit_graph_55.png new file mode 100644 index 00000000..3213fcf6 Binary files /dev/null and b/inherit_graph_55.png differ diff --git a/inherit_graph_56.map b/inherit_graph_56.map new file mode 100644 index 00000000..8a6b667a --- /dev/null +++ b/inherit_graph_56.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_56.md5 b/inherit_graph_56.md5 new file mode 100644 index 00000000..fa041342 --- /dev/null +++ b/inherit_graph_56.md5 @@ -0,0 +1 @@ +617296c31571838867e276ad83076967 \ No newline at end of file diff --git a/inherit_graph_56.png b/inherit_graph_56.png new file mode 100644 index 00000000..18bc024f Binary files /dev/null and b/inherit_graph_56.png differ diff --git a/inherit_graph_57.map b/inherit_graph_57.map new file mode 100644 index 00000000..7f4c8299 --- /dev/null +++ b/inherit_graph_57.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_57.md5 b/inherit_graph_57.md5 new file mode 100644 index 00000000..14952d47 --- /dev/null +++ b/inherit_graph_57.md5 @@ -0,0 +1 @@ +327f35617f82a8bf967bb2a3cee2de6b \ No newline at end of file diff --git a/inherit_graph_57.png b/inherit_graph_57.png new file mode 100644 index 00000000..710d3f49 Binary files /dev/null and b/inherit_graph_57.png differ diff --git a/inherit_graph_58.map b/inherit_graph_58.map new file mode 100644 index 00000000..2b895500 --- /dev/null +++ b/inherit_graph_58.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_58.md5 b/inherit_graph_58.md5 new file mode 100644 index 00000000..b15d12f0 --- /dev/null +++ b/inherit_graph_58.md5 @@ -0,0 +1 @@ +87de09fce2bf5a33e043ff5aa78fe481 \ No newline at end of file diff --git a/inherit_graph_58.png b/inherit_graph_58.png new file mode 100644 index 00000000..3b572206 Binary files /dev/null and b/inherit_graph_58.png differ diff --git a/inherit_graph_59.map b/inherit_graph_59.map new file mode 100644 index 00000000..0ab11a78 --- /dev/null +++ b/inherit_graph_59.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_59.md5 b/inherit_graph_59.md5 new file mode 100644 index 00000000..a1a63fcf --- /dev/null +++ b/inherit_graph_59.md5 @@ -0,0 +1 @@ +549bd3049e640920c7aa64fcfdc94576 \ No newline at end of file diff --git a/inherit_graph_59.png b/inherit_graph_59.png new file mode 100644 index 00000000..31431f21 Binary files /dev/null and b/inherit_graph_59.png differ diff --git a/inherit_graph_6.map b/inherit_graph_6.map new file mode 100644 index 00000000..78fb6cdf --- /dev/null +++ b/inherit_graph_6.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_6.md5 b/inherit_graph_6.md5 new file mode 100644 index 00000000..2ec90b44 --- /dev/null +++ b/inherit_graph_6.md5 @@ -0,0 +1 @@ +f4219a13349e70f05b1c4f8257847d39 \ No newline at end of file diff --git a/inherit_graph_6.png b/inherit_graph_6.png new file mode 100644 index 00000000..5d604af6 Binary files /dev/null and b/inherit_graph_6.png differ diff --git a/inherit_graph_60.map b/inherit_graph_60.map new file mode 100644 index 00000000..8f5af22a --- /dev/null +++ b/inherit_graph_60.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_60.md5 b/inherit_graph_60.md5 new file mode 100644 index 00000000..381c461f --- /dev/null +++ b/inherit_graph_60.md5 @@ -0,0 +1 @@ +d6be8c06131ef958fa1a7b1eb750758c \ No newline at end of file diff --git a/inherit_graph_60.png b/inherit_graph_60.png new file mode 100644 index 00000000..c32505e9 Binary files /dev/null and b/inherit_graph_60.png differ diff --git a/inherit_graph_61.map b/inherit_graph_61.map new file mode 100644 index 00000000..4de3bf41 --- /dev/null +++ b/inherit_graph_61.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_61.md5 b/inherit_graph_61.md5 new file mode 100644 index 00000000..566447cb --- /dev/null +++ b/inherit_graph_61.md5 @@ -0,0 +1 @@ +a965d3f71560c996494bc4481ae72da5 \ No newline at end of file diff --git a/inherit_graph_61.png b/inherit_graph_61.png new file mode 100644 index 00000000..26609484 Binary files /dev/null and b/inherit_graph_61.png differ diff --git a/inherit_graph_62.map b/inherit_graph_62.map new file mode 100644 index 00000000..300fc625 --- /dev/null +++ b/inherit_graph_62.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_62.md5 b/inherit_graph_62.md5 new file mode 100644 index 00000000..1a3ce1cc --- /dev/null +++ b/inherit_graph_62.md5 @@ -0,0 +1 @@ +94f27ed0bfdd9eefe88e3a92761a0dfa \ No newline at end of file diff --git a/inherit_graph_62.png b/inherit_graph_62.png new file mode 100644 index 00000000..3bfbf34b Binary files /dev/null and b/inherit_graph_62.png differ diff --git a/inherit_graph_63.map b/inherit_graph_63.map new file mode 100644 index 00000000..3d04a1a9 --- /dev/null +++ b/inherit_graph_63.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_63.md5 b/inherit_graph_63.md5 new file mode 100644 index 00000000..30d2e4bb --- /dev/null +++ b/inherit_graph_63.md5 @@ -0,0 +1 @@ +3f05696f770922918071ae94115fe53e \ No newline at end of file diff --git a/inherit_graph_63.png b/inherit_graph_63.png new file mode 100644 index 00000000..e2d2e0d2 Binary files /dev/null and b/inherit_graph_63.png differ diff --git a/inherit_graph_64.map b/inherit_graph_64.map new file mode 100644 index 00000000..1885b531 --- /dev/null +++ b/inherit_graph_64.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_64.md5 b/inherit_graph_64.md5 new file mode 100644 index 00000000..8e2e2b95 --- /dev/null +++ b/inherit_graph_64.md5 @@ -0,0 +1 @@ +afa2744f0dca2c84fa39cf862a185dac \ No newline at end of file diff --git a/inherit_graph_64.png b/inherit_graph_64.png new file mode 100644 index 00000000..d8aa0db2 Binary files /dev/null and b/inherit_graph_64.png differ diff --git a/inherit_graph_65.map b/inherit_graph_65.map new file mode 100644 index 00000000..569f2ea5 --- /dev/null +++ b/inherit_graph_65.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_65.md5 b/inherit_graph_65.md5 new file mode 100644 index 00000000..ee1ce742 --- /dev/null +++ b/inherit_graph_65.md5 @@ -0,0 +1 @@ +c2648869ab89a83c4c6e13eb11915b6a \ No newline at end of file diff --git a/inherit_graph_65.png b/inherit_graph_65.png new file mode 100644 index 00000000..e6de6547 Binary files /dev/null and b/inherit_graph_65.png differ diff --git a/inherit_graph_66.map b/inherit_graph_66.map new file mode 100644 index 00000000..5a9afe58 --- /dev/null +++ b/inherit_graph_66.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_66.md5 b/inherit_graph_66.md5 new file mode 100644 index 00000000..0d49fe73 --- /dev/null +++ b/inherit_graph_66.md5 @@ -0,0 +1 @@ +ec322e9d7679440100f96f7d5330ad5f \ No newline at end of file diff --git a/inherit_graph_66.png b/inherit_graph_66.png new file mode 100644 index 00000000..6eea481b Binary files /dev/null and b/inherit_graph_66.png differ diff --git a/inherit_graph_7.map b/inherit_graph_7.map new file mode 100644 index 00000000..853486ae --- /dev/null +++ b/inherit_graph_7.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_7.md5 b/inherit_graph_7.md5 new file mode 100644 index 00000000..50be1ac7 --- /dev/null +++ b/inherit_graph_7.md5 @@ -0,0 +1 @@ +5a180c027b537c07d76206131cab1ad1 \ No newline at end of file diff --git a/inherit_graph_7.png b/inherit_graph_7.png new file mode 100644 index 00000000..7ad87167 Binary files /dev/null and b/inherit_graph_7.png differ diff --git a/inherit_graph_8.map b/inherit_graph_8.map new file mode 100644 index 00000000..1b491472 --- /dev/null +++ b/inherit_graph_8.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_8.md5 b/inherit_graph_8.md5 new file mode 100644 index 00000000..a4cab890 --- /dev/null +++ b/inherit_graph_8.md5 @@ -0,0 +1 @@ +1a01d2fbb833cc6d373f78d74729a49a \ No newline at end of file diff --git a/inherit_graph_8.png b/inherit_graph_8.png new file mode 100644 index 00000000..1f982fcb Binary files /dev/null and b/inherit_graph_8.png differ diff --git a/inherit_graph_9.map b/inherit_graph_9.map new file mode 100644 index 00000000..5c0341fc --- /dev/null +++ b/inherit_graph_9.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_9.md5 b/inherit_graph_9.md5 new file mode 100644 index 00000000..c3e2396e --- /dev/null +++ b/inherit_graph_9.md5 @@ -0,0 +1 @@ +fc444da1659898ca99b33fc776d0a5d3 \ No newline at end of file diff --git a/inherit_graph_9.png b/inherit_graph_9.png new file mode 100644 index 00000000..b7439e01 Binary files /dev/null and b/inherit_graph_9.png differ diff --git a/inherits.html b/inherits.html new file mode 100644 index 00000000..63bcad19 --- /dev/null +++ b/inherits.html @@ -0,0 +1,480 @@ + + + + + + + +mrs_lib: Class Hierarchy + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + + + +
+ + + +
+ + + + +
+ + + +
+ + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + +
+
+
+ + + + diff --git a/jlkf_8h_source.html b/jlkf_8h_source.html new file mode 100644 index 00000000..8384c485 --- /dev/null +++ b/jlkf_8h_source.html @@ -0,0 +1,389 @@ + + + + + + + +mrs_lib: include/mrs_lib/jlkf.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
jlkf.h
+
+
+
1 // clang: MatousFormat
+
6 #ifndef JLKF_H
+
7 #define JLKF_H
+
8 
+ +
10 /* #include <mrs_lib/lkf.h> */
+
11 #include <iostream>
+
12 
+
13 #include <vector>
+
14 
+
15 // for debug
+
16 #include <ros/ros.h>
+
17 #include <mrs_msgs/Float64ArrayStamped.h>
+
18 #include <mrs_msgs/Float64Stamped.h>
+
19 #include <mrs_msgs/BoolStamped.h>
+
20 
+
21 namespace mrs_lib
+
22 {
+
23 
+
24  /* class JLKF */ /*//{*/
+
25  template <int n_states, int n_inputs, int n_measurements, int n_biases>
+
26  class JLKF : public KalmanFilterAloamGarm<n_states, n_inputs, n_measurements>
+
27  {
+
28  public:
+
29  /* LKF definitions (typedefs, constants etc) //{ */
+
30  static const int n = n_states;
+
31  static const int m = n_inputs;
+
32  static const int p = n_measurements;
+ +
34 
+
35  using x_t = typename Base_class::x_t;
+
36  using u_t = typename Base_class::u_t;
+
37  using z_t = typename Base_class::z_t;
+
38  using P_t = typename Base_class::P_t;
+
39  using R_t = typename Base_class::R_t;
+
40  using statecov_t = typename Base_class::statecov_t;
+
41  /* using A_t = typename Base_class::A_t; // measurement mapping p*n */
+
42  /* using B_t = typename Base_class::B_t; // process covariance n*n */
+
43  /* using H_t = typename Base_class::H_t; // measurement mapping p*n */
+
44  using Q_t = typename Base_class::Q_t; // process covariance n*n
+
45  /* using K_t = typename Base_class::K_t; // Kalman gain */
+
46 
+
47  typedef Eigen::Matrix<double, n, n> A_t;
+
48  typedef Eigen::Matrix<double, n, m> B_t;
+
49  typedef Eigen::Matrix<double, p, n> H_t;
+
50  typedef Eigen::Matrix<double, n, p> K_t;
+
52  typedef Eigen::Matrix<double, p, p> C_t;
+
53  typedef Eigen::Matrix<double, n, n> D_t;
+
55  using generateA_t = std::function<A_t(double)>;
+
56  using generateB_t = std::function<B_t(double)>;
+
57  //}
+
58 
+
65  struct inverse_exception : public std::exception
+
66  {
+
72  const char* what() const throw()
+
73  {
+
74  return "LKF: could not compute matrix inversion!!! Fix your covariances (the measurement's is probably too low...)";
+
75  }
+
76  };
+
77  //}
+
78 
+
79  public:
+
87  JLKF(const generateA_t& generateA, const generateB_t& generateB, const H_t& H, const ros::NodeHandle& nh, const double& nis_thr,
+
88  const double& nis_avg_thr)
+
89  : m_generateA(generateA),
+
90  m_generateB(generateB),
+
91  H(H),
+
92  m_nh(nh),
+
93  m_nis_thr(nis_thr),
+
94  m_nis_avg_thr(nis_avg_thr)
+
95  {
+
96  debug_nis_pub = m_nh.advertise<mrs_msgs::Float64ArrayStamped>("debug_nis", 1);
+
97  };
+
98 
+
99  /* predict() method //{ */
+
117  virtual statecov_t predict(const statecov_t& sc, const u_t& u, const Q_t& Q, double dt) const override
+
118  {
+
119  /* std::cout << "prediction, sc.x: " << sc.x << std::endl; */
+
120  statecov_t ret;
+
121  A_t A = m_generateA(dt);
+
122  B_t B = m_generateB(dt);
+
123  ret.x = state_predict(A, sc.x, B, u);
+
124  ret.P = covariance_predict(A, sc.P, Q, dt);
+
125  ret.nis_buffer = sc.nis_buffer;
+
126  return ret;
+
127  };
+
128  //}
+
129 
+
130  /* correct() method //{ */
+
143  virtual statecov_t correct(const statecov_t& sc, const z_t& z, const R_t& R) const override
+
144  {
+
145  /* return correct_optimized(sc, z, R, H); */
+
146  return correction_impl(sc, z, R, H);
+
147  };
+
148  //}
+
149 
+
150  protected:
+
151  /* invert_W() method //{ */
+
152  static R_t invert_W(R_t W)
+
153  {
+
154  Eigen::ColPivHouseholderQR<R_t> qr(W);
+
155  if (!qr.isInvertible())
+
156  {
+
157  // add some stuff to the tmp matrix diagonal to make it invertible
+
158  R_t ident = R_t::Identity(W.rows(), W.cols());
+
159  W += 1e-9 * ident;
+
160  qr.compute(W);
+
161  if (!qr.isInvertible())
+
162  {
+
163  // never managed to make this happen except for explicitly putting NaNs in the input
+
164  throw inverse_exception();
+
165  }
+
166  }
+
167  const R_t W_inv = qr.inverse();
+
168  return W_inv;
+
169  }
+
170  //}
+
171 
+
172 
+
173  /* computeKalmanGain() method //{ */
+
174  virtual K_t computeKalmanGain(const statecov_t& sc, [[maybe_unused]] const z_t& z, const R_t& R, const H_t& H, double& nis, H_t& H_out,
+
175  const double& nis_thr, const double& nis_avg_thr) const
+
176  {
+
177  H_out = H;
+
178 
+
179  R_t W = H * sc.P * H.transpose() + R;
+
180  R_t W_inv = invert_W(W);
+
181  K_t K = sc.P * H.transpose() * W_inv;
+
182  z_t y = z - (H * sc.x);
+
183 
+
184  /* const double nis = (y.transpose() * W_inv * y)(0, 0); */
+
185  nis = (y.transpose() * W_inv * y)(0, 0);
+
186  double nis_avg = 0;
+
187  int count = 0;
+
188  bool nis_over_thr = false;
+
189 
+
190  double nis_thr_tmp = nis_thr;
+
191 
+
192  if (H(0, 0) > 0 && H(0, 3) != 0)
+
193  /* if (H(0, 0) > 0) */
+
194  {
+
195  mrs_msgs::Float64ArrayStamped msg;
+
196  msg.header.stamp = sc.stamp;
+
197 
+
198  msg.values.push_back(nis);
+
199 
+
200  if (sc.nis_buffer != nullptr)
+
201  {
+
202 
+
203  sc.nis_buffer->push_back(nis);
+
204  for (auto it = sc.nis_buffer->begin(); it != sc.nis_buffer->end(); it++)
+
205  {
+
206  nis_avg += *it;
+
207  count++;
+
208  if (*it > nis_thr_tmp)
+
209  {
+
210  nis_thr_tmp /= 10;
+
211  }
+
212  }
+
213  if (count > 0)
+
214  {
+
215  nis_avg /= count;
+
216  }
+
217  msg.values.push_back(nis_avg);
+
218  msg.values.push_back(nis_thr_tmp);
+
219  }
+
220  if (nis > nis_thr_tmp)
+
221  {
+
222  // old jump correction
+
223  K = K.Zero();
+
224  A_t mask = mask.Zero();
+
225  for (int i = n_states - n_biases; i < n_states; i++)
+
226  {
+
227  mask(i, i) = 1;
+
228  }
+
229  const H_t H_bias_only = H * mask;
+
230  K = H_bias_only.transpose() * invert_W(H_bias_only * H_bias_only.transpose());
+
231  H_out = H_bias_only;
+
232  }
+
233 
+
234  debug_nis_pub.publish(msg);
+
235  }
+
236 
+
237  K_t test = H.transpose() * invert_W(H * H.transpose());
+
238 
+
239  return K;
+
240  }
+
241  //}
+
242 
+
243  /* correction_impl() method //{ */
+
244  template <int check = n>
+
245  typename std::enable_if<check >= 0, statecov_t>::type correction_impl(const statecov_t& sc, const z_t& z, const R_t& R, const H_t& H) const
+
246  {
+
247  // the correction phase
+
248  statecov_t ret;
+
249  double nis = -1;
+
250  H_t H_out;
+
251  const K_t K = computeKalmanGain(sc, z, R, H, nis, H_out, m_nis_thr, m_nis_avg_thr);
+
252  ret.x = sc.x + K * (z - (H * sc.x));
+
253  ret.P = (P_t::Identity() - (K * H_out)) * sc.P;
+
254  ret.nis_buffer = sc.nis_buffer;
+
255  return ret;
+
256  }
+
257 
+
258  template <int check = n>
+
259  typename std::enable_if < check<0, statecov_t>::type correction_impl(const statecov_t& sc, const z_t& z, const R_t& R, const H_t& H) const
+
260  {
+
261  // the correction phase
+
262  statecov_t ret;
+
263  double nis = -1;
+
264  H_t H_out;
+
265  const K_t K = computeKalmanGain(sc, z, R, H, nis, H_out, m_nis_thr, m_nis_avg_thr);
+
266  ret.x = sc.x + K * (z - (H * sc.x));
+
267  ret.P = (P_t::Identity(sc.P.rows(), sc.P.cols()) - (K * H_out)) * sc.P;
+
268  ret.nis_buffer = sc.nis_buffer;
+
269  return ret;
+
270  }
+
271  //}
+
272 
+
273  private:
+
274  ros::NodeHandle m_nh;
+
275  ros::Publisher debug_nis_pub;
+
276  std::vector<double> m_nis_window;
+
277  double m_nis_thr;
+
278  double m_nis_avg_thr;
+
279 
+
280 
+
281  private:
+
282  generateA_t m_generateA;
+
283  generateB_t m_generateB;
+
284 
+
285  public:
+
286  A_t A;
+
287  B_t B;
+
288  H_t H;
+
290  protected:
+
291  /* covariance_predict() method //{ */
+
292  static P_t covariance_predict(const A_t& A, const P_t& P, const Q_t& Q, const double dt)
+
293  {
+
294  return A * P * A.transpose() + dt*Q;
+
295  }
+
296  //}
+
297 
+
298  /* state_predict() method //{ */
+
299  template <int check = n_inputs>
+
300  static inline typename std::enable_if<check == 0, x_t>::type state_predict(const A_t& A, const x_t& x, [[maybe_unused]] const B_t& B,
+
301  [[maybe_unused]] const u_t& u)
+
302  {
+
303  return A * x;
+
304  }
+
305 
+
306  template <int check = n_inputs>
+
307  static inline typename std::enable_if<check != 0, x_t>::type state_predict(const A_t& A, const x_t& x, const B_t& B, const u_t& u)
+
308  {
+
309  return A * x + B * u;
+
310  }
+
311  //}
+
312 
+
313  }; // namespace mrs_lib
+
314  /*//}*/
+
315 
+
316 
+
317 } // namespace mrs_lib
+
318 
+
319 #endif // JLKF_H
+
+
+
This exception is thrown when taking the inverse of a matrix fails.
Definition: jlkf.h:65
+
Eigen::Matrix< double, n, p > K_t
Kalman gain matrix type .
Definition: jlkf.h:50
+
Eigen::Matrix< double, p, p > R_t
Measurement noise covariance matrix type .
Definition: kalman_filter_aloamgarm.h:40
+
Eigen::Matrix< double, n, n > A_t
System transition matrix type .
Definition: jlkf.h:47
+
Eigen::Matrix< double, n, n > Q_t
Process noise covariance matrix type .
Definition: kalman_filter_aloamgarm.h:41
+
virtual statecov_t predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const override
Applies the prediction (time) step of the Kalman filter.
Definition: jlkf.h:117
+
Helper struct for passing around the state and its covariance in one variable.
Definition: kalman_filter_aloamgarm.h:48
+
This abstract class defines common interfaces and types for a generic Kalman filter.
Definition: kalman_filter_aloamgarm.h:27
+
Eigen::Matrix< double, m, 1 > u_t
Input vector type .
Definition: kalman_filter_aloamgarm.h:36
+
Eigen::Matrix< double, n, m > B_t
Input to state mapping matrix type .
Definition: jlkf.h:48
+
Definition: jlkf.h:26
+
JLKF(const generateA_t &generateA, const generateB_t &generateB, const H_t &H, const ros::NodeHandle &nh, const double &nis_thr, const double &nis_avg_thr)
The main constructor.
Definition: jlkf.h:87
+
Eigen::Matrix< double, p, n > H_t
State to measurement mapping matrix type .
Definition: jlkf.h:49
+
const char * what() const
Returns the error message, describing what caused the exception.
Definition: jlkf.h:72
+
virtual statecov_t correct(const statecov_t &sc, const z_t &z, const R_t &R) const override
Applies the correction (update, measurement, data) step of the Kalman filter.
Definition: jlkf.h:143
+
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
Eigen::Matrix< double, n, n > D_t
D .
Definition: jlkf.h:53
+
Defines KalmanFilter - an abstract class, defining common interfaces and types for a generic Kalman f...
+
Eigen::Matrix< double, p, 1 > z_t
Measurement vector type .
Definition: kalman_filter_aloamgarm.h:37
+
Eigen::Matrix< double, p, p > C_t
correntropy gain
Definition: jlkf.h:52
+
Eigen::Matrix< double, n, n > P_t
State uncertainty covariance matrix type .
Definition: kalman_filter_aloamgarm.h:39
+
Eigen::Matrix< double, n, 1 > x_t
State vector type .
Definition: kalman_filter_aloamgarm.h:35
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 00000000..103c32d7 --- /dev/null +++ b/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/kalman__filter_8h.html b/kalman__filter_8h.html new file mode 100644 index 00000000..6ce960d4 --- /dev/null +++ b/kalman__filter_8h.html @@ -0,0 +1,162 @@ + + + + + + + +mrs_lib: include/mrs_lib/kalman_filter.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
kalman_filter.h File Reference
+
+
+ +

Defines KalmanFilter - an abstract class, defining common interfaces and types for a generic Kalman filter. +More...

+
#include <Eigen/Dense>
+#include <ros/ros.h>
+
+ + Include dependency graph for kalman_filter.h:
+
+
+ +
+ + This graph shows which files directly or indirectly include this file:
+
+
+ +
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

class  mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >
 This abstract class defines common interfaces and types for a generic Kalman filter. More...
 
struct  mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >::statecov_t
 Helper struct for passing around the state and its covariance in one variable. More...
 
+ + + + +

+Namespaces

 mrs_lib
 All mrs_lib functions, classes, variables and definitions are contained in this namespace.
 
+

Detailed Description

+

Defines KalmanFilter - an abstract class, defining common interfaces and types for a generic Kalman filter.

+
Author
Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
+
+
+ + + + diff --git a/kalman__filter_8h__dep__incl.map b/kalman__filter_8h__dep__incl.map new file mode 100644 index 00000000..7bd5bf95 --- /dev/null +++ b/kalman__filter_8h__dep__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/kalman__filter_8h__dep__incl.md5 b/kalman__filter_8h__dep__incl.md5 new file mode 100644 index 00000000..a75e3f96 --- /dev/null +++ b/kalman__filter_8h__dep__incl.md5 @@ -0,0 +1 @@ +4d689e60458d113b9ccdf3a42d542ccd \ No newline at end of file diff --git a/kalman__filter_8h__dep__incl.png b/kalman__filter_8h__dep__incl.png new file mode 100644 index 00000000..57e77b3c Binary files /dev/null and b/kalman__filter_8h__dep__incl.png differ diff --git a/kalman__filter_8h__incl.map b/kalman__filter_8h__incl.map new file mode 100644 index 00000000..11dcbb41 --- /dev/null +++ b/kalman__filter_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/kalman__filter_8h__incl.md5 b/kalman__filter_8h__incl.md5 new file mode 100644 index 00000000..b65910a3 --- /dev/null +++ b/kalman__filter_8h__incl.md5 @@ -0,0 +1 @@ +d75ccff5dab323bae41df3bdf91521c3 \ No newline at end of file diff --git a/kalman__filter_8h__incl.png b/kalman__filter_8h__incl.png new file mode 100644 index 00000000..ede4a26c Binary files /dev/null and b/kalman__filter_8h__incl.png differ diff --git a/kalman__filter_8h_source.html b/kalman__filter_8h_source.html new file mode 100644 index 00000000..8775c91d --- /dev/null +++ b/kalman__filter_8h_source.html @@ -0,0 +1,164 @@ + + + + + + + +mrs_lib: include/mrs_lib/kalman_filter.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
kalman_filter.h
+
+
+Go to the documentation of this file.
1 // clang: MatousFormat
+
7 #ifndef SYSTEMMODEL_H
+
8 #define SYSTEMMODEL_H
+
9 
+
10 #include <Eigen/Dense>
+
11 
+
12 #include <ros/ros.h>
+
13 
+
14 namespace mrs_lib
+
15 {
+
16  /* KalmanFilter virtual class //{ */
+
25  template <int n_states, int n_inputs, int n_measurements>
+ +
27  {
+
28  public:
+
29  /* states, inputs etc. definitions (typedefs, constants etc) //{ */
+
30  static const int n = n_states;
+
31  static const int m = n_inputs;
+
32  static const int p = n_measurements;
+
34  typedef Eigen::Matrix<double, n, 1> x_t;
+
35  typedef Eigen::Matrix<double, m, 1> u_t;
+
36  typedef Eigen::Matrix<double, p, 1> z_t;
+
38  typedef Eigen::Matrix<double, n, n> P_t;
+
39  typedef Eigen::Matrix<double, p, p> R_t;
+
40  typedef Eigen::Matrix<double, n, n> Q_t;
+
41  //}
+
42 
+
43  /* statecov_t struct //{ */
+
47  struct statecov_t
+
48  {
+
49  x_t x;
+
50  P_t P;
+
51  ros::Time stamp = ros::Time(0);
+
52  };
+
53  //}
+
54 
+
55  public:
+
68  virtual statecov_t correct(const statecov_t& sc, const z_t& z, const R_t& R) const = 0;
+
69 
+
84  virtual statecov_t predict(const statecov_t& sc, const u_t& u, const Q_t& Q, double dt) const = 0;
+
85  };
+
86  //}
+
87 }
+
88 
+
89 #endif // SYSTEMMODEL_H
+
+
+
virtual statecov_t predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0
Applies the prediction (time) step of the Kalman filter.
+
Eigen::Matrix< double, p, p > R_t
Measurement noise covariance matrix type .
Definition: kalman_filter.h:39
+
static const int m
Length of the input vector of the system.
Definition: kalman_filter.h:31
+
Eigen::Matrix< double, n, n > P_t
State uncertainty covariance matrix type .
Definition: kalman_filter.h:38
+
virtual statecov_t correct(const statecov_t &sc, const z_t &z, const R_t &R) const =0
Applies the correction (update, measurement, data) step of the Kalman filter.
+
Eigen::Matrix< double, m, 1 > u_t
Input vector type .
Definition: kalman_filter.h:35
+
static const int p
Length of the measurement vector of the system.
Definition: kalman_filter.h:32
+
P_t P
State covariance matrix.
Definition: kalman_filter.h:50
+
Eigen::Matrix< double, n, 1 > x_t
State vector type .
Definition: kalman_filter.h:34
+
x_t x
State vector.
Definition: kalman_filter.h:49
+
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
ros::Time stamp
ROS time stamp.
Definition: kalman_filter.h:51
+
Eigen::Matrix< double, n, n > Q_t
Process noise covariance matrix type .
Definition: kalman_filter.h:40
+
Eigen::Matrix< double, p, 1 > z_t
Measurement vector type .
Definition: kalman_filter.h:36
+
Helper struct for passing around the state and its covariance in one variable.
Definition: kalman_filter.h:47
+
static const int n
Length of the state vector of the system.
Definition: kalman_filter.h:30
+
This abstract class defines common interfaces and types for a generic Kalman filter.
Definition: kalman_filter.h:26
+ + + + diff --git a/kalman__filter__aloamgarm_8h.html b/kalman__filter__aloamgarm_8h.html new file mode 100644 index 00000000..90f64b45 --- /dev/null +++ b/kalman__filter__aloamgarm_8h.html @@ -0,0 +1,156 @@ + + + + + + + +mrs_lib: include/mrs_lib/kalman_filter_aloamgarm.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
kalman_filter_aloamgarm.h File Reference
+
+
+ +

Defines KalmanFilter - an abstract class, defining common interfaces and types for a generic Kalman filter. +More...

+
#include <Eigen/Dense>
+#include <boost/circular_buffer.hpp>
+#include <ros/ros.h>
+
+ + Include dependency graph for kalman_filter_aloamgarm.h:
+
+
+ +
+ + This graph shows which files directly or indirectly include this file:
+
+
+ +
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

class  mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >
 This abstract class defines common interfaces and types for a generic Kalman filter. More...
 
struct  mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >::statecov_t
 Helper struct for passing around the state and its covariance in one variable. More...
 
+ + + + +

+Namespaces

 mrs_lib
 All mrs_lib functions, classes, variables and definitions are contained in this namespace.
 
+

Detailed Description

+

Defines KalmanFilter - an abstract class, defining common interfaces and types for a generic Kalman filter.

+
Author
Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
+
+
+ + + + diff --git a/kalman__filter__aloamgarm_8h__dep__incl.map b/kalman__filter__aloamgarm_8h__dep__incl.map new file mode 100644 index 00000000..7f1e9f3f --- /dev/null +++ b/kalman__filter__aloamgarm_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/kalman__filter__aloamgarm_8h__dep__incl.md5 b/kalman__filter__aloamgarm_8h__dep__incl.md5 new file mode 100644 index 00000000..82c7b716 --- /dev/null +++ b/kalman__filter__aloamgarm_8h__dep__incl.md5 @@ -0,0 +1 @@ +668c143539eddd322f09ce7856956983 \ No newline at end of file diff --git a/kalman__filter__aloamgarm_8h__dep__incl.png b/kalman__filter__aloamgarm_8h__dep__incl.png new file mode 100644 index 00000000..feb75575 Binary files /dev/null and b/kalman__filter__aloamgarm_8h__dep__incl.png differ diff --git a/kalman__filter__aloamgarm_8h__incl.map b/kalman__filter__aloamgarm_8h__incl.map new file mode 100644 index 00000000..3ebdb3ac --- /dev/null +++ b/kalman__filter__aloamgarm_8h__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/kalman__filter__aloamgarm_8h__incl.md5 b/kalman__filter__aloamgarm_8h__incl.md5 new file mode 100644 index 00000000..f2f3ef2d --- /dev/null +++ b/kalman__filter__aloamgarm_8h__incl.md5 @@ -0,0 +1 @@ +d07c1eb7348e39860c44c3743b64db8e \ No newline at end of file diff --git a/kalman__filter__aloamgarm_8h__incl.png b/kalman__filter__aloamgarm_8h__incl.png new file mode 100644 index 00000000..cae170ee Binary files /dev/null and b/kalman__filter__aloamgarm_8h__incl.png differ diff --git a/kalman__filter__aloamgarm_8h_source.html b/kalman__filter__aloamgarm_8h_source.html new file mode 100644 index 00000000..9a3932b9 --- /dev/null +++ b/kalman__filter__aloamgarm_8h_source.html @@ -0,0 +1,182 @@ + + + + + + + +mrs_lib: include/mrs_lib/kalman_filter_aloamgarm.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
kalman_filter_aloamgarm.h
+
+
+Go to the documentation of this file.
1 // clang: MatousFormat
+
7 #ifndef SYSTEMMODELALOAMGARM_H
+
8 #define SYSTEMMODELALOAMGARM_H
+
9 
+
10 #include <Eigen/Dense>
+
11 
+
12 #include <boost/circular_buffer.hpp>
+
13 #include <ros/ros.h>
+
14 
+
15 namespace mrs_lib
+
16 {
+
17  /* KalmanFilter virtual class //{ */
+
26  template <int n_states, int n_inputs, int n_measurements>
+ +
28  {
+
29  public:
+
30  /* states, inputs etc. definitions (typedefs, constants etc) //{ */
+
31  static const int n = n_states;
+
32  static const int m = n_inputs;
+
33  static const int p = n_measurements;
+
35  typedef Eigen::Matrix<double, n, 1> x_t;
+
36  typedef Eigen::Matrix<double, m, 1> u_t;
+
37  typedef Eigen::Matrix<double, p, 1> z_t;
+
39  typedef Eigen::Matrix<double, n, n> P_t;
+
40  typedef Eigen::Matrix<double, p, p> R_t;
+
41  typedef Eigen::Matrix<double, n, n> Q_t;
+
42  //}
+
43 
+
44  /* statecov_t struct //{ */
+
48  struct statecov_t
+
49  {
+
50  x_t x;
+
51  P_t P;
+
52  std::shared_ptr<boost::circular_buffer<double>> nis_buffer = nullptr;
+
53  ros::Time stamp = ros::Time(0);
+
54  bool measurement_jumped = false;
+
55 
+
56  statecov_t& operator=(statecov_t other)
+
57  {
+
58  if (this != &other) // not a self-assignment
+
59  {
+
60  x = other.x;
+
61  P = other.P;
+
62  stamp = other.stamp;
+
63  if (other.nis_buffer != nullptr){
+
64  nis_buffer = std::make_shared<boost::circular_buffer<double>>(*other.nis_buffer);
+
65  }
+
66  measurement_jumped = other.measurement_jumped;
+
67  }
+
68  return *this;
+
69  }
+
70 
+
71  };
+
72  //}
+
73 
+
74  public:
+
87  virtual statecov_t correct(const statecov_t& sc, const z_t& z, const R_t& R) const = 0;
+
88 
+
103  virtual statecov_t predict(const statecov_t& sc, const u_t& u, const Q_t& Q, double dt) const = 0;
+
104  };
+
105  //}
+
106 }
+
107 
+
108 #endif // SYSTEMMODELALOAMGARM_H
+
+
+
static const int n
Length of the state vector of the system.
Definition: kalman_filter_aloamgarm.h:31
+
static const int p
Length of the measurement vector of the system.
Definition: kalman_filter_aloamgarm.h:33
+
x_t x
State vector.
Definition: kalman_filter_aloamgarm.h:50
+
virtual statecov_t predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const =0
Applies the prediction (time) step of the Kalman filter.
+
Eigen::Matrix< double, p, p > R_t
Measurement noise covariance matrix type .
Definition: kalman_filter_aloamgarm.h:40
+
Eigen::Matrix< double, n, n > Q_t
Process noise covariance matrix type .
Definition: kalman_filter_aloamgarm.h:41
+
Helper struct for passing around the state and its covariance in one variable.
Definition: kalman_filter_aloamgarm.h:48
+
This abstract class defines common interfaces and types for a generic Kalman filter.
Definition: kalman_filter_aloamgarm.h:27
+
Eigen::Matrix< double, m, 1 > u_t
Input vector type .
Definition: kalman_filter_aloamgarm.h:36
+
virtual statecov_t correct(const statecov_t &sc, const z_t &z, const R_t &R) const =0
Applies the correction (update, measurement, data) step of the Kalman filter.
+
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
Eigen::Matrix< double, p, 1 > z_t
Measurement vector type .
Definition: kalman_filter_aloamgarm.h:37
+
P_t P
State covariance matrix.
Definition: kalman_filter_aloamgarm.h:51
+
Eigen::Matrix< double, n, n > P_t
State uncertainty covariance matrix type .
Definition: kalman_filter_aloamgarm.h:39
+
static const int m
Length of the input vector of the system.
Definition: kalman_filter_aloamgarm.h:32
+
Eigen::Matrix< double, n, 1 > x_t
State vector type .
Definition: kalman_filter_aloamgarm.h:35
+ + + + diff --git a/line__operations_8h_source.html b/line__operations_8h_source.html new file mode 100644 index 00000000..bce54ce4 --- /dev/null +++ b/line__operations_8h_source.html @@ -0,0 +1,126 @@ + + + + + + + +mrs_lib: include/mrs_lib/safety_zone/line_operations.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
line_operations.h
+
+
+
1 // clang: TomasFormat
+
2 #ifndef MRS_LIB_LINE_OPERATIONS_H
+
3 #define MRS_LIB_LINE_OPERATIONS_H
+
4 
+
5 #include <eigen3/Eigen/Eigen>
+
6 
+
7 namespace mrs_lib
+
8 {
+ +
10 {
+
11  Eigen::RowVector2d point;
+
12  bool parallel;
+
13  bool intersect;
+
14 
+
15  explicit Intersection(bool intersect, bool parallel = false, Eigen::RowVector2d point = Eigen::RowVector2d{});
+
16 };
+
17 
+
18 Intersection sectionIntersect(Eigen::RowVector2d start1, Eigen::RowVector2d end1, Eigen::RowVector2d start2, Eigen::RowVector2d end2);
+
19 
+
20 } // namespace mrs_lib
+
21 
+
22 #endif
+
+
+
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
Definition: line_operations.h:9
+ + + + diff --git a/lkf_2example_8cpp-example.html b/lkf_2example_8cpp-example.html new file mode 100644 index 00000000..322286bf --- /dev/null +++ b/lkf_2example_8cpp-example.html @@ -0,0 +1,281 @@ + + + + + + + +mrs_lib: lkf/example.cpp + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
lkf/example.cpp
+
+
+

This example may be run after building mrs_lib by executing rosrun mrs_lib lkf_example.

+
// clang: MatousFormat
+
// Include the LKF header
+
#include <mrs_lib/lkf.h>
+
#include <random>
+
#include <ros/ros.h>
+
+
// Define the LKF we will be using
+
namespace mrs_lib
+
{
+
const int n_states = 4;
+
const int n_inputs = 2;
+
const int n_measurements = 2;
+
+
using lkf_t = LKF<n_states, n_inputs, n_measurements>;
+
}
+
+
// Some helpful aliases to make writing of types shorter
+
using namespace mrs_lib;
+
using A_t = lkf_t::A_t;
+
using B_t = lkf_t::B_t;
+
using H_t = lkf_t::H_t;
+
using Q_t = lkf_t::Q_t;
+
using x_t = lkf_t::x_t;
+
using P_t = lkf_t::P_t;
+
using u_t = lkf_t::u_t;
+
using z_t = lkf_t::z_t;
+
using R_t = lkf_t::R_t;
+
using statecov_t = lkf_t::statecov_t;
+
+
// Some helper enums to make the code more readable
+
enum x_pos
+
{
+
x_x = 0,
+
x_y = 1,
+
x_dx = 2,
+
x_dy = 3,
+
};
+
enum u_pos
+
{
+
u_dx = 0,
+
u_dy = 0,
+
};
+
enum z_pos
+
{
+
z_x = 0,
+
z_y = 1,
+
};
+
+
A_t A;
+
B_t B;
+
H_t H;
+
+
// This function implements the state transition
+
const double speed = 0.3;
+
x_t tra_model_f(const x_t& x, const u_t& u, [[maybe_unused]] const double dt)
+
{
+
return A*x + B*u;
+
}
+
+
// This function implements the observation generation from a state
+
z_t obs_model_f(const x_t& x)
+
{
+
return H*x;
+
}
+
+
// Helper function to generate a random Eigen matrix with normal distribution
+
template <int rows>
+
Eigen::Matrix<double, rows, 1> normal_randmat(const Eigen::Matrix<double, rows, rows>& cov)
+
{
+
static std::random_device rd{};
+
static std::mt19937 gen{rd()};
+
static std::normal_distribution<> d{0,1};
+
Eigen::Matrix<double, rows, 1> ret;
+
for (int row = 0; row < rows; row++)
+
ret(row, 0) = d(gen);
+
return cov*ret;
+
}
+
+
int main()
+
{
+
// dt will be constant in this example
+
const double dt = 1.0;
+
+
// Initialize the state transition matrix
+
A <<
+
1, 0, dt, 0,
+
0, 1, 0, dt,
+
0, 0, 1, 0,
+
0, 0, 0, 1;
+
+
// Initialize the input to state mapping matrix
+
B <<
+
0, 0,
+
0, 0,
+
1, 0,
+
0, 1;
+
+
// Initialize the state to measurement mapping matrix
+
H <<
+
1, 0, 0, 0,
+
0, 1, 0, 0;
+
+
// Initialize the process noise matrix
+
Q_t Q; Q <<
+
1e-3, 0, 0, 0,
+
0, 1e-3, 0, 0,
+
0, 0, 1e-2, 0,
+
0, 0, 0, 1e-2;
+
+
// Initialize the measurement noise matrix
+
R_t R; R <<
+
1e-2, 0,
+
0, 1e-2;
+
+
// Generate initial state and covariance
+
const x_t x0 = 100.0*x_t::Random();
+
P_t P_tmp = P_t::Random();
+
const P_t P0 = 10.0*P_tmp*P_tmp.transpose();
+
const statecov_t sc0({x0, P0});
+
+
// Instantiate the LKF itself
+
lkf_t lkf(A, B, H);
+
+
const int n_its = 1e4;
+
// Prepare the ground-truth state and the estimated state and covariance
+
x_t x_gt = sc0.x;
+
statecov_t sc_est = sc0;
+
+
for (int it = 0; it < n_its; it++)
+
{
+
std::cout << "step: " << it << std::endl;
+
+
// Generate a new input vector
+
const u_t u = u_t::Random();
+
+
// Generate a new state according to the model and noise parameters
+
x_gt = tra_model_f(x_gt, u, dt) + normal_randmat(Q);
+
+
// Generate a new observation according to the model and noise parameters
+
const z_t z = obs_model_f(x_gt) + normal_randmat(R);
+
+
// There should be a try-catch here to prevent program crashes
+
// in case of numerical instabilities (which are possible with UKF)
+
try
+
{
+
// Apply the prediction step
+
sc_est = lkf.predict(sc_est, u, Q, dt);
+
+
// Apply the correction step
+
sc_est = lkf.correct(sc_est, z, R);
+
}
+
catch (const std::exception& e)
+
{
+
// In case of error, alert the user
+
ROS_ERROR("LKF failed: %s", e.what());
+
}
+
+
const auto error = (x_gt-sc_est.x).norm();
+
std::cout << "Current LKF estimation error is: " << error << std::endl;
+
std::cout << "Current ground-truth state is: " << x_gt.transpose() << std::endl;
+
std::cout << "Current LKF estimated state is: " << sc_est.x.transpose() << std::endl;
+
std::cout << "Current LKF state covariance is:" << std::endl << sc_est.P << std::endl;
+
}
+
+
return 0;
+
}
+
+
+
+
typename Base_class::Q_t Q_t
Process noise covariance matrix type .
Definition: lkf.h:52
+
Eigen::Matrix< double, p, n > H_t
State to measurement mapping matrix type .
Definition: lkf.h:57
+
typename Base_class::P_t P_t
State uncertainty covariance matrix type .
Definition: lkf.h:50
+
typename Base_class::statecov_t statecov_t
Helper struct for passing around the state and its covariance in one variable.
Definition: lkf.h:53
+
typename Base_class::R_t R_t
Measurement noise covariance matrix type .
Definition: lkf.h:51
+
Eigen::Matrix< double, n, m > B_t
Input to state mapping matrix type .
Definition: lkf.h:56
+
typename Base_class::x_t x_t
State vector type .
Definition: lkf.h:47
+
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
Eigen::Matrix< double, n, n > A_t
System transition matrix type .
Definition: lkf.h:55
+
Implementation of the Linear Kalman filter .
Definition: lkf.h:38
+
typename Base_class::z_t z_t
Measurement vector type .
Definition: lkf.h:49
+
typename Base_class::u_t u_t
Input vector type .
Definition: lkf.h:48
+ + + + diff --git a/lkf_2example_8cpp.html b/lkf_2example_8cpp.html new file mode 100644 index 00000000..d5cb5643 --- /dev/null +++ b/lkf_2example_8cpp.html @@ -0,0 +1,255 @@ + + + + + + + +mrs_lib: src/lkf/example.cpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
example.cpp File Reference
+
+
+ +

Example file for the LKF implementation. +More...

+
#include <mrs_lib/lkf.h>
+#include <random>
+#include <ros/ros.h>
+
+ + Include dependency graph for example.cpp:
+
+
+ +
+ + + + +

+Namespaces

 mrs_lib
 All mrs_lib functions, classes, variables and definitions are contained in this namespace.
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

+using mrs_lib::lkf_t = LKF< n_states, n_inputs, n_measurements >
 
+using A_t = lkf_t::A_t
 
+using B_t = lkf_t::B_t
 
+using H_t = lkf_t::H_t
 
+using Q_t = lkf_t::Q_t
 
+using x_t = lkf_t::x_t
 
+using P_t = lkf_t::P_t
 
+using u_t = lkf_t::u_t
 
+using z_t = lkf_t::z_t
 
+using R_t = lkf_t::R_t
 
+using statecov_t = lkf_t::statecov_t
 
+ + + + + + + +

+Enumerations

enum  x_pos {
+  x_x = 0, +x_y = 1, +x_dx = 2, +x_dy = 3, +
+  x_x = 0, +x_y = 1, +x_alpha = 2, +x_x = 0, +
+  x_y, +x_alpha, +x_speed +
+ }
 
enum  u_pos { u_dx = 0, +u_dy = 0, +u_alpha = 0, +u_alpha = 0 + }
 
enum  z_pos {
+  z_x = 0, +z_y = 1, +z_x = 0, +z_y = 1, +
+  z_x = 0, +z_y +
+ }
 
+ + + + + + + + + + +

+Functions

+x_t tra_model_f (const x_t &x, const u_t &u, [[maybe_unused]] const double dt)
 
+z_t obs_model_f (const x_t &x)
 
+template<int rows>
Eigen::Matrix< double, rows, 1 > normal_randmat (const Eigen::Matrix< double, rows, rows > &cov)
 
+int main ()
 
+ + + + + + + + + + + + + + + +

+Variables

+const int mrs_lib::n_states = 4
 
+const int mrs_lib::n_inputs = 2
 
+const int mrs_lib::n_measurements = 2
 
+A_t A
 
+B_t B
 
+H_t H
 
+const double speed = 0.3
 
+

Detailed Description

+

Example file for the LKF implementation.

+
Author
Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
+

This example may be run after building mrs_lib by executing rosrun mrs_lib lkf_example.

+

See lkf/example.cpp.

+
+
+ + + + diff --git a/lkf_2example_8cpp.js b/lkf_2example_8cpp.js new file mode 100644 index 00000000..a5830f19 --- /dev/null +++ b/lkf_2example_8cpp.js @@ -0,0 +1,52 @@ +var lkf_2example_8cpp = +[ + [ "A_t", "lkf_2example_8cpp.html#ae8fded1ffb13cfff36afc1eedabf215f", null ], + [ "B_t", "lkf_2example_8cpp.html#a5c39f7a461054863b37ddf9186eeb366", null ], + [ "H_t", "lkf_2example_8cpp.html#aa4437350efd30cd9ab6dbea2a2621faa", null ], + [ "lkf_t", "lkf_2example_8cpp.html#a9aa5d9fb8b0e3429a52f81435a1ba2d5", null ], + [ "P_t", "lkf_2example_8cpp.html#a8519b4182b449bbd63c34794c1b03312", null ], + [ "Q_t", "lkf_2example_8cpp.html#afb367b4e310274e83ea453f1d9329df0", null ], + [ "R_t", "lkf_2example_8cpp.html#a0571298449e0cf2aee255bf7e06e7b86", null ], + [ "statecov_t", "lkf_2example_8cpp.html#adf612d30d3a77fa99ff157ce72be6383", null ], + [ "u_t", "lkf_2example_8cpp.html#a846481e2173f20986bcee056e29a5b4c", null ], + [ "x_t", "lkf_2example_8cpp.html#a1db3b17743d9d81ac2aa852a6ed2e4c6", null ], + [ "z_t", "lkf_2example_8cpp.html#a3dd466ca19241875ff72a627b1f86a25", null ], + [ "u_pos", "lkf_2example_8cpp.html#af4cfed65720084d0bd14a3d413e1dcf5", [ + [ "u_dx", "lkf_2example_8cpp.html#af4cfed65720084d0bd14a3d413e1dcf5a7d974952f0e878cbc8d0576f49892b04", null ], + [ "u_dy", "lkf_2example_8cpp.html#af4cfed65720084d0bd14a3d413e1dcf5a9882f4765a1cde48a725304736906a59", null ], + [ "u_alpha", "ukf_2example_8cpp.html#af4cfed65720084d0bd14a3d413e1dcf5ab11d48e78f42e7cbf42ab7d09dd53403", null ], + [ "u_alpha", "ukf_2test_8cpp.html#af4cfed65720084d0bd14a3d413e1dcf5ab11d48e78f42e7cbf42ab7d09dd53403", null ] + ] ], + [ "x_pos", "lkf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3", [ + [ "x_x", "lkf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a73f2def2a7f99112d90954c4343b9341", null ], + [ "x_y", "lkf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a19830385ee6cb72a377bbb2680bb48f8", null ], + [ "x_dx", "lkf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a51fd194b0acf678a00fd40d662dec461", null ], + [ "x_dy", "lkf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3ae7ae62baad83c4d51fd304977c5bb5fa", null ], + [ "x_x", "ukf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a73f2def2a7f99112d90954c4343b9341", null ], + [ "x_y", "ukf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a19830385ee6cb72a377bbb2680bb48f8", null ], + [ "x_alpha", "ukf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a3e43122a748ab55aaf12a0ab4acc33ce", null ], + [ "x_x", "ukf_2test_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a73f2def2a7f99112d90954c4343b9341", null ], + [ "x_y", "ukf_2test_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a19830385ee6cb72a377bbb2680bb48f8", null ], + [ "x_alpha", "ukf_2test_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a3e43122a748ab55aaf12a0ab4acc33ce", null ], + [ "x_speed", "ukf_2test_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3aa7e2945a84168a1e2f80c386acbeaae4", null ] + ] ], + [ "z_pos", "lkf_2example_8cpp.html#a333f210bb9cc2047487bc6ea732e6084", [ + [ "z_x", "lkf_2example_8cpp.html#a333f210bb9cc2047487bc6ea732e6084aab5757870b95e7a22683c18efee6ca83", null ], + [ "z_y", "lkf_2example_8cpp.html#a333f210bb9cc2047487bc6ea732e6084a53109a343e0ef48e39be85965b69f609", null ], + [ "z_x", "ukf_2example_8cpp.html#a333f210bb9cc2047487bc6ea732e6084aab5757870b95e7a22683c18efee6ca83", null ], + [ "z_y", "ukf_2example_8cpp.html#a333f210bb9cc2047487bc6ea732e6084a53109a343e0ef48e39be85965b69f609", null ], + [ "z_x", "ukf_2test_8cpp.html#a333f210bb9cc2047487bc6ea732e6084aab5757870b95e7a22683c18efee6ca83", null ], + [ "z_y", "ukf_2test_8cpp.html#a333f210bb9cc2047487bc6ea732e6084a53109a343e0ef48e39be85965b69f609", null ] + ] ], + [ "main", "lkf_2example_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4", null ], + [ "normal_randmat", "lkf_2example_8cpp.html#a1aa37976011a3b2fb4c2af6d82853687", null ], + [ "obs_model_f", "lkf_2example_8cpp.html#a4ea961b6252e3dbe39f69775796091ee", null ], + [ "tra_model_f", "lkf_2example_8cpp.html#a8688a140d7d6993d6f2c1844c9359f4f", null ], + [ "A", "lkf_2example_8cpp.html#af1040ffeface88f6c9d4e56db0af4e8f", null ], + [ "B", "lkf_2example_8cpp.html#aaaf68e4cd1134a9f26b41018c8ebbb6a", null ], + [ "H", "lkf_2example_8cpp.html#a354ab4a2f81b229ea9b469d06b672c88", null ], + [ "n_inputs", "lkf_2example_8cpp.html#aad6f7031fab6870460e48019d0ac9bc1", null ], + [ "n_measurements", "lkf_2example_8cpp.html#af754ee73d8ace41fc7c548876dbc85c0", null ], + [ "n_states", "lkf_2example_8cpp.html#af0b5a638f6885ae6c848cc8ba6633ab8", null ], + [ "speed", "lkf_2example_8cpp.html#a71fd37308050cd439537c5c6c2cb4614", null ] +]; \ No newline at end of file diff --git a/lkf_2example_8cpp__incl.map b/lkf_2example_8cpp__incl.map new file mode 100644 index 00000000..601d648a --- /dev/null +++ b/lkf_2example_8cpp__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/lkf_2example_8cpp__incl.md5 b/lkf_2example_8cpp__incl.md5 new file mode 100644 index 00000000..83f58705 --- /dev/null +++ b/lkf_2example_8cpp__incl.md5 @@ -0,0 +1 @@ +64cea9e6fedabf41ae0275263a793e29 \ No newline at end of file diff --git a/lkf_2example_8cpp__incl.png b/lkf_2example_8cpp__incl.png new file mode 100644 index 00000000..8f041a9a Binary files /dev/null and b/lkf_2example_8cpp__incl.png differ diff --git a/lkf_8h_source.html b/lkf_8h_source.html new file mode 100644 index 00000000..374f4ad0 --- /dev/null +++ b/lkf_8h_source.html @@ -0,0 +1,409 @@ + + + + + + + +mrs_lib: include/mrs_lib/lkf.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
lkf.h
+
+
+
1 // clang: MatousFormat
+
6 #ifndef LKFSYSTEMMODELS_H
+
7 #define LKFSYSTEMMODELS_H
+
8 
+ +
10 #include <iostream>
+
11 
+
12 namespace mrs_lib
+
13 {
+
14 
+
15  /* class LKF //{ */
+
37  template <int n_states, int n_inputs, int n_measurements>
+
38  class LKF : public KalmanFilter<n_states, n_inputs, n_measurements>
+
39  {
+
40  public:
+
41  /* LKF definitions (typedefs, constants etc) //{ */
+
42  static constexpr int n = n_states;
+
43  static constexpr int m = n_inputs;
+
44  static constexpr int p = n_measurements;
+ +
47  using x_t = typename Base_class::x_t;
+
48  using u_t = typename Base_class::u_t;
+
49  using z_t = typename Base_class::z_t;
+
50  using P_t = typename Base_class::P_t;
+
51  using R_t = typename Base_class::R_t;
+
52  using Q_t = typename Base_class::Q_t;
+ +
55  typedef Eigen::Matrix<double, n, n> A_t;
+
56  typedef Eigen::Matrix<double, n, m> B_t;
+
57  typedef Eigen::Matrix<double, p, n> H_t;
+
58  typedef Eigen::Matrix<double, n, p> K_t;
+
66  struct inverse_exception : public std::exception
+
67  {
+
73  const char* what() const throw()
+
74  {
+
75  return "LKF: could not compute matrix inversion!!! Fix your covariances (the measurement's is probably too low...)";
+
76  }
+
77  };
+
78  //}
+
79 
+
80  public:
+
87  LKF(){};
+
88 
+
96  LKF(const A_t& A, const B_t& B, const H_t& H) : A(A), B(B), H(H){};
+
97 
+
98  /* correct() method //{ */
+
111  virtual statecov_t correct(const statecov_t& sc, const z_t& z, const R_t& R) const override
+
112  {
+
113  /* return correct_optimized(sc, z, R, H); */
+
114  return correction_impl(sc, z, R, H);
+
115  };
+
116  //}
+
117 
+
118  /* predict() method //{ */
+
138  virtual statecov_t predict(const statecov_t& sc, const u_t& u, const Q_t& Q, [[maybe_unused]] double dt) const override
+
139  {
+
140  statecov_t ret;
+
141  ret.x = state_predict(A, sc.x, B, u);
+
142  ret.P = covariance_predict(A, sc.P, Q, dt);
+
143  return ret;
+
144  };
+
145  //}
+
146 
+
147  public:
+
148  A_t A;
+
149  B_t B;
+
150  H_t H;
+
152  protected:
+
153  /* covariance_predict() method //{ */
+
154  static P_t covariance_predict(const A_t& A, const P_t& P, const Q_t& Q, const double dt)
+
155  {
+
156  return A * P * A.transpose() + dt*Q;
+
157  }
+
158  //}
+
159 
+
160  /* state_predict() method //{ */
+
161  template <int check = n_inputs>
+
162  static inline typename std::enable_if<check == 0, x_t>::type state_predict(const A_t& A, const x_t& x, [[maybe_unused]] const B_t& B,
+
163  [[maybe_unused]] const u_t& u)
+
164  {
+
165  return A * x;
+
166  }
+
167 
+
168  template <int check = n_inputs>
+
169  static inline typename std::enable_if<check != 0, x_t>::type state_predict(const A_t& A, const x_t& x, const B_t& B, const u_t& u)
+
170  {
+
171  return A * x + B * u;
+
172  }
+
173  //}
+
174 
+
175  protected:
+
176  /* invert_W() method //{ */
+
177  static R_t invert_W(R_t W)
+
178  {
+
179  Eigen::ColPivHouseholderQR<R_t> qr(W);
+
180  if (!qr.isInvertible())
+
181  {
+
182  // add some stuff to the tmp matrix diagonal to make it invertible
+
183  R_t ident = R_t::Identity(W.rows(), W.cols());
+
184  W += 1e-9 * ident;
+
185  qr.compute(W);
+
186  if (!qr.isInvertible())
+
187  {
+
188  // never managed to make this happen except for explicitly putting NaNs in the input
+
189  throw inverse_exception();
+
190  }
+
191  }
+
192  const R_t W_inv = qr.inverse();
+
193  return W_inv;
+
194  }
+
195  //}
+
196 
+
197  /* computeKalmanGain() method //{ */
+
198  virtual K_t computeKalmanGain(const statecov_t& sc, [[maybe_unused]] const z_t& z, const R_t& R, const H_t& H) const
+
199  {
+
200  // calculation of the kalman gain K
+
201  const R_t W = H * sc.P * H.transpose() + R;
+
202  const R_t W_inv = invert_W(W);
+
203  const K_t K = sc.P * H.transpose() * W_inv;
+
204  return K;
+
205  }
+
206  //}
+
207 
+
208  /* correction_impl() method //{ */
+
209  template<int check=n>
+
210  typename std::enable_if<check >= 0, statecov_t>::type correction_impl(const statecov_t& sc, const z_t& z, const R_t& R, const H_t& H) const
+
211  {
+
212  // the correction phase
+
213  statecov_t ret;
+
214  const K_t K = computeKalmanGain(sc, z, R, H);
+
215  ret.x = sc.x + K * (z - (H * sc.x));
+
216  ret.P = (P_t::Identity() - (K * H)) * sc.P;
+
217  return ret;
+
218  }
+
219 
+
220  template<int check=n>
+
221  typename std::enable_if<check < 0, statecov_t>::type correction_impl(const statecov_t& sc, const z_t& z, const R_t& R, const H_t& H) const
+
222  {
+
223  // the correction phase
+
224  statecov_t ret;
+
225  const K_t K = computeKalmanGain(sc, z, R, H);
+
226  ret.x = sc.x + K * (z - (H * sc.x));
+
227  ret.P = (P_t::Identity(sc.P.rows(), sc.P.cols()) - (K * H)) * sc.P;
+
228  return ret;
+
229  }
+
230  //}
+
231 
+
232  // NOT USED METHODS
+
233  /* correction_optimized() method //{ */
+
234  // No notable performance gain was observed for the matrix sizes we use, so this is not used.
+
235  static statecov_t correction_optimized(const statecov_t& sc, const z_t& z, const R_t& R, const H_t& H)
+
236  {
+
237  statecov_t ret = sc;
+
238  const H_t B(H*sc.P.transpose());
+
239  const K_t K((B*H.transpose() + R).ldlt().solve(B).transpose());
+
240  ret.x.noalias() += K*(z - H*sc.x);
+
241  ret.P.noalias() -= K*H*sc.P;
+
242  return ret;
+
243  }
+
244 
+
245  /* static statecov_t correction_optimized(const statecov_t& sc, const z_t& z, const R_t& R, const H_t& H) */
+
246  /* { */
+
247  /* statecov_t ret; */
+
248  /* const H_t B = H*sc.P.transpose(); */
+
249  /* const K_t K = (B*H.transpose() + R).partialPivLu().solve(B).transpose(); */
+
250  /* ret.x = sc.x + K*(z - H*sc.x); */
+
251  /* ret.P = sc.P - K*H*sc.P; */
+
252  /* return ret; */
+
253  /* } */
+
254  //}
+
255  };
+
256  //}
+
257 
+
258  /* class dtMatrixLKF //{ */
+
259  template <int n_states, int n_inputs, int n_measurements>
+
260  class varstepLKF : public LKF<n_states, n_inputs, n_measurements>
+
261  {
+
262  public:
+
263  /* LKF definitions (typedefs, constants etc) //{ */
+
264  static const int n = n_states;
+
265  static const int m = n_inputs;
+
266  static const int p = n_measurements;
+
267  using Base_class = LKF<n, m, p>;
+
268 
+
269  using x_t = typename Base_class::x_t;
+
270  using u_t = typename Base_class::u_t;
+
271  using z_t = typename Base_class::z_t;
+
272  using P_t = typename Base_class::P_t;
+
273  using R_t = typename Base_class::R_t;
+
274  using statecov_t = typename Base_class::statecov_t;
+
275  using A_t = typename Base_class::A_t; // measurement mapping p*n
+
276  using B_t = typename Base_class::B_t; // process covariance n*n
+
277  using H_t = typename Base_class::H_t; // measurement mapping p*n
+
278  using Q_t = typename Base_class::Q_t; // process covariance n*n
+
279 
+
280  using generateA_t = std::function<A_t(double)>;
+
281  using generateB_t = std::function<B_t(double)>;
+
282  //}
+
283 
+
284  public:
+
285 
+
293  varstepLKF(const generateA_t& generateA, const generateB_t& generateB, const H_t& H)
+
294  : m_generateA(generateA), m_generateB(generateB)
+
295  {
+
296  Base_class::H = H;
+
297  };
+
298 
+
299  /* predict() method //{ */
+
316  virtual statecov_t predict(const statecov_t& sc, const u_t& u, const Q_t& Q, double dt) const override
+
317  {
+
318  statecov_t ret;
+
319  A_t A = m_generateA(dt);
+
320  B_t B = m_generateB(dt);
+
321  ret.x = Base_class::state_predict(A, sc.x, B, u);
+
322  ret.P = Base_class::covariance_predict(A, sc.P, Q, dt);
+
323  return ret;
+
324  };
+
325  //}
+
326 
+
327  private:
+
328  generateA_t m_generateA;
+
329  generateB_t m_generateB;
+
330  };
+
331  //}
+
332 
+
333  /* class LKF_MRS_odom //{ */
+
334  class LKF_MRS_odom : public LKF<3, 1, 1>
+
335  {
+
336  public:
+
337  /* LKF definitions (typedefs, constants etc) //{ */
+
338  static const int n = 3;
+
339  static const int m = 1;
+
340  static const int p = 1;
+
341  using Base_class = LKF<n, m, p>;
+
342 
+
343  using x_t = typename Base_class::x_t;
+
344  using u_t = typename Base_class::u_t;
+
345  using z_t = typename Base_class::z_t;
+
346  using P_t = typename Base_class::P_t;
+
347  using R_t = typename Base_class::R_t;
+
348  using statecov_t = typename Base_class::statecov_t;
+
349  using A_t = typename Base_class::A_t; // measurement mapping p*n
+
350  using B_t = typename Base_class::B_t; // process covariance n*n
+
351  using H_t = typename Base_class::H_t; // measurement mapping p*n
+
352  using Q_t = typename Base_class::Q_t; // process covariance n*n
+
353 
+
354  using coeff_A_t = A_t; // matrix of constant coefficients in matrix A
+
355  typedef Eigen::Matrix<unsigned, n, n> dtexp_A_t; // matrix of dt exponents in matrix A
+
356  using coeff_B_t = B_t; // matrix of constant coefficients in matrix B
+
357  typedef Eigen::Matrix<unsigned, n, m> dtexp_B_t; // matrix of dt exponents in matrix B
+
358  //}
+
359 
+
360  public:
+
361  LKF_MRS_odom(const std::vector<H_t>& Hs, const double default_dt = 1);
+
362  virtual statecov_t predict(const statecov_t& sc, const u_t& u, const Q_t& Q, double dt) const override;
+
363  virtual statecov_t correct(const statecov_t& sc, const z_t& z, const R_t& R, int param = 0) const;
+
364 
+
365  public:
+
366  x_t state_predict_optimized(const x_t& x_prev, const u_t& u, double dt) const;
+
367  P_t covariance_predict_optimized(const P_t& P, const Q_t& Q, double dt) const;
+
368 
+
369  private:
+
370  std::vector<H_t> m_Hs;
+
371  };
+
372  //}
+
373 
+
374 } // namespace mrs_lib
+
375 
+
376 #endif // LKFSYSTEMMODELS_H
+
+
+
typename Base_class::Q_t Q_t
Process noise covariance matrix type .
Definition: lkf.h:52
+
static constexpr int p
Length of the measurement vector of the system.
Definition: lkf.h:44
+
Eigen::Matrix< double, p, n > H_t
State to measurement mapping matrix type .
Definition: lkf.h:57
+
typename Base_class::P_t P_t
State uncertainty covariance matrix type .
Definition: lkf.h:50
+
H_t H
The state to measurement mapping matrix .
Definition: lkf.h:150
+
typename Base_class::statecov_t statecov_t
Helper struct for passing around the state and its covariance in one variable.
Definition: lkf.h:53
+
typename Base_class::R_t R_t
Measurement noise covariance matrix type .
Definition: lkf.h:51
+
Eigen::Matrix< double, p, p > R_t
Measurement noise covariance matrix type .
Definition: kalman_filter.h:39
+
virtual statecov_t predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const override
Applies the prediction (time) step of the Kalman filter.
Definition: lkf.h:316
+
Eigen::Matrix< double, n, n > P_t
State uncertainty covariance matrix type .
Definition: kalman_filter.h:38
+
This exception is thrown when taking the inverse of a matrix fails.
Definition: lkf.h:66
+
Definition: lkf.h:260
+
Eigen::Matrix< double, m, 1 > u_t
Input vector type .
Definition: kalman_filter.h:35
+
Eigen::Matrix< double, n, m > B_t
Input to state mapping matrix type .
Definition: lkf.h:56
+
typename Base_class::x_t x_t
State vector type .
Definition: lkf.h:47
+
virtual statecov_t correct(const statecov_t &sc, const z_t &z, const R_t &R) const override
Applies the correction (update, measurement, data) step of the Kalman filter.
Definition: lkf.h:111
+
virtual statecov_t predict(const statecov_t &sc, const u_t &u, const Q_t &Q, [[maybe_unused]] double dt) const override
Applies the prediction (time) step of the Kalman filter.
Definition: lkf.h:138
+
Eigen::Matrix< double, n, 1 > x_t
State vector type .
Definition: kalman_filter.h:34
+
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
static constexpr int n
Length of the state vector of the system.
Definition: lkf.h:42
+
Defines KalmanFilter - an abstract class, defining common interfaces and types for a generic Kalman f...
+
Eigen::Matrix< double, n, n > A_t
System transition matrix type .
Definition: lkf.h:55
+
const char * what() const
Returns the error message, describing what caused the exception.
Definition: lkf.h:73
+
B_t B
The input to state mapping matrix .
Definition: lkf.h:149
+
Implementation of the Linear Kalman filter .
Definition: lkf.h:38
+
Eigen::Matrix< double, n, p > K_t
Kalman gain matrix type .
Definition: lkf.h:58
+
varstepLKF(const generateA_t &generateA, const generateB_t &generateB, const H_t &H)
The main constructor.
Definition: lkf.h:293
+
Definition: lkf.h:334
+
LKF(const A_t &A, const B_t &B, const H_t &H)
The main constructor.
Definition: lkf.h:96
+
Eigen::Matrix< double, n, n > Q_t
Process noise covariance matrix type .
Definition: kalman_filter.h:40
+
typename Base_class::z_t z_t
Measurement vector type .
Definition: lkf.h:49
+
Eigen::Matrix< double, p, 1 > z_t
Measurement vector type .
Definition: kalman_filter.h:36
+
LKF()
Convenience default constructor.
Definition: lkf.h:87
+
static constexpr int m
Length of the input vector of the system.
Definition: lkf.h:43
+
A_t A
The system transition matrix .
Definition: lkf.h:144
+
typename Base_class::u_t u_t
Input vector type .
Definition: lkf.h:48
+
Helper struct for passing around the state and its covariance in one variable.
Definition: kalman_filter.h:47
+
This abstract class defines common interfaces and types for a generic Kalman filter.
Definition: kalman_filter.h:26
+ + + + diff --git a/math_8h.html b/math_8h.html new file mode 100644 index 00000000..42cd705a --- /dev/null +++ b/math_8h.html @@ -0,0 +1,138 @@ + + + + + + + +mrs_lib: include/mrs_lib/math.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
math.h File Reference
+
+
+ +

Defines useful math functions that are not part of the cmath STD library. +More...

+
#include <cmath>
+
+ + Include dependency graph for math.h:
+
+
+ +
+

Go to the source code of this file.

+ + + + + +

+Namespaces

 mrs_lib
 All mrs_lib functions, classes, variables and definitions are contained in this namespace.
 
+ + + + +

+Functions

double mrs_lib::probit (const double quantile)
 Inverse cumulative distribution function of the standard normal probability distribution. More...
 
+

Detailed Description

+

Defines useful math functions that are not part of the cmath STD library.

+
Author
Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
+
+
+ + + + diff --git a/math_8h.js b/math_8h.js new file mode 100644 index 00000000..c91bc223 --- /dev/null +++ b/math_8h.js @@ -0,0 +1,4 @@ +var math_8h = +[ + [ "probit", "math_8h.html#a8b597ab1c70f0f92933e24e13f390bf5", null ] +]; \ No newline at end of file diff --git a/math_8h__incl.map b/math_8h__incl.map new file mode 100644 index 00000000..928768fb --- /dev/null +++ b/math_8h__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/math_8h__incl.md5 b/math_8h__incl.md5 new file mode 100644 index 00000000..12bc760d --- /dev/null +++ b/math_8h__incl.md5 @@ -0,0 +1 @@ +28758a77af00e195259c97ee0bedf95a \ No newline at end of file diff --git a/math_8h__incl.png b/math_8h__incl.png new file mode 100644 index 00000000..a79b4ab3 Binary files /dev/null and b/math_8h__incl.png differ diff --git a/math_8h_source.html b/math_8h_source.html new file mode 100644 index 00000000..a1383532 --- /dev/null +++ b/math_8h_source.html @@ -0,0 +1,122 @@ + + + + + + + +mrs_lib: include/mrs_lib/math.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
math.h
+
+
+Go to the documentation of this file.
1 // clang: MatousFormat
+
7 #ifndef MATH_H
+
8 #define MATH_H
+
9 
+
10 #include <cmath>
+
11 
+
12 namespace mrs_lib
+
13 {
+
14  /* probit() function //{ */
+
15  //
+
16  //
+
17 
+
30  double probit(const double quantile);
+
31 
+
32  //}
+
33 }
+
34 
+
35 #endif
+
+
+
double probit(const double quantile)
Inverse cumulative distribution function of the standard normal probability distribution.
Definition: math.cpp:6
+
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+ + + + diff --git a/median__filter_8h.html b/median__filter_8h.html new file mode 100644 index 00000000..faab8710 --- /dev/null +++ b/median__filter_8h.html @@ -0,0 +1,148 @@ + + + + + + + +mrs_lib: include/mrs_lib/median_filter.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
median_filter.h File Reference
+
+
+ +

Defines the MedianFilter class. +More...

+
#include <boost/circular_buffer.hpp>
+#include <mutex>
+#include <cmath>
+#include <vector>
+#include <optional>
+
+ + Include dependency graph for median_filter.h:
+
+
+ +
+

Go to the source code of this file.

+ + + + + +

+Classes

class  mrs_lib::MedianFilter
 Implementation of a median filter with a fixed-length buffer. More...
 
+ + + + +

+Namespaces

 mrs_lib
 All mrs_lib functions, classes, variables and definitions are contained in this namespace.
 
+

Detailed Description

+

Defines the MedianFilter class.

+
Author
Daniel Hert
+
+Matouš Vrba - matou.nosp@m.s.vr.nosp@m.ba@fe.nosp@m.l.cv.nosp@m.ut.cz
+
+
+ + + + diff --git a/median__filter_8h__incl.map b/median__filter_8h__incl.map new file mode 100644 index 00000000..ba829bc0 --- /dev/null +++ b/median__filter_8h__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/median__filter_8h__incl.md5 b/median__filter_8h__incl.md5 new file mode 100644 index 00000000..fa8b8e3c --- /dev/null +++ b/median__filter_8h__incl.md5 @@ -0,0 +1 @@ +6588f4c1d14158118c2c409d91182ee7 \ No newline at end of file diff --git a/median__filter_8h__incl.png b/median__filter_8h__incl.png new file mode 100644 index 00000000..9a5c7c16 Binary files /dev/null and b/median__filter_8h__incl.png differ diff --git a/median__filter_8h_source.html b/median__filter_8h_source.html new file mode 100644 index 00000000..15b5ddef --- /dev/null +++ b/median__filter_8h_source.html @@ -0,0 +1,184 @@ + + + + + + + +mrs_lib: include/mrs_lib/median_filter.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
mrs_lib +
+
Various reusable classes, functions and utilities for use in MRS projects
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
median_filter.h
+
+
+Go to the documentation of this file.
1 #ifndef MEDIAN_FILTER
+
2 #define MEDIAN_FILTER
+
3 
+
10 #include <boost/circular_buffer.hpp>
+
11 #include <mutex>
+
12 #include <cmath>
+
13 #include <vector>
+
14 #include <optional>
+
15 
+
16 namespace mrs_lib
+
17 {
+ +
23  {
+
24  public:
+
33  MedianFilter(const size_t buffer_length, const double min_value = -std::numeric_limits<double>::infinity(), const double max_value = std::numeric_limits<double>::infinity(), const double max_diff = std::numeric_limits<double>::infinity());
+
34 
+
43  MedianFilter();
+
44 
+
53  MedianFilter(const MedianFilter& other);
+
54 
+
63  MedianFilter(MedianFilter&& other);
+
64 
+
73  MedianFilter& operator=(const MedianFilter& other);
+
74 
+ +
84 
+
92  void add(const double value);
+
93 
+
103  bool check(const double value);
+
104 
+
116  bool addCheck(const double value);
+
117 
+
123  void clear();
+
124 
+
132  bool full() const;
+
133 
+
142  double median() const;
+
143 
+
149  bool initialized() const;
+
150 
+
158  void setBufferLength(const size_t buffer_length);
+
159 
+
167  void setMinValue(const double min_value);
+
168 
+
176  void setMaxValue(const double max_value);
+
177 
+
185  void setMaxDifference(const double max_diff);
+
186 
+
187  private:
+
188  // for thread-safety
+
189  mutable std::recursive_mutex m_mtx;
+
190  // the input buffer
+
191  boost::circular_buffer<double> m_buffer;
+
192  // a helper buffer for sorting the input buffer
+
193  mutable std::vector<double> m_buffer_sorted;
+
194  // the last median value for lazy evaluation
+
195  mutable std::optional<double> m_median;
+
196 
+
197  // parameters specified by the user
+
198  double m_min_valid;
+
199  double m_max_valid;
+
200  double m_max_diff;
+
201  };
+
202 
+
203 } // namespace mrs_lib
+
204 
+
205 #endif
+
+
+
void setBufferLength(const size_t buffer_length)
Set a new size of the buffer.
Definition: median_filter.cpp:166
+
bool full() const
Check whether the buffer is filled with values.
Definition: median_filter.cpp:112
+
bool addCheck(const double value)
Add a new value to the buffer and check if it complies with the constraints.
Definition: median_filter.cpp:94
+
void add(const double value)
Add a new value to the buffer.
Definition: median_filter.cpp:73
+
void setMaxValue(const double max_value)
Set a new maximal threshold for new values.
Definition: median_filter.cpp:187
+
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition: attitude_converter.h:29
+
void setMaxDifference(const double max_diff)
Set a new maximal difference from median for new values.
Definition: median_filter.cpp:195
+
bool check(const double value)
Check whether a value complies with the constraints.
Definition: median_filter.cpp:84
+
bool initialized() const
Check whether the filter was initialized with a valid buffer length.
Definition: median_filter.cpp:158
+
double median() const
Obtain the median.
Definition: median_filter.cpp:120
+
MedianFilter & operator=(const MedianFilter &other)
A convenience copy assignment operator.
Definition: median_filter.cpp:39
+
Implementation of a median filter with a fixed-length buffer.
Definition: median_filter.h:22
+
MedianFilter()
A convenience empty constructor that will construct an invalid filter.
Definition: median_filter.cpp:17
+
void setMinValue(const double min_value)
Set a new minimal threshold for new values.
Definition: median_filter.cpp:179
+
void clear()
Clear the buffer of all values.
Definition: median_filter.cpp:103
+ + + + diff --git a/menu.js b/menu.js new file mode 100644 index 00000000..433c15b8 --- /dev/null +++ b/menu.js @@ -0,0 +1,50 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 00000000..14d603bb --- /dev/null +++ b/menudata.js @@ -0,0 +1,139 @@ +/* +@licstart The following is the entire license notice for the +JavaScript code in this file. + +Copyright (C) 1997-2019 by Dimitri van Heesch + +This program is free software; you can redistribute it and/or modify +it under the terms of version 2 of the GNU General Public License as published by +the Free Software Foundation + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +@licend The above is the entire license notice +for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html",children:[ +{text:"c",url:"namespacemembers.html#index_c"}, +{text:"g",url:"namespacemembers.html#index_g"}, +{text:"m",url:"namespacemembers.html#index_m"}, +{text:"p",url:"namespacemembers.html#index_p"}, +{text:"r",url:"namespacemembers.html#index_r"}, +{text:"s",url:"namespacemembers.html#index_s"}]}, +{text:"Functions",url:"namespacemembers_func.html",children:[ +{text:"c",url:"namespacemembers_func.html#index_c"}, +{text:"g",url:"namespacemembers_func.html#index_g"}, +{text:"p",url:"namespacemembers_func.html#index_p"}, +{text:"r",url:"namespacemembers_func.html#index_r"}, +{text:"s",url:"namespacemembers_func.html#index_s"}]}, +{text:"Typedefs",url:"namespacemembers_type.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"inherits.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions_b.html#index_b"}, +{text:"c",url:"functions_c.html#index_c"}, +{text:"d",url:"functions_d.html#index_d"}, +{text:"e",url:"functions_e.html#index_e"}, +{text:"f",url:"functions_f.html#index_f"}, +{text:"g",url:"functions_g.html#index_g"}, +{text:"h",url:"functions_h.html#index_h"}, +{text:"i",url:"functions_i.html#index_i"}, +{text:"j",url:"functions_j.html#index_j"}, +{text:"k",url:"functions_k.html#index_k"}, +{text:"l",url:"functions_l.html#index_l"}, +{text:"m",url:"functions_m.html#index_m"}, +{text:"n",url:"functions_n.html#index_n"}, +{text:"o",url:"functions_o.html#index_o"}, +{text:"p",url:"functions_p.html#index_p"}, +{text:"q",url:"functions_q.html#index_q"}, +{text:"r",url:"functions_r.html#index_r"}, +{text:"s",url:"functions_s.html#index_s"}, +{text:"t",url:"functions_t.html#index_t"}, +{text:"u",url:"functions_u.html#index_u"}, +{text:"v",url:"functions_v.html#index_v"}, +{text:"w",url:"functions_w.html#index_w"}, +{text:"x",url:"functions_x.html#index_x"}, +{text:"y",url:"functions_y.html#index_y"}, +{text:"z",url:"functions_z.html#index_z"}, +{text:"~",url:"functions_~.html#index__7E"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"b",url:"functions_func_b.html#index_b"}, +{text:"c",url:"functions_func_c.html#index_c"}, +{text:"d",url:"functions_func_d.html#index_d"}, +{text:"e",url:"functions_func_e.html#index_e"}, +{text:"f",url:"functions_func_f.html#index_f"}, +{text:"g",url:"functions_func_g.html#index_g"}, +{text:"h",url:"functions_func_h.html#index_h"}, +{text:"i",url:"functions_func_i.html#index_i"}, +{text:"j",url:"functions_func_j.html#index_j"}, +{text:"l",url:"functions_func_l.html#index_l"}, +{text:"m",url:"functions_func_m.html#index_m"}, +{text:"n",url:"functions_func_n.html#index_n"}, +{text:"o",url:"functions_func_o.html#index_o"}, +{text:"p",url:"functions_func_p.html#index_p"}, +{text:"r",url:"functions_func_r.html#index_r"}, +{text:"s",url:"functions_func_s.html#index_s"}, +{text:"t",url:"functions_func_t.html#index_t"}, +{text:"u",url:"functions_func_u.html#index_u"}, +{text:"v",url:"functions_func_v.html#index_v"}, +{text:"w",url:"functions_func_w.html#index_w"}, +{text:"y",url:"functions_func_y.html#index_y"}, +{text:"~",url:"functions_func_~.html#index__7E"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"a",url:"functions_vars.html#index_a"}, +{text:"b",url:"functions_vars.html#index_b"}, +{text:"h",url:"functions_vars.html#index_h"}, +{text:"k",url:"functions_vars.html#index_k"}, +{text:"l",url:"functions_vars.html#index_l"}, +{text:"m",url:"functions_vars.html#index_m"}, +{text:"n",url:"functions_vars.html#index_n"}, +{text:"p",url:"functions_vars.html#index_p"}, +{text:"q",url:"functions_vars.html#index_q"}, +{text:"r",url:"functions_vars.html#index_r"}, +{text:"s",url:"functions_vars.html#index_s"}, +{text:"t",url:"functions_vars.html#index_t"}, +{text:"w",url:"functions_vars.html#index_w"}, +{text:"x",url:"functions_vars.html#index_x"}]}, +{text:"Typedefs",url:"functions_type.html",children:[ +{text:"a",url:"functions_type.html#index_a"}, +{text:"b",url:"functions_type.html#index_b"}, +{text:"c",url:"functions_type.html#index_c"}, +{text:"d",url:"functions_type.html#index_d"}, +{text:"e",url:"functions_type.html#index_e"}, +{text:"f",url:"functions_type.html#index_f"}, +{text:"h",url:"functions_type.html#index_h"}, +{text:"i",url:"functions_type.html#index_i"}, +{text:"k",url:"functions_type.html#index_k"}, +{text:"m",url:"functions_type.html#index_m"}, +{text:"o",url:"functions_type.html#index_o"}, +{text:"p",url:"functions_type.html#index_p"}, +{text:"q",url:"functions_type.html#index_q"}, +{text:"r",url:"functions_type.html#index_r"}, +{text:"s",url:"functions_type.html#index_s"}, +{text:"t",url:"functions_type.html#index_t"}, +{text:"u",url:"functions_type.html#index_u"}, +{text:"w",url:"functions_type.html#index_w"}, +{text:"x",url:"functions_type.html#index_x"}, +{text:"z",url:"functions_type.html#index_z"}]}, +{text:"Related Functions",url:"functions_rela.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}, +{text:"Examples",url:"examples.html"}]} diff --git a/misc_8h.html b/misc_8h.html new file mode 100644 index 00000000..3d14ed25 --- /dev/null +++ b/misc_8h.html @@ -0,0 +1,937 @@ + + + + + + + +mrs_lib: include/mrs_lib/geometry/misc.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    misc.h File Reference
    +
    +
    + +

    Defines useful geometry utilities and functions. +More...

    +
    #include <cmath>
    +#include <Eigen/Dense>
    +#include <geometry_msgs/Point.h>
    +#include <geometry_msgs/Quaternion.h>
    +
    + + Include dependency graph for misc.h:
    +
    +
    + +
    + + This graph shows which files directly or indirectly include this file:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    + + + + + + + + + + + + + + + + + + +

    +Typedefs

    +template<int dims>
    using mrs_lib::geometry::vec_t = Eigen::Matrix< double, dims, 1 >
     
    +using mrs_lib::geometry::pt2_t = vec_t< 2 >
     
    +using mrs_lib::geometry::vec2_t = vec_t< 2 >
     
    +using mrs_lib::geometry::pt3_t = vec_t< 3 >
     
    +using mrs_lib::geometry::vec3_t = vec_t< 3 >
     
    +using mrs_lib::geometry::mat3_t = Eigen::Matrix3d
     
    +using mrs_lib::geometry::quat_t = Eigen::Quaterniond
     
    +using mrs_lib::geometry::anax_t = Eigen::AngleAxisd
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    +template<int dims>
    vec_t< dims+1 > mrs_lib::geometry::toHomogenous (const vec_t< dims > &vec)
     
    template<typename T >
    double mrs_lib::geometry::headingFromRot (const T &rot)
     Returns the heading angle from the rotation. More...
     
    double mrs_lib::geometry::angleBetween (const vec2_t &a, const vec2_t &b)
     Returns the angle between two vectors, taking orientation into account. More...
     
    double mrs_lib::geometry::angleBetween (const vec3_t &a, const vec3_t &b)
     Returns the angle between two vectors, taking orientation into account. More...
     
    anax_t mrs_lib::geometry::angleaxisBetween (const vec3_t &a, const vec3_t &b, const double tolerance=1e-9)
     Returns the rotation between two vectors, represented as angle-axis. More...
     
    quat_t mrs_lib::geometry::quaternionBetween (const vec3_t &a, const vec3_t &b, const double tolerance=1e-9)
     Returns the rotation between two vectors, represented as a quaternion. More...
     
    Eigen::Matrix3d mrs_lib::geometry::rotationBetween (const vec3_t &a, const vec3_t &b, const double tolerance=1e-9)
     Returns the rotation between two vectors, represented as a rotation matrix. More...
     
    double mrs_lib::geometry::haversin (const double angle)
     computes the haversine (half of versine) for a given angle More...
     
    double mrs_lib::geometry::invHaversin (const double value)
     computes the inverse haversine angle for a given value More...
     
    double mrs_lib::geometry::solidAngle (double a, double b, double c)
     computes the solid angle for a spherical surface corresponding to a 'triangle' with edge lengths a, b, c More...
     
    quat_t mrs_lib::geometry::quaternionFromEuler (double x, double y, double z)
     create a quaternion from 3 provided Euler angles More...
     
    quat_t mrs_lib::geometry::quaternionFromEuler (const Eigen::Vector3d &euler)
     create a quaternion from Euler angles provided as a vector More...
     
    quat_t mrs_lib::geometry::quaternionFromHeading (const double heading)
     create a quaternion from heading More...
     
    double mrs_lib::geometry::cross (const vec2_t &a, const vec2_t b)
     Implementation of cross product for 2D vectors. More...
     
    double mrs_lib::geometry::dist (const vec2_t &a, const vec2_t &b)
     distnace between two 2D Eigen vectors More...
     
    double mrs_lib::geometry::dist (const vec3_t &a, const vec3_t &b)
     distnace between two 3D Eigen vectors More...
     
    double mrs_lib::geometry::triangleArea (const double a, const double b, const double c)
     uses Heron's formula to compute area of a given triangle using side lengths More...
     
    double mrs_lib::geometry::sphericalTriangleArea (Eigen::Vector3d a, Eigen::Vector3d b, Eigen::Vector3d c)
     compute the area of a 'triangle' drawn on a spherical surface More...
     
    template<typename T >
    mat3_t mrs_lib::geometry::rotateCovariance (const mat3_t &cov, const T &rot)
     Returns the covariance rotated using the specified rotation. More...
     
    +

    Detailed Description

    +

    Defines useful geometry utilities and functions.

    +
    Author
    Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +
    +Petr Štibinger - stibi.nosp@m.pet@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +

    Function Documentation

    + +

    ◆ angleaxisBetween()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    anax_t mrs_lib::geometry::angleaxisBetween (const vec3_t & a,
    const vec3_t & b,
    const double tolerance = 1e-9 
    )
    +
    + +

    Returns the rotation between two vectors, represented as angle-axis.

    +

    To avoid singularities, a tolerance parameter is used:

      +
    • If the absolute angle between the two vectors is less than tolerance, a zero rotation is returned.
    • +
    • If the angle between the two vectors is closer to $ \pi $ than tolerance, a $ \pi $ rotation is returned.
    • +
    +
    Parameters
    + + + +
    avector from which the rotation starts.
    bvector at which the rotation ends.
    +
    +
    +
    Returns
    rotation from a to b.
    + +
    +
    + +

    ◆ angleBetween() [1/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    double mrs_lib::geometry::angleBetween (const vec2_t & a,
    const vec2_t & b 
    )
    +
    + +

    Returns the angle between two vectors, taking orientation into account.

    +

    This implementation uses atan2 instead of just acos and thus it properly takes into account orientation of the vectors, returning angle in all four quadrants.

    +
    Parameters
    + + + +
    avector from which the angle will be measured.
    bvector to which the angle will be measured.
    +
    +
    +
    Returns
    angle from a to b.
    + +
    +
    + +

    ◆ angleBetween() [2/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    double mrs_lib::geometry::angleBetween (const vec3_t & a,
    const vec3_t & b 
    )
    +
    + +

    Returns the angle between two vectors, taking orientation into account.

    +

    This implementation uses atan2 instead of just acos and thus it properly takes into account orientation of the vectors, returning angle in all four quadrants.

    +
    Parameters
    + + + +
    avector from which the angle will be measured.
    bvector to which the angle will be measured.
    +
    +
    +
    Returns
    angle from a to b.
    + +
    +
    + +

    ◆ cross()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    double mrs_lib::geometry::cross (const vec2_t & a,
    const vec2_t b 
    )
    +
    + +

    Implementation of cross product for 2D vectors.

    +

    Useful e.g. for finding the sine of an angle between two 2D vectors.

    +
    Parameters
    + + + +
    afirst vector of the cross product.
    bsecond vector of the cross product.
    +
    +
    +
    Returns
    $ a \times b $ (sine of the angle from a to b).
    + +
    +
    + +

    ◆ dist() [1/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    double mrs_lib::geometry::dist (const vec2_t & a,
    const vec2_t & b 
    )
    +
    + +

    distnace between two 2D Eigen vectors

    +
    Parameters
    + + + +
    a
    b
    +
    +
    +
    Returns
    Euclidean distance
    + +
    +
    + +

    ◆ dist() [2/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    double mrs_lib::geometry::dist (const vec3_t & a,
    const vec3_t & b 
    )
    +
    + +

    distnace between two 3D Eigen vectors

    +
    Parameters
    + + + +
    a
    b
    +
    +
    +
    Returns
    Euclidean distance
    + +
    +
    + +

    ◆ haversin()

    + +
    +
    + + + + + + + + +
    double mrs_lib::geometry::haversin (const double angle)
    +
    + +

    computes the haversine (half of versine) for a given angle

    +
    Parameters
    + + +
    angleangle in radians
    +
    +
    +
    Returns
    + +
    +
    + +

    ◆ headingFromRot()

    + +
    +
    +
    +template<typename T >
    + + + + + + + + +
    double mrs_lib::geometry::headingFromRot (const T & rot)
    +
    + +

    Returns the heading angle from the rotation.

    +

    Heading is defined as the angle of a [1,0,0] vector rotated by the rotation and projected to the XY plane from the X axis.

    +
    Parameters
    + + +
    rotthe rotation to extract the heading angle from.
    +
    +
    +
    Returns
    the heading angle.
    + +
    +
    + +

    ◆ invHaversin()

    + +
    +
    + + + + + + + + +
    double mrs_lib::geometry::invHaversin (const double value)
    +
    + +

    computes the inverse haversine angle for a given value

    +
    Parameters
    + + +
    value
    +
    +
    +
    Returns
    angle in radians
    + +
    +
    + +

    ◆ quaternionBetween()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    quat_t mrs_lib::geometry::quaternionBetween (const vec3_t & a,
    const vec3_t & b,
    const double tolerance = 1e-9 
    )
    +
    + +

    Returns the rotation between two vectors, represented as a quaternion.

    +

    Works the same as the angleaxisBetween() function (in fact it is used in the implementation).

    +
    Parameters
    + + + +
    avector from which the rotation starts.
    bvector at which the rotation ends.
    +
    +
    +
    Returns
    rotation from a to b.
    + +
    +
    + +

    ◆ quaternionFromEuler() [1/2]

    + +
    +
    + + + + + + + + +
    quat_t mrs_lib::geometry::quaternionFromEuler (const Eigen::Vector3d & euler)
    +
    + +

    create a quaternion from Euler angles provided as a vector

    +
    Parameters
    + + +
    eulercomponents of the rotation provided as vector of Euler angles
    +
    +
    +
    Returns
    quaternion
    + +
    +
    + +

    ◆ quaternionFromEuler() [2/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    quat_t mrs_lib::geometry::quaternionFromEuler (double x,
    double y,
    double z 
    )
    +
    + +

    create a quaternion from 3 provided Euler angles

    +
    Parameters
    + + + + +
    xEuler angle in radians
    yEuler angle in radians
    zEuler angle in radians
    +
    +
    +
    Returns
    quaternion
    + +
    +
    + +

    ◆ quaternionFromHeading()

    + +
    +
    + + + + + + + + +
    quat_t mrs_lib::geometry::quaternionFromHeading (const double heading)
    +
    + +

    create a quaternion from heading

    +

    Heading is defined as the angle of a [1,0,0] vector rotated by the rotation and projected to the XY plane from the X axis.

    +
    Parameters
    + + +
    headingthe heading angle.
    +
    +
    +
    Returns
    the quaternion corresponding to the heading rotation.
    + +
    +
    + +

    ◆ rotateCovariance()

    + +
    +
    +
    +template<typename T >
    + + + + + + + + + + + + + + + + + + +
    mat3_t mrs_lib::geometry::rotateCovariance (const mat3_t & cov,
    const T & rot 
    )
    +
    + +

    Returns the covariance rotated using the specified rotation.

    +
    Parameters
    + + + +
    covthe covariance to be rotated.
    rotthe rotation use.
    +
    +
    +
    Returns
    a new matrix object containing the rotated covariance.
    + +
    +
    + +

    ◆ rotationBetween()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    Eigen::Matrix3d mrs_lib::geometry::rotationBetween (const vec3_t & a,
    const vec3_t & b,
    const double tolerance = 1e-9 
    )
    +
    + +

    Returns the rotation between two vectors, represented as a rotation matrix.

    +

    Works the same as the angleaxisBetween() function (in fact it is used in the implementation).

    +
    Parameters
    + + + +
    avector from which the rotation starts.
    bvector at which the rotation ends.
    +
    +
    +
    Returns
    rotation from a to b.
    + +
    +
    + +

    ◆ solidAngle()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    double mrs_lib::geometry::solidAngle (double a,
    double b,
    double c 
    )
    +
    + +

    computes the solid angle for a spherical surface corresponding to a 'triangle' with edge lengths a, b, c

    +
    Parameters
    + + + + +
    a
    b
    c
    +
    +
    +
    Returns
    solid angle in steradians
    + +
    +
    + +

    ◆ sphericalTriangleArea()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    double mrs_lib::geometry::sphericalTriangleArea (Eigen::Vector3d a,
    Eigen::Vector3d b,
    Eigen::Vector3d c 
    )
    +
    + +

    compute the area of a 'triangle' drawn on a spherical surface

    +
    Parameters
    + + + + +
    alength of side1
    blength of side2
    clength of side3
    +
    +
    +
    Returns
    area in units squared
    + +
    +
    + +

    ◆ triangleArea()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    double mrs_lib::geometry::triangleArea (const double a,
    const double b,
    const double c 
    )
    +
    + +

    uses Heron's formula to compute area of a given triangle using side lengths

    +
    Parameters
    + + + + +
    alength of side1
    blength of side2
    clength of side3
    +
    +
    +
    Returns
    area in units squared
    + +
    +
    +
    +
    + + + + diff --git a/misc_8h.js b/misc_8h.js new file mode 100644 index 00000000..8a919a18 --- /dev/null +++ b/misc_8h.js @@ -0,0 +1,30 @@ +var misc_8h = +[ + [ "anax_t", "misc_8h.html#aa4ec3f978118cd073716e1396d9e635a", null ], + [ "mat3_t", "misc_8h.html#ad6488d0485413382423e228ce3ac6200", null ], + [ "pt2_t", "misc_8h.html#ace2351e9f7e9aa2a9e8a92587e9a7d21", null ], + [ "pt3_t", "misc_8h.html#a609605ca59353b702a45724c13019734", null ], + [ "quat_t", "misc_8h.html#a59e4a9fe55cea367ebdea8a13a6288eb", null ], + [ "vec2_t", "misc_8h.html#abcb24c1db5a04026018643bf7d1cdee6", null ], + [ "vec3_t", "misc_8h.html#ad73b1d7b4c47269a6d6a08e6adcd0e69", null ], + [ "vec_t", "misc_8h.html#a24ac45e66dd506f39699c4c2f8e04a26", null ], + [ "angleaxisBetween", "misc_8h.html#a3c40238e3620a619ddadf518321ccaae", null ], + [ "angleBetween", "misc_8h.html#a926f171b122a39c63ccb860666a7e254", null ], + [ "angleBetween", "misc_8h.html#a277dbfe7688635c28c5a1b34f32ed81e", null ], + [ "cross", "misc_8h.html#aedd0e70cfd555703b53c469312d56293", null ], + [ "dist", "misc_8h.html#a53aed2b4889c7574f51b590d0a602722", null ], + [ "dist", "misc_8h.html#ae00d8eaf9c43e838e245454ef7c290f4", null ], + [ "haversin", "misc_8h.html#a61d1dcf236aac255d384e35efd67370e", null ], + [ "headingFromRot", "misc_8h.html#ac5072a0343d0cfe703ddce456e7c5756", null ], + [ "invHaversin", "misc_8h.html#a600a2f5b7f1e654339f7177f9a64934c", null ], + [ "quaternionBetween", "misc_8h.html#afc7674301c81fd347f26a2bc0bb96979", null ], + [ "quaternionFromEuler", "misc_8h.html#a105c80e76bac24eb3e2a16bed6609a80", null ], + [ "quaternionFromEuler", "misc_8h.html#acbd2f281f58752d98b9482f3a9697363", null ], + [ "quaternionFromHeading", "misc_8h.html#aac041627690bc6f377e60b99344b8b3a", null ], + [ "rotateCovariance", "misc_8h.html#acfda874d1843fd8c03fb309b5024818f", null ], + [ "rotationBetween", "misc_8h.html#a59d7c7ddea21a014b2c831a0fc65fbb1", null ], + [ "solidAngle", "misc_8h.html#a3f9294141cc559ae94b4c026ac47d05a", null ], + [ "sphericalTriangleArea", "misc_8h.html#a8605d3a799002897f1d260cc4be95682", null ], + [ "toHomogenous", "misc_8h.html#a37eced130f5d204f8b08416e535858f0", null ], + [ "triangleArea", "misc_8h.html#a62f7d942a2445dc2c362678523966241", null ] +]; \ No newline at end of file diff --git a/misc_8h__dep__incl.map b/misc_8h__dep__incl.map new file mode 100644 index 00000000..a79fbec0 --- /dev/null +++ b/misc_8h__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/misc_8h__dep__incl.md5 b/misc_8h__dep__incl.md5 new file mode 100644 index 00000000..1691c6ba --- /dev/null +++ b/misc_8h__dep__incl.md5 @@ -0,0 +1 @@ +78abfbdafc5143467822dd4ae330c935 \ No newline at end of file diff --git a/misc_8h__dep__incl.png b/misc_8h__dep__incl.png new file mode 100644 index 00000000..a8cf7d0f Binary files /dev/null and b/misc_8h__dep__incl.png differ diff --git a/misc_8h__incl.map b/misc_8h__incl.map new file mode 100644 index 00000000..40a5d1df --- /dev/null +++ b/misc_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/misc_8h__incl.md5 b/misc_8h__incl.md5 new file mode 100644 index 00000000..d8e5ebdc --- /dev/null +++ b/misc_8h__incl.md5 @@ -0,0 +1 @@ +d454117ee4664cfc8104da1a5ba521b3 \ No newline at end of file diff --git a/misc_8h__incl.png b/misc_8h__incl.png new file mode 100644 index 00000000..962e9eb9 Binary files /dev/null and b/misc_8h__incl.png differ diff --git a/misc_8h_source.html b/misc_8h_source.html new file mode 100644 index 00000000..8efbd291 --- /dev/null +++ b/misc_8h_source.html @@ -0,0 +1,252 @@ + + + + + + + +mrs_lib: include/mrs_lib/geometry/misc.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    misc.h
    +
    +
    +Go to the documentation of this file.
    1 // clang: MatousFormat
    +
    8 #ifndef GEOMETRY_MISC_H
    +
    9 #define GEOMETRY_MISC_H
    +
    10 
    +
    11 #include <cmath>
    +
    12 #include <Eigen/Dense>
    +
    13 #include <geometry_msgs/Point.h>
    +
    14 #include <geometry_msgs/Quaternion.h>
    +
    15 
    +
    16 namespace mrs_lib
    +
    17 {
    +
    18  namespace geometry
    +
    19  {
    +
    20  template <int dims>
    +
    21  using vec_t = Eigen::Matrix<double, dims, 1>;
    +
    22 
    +
    23  using pt2_t = vec_t<2>;
    +
    24  using vec2_t = vec_t<2>;
    +
    25  using pt3_t = vec_t<3>;
    +
    26  using vec3_t = vec_t<3>;
    +
    27 
    +
    28  using mat3_t = Eigen::Matrix3d;
    +
    29 
    +
    30  using quat_t = Eigen::Quaterniond;
    +
    31  using anax_t = Eigen::AngleAxisd;
    +
    32 
    +
    33  template <int dims>
    +
    34  vec_t<dims + 1> toHomogenous(const vec_t<dims>& vec)
    +
    35  {
    +
    36  const Eigen::Matrix<double, dims + 1, 1> ret((Eigen::Matrix<double, dims + 1, 1>() << vec, 1).finished());
    +
    37  return ret;
    +
    38  }
    +
    39 
    +
    40  // | ----------------- Angle-related functions ---------------- |
    +
    41 
    +
    42  /* angle-related functions //{ */
    +
    43 
    +
    44  /* headingFromRot() //{ */
    +
    45 
    +
    56  template <typename T>
    +
    57  double headingFromRot(const T& rot)
    +
    58  {
    +
    59  const vec3_t rot_vec = rot*vec3_t::UnitX();
    +
    60  return std::atan2(rot_vec.y(), rot_vec.x());
    +
    61  }
    +
    62 
    +
    63  //}
    +
    64 
    +
    65  /* angleBetween() //{ */
    +
    66 
    +
    79  double angleBetween(const vec2_t& a, const vec2_t& b);
    +
    80 
    +
    93  double angleBetween(const vec3_t& a, const vec3_t& b);
    +
    94 
    +
    95  //}
    +
    96 
    +
    97  /* angleaxisBetween() //{ */
    +
    98 
    +
    112  anax_t angleaxisBetween(const vec3_t& a, const vec3_t& b, const double tolerance = 1e-9);
    +
    113 
    +
    114  //}
    +
    115 
    +
    116  /* quaternionBetween() //{ */
    +
    117 
    +
    129  quat_t quaternionBetween(const vec3_t& a, const vec3_t& b, const double tolerance = 1e-9);
    +
    130 
    +
    131  //}
    +
    132 
    +
    133  /* rotationBetween() //{ */
    +
    134 
    +
    146  Eigen::Matrix3d rotationBetween(const vec3_t& a, const vec3_t& b, const double tolerance = 1e-9);
    +
    147 
    +
    148  //}
    +
    149 
    +
    150  /* haversin() //{ */
    +
    151 
    +
    159  double haversin(const double angle);
    +
    160 
    +
    161  //}
    +
    162 
    +
    163  /* invHaversin() //{ */
    +
    164 
    +
    172  double invHaversin(const double value);
    +
    173 
    +
    174  //}
    +
    175 
    +
    176  /* solidAngle //{ */
    +
    177 
    +
    187  double solidAngle(double a, double b, double c);
    +
    188 
    +
    189  //}
    +
    190 
    +
    191  /* quaternionFromEuler() //{ */
    +
    192 
    +
    202  quat_t quaternionFromEuler(double x, double y, double z);
    +
    203 
    +
    211  quat_t quaternionFromEuler(const Eigen::Vector3d& euler);
    +
    212 
    +
    213  //}
    +
    214 
    +
    224  quat_t quaternionFromHeading(const double heading);
    +
    225 
    +
    226  //}
    +
    227 
    +
    228  // | ----------------- Miscellaneous functions ---------------- |
    +
    229 
    +
    230  /* 2D cross() //{ */
    +
    231 
    +
    243  double cross(const vec2_t& a, const vec2_t b);
    +
    244 
    +
    245  //}
    +
    246 
    +
    247  /* vector distance //{ */
    +
    248 
    +
    257  double dist(const vec2_t& a, const vec2_t& b);
    +
    258 
    +
    267  double dist(const vec3_t& a, const vec3_t& b);
    +
    268 
    +
    269  //}
    +
    270 
    +
    271  /* triangleArea() //{ */
    +
    272 
    +
    282  double triangleArea(const double a, const double b, const double c);
    +
    283 
    +
    284  //}
    +
    285 
    +
    286  /* sphericalTriangleArea //{ */
    +
    287 
    +
    297  double sphericalTriangleArea(Eigen::Vector3d a, Eigen::Vector3d b, Eigen::Vector3d c);
    +
    298 
    +
    299  //}
    +
    300 
    +
    301  /* rotateCovariance() //{ */
    +
    302 
    +
    312  template <typename T>
    +
    313  mat3_t rotateCovariance(const mat3_t& cov, const T& rot)
    +
    314  {
    +
    315  const mat3_t matrot(rot);
    +
    316  return matrot*cov*matrot.transpose();
    +
    317  }
    +
    318 
    +
    319  //}
    +
    320 
    +
    321  } // namespace geometry
    +
    322 } // namespace mrs_lib
    +
    323 
    +
    324 #endif
    +
    +
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    double headingFromRot(const T &rot)
    Returns the heading angle from the rotation.
    Definition: misc.h:57
    +
    mat3_t rotateCovariance(const mat3_t &cov, const T &rot)
    Returns the covariance rotated using the specified rotation.
    Definition: misc.h:313
    + + + + diff --git a/mrs__lib_8h_source.html b/mrs__lib_8h_source.html new file mode 100644 index 00000000..edee54d5 --- /dev/null +++ b/mrs__lib_8h_source.html @@ -0,0 +1,106 @@ + + + + + + + +mrs_lib: include/mrs_lib/mrs_lib.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib.h
    +
    +
    +
    1 // this file is just for documentation purposes and contains no actual code
    +
    2 
    +
    7 namespace mrs_lib {}
    +
    +
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    + + + + diff --git a/mrs_logo.png b/mrs_logo.png new file mode 100644 index 00000000..b4451444 Binary files /dev/null and b/mrs_logo.png differ diff --git a/msg__extractor_8h.html b/msg__extractor_8h.html new file mode 100644 index 00000000..7368311f --- /dev/null +++ b/msg__extractor_8h.html @@ -0,0 +1,288 @@ + + + + + + + +mrs_lib: include/mrs_lib/msg_extractor.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    msg_extractor.h File Reference
    +
    +
    + +

    utility functions for getting stuff from ROS msgs +More...

    +
    #include <mrs_msgs/TrackerCommand.h>
    +#include <mrs_msgs/Reference.h>
    +#include <mrs_msgs/ReferenceStamped.h>
    +#include <nav_msgs/Odometry.h>
    +#include <mrs_lib/attitude_converter.h>
    +
    + + Include dependency graph for msg_extractor.h:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    std::tuple< double, double, double > mrs_lib::getXYZ (const geometry_msgs::Point &data)
     get XYZ from geometry_msgs::Point More...
     
    std::tuple< double, double, double > mrs_lib::getXYZ (const geometry_msgs::PointConstPtr &data)
     get XYZ from geometry_msgs::PointConstPtr More...
     
    std::tuple< double, double, double > mrs_lib::getXYZ (const geometry_msgs::Vector3 &data)
     get XYZ from geometry_msgs::Vector3 More...
     
    std::tuple< double, double, double > mrs_lib::getXYZ (const geometry_msgs::Vector3ConstPtr &data)
     get XYZ from geometry_msgs::Vector3ConstPtr More...
     
    std::tuple< double, double, double > mrs_lib::getPosition (const geometry_msgs::Pose &data)
     get position from geometry_msgs::Pose More...
     
    std::tuple< double, double, double > mrs_lib::getPosition (const geometry_msgs::PoseConstPtr &data)
     get position from geometry_msgs::PoseConstPtr More...
     
    double mrs_lib::getHeading (const geometry_msgs::Pose &data)
     get heading from geometry_msgs::Pose More...
     
    double mrs_lib::getHeading (const geometry_msgs::PoseConstPtr &data)
     get heading from geometry_msgs::PoseConstPtr More...
     
    double mrs_lib::getYaw (const geometry_msgs::Pose &data)
     get yaw from geometry_msgs::Pose More...
     
    double mrs_lib::getYaw (const geometry_msgs::PoseConstPtr &data)
     get yaw from geometry_msgs::PoseConstPtr More...
     
    std::tuple< double, double, double > mrs_lib::getPosition (const geometry_msgs::PoseWithCovariance &data)
     get position from geometry_msgs::PoseWithCovariance More...
     
    std::tuple< double, double, double > mrs_lib::getPosition (const geometry_msgs::PoseWithCovarianceConstPtr &data)
     get position from geometry_msgs::PoseWithCovarianceConstPtr More...
     
    double mrs_lib::getHeading (const geometry_msgs::PoseWithCovariance &data)
     get heading from geometry_msgs::PoseWithCovariance More...
     
    double mrs_lib::getHeading (const geometry_msgs::PoseWithCovarianceConstPtr &data)
     get heading from geometry_msgs::PoseWithCovarianceConstPtr More...
     
    double mrs_lib::getYaw (const geometry_msgs::PoseWithCovariance &data)
     get yaw from geometry_msgs::PoseWithCovariance More...
     
    double mrs_lib::getYaw (const geometry_msgs::PoseWithCovarianceConstPtr &data)
     get yaw from geometry_msgs::PoseWithCovarianceConstPtr More...
     
    std::tuple< double, double, double > mrs_lib::getVelocity (const geometry_msgs::Twist &data)
     get velocity from geometry_msgs::Twist More...
     
    std::tuple< double, double, double > mrs_lib::getPosition (const geometry_msgs::TwistConstPtr &data)
     get position from geometry_msgs::TwistConstPtr More...
     
    std::tuple< double, double, double > mrs_lib::getVelocity (const geometry_msgs::TwistWithCovariance &data)
     get velocity from geometry_msgs::TwistWithCovariance More...
     
    std::tuple< double, double, double > mrs_lib::getPosition (const geometry_msgs::TwistWithCovarianceConstPtr &data)
     get position from geometry_msgs::TwistWithCovarianceConstPtr More...
     
    std::tuple< double, double, double > mrs_lib::getPosition (const nav_msgs::Odometry &data)
     get position from nav_msgs::Odometry More...
     
    std::tuple< double, double, double > mrs_lib::getPosition (const nav_msgs::OdometryConstPtr &data)
     get position from nav_msgs::OdometryConstPtr More...
     
    std::tuple< double, double, double > mrs_lib::getVelocity (const nav_msgs::Odometry &data)
     get position from nav_msgs::Odometry More...
     
    std::tuple< double, double, double > mrs_lib::getVelocity (const nav_msgs::OdometryConstPtr &data)
     get velocity from nav_msgs::OdometryConstPtr More...
     
    double mrs_lib::getHeading (const nav_msgs::Odometry &data)
     get heading from nav_msgs::Odometry More...
     
    double mrs_lib::getHeading (const nav_msgs::OdometryConstPtr &data)
     get heading from nav_msgs::OdometryConstPtr More...
     
    double mrs_lib::getYaw (const nav_msgs::Odometry &data)
     get yaw from nav_msgs::Odometry More...
     
    double mrs_lib::getYaw (const nav_msgs::OdometryConstPtr &data)
     get yaw from nav_msgs::OdometryConstPtr More...
     
    geometry_msgs::Pose mrs_lib::getPose (const nav_msgs::Odometry &data)
     returns the Pose part of the nav_msgs::Odometry message More...
     
    geometry_msgs::Pose mrs_lib::getPose (const nav_msgs::OdometryConstPtr &data)
     returns the Pose part of the nav_msgs::OdometryConstPtr message More...
     
    std::tuple< double, double, double > mrs_lib::getPosition (const mrs_msgs::TrackerCommand &data)
     get position data from mrs_msgs::TrackerCommand More...
     
    std::tuple< double, double, double > mrs_lib::getPosition (const mrs_msgs::TrackerCommandConstPtr &data)
     get position data from mrs_msgs::TrackerCommandConstPtr More...
     
    std::tuple< double, double, double > mrs_lib::getVelocity (const mrs_msgs::TrackerCommand &data)
     get velocity data from mrs_msgs::TrackerCommand More...
     
    std::tuple< double, double, double > mrs_lib::getVelocity (const mrs_msgs::TrackerCommandConstPtr &data)
     get velocity data from mrs_msgs::TrackerCommandConstPtr More...
     
    double mrs_lib::getHeading (const mrs_msgs::TrackerCommand &data)
     get heading from mrs_msgs::TrackerCommand More...
     
    double mrs_lib::getHeading (const mrs_msgs::TrackerCommandConstPtr &data)
     get heading from mrs_msgs::TrackerCommandConstPtr More...
     
    std::tuple< double, double, double > mrs_lib::getPosition (const mrs_msgs::Reference &data)
     get position from mrs_msgs::Reference More...
     
    std::tuple< double, double, double > mrs_lib::getPosition (const mrs_msgs::ReferenceConstPtr &data)
     get position from mrs_msgs::ReferenceConstPtr More...
     
    double mrs_lib::getHeading (const mrs_msgs::Reference &data)
     get heading from mrs_msgs::Reference More...
     
    double mrs_lib::getHeading (const mrs_msgs::ReferenceConstPtr &data)
     get heading from mrs_msgs::ReferenceConstPtr More...
     
    std::tuple< double, double, double > mrs_lib::getPosition (const mrs_msgs::ReferenceStamped &data)
     get position from mrs_msgs::ReferenceStamped More...
     
    std::tuple< double, double, double > mrs_lib::getPosition (const mrs_msgs::ReferenceStampedConstPtr &data)
     get position from mrs_msgs::ReferenceStampedConstPtr More...
     
    double mrs_lib::getHeading (const mrs_msgs::ReferenceStamped &data)
     get heading from mrs_msgs::ReferenceStamped More...
     
    double mrs_lib::getHeading (const mrs_msgs::ReferenceStampedConstPtr &data)
     get heading from mrs_msgs::ReferenceStampedConstPtr More...
     
    +

    Detailed Description

    +

    utility functions for getting stuff from ROS msgs

    +
    Author
    Tomas Baca - tomas.nosp@m..bac.nosp@m.a@fel.nosp@m..cvu.nosp@m.t.cz
    +
    +
    + + + + diff --git a/msg__extractor_8h.js b/msg__extractor_8h.js new file mode 100644 index 00000000..a842c3a9 --- /dev/null +++ b/msg__extractor_8h.js @@ -0,0 +1,47 @@ +var msg__extractor_8h = +[ + [ "getHeading", "msg__extractor_8h.html#a193b468ac0f1b874af53c64ea0400236", null ], + [ "getHeading", "msg__extractor_8h.html#a4c4a63d0de925cfa92316f6b5be78169", null ], + [ "getHeading", "msg__extractor_8h.html#ab57f24ac15517d030da375dfd6b27f2a", null ], + [ "getHeading", "msg__extractor_8h.html#a0006b1926f70e598a4f22d0a4d0fd177", null ], + [ "getHeading", "msg__extractor_8h.html#af4481d1d612b63a2c63f9e2dac6aaa3c", null ], + [ "getHeading", "msg__extractor_8h.html#a0285b59825283d220c6b3501853a2b28", null ], + [ "getHeading", "msg__extractor_8h.html#a58888855de6c5e0e9c0e9d9340299e54", null ], + [ "getHeading", "msg__extractor_8h.html#acfd8813200df68fad24ad3051f6b4a3d", null ], + [ "getHeading", "msg__extractor_8h.html#ad3594a3b11dd4b67c42c25e3caba896e", null ], + [ "getHeading", "msg__extractor_8h.html#adfa03f341e40b1999bc66cdf066b714e", null ], + [ "getHeading", "msg__extractor_8h.html#a482e880bcf945677389dcab02597e90f", null ], + [ "getHeading", "msg__extractor_8h.html#aba8b3d81b8855577fbe90fc9a2f84fb6", null ], + [ "getPose", "msg__extractor_8h.html#a1cd3887061c0b071a29dbbfe1b8a11dd", null ], + [ "getPose", "msg__extractor_8h.html#acb6bfcfa0d9432d2184852b4f4d2694b", null ], + [ "getPosition", "msg__extractor_8h.html#aafe68a11e627c33f976dac00f49edb03", null ], + [ "getPosition", "msg__extractor_8h.html#a6ee4630b5dd76e9c67f00e7f4ce35806", null ], + [ "getPosition", "msg__extractor_8h.html#a4a813c8d2b7a92090ef94ed0ccc1f2d7", null ], + [ "getPosition", "msg__extractor_8h.html#a2f32a3fa1e335cf1c33833ef33838f36", null ], + [ "getPosition", "msg__extractor_8h.html#af2a47eec589a6a62199f9fa2b4879d5b", null ], + [ "getPosition", "msg__extractor_8h.html#addf482f99d48899ccf29a9e89eb5771e", null ], + [ "getPosition", "msg__extractor_8h.html#a8f78d985e8d87688482e5e30c948b067", null ], + [ "getPosition", "msg__extractor_8h.html#aa767373d0d66e633d754d5fa4db1afca", null ], + [ "getPosition", "msg__extractor_8h.html#aa1c31d89c94806084e8da6fecd4ff575", null ], + [ "getPosition", "msg__extractor_8h.html#ae4a1dc71e3e48fa26fa8d2fed9211c8c", null ], + [ "getPosition", "msg__extractor_8h.html#a4c51dc5a87098b8ecd7d7e78599be7b8", null ], + [ "getPosition", "msg__extractor_8h.html#af85023d127c2383e6825ab7e4f7da1fb", null ], + [ "getPosition", "msg__extractor_8h.html#a6beef9718623cdac64b8b5ea35c8be4a", null ], + [ "getPosition", "msg__extractor_8h.html#a52981dc7eab7573aedf1d447cb40b1fb", null ], + [ "getVelocity", "msg__extractor_8h.html#a6e64da46123dd4cc793419585a66e54c", null ], + [ "getVelocity", "msg__extractor_8h.html#a0669aa00311586cf9882f1bccff07d16", null ], + [ "getVelocity", "msg__extractor_8h.html#ade26d077c3e43c9f201a2e8d73dba2b7", null ], + [ "getVelocity", "msg__extractor_8h.html#ad278e1089b273b3e0216977ee8df8ac5", null ], + [ "getVelocity", "msg__extractor_8h.html#aab2704bf692a6cfc5674272fc6ff06ca", null ], + [ "getVelocity", "msg__extractor_8h.html#af8c731a97cd737d35d9524ec60f4ee2f", null ], + [ "getXYZ", "msg__extractor_8h.html#a9ad821408d076d95467fc662b1dac1ab", null ], + [ "getXYZ", "msg__extractor_8h.html#a8fc9b477f93c9b8694fb8f90956ae830", null ], + [ "getXYZ", "msg__extractor_8h.html#af79ccb18192e6ff1f1fc7fdafdee0a0b", null ], + [ "getXYZ", "msg__extractor_8h.html#a32ae31e9589cb55806ec32edcf79f928", null ], + [ "getYaw", "msg__extractor_8h.html#af1993419f7b19d38bdbfe3ceb5b7350f", null ], + [ "getYaw", "msg__extractor_8h.html#acc3f167cadca01d5e92be7dc43078feb", null ], + [ "getYaw", "msg__extractor_8h.html#a13152460c1973b54f71f230340b20494", null ], + [ "getYaw", "msg__extractor_8h.html#a2aa307f37eb6f60fc4d360adb8559946", null ], + [ "getYaw", "msg__extractor_8h.html#af17cc11983807fb3d6bd17092fa30fc4", null ], + [ "getYaw", "msg__extractor_8h.html#af62f21eed6f44954b6aefbf0afbbf2e0", null ] +]; \ No newline at end of file diff --git a/msg__extractor_8h__incl.map b/msg__extractor_8h__incl.map new file mode 100644 index 00000000..f413913f --- /dev/null +++ b/msg__extractor_8h__incl.map @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/msg__extractor_8h__incl.md5 b/msg__extractor_8h__incl.md5 new file mode 100644 index 00000000..f6b35c1d --- /dev/null +++ b/msg__extractor_8h__incl.md5 @@ -0,0 +1 @@ +822d31ce4f7ea55bf224abc13d0c07ba \ No newline at end of file diff --git a/msg__extractor_8h__incl.png b/msg__extractor_8h__incl.png new file mode 100644 index 00000000..f994d1a3 Binary files /dev/null and b/msg__extractor_8h__incl.png differ diff --git a/msg__extractor_8h_source.html b/msg__extractor_8h_source.html new file mode 100644 index 00000000..38510914 --- /dev/null +++ b/msg__extractor_8h_source.html @@ -0,0 +1,492 @@ + + + + + + + +mrs_lib: include/mrs_lib/msg_extractor.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    msg_extractor.h
    +
    +
    +Go to the documentation of this file.
    1 // clang: TomasFormat
    +
    6 #ifndef MRS_LIB_MSG_EXTRACTOR_H
    +
    7 #define MRS_LIB_MSG_EXTRACTOR_H
    +
    8 
    +
    9 #include <mrs_msgs/TrackerCommand.h>
    +
    10 #include <mrs_msgs/Reference.h>
    +
    11 #include <mrs_msgs/ReferenceStamped.h>
    +
    12 
    +
    13 #include <nav_msgs/Odometry.h>
    +
    14 
    + +
    16 
    +
    17 namespace mrs_lib
    +
    18 {
    +
    19 
    +
    20 /* geometry_msgs::Point //{ */
    +
    21 
    +
    29 std::tuple<double, double, double> getXYZ(const geometry_msgs::Point& data) {
    +
    30 
    +
    31  double x = data.x;
    +
    32  double y = data.y;
    +
    33  double z = data.z;
    +
    34 
    +
    35  return std::tuple(x, y, z);
    +
    36 }
    +
    37 
    +
    45 std::tuple<double, double, double> getXYZ(const geometry_msgs::PointConstPtr& data) {
    +
    46 
    +
    47  return getXYZ(*data);
    +
    48 }
    +
    49 
    +
    50 //}
    +
    51 
    +
    52 /* geometry_msgs::Vector3 //{ */
    +
    53 
    +
    61 std::tuple<double, double, double> getXYZ(const geometry_msgs::Vector3& data) {
    +
    62 
    +
    63  double x = data.x;
    +
    64  double y = data.y;
    +
    65  double z = data.z;
    +
    66 
    +
    67  return std::tuple(x, y, z);
    +
    68 }
    +
    69 
    +
    77 std::tuple<double, double, double> getXYZ(const geometry_msgs::Vector3ConstPtr& data) {
    +
    78 
    +
    79  return getXYZ(*data);
    +
    80 }
    +
    81 
    +
    82 //}
    +
    83 
    +
    84 /* geometry_msgs::Pose //{ */
    +
    85 
    +
    86 /* getPosition() //{ */
    +
    87 
    +
    95 std::tuple<double, double, double> getPosition(const geometry_msgs::Pose& data) {
    +
    96 
    +
    97  return getXYZ(data.position);
    +
    98 }
    +
    99 
    +
    107 std::tuple<double, double, double> getPosition(const geometry_msgs::PoseConstPtr& data) {
    +
    108 
    +
    109  return getPosition(*data);
    +
    110 }
    +
    111 
    +
    112 //}
    +
    113 
    +
    114 /* getHeading() //{ */
    +
    115 
    +
    123 double getHeading(const geometry_msgs::Pose& data) {
    +
    124 
    +
    125  return mrs_lib::AttitudeConverter(data.orientation).getHeading();
    +
    126 }
    +
    127 
    +
    135 double getHeading(const geometry_msgs::PoseConstPtr& data) {
    +
    136 
    +
    137  return getHeading(*data);
    +
    138 }
    +
    139 
    +
    140 //}
    +
    141 
    +
    142 /* getYaw() //{ */
    +
    143 
    +
    151 double getYaw(const geometry_msgs::Pose& data) {
    +
    152 
    +
    153  return mrs_lib::AttitudeConverter(data.orientation).getYaw();
    +
    154 }
    +
    155 
    +
    163 double getYaw(const geometry_msgs::PoseConstPtr& data) {
    +
    164 
    +
    165  return getYaw(*data);
    +
    166 }
    +
    167 
    +
    168 //}
    +
    169 
    +
    170 //}
    +
    171 
    +
    172 /* geometry_msgs::PoseWithCovariance //{ */
    +
    173 
    +
    174 /* getPosition() //{ */
    +
    175 
    +
    183 std::tuple<double, double, double> getPosition(const geometry_msgs::PoseWithCovariance& data) {
    +
    184 
    +
    185  return getPosition(data.pose);
    +
    186 }
    +
    187 
    +
    195 std::tuple<double, double, double> getPosition(const geometry_msgs::PoseWithCovarianceConstPtr& data) {
    +
    196 
    +
    197  return getPosition(*data);
    +
    198 }
    +
    199 
    +
    200 //}
    +
    201 
    +
    202 /* getHeading() //{ */
    +
    203 
    +
    211 double getHeading(const geometry_msgs::PoseWithCovariance& data) {
    +
    212 
    +
    213  return getHeading(data.pose);
    +
    214 }
    +
    215 
    +
    223 double getHeading(const geometry_msgs::PoseWithCovarianceConstPtr& data) {
    +
    224 
    +
    225  return getHeading(*data);
    +
    226 }
    +
    227 
    +
    228 //}
    +
    229 
    +
    230 /* getYaw() //{ */
    +
    231 
    +
    239 double getYaw(const geometry_msgs::PoseWithCovariance& data) {
    +
    240 
    +
    241  return getYaw(data.pose);
    +
    242 }
    +
    243 
    +
    251 double getYaw(const geometry_msgs::PoseWithCovarianceConstPtr& data) {
    +
    252 
    +
    253  return getYaw(*data);
    +
    254 }
    +
    255 
    +
    256 //}
    +
    257 
    +
    258 //}
    +
    259 
    +
    260 /* geometry_msgs::Twist //{ */
    +
    261 
    +
    262 /* getVelocity() //{ */
    +
    263 
    +
    271 std::tuple<double, double, double> getVelocity(const geometry_msgs::Twist& data) {
    +
    272 
    +
    273  return getXYZ(data.linear);
    +
    274 }
    +
    275 
    +
    283 std::tuple<double, double, double> getPosition(const geometry_msgs::TwistConstPtr& data) {
    +
    284 
    +
    285  return getVelocity(*data);
    +
    286 }
    +
    287 
    +
    288 //}
    +
    289 
    +
    290 //}
    +
    291 
    +
    292 /* geometry_msgs::TwistWithCovariance //{ */
    +
    293 
    +
    294 /* getVelocity() //{ */
    +
    295 
    +
    303 std::tuple<double, double, double> getVelocity(const geometry_msgs::TwistWithCovariance& data) {
    +
    304 
    +
    305  return getVelocity(data.twist);
    +
    306 }
    +
    307 
    +
    315 std::tuple<double, double, double> getPosition(const geometry_msgs::TwistWithCovarianceConstPtr& data) {
    +
    316 
    +
    317  return getVelocity(*data);
    +
    318 }
    +
    319 
    +
    320 //}
    +
    321 
    +
    322 //}
    +
    323 
    +
    324 /* nav_msgs::Odometry //{ */
    +
    325 
    +
    326 /* getPosition() //{ */
    +
    327 
    +
    335 std::tuple<double, double, double> getPosition(const nav_msgs::Odometry& data) {
    +
    336 
    +
    337  return getPosition(data.pose);
    +
    338 }
    +
    339 
    +
    347 std::tuple<double, double, double> getPosition(const nav_msgs::OdometryConstPtr& data) {
    +
    348 
    +
    349  return getPosition(*data);
    +
    350 }
    +
    351 
    +
    352 //}
    +
    353 
    +
    354 /* getVelocity() //{ */
    +
    355 
    +
    363 std::tuple<double, double, double> getVelocity(const nav_msgs::Odometry& data) {
    +
    364 
    +
    365  return getVelocity(data.twist);
    +
    366 }
    +
    367 
    +
    375 std::tuple<double, double, double> getVelocity(const nav_msgs::OdometryConstPtr& data) {
    +
    376 
    +
    377  return getVelocity(*data);
    +
    378 }
    +
    379 
    +
    380 //}
    +
    381 
    +
    382 /* getHeading() //{ */
    +
    383 
    +
    391 double getHeading(const nav_msgs::Odometry& data) {
    +
    392 
    +
    393  return getHeading(data.pose);
    +
    394 }
    +
    395 
    +
    403 double getHeading(const nav_msgs::OdometryConstPtr& data) {
    +
    404 
    +
    405  return getHeading(*data);
    +
    406 }
    +
    407 
    +
    408 //}
    +
    409 
    +
    410 /* getYaw() //{ */
    +
    411 
    +
    419 double getYaw(const nav_msgs::Odometry& data) {
    +
    420 
    +
    421  return getYaw(data.pose);
    +
    422 }
    +
    423 
    +
    431 double getYaw(const nav_msgs::OdometryConstPtr& data) {
    +
    432 
    +
    433  return getYaw(*data);
    +
    434 }
    +
    435 
    +
    436 //}
    +
    437 
    +
    438 /* getPose() //{ */
    +
    439 
    +
    447 geometry_msgs::Pose getPose(const nav_msgs::Odometry& data) {
    +
    448 
    +
    449  return data.pose.pose;
    +
    450 }
    +
    451 
    +
    459 geometry_msgs::Pose getPose(const nav_msgs::OdometryConstPtr& data) {
    +
    460 
    +
    461  return getPose(*data);
    +
    462 }
    +
    463 
    +
    464 //}
    +
    465 
    +
    466 //}
    +
    467 
    +
    468 /* mrs_msgs::TrackerCommand //{ */
    +
    469 
    +
    470 /* getPosition() //{ */
    +
    471 
    +
    479 std::tuple<double, double, double> getPosition(const mrs_msgs::TrackerCommand& data) {
    +
    480 
    +
    481  return getXYZ(data.position);
    +
    482 }
    +
    483 
    +
    491 std::tuple<double, double, double> getPosition(const mrs_msgs::TrackerCommandConstPtr& data) {
    +
    492 
    +
    493  return getPosition(*data);
    +
    494 }
    +
    495 
    +
    496 //}
    +
    497 
    +
    498 /* getVelocity() //{ */
    +
    499 
    +
    507 std::tuple<double, double, double> getVelocity(const mrs_msgs::TrackerCommand& data) {
    +
    508 
    +
    509  return getXYZ(data.velocity);
    +
    510 }
    +
    511 
    +
    519 std::tuple<double, double, double> getVelocity(const mrs_msgs::TrackerCommandConstPtr& data) {
    +
    520 
    +
    521  return getVelocity(*data);
    +
    522 }
    +
    523 
    +
    524 //}
    +
    525 
    +
    526 /* getHeading() //{ */
    +
    527 
    +
    535 double getHeading(const mrs_msgs::TrackerCommand& data) {
    +
    536 
    +
    537  double heading = 0;
    +
    538 
    +
    539  if (data.use_heading) {
    +
    540 
    +
    541  heading = data.heading;
    +
    542 
    +
    543  } else if (data.use_orientation) {
    +
    544 
    +
    545  heading = mrs_lib::AttitudeConverter(data.orientation).getHeading();
    +
    546  }
    +
    547 
    +
    548  return heading;
    +
    549 }
    +
    550 
    +
    558 double getHeading(const mrs_msgs::TrackerCommandConstPtr& data) {
    +
    559 
    +
    560  return getHeading(*data);
    +
    561 }
    +
    562 
    +
    563 //}
    +
    564 
    +
    565 //}
    +
    566 
    +
    567 /* mrs_msgs::Reference //{ */
    +
    568 
    +
    569 /* getPosition() //{ */
    +
    570 
    +
    578 std::tuple<double, double, double> getPosition(const mrs_msgs::Reference& data) {
    +
    579 
    +
    580  return getXYZ(data.position);
    +
    581 }
    +
    582 
    +
    590 std::tuple<double, double, double> getPosition(const mrs_msgs::ReferenceConstPtr& data) {
    +
    591 
    +
    592  return getPosition(*data);
    +
    593 }
    +
    594 
    +
    595 //}
    +
    596 
    +
    597 /* getHeading() //{ */
    +
    598 
    +
    606 double getHeading(const mrs_msgs::Reference& data) {
    +
    607 
    +
    608  return data.heading;
    +
    609 }
    +
    610 
    +
    618 double getHeading(const mrs_msgs::ReferenceConstPtr& data) {
    +
    619 
    +
    620  return getHeading(*data);
    +
    621 }
    +
    622 
    +
    623 //}
    +
    624 
    +
    625 //}
    +
    626 
    +
    627 /* mrs_msgs::ReferenceStamped //{ */
    +
    628 
    +
    629 /* getPosition() //{ */
    +
    630 
    +
    638 std::tuple<double, double, double> getPosition(const mrs_msgs::ReferenceStamped& data) {
    +
    639 
    +
    640  return getPosition(data.reference);
    +
    641 }
    +
    642 
    +
    650 std::tuple<double, double, double> getPosition(const mrs_msgs::ReferenceStampedConstPtr& data) {
    +
    651 
    +
    652  return getPosition(*data);
    +
    653 }
    +
    654 
    +
    655 //}
    +
    656 
    +
    657 /* getHeading() //{ */
    +
    658 
    +
    666 double getHeading(const mrs_msgs::ReferenceStamped& data) {
    +
    667 
    +
    668  return getHeading(data.reference);
    +
    669 }
    +
    670 
    +
    678 double getHeading(const mrs_msgs::ReferenceStampedConstPtr& data) {
    +
    679 
    +
    680  return getHeading(*data);
    +
    681 }
    +
    682 
    +
    683 //}
    +
    684 
    +
    685 //}
    +
    686 
    +
    687 } // namespace mrs_lib
    +
    688 
    +
    689 //}
    +
    690 
    +
    691 #endif // MRS_LIB_MSG_EXTRACTOR_H
    +
    +
    +
    double getHeading(void)
    get the angle of the rotated x-axis in the original XY plane, a.k.a
    Definition: attitude_converter.cpp:254
    +
    std::tuple< double, double, double > getXYZ(const geometry_msgs::Point &data)
    get XYZ from geometry_msgs::Point
    Definition: msg_extractor.h:29
    +
    Conversions between various representations of object attitude in 3D. Supports Quaternions,...
    +
    std::tuple< double, double, double > getPosition(const geometry_msgs::Pose &data)
    get position from geometry_msgs::Pose
    Definition: msg_extractor.h:95
    +
    double getYaw(void)
    get the yaw angle
    Definition: attitude_converter.cpp:233
    +
    std::tuple< double, double, double > getVelocity(const geometry_msgs::Twist &data)
    get velocity from geometry_msgs::Twist
    Definition: msg_extractor.h:271
    +
    The main convertor class. Instantiate with any type in constructor and get the value in any other typ...
    Definition: attitude_converter.h:153
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    double getHeading(const geometry_msgs::Pose &data)
    get heading from geometry_msgs::Pose
    Definition: msg_extractor.h:123
    +
    double getYaw(const geometry_msgs::Pose &data)
    get yaw from geometry_msgs::Pose
    Definition: msg_extractor.h:151
    +
    geometry_msgs::Pose getPose(const nav_msgs::Odometry &data)
    returns the Pose part of the nav_msgs::Odometry message
    Definition: msg_extractor.h:447
    + + + + diff --git a/mutex_8h.html b/mutex_8h.html new file mode 100644 index 00000000..5a6b6782 --- /dev/null +++ b/mutex_8h.html @@ -0,0 +1,182 @@ + + + + + + + +mrs_lib: include/mrs_lib/mutex.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mutex.h File Reference
    +
    +
    + +

    Defines helper routines for getting and setting variables under mutex locks. +More...

    +
    #include <iostream>
    +#include <mutex>
    +#include <tuple>
    +
    + + Include dependency graph for mutex.h:
    +
    +
    + +
    + + This graph shows which files directly or indirectly include this file:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<class... GetArgs, class... SetArgs>
    std::tuple< GetArgs... > mrs_lib::get_set_mutexed (std::mutex &mut, std::tuple< GetArgs &... > get, std::tuple< SetArgs... > from_set, std::tuple< SetArgs &... > to_set)
     thread-safe getter and setter for values of variables (args) More...
     
    template<class... Args>
    std::tuple< Args... > mrs_lib::get_mutexed (std::mutex &mut, Args &... args)
     thread-safe getter for values of variables (args) More...
     
    template<class T >
    mrs_lib::get_mutexed (std::mutex &mut, T &arg)
     thread-safe getter a value from a variable More...
     
    template<class T >
    void mrs_lib::set_mutexed_impl (const T what, T &where)
     base case of the variadic template for set_mutexed() More...
     
    template<class T , class... Args>
    void mrs_lib::set_mutexed_impl (const T what, T &where, Args... args)
     general case of the variadic template for set_mutexed() More...
     
    template<class T >
    auto mrs_lib::set_mutexed (std::mutex &mut, const T what, T &where)
     thread-safe setter for a variable More...
     
    template<class... Args>
    auto mrs_lib::set_mutexed (std::mutex &mut, Args &... args)
     thread-safe setter for multiple variables More...
     
    template<class... Args>
    auto mrs_lib::set_mutexed (std::mutex &mut, const std::tuple< Args... > from, std::tuple< Args &... > to)
     thread-safe setter for multiple variables More...
     
    +

    Detailed Description

    +

    Defines helper routines for getting and setting variables under mutex locks.

    +
    Author
    Tomas Baca - tomas.nosp@m..bac.nosp@m.a@fel.nosp@m..cvu.nosp@m.t.cz
    +
    +
    + + + + diff --git a/mutex_8h.js b/mutex_8h.js new file mode 100644 index 00000000..178f6c4e --- /dev/null +++ b/mutex_8h.js @@ -0,0 +1,11 @@ +var mutex_8h = +[ + [ "get_mutexed", "mutex_8h.html#aaf62529e79b5d131ea5c0fedee10b9ca", null ], + [ "get_mutexed", "mutex_8h.html#aa3a541823230c37a69e51d4e90aa54e0", null ], + [ "get_set_mutexed", "mutex_8h.html#ae41b720a78b36db5ac51d8213972d001", null ], + [ "set_mutexed", "mutex_8h.html#aa09cacb136795c2831ed0499518a2b17", null ], + [ "set_mutexed", "mutex_8h.html#a953c3bb11623623e1daef402272e6833", null ], + [ "set_mutexed", "mutex_8h.html#afae3eb66a47b80bd8bae3b4a0c6a9368", null ], + [ "set_mutexed_impl", "mutex_8h.html#acc32702fff28a4a1515a586a94f51e79", null ], + [ "set_mutexed_impl", "mutex_8h.html#ad43e8bfd91df3dae404738c355b136e9", null ] +]; \ No newline at end of file diff --git a/mutex_8h__dep__incl.map b/mutex_8h__dep__incl.map new file mode 100644 index 00000000..a71f3542 --- /dev/null +++ b/mutex_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/mutex_8h__dep__incl.md5 b/mutex_8h__dep__incl.md5 new file mode 100644 index 00000000..eefc72f0 --- /dev/null +++ b/mutex_8h__dep__incl.md5 @@ -0,0 +1 @@ +4843c53167df421caac8bf38d3eb6700 \ No newline at end of file diff --git a/mutex_8h__dep__incl.png b/mutex_8h__dep__incl.png new file mode 100644 index 00000000..a155a7e4 Binary files /dev/null and b/mutex_8h__dep__incl.png differ diff --git a/mutex_8h__incl.map b/mutex_8h__incl.map new file mode 100644 index 00000000..f32be61a --- /dev/null +++ b/mutex_8h__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/mutex_8h__incl.md5 b/mutex_8h__incl.md5 new file mode 100644 index 00000000..df5ab5cc --- /dev/null +++ b/mutex_8h__incl.md5 @@ -0,0 +1 @@ +5d2d25333eabfe8c37e7f100e74652bb \ No newline at end of file diff --git a/mutex_8h__incl.png b/mutex_8h__incl.png new file mode 100644 index 00000000..0a646577 Binary files /dev/null and b/mutex_8h__incl.png differ diff --git a/mutex_8h_source.html b/mutex_8h_source.html new file mode 100644 index 00000000..d83ac055 --- /dev/null +++ b/mutex_8h_source.html @@ -0,0 +1,195 @@ + + + + + + + +mrs_lib: include/mrs_lib/mutex.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mutex.h
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 #ifndef MUTEX_H
    +
    6 #define MUTEX_H
    +
    7 
    +
    8 #include <iostream>
    +
    9 #include <mutex>
    +
    10 #include <tuple>
    +
    11 
    +
    12 namespace mrs_lib
    +
    13 {
    +
    14 
    +
    27 template <class... GetArgs, class... SetArgs>
    +
    28 std::tuple<GetArgs...> get_set_mutexed(std::mutex& mut, std::tuple<GetArgs&...> get, std::tuple<SetArgs...> from_set, std::tuple<SetArgs&...> to_set) {
    +
    29 
    +
    30  std::scoped_lock lock(mut);
    +
    31 
    +
    32  std::tuple<GetArgs...> result = get;
    +
    33  to_set = from_set;
    +
    34 
    +
    35  return result;
    +
    36 }
    +
    37 
    +
    47 template <class... Args>
    +
    48 std::tuple<Args...> get_mutexed(std::mutex& mut, Args&... args) {
    +
    49 
    +
    50  std::scoped_lock lock(mut);
    +
    51 
    +
    52  std::tuple result = std::tuple(args...);
    +
    53 
    +
    54  return result;
    +
    55 }
    +
    56 
    +
    57 
    +
    67 template <class T>
    +
    68 T get_mutexed(std::mutex& mut, T& arg) {
    +
    69 
    +
    70  std::scoped_lock lock(mut);
    +
    71 
    +
    72  return arg;
    +
    73 }
    +
    74 
    +
    82 template <class T>
    +
    83 void set_mutexed_impl(const T what, T& where) {
    +
    84 
    +
    85  where = what;
    +
    86 }
    +
    87 
    +
    97 template <class T, class... Args>
    +
    98 void set_mutexed_impl(const T what, T& where, Args... args) {
    +
    99 
    +
    100  where = what;
    +
    101 
    +
    102  set_mutexed_impl(args...);
    +
    103 }
    +
    104 
    +
    115 template <class T>
    +
    116 auto set_mutexed(std::mutex& mut, const T what, T& where) {
    +
    117 
    +
    118  std::scoped_lock lock(mut);
    +
    119 
    +
    120  where = what;
    +
    121 
    +
    122  return where;
    +
    123 }
    +
    124 
    +
    139 template <class... Args>
    +
    140 auto set_mutexed(std::mutex& mut, Args&... args) {
    +
    141 
    +
    142  std::scoped_lock lock(mut);
    +
    143 
    +
    144  set_mutexed_impl(args...);
    +
    145 
    +
    146  return std::tuple(args...);
    +
    147 }
    +
    148 
    +
    164 template <class... Args>
    +
    165 auto set_mutexed(std::mutex& mut, const std::tuple<Args...> from, std::tuple<Args&...> to) {
    +
    166 
    +
    167  std::scoped_lock lock(mut);
    +
    168 
    +
    169  to = from;
    +
    170 
    +
    171  return to;
    +
    172 }
    +
    173 
    +
    174 } // namespace mrs_lib
    +
    175 
    +
    176 #endif
    +
    +
    +
    std::tuple< Args... > get_mutexed(std::mutex &mut, Args &... args)
    thread-safe getter for values of variables (args)
    Definition: mutex.h:48
    +
    void set_mutexed_impl(const T what, T &where)
    base case of the variadic template for set_mutexed()
    Definition: mutex.h:83
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    std::tuple< GetArgs... > get_set_mutexed(std::mutex &mut, std::tuple< GetArgs &... > get, std::tuple< SetArgs... > from_set, std::tuple< SetArgs &... > to_set)
    thread-safe getter and setter for values of variables (args)
    Definition: mutex.h:28
    +
    auto set_mutexed(std::mutex &mut, const T what, T &where)
    thread-safe setter for a variable
    Definition: mutex.h:116
    + + + + diff --git a/namespacemembers.html b/namespacemembers.html new file mode 100644 index 00000000..a241c98a --- /dev/null +++ b/namespacemembers.html @@ -0,0 +1,172 @@ + + + + + + + +mrs_lib: Namespace Members + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - c -

    + + +

    - g -

    + + +

    - m -

    + + +

    - p -

      +
    • ParamLoader::loadParam2< ros::Duration >() +: mrs_lib +
    • +
    • probit() +: mrs_lib +
    • +
    + + +

    - r -

    + + +

    - s -

    +
    +
    + + + + diff --git a/namespacemembers_func.html b/namespacemembers_func.html new file mode 100644 index 00000000..5d3b12f3 --- /dev/null +++ b/namespacemembers_func.html @@ -0,0 +1,165 @@ + + + + + + + +mrs_lib: Namespace Members + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +  + +

    - c -

    + + +

    - g -

    + + +

    - p -

      +
    • ParamLoader::loadParam2< ros::Duration >() +: mrs_lib +
    • +
    • probit() +: mrs_lib +
    • +
    + + +

    - r -

    + + +

    - s -

    +
    +
    + + + + diff --git a/namespacemembers_type.html b/namespacemembers_type.html new file mode 100644 index 00000000..b70510bf --- /dev/null +++ b/namespacemembers_type.html @@ -0,0 +1,102 @@ + + + + + + + +mrs_lib: Namespace Members + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    + + + + diff --git a/namespacemrs__lib.html b/namespacemrs__lib.html new file mode 100644 index 00000000..d455da4a --- /dev/null +++ b/namespacemrs__lib.html @@ -0,0 +1,2592 @@ + + + + + + + +mrs_lib: mrs_lib Namespace Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib Namespace Reference
    +
    +
    + +

    All mrs_lib functions, classes, variables and definitions are contained in this namespace. +More...

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  AtomicScopeFlag
     Convenience class for automatically setting and unsetting an atomic boolean based on the object's scope. Useful e.g. for indicating whether a thread is running or not. More...
     
    class  AttitudeConverter
     The main convertor class. Instantiate with any type in constructor and get the value in any other type by assigning the instance to your variable, as: tf::Quaternion tf1_quaternion = AttitudeConverter(roll, pitch, yaw); All the default Euler angles are in the extrinsic RPY notation. More...
     
    class  BatchVisualizer
     library for drawing large amounts of geometric objects in RVIZ at the same time More...
     
    class  DKF
     Implementation of the Degenerate measurement Linear Kalman filter. More...
     
    class  DynamicPublisher
     A helper class for easy publishing of ROS messages for debugging purposes. More...
     
    class  DynamicReconfigureMgr
     
    struct  eigenvector_exception
     This exception may be thrown when solving the generalized eigenvalue problem with the M and N matrices. More...
     
    class  EulerAttitude
     A small class for storing the Euler angles. More...
     
    class  IirFilter
     
    struct  ImagePubliserData
     
    class  ImagePublisher
     
    struct  Intersection
     
    class  JLKF
     
    class  KalmanFilter
     This abstract class defines common interfaces and types for a generic Kalman filter. More...
     
    class  KalmanFilterAloamGarm
     This abstract class defines common interfaces and types for a generic Kalman filter. More...
     
    class  LKF
     Implementation of the Linear Kalman filter [3]. More...
     
    class  LKF_MRS_odom
     
    class  MedianFilter
     Implementation of a median filter with a fixed-length buffer. More...
     
    class  MRSTimer
     Common wrapper representing the functionality of the ros::Timer. More...
     
    class  NCLKF
     This class implements the norm-constrained linear Kalman filter [5]. More...
     
    class  NCLKF_partial
     This class implements the partially norm-constrained linear Kalman filter [5]. More...
     
    class  NCUKF
     
    class  NotchFilter
     
    class  ParamLoader
     Convenience class for loading parameters from rosparam server. More...
     
    class  ParamProvider
     
    class  PointObstacle
     
    class  Polygon
     
    class  Profiler
     
    class  PublisherHandler
     user wrapper of the publisher handler implementation More...
     
    class  PublisherHandler_impl
     implementation of the publisher handler More...
     
    class  Repredictor
     Implementation of the Repredictor for fusing measurements with variable delays. More...
     
    class  RepredictorAloamgarm
     Implementation of the RepredictorAloamgarm for fusing measurements with variable delays. More...
     
    class  RHEIV
     Implementation of the Reduced Heteroscedastic Errors In Variables surface fitting algorithm [2]. More...
     
    class  RosParamProvider
     
    class  ROSTimer
     ros::Timer wrapper. The interface is the same as with ros::Timer, except for the initialization method. More...
     
    class  Routine
     
    class  SafetyZone
     
    class  ScopeTimer
     Simple timer which will time a duration of a scope and checkpoints inside the scope in ros time and std::chrono time. More...
     
    class  ScopeTimerLogger
     Simple file logger of scope timer and its checkpoints. More...
     
    class  ServiceClientHandler
     user wrapper of the service client handler implementation More...
     
    class  ServiceClientHandler_impl
     implementation of the service client handler More...
     
    class  SubscribeHandler
     The main class for ROS topic subscription, message timeout handling etc. More...
     
    struct  SubscribeHandlerOptions
     A helper class to simplify setup of SubscribeHandler construction. This class is passed to the SubscribeHandler constructor and specifies its common options. More...
     
    class  ThreadTimer
     Custom thread-based Timers with the same interface as mrs_lib::ROSTimer. More...
     
    class  TimeoutManager
     TODO. More...
     
    class  TransformBroadcaster
     Wrapper for the tf2_ros::TransformBroadcaster. With each sendTransform() command, the message is checked against the last message with the same frame IDs. If the transform was already published in this ros::Time step, then the transform is skipped. Prevents endless stream of warnings from spamming the console output. More...
     
    class  Transformer
     A convenience wrapper class for ROS's native TF2 API to simplify transforming of various messages. More...
     
    class  UKF
     Implementation of the Unscented Kalman filter [4]. More...
     
    class  varstepLKF
     
    class  Vector3Converter
     Converter of Vector3 representations. Instantiate it with any type of vector3 in constructor and convert it by assigning it to any other type of vector3 variable. More...
     
    class  VisualObject
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    +template<typename SubscribeHandler >
    using message_type = typename SubscribeHandler::message_type
     Helper alias for convenient extraction of handled message type from a SubscribeHandlerPtr.
     
    +using lkf_t = LKF< n_states, n_inputs, n_measurements >
     
    +using rep_t = Repredictor< lkf_t >
     
    +using rheiv_t = RHEIV< n_states, n_params >
     
    +using theta_t = rheiv_t::theta_t
     
    +using xs_t = rheiv_t::xs_t
     
    +using zs_t = rheiv_t::zs_t
     
    +using P_t = rheiv_t::P_t
     
    +using Ps_t = rheiv_t::Ps_t
     
    +using f_z_t = rheiv_t::f_z_t
     
    +using dzdx_t = rheiv_t::dzdx_t
     
    +using ukf_t = UKF< n_states, n_inputs, n_measurements >
     
    +using dumbrep_t = Repredictor< lkf_t, true >
     
    + + + + + +

    +Enumerations

    enum  RPY_convention_t { RPY_INTRINSIC = 1, +RPY_EXTRINSIC = 2 + }
     
    enum  MarkerType { POINT = 0, +LINE = 1, +TRIANGLE = 2 + }
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    double probit (const double quantile)
     Inverse cumulative distribution function of the standard normal probability distribution. More...
     
    std::tuple< double, double, double > getXYZ (const geometry_msgs::Point &data)
     get XYZ from geometry_msgs::Point More...
     
    std::tuple< double, double, double > getXYZ (const geometry_msgs::PointConstPtr &data)
     get XYZ from geometry_msgs::PointConstPtr More...
     
    std::tuple< double, double, double > getXYZ (const geometry_msgs::Vector3 &data)
     get XYZ from geometry_msgs::Vector3 More...
     
    std::tuple< double, double, double > getXYZ (const geometry_msgs::Vector3ConstPtr &data)
     get XYZ from geometry_msgs::Vector3ConstPtr More...
     
    std::tuple< double, double, double > getPosition (const geometry_msgs::Pose &data)
     get position from geometry_msgs::Pose More...
     
    std::tuple< double, double, double > getPosition (const geometry_msgs::PoseConstPtr &data)
     get position from geometry_msgs::PoseConstPtr More...
     
    double getHeading (const geometry_msgs::Pose &data)
     get heading from geometry_msgs::Pose More...
     
    double getHeading (const geometry_msgs::PoseConstPtr &data)
     get heading from geometry_msgs::PoseConstPtr More...
     
    double getYaw (const geometry_msgs::Pose &data)
     get yaw from geometry_msgs::Pose More...
     
    double getYaw (const geometry_msgs::PoseConstPtr &data)
     get yaw from geometry_msgs::PoseConstPtr More...
     
    std::tuple< double, double, double > getPosition (const geometry_msgs::PoseWithCovariance &data)
     get position from geometry_msgs::PoseWithCovariance More...
     
    std::tuple< double, double, double > getPosition (const geometry_msgs::PoseWithCovarianceConstPtr &data)
     get position from geometry_msgs::PoseWithCovarianceConstPtr More...
     
    double getHeading (const geometry_msgs::PoseWithCovariance &data)
     get heading from geometry_msgs::PoseWithCovariance More...
     
    double getHeading (const geometry_msgs::PoseWithCovarianceConstPtr &data)
     get heading from geometry_msgs::PoseWithCovarianceConstPtr More...
     
    double getYaw (const geometry_msgs::PoseWithCovariance &data)
     get yaw from geometry_msgs::PoseWithCovariance More...
     
    double getYaw (const geometry_msgs::PoseWithCovarianceConstPtr &data)
     get yaw from geometry_msgs::PoseWithCovarianceConstPtr More...
     
    std::tuple< double, double, double > getVelocity (const geometry_msgs::Twist &data)
     get velocity from geometry_msgs::Twist More...
     
    std::tuple< double, double, double > getPosition (const geometry_msgs::TwistConstPtr &data)
     get position from geometry_msgs::TwistConstPtr More...
     
    std::tuple< double, double, double > getVelocity (const geometry_msgs::TwistWithCovariance &data)
     get velocity from geometry_msgs::TwistWithCovariance More...
     
    std::tuple< double, double, double > getPosition (const geometry_msgs::TwistWithCovarianceConstPtr &data)
     get position from geometry_msgs::TwistWithCovarianceConstPtr More...
     
    std::tuple< double, double, double > getPosition (const nav_msgs::Odometry &data)
     get position from nav_msgs::Odometry More...
     
    std::tuple< double, double, double > getPosition (const nav_msgs::OdometryConstPtr &data)
     get position from nav_msgs::OdometryConstPtr More...
     
    std::tuple< double, double, double > getVelocity (const nav_msgs::Odometry &data)
     get position from nav_msgs::Odometry More...
     
    std::tuple< double, double, double > getVelocity (const nav_msgs::OdometryConstPtr &data)
     get velocity from nav_msgs::OdometryConstPtr More...
     
    double getHeading (const nav_msgs::Odometry &data)
     get heading from nav_msgs::Odometry More...
     
    double getHeading (const nav_msgs::OdometryConstPtr &data)
     get heading from nav_msgs::OdometryConstPtr More...
     
    double getYaw (const nav_msgs::Odometry &data)
     get yaw from nav_msgs::Odometry More...
     
    double getYaw (const nav_msgs::OdometryConstPtr &data)
     get yaw from nav_msgs::OdometryConstPtr More...
     
    geometry_msgs::Pose getPose (const nav_msgs::Odometry &data)
     returns the Pose part of the nav_msgs::Odometry message More...
     
    geometry_msgs::Pose getPose (const nav_msgs::OdometryConstPtr &data)
     returns the Pose part of the nav_msgs::OdometryConstPtr message More...
     
    std::tuple< double, double, double > getPosition (const mrs_msgs::TrackerCommand &data)
     get position data from mrs_msgs::TrackerCommand More...
     
    std::tuple< double, double, double > getPosition (const mrs_msgs::TrackerCommandConstPtr &data)
     get position data from mrs_msgs::TrackerCommandConstPtr More...
     
    std::tuple< double, double, double > getVelocity (const mrs_msgs::TrackerCommand &data)
     get velocity data from mrs_msgs::TrackerCommand More...
     
    std::tuple< double, double, double > getVelocity (const mrs_msgs::TrackerCommandConstPtr &data)
     get velocity data from mrs_msgs::TrackerCommandConstPtr More...
     
    double getHeading (const mrs_msgs::TrackerCommand &data)
     get heading from mrs_msgs::TrackerCommand More...
     
    double getHeading (const mrs_msgs::TrackerCommandConstPtr &data)
     get heading from mrs_msgs::TrackerCommandConstPtr More...
     
    std::tuple< double, double, double > getPosition (const mrs_msgs::Reference &data)
     get position from mrs_msgs::Reference More...
     
    std::tuple< double, double, double > getPosition (const mrs_msgs::ReferenceConstPtr &data)
     get position from mrs_msgs::ReferenceConstPtr More...
     
    double getHeading (const mrs_msgs::Reference &data)
     get heading from mrs_msgs::Reference More...
     
    double getHeading (const mrs_msgs::ReferenceConstPtr &data)
     get heading from mrs_msgs::ReferenceConstPtr More...
     
    std::tuple< double, double, double > getPosition (const mrs_msgs::ReferenceStamped &data)
     get position from mrs_msgs::ReferenceStamped More...
     
    std::tuple< double, double, double > getPosition (const mrs_msgs::ReferenceStampedConstPtr &data)
     get position from mrs_msgs::ReferenceStampedConstPtr More...
     
    double getHeading (const mrs_msgs::ReferenceStamped &data)
     get heading from mrs_msgs::ReferenceStamped More...
     
    double getHeading (const mrs_msgs::ReferenceStampedConstPtr &data)
     get heading from mrs_msgs::ReferenceStampedConstPtr More...
     
    template<class... GetArgs, class... SetArgs>
    std::tuple< GetArgs... > get_set_mutexed (std::mutex &mut, std::tuple< GetArgs &... > get, std::tuple< SetArgs... > from_set, std::tuple< SetArgs &... > to_set)
     thread-safe getter and setter for values of variables (args) More...
     
    template<class... Args>
    std::tuple< Args... > get_mutexed (std::mutex &mut, Args &... args)
     thread-safe getter for values of variables (args) More...
     
    template<class T >
    get_mutexed (std::mutex &mut, T &arg)
     thread-safe getter a value from a variable More...
     
    template<class T >
    void set_mutexed_impl (const T what, T &where)
     base case of the variadic template for set_mutexed() More...
     
    template<class T , class... Args>
    void set_mutexed_impl (const T what, T &where, Args... args)
     general case of the variadic template for set_mutexed() More...
     
    template<class T >
    auto set_mutexed (std::mutex &mut, const T what, T &where)
     thread-safe setter for a variable More...
     
    template<class... Args>
    auto set_mutexed (std::mutex &mut, Args &... args)
     thread-safe setter for multiple variables More...
     
    template<class... Args>
    auto set_mutexed (std::mutex &mut, const std::tuple< Args... > from, std::tuple< Args &... > to)
     thread-safe setter for multiple variables More...
     
    template<>
    ros::Duration ParamLoader::loadParam2< ros::Duration > (const std::string &name, const ros::Duration &default_value)
     An overload for loading ros::Duration. More...
     
    template<>
    ros::Duration ParamLoader::loadParam2< ros::Duration > (const std::string &name)
     An overload for loading ros::Duration. More...
     
    +Intersection sectionIntersect (Eigen::RowVector2d start1, Eigen::RowVector2d end1, Eigen::RowVector2d start2, Eigen::RowVector2d end2)
     
    template<typename Class , class ... Types>
    void construct_object (Class &object, Types ... args)
     Helper function for object construstion e.g. in case of member objects. This function is useful to avoid specifying object template parameters twice - once in definition of the variable and second time during object construction. This function can deduce the template parameters from the type of the already defined object, because it returns the newly constructed object as a reference argument and not as a return type. More...
     
    +bool breakable_sleep (const ros::Duration &dur, const std::atomic< bool > &continue_sleep)
     
    template<typename Iterator >
    std::string containerToString (const Iterator begin, const Iterator end, const std::string &delimiter=", ")
     Convenience function for converting container ranges to strings (e.g. for printing). More...
     
    template<typename Iterator >
    std::string containerToString (const Iterator begin, const Iterator end, const char *delimiter)
     Convenience function for converting container ranges to strings (e.g. for printing). More...
     
    template<typename Container >
    std::string containerToString (const Container &cont, const std::string &delimiter=", ")
     Convenience function for converting containers to strings (e.g. for printing). More...
     
    template<typename Container >
    std::string containerToString (const Container &cont, const char *delimiter=", ")
     Convenience function for converting containers to strings (e.g. for printing). More...
     
    template<typename T >
    T::iterator remove_const (const typename T::const_iterator &it, T &cont)
     Convenience class for removing const-ness from a container iterator. More...
     
    +template<typename T >
    int signum (T val)
     
    template<typename ret_t , typename in_t >
    ret_t convert (const in_t &in)
     Converts between different vector representations. More...
     
    +geometry_msgs::Point eigenToMsg (const Eigen::Vector3d &v)
     
    +std_msgs::ColorRGBA generateColor (const double r, const double g, const double b, const double a)
     
    +Eigen::Vector3d msgToEigen (const geometry_msgs::Point &p)
     
    +std::vector< Eigen::Vector3d > buildEllipse (const mrs_lib::geometry::Ellipse &ellipse, const int num_points)
     
    +template bool ParamProvider::getParam< std::string > (const std::string &name, std::string &out_value) const
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    +const double RADIANS_PER_DEGREE = M_PI / 180.0
     
    +const double DEGREES_PER_RADIAN = 180.0 / M_PI
     
    +const double WGS84_A = 6378137.0
     
    +const double WGS84_B = 6356752.31424518
     
    +const double WGS84_F = 0.0033528107
     
    +const double WGS84_E = 0.0818191908
     
    +const double WGS84_EP = 0.0820944379
     
    +const double UTM_K0 = 0.9996
     
    +const double UTM_FE = 500000.0
     
    +const double UTM_FN_N = 0.0
     
    +const double UTM_FN_S = 10000000.0
     
    +const double UTM_E2 = (WGS84_E * WGS84_E)
     
    +const double UTM_E4 = (UTM_E2 * UTM_E2)
     
    +const double UTM_E6 = (UTM_E4 * UTM_E2)
     
    +const double UTM_EP2 = (UTM_E2 / (1 - UTM_E2))
     
    +const int n_states = 4
     
    +const int n_inputs = 2
     
    +const int n_measurements = 2
     
    +const int n_states_norm_constrained = 2
     
    +const int n_params = 4
     
    +

    Detailed Description

    +

    All mrs_lib functions, classes, variables and definitions are contained in this namespace.

    +

    Function Documentation

    + +

    ◆ construct_object()

    + +
    +
    +
    +template<typename Class , class ... Types>
    + + + + + + + + + + + + + + + + + + +
    void mrs_lib::construct_object (Class & object,
    Types ... args 
    )
    +
    + +

    Helper function for object construstion e.g. in case of member objects. This function is useful to avoid specifying object template parameters twice - once in definition of the variable and second time during object construction. This function can deduce the template parameters from the type of the already defined object, because it returns the newly constructed object as a reference argument and not as a return type.

    +
    Parameters
    + + + +
    objectThe object to be constructed.
    argsThese arguments are passed to the object constructor.
    +
    +
    +
    Examples
    subscribe_handler/example.cpp.
    +
    + +
    +
    + +

    ◆ containerToString() [1/4]

    + +
    +
    +
    +template<typename Container >
    + + + + + + + + + + + + + + + + + + +
    std::string mrs_lib::containerToString (const Container & cont,
    const char * delimiter = ", " 
    )
    +
    + +

    Convenience function for converting containers to strings (e.g. for printing).

    +
    Parameters
    + + + +
    contthe container that will be converted to std::string.
    delimiterwill be used to separate the elements in the output.
    +
    +
    +
    Returns
    elements of the container from begin to end (excluding), converted to string and separated by delimiter.
    + +
    +
    + +

    ◆ containerToString() [2/4]

    + +
    +
    +
    +template<typename Container >
    + + + + + + + + + + + + + + + + + + +
    std::string mrs_lib::containerToString (const Container & cont,
    const std::string & delimiter = ", " 
    )
    +
    + +

    Convenience function for converting containers to strings (e.g. for printing).

    +
    Parameters
    + + + +
    contthe container that will be converted to std::string.
    delimiterwill be used to separate the elements in the output.
    +
    +
    +
    Returns
    elements of the container from begin to end (excluding), converted to string and separated by delimiter.
    + +
    +
    + +

    ◆ containerToString() [3/4]

    + +
    +
    +
    +template<typename Iterator >
    + + + + + + + + + + + + + + + + + + + + + + + + +
    std::string mrs_lib::containerToString (const Iterator begin,
    const Iterator end,
    const char * delimiter 
    )
    +
    + +

    Convenience function for converting container ranges to strings (e.g. for printing).

    +
    Parameters
    + + + + +
    beginfirst element of the container that will be converted to std::string.
    endone-after-the-last element of the container that will be converted to std::string.
    delimiterwill be used to separate the elements in the output.
    +
    +
    +
    Returns
    elements of the container from begin to end (excluding), converted to string and separated by delimiter.
    + +
    +
    + +

    ◆ containerToString() [4/4]

    + +
    +
    +
    +template<typename Iterator >
    + + + + + + + + + + + + + + + + + + + + + + + + +
    std::string mrs_lib::containerToString (const Iterator begin,
    const Iterator end,
    const std::string & delimiter = ", " 
    )
    +
    + +

    Convenience function for converting container ranges to strings (e.g. for printing).

    +
    Parameters
    + + + + +
    beginfirst element of the container that will be converted to std::string.
    endone-after-the-last element of the container that will be converted to std::string.
    delimiterwill be used to separate the elements in the output.
    +
    +
    +
    Returns
    elements of the container from begin to end (excluding), converted to string and separated by delimiter.
    + +
    +
    + +

    ◆ convert()

    + +
    +
    +
    +template<typename ret_t , typename in_t >
    + + + + + + + + +
    ret_t mrs_lib::convert (const in_t & in)
    +
    + +

    Converts between different vector representations.

    +

    Usage (for full example, see the file vector_converter/example.cpp):

    +

    auto out = mrs_lib::convert<to_type>(in);

    +

    Supported types by default are: Eigen::Vector3d, cv::Vec3d, geometry_msgs::Vector3. If you want to use this with a new type, it should work automagically if it provides a reasonable API. If it doesn't work by default, you just need to implement the respective convertTo() and convertFrom() functions for that type (see the file impl/vector_converter.hpp and the example file vector_converter/example.cpp).

    +
    Parameters
    + + +
    inThe input vector to be converted to the ret_t type.
    +
    +
    +
    Template Parameters
    + + + +
    ret_tType of the return vector. You need to specify this when calling the function.
    in_tType of the input vector. This parameter is deduced by the compiler and doesn't need to be specified in usual cases.
    +
    +
    + +
    +
    + +

    ◆ get_mutexed() [1/2]

    + +
    +
    +
    +template<class... Args>
    + + + + + + + + + + + + + + + + + + +
    std::tuple<Args...> mrs_lib::get_mutexed (std::mutex & mut,
    Args &... args 
    )
    +
    + +

    thread-safe getter for values of variables (args)

    +
    Template Parameters
    + + +
    Argstypes of the variables
    +
    +
    +
    Parameters
    + + + +
    mutmutex which protects the variables
    argsvariables to obtain the values from
    +
    +
    +
    Returns
    std::tuple of the values
    +
    Examples
    repredictor/example.cpp.
    +
    + +
    +
    + +

    ◆ get_mutexed() [2/2]

    + +
    +
    +
    +template<class T >
    + + + + + + + + + + + + + + + + + + +
    T mrs_lib::get_mutexed (std::mutex & mut,
    T & arg 
    )
    +
    + +

    thread-safe getter a value from a variable

    +
    Template Parameters
    + + +
    Ttype of the variable
    +
    +
    +
    Parameters
    + + + +
    mutmutex which protects the variable
    argvariable to obtain the value from
    +
    +
    +
    Returns
    value of the variable
    + +
    +
    + +

    ◆ get_set_mutexed()

    + +
    +
    +
    +template<class... GetArgs, class... SetArgs>
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    std::tuple<GetArgs...> mrs_lib::get_set_mutexed (std::mutex & mut,
    std::tuple< GetArgs &... > get,
    std::tuple< SetArgs... > from_set,
    std::tuple< SetArgs &... > to_set 
    )
    +
    + +

    thread-safe getter and setter for values of variables (args)

    +
    Template Parameters
    + + + +
    GetArgstypes of the variables to get
    SetArgstypes of the variables to set
    +
    +
    +
    Parameters
    + + + + + +
    mutmutex which protects the variables
    gettuple of variable references to obtain the values from
    to_settuple of variable references to set the new values from from_set
    from_settuple of the new values to be set to to_set
    +
    +
    +
    Returns
    tuple of the values from get
    + +
    +
    + +

    ◆ getHeading() [1/12]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getHeading (const geometry_msgs::Pose & data)
    +
    + +

    get heading from geometry_msgs::Pose

    +
    Parameters
    + + +
    datapose
    +
    +
    +
    Returns
    heading
    + +
    +
    + +

    ◆ getHeading() [2/12]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getHeading (const geometry_msgs::PoseConstPtr & data)
    +
    + +

    get heading from geometry_msgs::PoseConstPtr

    +
    Parameters
    + + +
    datapose (ConstPtr)
    +
    +
    +
    Returns
    heading
    + +
    +
    + +

    ◆ getHeading() [3/12]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getHeading (const geometry_msgs::PoseWithCovariance & data)
    +
    + +

    get heading from geometry_msgs::PoseWithCovariance

    +
    Parameters
    + + +
    datapose with covariance
    +
    +
    +
    Returns
    heading
    + +
    +
    + +

    ◆ getHeading() [4/12]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getHeading (const geometry_msgs::PoseWithCovarianceConstPtr & data)
    +
    + +

    get heading from geometry_msgs::PoseWithCovarianceConstPtr

    +
    Parameters
    + + +
    datapose with covariance (ConstPtr)
    +
    +
    +
    Returns
    heading
    + +
    +
    + +

    ◆ getHeading() [5/12]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getHeading (const mrs_msgs::Reference & data)
    +
    + +

    get heading from mrs_msgs::Reference

    +
    Parameters
    + + +
    datareference
    +
    +
    +
    Returns
    heading
    + +
    +
    + +

    ◆ getHeading() [6/12]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getHeading (const mrs_msgs::ReferenceConstPtr & data)
    +
    + +

    get heading from mrs_msgs::ReferenceConstPtr

    +
    Parameters
    + + +
    datareference (ContrPtr)
    +
    +
    +
    Returns
    heading
    + +
    +
    + +

    ◆ getHeading() [7/12]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getHeading (const mrs_msgs::ReferenceStamped & data)
    +
    + +

    get heading from mrs_msgs::ReferenceStamped

    +
    Parameters
    + + +
    datareferencestamped
    +
    +
    +
    Returns
    heading
    + +
    +
    + +

    ◆ getHeading() [8/12]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getHeading (const mrs_msgs::ReferenceStampedConstPtr & data)
    +
    + +

    get heading from mrs_msgs::ReferenceStampedConstPtr

    +
    Parameters
    + + +
    datareferencestamped (ContrPtr)
    +
    +
    +
    Returns
    heading
    + +
    +
    + +

    ◆ getHeading() [9/12]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getHeading (const mrs_msgs::TrackerCommand & data)
    +
    + +

    get heading from mrs_msgs::TrackerCommand

    +
    Parameters
    + + +
    dataposition command
    +
    +
    +
    Returns
    heading
    + +
    +
    + +

    ◆ getHeading() [10/12]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getHeading (const mrs_msgs::TrackerCommandConstPtr & data)
    +
    + +

    get heading from mrs_msgs::TrackerCommandConstPtr

    +
    Parameters
    + + +
    dataposition command (ConstPtr)
    +
    +
    +
    Returns
    heading
    + +
    +
    + +

    ◆ getHeading() [11/12]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getHeading (const nav_msgs::Odometry & data)
    +
    + +

    get heading from nav_msgs::Odometry

    +
    Parameters
    + + +
    dataodometry
    +
    +
    +
    Returns
    heading
    + +
    +
    + +

    ◆ getHeading() [12/12]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getHeading (const nav_msgs::OdometryConstPtr & data)
    +
    + +

    get heading from nav_msgs::OdometryConstPtr

    +
    Parameters
    + + +
    dataodometry (ConstPtr)
    +
    +
    +
    Returns
    heading
    + +
    +
    + +

    ◆ getPose() [1/2]

    + +
    +
    + + + + + + + + +
    geometry_msgs::Pose mrs_lib::getPose (const nav_msgs::Odometry & data)
    +
    + +

    returns the Pose part of the nav_msgs::Odometry message

    +
    Parameters
    + + +
    dataodometry
    +
    +
    +
    Returns
    pose
    + +
    +
    + +

    ◆ getPose() [2/2]

    + +
    +
    + + + + + + + + +
    geometry_msgs::Pose mrs_lib::getPose (const nav_msgs::OdometryConstPtr & data)
    +
    + +

    returns the Pose part of the nav_msgs::OdometryConstPtr message

    +
    Parameters
    + + +
    dataodometry (ConstPtr)
    +
    +
    +
    Returns
    pose
    + +
    +
    + +

    ◆ getPosition() [1/14]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getPosition (const geometry_msgs::Pose & data)
    +
    + +

    get position from geometry_msgs::Pose

    +
    Parameters
    + + +
    datapose
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getPosition() [2/14]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getPosition (const geometry_msgs::PoseConstPtr & data)
    +
    + +

    get position from geometry_msgs::PoseConstPtr

    +
    Parameters
    + + +
    datapose (ConstPtr)
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getPosition() [3/14]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getPosition (const geometry_msgs::PoseWithCovariance & data)
    +
    + +

    get position from geometry_msgs::PoseWithCovariance

    +
    Parameters
    + + +
    datapose with covariance
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getPosition() [4/14]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getPosition (const geometry_msgs::PoseWithCovarianceConstPtr & data)
    +
    + +

    get position from geometry_msgs::PoseWithCovarianceConstPtr

    +
    Parameters
    + + +
    datapose with covariance (ConstPtr)
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getPosition() [5/14]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getPosition (const geometry_msgs::TwistConstPtr & data)
    +
    + +

    get position from geometry_msgs::TwistConstPtr

    +
    Parameters
    + + +
    datatwist (ConstPtr)
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getPosition() [6/14]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getPosition (const geometry_msgs::TwistWithCovarianceConstPtr & data)
    +
    + +

    get position from geometry_msgs::TwistWithCovarianceConstPtr

    +
    Parameters
    + + +
    datatwistwithcovariance (ConstPtr)
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getPosition() [7/14]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getPosition (const mrs_msgs::Reference & data)
    +
    + +

    get position from mrs_msgs::Reference

    +
    Parameters
    + + +
    datareference
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getPosition() [8/14]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getPosition (const mrs_msgs::ReferenceConstPtr & data)
    +
    + +

    get position from mrs_msgs::ReferenceConstPtr

    +
    Parameters
    + + +
    datareference (ContrPtr)
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getPosition() [9/14]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getPosition (const mrs_msgs::ReferenceStamped & data)
    +
    + +

    get position from mrs_msgs::ReferenceStamped

    +
    Parameters
    + + +
    datareference stamped
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getPosition() [10/14]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getPosition (const mrs_msgs::ReferenceStampedConstPtr & data)
    +
    + +

    get position from mrs_msgs::ReferenceStampedConstPtr

    +
    Parameters
    + + +
    datareference stamped (ContrPtr)
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getPosition() [11/14]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getPosition (const mrs_msgs::TrackerCommand & data)
    +
    + +

    get position data from mrs_msgs::TrackerCommand

    +
    Parameters
    + + +
    dataposition command
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getPosition() [12/14]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getPosition (const mrs_msgs::TrackerCommandConstPtr & data)
    +
    + +

    get position data from mrs_msgs::TrackerCommandConstPtr

    +
    Parameters
    + + +
    dataposition command (ConstPtr)
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getPosition() [13/14]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getPosition (const nav_msgs::Odometry & data)
    +
    + +

    get position from nav_msgs::Odometry

    +
    Parameters
    + + +
    dataodometry
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getPosition() [14/14]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getPosition (const nav_msgs::OdometryConstPtr & data)
    +
    + +

    get position from nav_msgs::OdometryConstPtr

    +
    Parameters
    + + +
    dataodometry (ConstPtr)
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getVelocity() [1/6]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getVelocity (const geometry_msgs::Twist & data)
    +
    + +

    get velocity from geometry_msgs::Twist

    +
    Parameters
    + + +
    datatwist
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getVelocity() [2/6]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getVelocity (const geometry_msgs::TwistWithCovariance & data)
    +
    + +

    get velocity from geometry_msgs::TwistWithCovariance

    +
    Parameters
    + + +
    datatwistwithcovariance
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getVelocity() [3/6]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getVelocity (const mrs_msgs::TrackerCommand & data)
    +
    + +

    get velocity data from mrs_msgs::TrackerCommand

    +
    Parameters
    + + +
    dataposition command
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getVelocity() [4/6]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getVelocity (const mrs_msgs::TrackerCommandConstPtr & data)
    +
    + +

    get velocity data from mrs_msgs::TrackerCommandConstPtr

    +
    Parameters
    + + +
    dataposition command (ConstPtr)
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getVelocity() [5/6]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getVelocity (const nav_msgs::Odometry & data)
    +
    + +

    get position from nav_msgs::Odometry

    +
    Parameters
    + + +
    dataodometry
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getVelocity() [6/6]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getVelocity (const nav_msgs::OdometryConstPtr & data)
    +
    + +

    get velocity from nav_msgs::OdometryConstPtr

    +
    Parameters
    + + +
    dataodometry (ConstPtr)
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getXYZ() [1/4]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getXYZ (const geometry_msgs::Point & data)
    +
    + +

    get XYZ from geometry_msgs::Point

    +
    Parameters
    + + +
    datapoint
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getXYZ() [2/4]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getXYZ (const geometry_msgs::PointConstPtr & data)
    +
    + +

    get XYZ from geometry_msgs::PointConstPtr

    +
    Parameters
    + + +
    datapoint (ConstPtr)
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getXYZ() [3/4]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getXYZ (const geometry_msgs::Vector3 & data)
    +
    + +

    get XYZ from geometry_msgs::Vector3

    +
    Parameters
    + + +
    datavector3
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getXYZ() [4/4]

    + +
    +
    + + + + + + + + +
    std::tuple<double, double, double> mrs_lib::getXYZ (const geometry_msgs::Vector3ConstPtr & data)
    +
    + +

    get XYZ from geometry_msgs::Vector3ConstPtr

    +
    Parameters
    + + +
    datavector3 (ConstPtr)
    +
    +
    +
    Returns
    x, y, z
    + +
    +
    + +

    ◆ getYaw() [1/6]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getYaw (const geometry_msgs::Pose & data)
    +
    + +

    get yaw from geometry_msgs::Pose

    +
    Parameters
    + + +
    datapose
    +
    +
    +
    Returns
    yaw
    + +
    +
    + +

    ◆ getYaw() [2/6]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getYaw (const geometry_msgs::PoseConstPtr & data)
    +
    + +

    get yaw from geometry_msgs::PoseConstPtr

    +
    Parameters
    + + +
    datapose (ConstPtr)
    +
    +
    +
    Returns
    yaw
    + +
    +
    + +

    ◆ getYaw() [3/6]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getYaw (const geometry_msgs::PoseWithCovariance & data)
    +
    + +

    get yaw from geometry_msgs::PoseWithCovariance

    +
    Parameters
    + + +
    datapose with covariance
    +
    +
    +
    Returns
    yaw
    + +
    +
    + +

    ◆ getYaw() [4/6]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getYaw (const geometry_msgs::PoseWithCovarianceConstPtr & data)
    +
    + +

    get yaw from geometry_msgs::PoseWithCovarianceConstPtr

    +
    Parameters
    + + +
    datapose with covariance (ConstPtr)
    +
    +
    +
    Returns
    yaw
    + +
    +
    + +

    ◆ getYaw() [5/6]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getYaw (const nav_msgs::Odometry & data)
    +
    + +

    get yaw from nav_msgs::Odometry

    +
    Parameters
    + + +
    dataodometry
    +
    +
    +
    Returns
    yaw
    + +
    +
    + +

    ◆ getYaw() [6/6]

    + +
    +
    + + + + + + + + +
    double mrs_lib::getYaw (const nav_msgs::OdometryConstPtr & data)
    +
    + +

    get yaw from nav_msgs::OdometryConstPtr

    +
    Parameters
    + + +
    dataodometry (ConstPtr)
    +
    +
    +
    Returns
    yaw
    + +
    +
    + +

    ◆ ParamLoader::loadParam2< ros::Duration >() [1/2]

    + +
    +
    +
    +template<>
    + + + + + + + + +
    ros::Duration mrs_lib::ParamLoader::loadParam2< ros::Duration > (const std::string & name)
    +
    + +

    An overload for loading ros::Duration.

    +

    The duration will be loaded as a double, representing a number of seconds, and then converted to ros::Duration.

    +
    Parameters
    + + +
    nameName of the parameter in the rosparam server.
    +
    +
    +
    Returns
    The loaded parameter value.
    + +
    +
    + +

    ◆ ParamLoader::loadParam2< ros::Duration >() [2/2]

    + +
    +
    +
    +template<>
    + + + + + + + + + + + + + + + + + + +
    ros::Duration mrs_lib::ParamLoader::loadParam2< ros::Duration > (const std::string & name,
    const ros::Duration & default_value 
    )
    +
    + +

    An overload for loading ros::Duration.

    +

    The duration will be loaded as a double, representing a number of seconds, and then converted to ros::Duration.

    +
    Parameters
    + + + +
    nameName of the parameter in the rosparam server.
    default_valueThis value will be used if the parameter name is not found in the rosparam server.
    +
    +
    +
    Returns
    The loaded parameter value.
    + +
    +
    + +

    ◆ probit()

    + +
    +
    + + + + + + + + +
    double mrs_lib::probit (const double quantile)
    +
    + +

    Inverse cumulative distribution function of the standard normal probability distribution.

    +

    Implements the quantile function of a standard normal probability distribution (aka the probit function, see https://en.wikipedia.org/wiki/Probit). The implementation uses the Beasley-Springer-Moro approximation (see page 68 of Glasserman, Paul, "Monte Carlo Methods in Financial Engineering. Stochastic Modelling and Applied Probability", 2003, doi:10.1007/978-0-387-21617-1, available at https://sci-hub.se/10.1007/978-0-387-21617-1).

    +
    Parameters
    + + +
    quantilethe probability that a realization of a random variable with a standard normal dostribution is equal or less than the returned value (see https://en.wikipedia.org/wiki/Quantile).
    +
    +
    +
    Returns
    such a value that the probability that a realization of a random variable with a standard normal dostribution is equal or less is quantile.
    + +
    +
    + +

    ◆ remove_const()

    + +
    +
    +
    +template<typename T >
    + + + + + + + + + + + + + + + + + + +
    T::iterator mrs_lib::remove_const (const typename T::const_iterator & it,
    T & cont 
    )
    +
    + +

    Convenience class for removing const-ness from a container iterator.

    +
    Parameters
    + + + +
    itthe iterator from which const-ness should be removed.
    contthe corresponding container of the iterator.
    +
    +
    +
    Returns
    a non-const iterator, pointing to the same element as it.
    + +
    +
    + +

    ◆ set_mutexed() [1/3]

    + +
    +
    +
    +template<class... Args>
    + + + + + + + + + + + + + + + + + + +
    auto mrs_lib::set_mutexed (std::mutex & mut,
    Args &... args 
    )
    +
    + +

    thread-safe setter for multiple variables

    +

    example: set_mutexed(my_mutex_, a, a_, b, b_, c, c_); where a, b, c are the values to be set a_, b_, c_ are the variables to be updated

    +
    Template Parameters
    + + +
    Argstypes of the variables
    +
    +
    +
    Parameters
    + + + +
    mutmutex to be locked
    args
    +
    +
    +
    Returns
    alternating list of values that were just set
    + +
    +
    + +

    ◆ set_mutexed() [2/3]

    + +
    +
    +
    +template<class... Args>
    + + + + + + + + + + + + + + + + + + + + + + + + +
    auto mrs_lib::set_mutexed (std::mutex & mut,
    const std::tuple< Args... > from,
    std::tuple< Args &... > to 
    )
    +
    + +

    thread-safe setter for multiple variables

    +

    example: set_mutexed(mu_mutex, std::tuple(a, b, c), std::forward_as_tuple(a_, b_, c_)); where a, b, c are the values to be set a_, b_, c_ are the updated variables

    +
    Template Parameters
    + + +
    Argstypes of the variables
    +
    +
    +
    Parameters
    + + + + +
    mutmutex to be locked
    fromstd::tuple of the values
    tostd::tuple of reference to the variablaes
    +
    +
    +
    Returns
    + +
    +
    + +

    ◆ set_mutexed() [3/3]

    + +
    +
    +
    +template<class T >
    + + + + + + + + + + + + + + + + + + + + + + + + +
    auto mrs_lib::set_mutexed (std::mutex & mut,
    const T what,
    T & where 
    )
    +
    + +

    thread-safe setter for a variable

    +
    Template Parameters
    + + +
    Ttype of the variable
    +
    +
    +
    Parameters
    + + + + +
    mutmutex to be locked
    whatvalue to set
    wherereference to be set
    +
    +
    +
    Returns
    +
    Examples
    repredictor/example.cpp.
    +
    + +
    +
    + +

    ◆ set_mutexed_impl() [1/2]

    + +
    +
    +
    +template<class T >
    + + + + + + + + + + + + + + + + + + +
    void mrs_lib::set_mutexed_impl (const T what,
    T & where 
    )
    +
    + +

    base case of the variadic template for set_mutexed()

    +
    Template Parameters
    + + +
    Tvariable type
    +
    +
    +
    Parameters
    + + + +
    whatvalue to set
    wherereference to be set
    +
    +
    + +
    +
    + +

    ◆ set_mutexed_impl() [2/2]

    + +
    +
    +
    +template<class T , class... Args>
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void mrs_lib::set_mutexed_impl (const T what,
    T & where,
    Args... args 
    )
    +
    + +

    general case of the variadic template for set_mutexed()

    +
    Template Parameters
    + + + +
    Ttype of the next variable to set
    Argstypes of the rest of the variables
    +
    +
    +
    Parameters
    + + + + +
    whatvalue to set
    wherereference to be set
    argsthe remaining arguments
    +
    +
    + +
    +
    +
    +
    + + + + diff --git a/namespacemrs__lib.js b/namespacemrs__lib.js new file mode 100644 index 00000000..c23adb38 --- /dev/null +++ b/namespacemrs__lib.js @@ -0,0 +1,71 @@ +var namespacemrs__lib = +[ + [ "geometry", null, [ + [ "Cone", "classmrs__lib_1_1geometry_1_1Cone.html", "classmrs__lib_1_1geometry_1_1Cone" ], + [ "Cuboid", "classmrs__lib_1_1geometry_1_1Cuboid.html", "classmrs__lib_1_1geometry_1_1Cuboid" ], + [ "cyclic", "structmrs__lib_1_1geometry_1_1cyclic.html", "structmrs__lib_1_1geometry_1_1cyclic" ], + [ "Cylinder", "classmrs__lib_1_1geometry_1_1Cylinder.html", "classmrs__lib_1_1geometry_1_1Cylinder" ], + [ "degrees", "structmrs__lib_1_1geometry_1_1degrees.html", null ], + [ "Ellipse", "classmrs__lib_1_1geometry_1_1Ellipse.html", "classmrs__lib_1_1geometry_1_1Ellipse" ], + [ "radians", "structmrs__lib_1_1geometry_1_1radians.html", null ], + [ "Ray", "classmrs__lib_1_1geometry_1_1Ray.html", "classmrs__lib_1_1geometry_1_1Ray" ], + [ "Rectangle", "classmrs__lib_1_1geometry_1_1Rectangle.html", "classmrs__lib_1_1geometry_1_1Rectangle" ], + [ "sdegrees", "structmrs__lib_1_1geometry_1_1sdegrees.html", null ], + [ "sradians", "structmrs__lib_1_1geometry_1_1sradians.html", null ], + [ "Triangle", "classmrs__lib_1_1geometry_1_1Triangle.html", "classmrs__lib_1_1geometry_1_1Triangle" ] + ] ], + [ "quadratic_throttle_model", null, [ + [ "MotorParams_t", "structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t.html", "structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t" ] + ] ], + [ "AtomicScopeFlag", "classmrs__lib_1_1AtomicScopeFlag.html", "classmrs__lib_1_1AtomicScopeFlag" ], + [ "AttitudeConverter", "classmrs__lib_1_1AttitudeConverter.html", "classmrs__lib_1_1AttitudeConverter" ], + [ "BatchVisualizer", "classmrs__lib_1_1BatchVisualizer.html", "classmrs__lib_1_1BatchVisualizer" ], + [ "DKF", "classmrs__lib_1_1DKF.html", "classmrs__lib_1_1DKF" ], + [ "DynamicPublisher", "classmrs__lib_1_1DynamicPublisher.html", "classmrs__lib_1_1DynamicPublisher" ], + [ "DynamicReconfigureMgr", "classmrs__lib_1_1DynamicReconfigureMgr.html", "classmrs__lib_1_1DynamicReconfigureMgr" ], + [ "eigenvector_exception", "structmrs__lib_1_1eigenvector__exception.html", "structmrs__lib_1_1eigenvector__exception" ], + [ "EulerAttitude", "classmrs__lib_1_1EulerAttitude.html", "classmrs__lib_1_1EulerAttitude" ], + [ "IirFilter", "classmrs__lib_1_1IirFilter.html", "classmrs__lib_1_1IirFilter" ], + [ "ImagePubliserData", "structmrs__lib_1_1ImagePubliserData.html", "structmrs__lib_1_1ImagePubliserData" ], + [ "ImagePublisher", "classmrs__lib_1_1ImagePublisher.html", "classmrs__lib_1_1ImagePublisher" ], + [ "Intersection", "structmrs__lib_1_1Intersection.html", "structmrs__lib_1_1Intersection" ], + [ "JLKF", "classmrs__lib_1_1JLKF.html", "classmrs__lib_1_1JLKF" ], + [ "KalmanFilter", "classmrs__lib_1_1KalmanFilter.html", "classmrs__lib_1_1KalmanFilter" ], + [ "KalmanFilterAloamGarm", "classmrs__lib_1_1KalmanFilterAloamGarm.html", "classmrs__lib_1_1KalmanFilterAloamGarm" ], + [ "LKF", "classmrs__lib_1_1LKF.html", "classmrs__lib_1_1LKF" ], + [ "LKF_MRS_odom", "classmrs__lib_1_1LKF__MRS__odom.html", "classmrs__lib_1_1LKF__MRS__odom" ], + [ "MedianFilter", "classmrs__lib_1_1MedianFilter.html", "classmrs__lib_1_1MedianFilter" ], + [ "MRSTimer", "classmrs__lib_1_1MRSTimer.html", "classmrs__lib_1_1MRSTimer" ], + [ "NCLKF", "classmrs__lib_1_1NCLKF.html", "classmrs__lib_1_1NCLKF" ], + [ "NCLKF_partial", "classmrs__lib_1_1NCLKF__partial.html", "classmrs__lib_1_1NCLKF__partial" ], + [ "NCUKF", "classmrs__lib_1_1NCUKF.html", "classmrs__lib_1_1NCUKF" ], + [ "NotchFilter", "classmrs__lib_1_1NotchFilter.html", "classmrs__lib_1_1NotchFilter" ], + [ "ParamLoader", "classmrs__lib_1_1ParamLoader.html", "classmrs__lib_1_1ParamLoader" ], + [ "ParamProvider", "classmrs__lib_1_1ParamProvider.html", "classmrs__lib_1_1ParamProvider" ], + [ "PointObstacle", "classmrs__lib_1_1PointObstacle.html", "classmrs__lib_1_1PointObstacle" ], + [ "Polygon", "classmrs__lib_1_1Polygon.html", "classmrs__lib_1_1Polygon" ], + [ "Profiler", "classmrs__lib_1_1Profiler.html", "classmrs__lib_1_1Profiler" ], + [ "PublisherHandler", "classmrs__lib_1_1PublisherHandler.html", "classmrs__lib_1_1PublisherHandler" ], + [ "PublisherHandler_impl", "classmrs__lib_1_1PublisherHandler__impl.html", "classmrs__lib_1_1PublisherHandler__impl" ], + [ "Repredictor", "classmrs__lib_1_1Repredictor.html", "classmrs__lib_1_1Repredictor" ], + [ "RepredictorAloamgarm", "classmrs__lib_1_1RepredictorAloamgarm.html", "classmrs__lib_1_1RepredictorAloamgarm" ], + [ "RHEIV", "classmrs__lib_1_1RHEIV.html", "classmrs__lib_1_1RHEIV" ], + [ "RosParamProvider", "classmrs__lib_1_1RosParamProvider.html", "classmrs__lib_1_1RosParamProvider" ], + [ "ROSTimer", "classmrs__lib_1_1ROSTimer.html", "classmrs__lib_1_1ROSTimer" ], + [ "Routine", "classmrs__lib_1_1Routine.html", "classmrs__lib_1_1Routine" ], + [ "SafetyZone", "classmrs__lib_1_1SafetyZone.html", "classmrs__lib_1_1SafetyZone" ], + [ "ScopeTimer", "classmrs__lib_1_1ScopeTimer.html", "classmrs__lib_1_1ScopeTimer" ], + [ "ScopeTimerLogger", "classmrs__lib_1_1ScopeTimerLogger.html", "classmrs__lib_1_1ScopeTimerLogger" ], + [ "ServiceClientHandler", "classmrs__lib_1_1ServiceClientHandler.html", "classmrs__lib_1_1ServiceClientHandler" ], + [ "ServiceClientHandler_impl", "classmrs__lib_1_1ServiceClientHandler__impl.html", "classmrs__lib_1_1ServiceClientHandler__impl" ], + [ "SubscribeHandler", "classmrs__lib_1_1SubscribeHandler.html", "classmrs__lib_1_1SubscribeHandler" ], + [ "SubscribeHandlerOptions", "structmrs__lib_1_1SubscribeHandlerOptions.html", "structmrs__lib_1_1SubscribeHandlerOptions" ], + [ "ThreadTimer", "classmrs__lib_1_1ThreadTimer.html", "classmrs__lib_1_1ThreadTimer" ], + [ "TimeoutManager", "classmrs__lib_1_1TimeoutManager.html", "classmrs__lib_1_1TimeoutManager" ], + [ "TransformBroadcaster", "classmrs__lib_1_1TransformBroadcaster.html", "classmrs__lib_1_1TransformBroadcaster" ], + [ "Transformer", "classmrs__lib_1_1Transformer.html", "classmrs__lib_1_1Transformer" ], + [ "UKF", "classmrs__lib_1_1UKF.html", "classmrs__lib_1_1UKF" ], + [ "varstepLKF", "classmrs__lib_1_1varstepLKF.html", "classmrs__lib_1_1varstepLKF" ], + [ "Vector3Converter", "classmrs__lib_1_1Vector3Converter.html", "classmrs__lib_1_1Vector3Converter" ], + [ "VisualObject", "classmrs__lib_1_1VisualObject.html", "classmrs__lib_1_1VisualObject" ] +]; \ No newline at end of file diff --git a/namespaces.html b/namespaces.html new file mode 100644 index 00000000..eaf35896 --- /dev/null +++ b/namespaces.html @@ -0,0 +1,106 @@ + + + + + + + +mrs_lib: Namespace List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Namespace List
    +
    +
    +
    Here is a list of all documented namespaces with brief descriptions:
    + + +
     Nmrs_libAll mrs_lib functions, classes, variables and definitions are contained in this namespace
    +
    +
    +
    + + + + diff --git a/namespaces_dup.js b/namespaces_dup.js new file mode 100644 index 00000000..71db49b7 --- /dev/null +++ b/namespaces_dup.js @@ -0,0 +1,4 @@ +var namespaces_dup = +[ + [ "mrs_lib", "namespacemrs__lib.html", null ] +]; \ No newline at end of file diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 00000000..72a58a52 Binary files /dev/null and b/nav_f.png differ diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 00000000..2093a237 Binary files /dev/null and b/nav_g.png differ diff --git a/nav_h.png b/nav_h.png new file mode 100644 index 00000000..33389b10 Binary files /dev/null and b/nav_h.png differ diff --git a/navtree.css b/navtree.css new file mode 100644 index 00000000..33341a67 --- /dev/null +++ b/navtree.css @@ -0,0 +1,146 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; + outline:none; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:#fff; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + background-color: #FAFAFF; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: 250px; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url("splitbar.png"); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/navtree.js b/navtree.js new file mode 100644 index 00000000..edc31efc --- /dev/null +++ b/navtree.js @@ -0,0 +1,544 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2019 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of version 2 of the GNU General Public License as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +var navTreeSubIndices = new Array(); +var arrowDown = '▼'; +var arrowRight = '►'; + +function getData(varName) +{ + var i = varName.lastIndexOf('/'); + var n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/\-/g,'_')); +} + +function stripPath(uri) +{ + return uri.substring(uri.lastIndexOf('/')+1); +} + +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + +function hashValue() +{ + return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); +} + +function hashUrl() +{ + return '#'+hashValue(); +} + +function pathName() +{ + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); +} + +function localStorageSupported() +{ + try { + return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + } + catch(e) { + return false; + } +} + +function storeLink(link) +{ + if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { + window.localStorage.setItem('navpath',link); + } +} + +function deleteLink() +{ + if (localStorageSupported()) { + window.localStorage.setItem('navpath',''); + } +} + +function cachedLink() +{ + if (localStorageSupported()) { + return window.localStorage.getItem('navpath'); + } else { + return ''; + } +} + +function getScript(scriptName,func,show) +{ + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); +} + +function createIndent(o,domNode,node,level) +{ + var level=-1; + var n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + var imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=arrowRight; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=arrowRight; + node.expanded = false; + } else { + expandNode(o, node, false, false); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + var span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } +} + +var animationInProgress = false; + +function gotoAnchor(anchor,aname,updateLocation) +{ + var pos, docContent = $('#doc-content'); + var ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || + ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || + ancParent.hasClass('fieldtype') || + ancParent.is(':header')) + { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + var dist = Math.abs(Math.min( + pos-docContent.offset().top, + docContent[0].scrollHeight- + docContent.height()-docContent.scrollTop())); + animationInProgress=true; + docContent.animate({ + scrollTop: pos + docContent.scrollTop() - docContent.offset().top + },Math.max(50,Math.min(500,dist)),function(){ + if (updateLocation) window.location.href=aname; + animationInProgress=false; + }); + } +} + +function newNode(o, po, text, link, childrenData, lastNode) +{ + var node = new Object(); + node.children = Array(); + node.childrenData = childrenData; + node.depth = po.depth + 1; + node.relpath = po.relpath; + node.isLast = lastNode; + + node.li = document.createElement("li"); + po.getChildrenUL().appendChild(node.li); + node.parentNode = po; + + node.itemDiv = document.createElement("div"); + node.itemDiv.className = "item"; + + node.labelSpan = document.createElement("span"); + node.labelSpan.className = "label"; + + createIndent(o,node.itemDiv,node,0); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + var a = document.createElement("a"); + node.labelSpan.appendChild(a); + node.label = document.createTextNode(text); + node.expanded = false; + a.appendChild(node.label); + if (link) { + var url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + var aname = '#'+link.split('#')[1]; + var srcPage = stripPath(pathName()); + var targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.onclick = function(){ + storeLink(link); + if (!$(a).parent().parent().hasClass('selected')) + { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + $(a).parent().parent().addClass('selected'); + $(a).parent().parent().attr('id','selected'); + } + var anchor = $(aname); + gotoAnchor(anchor,aname,true); + }; + } else { + a.href = url; + a.onclick = function() { storeLink(link); } + } + } else { + if (childrenData != null) + { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + } + + node.childrenUL = null; + node.getChildrenUL = function() { + if (!node.childrenUL) { + node.childrenUL = document.createElement("ul"); + node.childrenUL.className = "children_ul"; + node.childrenUL.style.display = "none"; + node.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }; + + return node; +} + +function showRoot() +{ + var headerHeight = $("#top").height(); + var footerHeight = $("#nav-path").height(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + (function (){ // retry until we can scroll to the selected item + try { + var navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); +} + +function expandNode(o, node, imm, showRoot) +{ + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + expandNode(o, node, imm, showRoot); + }, showRoot); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + } + } +} + +function glowEffect(n,duration) +{ + n.addClass('glow').delay(duration).queue(function(next){ + $(this).removeClass('glow');next(); + }); +} + +function highlightAnchor() +{ + var aname = hashUrl(); + var anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft'){ + var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname'){ + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype'){ + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } +} + +function selectAndHighlight(hash,n) +{ + var a; + if (hash) { + var link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + $('#nav-sync').css('top','30px'); + } else { + $('#nav-sync').css('top','5px'); + } + showRoot(); +} + +function showNode(o, node, index, hash) +{ + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + showNode(o,node,index,hash); + },true); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + var n = node.children[o.breadcrumbs[index]]; + if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); + else hash=''; + } + if (hash.match(/^#l\d+$/)) { + var anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + var url=root+hash; + var i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + },true); + } +} + +function showSyncOff(n,relpath) +{ + n.html(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +function toggleSyncButton(relpath) +{ + var navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } +} + +var loadTriggered = false; +var readyTriggered = false; +var loadObject,loadToRoot,loadUrl,loadRelPath; + +$(window).on('load',function(){ + if (readyTriggered) { // ready first + navTo(loadObject,loadToRoot,loadUrl,loadRelPath); + showRoot(); + } + loadTriggered=true; +}); + +function initNavTree(toroot,relpath) +{ + var o = new Object(); + o.toroot = toroot; + o.node = new Object(); + o.node.li = document.getElementById("nav-tree-contents"); + o.node.childrenData = NAVTREE; + o.node.children = new Array(); + o.node.childrenUL = document.createElement("ul"); + o.node.getChildrenUL = function() { return o.node.childrenUL; }; + o.node.li.appendChild(o.node.childrenUL); + o.node.depth = 0; + o.node.relpath = relpath; + o.node.expanded = false; + o.node.isLast = true; + o.node.plus_img = document.createElement("span"); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = arrowRight; + + if (localStorageSupported()) { + var navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + navSync.click(function(){ toggleSyncButton(relpath); }); + } + + if (loadTriggered) { // load before ready + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + } else { // ready before load + loadObject = o; + loadToRoot = toroot; + loadUrl = hashUrl(); + loadRelPath = relpath; + readyTriggered=true; + } + + $(window).bind('hashchange', function(){ + if (window.location.hash && window.location.hash.length>1){ + var a; + if ($(location).attr('hash')){ + var clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + +mrs_lib: include/mrs_lib/nckf.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    nckf.h
    +
    +
    +
    1 // clang: MatousFormat
    +
    6 #ifndef NCKFSYSTEMMODELS_H
    +
    7 #define NCKFSYSTEMMODELS_H
    +
    8 
    +
    9 #include <mrs_lib/lkf.h>
    +
    10 #include <mrs_lib/ukf.h>
    +
    11 
    +
    12 namespace mrs_lib
    +
    13 {
    +
    14 
    +
    15  /* class NCLKF //{ */
    +
    27  template <int n_states, int n_inputs, int n_measurements>
    +
    28  class NCLKF : public LKF<n_states, n_inputs, n_measurements>
    +
    29  {
    +
    30  public:
    +
    31  /* NCLKF definitions (typedefs, constants etc) //{ */
    +
    32  static const int n = n_states;
    +
    33  static const int m = n_inputs;
    +
    34  static const int p = n_measurements;
    + +
    37  using x_t = typename Base_class::x_t;
    +
    38  using u_t = typename Base_class::u_t;
    +
    39  using z_t = typename Base_class::z_t;
    +
    40  using P_t = typename Base_class::P_t;
    +
    41  using R_t = typename Base_class::R_t;
    +
    42  using Q_t = typename Base_class::Q_t;
    + +
    45  using A_t = typename Base_class::A_t;
    +
    46  using B_t = typename Base_class::B_t;
    +
    47  using H_t = typename Base_class::H_t;
    +
    48  using K_t = typename Base_class::K_t;
    +
    49  //}
    +
    50 
    +
    51  public:
    +
    58  NCLKF(){};
    +
    59 
    +
    68  NCLKF(const A_t& A, const B_t& B, const H_t& H, const double l) : Base_class(A, B, H), l(l) {};
    +
    69 
    +
    70  protected:
    +
    71  double l;
    +
    72 
    +
    73  protected:
    +
    74  /* computeKalmanGain() method //{ */
    +
    75  virtual K_t computeKalmanGain(const statecov_t& sc, const z_t& z, const R_t& R, const H_t& H) const override
    +
    76  {
    +
    77  const R_t W = H * sc.P * H.transpose() + R;
    +
    78  const R_t W_inv = Base_class::invert_W(W);
    +
    79  const K_t K_orig = sc.P * H.transpose() * W_inv;
    +
    80 
    +
    81  const z_t inn = z - (H * sc.x); // innovation
    +
    82  const x_t x = sc.x + K_orig * inn;
    +
    83  const double inn_scale = inn.transpose() * W_inv * inn;
    +
    84 
    +
    85  const double x_norm = x.norm();
    +
    86  const K_t K = K_orig + (l/x_norm - 1.0) * x * (inn.transpose() * W_inv) / inn_scale;
    +
    87 
    +
    88  return K;
    +
    89  }
    +
    90  //}
    +
    91 
    +
    92  };
    +
    93  //}
    +
    94 
    +
    95  /* class NCLKF_partial //{ */
    +
    96 
    +
    111  template <int n_states, int n_inputs, int n_measurements, int n_norm_constrained_states>
    +
    112  class NCLKF_partial : public NCLKF<n_states, n_inputs, n_measurements>
    +
    113  {
    +
    114  public:
    +
    115  /* NCLKF_partial definitions (typedefs, constants etc) //{ */
    +
    116  static const int n = n_states;
    +
    117  static const int m = n_inputs;
    +
    118  static const int p = n_measurements;
    +
    119  static const int nq = n_norm_constrained_states;
    + +
    122  using x_t = typename Base_class::x_t;
    +
    123  using u_t = typename Base_class::u_t;
    +
    124  using z_t = typename Base_class::z_t;
    +
    125  using P_t = typename Base_class::P_t;
    +
    126  using R_t = typename Base_class::R_t;
    +
    127  using Q_t = typename Base_class::Q_t;
    + +
    130  using A_t = typename Base_class::A_t;
    +
    131  using B_t = typename Base_class::B_t;
    +
    132  using H_t = typename Base_class::H_t;
    +
    133  using K_t = typename Base_class::K_t;
    +
    135  using indices_t = std::array<int, nq>;
    +
    136  using xq_t = Eigen::Matrix<double, nq, 1>;
    +
    137  using Hq_t = Eigen::Matrix<double, p, nq>;
    +
    138  using Kq_t = Eigen::Matrix<double, nq, p>;
    +
    139  //}
    +
    140 
    +
    141  public:
    + +
    149 
    +
    159  NCLKF_partial(const A_t& A, const B_t& B, const H_t& H, const double l, const indices_t& norm_constrained_indices)
    +
    160  : Base_class(A, B, H, l),
    +
    161  norm_indices(norm_constrained_indices)
    +
    162  {
    +
    163  if (n >= 0)
    +
    164  {
    +
    165  for (auto& idx : norm_indices)
    +
    166  {
    +
    167  if (idx > n)
    +
    168  {
    +
    169  ROS_ERROR("[NCLKF_partial]: Index of a norm-constrained state (%d) cannot be higher than the number of states (%d)! Setting it to zero.", idx, n);
    +
    170  idx = 0;
    +
    171  }
    +
    172  if (idx < 0)
    +
    173  {
    +
    174  ROS_ERROR("[NCLKF_partial]: Index of a norm-constrained state (%d) cannot be less than zero! Setting it to zero.", idx);
    +
    175  idx = 0;
    +
    176  }
    +
    177  }
    +
    178  }
    +
    179  };
    +
    180 
    +
    181  private:
    +
    182  indices_t norm_indices;
    +
    183 
    +
    184  /* helper methods for Eigen matrix subscripting //{ */
    +
    185 
    +
    186  template <typename T, int rows, int cols, size_t out_rows, size_t out_cols>
    +
    187  Eigen::Matrix<T, out_rows, out_cols> select_indices(const Eigen::Matrix<T, rows, cols>& mat, const std::array<int, out_rows>& row_indices, const std::array<int, out_cols>& col_indices) const
    +
    188  {
    +
    189  Eigen::Matrix<T, out_rows, cols> tmp;
    +
    190  for (int it = 0; it < (int)out_rows; it++)
    +
    191  {
    +
    192  const auto row = row_indices[it];
    +
    193  assert(rows < 0 || row < rows);
    +
    194  tmp.row(it) = mat.row(row);
    +
    195  }
    +
    196 
    +
    197  Eigen::Matrix<T, out_rows, out_cols> ret;
    +
    198  for (int it = 0; it < (int)out_cols; it++)
    +
    199  {
    +
    200  const auto col = col_indices[it];
    +
    201  assert(cols < 0 || col < cols);
    +
    202  tmp.col(it) = tmp.col(col);
    +
    203  }
    +
    204 
    +
    205  return ret;
    +
    206  }
    +
    207 
    +
    208  template <typename T, int rows, int cols, size_t out_rows>
    +
    209  Eigen::Matrix<T, out_rows, cols> select_rows(const Eigen::Matrix<T, rows, cols>& mat, const std::array<int, out_rows>& row_indices) const
    +
    210  {
    +
    211  Eigen::Matrix<T, out_rows, cols> ret;
    +
    212  for (int it = 0; it < (int)out_rows; it++)
    +
    213  {
    +
    214  const auto row = row_indices[it];
    +
    215  assert(rows < 0 || row < rows);
    +
    216  ret.row(it) = mat.row(row);
    +
    217  }
    +
    218  return ret;
    +
    219  }
    +
    220 
    +
    221  template <typename T, int rows, int cols, size_t out_cols>
    +
    222  Eigen::Matrix<T, rows, out_cols> select_cols(const Eigen::Matrix<T, rows, cols>& mat, const std::array<int, out_cols>& col_indices) const
    +
    223  {
    +
    224  Eigen::Matrix<T, rows, out_cols> ret;
    +
    225  for (int it = 0; it < (int)out_cols; it++)
    +
    226  {
    +
    227  const auto col = col_indices[it];
    +
    228  assert(cols < 0 || col < cols);
    +
    229  ret.col(it) = mat.col(col);
    +
    230  }
    +
    231  return ret;
    +
    232  }
    +
    233 
    +
    234  template <typename T, int rows, size_t out_rows>
    +
    235  Eigen::Matrix<T, out_rows, 1> select_indices(const Eigen::Matrix<T, rows, 1>& vec, const std::array<int, out_rows>& row_indices) const
    +
    236  {
    +
    237  return select_rows(vec, row_indices);
    +
    238  }
    +
    239 
    +
    240  template <typename T, int rows, int cols, size_t n_rows>
    +
    241  void set_rows(const Eigen::Matrix<T, (size_t)n_rows, cols>& from_mat, Eigen::Matrix<T, rows, cols>& to_mat, const std::array<int, n_rows>& row_indices) const
    +
    242  {
    +
    243  for (int rit = 0; rit < (int)n_rows; rit++)
    +
    244  {
    +
    245  const auto ridx = row_indices.at(rit);
    +
    246  assert(rows < 0 || ridx < rows);
    +
    247  to_mat.row(ridx) = from_mat.row(rit);
    +
    248  }
    +
    249  }
    +
    250 
    +
    251  //}
    +
    252 
    +
    253  protected:
    +
    254  /* computeKalmanGain() method //{ */
    +
    255  virtual K_t computeKalmanGain(const statecov_t& sc, const z_t& z, const R_t& R, const H_t& H) const override
    +
    256  {
    +
    257  const R_t W = H * sc.P * H.transpose() + R;
    +
    258  const R_t W_inv = Base_class::invert_W(W);
    +
    259  K_t K = sc.P * H.transpose() * W_inv;
    +
    260 
    +
    261  // calculate the kalman gain for the norm-constrained states
    +
    262  {
    +
    263  const Kq_t K_orig = select_rows(K, norm_indices);
    +
    264  const xq_t xq = select_indices(sc.x, norm_indices);
    +
    265  const Hq_t Hq = select_cols(H, norm_indices);
    +
    266  const z_t inn = z - (Hq * xq); // innovation
    +
    267  const xq_t x = xq + K_orig * inn;
    +
    268  const double inn_scale = inn.transpose() * W_inv * inn;
    +
    269 
    +
    270  const double x_norm = x.norm();
    +
    271  const Kq_t Kq = K_orig + (Base_class::l/x_norm - 1.0) * x * (inn.transpose() * W_inv) / inn_scale;
    +
    272  set_rows(Kq, K, norm_indices);
    +
    273  }
    +
    274 
    +
    275  return K;
    +
    276  }
    +
    277  //}
    +
    278 
    +
    279  };
    +
    280  //}
    +
    281 
    +
    282  /* class NCUKF //{ */
    +
    283  template <int n_states, int n_inputs, int n_measurements>
    +
    284  class NCUKF : public UKF<n_states, n_inputs, n_measurements>
    +
    285  {
    +
    286  public:
    +
    287  /* LKF definitions (typedefs, constants etc) //{ */
    +
    288  static const int n = n_states;
    +
    289  static const int m = n_inputs;
    +
    290  static const int p = n_measurements;
    +
    291  using Base_class = UKF<n, m, p>;
    +
    292 
    +
    293  using x_t = typename Base_class::x_t; // state vector n*1
    +
    294  using u_t = typename Base_class::u_t; // input vector m*1
    +
    295  using z_t = typename Base_class::z_t; // measurement vector p*1
    +
    296  using P_t = typename Base_class::P_t; // state covariance n*n
    +
    297  using R_t = typename Base_class::R_t; // measurement covariance p*p
    +
    298  using Q_t = typename Base_class::Q_t; // measurement covariance p*p
    +
    299  using statecov_t = typename Base_class::statecov_t; // helper struct for state and covariance
    +
    300 
    +
    301  using transition_model_t = typename Base_class::transition_model_t;
    +
    302  using observation_model_t = typename Base_class::observation_model_t;
    +
    303 
    +
    304  using X_t = typename Base_class::X_t; // state sigma points matrix n*w
    +
    305  using Z_t = typename Base_class::Z_t; // measurement sigma points matrix p*w
    +
    306  using Pzz_t = typename Base_class::Pzz_t; // Pzz helper matrix p*n
    +
    307  using K_t = typename Base_class::K_t; // kalman gain n*p
    +
    308  //}
    +
    309 
    +
    310  public:
    +
    311  NCUKF(){};
    +
    312 
    +
    313  NCUKF(const transition_model_t& transition_model, const observation_model_t& observation_model, const double l, const double alpha = 1e-3, const double kappa = 1, const double beta = 2)
    +
    314  : Base_class(transition_model, observation_model, alpha, kappa, beta), l(l) {};
    +
    315 
    +
    316  public:
    +
    317  /* correct() method //{ */
    +
    318  virtual statecov_t correct(const statecov_t& sc, const z_t& z, const R_t& R) const override
    +
    319  {
    +
    320  const auto& x = sc.x;
    +
    321  const auto& P = sc.P;
    +
    322  const X_t S = Base_class::computeSigmas(x, P);
    +
    323 
    +
    324  // propagate sigmas through the observation model
    +
    325  Z_t Z_exp;
    +
    326  for (int i = 0; i < Base_class::w; i++)
    +
    327  {
    +
    328  Z_exp.col(i) = Base_class::m_observation_model(S.col(i));
    +
    329  }
    +
    330 
    +
    331  // compute expected measurement
    +
    332  z_t z_exp = z_t::Zero();
    +
    333  for (int i = 0; i < Base_class::w; i++)
    +
    334  {
    +
    335  z_exp += Base_class::m_Wm(i) * Z_exp.col(i);
    +
    336  }
    +
    337 
    +
    338  // compute the covariance of measurement
    +
    339  Pzz_t Pzz = Pzz_t::Zero();
    +
    340  for (int i = 0; i < Base_class::w; i++)
    +
    341  {
    +
    342  Pzz += Base_class::m_Wc(i) * (Z_exp.col(i) - z_exp) * (Z_exp.col(i) - z_exp).transpose();
    +
    343  }
    +
    344  Pzz += R;
    +
    345 
    +
    346  // compute cross covariance
    +
    347  K_t Pxz = K_t::Zero();
    +
    348  for (int i = 0; i < Base_class::w; i++)
    +
    349  {
    +
    350  Pxz += Base_class::m_Wc(i) * (S.col(i) - x) * (Z_exp.col(i) - z_exp).transpose();
    +
    351  }
    +
    352 
    +
    353  // compute Kalman gain
    +
    354  const z_t inn = (z - z_exp); // innovation
    +
    355  const K_t K = computeKalmanGain(sc.x, inn, Pxz, Pzz);
    +
    356 
    +
    357  // check whether the inverse produced valid numbers
    +
    358  if (!K.array().isFinite().all())
    +
    359  {
    +
    360  ROS_ERROR("UKF: inverting of Pzz in correction update produced non-finite numbers!!! Fix your covariances (the measurement's is probably too low...)");
    +
    361  throw typename Base_class::inverse_exception();
    +
    362  }
    +
    363 
    +
    364  // correct
    +
    365  statecov_t ret;
    +
    366  ret.x = x + K * inn;
    +
    367  ret.P = P - K * Pxz.transpose() - Pxz * K.transpose() + K * Pzz * K.transpose();
    +
    368  return ret;
    +
    369  }
    +
    370  //}
    +
    371 
    +
    372  protected:
    +
    373  double l;
    +
    374 
    +
    375  protected:
    +
    376  /* computeKalmanGain() method //{ */
    +
    377  virtual K_t computeKalmanGain(const x_t& x, const z_t& inn, const K_t& Pxz, const Pzz_t& Pzz) const override
    +
    378  {
    +
    379  const Pzz_t Pzz_inv = Base_class::computeInverse(Pzz);
    +
    380  const K_t K_orig = Pxz * Pzz_inv;
    +
    381 
    +
    382  const x_t x_pred = x + K_orig * inn;
    +
    383  const double inn_scale = inn.transpose() * Pzz_inv * inn;
    +
    384 
    +
    385  const double x_norm = x_pred.norm();
    +
    386  const K_t K = K_orig + (l/x_norm - 1.0) * x_pred * (inn.transpose() * Pzz_inv) / inn_scale;
    +
    387 
    +
    388  return K;
    +
    389  }
    +
    390  //}
    +
    391 
    +
    392  };
    +
    393  //}
    +
    394 
    +
    395 } // namespace mrs_lib
    +
    396 
    +
    397 #endif // NCKFSYSTEMMODELS_H
    +
    398 
    +
    +
    +
    typename Eigen::Matrix< double, n, w > X_t
    State sigma points matrix.
    Definition: ukf.h:50
    +
    typename Base_class::Q_t Q_t
    process covariance n*n typedef
    Definition: ukf.h:69
    +
    typename Base_class::Q_t Q_t
    Process noise covariance matrix type .
    Definition: lkf.h:52
    +
    typename Base_class::B_t B_t
    Input to state mapping matrix type .
    Definition: nckf.h:46
    +
    Eigen::Matrix< double, p, n > H_t
    State to measurement mapping matrix type .
    Definition: lkf.h:57
    +
    typename Base_class::P_t P_t
    State uncertainty covariance matrix type .
    Definition: lkf.h:50
    +
    static const int m
    Length of the input vector of the system.
    Definition: nckf.h:33
    +
    typename Base_class::u_t u_t
    Input vector type .
    Definition: nckf.h:38
    +
    H_t H
    The state to measurement mapping matrix .
    Definition: lkf.h:150
    +
    static const int m
    Length of the input vector of the system.
    Definition: nckf.h:117
    +
    typename Base_class::z_t z_t
    measurement vector p*1 typedef
    Definition: ukf.h:63
    +
    static const int p
    Length of the measurement vector of the system.
    Definition: nckf.h:34
    +
    NCLKF_partial(const A_t &A, const B_t &B, const H_t &H, const double l, const indices_t &norm_constrained_indices)
    The main constructor.
    Definition: nckf.h:159
    +
    typename Base_class::statecov_t statecov_t
    Helper struct for passing around the state and its covariance in one variable.
    Definition: lkf.h:53
    +
    virtual statecov_t correct(const statecov_t &sc, const z_t &z, const R_t &R) const override
    Implements the state correction step (measurement update).
    Definition: nckf.h:318
    +
    typename Base_class::R_t R_t
    Measurement noise covariance matrix type .
    Definition: lkf.h:51
    +
    NCLKF()
    Convenience default constructor.
    Definition: nckf.h:58
    +
    Eigen::Matrix< double, p, p > R_t
    Measurement noise covariance matrix type .
    Definition: kalman_filter.h:39
    +
    typename Eigen::Matrix< double, n, p > K_t
    Kalman gain matrix.
    Definition: ukf.h:53
    +
    typename Base_class::z_t z_t
    Measurement vector type .
    Definition: nckf.h:39
    +
    typename Base_class::Q_t Q_t
    Process noise covariance matrix type .
    Definition: nckf.h:42
    +
    typename Base_class::x_t x_t
    State vector type .
    Definition: nckf.h:37
    +
    typename std::function< x_t(const x_t &, const u_t &, double)> transition_model_t
    function of the state transition model typedef
    Definition: ukf.h:75
    +
    static const int n
    Length of the state vector of the system.
    Definition: nckf.h:116
    +
    Eigen::Matrix< double, p, nq > Hq_t
    Norm-constrained measurement mapping type .
    Definition: nckf.h:137
    +
    Eigen::Matrix< double, n, n > P_t
    State uncertainty covariance matrix type .
    Definition: kalman_filter.h:38
    +
    This class implements the partially norm-constrained linear Kalman filter .
    Definition: nckf.h:112
    +
    typename Base_class::u_t u_t
    input vector m*1 typedef
    Definition: ukf.h:61
    +
    typename Base_class::P_t P_t
    State uncertainty covariance matrix type .
    Definition: nckf.h:40
    +
    typename Base_class::statecov_t statecov_t
    typedef of a helper struct for state and covariance
    Definition: ukf.h:73
    +
    static const int nq
    Number of states to which the norm constraint applies.
    Definition: nckf.h:119
    +
    typename Base_class::A_t A_t
    System transition matrix type .
    Definition: nckf.h:45
    +
    Eigen::Matrix< double, m, 1 > u_t
    Input vector type .
    Definition: kalman_filter.h:35
    +
    static constexpr int w
    Number of sigma points/weights.
    Definition: ukf.h:46
    +
    Eigen::Matrix< double, n, m > B_t
    Input to state mapping matrix type .
    Definition: lkf.h:56
    +
    typename Base_class::x_t x_t
    State vector type .
    Definition: lkf.h:47
    +
    typename std::function< z_t(const x_t &)> observation_model_t
    function of the observation model typedef
    Definition: ukf.h:77
    +
    Eigen::Matrix< double, n, 1 > x_t
    State vector type .
    Definition: kalman_filter.h:34
    +
    Eigen::Matrix< double, nq, 1 > xq_t
    Norm-constrained states vector type .
    Definition: nckf.h:136
    +
    NCLKF_partial()
    Convenience default constructor.
    Definition: nckf.h:148
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    typename Base_class::R_t R_t
    measurement covariance p*p typedef
    Definition: ukf.h:67
    +
    typename Base_class::R_t R_t
    Measurement noise covariance matrix type .
    Definition: nckf.h:41
    +
    Eigen::Matrix< double, n, n > A_t
    System transition matrix type .
    Definition: lkf.h:55
    +
    B_t B
    The input to state mapping matrix .
    Definition: lkf.h:149
    +
    typename Eigen::Matrix< double, p, p > Pzz_t
    Pzz helper matrix.
    Definition: ukf.h:52
    +
    std::array< int, nq > indices_t
    Indices of the norm-constrained states type.
    Definition: nckf.h:135
    +
    typename Base_class::P_t P_t
    state covariance n*n typedef
    Definition: ukf.h:65
    +
    NCLKF(const A_t &A, const B_t &B, const H_t &H, const double l)
    The main constructor.
    Definition: nckf.h:68
    +
    static const int n
    Length of the state vector of the system.
    Definition: nckf.h:32
    +
    Implementation of the Linear Kalman filter .
    Definition: lkf.h:38
    +
    Eigen::Matrix< double, n, p > K_t
    Kalman gain matrix type .
    Definition: lkf.h:58
    +
    typename Base_class::K_t K_t
    Kalman gain matrix type .
    Definition: nckf.h:48
    +
    typename Base_class::statecov_t statecov_t
    Helper struct for passing around the state and its covariance in one variable.
    Definition: nckf.h:43
    +
    static const int p
    Length of the measurement vector of the system.
    Definition: nckf.h:118
    +
    typename Base_class::H_t H_t
    State to measurement mapping matrix type .
    Definition: nckf.h:47
    +
    typename Base_class::x_t x_t
    state vector n*1 typedef
    Definition: ukf.h:59
    +
    Eigen::Matrix< double, n, n > Q_t
    Process noise covariance matrix type .
    Definition: kalman_filter.h:40
    +
    typename Base_class::z_t z_t
    Measurement vector type .
    Definition: lkf.h:49
    +
    Eigen::Matrix< double, p, 1 > z_t
    Measurement vector type .
    Definition: kalman_filter.h:36
    +
    Definition: nckf.h:284
    +
    typename Base_class::K_t K_t
    Kalman gain matrix type .
    Definition: nckf.h:133
    +
    typename Eigen::Matrix< double, p, w > Z_t
    Measurement sigma points matrix.
    Definition: ukf.h:51
    +
    A_t A
    The system transition matrix .
    Definition: lkf.h:144
    +
    Defines UKF - a class implementing the Unscented Kalman Filter .
    +
    typename Base_class::u_t u_t
    Input vector type .
    Definition: lkf.h:48
    +
    This class implements the norm-constrained linear Kalman filter .
    Definition: nckf.h:28
    +
    Eigen::Matrix< double, nq, p > Kq_t
    Norm-constrained kalman gain type .
    Definition: nckf.h:138
    +
    Implementation of the Unscented Kalman filter .
    Definition: ukf.h:39
    +
    is thrown when taking the inverse of a matrix fails during kalman gain calculation
    Definition: ukf.h:89
    +
    This abstract class defines common interfaces and types for a generic Kalman filter.
    Definition: kalman_filter.h:26
    + + + + diff --git a/nckf__tests_8cpp.html b/nckf__tests_8cpp.html new file mode 100644 index 00000000..5b0299f8 --- /dev/null +++ b/nckf__tests_8cpp.html @@ -0,0 +1,205 @@ + + + + + + + +mrs_lib: src/nckf/nckf_tests.cpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    nckf_tests.cpp File Reference
    +
    +
    + +

    Tests for the UKF implementation. +More...

    +
    #include <mrs_lib/nckf.h>
    +#include <random>
    +
    + + Include dependency graph for nckf_tests.cpp:
    +
    +
    + +
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    +using Q_t = lkf_t::Q_t
     
    +using x_t = lkf_t::x_t
     
    +using P_t = lkf_t::P_t
     
    +using u_t = lkf_t::u_t
     
    +using z_t = lkf_t::z_t
     
    +using R_t = lkf_t::R_t
     
    +using A_t = lkf_t::A_t
     
    +using B_t = lkf_t::B_t
     
    +using H_t = lkf_t::H_t
     
    + + + + + + + + + + +

    +Functions

    +x_t tra_model_f (const x_t &x, const u_t &u, [[maybe_unused]] const double dt)
     
    +z_t obs_model_f (const x_t &x)
     
    +template<int rows>
    Eigen::Matrix< double, rows, 1 > normal_randmat (const Eigen::Matrix< double, rows, rows > &cov)
     
    +int main ()
     
    + + + + + + + + + + + +

    +Variables

    +const int mrs_lib::n_states_norm_constrained = 2
     
    +constexpr int n = 4
     
    +A_t A
     
    +B_t B
     
    +H_t H
     
    +

    Detailed Description

    +

    Tests for the UKF implementation.

    +
    Author
    Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +
    +
    + + + + diff --git a/nckf__tests_8cpp.js b/nckf__tests_8cpp.js new file mode 100644 index 00000000..edd79f67 --- /dev/null +++ b/nckf__tests_8cpp.js @@ -0,0 +1,21 @@ +var nckf__tests_8cpp = +[ + [ "A_t", "nckf__tests_8cpp.html#ae8fded1ffb13cfff36afc1eedabf215f", null ], + [ "B_t", "nckf__tests_8cpp.html#a5c39f7a461054863b37ddf9186eeb366", null ], + [ "H_t", "nckf__tests_8cpp.html#aa4437350efd30cd9ab6dbea2a2621faa", null ], + [ "P_t", "nckf__tests_8cpp.html#a8519b4182b449bbd63c34794c1b03312", null ], + [ "Q_t", "nckf__tests_8cpp.html#afb367b4e310274e83ea453f1d9329df0", null ], + [ "R_t", "nckf__tests_8cpp.html#a0571298449e0cf2aee255bf7e06e7b86", null ], + [ "u_t", "nckf__tests_8cpp.html#a846481e2173f20986bcee056e29a5b4c", null ], + [ "x_t", "nckf__tests_8cpp.html#a1db3b17743d9d81ac2aa852a6ed2e4c6", null ], + [ "z_t", "nckf__tests_8cpp.html#a3dd466ca19241875ff72a627b1f86a25", null ], + [ "main", "nckf__tests_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4", null ], + [ "normal_randmat", "nckf__tests_8cpp.html#a1aa37976011a3b2fb4c2af6d82853687", null ], + [ "obs_model_f", "nckf__tests_8cpp.html#a4ea961b6252e3dbe39f69775796091ee", null ], + [ "tra_model_f", "nckf__tests_8cpp.html#a8688a140d7d6993d6f2c1844c9359f4f", null ], + [ "A", "nckf__tests_8cpp.html#af1040ffeface88f6c9d4e56db0af4e8f", null ], + [ "B", "nckf__tests_8cpp.html#aaaf68e4cd1134a9f26b41018c8ebbb6a", null ], + [ "H", "nckf__tests_8cpp.html#a354ab4a2f81b229ea9b469d06b672c88", null ], + [ "n", "nckf__tests_8cpp.html#a64138b0bf948f19a2a23767106f99884", null ], + [ "n_states_norm_constrained", "nckf__tests_8cpp.html#a45a6d658a0ccfafbb641821f11d2d2f8", null ] +]; \ No newline at end of file diff --git a/nckf__tests_8cpp__incl.map b/nckf__tests_8cpp__incl.map new file mode 100644 index 00000000..d19e15d9 --- /dev/null +++ b/nckf__tests_8cpp__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/nckf__tests_8cpp__incl.md5 b/nckf__tests_8cpp__incl.md5 new file mode 100644 index 00000000..9c1a1ce5 --- /dev/null +++ b/nckf__tests_8cpp__incl.md5 @@ -0,0 +1 @@ +4717a827b0d6a393820fd0a8f6657a63 \ No newline at end of file diff --git a/nckf__tests_8cpp__incl.png b/nckf__tests_8cpp__incl.png new file mode 100644 index 00000000..8db1f589 Binary files /dev/null and b/nckf__tests_8cpp__incl.png differ diff --git a/notch__filter_8h.html b/notch__filter_8h.html new file mode 100644 index 00000000..33802a2e --- /dev/null +++ b/notch__filter_8h.html @@ -0,0 +1,137 @@ + + + + + + + +mrs_lib: include/mrs_lib/notch_filter.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    notch_filter.h File Reference
    +
    +
    +
    #include <Eigen/Dense>
    +#include <ros/ros.h>
    +#include <mrs_lib/iir_filter.h>
    +
    + + Include dependency graph for notch_filter.h:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + +

    +Classes

    class  mrs_lib::NotchFilter
     
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    +

    Detailed Description

    +
    +
    + + + + diff --git a/notch__filter_8h__incl.map b/notch__filter_8h__incl.map new file mode 100644 index 00000000..0ae31ea1 --- /dev/null +++ b/notch__filter_8h__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/notch__filter_8h__incl.md5 b/notch__filter_8h__incl.md5 new file mode 100644 index 00000000..ea0fb75f --- /dev/null +++ b/notch__filter_8h__incl.md5 @@ -0,0 +1 @@ +394e8a2edb668c11ca1d770f629cdfc0 \ No newline at end of file diff --git a/notch__filter_8h__incl.png b/notch__filter_8h__incl.png new file mode 100644 index 00000000..edcdfac8 Binary files /dev/null and b/notch__filter_8h__incl.png differ diff --git a/notch__filter_8h_source.html b/notch__filter_8h_source.html new file mode 100644 index 00000000..c3635165 --- /dev/null +++ b/notch__filter_8h_source.html @@ -0,0 +1,132 @@ + + + + + + + +mrs_lib: include/mrs_lib/notch_filter.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    notch_filter.h
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 #ifndef NOTCH_FILTER_H
    +
    5 #define NOTCH_FILTER_H
    +
    6 
    +
    7 #include <Eigen/Dense>
    +
    8 #include <ros/ros.h>
    +
    9 
    +
    10 #include <mrs_lib/iir_filter.h>
    +
    11 
    +
    12 namespace mrs_lib
    +
    13 {
    +
    14 
    +
    15 class NotchFilter {
    +
    16 
    +
    17 public:
    +
    18  /* NotchFilter(const double& sample_rate, const std::vector<double>& frequencies_in, const std::vector<double>& bandwidths_in); */
    +
    19  NotchFilter(const double& sample_rate, const double& frequency_in, const double& bandwidth_in);
    +
    20 
    +
    21  double iterate(double& sample_in);
    +
    22 
    +
    23 private:
    +
    24  std::unique_ptr<mrs_lib::IirFilter> filter;
    +
    25 };
    +
    26 
    +
    27 } // namespace mrs_lib
    +
    28 
    +
    29 #endif
    +
    +
    + +
    Definition: notch_filter.h:15
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    + + + + diff --git a/open.png b/open.png new file mode 100644 index 00000000..30f75c7e Binary files /dev/null and b/open.png differ diff --git a/pages.html b/pages.html new file mode 100644 index 00000000..11a837da --- /dev/null +++ b/pages.html @@ -0,0 +1,106 @@ + + + + + + + +mrs_lib: Related Pages + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    + + +
     Bibliography
    +
    +
    +
    + + + + diff --git a/param__loader_2example_8cpp.html b/param__loader_2example_8cpp.html new file mode 100644 index 00000000..ed70aa20 --- /dev/null +++ b/param__loader_2example_8cpp.html @@ -0,0 +1,145 @@ + + + + + + + +mrs_lib: src/param_loader/example.cpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    example.cpp File Reference
    +
    +
    + +

    Example file for the ParamLoader convenience class. +More...

    +
    + + Include dependency graph for example.cpp:
    +
    +
    + +
    + + + +

    +Functions

    +int main (int argc, char **argv)
     
    +

    Detailed Description

    +

    Example file for the ParamLoader convenience class.

    +
    Author
    Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +

    This example may be run after building mrs_lib by executing rosrun mrs_lib param_loader_example.

    +

    See param_loader/example.cpp.

    +
    +
    + + + + diff --git a/param__loader_2example_8cpp.js b/param__loader_2example_8cpp.js new file mode 100644 index 00000000..a3f4b467 --- /dev/null +++ b/param__loader_2example_8cpp.js @@ -0,0 +1,4 @@ +var param__loader_2example_8cpp = +[ + [ "main", "param__loader_2example_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627", null ] +]; \ No newline at end of file diff --git a/param__loader_2example_8cpp__incl.map b/param__loader_2example_8cpp__incl.map new file mode 100644 index 00000000..e91cf5c9 --- /dev/null +++ b/param__loader_2example_8cpp__incl.map @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/param__loader_2example_8cpp__incl.md5 b/param__loader_2example_8cpp__incl.md5 new file mode 100644 index 00000000..b31e2997 --- /dev/null +++ b/param__loader_2example_8cpp__incl.md5 @@ -0,0 +1 @@ +f63a129d0ed024c8d19aeddfb1e3ad22 \ No newline at end of file diff --git a/param__loader_2example_8cpp__incl.png b/param__loader_2example_8cpp__incl.png new file mode 100644 index 00000000..5033c061 Binary files /dev/null and b/param__loader_2example_8cpp__incl.png differ diff --git a/param__loader_8h.html b/param__loader_8h.html new file mode 100644 index 00000000..f2b7ce2e --- /dev/null +++ b/param__loader_8h.html @@ -0,0 +1,182 @@ + + + + + + + +mrs_lib: include/mrs_lib/param_loader.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    param_loader.h File Reference
    +
    +
    + +

    Defines ParamLoader - a convenience class for loading static ROS parameters. +More...

    +
    #include <ros/ros.h>
    +#include <string>
    +#include <map>
    +#include <unordered_set>
    +#include <iostream>
    +#include <Eigen/Dense>
    +#include <std_msgs/ColorRGBA.h>
    +#include <mrs_lib/param_provider.h>
    +
    + + Include dependency graph for param_loader.h:
    +
    +
    + +
    + + This graph shows which files directly or indirectly include this file:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  mrs_lib::ParamLoader
     Convenience class for loading parameters from rosparam server. More...
     
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    + + + + + + + + + +

    +Functions

    template<>
    ros::Duration mrs_lib::ParamLoader::loadParam2< ros::Duration > (const std::string &name, const ros::Duration &default_value)
     An overload for loading ros::Duration. More...
     
    template<>
    ros::Duration mrs_lib::ParamLoader::loadParam2< ros::Duration > (const std::string &name)
     An overload for loading ros::Duration. More...
     
    +

    Detailed Description

    +

    Defines ParamLoader - a convenience class for loading static ROS parameters.

    +
    Author
    Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +
    +
    + + + + diff --git a/param__loader_8h.js b/param__loader_8h.js new file mode 100644 index 00000000..c27695f9 --- /dev/null +++ b/param__loader_8h.js @@ -0,0 +1,6 @@ +var param__loader_8h = +[ + [ "ParamLoader", "classmrs__lib_1_1ParamLoader.html", "classmrs__lib_1_1ParamLoader" ], + [ "ParamLoader::loadParam2< ros::Duration >", "param__loader_8h.html#a3b3a11cf5354658548afb9fd6f241d72", null ], + [ "ParamLoader::loadParam2< ros::Duration >", "param__loader_8h.html#a5edbd3a77e55f8ab165500ca05ad26f4", null ] +]; \ No newline at end of file diff --git a/param__loader_8h__dep__incl.map b/param__loader_8h__dep__incl.map new file mode 100644 index 00000000..2dabe72e --- /dev/null +++ b/param__loader_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/param__loader_8h__dep__incl.md5 b/param__loader_8h__dep__incl.md5 new file mode 100644 index 00000000..d924b463 --- /dev/null +++ b/param__loader_8h__dep__incl.md5 @@ -0,0 +1 @@ +7878786be6298bf2c2579fde4b129309 \ No newline at end of file diff --git a/param__loader_8h__dep__incl.png b/param__loader_8h__dep__incl.png new file mode 100644 index 00000000..e0db90a8 Binary files /dev/null and b/param__loader_8h__dep__incl.png differ diff --git a/param__loader_8h__incl.map b/param__loader_8h__incl.map new file mode 100644 index 00000000..099ee08b --- /dev/null +++ b/param__loader_8h__incl.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/param__loader_8h__incl.md5 b/param__loader_8h__incl.md5 new file mode 100644 index 00000000..4b2a7a76 --- /dev/null +++ b/param__loader_8h__incl.md5 @@ -0,0 +1 @@ +57f4a3d7e11ac37b80774f15e7efd1eb \ No newline at end of file diff --git a/param__loader_8h__incl.png b/param__loader_8h__incl.png new file mode 100644 index 00000000..f47cd3bf Binary files /dev/null and b/param__loader_8h__incl.png differ diff --git a/param__loader_8h_source.html b/param__loader_8h_source.html new file mode 100644 index 00000000..55451b72 --- /dev/null +++ b/param__loader_8h_source.html @@ -0,0 +1,930 @@ + + + + + + + +mrs_lib: include/mrs_lib/param_loader.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    param_loader.h
    +
    +
    +Go to the documentation of this file.
    1 // clang: MatousFormat
    +
    7 #ifndef PARAM_LOADER_H
    +
    8 #define PARAM_LOADER_H
    +
    9 
    +
    10 #include <ros/ros.h>
    +
    11 #include <string>
    +
    12 #include <map>
    +
    13 #include <unordered_set>
    +
    14 #include <iostream>
    +
    15 #include <Eigen/Dense>
    +
    16 #include <std_msgs/ColorRGBA.h>
    +
    17 #include <mrs_lib/param_provider.h>
    +
    18 
    +
    19 namespace mrs_lib
    +
    20 {
    +
    21 
    +
    22 /*** ParamLoader CLASS //{ **/
    +
    23 
    + +
    44 {
    +
    45 
    +
    46 private:
    +
    47  enum unique_t
    +
    48  {
    +
    49  UNIQUE = true,
    +
    50  REUSABLE = false
    +
    51  };
    +
    52  enum optional_t
    +
    53  {
    +
    54  OPTIONAL = true,
    +
    55  COMPULSORY = false
    +
    56  };
    +
    57  enum swap_t
    +
    58  {
    +
    59  SWAP = true,
    +
    60  NO_SWAP = false
    +
    61  };
    +
    62 
    +
    63  template <typename T>
    +
    64  using MatrixX = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>;
    +
    65 
    +
    66 private:
    +
    67  bool m_load_successful, m_print_values;
    +
    68  std::string m_node_name;
    +
    69  std::string m_prefix;
    +
    70  const ros::NodeHandle& m_nh;
    + +
    72  std::unordered_set<std::string> m_loaded_params;
    +
    73 
    +
    74  /* printing helper functions //{ */
    +
    75  /* printError and print_warning functions //{*/
    +
    76  void printError(const std::string& str)
    +
    77  {
    +
    78  if (m_node_name.empty())
    +
    79  ROS_ERROR_STREAM(str);
    +
    80  else
    +
    81  ROS_ERROR_STREAM("[" << m_node_name << "]: " << str);
    +
    82  }
    +
    83  void print_warning(const std::string& str)
    +
    84  {
    +
    85  if (m_node_name.empty())
    +
    86  ROS_WARN_STREAM(str);
    +
    87  else
    +
    88  ROS_WARN_STREAM("[" << m_node_name << "]: " << str);
    +
    89  }
    +
    90  //}
    +
    91 
    +
    92  /* printValue function and overloads //{ */
    +
    93 
    +
    94  template <typename T>
    +
    95  void printValue(const std::string& name, const T& value)
    +
    96  {
    +
    97  if (m_node_name.empty())
    +
    98  std::cout << "\t" << name << ":\t" << value << std::endl;
    +
    99  else
    +
    100  ROS_INFO_STREAM("[" << m_node_name << "]: parameter '" << name << "':\t" << value);
    +
    101  }
    +
    102 
    +
    103  template <typename T>
    +
    104  void printValue(const std::string& name, const std::vector<T>& value)
    +
    105  {
    +
    106  std::stringstream strstr;
    +
    107  if (m_node_name.empty())
    +
    108  strstr << "\t";
    +
    109  strstr << name << ":\t";
    +
    110  size_t it = 0;
    +
    111  for (const auto& elem : value)
    +
    112  {
    +
    113  strstr << elem;
    +
    114  if (it < value.size() - 1)
    +
    115  strstr << ", ";
    +
    116  it++;
    +
    117  }
    +
    118  if (m_node_name.empty())
    +
    119  std::cout << strstr.str() << std::endl;
    +
    120  else
    +
    121  ROS_INFO_STREAM("[" << m_node_name << "]: parameter '" << strstr.str());
    +
    122  }
    +
    123 
    +
    124  template <typename T1, typename T2>
    +
    125  void printValue(const std::string& name, const std::map<T1, T2>& value)
    +
    126  {
    +
    127  std::stringstream strstr;
    +
    128  if (m_node_name.empty())
    +
    129  strstr << "\t";
    +
    130  strstr << name << ":" << std::endl;
    +
    131  size_t it = 0;
    +
    132  for (const auto& pair : value)
    +
    133  {
    +
    134  strstr << pair.first << " = " << pair.second;
    +
    135  if (it < value.size() - 1)
    +
    136  strstr << std::endl;
    +
    137  it++;
    +
    138  }
    +
    139  if (m_node_name.empty())
    +
    140  std::cout << strstr.str() << std::endl;
    +
    141  else
    +
    142  ROS_INFO_STREAM("[" << m_node_name << "]: parameter '" << strstr.str());
    +
    143  }
    +
    144 
    +
    145  template <typename T>
    +
    146  void printValue(const std::string& name, const MatrixX<T>& value)
    +
    147  {
    +
    148  std::stringstream strstr;
    +
    149  /* const Eigen::IOFormat fmt(4, 0, ", ", "\n", "\t\t[", "]"); */
    +
    150  /* strstr << value.format(fmt); */
    +
    151  const Eigen::IOFormat fmt;
    +
    152  strstr << value.format(fmt);
    +
    153  if (m_node_name.empty())
    +
    154  std::cout << "\t" << name << ":\t" << std::endl << strstr.str() << std::endl;
    +
    155  else
    +
    156  ROS_INFO_STREAM("[" << m_node_name << "]: parameter '" << name << "':" << std::endl << strstr.str());
    +
    157  }
    +
    158 
    +
    159  std::string printValue_recursive(const std::string& name, XmlRpc::XmlRpcValue& value, unsigned depth = 0)
    +
    160  {
    +
    161  std::stringstream strstr;
    +
    162  for (unsigned it = 0; it < depth; it++)
    +
    163  strstr << "\t";
    +
    164  strstr << name << ":";
    +
    165  switch (value.getType())
    +
    166  {
    +
    167  case XmlRpc::XmlRpcValue::TypeArray:
    +
    168  {
    +
    169  for (int it = 0; it < value.size(); it++)
    +
    170  {
    +
    171  strstr << std::endl;
    +
    172  const std::string name = "[" + std::to_string(it) + "]";
    +
    173  strstr << printValue_recursive(name, value[it], depth+1);
    +
    174  }
    +
    175  break;
    +
    176  }
    +
    177  case XmlRpc::XmlRpcValue::TypeStruct:
    +
    178  {
    +
    179  int it = 0;
    +
    180  for (auto& pair : value)
    +
    181  {
    +
    182  strstr << std::endl;
    +
    183  strstr << printValue_recursive(pair.first, pair.second, depth+1);
    +
    184  it++;
    +
    185  }
    +
    186  break;
    +
    187  }
    +
    188  default:
    +
    189  {
    +
    190  strstr << "\t" << value;
    +
    191  break;
    +
    192  }
    +
    193  }
    +
    194  return strstr.str();
    +
    195  }
    +
    196 
    +
    197  void printValue(const std::string& name, XmlRpc::XmlRpcValue& value)
    +
    198  {
    +
    199  const std::string txt = printValue_recursive(name, value);
    +
    200  if (m_node_name.empty())
    +
    201  std::cout << txt << std::endl;
    +
    202  else
    +
    203  ROS_INFO_STREAM("[" << m_node_name << "]: parameter '" << txt);
    +
    204  }
    +
    205 
    +
    206  //}
    +
    207 
    +
    208  std::string resolved(const std::string& param_name)
    +
    209  {
    +
    210  return m_nh.resolveName(param_name);
    +
    211  }
    +
    212  //}
    +
    213 
    +
    214  /* check_duplicit_loading checks whether the parameter was already loaded - returns true if yes //{ */
    +
    215  bool check_duplicit_loading(const std::string& name)
    +
    216  {
    +
    217  if (m_loaded_params.count(name))
    +
    218  {
    +
    219  printError(std::string("Tried to load parameter ") + name + std::string(" twice"));
    +
    220  m_load_successful = false;
    +
    221  return true;
    +
    222  } else
    +
    223  {
    +
    224  return false;
    +
    225  }
    +
    226  }
    +
    227  //}
    +
    228 
    +
    229  /* loadMatrixStatic_internal helper function for loading static Eigen matrices //{ */
    +
    230  template <int rows, int cols, typename T>
    +
    231  Eigen::Matrix<T, rows, cols> loadMatrixStatic_internal(const std::string& name, const Eigen::Matrix<T, rows, cols>& default_value, optional_t optional, unique_t unique)
    +
    232  {
    +
    233  MatrixX<T> dynamic = loadMatrixX(name, MatrixX<T>(default_value), rows, cols, optional, unique, NO_SWAP);
    +
    234  if (dynamic.rows() == rows || dynamic.cols() == cols)
    +
    235  return dynamic;
    +
    236  else
    +
    237  return default_value;
    +
    238  }
    +
    239  //}
    +
    240 
    +
    241  /* helper functions for loading dynamic Eigen matrices //{ */
    +
    242  // loadMatrixX helper function for loading dynamic Eigen matrices //{
    +
    243  template <typename T>
    +
    244  MatrixX<T> loadMatrixX(const std::string& name, const MatrixX<T>& default_value, int rows, int cols = Eigen::Dynamic, optional_t optional = OPTIONAL, unique_t unique = UNIQUE, swap_t swap = NO_SWAP, bool printValues = true)
    +
    245  {
    +
    246  const std::string name_prefixed = m_prefix + name;
    +
    247  MatrixX<T> loaded = default_value;
    +
    248  // first, check if the user already tried to load this parameter
    +
    249  if (unique && check_duplicit_loading(name_prefixed))
    +
    250  return loaded;
    +
    251 
    +
    252  // this function only accepts dynamic columns (you can always transpose the matrix afterward)
    +
    253  if (rows < 0)
    +
    254  {
    +
    255  // if the parameter was compulsory, alert the user and set the flag
    +
    256  printError(std::string("Invalid expected matrix dimensions for parameter ") + resolved(name_prefixed));
    +
    257  m_load_successful = false;
    +
    258  return loaded;
    +
    259  }
    +
    260  bool expect_zero_matrix = rows == 0;
    +
    261  if (expect_zero_matrix)
    +
    262  {
    +
    263  if (cols > 0)
    +
    264  {
    +
    265  printError(std::string("Invalid expected matrix dimensions for parameter ") + resolved(name_prefixed) + ". One dimension indicates zero matrix, but other expects non-zero.");
    +
    266  m_load_successful = false;
    +
    267  return loaded;
    +
    268  }
    +
    269  }
    +
    270 
    +
    271 
    +
    272  bool cur_load_successful = true;
    +
    273  bool check_size_exact = true;
    +
    274  if (cols <= 0) // this means that the cols dimension is dynamic or a zero matrix is expected
    +
    275  check_size_exact = false;
    +
    276 
    +
    277  std::vector<T> tmp_vec;
    +
    278  // try to load the parameter
    +
    279  bool success = m_pp.getParam(name_prefixed, tmp_vec);
    +
    280  // check if the loaded vector has correct length
    +
    281  bool correct_size = (int)tmp_vec.size() == rows * cols;
    +
    282  if (!check_size_exact && !expect_zero_matrix)
    +
    283  correct_size = (int)tmp_vec.size() % rows == 0; // if the cols dimension is dynamic, the size just has to be divisable by rows
    +
    284 
    +
    285  if (success && correct_size)
    +
    286  {
    +
    287  // if successfully loaded, everything is in order
    +
    288  // transform the vector to the matrix
    +
    289  if (cols <= 0 && rows > 0)
    +
    290  cols = tmp_vec.size() / rows;
    +
    291  if (swap)
    +
    292  {
    +
    293  int tmp = cols;
    +
    294  cols = rows;
    +
    295  rows = tmp;
    +
    296  }
    +
    297  loaded = Eigen::Map<Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>, Eigen::Unaligned>(tmp_vec.data(), rows, cols);
    +
    298  } else
    +
    299  {
    +
    300  if (success && !correct_size)
    +
    301  {
    +
    302  // warn the user that this parameter was not successfully loaded because of wrong vector length (might be an oversight)
    +
    303  std::string warning =
    +
    304  std::string("Matrix parameter ") + name_prefixed
    +
    305  + std::string(" could not be loaded because the vector has a wrong length " + std::to_string(tmp_vec.size()) + " instead of expected ");
    +
    306  // process the message correctly based on whether the loaded matrix should be dynamic or static
    +
    307  if (cols <= 0) // for dynamic matrices
    +
    308  warning = warning + std::string("number divisible by ") + std::to_string(rows);
    +
    309  else // for static matrices
    +
    310  warning = warning + std::to_string(rows * cols);
    +
    311  print_warning(warning);
    +
    312  }
    +
    313  // if it was not loaded, set the default value
    +
    314  loaded = default_value;
    +
    315  if (!optional)
    +
    316  {
    +
    317  // if the parameter was compulsory, alert the user and set the flag
    +
    318  printError(std::string("Could not load non-optional parameter ") + resolved(name_prefixed));
    +
    319  cur_load_successful = false;
    +
    320  }
    +
    321  }
    +
    322 
    +
    323  // check if load was a success
    +
    324  if (cur_load_successful)
    +
    325  {
    +
    326  if (m_print_values && printValues)
    +
    327  printValue(name_prefixed, loaded);
    +
    328  m_loaded_params.insert(name_prefixed);
    +
    329  } else
    +
    330  {
    +
    331  m_load_successful = false;
    +
    332  }
    +
    333  // finally, return the resulting value
    +
    334  return loaded;
    +
    335  }
    +
    336  //}
    +
    337 
    +
    338  /* loadMatrixArray_internal helper function for loading an array of EigenXd matrices with known dimensions //{ */
    +
    339  template <typename T>
    +
    340  std::vector<MatrixX<T>> loadMatrixArray_internal(const std::string& name, const std::vector<MatrixX<T>>& default_value, optional_t optional, unique_t unique)
    +
    341  {
    +
    342  const std::string name_prefixed = m_prefix + name;
    +
    343  int rows;
    +
    344  std::vector<int> cols;
    +
    345  bool success = true;
    +
    346  success = success && m_pp.getParam(name_prefixed + "/rows", rows);
    +
    347  success = success && m_pp.getParam(name_prefixed + "/cols", cols);
    +
    348 
    +
    349  std::vector<MatrixX<T>> loaded;
    +
    350  loaded.reserve(cols.size());
    +
    351 
    +
    352  int total_cols = 0;
    +
    353  /* check correctness of loaded parameters so far calculate the total dimension //{ */
    +
    354 
    +
    355  if (!success)
    +
    356  {
    +
    357  printError(std::string("Failed to load ") + resolved(name_prefixed) + std::string("/rows or ") + resolved(name_prefixed) + std::string("/cols"));
    +
    358  m_load_successful = false;
    +
    359  return default_value;
    +
    360  }
    +
    361  if (rows < 0)
    +
    362  {
    +
    363  printError(std::string("Invalid expected matrix dimensions for parameter ") + resolved(name_prefixed) + std::string(" (rows and cols must be >= 0)"));
    +
    364  m_load_successful = false;
    +
    365  return default_value;
    +
    366  }
    +
    367  for (const auto& col : cols)
    +
    368  {
    +
    369  if (col < 0)
    +
    370  {
    +
    371  printError(std::string("Invalid expected matrix dimensions for parameter ") + resolved(name_prefixed) + std::string(" (rows and cols must be >= 0)"));
    +
    372  m_load_successful = false;
    +
    373  return default_value;
    +
    374  }
    +
    375  total_cols += col;
    +
    376  }
    +
    377 
    +
    378  //}
    +
    379 
    +
    380  const MatrixX<T> loaded_matrix = loadMatrixX(name + "/data", MatrixX<T>(), rows, total_cols, optional, unique, NO_SWAP, false);
    +
    381  /* std::cout << "loaded_matrix: " << loaded_matrix << std::endl; */
    +
    382  /* std::cout << "loaded_matrix: " << loaded_matrix.rows() << "x" << loaded_matrix.cols() << std::endl; */
    +
    383  /* std::cout << "expected dims: " << rows << "x" << total_cols << std::endl; */
    +
    384  if (loaded_matrix.rows() != rows || loaded_matrix.cols() != total_cols)
    +
    385  {
    +
    386  m_load_successful = false;
    +
    387  return default_value;
    +
    388  }
    +
    389 
    +
    390  int cols_loaded = 0;
    +
    391  for (unsigned it = 0; it < cols.size(); it++)
    +
    392  {
    +
    393  const int cur_cols = cols.at(it);
    +
    394  const MatrixX<T> cur_mat = loaded_matrix.block(0, cols_loaded, rows, cur_cols);
    +
    395  /* std::cout << "cur_mat: " << cur_mat << std::endl; */
    +
    396  loaded.push_back(cur_mat);
    +
    397  cols_loaded += cur_cols;
    +
    398  printValue(name_prefixed + "/matrix#" + std::to_string(it), cur_mat);
    +
    399  }
    +
    400  return loaded;
    +
    401  }
    +
    402  //}
    +
    403 
    +
    404  /* loadMatrixStatic_internal helper function for loading EigenXd matrices with known dimensions //{ */
    +
    405  template <typename T>
    +
    406  MatrixX<T> loadMatrixStatic_internal(const std::string& name, const MatrixX<T>& default_value, int rows, int cols, optional_t optional, unique_t unique)
    +
    407  {
    +
    408  MatrixX<T> loaded = default_value;
    +
    409  // first, check that at least one dimension is set
    +
    410  if (rows <= 0 || cols <= 0)
    +
    411  {
    +
    412  printError(std::string("Invalid expected matrix dimensions for parameter ") + resolved(name) + std::string(" (use loadMatrixDynamic?)"));
    +
    413  m_load_successful = false;
    +
    414  return loaded;
    +
    415  }
    +
    416 
    +
    417  return loadMatrixX(name, default_value, rows, cols, optional, unique, NO_SWAP);
    +
    418  }
    +
    419  //}
    +
    420 
    +
    421  /* loadMatrixDynamic_internal helper function for loading Eigen matrices with one dynamic (unspecified) dimension //{ */
    +
    422  template <typename T>
    +
    423  MatrixX<T> loadMatrixDynamic_internal(const std::string& name, const MatrixX<T>& default_value, int rows, int cols, optional_t optional, unique_t unique)
    +
    424  {
    +
    425  MatrixX<T> loaded = default_value;
    +
    426 
    +
    427  // next, check that at least one dimension is set
    +
    428  if (rows <= 0 && cols <= 0)
    +
    429  {
    +
    430  printError(std::string("Invalid expected matrix dimensions for parameter ") + resolved(name) + std::string(" (at least one dimension must be specified)"));
    +
    431  m_load_successful = false;
    +
    432  return loaded;
    +
    433  }
    +
    434 
    +
    435  swap_t swap = NO_SWAP;
    +
    436  if (rows <= 0)
    +
    437  {
    +
    438  int tmp = rows;
    +
    439  rows = cols;
    +
    440  cols = tmp;
    +
    441  swap = SWAP;
    +
    442  }
    +
    443  return loadMatrixX(name, default_value, rows, cols, optional, unique, swap);
    +
    444  }
    +
    445  //}
    +
    446  //}
    +
    447 
    +
    448  /* load helper function for generic types //{ */
    +
    449  // This function tries to load a parameter with name 'name' and a default value.
    +
    450  // You can use the flag 'optional' to not throw a ROS_ERROR when the parameter
    +
    451  // cannot be loaded and the flag 'printValues' to set whether the loaded
    +
    452  // value and name of the parameter should be printed to cout.
    +
    453  // If 'optional' is set to false and the parameter could not be loaded,
    +
    454  // the flag 'load_successful' is set to false and a ROS_ERROR message
    +
    455  // is printer.
    +
    456  // If 'unique' flag is set to false then the parameter is not checked
    +
    457  // for being loaded twice.
    +
    458  // Returns a tuple, containing either the loaded or the default value and a bool,
    +
    459  // indicating if the value was loaded (true) or the default value was used (false).
    +
    460  template <typename T>
    +
    461  std::pair<T, bool> load(const std::string& name, const T& default_value, optional_t optional = OPTIONAL, unique_t unique = UNIQUE)
    +
    462  {
    +
    463  const std::string name_prefixed = m_prefix + name;
    +
    464  T loaded = default_value;
    +
    465  if (unique && check_duplicit_loading(name_prefixed))
    +
    466  return {loaded, false};
    +
    467 
    +
    468  bool cur_load_successful = true;
    +
    469  // try to load the parameter
    +
    470  const bool success = m_pp.getParam(name_prefixed, loaded);
    +
    471  if (!success)
    +
    472  {
    +
    473  // if it was not loaded, set the default value
    +
    474  loaded = default_value;
    +
    475  if (!optional)
    +
    476  {
    +
    477  // if the parameter was compulsory, alert the user and set the flag
    +
    478  printError(std::string("Could not load non-optional parameter ") + resolved(name_prefixed));
    +
    479  cur_load_successful = false;
    +
    480  }
    +
    481  }
    +
    482 
    +
    483  if (cur_load_successful)
    +
    484  {
    +
    485  // everything is fine and just print the name_prefixed and value if required
    +
    486  if (m_print_values)
    +
    487  printValue(name_prefixed, loaded);
    +
    488  // mark the param name_prefixed as successfully loaded
    +
    489  m_loaded_params.insert(name_prefixed);
    +
    490  } else
    +
    491  {
    +
    492  m_load_successful = false;
    +
    493  }
    +
    494  // finally, return the resulting value
    +
    495  return {loaded, success};
    +
    496  }
    +
    497  //}
    +
    498 
    +
    499 public:
    +
    507  ParamLoader(const ros::NodeHandle& nh, bool printValues = true, std::string_view node_name = std::string())
    +
    508  : m_load_successful(true),
    +
    509  m_print_values(printValues),
    +
    510  m_node_name(node_name),
    +
    511  m_nh(nh),
    +
    512  m_pp(nh, m_node_name)
    +
    513  {
    +
    514  /* std::cout << "Initialized1 ParamLoader for node " << node_name << std::endl; */
    +
    515  }
    +
    516 
    +
    517  /* Constructor overloads //{ */
    +
    524  ParamLoader(const ros::NodeHandle& nh, std::string_view node_name)
    +
    525  : ParamLoader(nh, true, node_name)
    +
    526  {
    +
    527  /* std::cout << "Initialized2 ParamLoader for node " << node_name << std::endl; */
    +
    528  }
    +
    529 
    +
    536  ParamLoader(const std::string& filepath, const ros::NodeHandle& nh)
    +
    537  : ParamLoader(nh, "none")
    +
    538  {
    +
    539  YAML::Node node = YAML::Load(filepath);
    +
    540  }
    +
    541  //}
    +
    542 
    +
    543  /* setPrefix function //{ */
    +
    544 
    +
    550  void setPrefix(const std::string& prefix)
    +
    551  {
    +
    552  m_prefix = prefix;
    +
    553  }
    +
    554 
    +
    555  //}
    +
    556 
    +
    557  /* getPrefix function //{ */
    +
    558 
    +
    564  std::string getPrefix()
    +
    565  {
    +
    566  return m_prefix;
    +
    567  }
    +
    568 
    +
    569  //}
    +
    570 
    +
    571  /* addYamlFile() function //{ */
    +
    572 
    +
    579  bool addYamlFile(const std::string& filepath)
    +
    580  {
    +
    581  return m_pp.addYamlFile(filepath);
    +
    582  }
    +
    583  //}
    +
    584 
    +
    585  /* addYamlFileFromParam() function //{ */
    +
    586 
    +
    593  bool addYamlFileFromParam(const std::string& param_name)
    +
    594  {
    +
    595  std::string filepath;
    +
    596  if (!loadParam(param_name, filepath))
    +
    597  return false;
    +
    598  return m_pp.addYamlFile(filepath);
    +
    599  }
    +
    600  //}
    +
    601 
    +
    602  /* loadedSuccessfully function //{ */
    + +
    609  {
    +
    610  return m_load_successful;
    +
    611  }
    +
    612  //}
    +
    613 
    +
    614  /* loadParam function for optional parameters //{ */
    +
    627  template <typename T>
    +
    628  bool loadParam(const std::string& name, T& out_value, const T& default_value)
    +
    629  {
    +
    630  const auto [ret, success] = load<T>(name, default_value, OPTIONAL, UNIQUE);
    +
    631  out_value = ret;
    +
    632  return success;
    +
    633  }
    +
    645  template <typename T>
    +
    646  T loadParam2(const std::string& name, const T& default_value)
    +
    647  {
    +
    648  const auto loaded = load<T>(name, default_value, OPTIONAL, UNIQUE);
    +
    649  return loaded.first;
    +
    650  }
    +
    663  template <typename T>
    +
    664  bool loadParamReusable(const std::string& name, T& out_value, const T& default_value)
    +
    665  {
    +
    666  const auto [ret, success] = load<T>(name, default_value, OPTIONAL, REUSABLE);
    +
    667  out_value = ret;
    +
    668  return success;
    +
    669  }
    +
    681  template <typename T>
    +
    682  T loadParamReusable2(const std::string& name, const T& default_value)
    +
    683  {
    +
    684  const auto [ret, success] = load<T>(name, default_value, OPTIONAL, REUSABLE);
    +
    685  return ret;
    +
    686  }
    +
    687  //}
    +
    688 
    +
    689  /* loadParam function for compulsory parameters //{ */
    +
    701  template <typename T>
    +
    702  bool loadParam(const std::string& name, T& out_value)
    +
    703  {
    +
    704  const auto [ret, success] = load<T>(name, T(), COMPULSORY, UNIQUE);
    +
    705  out_value = ret;
    +
    706  return success;
    +
    707  }
    +
    718  template <typename T>
    +
    719  T loadParam2(const std::string& name)
    +
    720  {
    +
    721  const auto [ret, success] = load<T>(name, T(), COMPULSORY, UNIQUE);
    +
    722  return ret;
    +
    723  }
    +
    735  template <typename T>
    +
    736  bool loadParamReusable(const std::string& name, T& out_value)
    +
    737  {
    +
    738  const auto [ret, success] = load<T>(name, T(), COMPULSORY, REUSABLE);
    +
    739  out_value = ret;
    +
    740  return success;
    +
    741  }
    +
    752  template <typename T>
    +
    753  T loadParamReusable2(const std::string& name)
    +
    754  {
    +
    755  const auto [ret, success] = load<T>(name, T(), COMPULSORY, REUSABLE);
    +
    756  return ret;
    +
    757  }
    +
    758  //}
    +
    759 
    +
    760  /* loadParam specializations for ros::Duration type //{ */
    +
    761 
    +
    772  bool loadParam(const std::string& name, ros::Duration& out, const ros::Duration& default_value)
    +
    773  {
    +
    774  double secs;
    +
    775  const bool ret = loadParam<double>(name, secs, default_value.toSec());
    +
    776  out = ros::Duration(secs);
    +
    777  return ret;
    +
    778  }
    +
    779 
    +
    789  bool loadParam(const std::string& name, ros::Duration& out)
    +
    790  {
    +
    791  double secs;
    +
    792  const bool ret = loadParam<double>(name, secs);
    +
    793  out = ros::Duration(secs);
    +
    794  return ret;
    +
    795  }
    +
    796 
    +
    797  //}
    +
    798 
    +
    799  /* loadParam specializations for std_msgs::ColorRGBA type //{ */
    +
    800 
    +
    811  bool loadParam(const std::string& name, std_msgs::ColorRGBA& out, const std_msgs::ColorRGBA& default_value = {})
    +
    812  {
    +
    813  std_msgs::ColorRGBA res;
    +
    814  bool ret = true;
    +
    815  ret = ret & loadParam(name+"/r", res.r, default_value.r);
    +
    816  ret = ret & loadParam(name+"/g", res.g, default_value.g);
    +
    817  ret = ret & loadParam(name+"/b", res.b, default_value.b);
    +
    818  ret = ret & loadParam(name+"/a", res.a, default_value.a);
    +
    819  if (ret)
    +
    820  out = res;
    +
    821  return ret;
    +
    822  }
    +
    823 
    +
    833  std_msgs::ColorRGBA loadParam2(const std::string& name, const std_msgs::ColorRGBA& default_value = {})
    +
    834  {
    +
    835  std_msgs::ColorRGBA ret;
    +
    836  loadParam(name, ret, default_value);
    +
    837  return ret;
    +
    838  }
    +
    839 
    +
    840  //}
    +
    841 
    +
    842  /* loadParam specializations and convenience functions for Eigen dynamic matrix type //{ */
    +
    843 
    +
    857  template <typename T>
    +
    858  void loadParam(const std::string& name, MatrixX<T>& mat, const MatrixX<T>& default_value)
    +
    859  {
    +
    860  mat = loadParam2(name, default_value);
    +
    861  }
    +
    862 
    +
    876  template <typename T>
    +
    877  MatrixX<T> loadParam2(const std::string& name, const MatrixX<T>& default_value)
    +
    878  {
    +
    879  int rows = default_value.rows();
    +
    880  int cols = default_value.cols();
    +
    881  MatrixX<T> loaded;
    +
    882  loadMatrixDynamic(name, loaded, default_value, rows, cols);
    +
    883  return loaded;
    +
    884  }
    +
    885 
    +
    886  //}
    +
    887 
    +
    888  // loadMatrixStatic function for loading of static Eigen::Matrices //{
    +
    889 
    +
    905  template <int rows, int cols, typename T>
    +
    906  void loadMatrixStatic(const std::string& name, Eigen::Matrix<T, rows, cols>& mat)
    +
    907  {
    +
    908  mat = loadMatrixStatic2<rows, cols, T>(name);
    +
    909  }
    +
    910 
    +
    927  template <int rows, int cols, typename T, typename Derived>
    +
    928  void loadMatrixStatic(const std::string& name, Eigen::Matrix<T, rows, cols>& mat, const Eigen::MatrixBase<Derived>& default_value)
    +
    929  {
    +
    930  mat = loadMatrixStatic2<rows, cols, T>(name, default_value);
    +
    931  }
    +
    932 
    +
    948  template <int rows, int cols, typename T = double>
    +
    949  Eigen::Matrix<T, rows, cols> loadMatrixStatic2(const std::string& name)
    +
    950  {
    +
    951  return loadMatrixStatic_internal<rows, cols, T>(name, Eigen::Matrix<T, rows, cols>::Zero(), COMPULSORY, UNIQUE);
    +
    952  }
    +
    953 
    +
    970  template <int rows, int cols, typename T, typename Derived>
    +
    971  Eigen::Matrix<T, rows, cols> loadMatrixStatic2(const std::string& name, const Eigen::MatrixBase<Derived>& default_value)
    +
    972  {
    +
    973  return loadMatrixStatic_internal<rows, cols, T>(name, Eigen::Matrix<T, rows, cols>(default_value), OPTIONAL, UNIQUE);
    +
    974  }
    +
    975  //}
    +
    976 
    +
    977  // loadMatrixStatic function for loading of Eigen matrices with known dimensions //{
    +
    978 
    +
    992  template <typename T>
    +
    993  void loadMatrixStatic(const std::string& name, MatrixX<T>& mat, int rows, int cols)
    +
    994  {
    +
    995  mat = loadMatrixStatic2<T>(name, rows, cols);
    +
    996  }
    +
    997 
    +
    1012  template <typename T, typename Derived>
    +
    1013  void loadMatrixStatic(const std::string& name, MatrixX<T>& mat, const Eigen::MatrixBase<Derived>& default_value, int rows, int cols)
    +
    1014  {
    +
    1015  mat = loadMatrixStatic2<T>(name, default_value, rows, cols);
    +
    1016  }
    +
    1017 
    +
    1031  template <typename T = double>
    +
    1032  MatrixX<T> loadMatrixStatic2(const std::string& name, int rows, int cols)
    +
    1033  {
    +
    1034  return loadMatrixStatic_internal(name, MatrixX<T>(), rows, cols, COMPULSORY, UNIQUE);
    +
    1035  }
    +
    1036 
    +
    1051  template <typename T, typename Derived>
    +
    1052  MatrixX<T> loadMatrixStatic2(const std::string& name, const Eigen::MatrixBase<Derived>& default_value, int rows, int cols)
    +
    1053  {
    +
    1054  return loadMatrixStatic_internal(name, MatrixX<T>(default_value), rows, cols, OPTIONAL, UNIQUE);
    +
    1055  }
    +
    1056  //}
    +
    1057 
    +
    1058  // loadMatrixDynamic function for half-dynamic loading of MatrixX<T> //{
    +
    1059 
    +
    1073  template <typename T>
    +
    1074  void loadMatrixDynamic(const std::string& name, MatrixX<T>& mat, int rows, int cols)
    +
    1075  {
    +
    1076  mat = loadMatrixDynamic2<T>(name, rows, cols);
    +
    1077  }
    +
    1078 
    +
    1093  template <typename T, typename Derived>
    +
    1094  void loadMatrixDynamic(const std::string& name, MatrixX<T>& mat, const Eigen::MatrixBase<Derived>& default_value, int rows, int cols)
    +
    1095  {
    +
    1096  mat = loadMatrixDynamic2<T>(name, default_value, rows, cols);
    +
    1097  }
    +
    1098 
    +
    1112  template <typename T = double>
    +
    1113  MatrixX<T> loadMatrixDynamic2(const std::string& name, int rows, int cols)
    +
    1114  {
    +
    1115  return loadMatrixDynamic_internal(name, MatrixX<T>(), rows, cols, COMPULSORY, UNIQUE);
    +
    1116  }
    +
    1117 
    +
    1132  template <typename T, typename Derived>
    +
    1133  MatrixX<T> loadMatrixDynamic2(const std::string& name, const Eigen::MatrixBase<Derived>& default_value, int rows, int cols)
    +
    1134  {
    +
    1135  return loadMatrixDynamic_internal(name, MatrixX<T>(default_value), rows, cols, OPTIONAL, UNIQUE);
    +
    1136  }
    +
    1137 
    +
    1138  //}
    +
    1139 
    +
    1140  // loadMatrixArray function for loading of an array of MatrixX<T> with known dimensions //{
    +
    1173  template <typename T>
    +
    1174  void loadMatrixArray(const std::string& name, std::vector<MatrixX<T>>& mat)
    +
    1175  {
    +
    1176  mat = loadMatrixArray2<double>(name);
    +
    1177  }
    +
    1178 
    +
    1190  template <typename T>
    +
    1191  void loadMatrixArray(const std::string& name, std::vector<MatrixX<T>>& mat, const std::vector<MatrixX<T>>& default_value)
    +
    1192  {
    +
    1193  mat = loadMatrixArray2(name, default_value);
    +
    1194  }
    +
    1195 
    +
    1206  template <typename T = double>
    +
    1207  std::vector<MatrixX<T>> loadMatrixArray2(const std::string& name)
    +
    1208  {
    +
    1209  return loadMatrixArray_internal(name, std::vector<MatrixX<T>>(), COMPULSORY, UNIQUE);
    +
    1210  }
    +
    1211 
    +
    1223  template <typename T>
    +
    1224  std::vector<MatrixX<T>> loadMatrixArray2(const std::string& name, const std::vector<MatrixX<T>>& default_value)
    +
    1225  {
    +
    1226  return loadMatrixArray_internal(name, default_value, OPTIONAL, UNIQUE);
    +
    1227  }
    +
    1228  //}
    +
    1229 
    +
    1230  //}
    +
    1231 
    +
    1232 };
    +
    1233 //}
    +
    1234 
    +
    1244  template <>
    +
    1245  ros::Duration ParamLoader::loadParam2<ros::Duration>(const std::string& name, const ros::Duration& default_value);
    +
    1246 
    +
    1255  template <>
    +
    1256  ros::Duration ParamLoader::loadParam2<ros::Duration>(const std::string& name);
    +
    1257 
    +
    1258 } // namespace mrs_lib
    +
    1259 
    +
    1260 #endif // PARAM_LOADER_H
    +
    +
    +
    bool addYamlFile(const std::string &filepath)
    Adds the specified file as a source of static parameters.
    Definition: param_loader.h:579
    +
    void loadMatrixStatic(const std::string &name, MatrixX< T > &mat, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)
    Specialized method for loading Eigen matrix parameters with default value.
    Definition: param_loader.h:1013
    +
    void setPrefix(const std::string &prefix)
    All loaded parameters will be prefixed with this string.
    Definition: param_loader.h:550
    +
    MatrixX< T > loadMatrixStatic2(const std::string &name, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)
    Specialized method for loading Eigen matrix parameters with default value.
    Definition: param_loader.h:1052
    +
    void loadMatrixArray(const std::string &name, std::vector< MatrixX< T >> &mat, const std::vector< MatrixX< T >> &default_value)
    Specialized method for loading compulsory parameters, interpreted as an array of dynamic Eigen matric...
    Definition: param_loader.h:1191
    +
    MatrixX< T > loadMatrixStatic2(const std::string &name, int rows, int cols)
    Specialized method for loading compulsory Eigen matrix parameters.
    Definition: param_loader.h:1032
    +
    bool loadParam(const std::string &name, ros::Duration &out)
    An overload for loading ros::Duration.
    Definition: param_loader.h:789
    +
    bool loadParamReusable(const std::string &name, T &out_value, const T &default_value)
    Loads a parameter from the rosparam server with a default value.
    Definition: param_loader.h:664
    +
    void loadMatrixStatic(const std::string &name, Eigen::Matrix< T, rows, cols > &mat, const Eigen::MatrixBase< Derived > &default_value)
    Specialized method for loading Eigen matrix parameters with default value.
    Definition: param_loader.h:928
    +
    Eigen::Matrix< T, rows, cols > loadMatrixStatic2(const std::string &name)
    Specialized method for loading compulsory Eigen matrix parameters.
    Definition: param_loader.h:949
    +
    T loadParam2(const std::string &name, const T &default_value)
    Loads a parameter from the rosparam server with a default value.
    Definition: param_loader.h:646
    +
    T loadParam2(const std::string &name)
    Loads a compulsory parameter from the rosparam server.
    Definition: param_loader.h:719
    +
    T loadParamReusable2(const std::string &name)
    Loads a compulsory parameter from the rosparam server.
    Definition: param_loader.h:753
    +
    bool loadParam(const std::string &name, std_msgs::ColorRGBA &out, const std_msgs::ColorRGBA &default_value={})
    An overload for loading std_msgs::ColorRGBA.
    Definition: param_loader.h:811
    +
    ParamLoader(const ros::NodeHandle &nh, std::string_view node_name)
    Convenience overload to enable writing ParamLoader pl(nh, node_name);.
    Definition: param_loader.h:524
    +
    T loadParamReusable2(const std::string &name, const T &default_value)
    Loads an optional reusable parameter from the rosparam server.
    Definition: param_loader.h:682
    +
    bool loadParam(const std::string &name, ros::Duration &out, const ros::Duration &default_value)
    An overload for loading ros::Duration.
    Definition: param_loader.h:772
    +
    std::vector< MatrixX< T > > loadMatrixArray2(const std::string &name)
    Specialized method for loading compulsory parameters, interpreted as an array of dynamic Eigen matric...
    Definition: param_loader.h:1207
    +
    bool loadedSuccessfully()
    Indicates whether all compulsory parameters were successfully loaded.
    Definition: param_loader.h:608
    +
    ParamLoader(const std::string &filepath, const ros::NodeHandle &nh)
    Convenience overload to enable writing ParamLoader pl(nh, "node_name");.
    Definition: param_loader.h:536
    +
    void loadMatrixArray(const std::string &name, std::vector< MatrixX< T >> &mat)
    Specialized method for loading compulsory parameters, interpreted as an array of dynamic Eigen matric...
    Definition: param_loader.h:1174
    +
    void loadMatrixDynamic(const std::string &name, MatrixX< T > &mat, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)
    Specialized method for loading compulsory dynamic Eigen matrix parameters.
    Definition: param_loader.h:1094
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    void loadMatrixStatic(const std::string &name, Eigen::Matrix< T, rows, cols > &mat)
    Specialized method for loading compulsory Eigen matrix parameters.
    Definition: param_loader.h:906
    +
    bool loadParam(const std::string &name, T &out_value, const T &default_value)
    Loads a parameter from the rosparam server with a default value.
    Definition: param_loader.h:628
    +
    std::vector< MatrixX< T > > loadMatrixArray2(const std::string &name, const std::vector< MatrixX< T >> &default_value)
    Specialized method for loading compulsory parameters, interpreted as an array of dynamic Eigen matric...
    Definition: param_loader.h:1224
    +
    bool loadParamReusable(const std::string &name, T &out_value)
    Loads a compulsory parameter from the rosparam server.
    Definition: param_loader.h:736
    +
    Convenience class for loading parameters from rosparam server.
    Definition: param_loader.h:43
    +
    void loadMatrixDynamic(const std::string &name, MatrixX< T > &mat, int rows, int cols)
    Specialized method for loading compulsory dynamic Eigen matrix parameters.
    Definition: param_loader.h:1074
    +
    MatrixX< T > loadParam2(const std::string &name, const MatrixX< T > &default_value)
    An overload for loading Eigen matrices.
    Definition: param_loader.h:877
    +
    std_msgs::ColorRGBA loadParam2(const std::string &name, const std_msgs::ColorRGBA &default_value={})
    An overload for loading std_msgs::ColorRGBA.
    Definition: param_loader.h:833
    +
    std::string getPrefix()
    Returns the current parameter name prefix.
    Definition: param_loader.h:564
    +
    bool loadParam(const std::string &name, T &out_value)
    Loads a compulsory parameter from the rosparam server.
    Definition: param_loader.h:702
    +
    void loadParam(const std::string &name, MatrixX< T > &mat, const MatrixX< T > &default_value)
    An overload for loading Eigen matrices.
    Definition: param_loader.h:858
    +
    Eigen::Matrix< T, rows, cols > loadMatrixStatic2(const std::string &name, const Eigen::MatrixBase< Derived > &default_value)
    Specialized method for loading Eigen matrix parameters with default value.
    Definition: param_loader.h:971
    +
    bool addYamlFileFromParam(const std::string &param_name)
    Adds the specified file as a source of static parameters.
    Definition: param_loader.h:593
    +
    MatrixX< T > loadMatrixDynamic2(const std::string &name, int rows, int cols)
    Specialized method for loading compulsory dynamic Eigen matrix parameters.
    Definition: param_loader.h:1113
    +
    Definition: param_provider.h:13
    +
    ParamLoader(const ros::NodeHandle &nh, bool printValues=true, std::string_view node_name=std::string())
    Main constructor.
    Definition: param_loader.h:507
    +
    MatrixX< T > loadMatrixDynamic2(const std::string &name, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)
    Specialized method for loading compulsory dynamic Eigen matrix parameters.
    Definition: param_loader.h:1133
    +
    void loadMatrixStatic(const std::string &name, MatrixX< T > &mat, int rows, int cols)
    Specialized method for loading compulsory Eigen matrix parameters.
    Definition: param_loader.h:993
    + + + + diff --git a/param__provider_8h_source.html b/param__provider_8h_source.html new file mode 100644 index 00000000..22387f7d --- /dev/null +++ b/param__provider_8h_source.html @@ -0,0 +1,147 @@ + + + + + + + +mrs_lib: include/mrs_lib/param_provider.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    param_provider.h
    +
    +
    +
    1 #ifndef PARAM_PROVIDER_H
    +
    2 #define PARAM_PROVIDER_H
    +
    3 
    +
    4 #include <string>
    +
    5 #include <fstream>
    +
    6 #include <sstream>
    +
    7 #include <algorithm>
    +
    8 #include <yaml-cpp/yaml.h>
    +
    9 #include <ros/node_handle.h>
    +
    10 
    +
    11 namespace mrs_lib
    +
    12 {
    + +
    14  {
    +
    15  public:
    +
    16 
    +
    17  template <typename T>
    +
    18  bool getParam(const std::string& param_name, T& value_out) const;
    +
    19 
    +
    20  bool getParam(const std::string& param_name, XmlRpc::XmlRpcValue& value_out) const;
    +
    21 
    +
    22  ParamProvider(const ros::NodeHandle& nh, std::string node_name, const bool use_rosparam = true);
    +
    23 
    +
    24  bool addYamlFile(const std::string& filepath);
    +
    25 
    +
    26  private:
    +
    27 
    +
    28  std::vector<YAML::Node> m_yamls;
    +
    29  ros::NodeHandle m_nh;
    +
    30  std::string m_node_name;
    +
    31  bool m_use_rosparam;
    +
    32 
    +
    33  template <typename T>
    +
    34  bool getParamImpl(const std::string& param_name, T& value_out) const;
    +
    35 
    +
    36  std::optional<YAML::Node> findYamlNode(const std::string& param_name) const;
    +
    37  };
    +
    38 
    +
    39 }
    +
    40 
    +
    41 #include "mrs_lib/impl/param_provider.hpp"
    +
    42 
    +
    43 #endif // PARAM_PROVIDER_H
    +
    +
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    Definition: param_provider.h:13
    + + + + diff --git a/param__provider_8hpp_source.html b/param__provider_8hpp_source.html new file mode 100644 index 00000000..a7cdd2d9 --- /dev/null +++ b/param__provider_8hpp_source.html @@ -0,0 +1,151 @@ + + + + + + + +mrs_lib: include/mrs_lib/impl/param_provider.hpp Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    param_provider.hpp
    +
    +
    +
    1 #ifndef PARAM_PROVIDER_HPP
    +
    2 #define PARAM_PROVIDER_HPP
    +
    3 
    +
    4 #include <mrs_lib/param_provider.h>
    +
    5 
    +
    6 namespace mrs_lib
    +
    7 {
    +
    8  template <typename T>
    +
    9  bool ParamProvider::getParam(const std::string& param_name, T& value_out) const
    +
    10  {
    +
    11  try
    +
    12  {
    +
    13  return getParamImpl(param_name, value_out);
    +
    14  }
    +
    15  catch (const YAML::Exception& e)
    +
    16  {
    +
    17  ROS_ERROR_STREAM("[" << m_node_name << "]: YAML-CPP threw an unknown exception: " << e.what());
    +
    18  return false;
    +
    19  }
    +
    20  }
    +
    21 
    +
    22  template <typename T>
    +
    23  bool ParamProvider::getParamImpl(const std::string& param_name, T& value_out) const
    +
    24  {
    +
    25  {
    +
    26  const auto found_node = findYamlNode(param_name);
    +
    27  if (found_node.has_value())
    +
    28  {
    +
    29  try
    +
    30  {
    +
    31  // try catch is the only type-generic option...
    +
    32  value_out = found_node.value().as<T>();
    +
    33  return true;
    +
    34  }
    +
    35  catch (const YAML::BadConversion& e)
    +
    36  {}
    +
    37  }
    +
    38 
    +
    39  }
    +
    40 
    +
    41  if (m_use_rosparam)
    +
    42  return m_nh.getParam(param_name, value_out);
    +
    43 
    +
    44  return false;
    +
    45  }
    +
    46 }
    +
    47 
    +
    48 #endif // PARAM_PROVIDER_HPP
    +
    +
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    + + + + diff --git a/param_loader_2example_8cpp-example.html b/param_loader_2example_8cpp-example.html new file mode 100644 index 00000000..8b6d8450 --- /dev/null +++ b/param_loader_2example_8cpp-example.html @@ -0,0 +1,157 @@ + + + + + + + +mrs_lib: param_loader/example.cpp + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    param_loader/example.cpp
    +
    +
    +

    This example may be run after building mrs_lib by executing rosrun mrs_lib param_loader_example. It demonstrates loading of parameters from the rosparam server inside your node/nodelet using ParamLoader.

    +

    To load parameters into the rosparam server, use a launchfile prefferably. See documentation of ROS launchfiles here: http://wiki.ros.org/roslaunch/XML. Specifically, the param XML tag is used for loading parameters directly from the launchfile: http://wiki.ros.org/roslaunch/XML/param, and the rosparam XML tag tag is used for loading parameters from a yaml file: http://wiki.ros.org/roslaunch/XML/rosparam.

    +

    Example code for using the ParamLoader (see documentation of the ParamLoader class):

    +
    // clang: MatousFormat
    +
    /* Include the ParamLoader header */
    + +
    +
    int main(int argc, char **argv)
    +
    {
    +
    /* Set up ROS. */
    +
    const std::string node_name("param_loader_example");
    +
    ros::init(argc, argv, node_name);
    +
    ros::NodeHandle nh;
    +
    +
    ROS_INFO("[%s]: pushing testing parameters to the rosparam server", node_name.c_str());
    +
    nh.setParam("test_param_double", std::numeric_limits<double>::quiet_NaN());
    +
    nh.setParam("test_param_vector", std::vector<int>({6, 6, 6}));
    +
    +
    ROS_INFO("[%s]: loading parameters using ParamLoader", node_name.c_str());
    +
    mrs_lib::ParamLoader pl(nh, node_name);
    +
    +
    /* Most basic way to load a parameter to a variable, which could be a class member */
    +
    double test_param_double;
    +
    pl.loadParam("test_param_double", test_param_double);
    +
    +
    /* Load a parameter and return it */
    +
    const std::vector<int> test_param_vector = pl.loadParam2<std::vector<int>>("test_param_vector");
    +
    +
    /* Load a parameter with a default value, which will be used in this case
    +
    * unless you manually push the parameter 'test_param_int' to the rosparam server
    +
    * (e.g. using 'rosparam set test_param_int 15'). */
    +
    [[maybe_unused]] const int test_param_int = pl.loadParam2<int>("test_param_int", 4);
    +
    +
    /* Load a compulsory parameter - without a default value. This will fail in this
    +
    * case, unless you manually push the parameter to the server. */
    +
    [[maybe_unused]] const bool test_param_bool = pl.loadParam2<bool>("test_param_bool");
    +
    +
    /* Check if all parameters were loaded successfully */
    +
    if (!pl.loadedSuccessfully())
    +
    {
    +
    /* If not, alert the user and shut the node down */
    +
    ROS_ERROR("[%s]: parameter loading failure", node_name.c_str());
    +
    ros::shutdown();
    +
    return 1;
    +
    }
    +
    +
    /* Otherwise, continue the program (in this case it's the end) */
    +
    return 0;
    +
    +
    }
    +
    +
    +
    +
    T loadParam2(const std::string &name, const T &default_value)
    Loads a parameter from the rosparam server with a default value.
    Definition: param_loader.h:646
    +
    bool loadedSuccessfully()
    Indicates whether all compulsory parameters were successfully loaded.
    Definition: param_loader.h:608
    +
    Defines ParamLoader - a convenience class for loading static ROS parameters.
    +
    bool loadParam(const std::string &name, T &out_value, const T &default_value)
    Loads a parameter from the rosparam server with a default value.
    Definition: param_loader.h:628
    +
    Convenience class for loading parameters from rosparam server.
    Definition: param_loader.h:43
    + + + + diff --git a/point__obstacle_8h_source.html b/point__obstacle_8h_source.html new file mode 100644 index 00000000..f501255e --- /dev/null +++ b/point__obstacle_8h_source.html @@ -0,0 +1,150 @@ + + + + + + + +mrs_lib: include/mrs_lib/safety_zone/point_obstacle.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    point_obstacle.h
    +
    +
    +
    1 // clang: TomasFormat
    +
    2 #ifndef MRS_LIB_POINTOBSTACLE_H
    +
    3 #define MRS_LIB_POINTOBSTACLE_H
    +
    4 
    +
    5 #include <exception>
    +
    6 #include <eigen3/Eigen/Eigen>
    +
    7 #include <geometry_msgs/Point.h>
    +
    8 
    +
    9 namespace mrs_lib
    +
    10 {
    + +
    12 public:
    +
    13  PointObstacle(const Eigen::RowVector2d center, const double r, const double height);
    +
    14  bool isPointInside3d(const double px, const double py, const double pz);
    +
    15  bool isPointInside2d(const double px, const double py);
    +
    16  bool doesSectionIntersect3d(const double startX, const double startY, const double startZ, const double endX, const double endY, const double endZ);
    +
    17  bool doesSectionIntersect2d(const double startX, const double startY, const double endX, const double endY);
    +
    18  void inflateSelf(double amount);
    +
    19  std::vector<geometry_msgs::Point> getPointMessageVector(const double z);
    +
    20 
    +
    21 private:
    +
    22  Eigen::RowVector2d center;
    +
    23  double r;
    +
    24  double height;
    +
    25 
    +
    26 public:
    +
    27  // exceptions
    +
    28  struct WrongRadius : public std::exception
    +
    29  {
    +
    30  const char* what() const throw() {
    +
    31  return "PointObstacle: radius must be > 0!";
    +
    32  }
    +
    33  };
    +
    34  struct WrongHeight : public std::exception
    +
    35  {
    +
    36  const char* what() const throw() {
    +
    37  return "PointObstacle: height must be > 0!";
    +
    38  }
    +
    39  };
    +
    40 };
    +
    41 } // namespace mrs_lib
    +
    42 
    +
    43 
    +
    44 #endif // MRS_LIB_POINTOBSTACLE_H
    +
    +
    +
    Definition: point_obstacle.h:28
    +
    Definition: point_obstacle.h:34
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    Definition: point_obstacle.h:11
    + + + + diff --git a/polygon_8h_source.html b/polygon_8h_source.html new file mode 100644 index 00000000..69407897 --- /dev/null +++ b/polygon_8h_source.html @@ -0,0 +1,159 @@ + + + + + + + +mrs_lib: include/mrs_lib/safety_zone/polygon.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    polygon.h
    +
    +
    +
    1 // clang: TomasFormat
    +
    2 #ifndef MRS_LIB_POLYGON_H
    +
    3 #define MRS_LIB_POLYGON_H
    +
    4 
    +
    5 #include <ros/ros.h>
    +
    6 #include <eigen3/Eigen/Eigen>
    +
    7 #include <vector>
    +
    8 #include <geometry_msgs/Point.h>
    +
    9 #include <mrs_lib/safety_zone/line_operations.h>
    +
    10 
    +
    11 namespace mrs_lib
    +
    12 {
    +
    13 class Polygon {
    +
    14 public:
    +
    15  Polygon(const Eigen::MatrixXd vertices);
    +
    16 
    +
    17  bool isPointInside(const double px, const double py);
    +
    18  bool doesSectionIntersect(const double startX, const double startY, const double endX, const double endY);
    +
    19  bool isClockwise();
    +
    20  void inflateSelf(double amount);
    +
    21 
    +
    22  std::vector<geometry_msgs::Point> getPointMessageVector(const double z);
    +
    23 
    +
    24 private:
    +
    25  Eigen::MatrixXd vertices;
    +
    26 
    +
    27 public:
    +
    28  // exceptions
    +
    29  struct WrongNumberOfVertices : public std::exception
    +
    30  {
    +
    31  const char* what() const throw() {
    +
    32  return "Polygon: wrong number of vertices was supplied!";
    +
    33  }
    +
    34  };
    +
    35 
    +
    36  struct WrongNumberOfColumns : public std::exception
    +
    37  {
    +
    38  const char* what() const throw() {
    +
    39  return "Polygon: wrong number of colums, it should be =2!";
    +
    40  }
    +
    41  };
    +
    42 
    +
    43  struct ExtraVertices : public std::exception
    +
    44  {
    +
    45  const char* what() const throw() {
    +
    46  return "Polygon: useless vertices detected, polygon methods may break!";
    +
    47  }
    +
    48  };
    +
    49 };
    +
    50 } // namespace mrs_lib
    +
    51 
    +
    52 #endif // MRS_LIB_POLYGON_H
    +
    +
    + +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    Definition: polygon.h:13
    +
    Definition: polygon.h:43
    + + + + + diff --git a/probit__gts_8h_source.html b/probit__gts_8h_source.html new file mode 100644 index 00000000..56ba921a --- /dev/null +++ b/probit__gts_8h_source.html @@ -0,0 +1,512 @@ + + + + + + + +mrs_lib: test/math/probit_gts.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    probit_gts.h
    +
    +
    +
    1 #include <limits>
    +
    2 
    +
    3 constexpr int n_samples = 200;
    +
    4 constexpr double probit_ins[] =
    +
    5 {
    +
    6  0.000000,
    +
    7  0.005025,
    +
    8  0.010050,
    +
    9  0.015075,
    +
    10  0.020101,
    +
    11  0.025126,
    +
    12  0.030151,
    +
    13  0.035176,
    +
    14  0.040201,
    +
    15  0.045226,
    +
    16  0.050251,
    +
    17  0.055276,
    +
    18  0.060302,
    +
    19  0.065327,
    +
    20  0.070352,
    +
    21  0.075377,
    +
    22  0.080402,
    +
    23  0.085427,
    +
    24  0.090452,
    +
    25  0.095477,
    +
    26  0.100503,
    +
    27  0.105528,
    +
    28  0.110553,
    +
    29  0.115578,
    +
    30  0.120603,
    +
    31  0.125628,
    +
    32  0.130653,
    +
    33  0.135678,
    +
    34  0.140704,
    +
    35  0.145729,
    +
    36  0.150754,
    +
    37  0.155779,
    +
    38  0.160804,
    +
    39  0.165829,
    +
    40  0.170854,
    +
    41  0.175879,
    +
    42  0.180905,
    +
    43  0.185930,
    +
    44  0.190955,
    +
    45  0.195980,
    +
    46  0.201005,
    +
    47  0.206030,
    +
    48  0.211055,
    +
    49  0.216080,
    +
    50  0.221106,
    +
    51  0.226131,
    +
    52  0.231156,
    +
    53  0.236181,
    +
    54  0.241206,
    +
    55  0.246231,
    +
    56  0.251256,
    +
    57  0.256281,
    +
    58  0.261307,
    +
    59  0.266332,
    +
    60  0.271357,
    +
    61  0.276382,
    +
    62  0.281407,
    +
    63  0.286432,
    +
    64  0.291457,
    +
    65  0.296482,
    +
    66  0.301508,
    +
    67  0.306533,
    +
    68  0.311558,
    +
    69  0.316583,
    +
    70  0.321608,
    +
    71  0.326633,
    +
    72  0.331658,
    +
    73  0.336683,
    +
    74  0.341709,
    +
    75  0.346734,
    +
    76  0.351759,
    +
    77  0.356784,
    +
    78  0.361809,
    +
    79  0.366834,
    +
    80  0.371859,
    +
    81  0.376884,
    +
    82  0.381910,
    +
    83  0.386935,
    +
    84  0.391960,
    +
    85  0.396985,
    +
    86  0.402010,
    +
    87  0.407035,
    +
    88  0.412060,
    +
    89  0.417085,
    +
    90  0.422111,
    +
    91  0.427136,
    +
    92  0.432161,
    +
    93  0.437186,
    +
    94  0.442211,
    +
    95  0.447236,
    +
    96  0.452261,
    +
    97  0.457286,
    +
    98  0.462312,
    +
    99  0.467337,
    +
    100  0.472362,
    +
    101  0.477387,
    +
    102  0.482412,
    +
    103  0.487437,
    +
    104  0.492462,
    +
    105  0.497487,
    +
    106  0.502513,
    +
    107  0.507538,
    +
    108  0.512563,
    +
    109  0.517588,
    +
    110  0.522613,
    +
    111  0.527638,
    +
    112  0.532663,
    +
    113  0.537688,
    +
    114  0.542714,
    +
    115  0.547739,
    +
    116  0.552764,
    +
    117  0.557789,
    +
    118  0.562814,
    +
    119  0.567839,
    +
    120  0.572864,
    +
    121  0.577889,
    +
    122  0.582915,
    +
    123  0.587940,
    +
    124  0.592965,
    +
    125  0.597990,
    +
    126  0.603015,
    +
    127  0.608040,
    +
    128  0.613065,
    +
    129  0.618090,
    +
    130  0.623116,
    +
    131  0.628141,
    +
    132  0.633166,
    +
    133  0.638191,
    +
    134  0.643216,
    +
    135  0.648241,
    +
    136  0.653266,
    +
    137  0.658291,
    +
    138  0.663317,
    +
    139  0.668342,
    +
    140  0.673367,
    +
    141  0.678392,
    +
    142  0.683417,
    +
    143  0.688442,
    +
    144  0.693467,
    +
    145  0.698492,
    +
    146  0.703518,
    +
    147  0.708543,
    +
    148  0.713568,
    +
    149  0.718593,
    +
    150  0.723618,
    +
    151  0.728643,
    +
    152  0.733668,
    +
    153  0.738693,
    +
    154  0.743719,
    +
    155  0.748744,
    +
    156  0.753769,
    +
    157  0.758794,
    +
    158  0.763819,
    +
    159  0.768844,
    +
    160  0.773869,
    +
    161  0.778894,
    +
    162  0.783920,
    +
    163  0.788945,
    +
    164  0.793970,
    +
    165  0.798995,
    +
    166  0.804020,
    +
    167  0.809045,
    +
    168  0.814070,
    +
    169  0.819095,
    +
    170  0.824121,
    +
    171  0.829146,
    +
    172  0.834171,
    +
    173  0.839196,
    +
    174  0.844221,
    +
    175  0.849246,
    +
    176  0.854271,
    +
    177  0.859296,
    +
    178  0.864322,
    +
    179  0.869347,
    +
    180  0.874372,
    +
    181  0.879397,
    +
    182  0.884422,
    +
    183  0.889447,
    +
    184  0.894472,
    +
    185  0.899497,
    +
    186  0.904523,
    +
    187  0.909548,
    +
    188  0.914573,
    +
    189  0.919598,
    +
    190  0.924623,
    +
    191  0.929648,
    +
    192  0.934673,
    +
    193  0.939698,
    +
    194  0.944724,
    +
    195  0.949749,
    +
    196  0.954774,
    +
    197  0.959799,
    +
    198  0.964824,
    +
    199  0.969849,
    +
    200  0.974874,
    +
    201  0.979899,
    +
    202  0.984925,
    +
    203  0.989950,
    +
    204  0.994975,
    +
    205  1.000000,
    +
    206 };
    +
    207 
    +
    208 constexpr double probit_gts[] =
    +
    209 {
    +
    210  -std::numeric_limits<double>::infinity(),
    +
    211  -2.574096,
    +
    212  -2.324467,
    +
    213  -2.168104,
    +
    214  -2.051678,
    +
    215  -1.957819,
    +
    216  -1.878583,
    +
    217  -1.809639,
    +
    218  -1.748358,
    +
    219  -1.693017,
    +
    220  -1.642422,
    +
    221  -1.595714,
    +
    222  -1.552247,
    +
    223  -1.511531,
    +
    224  -1.473176,
    +
    225  -1.436874,
    +
    226  -1.402373,
    +
    227  -1.369464,
    +
    228  -1.337975,
    +
    229  -1.307760,
    +
    230  -1.278693,
    +
    231  -1.250669,
    +
    232  -1.223594,
    +
    233  -1.197387,
    +
    234  -1.171978,
    +
    235  -1.147303,
    +
    236  -1.123308,
    +
    237  -1.099943,
    +
    238  -1.077164,
    +
    239  -1.054930,
    +
    240  -1.033206,
    +
    241  -1.011959,
    +
    242  -0.991159,
    +
    243  -0.970779,
    +
    244  -0.950795,
    +
    245  -0.931183,
    +
    246  -0.911923,
    +
    247  -0.892996,
    +
    248  -0.874383,
    +
    249  -0.856069,
    +
    250  -0.838037,
    +
    251  -0.820273,
    +
    252  -0.802765,
    +
    253  -0.785499,
    +
    254  -0.768465,
    +
    255  -0.751650,
    +
    256  -0.735046,
    +
    257  -0.718642,
    +
    258  -0.702428,
    +
    259  -0.686398,
    +
    260  -0.670542,
    +
    261  -0.654852,
    +
    262  -0.639323,
    +
    263  -0.623946,
    +
    264  -0.608715,
    +
    265  -0.593624,
    +
    266  -0.578667,
    +
    267  -0.563838,
    +
    268  -0.549132,
    +
    269  -0.534545,
    +
    270  -0.520070,
    +
    271  -0.505703,
    +
    272  -0.491440,
    +
    273  -0.477276,
    +
    274  -0.463207,
    +
    275  -0.449229,
    +
    276  -0.435339,
    +
    277  -0.421532,
    +
    278  -0.407805,
    +
    279  -0.394154,
    +
    280  -0.380576,
    +
    281  -0.367069,
    +
    282  -0.353627,
    +
    283  -0.340250,
    +
    284  -0.326933,
    +
    285  -0.313674,
    +
    286  -0.300469,
    +
    287  -0.287317,
    +
    288  -0.274215,
    +
    289  -0.261159,
    +
    290  -0.248148,
    +
    291  -0.235178,
    +
    292  -0.222248,
    +
    293  -0.209355,
    +
    294  -0.196497,
    +
    295  -0.183671,
    +
    296  -0.170876,
    +
    297  -0.158108,
    +
    298  -0.145366,
    +
    299  -0.132647,
    +
    300  -0.119950,
    +
    301  -0.107272,
    +
    302  -0.094612,
    +
    303  -0.081966,
    +
    304  -0.069334,
    +
    305  -0.056713,
    +
    306  -0.044101,
    +
    307  -0.031496,
    +
    308  -0.018895,
    +
    309  -0.006298,
    +
    310  0.006298,
    +
    311  0.018895,
    +
    312  0.031496,
    +
    313  0.044101,
    +
    314  0.056713,
    +
    315  0.069334,
    +
    316  0.081966,
    +
    317  0.094612,
    +
    318  0.107272,
    +
    319  0.119950,
    +
    320  0.132647,
    +
    321  0.145366,
    +
    322  0.158108,
    +
    323  0.170876,
    +
    324  0.183671,
    +
    325  0.196497,
    +
    326  0.209355,
    +
    327  0.222248,
    +
    328  0.235178,
    +
    329  0.248148,
    +
    330  0.261159,
    +
    331  0.274215,
    +
    332  0.287317,
    +
    333  0.300469,
    +
    334  0.313674,
    +
    335  0.326933,
    +
    336  0.340250,
    +
    337  0.353627,
    +
    338  0.367069,
    +
    339  0.380576,
    +
    340  0.394154,
    +
    341  0.407805,
    +
    342  0.421532,
    +
    343  0.435339,
    +
    344  0.449229,
    +
    345  0.463207,
    +
    346  0.477276,
    +
    347  0.491440,
    +
    348  0.505703,
    +
    349  0.520070,
    +
    350  0.534545,
    +
    351  0.549132,
    +
    352  0.563838,
    +
    353  0.578667,
    +
    354  0.593624,
    +
    355  0.608715,
    +
    356  0.623946,
    +
    357  0.639323,
    +
    358  0.654852,
    +
    359  0.670542,
    +
    360  0.686398,
    +
    361  0.702428,
    +
    362  0.718642,
    +
    363  0.735046,
    +
    364  0.751650,
    +
    365  0.768465,
    +
    366  0.785499,
    +
    367  0.802765,
    +
    368  0.820273,
    +
    369  0.838037,
    +
    370  0.856069,
    +
    371  0.874383,
    +
    372  0.892996,
    +
    373  0.911923,
    +
    374  0.931183,
    +
    375  0.950795,
    +
    376  0.970779,
    +
    377  0.991159,
    +
    378  1.011959,
    +
    379  1.033206,
    +
    380  1.054930,
    +
    381  1.077164,
    +
    382  1.099943,
    +
    383  1.123308,
    +
    384  1.147303,
    +
    385  1.171978,
    +
    386  1.197387,
    +
    387  1.223594,
    +
    388  1.250669,
    +
    389  1.278693,
    +
    390  1.307760,
    +
    391  1.337975,
    +
    392  1.369464,
    +
    393  1.402373,
    +
    394  1.436874,
    +
    395  1.473176,
    +
    396  1.511531,
    +
    397  1.552247,
    +
    398  1.595714,
    +
    399  1.642422,
    +
    400  1.693017,
    +
    401  1.748358,
    +
    402  1.809639,
    +
    403  1.878583,
    +
    404  1.957819,
    +
    405  2.051678,
    +
    406  2.168104,
    +
    407  2.324467,
    +
    408  2.574096,
    +
    409  std::numeric_limits<double>::infinity(),
    +
    410 };
    +
    +
    + + + + diff --git a/profiler_8h.html b/profiler_8h.html new file mode 100644 index 00000000..957dc9d5 --- /dev/null +++ b/profiler_8h.html @@ -0,0 +1,143 @@ + + + + + + + +mrs_lib: include/mrs_lib/profiler.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    profiler.h File Reference
    +
    +
    + +

    A scoped function profiler which publishes ROS messages. +More...

    +
    #include <ros/ros.h>
    +#include <mrs_msgs/ProfilerUpdate.h>
    +#include <mutex>
    +
    + + Include dependency graph for profiler.h:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + + +

    +Classes

    class  mrs_lib::Routine
     
    class  mrs_lib::Profiler
     
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    +

    Detailed Description

    +

    A scoped function profiler which publishes ROS messages.

    +
    Author
    Tomas Baca - tomas.nosp@m..bac.nosp@m.a@fel.nosp@m..cvu.nosp@m.t.cz
    +
    +
    + + + + diff --git a/profiler_8h__incl.map b/profiler_8h__incl.map new file mode 100644 index 00000000..134d8d1d --- /dev/null +++ b/profiler_8h__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/profiler_8h__incl.md5 b/profiler_8h__incl.md5 new file mode 100644 index 00000000..a89c3c4f --- /dev/null +++ b/profiler_8h__incl.md5 @@ -0,0 +1 @@ +499a7229350b591d2ab4bef448133be4 \ No newline at end of file diff --git a/profiler_8h__incl.png b/profiler_8h__incl.png new file mode 100644 index 00000000..8bf69244 Binary files /dev/null and b/profiler_8h__incl.png differ diff --git a/profiler_8h_source.html b/profiler_8h_source.html new file mode 100644 index 00000000..9e0f77de --- /dev/null +++ b/profiler_8h_source.html @@ -0,0 +1,179 @@ + + + + + + + +mrs_lib: include/mrs_lib/profiler.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    profiler.h
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 #ifndef PROFILER_H
    +
    6 #define PROFILER_H
    +
    7 
    +
    8 #include <ros/ros.h>
    +
    9 #include <mrs_msgs/ProfilerUpdate.h>
    +
    10 #include <mutex>
    +
    11 
    +
    12 namespace mrs_lib
    +
    13 {
    +
    14 
    +
    15 class Routine {
    +
    16 
    +
    17 public:
    +
    18  Routine(std::string name, std::string node_name, std::shared_ptr<ros::Publisher> publisher, std::shared_ptr<std::mutex> mutex_publisher,
    +
    19  bool profiler_enabled);
    +
    20  Routine(std::string name, std::string node_name, double expected_rate, double threshold, std::shared_ptr<ros::Publisher> publisher,
    +
    21  std::shared_ptr<std::mutex> mutex_publisher, bool profiler_enabled, ros::TimerEvent event);
    +
    22  ~Routine();
    +
    23 
    +
    24  void end(void);
    +
    25 
    +
    26 private:
    +
    27  std::string _routine_name_;
    +
    28  std::string _node_name_;
    +
    29 
    +
    30  std::shared_ptr<ros::Publisher> publisher_;
    +
    31  std::shared_ptr<std::mutex> mutex_publisher_;
    +
    32 
    +
    33  // if periodic, those are the stats from the trigger event
    +
    34  double _threshold_;
    +
    35  long iteration_ = 0;
    +
    36 
    +
    37  bool _profiler_enabled_ = false;
    +
    38 
    +
    39  // those are the stats from the execution of the routine
    +
    40  ros::Time execution_start_;
    +
    41 
    +
    42  // this will be published
    +
    43  mrs_msgs::ProfilerUpdate msg_out_;
    +
    44 };
    +
    45 
    +
    46 class Profiler {
    +
    47 
    +
    48 public:
    +
    52  Profiler();
    +
    53 
    +
    61  Profiler(ros::NodeHandle& nh, std::string node_name, bool profiler_enabled);
    +
    62 
    +
    68  Profiler(const Profiler& other);
    +
    69 
    +
    77  Profiler& operator=(const Profiler& other);
    +
    78 
    +
    89  Routine createRoutine(std::string name, double expected_rate, double threshold, ros::TimerEvent event);
    +
    90 
    +
    98  Routine createRoutine(std::string name);
    +
    99 
    +
    100 private:
    +
    101  std::shared_ptr<ros::Publisher> publisher_;
    +
    102  std::shared_ptr<std::mutex> mutex_publisher_;
    +
    103  std::string _node_name_;
    +
    104  bool _profiler_enabled_ = false;
    +
    105 
    +
    106  std::shared_ptr<ros::NodeHandle> nh_;
    +
    107 
    +
    108  bool is_initialized_ = false;
    +
    109 };
    +
    110 
    +
    111 } // namespace mrs_lib
    +
    112 
    +
    113 #endif
    +
    +
    +
    Definition: profiler.h:46
    +
    Profiler & operator=(const Profiler &other)
    the assignment operator
    Definition: profiler.cpp:42
    +
    Routine createRoutine(std::string name, double expected_rate, double threshold, ros::TimerEvent event)
    create a routine for a periodic function
    Definition: profiler.cpp:65
    +
    Profiler()
    the basic constructor
    Definition: profiler.cpp:10
    +
    Definition: profiler.h:15
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    + + + + diff --git a/publisher__handler_8h.html b/publisher__handler_8h.html new file mode 100644 index 00000000..fd62da3c --- /dev/null +++ b/publisher__handler_8h.html @@ -0,0 +1,163 @@ + + + + + + + +mrs_lib: include/mrs_lib/publisher_handler.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    publisher_handler.h File Reference
    +
    +
    + +

    Defines PublisherHandler and related convenience classes for upgrading the ROS publisher. +More...

    +
    #include <ros/ros.h>
    +#include <ros/package.h>
    +#include <atomic>
    +#include <string>
    +#include <mutex>
    +#include <mrs_lib/impl/publisher_handler.hpp>
    +
    + + Include dependency graph for publisher_handler.h:
    +
    +
    + +
    + + This graph shows which files directly or indirectly include this file:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Classes

    class  mrs_lib::PublisherHandler_impl< TopicType >
     implementation of the publisher handler More...
     
    class  mrs_lib::PublisherHandler< TopicType >
     user wrapper of the publisher handler implementation More...
     
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    +

    Detailed Description

    +

    Defines PublisherHandler and related convenience classes for upgrading the ROS publisher.

    +
    Author
    Tomas Baca - tomas.nosp@m..bac.nosp@m.a@fel.nosp@m..cvu.nosp@m.t.cz
    +
    +
    + + + + diff --git a/publisher__handler_8h__dep__incl.map b/publisher__handler_8h__dep__incl.map new file mode 100644 index 00000000..6162eacf --- /dev/null +++ b/publisher__handler_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/publisher__handler_8h__dep__incl.md5 b/publisher__handler_8h__dep__incl.md5 new file mode 100644 index 00000000..fcccd192 --- /dev/null +++ b/publisher__handler_8h__dep__incl.md5 @@ -0,0 +1 @@ +d69d5b07bd13b30a3060c980fc8a6540 \ No newline at end of file diff --git a/publisher__handler_8h__dep__incl.png b/publisher__handler_8h__dep__incl.png new file mode 100644 index 00000000..1ab7a29c Binary files /dev/null and b/publisher__handler_8h__dep__incl.png differ diff --git a/publisher__handler_8h__incl.map b/publisher__handler_8h__incl.map new file mode 100644 index 00000000..61511555 --- /dev/null +++ b/publisher__handler_8h__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/publisher__handler_8h__incl.md5 b/publisher__handler_8h__incl.md5 new file mode 100644 index 00000000..cd27abf6 --- /dev/null +++ b/publisher__handler_8h__incl.md5 @@ -0,0 +1 @@ +076e3afa6af14a939844fca889281043 \ No newline at end of file diff --git a/publisher__handler_8h__incl.png b/publisher__handler_8h__incl.png new file mode 100644 index 00000000..311f1f08 Binary files /dev/null and b/publisher__handler_8h__incl.png differ diff --git a/publisher__handler_8h_source.html b/publisher__handler_8h_source.html new file mode 100644 index 00000000..a9658c06 --- /dev/null +++ b/publisher__handler_8h_source.html @@ -0,0 +1,196 @@ + + + + + + + +mrs_lib: include/mrs_lib/publisher_handler.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    publisher_handler.h
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 #ifndef PUBLISHER_HANDLER_H
    +
    6 #define PUBLISHER_HANDLER_H
    +
    7 
    +
    8 #include <ros/ros.h>
    +
    9 #include <ros/package.h>
    +
    10 
    +
    11 #include <atomic>
    +
    12 #include <string>
    +
    13 #include <mutex>
    +
    14 
    +
    15 namespace mrs_lib
    +
    16 {
    +
    17 
    +
    18 /* class PublisherHandler_impl //{ */
    +
    19 
    +
    23 template <class TopicType>
    + +
    25 
    +
    26 public:
    + +
    31 
    + +
    36 
    +
    45  PublisherHandler_impl(ros::NodeHandle& nh, const std::string& address, const unsigned int& buffer_size = 1, const bool& latch = false,
    +
    46  const double& rate = 0.0);
    +
    47 
    +
    54  void publish(const TopicType& msg);
    +
    55 
    +
    61  void publish(const boost::shared_ptr<TopicType>& msg);
    +
    62 
    +
    68  void publish(const boost::shared_ptr<TopicType const>& msg);
    +
    69 
    +
    75  unsigned int getNumSubscribers(void);
    +
    76 
    +
    77 private:
    +
    78  ros::Publisher publisher_;
    +
    79  std::mutex mutex_publisher_;
    +
    80  std::atomic<bool> publisher_initialized_;
    +
    81 
    +
    82  bool throttle_ = false;
    +
    83  double throttle_min_dt_;
    +
    84  ros::Time last_time_published_;
    +
    85 };
    +
    86 
    +
    87 //}
    +
    88 
    +
    89 /* class PublisherHandler //{ */
    +
    90 
    +
    94 template <class TopicType>
    + +
    96 
    +
    97 public:
    + +
    102 
    + +
    107 
    + +
    116 
    +
    122  PublisherHandler(const PublisherHandler& other);
    +
    123 
    +
    132  PublisherHandler(ros::NodeHandle& nh, const std::string& address, const unsigned int& buffer_size = 1, const bool& latch = false, const double& rate = 0);
    +
    133 
    +
    139  void publish(const TopicType& msg);
    +
    140 
    +
    146  void publish(const boost::shared_ptr<TopicType>& msg);
    +
    147 
    +
    153  void publish(const boost::shared_ptr<TopicType const>& msg);
    +
    154 
    +
    160  unsigned int getNumSubscribers(void);
    +
    161 
    +
    162 private:
    +
    163  std::shared_ptr<PublisherHandler_impl<TopicType>> impl_;
    +
    164 };
    +
    165 
    +
    166 //}
    +
    167 
    +
    168 } // namespace mrs_lib
    +
    169 
    +
    170 #include <mrs_lib/impl/publisher_handler.hpp>
    +
    171 
    +
    172 #endif // PUBLISHER_HANDLER_H
    +
    +
    +
    PublisherHandler(void)
    generic constructor
    Definition: publisher_handler.h:101
    +
    void publish(const TopicType &msg)
    publish message
    Definition: publisher_handler.hpp:209
    +
    void publish(const TopicType &msg)
    publish message
    Definition: publisher_handler.hpp:54
    +
    ~PublisherHandler(void)
    generic destructor
    Definition: publisher_handler.h:106
    +
    PublisherHandler & operator=(const PublisherHandler &other)
    operator=
    Definition: publisher_handler.hpp:168
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    implementation of the publisher handler
    Definition: publisher_handler.h:24
    +
    unsigned int getNumSubscribers(void)
    get number of subscribers
    Definition: publisher_handler.hpp:150
    +
    ~PublisherHandler_impl(void)
    default destructor
    Definition: publisher_handler.h:35
    +
    user wrapper of the publisher handler implementation
    Definition: publisher_handler.h:95
    +
    unsigned int getNumSubscribers(void)
    get number of subscribers
    Definition: publisher_handler.hpp:239
    +
    PublisherHandler_impl(void)
    default constructor
    Definition: publisher_handler.hpp:14
    + + + + diff --git a/publisher__handler_8hpp_source.html b/publisher__handler_8hpp_source.html new file mode 100644 index 00000000..64ad96dd --- /dev/null +++ b/publisher__handler_8hpp_source.html @@ -0,0 +1,359 @@ + + + + + + + +mrs_lib: include/mrs_lib/impl/publisher_handler.hpp Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    publisher_handler.hpp
    +
    +
    +
    1 #ifndef PUBLISHER_HANDLER_HPP
    +
    2 #define PUBLISHER_HANDLER_HPP
    +
    3 
    +
    4 namespace mrs_lib
    +
    5 {
    +
    6 
    +
    7 // --------------------------------------------------------------
    +
    8 // | PublisherHandler_impl |
    +
    9 // --------------------------------------------------------------
    +
    10 
    +
    11 /* PublisherHandler_impl(void) //{ */
    +
    12 
    +
    13 template <class TopicType>
    +
    14 PublisherHandler_impl<TopicType>::PublisherHandler_impl(void) : publisher_initialized_(false) {
    +
    15 }
    +
    16 
    +
    17 //}
    +
    18 
    +
    19 /* PublisherHandler_impl(ros::NodeHandle& nh, const std::string& address, const unsigned int &buffer_size, const bool &latch) //{ */
    +
    20 
    +
    21 template <class TopicType>
    +
    22 PublisherHandler_impl<TopicType>::PublisherHandler_impl(ros::NodeHandle& nh, const std::string& address, const unsigned int& buffer_size, const bool& latch,
    +
    23  const double& rate) {
    +
    24 
    +
    25  {
    +
    26  std::scoped_lock lock(mutex_publisher_);
    +
    27 
    +
    28  publisher_ = nh.advertise<TopicType>(address, buffer_size, latch);
    +
    29 
    +
    30  if (rate > 0.0) {
    +
    31 
    +
    32  throttle_ = true;
    +
    33 
    +
    34  throttle_min_dt_ = 1.0 / rate;
    +
    35 
    +
    36  } else {
    +
    37 
    +
    38  throttle_ = false;
    +
    39 
    +
    40  throttle_min_dt_ = 0;
    +
    41  }
    +
    42 
    +
    43  last_time_published_ = ros::Time(0);
    +
    44  }
    +
    45 
    +
    46  publisher_initialized_ = true;
    +
    47 }
    +
    48 
    +
    49 //}
    +
    50 
    +
    51 /* publish(TopicType& msg) //{ */
    +
    52 
    +
    53 template <class TopicType>
    +
    54 void PublisherHandler_impl<TopicType>::publish(const TopicType& msg) {
    +
    55 
    +
    56  if (!publisher_initialized_) {
    +
    57  return;
    +
    58  }
    +
    59 
    +
    60  {
    +
    61  std::scoped_lock lock(mutex_publisher_);
    +
    62 
    +
    63  if (throttle_) {
    +
    64 
    +
    65  if ((ros::Time::now() - last_time_published_).toSec() < throttle_min_dt_) {
    +
    66  return;
    +
    67  }
    +
    68 
    +
    69  last_time_published_ = ros::Time::now();
    +
    70  }
    +
    71 
    +
    72  try {
    +
    73  publisher_.publish(msg);
    +
    74  }
    +
    75  catch (...) {
    +
    76  ROS_ERROR("exception caught during publishing topic '%s'", publisher_.getTopic().c_str());
    +
    77  }
    +
    78  }
    +
    79 }
    +
    80 
    +
    81 //}
    +
    82 
    +
    83 /* publish(const boost::shared_ptr<TopicType>& msg) //{ */
    +
    84 
    +
    85 template <class TopicType>
    +
    86 void PublisherHandler_impl<TopicType>::publish(const boost::shared_ptr<TopicType>& msg) {
    +
    87 
    +
    88  if (!publisher_initialized_) {
    +
    89  return;
    +
    90  }
    +
    91 
    +
    92  {
    +
    93  std::scoped_lock lock(mutex_publisher_);
    +
    94 
    +
    95  if (throttle_) {
    +
    96 
    +
    97  if ((ros::Time::now() - last_time_published_).toSec() < throttle_min_dt_) {
    +
    98  return;
    +
    99  }
    +
    100 
    +
    101  last_time_published_ = ros::Time::now();
    +
    102  }
    +
    103 
    +
    104  try {
    +
    105  publisher_.publish(msg);
    +
    106  }
    +
    107  catch (...) {
    +
    108  ROS_ERROR("exception caught during publishing topic '%s'", publisher_.getTopic().c_str());
    +
    109  }
    +
    110  }
    +
    111 }
    +
    112 
    +
    113 //}
    +
    114 
    +
    115 /* publish(const boost::shared_ptr<TopicType const>& msg) //{ */
    +
    116 
    +
    117 template <class TopicType>
    +
    118 void PublisherHandler_impl<TopicType>::publish(const boost::shared_ptr<TopicType const>& msg) {
    +
    119 
    +
    120  if (!publisher_initialized_) {
    +
    121  return;
    +
    122  }
    +
    123 
    +
    124  {
    +
    125  std::scoped_lock lock(mutex_publisher_);
    +
    126 
    +
    127  if (throttle_) {
    +
    128 
    +
    129  if ((ros::Time::now() - last_time_published_).toSec() < throttle_min_dt_) {
    +
    130  return;
    +
    131  }
    +
    132 
    +
    133  last_time_published_ = ros::Time::now();
    +
    134  }
    +
    135 
    +
    136  try {
    +
    137  publisher_.publish(msg);
    +
    138  }
    +
    139  catch (...) {
    +
    140  ROS_ERROR("exception caught during publishing topic '%s'", publisher_.getTopic().c_str());
    +
    141  }
    +
    142  }
    +
    143 }
    +
    144 
    +
    145 //}
    +
    146 
    +
    147 /* getNumSubscribers(void) //{ */
    +
    148 
    +
    149 template <class TopicType>
    + +
    151 
    +
    152  {
    +
    153  std::scoped_lock lock(mutex_publisher_);
    +
    154 
    +
    155  return publisher_.getNumSubscribers();
    +
    156  }
    +
    157 }
    +
    158 
    +
    159 //}
    +
    160 
    +
    161 // --------------------------------------------------------------
    +
    162 // | PublisherHandler |
    +
    163 // --------------------------------------------------------------
    +
    164 
    +
    165 /* operator= //{ */
    +
    166 
    +
    167 template <class TopicType>
    + +
    169 
    +
    170  if (this == &other) {
    +
    171  return *this;
    +
    172  }
    +
    173 
    +
    174  if (other.impl_) {
    +
    175  this->impl_ = other.impl_;
    +
    176  }
    +
    177 
    +
    178  return *this;
    +
    179 }
    +
    180 
    +
    181 //}
    +
    182 
    +
    183 /* copy constructor //{ */
    +
    184 
    +
    185 template <class TopicType>
    + +
    187 
    +
    188  if (other.impl_) {
    +
    189  this->impl_ = other.impl_;
    +
    190  }
    +
    191 }
    +
    192 
    +
    193 //}
    +
    194 
    +
    195 /* PublisherHandler(ros::NodeHandle& nh, const std::string& address, const unsigned int &buffer_size, const bool &latch) //{ */
    +
    196 
    +
    197 template <class TopicType>
    +
    198 PublisherHandler<TopicType>::PublisherHandler(ros::NodeHandle& nh, const std::string& address, const unsigned int& buffer_size, const bool& latch,
    +
    199  const double& rate) {
    +
    200 
    +
    201  impl_ = std::make_shared<PublisherHandler_impl<TopicType>>(nh, address, buffer_size, latch, rate);
    +
    202 }
    +
    203 
    +
    204 //}
    +
    205 
    +
    206 /* publish(const TopicType& msg) //{ */
    +
    207 
    +
    208 template <class TopicType>
    +
    209 void PublisherHandler<TopicType>::publish(const TopicType& msg) {
    +
    210 
    +
    211  impl_->publish(msg);
    +
    212 }
    +
    213 
    +
    214 //}
    +
    215 
    +
    216 /* publish(const boost::shared_ptr<TopicType>& msg) //{ */
    +
    217 
    +
    218 template <class TopicType>
    +
    219 void PublisherHandler<TopicType>::publish(const boost::shared_ptr<TopicType>& msg) {
    +
    220 
    +
    221  impl_->publish(msg);
    +
    222 }
    +
    223 
    +
    224 //}
    +
    225 
    +
    226 /* publish(const boost::shared_ptr<TopicType const>& msg) //{ */
    +
    227 
    +
    228 template <class TopicType>
    +
    229 void PublisherHandler<TopicType>::publish(const boost::shared_ptr<TopicType const>& msg) {
    +
    230 
    +
    231  impl_->publish(msg);
    +
    232 }
    +
    233 
    +
    234 //}
    +
    235 
    +
    236 /* getNumSubscribers(void) //{ */
    +
    237 
    +
    238 template <class TopicType>
    + +
    240 
    +
    241  return impl_->getNumSubscribers();
    +
    242 }
    +
    243 
    +
    244 //}
    +
    245 
    +
    246 } // namespace mrs_lib
    +
    247 
    +
    248 #endif // PUBLISHER_HANDLER_HPP
    +
    +
    +
    PublisherHandler(void)
    generic constructor
    Definition: publisher_handler.h:101
    +
    void publish(const TopicType &msg)
    publish message
    Definition: publisher_handler.hpp:209
    +
    void publish(const TopicType &msg)
    publish message
    Definition: publisher_handler.hpp:54
    +
    PublisherHandler & operator=(const PublisherHandler &other)
    operator=
    Definition: publisher_handler.hpp:168
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    unsigned int getNumSubscribers(void)
    get number of subscribers
    Definition: publisher_handler.hpp:150
    +
    user wrapper of the publisher handler implementation
    Definition: publisher_handler.h:95
    +
    unsigned int getNumSubscribers(void)
    get number of subscribers
    Definition: publisher_handler.hpp:239
    +
    PublisherHandler_impl(void)
    default constructor
    Definition: publisher_handler.hpp:14
    + + + + diff --git a/quadratic__throttle__model_8h_source.html b/quadratic__throttle__model_8h_source.html new file mode 100644 index 00000000..543aea1f --- /dev/null +++ b/quadratic__throttle__model_8h_source.html @@ -0,0 +1,137 @@ + + + + + + + +mrs_lib: include/mrs_lib/quadratic_throttle_model.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    quadratic_throttle_model.h
    +
    +
    +
    1 #ifndef QUADRATIC_THRUST_MODEL_H
    +
    2 #define QUADRATIC_THRUST_MODEL_H
    +
    3 
    +
    4 #include <cmath>
    +
    5 
    +
    6 namespace mrs_lib
    +
    7 {
    +
    8 
    +
    9 namespace quadratic_throttle_model
    +
    10 {
    +
    11 
    +
    12 typedef struct
    +
    13 {
    +
    14  double A;
    +
    15  double B;
    +
    16  int n_motors;
    + +
    18 
    +
    19 double inline throttleToForce(const MotorParams_t motor_params, const double throttle) {
    +
    20 
    +
    21  return motor_params.n_motors * pow((throttle - motor_params.B) / motor_params.A, 2);
    +
    22 }
    +
    23 
    +
    24 double inline forceToThrottle(const MotorParams_t motor_params, const double force) {
    +
    25 
    +
    26  return sqrt(force / motor_params.n_motors) * motor_params.A + motor_params.B;
    +
    27 }
    +
    28 
    +
    29 } // namespace quadratic_throttle_model
    +
    30 
    +
    31 } // namespace mrs_lib
    +
    32 
    +
    33 #endif // QUADRATIC_THRUST_MODEL_H
    +
    +
    +
    Definition: quadratic_throttle_model.h:12
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    + + + + diff --git a/repredictor_2example_8cpp-example.html b/repredictor_2example_8cpp-example.html new file mode 100644 index 00000000..21e24a29 --- /dev/null +++ b/repredictor_2example_8cpp-example.html @@ -0,0 +1,388 @@ + + + + + + + +mrs_lib: repredictor/example.cpp + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    repredictor/example.cpp
    +
    +
    +

    This example may be run after building mrs_lib by executing rosrun mrs_lib repredictor_example.

    +
    // clang: MatousFormat
    +
    // Include the Repredictor header
    +
    #include <mrs_lib/repredictor.h>
    +
    // As a model, we'll use a LKF variant
    +
    #include <mrs_lib/lkf.h>
    +
    #include <mrs_lib/mutex.h>
    +
    #include <random>
    +
    #include <fstream>
    +
    #include <mutex>
    +
    #include <thread>
    +
    #include <ros/ros.h>
    +
    #include <mrs_msgs/Float64Stamped.h>
    +
    +
    // Define the LKF we will be using
    +
    namespace mrs_lib
    +
    {
    +
    const int n_states = 2;
    +
    const int n_inputs = 1;
    +
    const int n_measurements = 1;
    +
    +
    using lkf_t = varstepLKF<n_states, n_inputs, n_measurements>;
    +
    using rep_t = Repredictor<lkf_t>;
    +
    }
    +
    +
    /* helper aliases and definitions //{ */
    +
    +
    // Some helpful aliases to make writing of types shorter
    +
    using namespace mrs_lib;
    +
    using A_t = lkf_t::A_t;
    +
    using B_t = lkf_t::B_t;
    +
    using H_t = lkf_t::H_t;
    +
    using Q_t = lkf_t::Q_t;
    +
    using x_t = lkf_t::x_t;
    +
    using P_t = lkf_t::P_t;
    +
    using u_t = lkf_t::u_t;
    +
    using z_t = lkf_t::z_t;
    +
    using R_t = lkf_t::R_t;
    +
    using statecov_t = lkf_t::statecov_t;
    +
    +
    static std::random_device rd{};
    +
    static std::mt19937 gen{rd()};
    +
    static std::normal_distribution<> d{0,1};
    +
    +
    // Helper function to generate a random Eigen matrix with normal distribution
    +
    template <int rows>
    +
    Eigen::Matrix<double, rows, 1> multivariate_gaussian(const Eigen::Matrix<double, rows, rows>& cov)
    +
    {
    +
    Eigen::Matrix<double, rows, 1> ret;
    +
    for (int row = 0; row < rows; row++)
    +
    ret(row, 0) = d(gen);
    +
    return cov*ret;
    +
    }
    +
    +
    A_t generateA(const double dt)
    +
    {
    +
    A_t A;
    +
    A << 1, dt,
    +
    0, 1;
    +
    return A;
    +
    }
    +
    +
    B_t generateB([[maybe_unused]] const double dt)
    +
    {
    +
    B_t B;
    +
    B << dt*dt/2.0,
    +
    dt;
    +
    return B;
    +
    }
    +
    +
    const Q_t Q = 2.5*Q_t::Identity();
    +
    const H_t H( (H_t() << 1, 0).finished() );
    +
    const R_t R_fast = 5.5*R_t::Identity();
    +
    const R_t R_slow = 0.01*R_t::Identity();
    +
    +
    const x_t x0 = x_t::Zero();
    +
    const P_t P0 = 5.0*P_t::Identity();
    +
    const u_t u0 = u_t::Zero();
    +
    const ros::Time t0 = ros::Time(0);
    +
    const std::shared_ptr<lkf_t> lkf_ptr = std::make_shared<lkf_t>(generateA, generateB, H);
    +
    const unsigned buf_sz = 100;
    +
    +
    std::mutex rep_pubs_mtx;
    +
    rep_t rep(x0, P0, u0, Q, t0, lkf_ptr, buf_sz);
    +
    ros::Publisher pub_pos_est;
    +
    ros::Publisher pub_vel_est;
    +
    +
    enum type_e
    +
    {
    +
    input,
    +
    meas_fast,
    +
    meas_slow
    +
    };
    +
    +
    //}
    +
    +
    // --------------------------------------------------------------
    +
    // | THE IMPORTANT PART |
    +
    // --------------------------------------------------------------
    +
    void process_msg(const mrs_msgs::Float64Stamped::ConstPtr msg, type_e type)
    +
    {
    +
    // multithreading synchronization
    +
    std::scoped_lock lck(rep_pubs_mtx);
    +
    +
    // update the Repredictor with the latest message based on its type
    +
    switch (type)
    +
    {
    +
    case input: // interpret msg as system input
    +
    rep.addInputChangeWithNoise(u_t(msg->value), Q, msg->header.stamp);
    +
    break;
    +
    case meas_fast: // interpret msg as fast measurement (use the corresponding R)
    +
    rep.addMeasurement(z_t(msg->value), R_fast, msg->header.stamp);
    +
    break;
    +
    case meas_slow: // interpret msg as slow measurement (use the corresponding R)
    +
    rep.addMeasurement(z_t(msg->value), R_slow, msg->header.stamp);
    +
    break;
    +
    }
    +
    +
    // publish the latest estimate
    +
    mrs_msgs::Float64Stamped msg_out;
    +
    msg_out.header.stamp = ros::Time::now();
    +
    +
    // estimate the current state using Repredictor
    +
    const x_t x_pred = rep.predictTo(msg_out.header.stamp).x;
    +
    +
    // publish the position estimate
    +
    msg_out.value = x_pred.x();
    +
    pub_pos_est.publish(msg_out);
    +
    +
    // publish the velocity estimate
    +
    msg_out.value = x_pred.y();
    +
    pub_vel_est.publish(msg_out);
    +
    }
    +
    +
    /* callback splitting to process_msg() //{ */
    +
    +
    void callback_input(const mrs_msgs::Float64Stamped::ConstPtr msg)
    +
    {
    +
    process_msg(msg, input);
    +
    }
    +
    +
    void callback_meas_fast(const mrs_msgs::Float64Stamped::ConstPtr msg)
    +
    {
    +
    process_msg(msg, meas_fast);
    +
    }
    +
    +
    void callback_meas_slow(const mrs_msgs::Float64Stamped::ConstPtr msg)
    +
    {
    +
    process_msg(msg, meas_slow);
    +
    }
    +
    +
    //}
    +
    +
    // current state and its mutex
    +
    std::mutex x_mtx;
    +
    x_t x = x_t::Random();
    +
    +
    /* publisher thread of fast, imprecise measurements //{ */
    +
    +
    ros::Publisher pub_meas_fast;
    +
    void meas_generator_fast()
    +
    {
    +
    const R_t R = R_fast;
    +
    const double delay_std = 0.1;
    +
    +
    while (ros::ok())
    +
    {
    +
    const x_t x_gt = mrs_lib::get_mutexed(x_mtx, x);
    +
    const z_t z = H*x_gt + multivariate_gaussian(R);
    +
    const ros::Time stamp = ros::Time::now();
    +
    const double delay = delay_std*std::abs(d(gen));
    +
    ros::Duration(delay).sleep();
    +
    mrs_msgs::Float64Stamped msg;
    +
    msg.header.stamp = stamp;
    +
    msg.value = z.x();
    +
    pub_meas_fast.publish(msg);
    +
    }
    +
    }
    +
    +
    //}
    +
    +
    /* publisher thread of slow, precise measurements //{ */
    +
    +
    ros::Publisher pub_meas_slow;
    +
    void meas_generator_slow()
    +
    {
    +
    const R_t R = R_slow;
    +
    const double delay_std = 1.0;
    +
    +
    while (ros::ok())
    +
    {
    +
    const x_t x_gt = mrs_lib::get_mutexed(x_mtx, x);
    +
    const z_t z = H*x_gt + multivariate_gaussian(R);
    +
    const ros::Time stamp = ros::Time::now();
    +
    const double delay = delay_std*std::abs(d(gen));
    +
    ros::Duration(delay).sleep();
    +
    mrs_msgs::Float64Stamped msg;
    +
    msg.header.stamp = stamp;
    +
    msg.value = z.x();
    +
    pub_meas_slow.publish(msg);
    +
    }
    +
    }
    +
    +
    //}
    +
    +
    int main(int argc, char **argv)
    +
    {
    +
    /* Set up ROS. */
    +
    const std::string node_name("repredictor_example");
    +
    ros::init(argc, argv, node_name);
    +
    ros::NodeHandle nh;
    +
    +
    // subscriber on the topic
    +
    ros::Subscriber sub_inpt = nh.subscribe("velocity_inpt", 10, callback_input);
    +
    ros::Subscriber sub_meas_fast = nh.subscribe("position_meas_fast", 10, callback_meas_fast);
    +
    ros::Subscriber sub_meas_slow = nh.subscribe("position_meas_slow", 10, callback_meas_slow);
    +
    +
    // publishers for publishing generated measurements, ground truths and the estimate
    +
    pub_pos_est = nh.advertise<mrs_msgs::Float64Stamped>("position_est", 5);
    +
    pub_vel_est = nh.advertise<mrs_msgs::Float64Stamped>("velocity_est", 5);
    +
    pub_meas_fast = nh.advertise<mrs_msgs::Float64Stamped>("position_meas_fast", 5);
    +
    pub_meas_slow = nh.advertise<mrs_msgs::Float64Stamped>("position_meas_slow", 5);
    +
    ros::Publisher pub_inpt_gt = nh.advertise<mrs_msgs::Float64Stamped>("velocity_inpt", 5);
    +
    ros::Publisher pub_pos_gt = nh.advertise<mrs_msgs::Float64Stamped>("position_gt", 5);
    +
    ros::Publisher pub_vel_gt = nh.advertise<mrs_msgs::Float64Stamped>("velocity_gt", 5);
    +
    +
    // threads for publishing
    +
    std::thread th_fast(meas_generator_fast);
    +
    th_fast.detach();
    +
    std::thread th_slow(meas_generator_slow);
    +
    th_slow.detach();
    +
    +
    // our system model, generating the currant state x
    +
    ros::Duration dur(5e-2);
    +
    while (ros::ok())
    +
    {
    +
    const double dt = dur.toSec();
    +
    const u_t u = 3.0*u_t::Random();
    +
    const Q_t dtQ = dt*Q;
    +
    +
    // generate a new state
    +
    const x_t x_old = mrs_lib::get_mutexed(x_mtx, x);
    +
    const x_t x_new = generateA(dt)*x_old + generateB(dt)*u + multivariate_gaussian(dtQ);
    +
    mrs_lib::set_mutexed(x_mtx, x_new, x);
    +
    +
    mrs_msgs::Float64Stamped msg;
    +
    +
    // publish the position ground-truth
    +
    msg.header.stamp = ros::Time::now() - ros::Duration(dt);
    +
    msg.value = u.x();
    +
    pub_inpt_gt.publish(msg);
    +
    +
    // publish the position ground-truth
    +
    msg.header.stamp = ros::Time::now();
    +
    msg.value = x.x();
    +
    pub_pos_gt.publish(msg);
    +
    +
    // publish the velocity ground-truth
    +
    msg.header.stamp = ros::Time::now();
    +
    msg.value = x.y();
    +
    pub_vel_gt.publish(msg);
    +
    +
    ROS_INFO_THROTTLE(1.0, "[%s]: Spinning", ros::this_node::getName().c_str());
    +
    ros::spinOnce();
    +
    dur.sleep();
    +
    }
    +
    }
    +
    +
    +
    +
    +
    std::tuple< Args... > get_mutexed(std::mutex &mut, Args &... args)
    thread-safe getter for values of variables (args)
    Definition: mutex.h:48
    +
    typename Base_class::Q_t Q_t
    Process noise covariance matrix type .
    Definition: lkf.h:52
    +
    Eigen::Matrix< double, p, n > H_t
    State to measurement mapping matrix type .
    Definition: lkf.h:57
    +
    typename Base_class::P_t P_t
    State uncertainty covariance matrix type .
    Definition: lkf.h:50
    +
    std::enable_if_t<!check, statecov_t > predictTo(const ros::Time &to_stamp)
    Estimates the system state and covariance matrix at the specified time.
    Definition: repredictor.h:67
    +
    typename Base_class::statecov_t statecov_t
    Helper struct for passing around the state and its covariance in one variable.
    Definition: lkf.h:53
    +
    typename Base_class::R_t R_t
    Measurement noise covariance matrix type .
    Definition: lkf.h:51
    +
    std::enable_if_t<!check > addMeasurement(const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)
    Adds one measurement to the history buffer, removing the oldest element in the buffer if it is full.
    Definition: repredictor.h:296
    +
    Eigen::Matrix< double, n, m > B_t
    Input to state mapping matrix type .
    Definition: lkf.h:56
    +
    typename Base_class::x_t x_t
    State vector type .
    Definition: lkf.h:47
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    Implementation of the Repredictor for fusing measurements with variable delays.
    Definition: repredictor.h:39
    +
    Eigen::Matrix< double, n, n > A_t
    System transition matrix type .
    Definition: lkf.h:55
    +
    Defines helper routines for getting and setting variables under mutex locks.
    +
    auto set_mutexed(std::mutex &mut, const T what, T &where)
    thread-safe setter for a variable
    Definition: mutex.h:116
    +
    typename Base_class::z_t z_t
    Measurement vector type .
    Definition: lkf.h:49
    +
    std::enable_if_t<!check > addInputChangeWithNoise(const u_t &u, const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)
    Adds one system input to the history buffer, removing the oldest element in the buffer if it is full.
    Definition: repredictor.h:141
    +
    typename Base_class::u_t u_t
    Input vector type .
    Definition: lkf.h:48
    + + + + diff --git a/repredictor_2example_8cpp.html b/repredictor_2example_8cpp.html new file mode 100644 index 00000000..488d18c6 --- /dev/null +++ b/repredictor_2example_8cpp.html @@ -0,0 +1,298 @@ + + + + + + + +mrs_lib: src/repredictor/example.cpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    example.cpp File Reference
    +
    +
    + +

    Example file for the Repredictor implementation. +More...

    +
    #include <mrs_lib/repredictor.h>
    +#include <mrs_lib/lkf.h>
    +#include <mrs_lib/mutex.h>
    +#include <random>
    +#include <fstream>
    +#include <mutex>
    +#include <thread>
    +#include <ros/ros.h>
    +#include <mrs_msgs/Float64Stamped.h>
    +
    + + Include dependency graph for example.cpp:
    +
    +
    + +
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    +using mrs_lib::rep_t = Repredictor< lkf_t >
     
    +using A_t = lkf_t::A_t
     
    +using B_t = lkf_t::B_t
     
    +using H_t = lkf_t::H_t
     
    +using Q_t = lkf_t::Q_t
     
    +using x_t = lkf_t::x_t
     
    +using P_t = lkf_t::P_t
     
    +using u_t = lkf_t::u_t
     
    +using z_t = lkf_t::z_t
     
    +using R_t = lkf_t::R_t
     
    +using statecov_t = lkf_t::statecov_t
     
    + + + +

    +Enumerations

    enum  type_e { input, +meas_fast, +meas_slow + }
     
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    +template<int rows>
    Eigen::Matrix< double, rows, 1 > multivariate_gaussian (const Eigen::Matrix< double, rows, rows > &cov)
     
    +A_t generateA (const double dt)
     
    +B_t generateB ([[maybe_unused]] const double dt)
     
    +const H_t H ((H_t()<< 1, 0).finished())
     
    +void process_msg (const mrs_msgs::Float64Stamped::ConstPtr msg, type_e type)
     
    +void callback_input (const mrs_msgs::Float64Stamped::ConstPtr msg)
     
    +void callback_meas_fast (const mrs_msgs::Float64Stamped::ConstPtr msg)
     
    +void callback_meas_slow (const mrs_msgs::Float64Stamped::ConstPtr msg)
     
    +void meas_generator_fast ()
     
    +void meas_generator_slow ()
     
    +int main (int argc, char **argv)
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    +const Q_t Q = 2.5*Q_t::Identity()
     
    +const R_t R_fast = 5.5*R_t::Identity()
     
    +const R_t R_slow = 0.01*R_t::Identity()
     
    +const x_t x0 = x_t::Zero()
     
    +const P_t P0 = 5.0*P_t::Identity()
     
    +const u_t u0 = u_t::Zero()
     
    +const ros::Time t0 = ros::Time(0)
     
    +const std::shared_ptr< lkf_tlkf_ptr = std::make_shared<lkf_t>(generateA, generateB, H)
     
    +const unsigned buf_sz = 100
     
    +std::mutex rep_pubs_mtx
     
    +rep_t rep (x0, P0, u0, Q, t0, lkf_ptr, buf_sz)
     
    +ros::Publisher pub_pos_est
     
    +ros::Publisher pub_vel_est
     
    +std::mutex x_mtx
     
    +x_t x = x_t::Random()
     
    +ros::Publisher pub_meas_fast
     
    +ros::Publisher pub_meas_slow
     
    +

    Detailed Description

    +

    Example file for the Repredictor implementation.

    +
    Author
    Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +

    This example may be run after building mrs_lib by executing rosrun mrs_lib repredictor_example.

    +

    See repredictor/example.cpp.

    +
    +
    + + + + diff --git a/repredictor_2example_8cpp.js b/repredictor_2example_8cpp.js new file mode 100644 index 00000000..19efc8b2 --- /dev/null +++ b/repredictor_2example_8cpp.js @@ -0,0 +1,47 @@ +var repredictor_2example_8cpp = +[ + [ "A_t", "repredictor_2example_8cpp.html#ae8fded1ffb13cfff36afc1eedabf215f", null ], + [ "B_t", "repredictor_2example_8cpp.html#a5c39f7a461054863b37ddf9186eeb366", null ], + [ "H_t", "repredictor_2example_8cpp.html#aa4437350efd30cd9ab6dbea2a2621faa", null ], + [ "P_t", "repredictor_2example_8cpp.html#a8519b4182b449bbd63c34794c1b03312", null ], + [ "Q_t", "repredictor_2example_8cpp.html#afb367b4e310274e83ea453f1d9329df0", null ], + [ "R_t", "repredictor_2example_8cpp.html#a0571298449e0cf2aee255bf7e06e7b86", null ], + [ "rep_t", "repredictor_2example_8cpp.html#a19304cdf9777c9a3c811aa6059a88546", null ], + [ "statecov_t", "repredictor_2example_8cpp.html#adf612d30d3a77fa99ff157ce72be6383", null ], + [ "u_t", "repredictor_2example_8cpp.html#a846481e2173f20986bcee056e29a5b4c", null ], + [ "x_t", "repredictor_2example_8cpp.html#a1db3b17743d9d81ac2aa852a6ed2e4c6", null ], + [ "z_t", "repredictor_2example_8cpp.html#a3dd466ca19241875ff72a627b1f86a25", null ], + [ "type_e", "repredictor_2example_8cpp.html#a39f6e5f83740a0914d53219949ecc69e", [ + [ "input", "repredictor_2example_8cpp.html#a39f6e5f83740a0914d53219949ecc69ea37943061a284187ff6e555ac7093f528", null ], + [ "meas_fast", "repredictor_2example_8cpp.html#a39f6e5f83740a0914d53219949ecc69ea379a0883597ae3d1f1e3c1a1517dd7ad", null ], + [ "meas_slow", "repredictor_2example_8cpp.html#a39f6e5f83740a0914d53219949ecc69eac39aa50f0e5debf0e3d1c82c66de5757", null ] + ] ], + [ "callback_input", "repredictor_2example_8cpp.html#a977e0ce1096923dfd87ccdf695f9f8b2", null ], + [ "callback_meas_fast", "repredictor_2example_8cpp.html#adf9153e3a603b2c7c08fa3cf7375474a", null ], + [ "callback_meas_slow", "repredictor_2example_8cpp.html#ae3421c5445d8aaae50e91724a0388ebb", null ], + [ "generateA", "repredictor_2example_8cpp.html#a1bc0c75a4c8c1c828f547193c36d41ed", null ], + [ "generateB", "repredictor_2example_8cpp.html#a04ad260106826343be9a78c3f06b9494", null ], + [ "H", "repredictor_2example_8cpp.html#a31932df0f35e7ed6e9973f650f418a07", null ], + [ "main", "repredictor_2example_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627", null ], + [ "meas_generator_fast", "repredictor_2example_8cpp.html#a341120b0d08c40b63a5154596202da78", null ], + [ "meas_generator_slow", "repredictor_2example_8cpp.html#a2bbc4de1050b3f81aec31aca08ab80df", null ], + [ "multivariate_gaussian", "repredictor_2example_8cpp.html#a8f8bd83d76b2b0d4a6a7f6c0790bbfdd", null ], + [ "process_msg", "repredictor_2example_8cpp.html#aba7846be673da103e71d72c40f8a08fb", null ], + [ "buf_sz", "repredictor_2example_8cpp.html#a00db3db50157f6d921e88e021811bf86", null ], + [ "lkf_ptr", "repredictor_2example_8cpp.html#afe1ed0bba9b15d37a4b2d73269fde97d", null ], + [ "P0", "repredictor_2example_8cpp.html#ae66da1ac30217d07f007e22eca0fea3c", null ], + [ "pub_meas_fast", "repredictor_2example_8cpp.html#a9c6a7b667bce566f9b0d755433a8866f", null ], + [ "pub_meas_slow", "repredictor_2example_8cpp.html#aee6e5b5aaa37a9795d80edd9f5995fc8", null ], + [ "pub_pos_est", "repredictor_2example_8cpp.html#a775551377e2a7c6e3fd6847b954c8082", null ], + [ "pub_vel_est", "repredictor_2example_8cpp.html#a352adc1a2c0a3bcc618377e9c709004e", null ], + [ "Q", "repredictor_2example_8cpp.html#ad73965f5fe03310152a90cdc9220c04b", null ], + [ "R_fast", "repredictor_2example_8cpp.html#a729d2c77258b8899f706bb4ab6358e8f", null ], + [ "R_slow", "repredictor_2example_8cpp.html#a0322341fab5d8ca5eb9bd456e97d7231", null ], + [ "rep", "repredictor_2example_8cpp.html#a3819710403de686f8acbaa8f3aac9e98", null ], + [ "rep_pubs_mtx", "repredictor_2example_8cpp.html#a73cfe801a23dbef4ae5d436efd88fac2", null ], + [ "t0", "repredictor_2example_8cpp.html#a8e0b3e2e88529ac7cd162baab552d6fd", null ], + [ "u0", "repredictor_2example_8cpp.html#a18307a2ee5d0bd32221c781c5dc87eb4", null ], + [ "x", "repredictor_2example_8cpp.html#a956fd740a35a42db892192588f528ea3", null ], + [ "x0", "repredictor_2example_8cpp.html#a398851be03b7067e59f304d76fbe0620", null ], + [ "x_mtx", "repredictor_2example_8cpp.html#abd02e0d2de9881fe9c0b60ed36f679a5", null ] +]; \ No newline at end of file diff --git a/repredictor_2example_8cpp__incl.map b/repredictor_2example_8cpp__incl.map new file mode 100644 index 00000000..61cdb06d --- /dev/null +++ b/repredictor_2example_8cpp__incl.map @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/repredictor_2example_8cpp__incl.md5 b/repredictor_2example_8cpp__incl.md5 new file mode 100644 index 00000000..94174509 --- /dev/null +++ b/repredictor_2example_8cpp__incl.md5 @@ -0,0 +1 @@ +e6224f00e37fb46c5046a300e09738be \ No newline at end of file diff --git a/repredictor_2example_8cpp__incl.png b/repredictor_2example_8cpp__incl.png new file mode 100644 index 00000000..1e8c162d Binary files /dev/null and b/repredictor_2example_8cpp__incl.png differ diff --git a/repredictor_8h_source.html b/repredictor_8h_source.html new file mode 100644 index 00000000..21f14316 --- /dev/null +++ b/repredictor_8h_source.html @@ -0,0 +1,509 @@ + + + + + + + +mrs_lib: include/mrs_lib/repredictor.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    repredictor.h
    +
    +
    +
    1 #ifndef REPREDICTOR_H
    +
    2 #define REPREDICTOR_H
    +
    3 
    +
    4 #include <Eigen/Dense>
    +
    5 #include <boost/circular_buffer.hpp>
    +
    6 #include <std_msgs/Time.h>
    +
    7 #include <functional>
    +
    8 #include <ros/ros.h>
    +
    9 #include <mrs_lib/utils.h>
    +
    10 
    +
    11 namespace mrs_lib
    +
    12 {
    +
    38  template <class Model, bool disable_reprediction=false>
    + +
    40  {
    +
    41  public:
    +
    42  /* states, inputs etc. definitions (typedefs, constants etc) //{ */
    +
    43 
    +
    44  using x_t = typename Model::x_t;
    +
    45  using u_t = typename Model::u_t;
    +
    46  using z_t = typename Model::z_t;
    +
    47  using P_t = typename Model::P_t;
    +
    48  using R_t = typename Model::R_t;
    +
    49  using Q_t = typename Model::Q_t;
    +
    50  using statecov_t = typename Model::statecov_t;
    +
    51  using ModelPtr = typename std::shared_ptr<Model>;
    +
    53  //}
    +
    54 
    +
    55  /* predictTo() method //{ */
    +
    66  template<bool check=disable_reprediction>
    +
    67  std::enable_if_t<!check, statecov_t> predictTo(const ros::Time& to_stamp)
    +
    68  {
    +
    69  assert(!m_history.empty());
    +
    70  auto hist_it = std::begin(m_history);
    +
    71  if (hist_it->is_measurement)
    +
    72  {
    +
    73  // if the first history point is measurement, don't use it for correction (to prevent it from being used twice)
    +
    74  hist_it->is_measurement = false;
    +
    75  }
    +
    76  // cur_stamp corresponds to the time point of cur_sc estimation
    +
    77  auto cur_stamp = hist_it->stamp;
    +
    78  // cur_sc is the current state and covariance estimate
    +
    79  auto cur_sc = m_sc;
    +
    80  do
    +
    81  {
    +
    82  cur_sc.stamp = hist_it->stamp;
    +
    83  // do the correction if current history point is a measurement
    +
    84  if ((hist_it->is_measurement))
    +
    85  cur_sc = correctFrom(cur_sc, *hist_it);
    +
    86 
    +
    87  // decide whether to predict to the next history point or straight to the desired stamp already
    +
    88  // (whichever comes sooner or directly to the desired stamp if no further history point is available)
    +
    89  ros::Time next_stamp = to_stamp;
    +
    90  if ((hist_it + 1) != std::end(m_history) && (hist_it + 1)->stamp <= to_stamp)
    +
    91  next_stamp = (hist_it + 1)->stamp;
    +
    92 
    +
    93  // do the prediction
    +
    94  cur_sc = predictFrom(cur_sc, *hist_it, cur_stamp, next_stamp);
    +
    95  cur_stamp = next_stamp;
    +
    96 
    +
    97  // increment the history pointer
    +
    98  hist_it++;
    +
    99  } while (hist_it != std::end(m_history) && hist_it->stamp <= to_stamp);
    +
    100  cur_sc.stamp = to_stamp;
    +
    101  return cur_sc;
    +
    102  }
    +
    103 
    +
    116  template<bool check=disable_reprediction>
    +
    117  std::enable_if_t<check, statecov_t> predictTo(const ros::Time& to_stamp)
    +
    118  {
    +
    119  assert(!m_history.empty());
    +
    120  const auto& info = m_history.front();
    +
    121  auto sc = predictFrom(m_sc, info, info.stamp, to_stamp);
    +
    122  sc.stamp = to_stamp;
    +
    123  return sc;
    +
    124  }
    +
    125  //}
    +
    126 
    +
    127  /* addInputChangeWithNoise() method //{ */
    +
    140  template<bool check=disable_reprediction>
    +
    141  std::enable_if_t<!check> addInputChangeWithNoise(const u_t& u, const Q_t& Q, const ros::Time& stamp, const ModelPtr& model = nullptr)
    +
    142  {
    +
    143  const info_t info(stamp, u, Q, model);
    +
    144  // find the next point in the history buffer
    +
    145  const auto next_it = std::lower_bound(std::begin(m_history), std::end(m_history), info, &Repredictor<Model>::earlier);
    +
    146  // add the point to the history buffer
    +
    147  const auto added = addInfo(info, next_it);
    +
    148  // update all measurements following the newly added system input up to the next system input
    +
    149  if (added != std::end(m_history))
    +
    150  for (auto it = added + 1; it != std::end(m_history) && it->is_measurement; it++)
    +
    151  it->updateUsing(info);
    +
    152  }
    +
    153 
    +
    166  template<bool check=disable_reprediction>
    +
    167  std::enable_if_t<check> addInputChangeWithNoise(const u_t& u, const Q_t& Q, [[maybe_unused]] const ros::Time& stamp, const ModelPtr& model = nullptr)
    +
    168  {
    +
    169  if (m_history.empty())
    +
    170  m_history.push_back({stamp});
    +
    171  m_history.front().u = u;
    +
    172  m_history.front().Q = Q;
    +
    173  m_history.front().stamp = stamp;
    +
    174  m_history.front().predict_model = model;
    +
    175  }
    +
    176  //}
    +
    177 
    +
    178  /* addInputChange() method //{ */
    +
    190  template<bool check=disable_reprediction>
    +
    191  std::enable_if_t<!check> addInputChange(const u_t& u, const ros::Time& stamp, const ModelPtr& model = nullptr)
    +
    192  {
    +
    193  assert(!m_history.empty());
    +
    194  // find the next point in the history buffer
    +
    195  const auto next_it = std::lower_bound(std::begin(m_history), std::end(m_history), stamp, &Repredictor<Model>::earlier);
    +
    196  // get the previous history point (or the first one to avoid out of bounds)
    +
    197  const auto prev_it = next_it == std::begin(m_history) ? next_it : next_it - 1;
    +
    198  // initialize a new history info point
    +
    199  const info_t info(stamp, u, prev_it->Q, model);
    +
    200  // add the point to the history buffer
    +
    201  const auto added = addInfo(info, next_it);
    +
    202  // update all measurements following the newly added system input up to the next system input
    +
    203  if (added != std::end(m_history))
    +
    204  for (auto it = added + 1; it != std::end(m_history) && it->is_measurement; it++)
    +
    205  it->updateUsing(info);
    +
    206  }
    +
    207 
    +
    219  template<bool check=disable_reprediction>
    +
    220  std::enable_if_t<check> addInputChange(const u_t& u, [[maybe_unused]] const ros::Time& stamp, const ModelPtr& model = nullptr)
    +
    221  {
    +
    222  if (m_history.empty())
    +
    223  m_history.push_back({stamp});
    +
    224  m_history.front().u = u;
    +
    225  m_history.front().stamp = stamp;
    +
    226  m_history.front().predict_model = model;
    +
    227  }
    +
    228  //}
    +
    229 
    +
    230  /* addProcessNoiseChange() method //{ */
    +
    242  template<bool check=disable_reprediction>
    +
    243  std::enable_if_t<!check> addProcessNoiseChange(const Q_t& Q, const ros::Time& stamp, const ModelPtr& model = nullptr)
    +
    244  {
    +
    245  assert(!m_history.empty());
    +
    246  // find the next point in the history buffer
    +
    247  const auto next_it = std::lower_bound(std::begin(m_history), std::end(m_history), stamp, &Repredictor<Model>::earlier);
    +
    248  // get the previous history point (or the first one to avoid out of bounds)
    +
    249  const auto prev_it = next_it == std::begin(m_history) ? next_it : next_it - 1;
    +
    250  // initialize a new history info point
    +
    251  const info_t info(stamp, prev_it->u, Q, model);
    +
    252  // add the point to the history buffer
    +
    253  const auto added = addInfo(info, next_it);
    +
    254  // update all measurements following the newly added system input up to the next system input
    +
    255  if (added != std::end(m_history))
    +
    256  for (auto it = added + 1; it != std::end(m_history) && it->is_measurement; it++)
    +
    257  it->updateUsing(info);
    +
    258  }
    +
    259 
    +
    271  template<bool check=disable_reprediction>
    +
    272  std::enable_if_t<check> addProcessNoiseChange(const Q_t& Q, [[maybe_unused]] const ros::Time& stamp, const ModelPtr& model = nullptr)
    +
    273  {
    +
    274  if (m_history.empty())
    +
    275  m_history.push_back({stamp});
    +
    276  m_history.front().Q = Q;
    +
    277  m_history.front().stamp = stamp;
    +
    278  m_history.front().predict_model = model;
    +
    279  }
    +
    280  //}
    +
    281 
    +
    282  /* addMeasurement() method //{ */
    +
    295  template<bool check=disable_reprediction>
    +
    296  std::enable_if_t<!check> addMeasurement(const z_t& z, const R_t& R, const ros::Time& stamp, const ModelPtr& model = nullptr, const double& meas_id = -1)
    +
    297  {
    +
    298  assert(!m_history.empty());
    +
    299  // helper variable for searching of the next point in the history buffer
    +
    300  const auto next_it = std::lower_bound(std::begin(m_history), std::end(m_history), stamp, &Repredictor<Model>::earlier);
    +
    301  // get the previous history point (or the first one to avoid out of bounds)
    +
    302  const auto prev_it = next_it == std::begin(m_history) ? next_it : next_it - 1;
    +
    303  // initialize a new history info point
    +
    304  const info_t info(stamp, z, R, model, *prev_it, meas_id);
    +
    305  // add the point to the history buffer
    +
    306  addInfo(info, next_it);
    +
    307  }
    +
    308 
    +
    321  template<bool check=disable_reprediction>
    +
    322  std::enable_if_t<check> addMeasurement(const z_t& z, const R_t& R, const ros::Time& stamp, const ModelPtr& model = nullptr, const double& meas_id = -1)
    +
    323  {
    +
    324  if (m_history.empty())
    +
    325  m_history.push_back({stamp});
    +
    326  auto& info = m_history.front();
    +
    327  const ros::Time to_stamp = stamp > info.stamp ? stamp : info.stamp;
    +
    328  const auto sc = predictTo(to_stamp);
    +
    329  info.z = z;
    +
    330  info.R = R;
    +
    331  info.stamp = to_stamp;
    +
    332  info.is_measurement = true;
    +
    333  info.meas_id = meas_id;
    +
    334  info.correct_model = model;
    +
    335  m_sc = correctFrom(sc, info);
    +
    336  }
    +
    337  //}
    +
    338 
    +
    339  public:
    +
    340  /* constructor //{ */
    +
    341 
    +
    355  Repredictor(const x_t& x0, const P_t& P0, const u_t& u0, const Q_t& Q0, const ros::Time& t0, const ModelPtr& model, const unsigned hist_len)
    +
    356  : m_sc{x0, P0}, m_default_model(model), m_history(history_t(hist_len))
    +
    357  {
    +
    358  assert(hist_len > 0);
    +
    359  addInputChangeWithNoise(u0, Q0, t0, model);
    +
    360  };
    +
    361 
    + +
    367 
    +
    381  Repredictor(const x_t& x0, const P_t& P0, const Q_t& Q0, const ros::Time& t0, const ModelPtr& model, const unsigned hist_len)
    +
    382  : m_sc{x0, P0}, m_default_model(model), m_history(history_t(hist_len))
    +
    383  {
    +
    384  assert(hist_len > 0);
    +
    385  const u_t u0{0};
    +
    386  addInputChangeWithNoise(u0, Q0, t0, model);
    +
    387  };
    +
    388  //}
    +
    389 
    +
    390  protected:
    +
    391  // state and covariance corresponding to the oldest element in the history buffer
    +
    392  statecov_t m_sc;
    +
    393  // default model to use for updates
    +
    394  ModelPtr m_default_model;
    +
    395 
    +
    396  private:
    +
    397  /* helper structs and usings //{ */
    +
    398 
    +
    399  struct info_t
    +
    400  {
    +
    401  ros::Time stamp;
    +
    402 
    +
    403  // system input-related information
    +
    404  u_t u;
    +
    405  Q_t Q;
    +
    406  ModelPtr predict_model;
    +
    407 
    +
    408  // measurement-related information (unused in case is_measurement=false)
    +
    409  z_t z;
    +
    410  R_t R;
    +
    411  ModelPtr correct_model;
    +
    412  bool is_measurement;
    +
    413  int meas_id;
    +
    414 
    +
    415  // constructor for a dummy info (for searching in the history)
    +
    416  info_t(const ros::Time& stamp) : stamp(stamp), is_measurement(false){};
    +
    417 
    +
    418  // constructor for a system input
    +
    419  info_t(const ros::Time& stamp, const u_t& u, const Q_t& Q, const ModelPtr& model)
    +
    420  : stamp(stamp), u(u), Q(Q), predict_model(model), is_measurement(false){};
    +
    421 
    +
    422  // constructor for a measurement
    +
    423  info_t(const ros::Time& stamp, const z_t& z, const R_t& R, const ModelPtr& model, const info_t& prev_info, const int& meas_id)
    +
    424  : stamp(stamp), z(z), R(R), correct_model(model), is_measurement(true), meas_id(meas_id)
    +
    425  {
    +
    426  updateUsing(prev_info);
    +
    427  };
    +
    428 
    +
    429  // copy system input-related information from a previous info
    +
    430  void updateUsing(const info_t& info)
    +
    431  {
    +
    432  u = info.u;
    +
    433  Q = info.Q;
    +
    434  predict_model = info.predict_model;
    +
    435  };
    +
    436  };
    +
    437 
    +
    438 
    +
    439  //}
    +
    440 
    +
    441  protected:
    +
    442  using history_t = boost::circular_buffer<info_t>;
    +
    443  // the history buffer
    +
    444  history_t m_history;
    +
    445 
    +
    446  // | ---------------- helper debugging methods ---------------- |
    +
    447  /* checkMonotonicity() method //{ */
    +
    448  template <typename T>
    +
    449  bool checkMonotonicity(const T& buf)
    +
    450  {
    +
    451  if (buf.empty())
    +
    452  return true;
    +
    453  for (auto it = std::begin(buf) + 1; it != std::end(buf); it++)
    +
    454  if (earlier(*it, *(it - 1)))
    +
    455  return false;
    +
    456  return true;
    +
    457  }
    +
    458  //}
    +
    459 
    +
    460  /* printBuffer() method //{ */
    +
    461  template <typename T>
    +
    462  void printBuffer(const T& buf)
    +
    463  {
    +
    464  if (buf.empty())
    +
    465  return;
    +
    466  const auto first_stamp = buf.front().stamp;
    +
    467  std::cerr << "first stamp: " << first_stamp << std::endl;
    +
    468  for (size_t it = 0; it < buf.size(); it++)
    +
    469  {
    +
    470  std::cerr << it << ":\t" << buf.at(it).stamp - first_stamp << std::endl;
    +
    471  }
    +
    472  }
    +
    473  //}
    +
    474 
    +
    475  private:
    +
    476  // | -------------- helper implementation methods ------------- |
    +
    477 
    +
    478  /* addInfo() method //{ */
    +
    479  typename history_t::iterator addInfo(const info_t& info, const typename history_t::iterator& next_it)
    +
    480  {
    +
    481  // check if the new element would be added before the first element of the history buffer and ignore it if so
    +
    482  if (next_it == std::begin(m_history) && !m_history.empty())
    +
    483  {
    +
    484  ROS_WARN_STREAM_THROTTLE(1.0, "[Repredictor]: Added history point is older than the oldest by "
    +
    485  << (next_it->stamp - info.stamp).toSec()
    +
    486  << "s. Ignoring it! Consider increasing the history buffer size (currently: " << m_history.size() << ")");
    +
    487  return std::end(m_history);
    +
    488  }
    +
    489 
    +
    490  // check if adding a new element would throw out the oldest one
    +
    491  if (m_history.size() == m_history.capacity())
    +
    492  { // if so, first update m_sc
    +
    493  // figure out, what will be the oldest element in the buffer after inserting the newly received one
    +
    494  auto new_oldest = m_history.front();
    +
    495  if (m_history.size() == 1 || (m_history.size() > 1 && info.stamp > m_history.at(0).stamp && info.stamp < m_history.at(1).stamp))
    +
    496  {
    +
    497  new_oldest = info;
    +
    498  } else if (m_history.size() > 1)
    +
    499  {
    +
    500  new_oldest = m_history.at(1);
    +
    501  }
    +
    502  // update m_sc to the time of the new oldest element (after inserting the new element)
    +
    503  m_sc = predictTo(new_oldest.stamp);
    +
    504  // insert the new element into the history buffer, causing the original oldest element to be removed
    +
    505  }
    +
    506 
    +
    507  // add the new point finally
    +
    508  const auto ret = m_history.insert(next_it, info);
    +
    509  /* debug check //{ */
    +
    510 
    +
    511 #ifdef REPREDICTOR_DEBUG
    +
    512  if (!checkMonotonicity(m_history))
    +
    513  {
    +
    514  std::cerr << "History buffer is not monotonous after modification!" << std::endl;
    +
    515  }
    +
    516  std::cerr << "Added info (" << m_history.size() << " total)" << std::endl;
    +
    517 #endif
    +
    518 
    +
    519  //}
    +
    520  return ret;
    +
    521  }
    +
    522  //}
    +
    523 
    +
    524  /* earlier() method //{ */
    +
    525  static bool earlier(const info_t& ob1, const info_t& ob2)
    +
    526  {
    +
    527  return ob1.stamp < ob2.stamp;
    +
    528  }
    +
    529  //}
    +
    530 
    +
    531  /* predictFrom() method //{ */
    +
    532  statecov_t predictFrom(const statecov_t& sc, const info_t& inpt, const ros::Time& from_stamp, const ros::Time& to_stamp)
    +
    533  {
    +
    534  const auto model = inpt.predict_model == nullptr ? m_default_model : inpt.predict_model;
    +
    535  const auto dt = (to_stamp - from_stamp).toSec();
    +
    536  return model->predict(sc, inpt.u, inpt.Q, dt);
    +
    537  }
    +
    538  //}
    +
    539 
    +
    540  /* correctFrom() method //{ */
    +
    541  statecov_t correctFrom(const statecov_t& sc, const info_t& meas)
    +
    542  {
    +
    543  assert(meas.is_measurement);
    +
    544  const auto model = meas.correct_model == nullptr ? m_default_model : meas.correct_model;
    +
    545  auto sc_tmp = sc;
    +
    546  return model->correct(sc_tmp, meas.z, meas.R);
    +
    547  }
    +
    548  //}
    +
    549  };
    +
    550 } // namespace mrs_lib
    +
    551 
    +
    552 
    +
    553 #endif // REPREDICTOR_H
    +
    +
    +
    Repredictor()
    Empty constructor.
    Definition: repredictor.h:366
    +
    std::enable_if_t< check > addProcessNoiseChange(const Q_t &Q, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)
    Adds one system input to the history buffer, removing the oldest element in the buffer if it is full.
    Definition: repredictor.h:272
    +
    typename Model::P_t P_t
    State uncertainty covariance matrix type .
    Definition: repredictor.h:47
    +
    Repredictor(const x_t &x0, const P_t &P0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len)
    Variation of the constructor for cases without a system input.
    Definition: repredictor.h:381
    +
    std::enable_if_t<!check, statecov_t > predictTo(const ros::Time &to_stamp)
    Estimates the system state and covariance matrix at the specified time.
    Definition: repredictor.h:67
    +
    typename Model::R_t R_t
    Measurement noise covariance matrix type .
    Definition: repredictor.h:48
    +
    std::enable_if_t< check > addInputChange(const u_t &u, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)
    Adds one system input to the history buffer, removing the oldest element in the buffer if it is full.
    Definition: repredictor.h:220
    +
    std::enable_if_t<!check > addMeasurement(const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)
    Adds one measurement to the history buffer, removing the oldest element in the buffer if it is full.
    Definition: repredictor.h:296
    +
    Defines various general utility functions.
    +
    typename Model::statecov_t statecov_t
    Helper struct for passing around the state and its covariance in one variable.
    Definition: repredictor.h:50
    +
    std::enable_if_t< check > addMeasurement(const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)
    Adds one measurement to the history buffer, removing the oldest element in the buffer if it is full.
    Definition: repredictor.h:322
    +
    typename Model::Q_t Q_t
    Process noise covariance matrix type .
    Definition: repredictor.h:49
    +
    typename std::shared_ptr< Model > ModelPtr
    Shorthand type for a shared pointer-to-Model.
    Definition: repredictor.h:51
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    Implementation of the Repredictor for fusing measurements with variable delays.
    Definition: repredictor.h:39
    +
    std::enable_if_t< check > addInputChangeWithNoise(const u_t &u, const Q_t &Q, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)
    Adds one system input to the history buffer, removing the oldest element in the buffer if it is full.
    Definition: repredictor.h:167
    +
    std::enable_if_t<!check > addProcessNoiseChange(const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)
    Adds one system input to the history buffer, removing the oldest element in the buffer if it is full.
    Definition: repredictor.h:243
    +
    typename Model::z_t z_t
    Measurement vector type .
    Definition: repredictor.h:46
    +
    std::enable_if_t<!check > addInputChange(const u_t &u, const ros::Time &stamp, const ModelPtr &model=nullptr)
    Adds one system input to the history buffer, removing the oldest element in the buffer if it is full.
    Definition: repredictor.h:191
    +
    typename Model::x_t x_t
    State vector type .
    Definition: repredictor.h:44
    +
    std::enable_if_t<!check > addInputChangeWithNoise(const u_t &u, const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)
    Adds one system input to the history buffer, removing the oldest element in the buffer if it is full.
    Definition: repredictor.h:141
    +
    std::enable_if_t< check, statecov_t > predictTo(const ros::Time &to_stamp)
    Estimates the system state and covariance matrix at the specified time.
    Definition: repredictor.h:117
    +
    Repredictor(const x_t &x0, const P_t &P0, const u_t &u0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len)
    The main constructor.
    Definition: repredictor.h:355
    +
    typename Model::u_t u_t
    Input vector type .
    Definition: repredictor.h:45
    + + + + diff --git a/repredictor__aloamgarm_8h_source.html b/repredictor__aloamgarm_8h_source.html new file mode 100644 index 00000000..a8de91d9 --- /dev/null +++ b/repredictor__aloamgarm_8h_source.html @@ -0,0 +1,163 @@ + + + + + + + +mrs_lib: include/mrs_lib/repredictor_aloamgarm.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    repredictor_aloamgarm.h
    +
    +
    +
    1 #ifndef REPREDICTOR_ALOAMGARM_H
    +
    2 #define REPREDICTOR_ALOAMGARM_H
    +
    3 
    +
    4 #include <Eigen/Dense>
    +
    5 #include <boost/circular_buffer.hpp>
    +
    6 #include <std_msgs/Time.h>
    +
    7 #include <functional>
    +
    8 #include <ros/ros.h>
    +
    9 #include <mrs_lib/utils.h>
    +
    10 #include <mrs_lib/repredictor.h>
    +
    11 
    +
    12 namespace mrs_lib
    +
    13 {
    +
    38 template <class Model>
    +
    39 class RepredictorAloamgarm : public Repredictor<Model> {
    +
    40 public:
    +
    41  /* states, inputs etc. definitions (typedefs, constants etc) //{ */
    +
    42 
    +
    43  using x_t = typename Model::x_t;
    +
    44  using u_t = typename Model::u_t;
    +
    45  using z_t = typename Model::z_t;
    +
    46  using P_t = typename Model::P_t;
    +
    47  using R_t = typename Model::R_t;
    +
    48  using Q_t = typename Model::Q_t;
    +
    49  using statecov_t = typename Model::statecov_t;
    +
    50  using ModelPtr = typename std::shared_ptr<Model>;
    +
    51  using history_t = typename Repredictor<Model>::history_t;
    +
    52 
    +
    53  //}
    +
    54 
    +
    55 public:
    +
    56  /* constructor //{ */
    +
    57 
    +
    72  RepredictorAloamgarm(const x_t& x0, const P_t& P0, const u_t& u0, const Q_t& Q0, const ros::Time& t0, const ModelPtr& model, const unsigned hist_len,
    +
    73  const std::shared_ptr<boost::circular_buffer<double>>& nis_buffer) {
    +
    74  Repredictor<Model>::m_sc = {x0, P0, nis_buffer};
    + +
    76  Repredictor<Model>::m_history = history_t(hist_len);
    +
    77  assert(hist_len > 0);
    + +
    79  };
    +
    80  //}
    +
    81 };
    +
    82 } // namespace mrs_lib
    +
    83 
    +
    84 
    +
    85 #endif // REPREDICTOR_ALOAMGARM_H
    +
    +
    +
    typename Model::z_t z_t
    Measurement vector type .
    Definition: repredictor_aloamgarm.h:45
    +
    Defines various general utility functions.
    +
    typename Model::P_t P_t
    State uncertainty covariance matrix type .
    Definition: repredictor_aloamgarm.h:46
    +
    typename Model::Q_t Q_t
    Process noise covariance matrix type .
    Definition: repredictor_aloamgarm.h:48
    +
    typename Model::x_t x_t
    State vector type .
    Definition: repredictor_aloamgarm.h:43
    +
    typename std::shared_ptr< Model > ModelPtr
    Shorthand type for a shared pointer-to-Model.
    Definition: repredictor_aloamgarm.h:50
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    typename Model::u_t u_t
    Input vector type .
    Definition: repredictor_aloamgarm.h:44
    +
    typename Model::R_t R_t
    Measurement noise covariance matrix type .
    Definition: repredictor_aloamgarm.h:47
    +
    Implementation of the Repredictor for fusing measurements with variable delays.
    Definition: repredictor.h:39
    +
    typename Model::statecov_t statecov_t
    Helper struct for passing around the state and its covariance in one variable.
    Definition: repredictor_aloamgarm.h:49
    +
    RepredictorAloamgarm(const x_t &x0, const P_t &P0, const u_t &u0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len, const std::shared_ptr< boost::circular_buffer< double >> &nis_buffer)
    Variation of the constructor for kalman filter using nis_buffer (ALOAMGARM)
    Definition: repredictor_aloamgarm.h:72
    +
    Implementation of the RepredictorAloamgarm for fusing measurements with variable delays.
    Definition: repredictor_aloamgarm.h:39
    +
    std::enable_if_t<!check > addInputChangeWithNoise(const u_t &u, const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)
    Adds one system input to the history buffer, removing the oldest element in the buffer if it is full.
    Definition: repredictor.h:141
    + + + + diff --git a/resize.js b/resize.js new file mode 100644 index 00000000..a0bb5f45 --- /dev/null +++ b/resize.js @@ -0,0 +1,137 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +function initResizable() +{ + var cookie_namespace = 'doxygen'; + var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight; + + function readCookie(cookie) + { + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) { + var index = document.cookie.indexOf(myCookie); + if (index != -1) { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + var val = document.cookie.substring(valStart, valEnd); + return val; + } + } + return 0; + } + + function writeCookie(cookie, val, expiration) + { + if (val==undefined) return; + if (expiration == null) { + var date = new Date(); + date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week + expiration = date.toGMTString(); + } + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/"; + } + + function resizeWidth() + { + var windowWidth = $(window).width() + "px"; + var sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + writeCookie('width',sidenavWidth-barWidth, null); + } + + function restoreWidth(navWidth) + { + var windowWidth = $(window).width() + "px"; + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight() + { + var headerHeight = header.outerHeight(); + var footerHeight = footer.outerHeight(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + content.css({height:windowHeight + "px"}); + navtree.css({height:windowHeight + "px"}); + sidenav.css({height:windowHeight + "px"}); + var width=$(window).width(); + if (width!=collapsedWidth) { + if (width=desktop_vp) { + if (!collapsed) { + collapseExpand(); + } + } else if (width>desktop_vp && collapsedWidth0) { + restoreWidth(0); + collapsed=true; + } + else { + var width = readCookie('width'); + if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } + collapsed=false; + } + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(function() { resizeHeight(); }); + var device = navigator.userAgent.toLowerCase(); + var touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + var width = readCookie('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + $(window).on('load',resizeHeight); +} +/* @license-end */ diff --git a/rheiv_2example_8cpp-example.html b/rheiv_2example_8cpp-example.html new file mode 100644 index 00000000..3f392dca --- /dev/null +++ b/rheiv_2example_8cpp-example.html @@ -0,0 +1,176 @@ + + + + + + + +mrs_lib: rheiv/example.cpp + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    rheiv/example.cpp
    +
    +
    +

    This example may be run after building mrs_lib by executing rosrun mrs_lib rheiv_example.

    +

    A plane surface model in the cartesian form $ a x + b y + c z + d = 0 $ will be used in this example. The parameters $ a $, $ b $, $ c $ and $ d $ are elements of the parameter vector $ \mathbf{ \theta } $.

    +
    // clang: MatousFormat
    +
    // Include the LKF header
    +
    #include <mrs_lib/rheiv.h>
    +
    #include <ros/ros.h>
    +
    +
    // Define the LKF we will be using
    +
    namespace mrs_lib
    +
    {
    +
    const int n_states = 3;
    +
    const int n_params = 4;
    +
    +
    using rheiv_t = RHEIV<n_states, n_params>;
    +
    using theta_t = rheiv_t::theta_t;
    +
    using xs_t = rheiv_t::xs_t;
    +
    using zs_t = rheiv_t::zs_t;
    +
    using P_t = rheiv_t::P_t;
    +
    using Ps_t = rheiv_t::Ps_t;
    +
    using f_z_t = rheiv_t::f_z_t;
    +
    using dzdx_t = rheiv_t::dzdx_t;
    +
    }
    +
    +
    /* For the plane surface model, there is no need to transform the data. */
    +
    mrs_lib::zs_t f_z(const mrs_lib::xs_t& xs)
    +
    {
    +
    return xs;
    +
    }
    +
    +
    int main()
    +
    {
    +
    /* For the plane surface model, the Jacobian is just an identitiy matrix. */
    +
    const mrs_lib::dzdx_t dzdx = mrs_lib::dzdx_t::Identity();
    +
    +
    const int n_pts = 4;
    +
    mrs_lib::xs_t xs(3, n_pts);
    +
    xs <<
    +
    0, 1, 0, 10,
    +
    0, 0, 1, 0,
    +
    0, 0, 0, 0.001; // if you change the last value to 0, the iterative optimization will fail because the matrices M and N will be degenerate
    +
    const mrs_lib::P_t P = mrs_lib::P_t::Identity();
    +
    mrs_lib::Ps_t Ps;
    +
    Ps.reserve(n_pts);
    +
    for (int it = 0; it < n_pts; it++)
    +
    Ps.push_back(P);
    +
    +
    std::cout << "initializing object:" << std::endl;
    +
    mrs_lib::rheiv_t rheiv(f_z, dzdx, 1e-15, 10, std::chrono::milliseconds(1), 1);
    +
    std::cout << "running fit" << std::endl;
    +
    mrs_lib::theta_t theta;
    +
    try
    +
    {
    +
    theta = rheiv.fit(xs, Ps);
    +
    } catch (const mrs_lib::eigenvector_exception& ex)
    +
    {
    +
    std::cerr << "Iteration failed with message '" << ex.what() << "'." << std::endl;
    +
    std::cout << "using last valid theta" << std::endl;
    +
    theta = rheiv.get_last_estimate();
    +
    }
    +
    std::cout << "finished:" << std::endl << theta << std::endl;
    +
    }
    +
    +
    +
    +
    +
    Eigen::Matrix< double, l, 1 > theta_t
    Parameter vector type .
    Definition: rheiv.h:85
    +
    Implementation of the Reduced Heteroscedastic Errors In Variables surface fitting algorithm .
    Definition: rheiv.h:61
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    Defines RHEIV and related stuff for surface fitting to points with known covariances according to .
    +
    typename std::function< zs_t(const xs_t &)> f_z_t
    Function signature of the mapping function.
    Definition: rheiv.h:79
    +
    std::vector< P_t > Ps_t
    Container type for covariances P of the input data array.
    Definition: rheiv.h:75
    +
    Eigen::Matrix< double, k, -1 > xs_t
    Container type for the input data array.
    Definition: rheiv.h:72
    +
    This exception may be thrown when solving the generalized eigenvalue problem with the M and N matrice...
    Definition: rheiv.h:24
    +
    Eigen::Matrix< double, lr, -1 > zs_t
    Container type for an array of the reduced transformed input vectors z.
    Definition: rheiv.h:78
    +
    Eigen::Matrix< double, k, k > P_t
    Covariance type of the input vector .
    Definition: rheiv.h:74
    +
    Eigen::Matrix< double, lr, k > dzdx_t
    Type of the jacobian matrix , evaluated at .
    Definition: rheiv.h:81
    +
    virtual const char * what() const override
    Returns the error message, describing what caused the exception.
    Definition: rheiv.h:31
    + + + + diff --git a/rheiv_2example_8cpp.html b/rheiv_2example_8cpp.html new file mode 100644 index 00000000..fe1822e7 --- /dev/null +++ b/rheiv_2example_8cpp.html @@ -0,0 +1,182 @@ + + + + + + + +mrs_lib: src/rheiv/example.cpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    example.cpp File Reference
    +
    +
    + +

    Example file for the RHEIV implementation. +More...

    +
    #include <mrs_lib/rheiv.h>
    +#include <ros/ros.h>
    +
    + + Include dependency graph for example.cpp:
    +
    +
    + +
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    + + + + + + + + + + + + + + + + + +

    +Typedefs

    +using mrs_lib::rheiv_t = RHEIV< n_states, n_params >
     
    +using mrs_lib::theta_t = rheiv_t::theta_t
     
    +using mrs_lib::xs_t = rheiv_t::xs_t
     
    +using mrs_lib::zs_t = rheiv_t::zs_t
     
    +using mrs_lib::P_t = rheiv_t::P_t
     
    +using mrs_lib::Ps_t = rheiv_t::Ps_t
     
    +using mrs_lib::f_z_t = rheiv_t::f_z_t
     
    +using mrs_lib::dzdx_t = rheiv_t::dzdx_t
     
    + + + + + +

    +Functions

    +mrs_lib::zs_t f_z (const mrs_lib::xs_t &xs)
     
    +int main ()
     
    + + + +

    +Variables

    +const int mrs_lib::n_params = 4
     
    +

    Detailed Description

    +

    Example file for the RHEIV implementation.

    +
    Author
    Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +

    This example may be run after building mrs_lib by executing rosrun mrs_lib rheiv_example.

    +

    A plane surface model in the cartesian form $ a x + b y + c z + d = 0 $ will be used in this example. The parameters $ a $, $ b $, $ c $ and $ d $ are elements of the parameter vector $ \mathbf{ \theta } $.

    +

    See rheiv/example.cpp.

    +
    +
    + + + + diff --git a/rheiv_2example_8cpp.js b/rheiv_2example_8cpp.js new file mode 100644 index 00000000..a0f12cd8 --- /dev/null +++ b/rheiv_2example_8cpp.js @@ -0,0 +1,14 @@ +var rheiv_2example_8cpp = +[ + [ "dzdx_t", "rheiv_2example_8cpp.html#a8922b52f8f99215122ae7610ab60fe99", null ], + [ "f_z_t", "rheiv_2example_8cpp.html#a99123d75b954055da17288a3f152d5fd", null ], + [ "P_t", "rheiv_2example_8cpp.html#a0770e4f020cae2e9ea332f603930b4b6", null ], + [ "Ps_t", "rheiv_2example_8cpp.html#a2dc8de6a6eec8b198afd92671e718a9d", null ], + [ "rheiv_t", "rheiv_2example_8cpp.html#ace8d39fa64a12d6a40409a110b66ca6d", null ], + [ "theta_t", "rheiv_2example_8cpp.html#acf21897841d7909efa4ec90cdd39b7fb", null ], + [ "xs_t", "rheiv_2example_8cpp.html#aedf522c12d38b1cd713cd24ca392db63", null ], + [ "zs_t", "rheiv_2example_8cpp.html#a601d4688003dea73e427cbd62f557032", null ], + [ "f_z", "rheiv_2example_8cpp.html#a4f53dcb724487fac3fcbe75a01cd0cf4", null ], + [ "main", "rheiv_2example_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4", null ], + [ "n_params", "rheiv_2example_8cpp.html#a509abd0a0bce319690b77d83cee06ea1", null ] +]; \ No newline at end of file diff --git a/rheiv_2example_8cpp__incl.map b/rheiv_2example_8cpp__incl.map new file mode 100644 index 00000000..497e9d0f --- /dev/null +++ b/rheiv_2example_8cpp__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/rheiv_2example_8cpp__incl.md5 b/rheiv_2example_8cpp__incl.md5 new file mode 100644 index 00000000..68aae108 --- /dev/null +++ b/rheiv_2example_8cpp__incl.md5 @@ -0,0 +1 @@ +006589a71d2d3804df3a030f99da0caa \ No newline at end of file diff --git a/rheiv_2example_8cpp__incl.png b/rheiv_2example_8cpp__incl.png new file mode 100644 index 00000000..19d588c3 Binary files /dev/null and b/rheiv_2example_8cpp__incl.png differ diff --git a/rheiv_8h.html b/rheiv_8h.html new file mode 100644 index 00000000..5ff9a901 --- /dev/null +++ b/rheiv_8h.html @@ -0,0 +1,156 @@ + + + + + + + +mrs_lib: include/mrs_lib/rheiv.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    rheiv.h File Reference
    +
    +
    + +

    Defines RHEIV and related stuff for surface fitting to points with known covariances according to [2]. +More...

    +
    #include <Eigen/Dense>
    +#include <iostream>
    +#include <chrono>
    +
    + + Include dependency graph for rheiv.h:
    +
    +
    + +
    + + This graph shows which files directly or indirectly include this file:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Classes

    struct  mrs_lib::eigenvector_exception
     This exception may be thrown when solving the generalized eigenvalue problem with the M and N matrices. More...
     
    class  mrs_lib::RHEIV< n_states, n_params >
     Implementation of the Reduced Heteroscedastic Errors In Variables surface fitting algorithm [2]. More...
     
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    +

    Detailed Description

    +

    Defines RHEIV and related stuff for surface fitting to points with known covariances according to [2].

    +
    Author
    Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +
    +
    + + + + diff --git a/rheiv_8h__dep__incl.map b/rheiv_8h__dep__incl.map new file mode 100644 index 00000000..339990c4 --- /dev/null +++ b/rheiv_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/rheiv_8h__dep__incl.md5 b/rheiv_8h__dep__incl.md5 new file mode 100644 index 00000000..4b26d672 --- /dev/null +++ b/rheiv_8h__dep__incl.md5 @@ -0,0 +1 @@ +ce93a9dfa5d735b586ac12b4194e6304 \ No newline at end of file diff --git a/rheiv_8h__dep__incl.png b/rheiv_8h__dep__incl.png new file mode 100644 index 00000000..cd96baba Binary files /dev/null and b/rheiv_8h__dep__incl.png differ diff --git a/rheiv_8h__incl.map b/rheiv_8h__incl.map new file mode 100644 index 00000000..0bc7e177 --- /dev/null +++ b/rheiv_8h__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/rheiv_8h__incl.md5 b/rheiv_8h__incl.md5 new file mode 100644 index 00000000..f453c58c --- /dev/null +++ b/rheiv_8h__incl.md5 @@ -0,0 +1 @@ +f57ecd40766812a4880b3864b40ba7ec \ No newline at end of file diff --git a/rheiv_8h__incl.png b/rheiv_8h__incl.png new file mode 100644 index 00000000..245b4a10 Binary files /dev/null and b/rheiv_8h__incl.png differ diff --git a/rheiv_8h_source.html b/rheiv_8h_source.html new file mode 100644 index 00000000..7f244473 --- /dev/null +++ b/rheiv_8h_source.html @@ -0,0 +1,574 @@ + + + + + + + +mrs_lib: include/mrs_lib/rheiv.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    rheiv.h
    +
    +
    +Go to the documentation of this file.
    1 // clang: MatousFormat
    +
    7 #ifndef HEIV_H
    +
    8 #define HEIV_H
    +
    9 
    +
    10 #include <Eigen/Dense>
    +
    11 #include <iostream>
    +
    12 #include <chrono>
    +
    13 
    +
    14 namespace mrs_lib
    +
    15 {
    +
    16  /* eigenvector_exception //{ */
    +
    17 
    +
    24  struct eigenvector_exception : public std::exception
    +
    25  {
    +
    31  virtual const char* what() const throw() override
    +
    32  {
    +
    33  return "Could not compute matrix eigenvectors.";
    +
    34  }
    +
    35  };
    +
    36 
    +
    37  //}
    +
    38 
    +
    39  /* class RHEIV //{ */
    +
    60  template <int n_states, int n_params>
    +
    61  class RHEIV
    +
    62  {
    +
    63  static_assert(n_states <= n_params, "Sorry, n_states must be smaller or equal to n_params");
    +
    64  public:
    +
    65  /* RHEIV definitions (typedefs, constants etc) //{ */
    +
    66 
    +
    67  static const int k = n_states;
    +
    68  static const int l = n_params;
    +
    69  static const int lr = l - 1;
    +
    71  using x_t = Eigen::Matrix<double, k, 1>;
    +
    72  using xs_t = Eigen::Matrix<double, k, -1>;
    +
    73  using u_t = Eigen::Matrix<double, l, 1>;
    +
    74  using P_t = Eigen::Matrix<double, k, k>;
    +
    75  using Ps_t = std::vector<P_t>;
    +
    77  using z_t = Eigen::Matrix<double, lr, 1>;
    +
    78  using zs_t = Eigen::Matrix<double, lr, -1>;
    +
    79  using f_z_t = typename std::function<zs_t(const xs_t&)>;
    +
    81  using dzdx_t = Eigen::Matrix<double, lr, k>;
    +
    82  using dzdxs_t = std::vector<dzdx_t>;
    +
    83  using f_dzdx_t = typename std::function<dzdx_t(const xs_t&)>;
    +
    85  using theta_t = Eigen::Matrix<double, l, 1>;
    +
    86  using eta_t = z_t;
    +
    88  private:
    +
    89  using A_t = Eigen::Matrix<double, lr, lr>;
    +
    90  using B_t = A_t;
    +
    91  using Bs_t = std::vector<B_t>;
    +
    92  using M_t = A_t;
    +
    93  using N_t = A_t;
    +
    94  using betas_t = Eigen::Matrix<double, 1, -1>;
    +
    95  using ms_t = std::chrono::milliseconds;
    +
    96 
    +
    97  //}
    +
    98 
    +
    99  public:
    +
    100  /* constructor //{ */
    + +
    108  :
    +
    109  m_initialized(false),
    +
    110  m_f_z(),
    +
    111  m_f_dzdx(),
    +
    112  m_min_dtheta(),
    +
    113  m_max_its(),
    +
    114  m_timeout(),
    +
    115  m_debug_nth_it(),
    +
    116  m_ALS_theta_set(false),
    +
    117  m_last_theta_set(false)
    +
    118  {};
    +
    119 
    +
    135  RHEIV(const f_z_t& f_z, const f_dzdx_t& f_dzdx, const double min_dtheta = 1e-15, const unsigned max_its = 100)
    +
    136  :
    +
    137  m_initialized(true),
    +
    138  m_f_z(f_z),
    +
    139  m_f_dzdx(f_dzdx),
    +
    140  m_min_dtheta(min_dtheta),
    +
    141  m_max_its(max_its),
    +
    142  m_timeout(ms_t::zero()),
    +
    143  m_debug_nth_it(-1),
    +
    144  m_ALS_theta_set(false),
    +
    145  m_last_theta_set(false)
    +
    146  {};
    +
    147 
    +
    165  template <typename time_t>
    +
    166  RHEIV(const f_z_t& f_z, const f_dzdx_t& f_dzdx, const double min_dtheta = 1e-15, const unsigned max_its = 100, const time_t& timeout = std::chrono::duration_cast<time_t>(ms_t::zero()), const int debug_nth_it = -1)
    +
    167  :
    +
    168  m_initialized(true),
    +
    169  m_f_z(f_z),
    +
    170  m_f_dzdx(f_dzdx),
    +
    171  m_min_dtheta(min_dtheta),
    +
    172  m_max_its(max_its),
    +
    173  m_timeout(std::chrono::duration_cast<ms_t>(timeout)),
    +
    174  m_debug_nth_it(debug_nth_it),
    +
    175  m_ALS_theta_set(false),
    +
    176  m_last_theta_set(false)
    +
    177  {}
    +
    178 
    +
    189  RHEIV(const f_z_t& f_z, const dzdx_t& dzdx, const double min_dtheta = 1e-15, const unsigned max_its = 100)
    +
    190  :
    +
    191  m_initialized(true),
    +
    192  m_f_z(f_z),
    +
    193  // define a helper function which just returns the constant dzdx
    +
    194  m_f_dzdx(
    +
    195  {
    +
    196  [dzdx](const x_t&)
    +
    197  {
    +
    198  return dzdx;
    +
    199  }
    +
    200  }),
    +
    201  m_min_dtheta(min_dtheta),
    +
    202  m_max_its(max_its),
    +
    203  m_timeout(ms_t::zero()),
    +
    204  m_debug_nth_it(-1),
    +
    205  m_ALS_theta_set(false),
    +
    206  m_last_theta_set(false)
    +
    207  {};
    +
    208 
    +
    222  template <typename time_t>
    +
    223  RHEIV(const f_z_t& f_z, const dzdx_t& dzdx, const double min_dtheta = 1e-15, const unsigned max_its = 100, const time_t& timeout = std::chrono::duration_cast<time_t>(ms_t::zero()), const int debug_nth_it = -1)
    +
    224  :
    +
    225  m_initialized(true),
    +
    226  m_f_z(f_z),
    +
    227  // define a helper function which just returns the constant dzdx
    +
    228  m_f_dzdx(
    +
    229  {
    +
    230  [dzdx](const x_t&)
    +
    231  {
    +
    232  return dzdx;
    +
    233  }
    +
    234  }),
    +
    235  m_min_dtheta(min_dtheta),
    +
    236  m_max_its(max_its),
    +
    237  m_timeout(std::chrono::duration_cast<ms_t>(timeout)),
    +
    238  m_debug_nth_it(debug_nth_it),
    +
    239  m_ALS_theta_set(false),
    +
    240  m_last_theta_set(false)
    +
    241  {}
    +
    242  //}
    +
    243 
    +
    244  /* fit() method //{ */
    +
    258  theta_t fit(const xs_t& xs, const Ps_t& Ps)
    +
    259  {
    +
    260  assert(m_initialized);
    +
    261  assert((size_t)xs.cols() == Ps.size());
    +
    262  const std::chrono::system_clock::time_point fit_start = std::chrono::system_clock::now();
    +
    263 
    +
    264  const zs_t zs = m_f_z(xs);
    +
    265  const dzdxs_t dzdxs = precalculate_dxdzs(xs, m_f_dzdx);
    +
    266 
    +
    267  // Find initial conditions through ALS
    +
    268  m_ALS_theta = fit_ALS_impl(zs);
    +
    269  m_last_theta = m_ALS_theta;
    +
    270  m_ALS_theta_set = m_last_theta_set = true;
    +
    271  eta_t eta = m_ALS_theta.template block<lr, 1>(0, 0);
    +
    272 
    +
    273  for (unsigned it = 0; it < m_max_its; it++)
    +
    274  {
    +
    275  const std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
    +
    276  const auto fit_dur = now - fit_start;
    +
    277  if (m_timeout > ms_t::zero() && fit_dur > m_timeout)
    +
    278  {
    +
    279  if (m_debug_nth_it > 0)
    +
    280  std::cerr << "[RHEIV]: Ending at iteration " << it << " (max " << m_max_its << ") - timed out." << std::endl;
    +
    281  break;
    +
    282  }
    +
    283  const theta_t prev_theta = m_last_theta;
    +
    284  const auto [M, N, zc] = calc_MN(eta, zs, Ps, dzdxs);
    +
    285  eta = calc_min_eigvec(M, N);
    +
    286  m_last_theta = calc_theta(eta, zc);
    +
    287  const double dtheta = calc_dtheta(prev_theta, m_last_theta);
    +
    288  if (m_debug_nth_it > 0 && it % m_debug_nth_it == 0)
    +
    289  std::cout << "[RHEIV]: iteration " << it << " (max " << m_max_its << "), dtheta: " << dtheta << " (min " << m_min_dtheta << ") " << std::endl;
    +
    290  if (dtheta < m_min_dtheta)
    +
    291  break;
    +
    292  }
    +
    293  return m_last_theta;
    +
    294  }
    +
    295 
    +
    312  template <class T_it1,
    +
    313  class T_it2>
    +
    314  theta_t fit(const T_it1& xs_begin, const T_it1& xs_end, const T_it2& Ps_begin, const T_it2& Ps_end)
    +
    315  {
    +
    316  const xs_t xs = cont_to_eigen(xs_begin, xs_end);
    +
    317  const Ps_t Ps = cont_to_vector(Ps_begin, Ps_end);
    +
    318  const theta_t ret = fit(xs, Ps);
    +
    319  return ret;
    +
    320  }
    +
    321  //}
    +
    322 
    +
    323  /* fit_ALS() method //{ */
    +
    335  theta_t fit_ALS(const xs_t& xs)
    +
    336  {
    +
    337  assert(m_initialized);
    +
    338 
    +
    339  const zs_t zs = m_f_z(xs);
    +
    340  m_ALS_theta = fit_ALS_impl(zs);
    +
    341  m_ALS_theta_set = true;
    +
    342  return m_ALS_theta;
    +
    343  }
    +
    344  //}
    +
    345 
    +
    346  /* get_last_estimate() method //{ */
    + +
    359  {
    +
    360  assert(m_last_theta_set);
    +
    361  return m_last_theta;
    +
    362  }
    +
    363  //}
    +
    364 
    +
    365  /* get_ALS_estimate() method //{ */
    + +
    378  {
    +
    379  assert(m_ALS_theta_set);
    +
    380  return m_ALS_theta;
    +
    381  }
    +
    382  //}
    +
    383 
    +
    384  private:
    +
    385  bool m_initialized;
    +
    386 
    +
    387  private:
    +
    388  f_z_t m_f_z;
    +
    389  f_dzdx_t m_f_dzdx;
    +
    390  double m_min_dtheta;
    +
    391  unsigned m_max_its;
    +
    392  ms_t m_timeout;
    +
    393  int m_debug_nth_it;
    +
    394 
    +
    395  private:
    +
    396  bool m_ALS_theta_set;
    +
    397  theta_t m_ALS_theta;
    +
    398  bool m_last_theta_set;
    +
    399  theta_t m_last_theta;
    +
    400 
    +
    401  private:
    +
    402  /* calc_MN() method //{ */
    +
    403  std::tuple<M_t, N_t, z_t> calc_MN(const eta_t& eta, const zs_t& zs, const Ps_t& Ps, const dzdxs_t& dzdxs) const
    +
    404  {
    +
    405  const int n = zs.cols();
    +
    406 
    +
    407  const Bs_t Bs = calc_Bs(Ps, dzdxs);
    +
    408  const betas_t betas = calc_betas(eta, Bs);
    +
    409  const auto [zrs, zc] = reduce_zs(zs, betas);
    +
    410 
    +
    411  M_t M = M_t::Zero();
    +
    412  N_t N = N_t::Zero();
    +
    413  for (int it = 0; it < n; it++)
    +
    414  {
    +
    415  const double beta = betas(it);
    +
    416  const z_t& zr = zrs.col(it);
    +
    417  const B_t& B = Bs.at(it);
    +
    418  const A_t A = calc_A(zr);
    +
    419  M += A*beta;
    +
    420  N += (eta.transpose()*A*eta)*B*(beta*beta);
    +
    421  }
    +
    422  return {M, N, zc};
    +
    423  }
    +
    424  //}
    +
    425 
    +
    426  /* calc_Bs() method //{ */
    +
    427  Bs_t calc_Bs(const Ps_t& Ps, const dzdxs_t& dzdxs) const
    +
    428  {
    +
    429  const int n = Ps.size();
    +
    430  Bs_t Bs;
    +
    431  Bs.reserve(n);
    +
    432  for (int it = 0; it < n; it++)
    +
    433  {
    +
    434  const P_t& P = Ps.at(it);
    +
    435  const dzdx_t& dzdx = dzdxs.at(it);
    +
    436  const B_t B = dzdx*P*dzdx.transpose();
    +
    437  Bs.push_back(B);
    +
    438  }
    +
    439  return Bs;
    +
    440  }
    +
    441  //}
    +
    442 
    +
    443  /* calc_betas() method //{ */
    +
    444  betas_t calc_betas(const eta_t& eta, const Bs_t& Bs) const
    +
    445  {
    +
    446  const int n = Bs.size();
    +
    447  betas_t betas(n);
    +
    448  for (int it = 0; it < n; it++)
    +
    449  {
    +
    450  const B_t& B = Bs.at(it);
    +
    451  const double beta = 1.0/(eta.transpose()*B*eta);
    +
    452  betas(it) = beta;
    +
    453  }
    +
    454  return betas;
    +
    455  }
    +
    456  //}
    +
    457 
    +
    458  /* calc_A() method //{ */
    +
    459  A_t calc_A(const z_t& z) const
    +
    460  {
    +
    461  return z*z.transpose();
    +
    462  }
    +
    463  //}
    +
    464 
    +
    465  /* calc_dtheta() method //{ */
    +
    466  double calc_dtheta(const theta_t& th1, const theta_t& th2) const
    +
    467  {
    +
    468  return std::min( (th1 - th2).norm(), (th1 + th2).norm() );
    +
    469  }
    +
    470  //}
    +
    471 
    +
    472  /* calc_theta() method //{ */
    +
    473  theta_t calc_theta(const eta_t& eta, const z_t& zc) const
    +
    474  {
    +
    475  const double alpha = -zc.transpose()*eta;
    +
    476  const theta_t theta( (theta_t() << eta, alpha).finished().normalized() );
    +
    477  return theta;
    +
    478  }
    +
    479  //}
    +
    480 
    +
    481  /* calc_min_eigvec() method //{ */
    +
    482  eta_t calc_min_eigvec(const M_t& M, const N_t& N) const
    +
    483  {
    +
    484  const Eigen::GeneralizedSelfAdjointEigenSolver<M_t> es(M, N);
    +
    485  if (es.info() != Eigen::Success)
    +
    486  throw eigenvector_exception();
    +
    487  // eigenvalues are sorted in increasing order when using the GeneralizedSelfAdjointEigenSolver as per Eigen documentation
    +
    488  const eta_t evec = es.eigenvectors().col(0).normalized(); // altough the Eigen documentation states that this vector should already be normalized, it isn't!!
    +
    489  return evec;
    +
    490  }
    +
    491  //}
    +
    492 
    +
    493  /* calc_min_eigvec() method //{ */
    +
    494  eta_t calc_min_eigvec(const M_t& M) const
    +
    495  {
    +
    496  const Eigen::SelfAdjointEigenSolver<M_t> es(M);
    +
    497  if (es.info() != Eigen::Success)
    +
    498  throw eigenvector_exception();
    +
    499  // eigenvalues are sorted in increasing order when using the SelfAdjointEigenSolver as per Eigen documentation
    +
    500  const eta_t evec = es.eigenvectors().col(0).normalized(); // altough the Eigen documentation states that this vector should already be normalized, it isn't!!
    +
    501  return evec;
    +
    502  }
    +
    503  //}
    +
    504 
    +
    505  /* precalculate_dxdzs() method //{ */
    +
    506  dzdxs_t precalculate_dxdzs(const xs_t& xs, const f_dzdx_t& f_dzdx)
    +
    507  {
    +
    508  const int n = xs.cols();
    +
    509  dzdxs_t ret;
    +
    510  ret.reserve(n);
    +
    511  for (int it = 0; it < n; it++)
    +
    512  {
    +
    513  const x_t& x = xs.col(it);
    +
    514  ret.push_back(f_dzdx(x));
    +
    515  }
    +
    516  return ret;
    +
    517  }
    +
    518  //}
    +
    519 
    +
    520  /* calc_centroid() method //{ */
    +
    521  z_t calc_centroid(const zs_t& zs, const betas_t& betas) const
    +
    522  {
    +
    523  const z_t zc = (zs.array().rowwise() * betas.array()).rowwise().sum()/betas.sum();
    +
    524  return zc;
    +
    525  }
    +
    526  //}
    +
    527 
    +
    528  /* reduce_zs() method //{ */
    +
    529  std::pair<zs_t, z_t> reduce_zs(const zs_t& zs, const betas_t& betas) const
    +
    530  {
    +
    531  const z_t zc = calc_centroid(zs, betas);
    +
    532  const zs_t zrs = zs.colwise() - zc;
    +
    533  return {zrs, zc};
    +
    534  }
    +
    535  //}
    +
    536 
    +
    537  /* cont_to_eigen() method //{ */
    +
    538  template <typename T_it>
    +
    539  xs_t cont_to_eigen(const T_it& begin, const T_it& end)
    +
    540  {
    +
    541  const auto n = end-begin;
    +
    542  xs_t ret(n_states, n);
    +
    543  size_t i = 0;
    +
    544  for (T_it it = begin; it != end; it++)
    +
    545  {
    +
    546  ret.template block<n_states, 1>(0, i) = *it;
    +
    547  i++;
    +
    548  }
    +
    549  return ret;
    +
    550  }
    +
    551  //}
    +
    552 
    +
    553  /* cont_to_vector() method //{ */
    +
    554  template <typename T_it>
    +
    555  Ps_t cont_to_vector(const T_it& begin, const T_it& end)
    +
    556  {
    +
    557  const auto n = end-begin;
    +
    558  Ps_t ret(n);
    +
    559  size_t i = 0;
    +
    560  for (T_it it = begin; it != end; it++)
    +
    561  {
    +
    562  ret.at(i) = *it;
    +
    563  i++;
    +
    564  }
    +
    565  return ret;
    +
    566  }
    +
    567  //}
    +
    568 
    +
    569 
    +
    570 // --------------------------------------------------------------
    +
    571 // | Algebraic Least Squares-related methods |
    +
    572 // --------------------------------------------------------------
    +
    573 
    +
    574  z_t calc_centroid(const zs_t& zs) const
    +
    575  {
    +
    576  return zs.rowwise().mean();
    +
    577  }
    +
    578 
    +
    579  std::pair<zs_t, z_t> reduce_zs(const zs_t& zs) const
    +
    580  {
    +
    581  const z_t zc = calc_centroid(zs);
    +
    582  const zs_t zrs = zs.colwise() - zc;
    +
    583  return {zrs, zc};
    +
    584  }
    +
    585 
    +
    586  theta_t fit_ALS_impl(const zs_t& zs) const
    +
    587  {
    +
    588  const auto [zrs, zc] = reduce_zs(zs);
    +
    589  M_t M = M_t::Zero();
    +
    590  for (int it = 0; it < zrs.cols(); it++)
    +
    591  {
    +
    592  const z_t& z = zrs.col(it);
    +
    593  const A_t A = calc_A(z);
    +
    594  M += A;
    +
    595  }
    +
    596  const eta_t eta = calc_min_eigvec(M);
    +
    597  const theta_t theta = calc_theta(eta, zc);
    +
    598  return theta;
    +
    599  }
    +
    600 
    +
    601  };
    +
    602  //}
    +
    603 
    +
    604 }
    +
    605 
    +
    606 #endif // HEIV_H
    +
    +
    +
    std::vector< dzdx_t > dzdxs_t
    Contained type for an array of the jacobian matrices.
    Definition: rheiv.h:82
    +
    typename std::function< dzdx_t(const xs_t &)> f_dzdx_t
    Function signature of the jacobian .
    Definition: rheiv.h:83
    +
    RHEIV(const f_z_t &f_z, const dzdx_t &dzdx, const double min_dtheta=1e-15, const unsigned max_its=100)
    A convenience constructor constructor.
    Definition: rheiv.h:189
    +
    Eigen::Matrix< double, l, 1 > theta_t
    Parameter vector type .
    Definition: rheiv.h:85
    +
    RHEIV(const f_z_t &f_z, const dzdx_t &dzdx, const double min_dtheta=1e-15, const unsigned max_its=100, const time_t &timeout=std::chrono::duration_cast< time_t >(ms_t::zero()), const int debug_nth_it=-1)
    A convenience constructor constructor.
    Definition: rheiv.h:223
    +
    static const int lr
    Length of the reduced parameter vector .
    Definition: rheiv.h:69
    +
    theta_t get_last_estimate() const
    Returns the last valid estimate of .
    Definition: rheiv.h:358
    +
    theta_t fit_ALS(const xs_t &xs)
    Fit the defined model to the provided data using Algebraic Least Squares (not RHEIV).
    Definition: rheiv.h:335
    +
    Eigen::Matrix< double, l, 1 > u_t
    Transformed input vector type .
    Definition: rheiv.h:73
    +
    Implementation of the Reduced Heteroscedastic Errors In Variables surface fitting algorithm .
    Definition: rheiv.h:61
    +
    RHEIV()
    Convenience default constructor.
    Definition: rheiv.h:107
    +
    theta_t fit(const xs_t &xs, const Ps_t &Ps)
    Fit the defined model to the provided data.
    Definition: rheiv.h:258
    +
    theta_t fit(const T_it1 &xs_begin, const T_it1 &xs_end, const T_it2 &Ps_begin, const T_it2 &Ps_end)
    Fit the defined model to the provided data.
    Definition: rheiv.h:314
    +
    static const int l
    Length of the parameter vector .
    Definition: rheiv.h:68
    +
    RHEIV(const f_z_t &f_z, const f_dzdx_t &f_dzdx, const double min_dtheta=1e-15, const unsigned max_its=100)
    The main constructor.
    Definition: rheiv.h:135
    +
    theta_t get_ALS_estimate() const
    Returns the Algebraic Least Squares estimate of .
    Definition: rheiv.h:377
    +
    static const int k
    Length of the state vector x.
    Definition: rheiv.h:67
    +
    Eigen::Matrix< double, k, 1 > x_t
    Input vector type .
    Definition: rheiv.h:71
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    RHEIV(const f_z_t &f_z, const f_dzdx_t &f_dzdx, const double min_dtheta=1e-15, const unsigned max_its=100, const time_t &timeout=std::chrono::duration_cast< time_t >(ms_t::zero()), const int debug_nth_it=-1)
    The main constructor.
    Definition: rheiv.h:166
    +
    Eigen::Matrix< double, lr, 1 > z_t
    Type of a reduced transformed input vector .
    Definition: rheiv.h:77
    +
    typename std::function< zs_t(const xs_t &)> f_z_t
    Function signature of the mapping function.
    Definition: rheiv.h:79
    +
    z_t eta_t
    Reduced parameter vector type .
    Definition: rheiv.h:86
    +
    std::vector< P_t > Ps_t
    Container type for covariances P of the input data array.
    Definition: rheiv.h:75
    +
    Eigen::Matrix< double, k, -1 > xs_t
    Container type for the input data array.
    Definition: rheiv.h:72
    +
    This exception may be thrown when solving the generalized eigenvalue problem with the M and N matrice...
    Definition: rheiv.h:24
    +
    Eigen::Matrix< double, lr, -1 > zs_t
    Container type for an array of the reduced transformed input vectors z.
    Definition: rheiv.h:78
    +
    Eigen::Matrix< double, k, k > P_t
    Covariance type of the input vector .
    Definition: rheiv.h:74
    +
    Eigen::Matrix< double, lr, k > dzdx_t
    Type of the jacobian matrix , evaluated at .
    Definition: rheiv.h:81
    +
    virtual const char * what() const override
    Returns the error message, describing what caused the exception.
    Definition: rheiv.h:31
    + + + + diff --git a/ros__param__provider_8h_source.html b/ros__param__provider_8h_source.html new file mode 100644 index 00000000..5ce63a73 --- /dev/null +++ b/ros__param__provider_8h_source.html @@ -0,0 +1,119 @@ + + + + + + + +mrs_lib: include/mrs_lib/ros_param_provider.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ros_param_provider.h
    +
    +
    +
    1 #include <string>
    +
    2 
    +
    3 namespace mrs_lib
    +
    4 {
    + +
    6  {
    +
    7  public:
    +
    8 
    +
    9  template <typename T>
    +
    10  bool getParam(const std::string& param_name, T& value_out);
    +
    11 
    +
    12  ParamProvider() = delete;
    +
    13  };
    +
    14 }
    +
    +
    +
    Definition: ros_param_provider.h:5
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    Definition: param_provider.h:13
    + + + + diff --git a/safety__zone_8h_source.html b/safety__zone_8h_source.html new file mode 100644 index 00000000..54b101ad --- /dev/null +++ b/safety__zone_8h_source.html @@ -0,0 +1,166 @@ + + + + + + + +mrs_lib: include/mrs_lib/safety_zone/safety_zone.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    safety_zone.h
    +
    +
    +
    1 // clang: TomasFormat
    +
    2 #ifndef MRS_LIB_SAFETYZONE_H
    +
    3 #define MRS_LIB_SAFETYZONE_H
    +
    4 
    +
    5 #include <mrs_lib/safety_zone/point_obstacle.h>
    +
    6 #include <mrs_lib/safety_zone/polygon.h>
    +
    7 #include <visualization_msgs/Marker.h>
    +
    8 #include <eigen3/Eigen/Eigen>
    +
    9 #include <vector>
    +
    10 
    +
    11 namespace mrs_lib
    +
    12 {
    +
    13 class SafetyZone {
    +
    14 public:
    +
    15  SafetyZone(Polygon outerBorder, std::vector<Polygon> innerObstacles, std::vector<PointObstacle> pointObstacles);
    +
    16  ~SafetyZone();
    +
    17 
    +
    18  SafetyZone(const Eigen::MatrixXd& outerBorderMatrix, const std::vector<Eigen::MatrixXd>& innerObstaclesMatrixes,
    +
    19  const std::vector<Eigen::MatrixXd>& pointObstaclesMatrixes);
    +
    20 
    +
    21  bool isPointValid3d(const double px, const double py, const double pz);
    +
    22  bool isPointValid2d(const double px, const double py);
    +
    23  bool isPathValid3d(const double p1x, const double p1y, const double p1z, const double p2x, const double p2y, const double p2z);
    +
    24  bool isPathValid2d(const double p1x, const double p1y, const double p2x, const double p2y);
    +
    25  Polygon getBorder();
    +
    26  std::vector<Polygon> getObstacles();
    +
    27  std::vector<PointObstacle> getPointObstacles();
    +
    28 
    +
    29 private:
    +
    30  Polygon* outerBorder;
    +
    31  std::vector<Polygon> innerObstacles;
    +
    32  std::vector<PointObstacle> pointObstacles;
    +
    33 
    +
    34 public:
    +
    35  struct BorderError : public std::exception
    +
    36  {
    +
    37  const char* what() const throw() {
    +
    38  return "SafeZone: Wrong configuration for the border";
    +
    39  }
    +
    40  };
    +
    41 
    +
    42  struct PolygonObstacleError : public std::exception
    +
    43  {
    +
    44  const char* what() const throw() {
    +
    45  return "SafeZone: Wrong configuration for one of the polygon obstacles";
    +
    46  }
    +
    47  };
    +
    48 
    +
    49  struct PointObstacleError : public std::exception
    +
    50  {
    +
    51  const char* what() const throw() {
    +
    52  return "SafeZone: Wrong configuration for one of the point obstacles";
    +
    53  }
    +
    54  };
    +
    55 };
    +
    56 } // namespace mrs_lib
    +
    57 
    +
    58 #endif // MRS_LIB_SAFETYZONE_H
    +
    +
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    Definition: safety_zone.h:35
    +
    Definition: polygon.h:13
    +
    Definition: safety_zone.h:13
    +
    Definition: safety_zone.h:42
    +
    Definition: safety_zone.h:49
    + + + + diff --git a/scope__timer_8h.html b/scope__timer_8h.html new file mode 100644 index 00000000..acf23c57 --- /dev/null +++ b/scope__timer_8h.html @@ -0,0 +1,153 @@ + + + + + + + +mrs_lib: include/mrs_lib/scope_timer.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    scope_timer.h File Reference
    +
    +
    + +

    Simple timer which times a duration of its scope, with additional optional checkpoints. +More...

    +
    #include <ros/ros.h>
    +#include <chrono>
    +#include <iostream>
    +#include <fstream>
    +#include <iomanip>
    +#include <mutex>
    +
    + + Include dependency graph for scope_timer.h:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + + + + + + +

    +Classes

    class  mrs_lib::ScopeTimerLogger
     Simple file logger of scope timer and its checkpoints. More...
     
    class  mrs_lib::ScopeTimer
     Simple timer which will time a duration of a scope and checkpoints inside the scope in ros time and std::chrono time. More...
     
    struct  mrs_lib::ScopeTimer::time_point
     
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    +

    Detailed Description

    +

    Simple timer which times a duration of its scope, with additional optional checkpoints.

    +
    Author
    Daniel Hert - hertd.nosp@m.ani@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +
    +
    + + + + diff --git a/scope__timer_8h__incl.map b/scope__timer_8h__incl.map new file mode 100644 index 00000000..b83fc858 --- /dev/null +++ b/scope__timer_8h__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/scope__timer_8h__incl.md5 b/scope__timer_8h__incl.md5 new file mode 100644 index 00000000..a6f54c10 --- /dev/null +++ b/scope__timer_8h__incl.md5 @@ -0,0 +1 @@ +419d8e6fee60c2f74e5e0ced5d9a8fc2 \ No newline at end of file diff --git a/scope__timer_8h__incl.png b/scope__timer_8h__incl.png new file mode 100644 index 00000000..17acc5ff Binary files /dev/null and b/scope__timer_8h__incl.png differ diff --git a/scope__timer_8h_source.html b/scope__timer_8h_source.html new file mode 100644 index 00000000..73b33efa --- /dev/null +++ b/scope__timer_8h_source.html @@ -0,0 +1,229 @@ + + + + + + + +mrs_lib: include/mrs_lib/scope_timer.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    scope_timer.h
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 #ifndef SCOPE_TIMER_H
    +
    6 #define SCOPE_TIMER_H
    +
    7 
    +
    8 #include <ros/ros.h>
    +
    9 #include <chrono>
    +
    10 #include <iostream>
    +
    11 #include <fstream>
    +
    12 #include <iomanip>
    +
    13 #include <mutex>
    +
    14 /* #include <ctime> */
    +
    15 
    +
    16 namespace mrs_lib
    +
    17 {
    +
    18 
    +
    19 /*//{ ScopeTimerLogger class */
    +
    20 
    + +
    25 
    +
    26 public:
    +
    30  ScopeTimerLogger(const std::string& logfile, const bool enable_logging = true, const int log_precision = 10);
    +
    31 
    + +
    36 
    +
    40  bool shouldLog() {
    +
    41  return _should_log_;
    +
    42  }
    +
    43 
    +
    48  bool loggingEnabled() {
    +
    49  return _logging_enabled_;
    +
    50  }
    +
    51 
    +
    55  std::string getLogFilepath() {
    +
    56  return _log_filepath_;
    +
    57  }
    +
    58 
    +
    59  using chrono_tp = std::chrono::time_point<std::chrono::steady_clock>;
    +
    60 
    +
    64  void log(const std::string& scope, const chrono_tp& time_start, const chrono_tp& time_end);
    +
    65 
    +
    69  void log(const std::string& scope, const std::string& label_from, const std::string& label_to, const chrono_tp& time_start, const chrono_tp& time_end);
    +
    70 
    +
    71 private:
    +
    72  bool _logging_enabled_ = false;
    +
    73  bool _should_log_ = false;
    +
    74  std::string _log_filepath_;
    +
    75  std::ofstream _logstream_;
    +
    76  std::mutex _mutex_logstream_;
    +
    77 };
    +
    78 
    +
    79 /*//}*/
    +
    80 
    +
    84 class ScopeTimer {
    +
    85 public:
    +
    86  /* time_point() helper struct //{ */
    +
    87  struct time_point
    +
    88  {
    +
    89  using chrono_tp = std::chrono::time_point<std::chrono::steady_clock>;
    +
    90 
    +
    91  public:
    +
    92  time_point(const std::string& label) : ros_time(ros::Time::now()), chrono_time(std::chrono::steady_clock::now()), label(label) {
    +
    93  }
    +
    94 
    +
    95  time_point(const std::string& label, const ros::Time& ros_time) : ros_time(ros_time), label(label) {
    +
    96  // helper types to make the code slightly more readable
    +
    97  using float_seconds = std::chrono::duration<float>;
    +
    98  using chrono_duration = std::chrono::steady_clock::duration;
    +
    99  // prepare ros and chrono current times to minimize their difference
    +
    100  const auto ros_now = ros::Time::now();
    +
    101  const auto chrono_now = std::chrono::steady_clock::now();
    +
    102  // calculate how old is ros_time
    +
    103  const auto ros_dt = ros_now - ros_time;
    +
    104  // cast ros_dt to chrono type
    +
    105  const auto chrono_dt = std::chrono::duration_cast<chrono_duration>(float_seconds(ros_dt.toSec()));
    +
    106  // calculate ros_time in chrono time and set it to chrono_time
    +
    107  chrono_time = chrono_now - chrono_dt;
    +
    108  }
    +
    109 
    +
    110  ros::Time ros_time;
    +
    111  chrono_tp chrono_time;
    +
    112  std::string label;
    +
    113  };
    +
    114  //}
    +
    115 
    +
    116 public:
    +
    120  ScopeTimer(const std::string& label, const ros::Duration& throttle_period = ros::Duration(0), const bool enable = true,
    +
    121  const std::shared_ptr<ScopeTimerLogger> scope_timer_logger = nullptr);
    +
    122 
    +
    126  ScopeTimer(const std::string& label, const time_point& tp0, const ros::Duration& throttle_period = ros::Duration(0), const bool enable = true,
    +
    127  const std::shared_ptr<ScopeTimerLogger> scope_timer_logger = nullptr);
    +
    128 
    +
    132  ScopeTimer(const std::string& label, const std::shared_ptr<ScopeTimerLogger> scope_timer_logger, const bool enable = true);
    +
    133 
    +
    137  void checkpoint(const std::string& label);
    +
    138 
    +
    144  float getLifetime();
    +
    145 
    +
    149  ~ScopeTimer();
    +
    150 
    +
    151 private:
    +
    152  std::string _timer_label_;
    +
    153  bool _enable_print_or_log;
    +
    154  ros::Duration _throttle_period_;
    +
    155  std::vector<time_point> checkpoints;
    +
    156 
    +
    157  std::shared_ptr<ScopeTimerLogger> _logger_ = nullptr;
    +
    158 
    +
    159  static std::unordered_map<std::string, ros::Time> last_print_times;
    +
    160 };
    +
    161 
    +
    162 } // namespace mrs_lib
    +
    163 
    +
    164 #endif
    +
    +
    +
    ScopeTimerLogger(const std::string &logfile, const bool enable_logging=true, const int log_precision=10)
    The basic constructor with a user-defined path to the logger file, enable flag and float-logging prec...
    Definition: scope_timer.cpp:9
    +
    float getLifetime()
    Getter for scope timer lifetime.
    Definition: scope_timer.cpp:126
    +
    std::string getLogFilepath()
    Returns the path to the log.
    Definition: scope_timer.h:55
    +
    Simple timer which will time a duration of a scope and checkpoints inside the scope in ros time and s...
    Definition: scope_timer.h:84
    +
    ~ScopeTimer()
    The basic destructor which prints out or logs the scope times, if enabled.
    Definition: scope_timer.cpp:135
    +
    Simple file logger of scope timer and its checkpoints.
    Definition: scope_timer.h:24
    +
    ScopeTimer(const std::string &label, const ros::Duration &throttle_period=ros::Duration(0), const bool enable=true, const std::shared_ptr< ScopeTimerLogger > scope_timer_logger=nullptr)
    The basic constructor with a user-defined label of the timer, throttled period and file logger.
    Definition: scope_timer.cpp:84
    +
    void checkpoint(const std::string &label)
    Checkpoint, prints the time passed until the point this function is called.
    Definition: scope_timer.cpp:115
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    void log(const std::string &scope, const chrono_tp &time_start, const chrono_tp &time_end)
    Writes the time data of the given scope and empty checkpoints into the logger stream.
    Definition: scope_timer.cpp:55
    +
    bool shouldLog()
    Returns true if a non-empty path to a logger file was given by the user.
    Definition: scope_timer.h:40
    +
    ~ScopeTimerLogger()
    The basic destructor which closes the logging file.
    Definition: scope_timer.cpp:46
    +
    bool loggingEnabled()
    Returns true if the enable flag was set to true, a non-empty path to a logger file was given by the u...
    Definition: scope_timer.h:48
    +
    Definition: scope_timer.h:87
    + + + + diff --git a/search/all_0.html b/search/all_0.html new file mode 100644 index 00000000..26dd244f --- /dev/null +++ b/search/all_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 00000000..4d631249 --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['a_0',['A',['../classmrs__lib_1_1LKF.html#a0926533d35a53410b4302fda99a45321',1,'mrs_lib::LKF::A()'],['../classmrs__lib_1_1geometry_1_1Triangle.html#abd847d705725f4dffa10e6e00ba5f24c',1,'mrs_lib::geometry::Triangle::a()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a5370711517c0449167cfd0efaee8e821',1,'mrs_lib::geometry::Rectangle::a()'],['../classmrs__lib_1_1geometry_1_1Ellipse.html#aee622887a91b50f8fa8bbd476614006e',1,'mrs_lib::geometry::Ellipse::a()']]], + ['a_5ft_1',['A_t',['../classmrs__lib_1_1DKF.html#a1d615e5b5aef4c5a00de9b42eef43c1b',1,'mrs_lib::DKF::A_t()'],['../classmrs__lib_1_1JLKF.html#a72ceb375903022d0dfc396b6f1ead479',1,'mrs_lib::JLKF::A_t()'],['../classmrs__lib_1_1LKF.html#aa5c83985c5c7685ebe2af0e445fbc0ad',1,'mrs_lib::LKF::A_t()'],['../classmrs__lib_1_1NCLKF.html#aa7b38a32abe6a319930d6392178d5e3e',1,'mrs_lib::NCLKF::A_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a6d62f542c4ee39019c9466e82ed0cd51',1,'mrs_lib::NCLKF_partial::A_t()']]], + ['add_2',['add',['../classmrs__lib_1_1MedianFilter.html#aaf3d8e3bab539001962f2b29dabd314d',1,'mrs_lib::MedianFilter']]], + ['addcheck_3',['addCheck',['../classmrs__lib_1_1MedianFilter.html#a234342f8780bce6019f5183f798fe348',1,'mrs_lib::MedianFilter']]], + ['addcone_4',['addCone',['../classmrs__lib_1_1BatchVisualizer.html#a937c831f9caac50bc84f671c3260f1a7',1,'mrs_lib::BatchVisualizer']]], + ['addcuboid_5',['addCuboid',['../classmrs__lib_1_1BatchVisualizer.html#ab5aba26d50dbe7fe22cd4c0549a99051',1,'mrs_lib::BatchVisualizer']]], + ['addcylinder_6',['addCylinder',['../classmrs__lib_1_1BatchVisualizer.html#abd2f9394a4cb63da0478ad1621ed7e79',1,'mrs_lib::BatchVisualizer']]], + ['addellipse_7',['addEllipse',['../classmrs__lib_1_1BatchVisualizer.html#ac03c515ed44761d88f43a2af446c26b7',1,'mrs_lib::BatchVisualizer']]], + ['addinputchange_8',['addInputChange',['../classmrs__lib_1_1Repredictor.html#a4db1b1896eb17c54bc906d0e9da1eee9',1,'mrs_lib::Repredictor::addInputChange(const u_t &u, const ros::Time &stamp, const ModelPtr &model=nullptr)'],['../classmrs__lib_1_1Repredictor.html#a2fa01fc3dbe7a557b80b6104466c8b7e',1,'mrs_lib::Repredictor::addInputChange(const u_t &u, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)']]], + ['addinputchangewithnoise_9',['addInputChangeWithNoise',['../classmrs__lib_1_1Repredictor.html#ac85faca4dca9e6f785078eac6819f10f',1,'mrs_lib::Repredictor::addInputChangeWithNoise(const u_t &u, const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)'],['../classmrs__lib_1_1Repredictor.html#a203a2fc80f2ab2d0caeb2b09e2c410a3',1,'mrs_lib::Repredictor::addInputChangeWithNoise(const u_t &u, const Q_t &Q, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)']]], + ['addmeasurement_10',['addMeasurement',['../classmrs__lib_1_1Repredictor.html#a5e1db8bec67cabd386b8924c5312f648',1,'mrs_lib::Repredictor::addMeasurement(const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)'],['../classmrs__lib_1_1Repredictor.html#a0aed856752f139230db775620b4b97da',1,'mrs_lib::Repredictor::addMeasurement(const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)']]], + ['addnullline_11',['addNullLine',['../classmrs__lib_1_1BatchVisualizer.html#a7f4d6d1ae967d6a5c15351969d9e4592',1,'mrs_lib::BatchVisualizer']]], + ['addnullpoint_12',['addNullPoint',['../classmrs__lib_1_1BatchVisualizer.html#a7556fd856cd4be7d0bdea9a4c0c6e1fc',1,'mrs_lib::BatchVisualizer']]], + ['addnulltriangle_13',['addNullTriangle',['../classmrs__lib_1_1BatchVisualizer.html#a6a844cdffd1474570988e8d1a87126cb',1,'mrs_lib::BatchVisualizer']]], + ['addpoint_14',['addPoint',['../classmrs__lib_1_1BatchVisualizer.html#ac9c76c18ef837dc7b87cf20f5e2511b9',1,'mrs_lib::BatchVisualizer']]], + ['addprocessnoisechange_15',['addProcessNoiseChange',['../classmrs__lib_1_1Repredictor.html#a1a409036d5c94ee2115b2e31465fd2c7',1,'mrs_lib::Repredictor::addProcessNoiseChange(const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)'],['../classmrs__lib_1_1Repredictor.html#ad07b1f478d926355157c46d93cde1b4b',1,'mrs_lib::Repredictor::addProcessNoiseChange(const Q_t &Q, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)']]], + ['addray_16',['addRay',['../classmrs__lib_1_1BatchVisualizer.html#ae3c2f932f592a0e61da8e51643cc686a',1,'mrs_lib::BatchVisualizer']]], + ['addrectangle_17',['addRectangle',['../classmrs__lib_1_1BatchVisualizer.html#a5a68c474ce18a4fccbc8f14066267d73',1,'mrs_lib::BatchVisualizer']]], + ['addtrajectory_18',['addTrajectory',['../classmrs__lib_1_1BatchVisualizer.html#a5dad7ddef02d959da350385544b98063',1,'mrs_lib::BatchVisualizer']]], + ['addtriangle_19',['addTriangle',['../classmrs__lib_1_1BatchVisualizer.html#ae2cf4d2a0578711a060f7f398179a677',1,'mrs_lib::BatchVisualizer']]], + ['addyamlfile_20',['addYamlFile',['../classmrs__lib_1_1ParamLoader.html#a7e0a9d3c3ca4e85692999f99b51e53e7',1,'mrs_lib::ParamLoader']]], + ['addyamlfilefromparam_21',['addYamlFileFromParam',['../classmrs__lib_1_1ParamLoader.html#a3ae6c294bc7bcf0fa17557ee36e04b31',1,'mrs_lib::ParamLoader']]], + ['angleaxisbetween_22',['angleaxisBetween',['../misc_8h.html#a3c40238e3620a619ddadf518321ccaae',1,'mrs_lib::geometry']]], + ['anglebetween_23',['angleBetween',['../misc_8h.html#a926f171b122a39c63ccb860666a7e254',1,'mrs_lib::geometry::angleBetween(const vec2_t &a, const vec2_t &b)'],['../misc_8h.html#a277dbfe7688635c28c5a1b34f32ed81e',1,'mrs_lib::geometry::angleBetween(const vec3_t &a, const vec3_t &b)']]], + ['atomicscopeflag_24',['AtomicScopeFlag',['../classmrs__lib_1_1AtomicScopeFlag.html',1,'mrs_lib::AtomicScopeFlag'],['../classmrs__lib_1_1AtomicScopeFlag.html#a168dc1d0a0ae38b254d89a84afdc4cab',1,'mrs_lib::AtomicScopeFlag::AtomicScopeFlag()']]], + ['attitude_5fconverter_2eh_25',['attitude_converter.h',['../attitude__converter_8h.html',1,'']]], + ['attitudeconverter_26',['AttitudeConverter',['../classmrs__lib_1_1AttitudeConverter.html',1,'mrs_lib::AttitudeConverter'],['../classmrs__lib_1_1AttitudeConverter.html#a1a98367c2a004a298a2026d883cfc0eb',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const double &roll, const double &pitch, const double &yaw, const RPY_convention_t &format=RPY_EXTRINSIC)'],['../classmrs__lib_1_1AttitudeConverter.html#a134453cd539536eea199763467690483',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const tf::Quaternion quaternion)'],['../classmrs__lib_1_1AttitudeConverter.html#a9f00a180ebe802b8b7e30e08cc688f26',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const geometry_msgs::Quaternion quaternion)'],['../classmrs__lib_1_1AttitudeConverter.html#a28987247a78e426e03eb37d51c7b6d82',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const mrs_lib::EulerAttitude &euler_attitude)'],['../classmrs__lib_1_1AttitudeConverter.html#a15e411e1c06cd3af16d10f660656718b',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const Eigen::Quaterniond quaternion)'],['../classmrs__lib_1_1AttitudeConverter.html#ad50e60f2d412b2253221c00fbbff2ead',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const Eigen::Matrix3d matrix)'],['../classmrs__lib_1_1AttitudeConverter.html#a0046963fb6f70e1ecc1d50c9778fec44',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const Eigen::AngleAxis< T > angle_axis)'],['../classmrs__lib_1_1AttitudeConverter.html#a7d3224c3f9b32c2a9c65f63f5a2644ea',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const tf2::Quaternion quaternion)'],['../classmrs__lib_1_1AttitudeConverter.html#a24d9d274eb16af01c3630ecb32065652',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const tf2::Matrix3x3 matrix)']]], + ['autostart_27',['autostart',['../structmrs__lib_1_1SubscribeHandlerOptions.html#aab7865b63b3dd44b61dba06c54f981c8',1,'mrs_lib::SubscribeHandlerOptions']]] +]; diff --git a/search/all_1.html b/search/all_1.html new file mode 100644 index 00000000..8eb215b9 --- /dev/null +++ b/search/all_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 00000000..c8af0c4d --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['b_28',['B',['../classmrs__lib_1_1LKF.html#a2d88249f1992d772631026387a45445a',1,'mrs_lib::LKF::B()'],['../classmrs__lib_1_1geometry_1_1Triangle.html#a6ac4e01a62fbb343d177bf47b3d38219',1,'mrs_lib::geometry::Triangle::b()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a82cb0598bd97e772d5fdbeeb5fde3657',1,'mrs_lib::geometry::Rectangle::b()'],['../classmrs__lib_1_1geometry_1_1Ellipse.html#ab42e4c580aeda44204c5854e1ccd4513',1,'mrs_lib::geometry::Ellipse::b()']]], + ['b_5ft_29',['B_t',['../classmrs__lib_1_1DKF.html#a5de2bdb0aa87e268361e19206849bb22',1,'mrs_lib::DKF::B_t()'],['../classmrs__lib_1_1JLKF.html#ac8971eebc826cd62aadd45d4b64d216c',1,'mrs_lib::JLKF::B_t()'],['../classmrs__lib_1_1LKF.html#a5ca7805e401bd7b718b510269a6ce7bf',1,'mrs_lib::LKF::B_t()'],['../classmrs__lib_1_1NCLKF.html#af283625e8caefbccb8ca64072dab91a8',1,'mrs_lib::NCLKF::B_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a749bb8222899e2b056e27875c0f951f6',1,'mrs_lib::NCLKF_partial::B_t()']]], + ['base_5fclass_30',['Base_class',['../classmrs__lib_1_1DKF.html#ad7e6756be6a89592151d092f20d19811',1,'mrs_lib::DKF::Base_class()'],['../classmrs__lib_1_1LKF.html#ae54a2cc807bafeee1777ffdbd37e3c02',1,'mrs_lib::LKF::Base_class()'],['../classmrs__lib_1_1NCLKF.html#aa670be9fba29c7d8d8c7c849d9d844d1',1,'mrs_lib::NCLKF::Base_class()'],['../classmrs__lib_1_1NCLKF__partial.html#a13dac50b4906535f6ff5837b1057597f',1,'mrs_lib::NCLKF_partial::Base_class()'],['../classmrs__lib_1_1UKF.html#ae5a0eb2f31131ed4cec117d4a1000080',1,'mrs_lib::UKF::Base_class()']]], + ['batch_5fvisualizer_2eh_31',['batch_visualizer.h',['../batch__visualizer_8h.html',1,'']]], + ['batchvisualizer_32',['BatchVisualizer',['../classmrs__lib_1_1BatchVisualizer.html',1,'mrs_lib::BatchVisualizer'],['../classmrs__lib_1_1BatchVisualizer.html#a2a426c62b02dec6430362920db0d6c80',1,'mrs_lib::BatchVisualizer::BatchVisualizer()'],['../classmrs__lib_1_1BatchVisualizer.html#a3a857713e5516bec553b5380eaa423f8',1,'mrs_lib::BatchVisualizer::BatchVisualizer(ros::NodeHandle &nh, std::string marker_topic_name, std::string parent_frame)']]], + ['bequiet_33',['beQuiet',['../classmrs__lib_1_1Transformer.html#ab1e3fff472e6c6320a41d6f6ca331ca0',1,'mrs_lib::Transformer']]], + ['bordererror_34',['BorderError',['../structmrs__lib_1_1SafetyZone_1_1BorderError.html',1,'mrs_lib::SafetyZone']]], + ['bibliography_35',['Bibliography',['../citelist.html',1,'']]] +]; diff --git a/search/all_10.html b/search/all_10.html new file mode 100644 index 00000000..6fd3a4aa --- /dev/null +++ b/search/all_10.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_10.js b/search/all_10.js new file mode 100644 index 00000000..c8b6118f --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['q_5ft_256',['Q_t',['../classmrs__lib_1_1DKF.html#a59afcc2127ecd2a9dba8a53ca505f97a',1,'mrs_lib::DKF::Q_t()'],['../classmrs__lib_1_1KalmanFilter.html#ab2c5ddabe3fc919334595ec1e535c848',1,'mrs_lib::KalmanFilter::Q_t()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#ab9efcd795fc6c47ef94c20f9ff9547dc',1,'mrs_lib::KalmanFilterAloamGarm::Q_t()'],['../classmrs__lib_1_1LKF.html#a5df2fd299b9da75a872e8d9194da1ca9',1,'mrs_lib::LKF::Q_t()'],['../classmrs__lib_1_1NCLKF.html#aab7df7efe1e8e70d0e79ad374c6674a0',1,'mrs_lib::NCLKF::Q_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a2ba0fce7ba12825a0c498f7676848fce',1,'mrs_lib::NCLKF_partial::Q_t()'],['../classmrs__lib_1_1Repredictor.html#af0b9dfd5f21b220e87c79298b061f63d',1,'mrs_lib::Repredictor::Q_t()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#aa031cc536ee7a46c3e79287c65fc1fa7',1,'mrs_lib::RepredictorAloamgarm::Q_t()'],['../classmrs__lib_1_1UKF.html#abd8f845f1b3f138949bd95c7dc12e011',1,'mrs_lib::UKF::Q_t()']]], + ['quaternionbetween_257',['quaternionBetween',['../misc_8h.html#afc7674301c81fd347f26a2bc0bb96979',1,'mrs_lib::geometry']]], + ['quaternionfromeuler_258',['quaternionFromEuler',['../misc_8h.html#acbd2f281f58752d98b9482f3a9697363',1,'mrs_lib::geometry::quaternionFromEuler(double x, double y, double z)'],['../misc_8h.html#a105c80e76bac24eb3e2a16bed6609a80',1,'mrs_lib::geometry::quaternionFromEuler(const Eigen::Vector3d &euler)']]], + ['quaternionfromheading_259',['quaternionFromHeading',['../misc_8h.html#aac041627690bc6f377e60b99344b8b3a',1,'mrs_lib::geometry']]], + ['queue_5fsize_260',['queue_size',['../structmrs__lib_1_1SubscribeHandlerOptions.html#a5abe6590d88b396d94cce7a7ae652e09',1,'mrs_lib::SubscribeHandlerOptions']]] +]; diff --git a/search/all_11.html b/search/all_11.html new file mode 100644 index 00000000..f78343b9 --- /dev/null +++ b/search/all_11.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_11.js b/search/all_11.js new file mode 100644 index 00000000..4f268821 --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['r_261',['r',['../classmrs__lib_1_1geometry_1_1Cylinder.html#aa442455784da2246f8bc25aa0eccadbb',1,'mrs_lib::geometry::Cylinder']]], + ['r_5ft_262',['R_t',['../classmrs__lib_1_1DKF.html#a6c1a5e6a6cdcb52271774b566957f948',1,'mrs_lib::DKF::R_t()'],['../classmrs__lib_1_1KalmanFilter.html#a1e4c8aa79cfcea707876d85950132450',1,'mrs_lib::KalmanFilter::R_t()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#ab6bf1e91bfeb633b08038f54b2b5d0fa',1,'mrs_lib::KalmanFilterAloamGarm::R_t()'],['../classmrs__lib_1_1LKF.html#a5d2cb5ed042b660f1a44bdb9f4d2612f',1,'mrs_lib::LKF::R_t()'],['../classmrs__lib_1_1NCLKF.html#a4b6b964e9491ca80fdfc1afacc9b23fc',1,'mrs_lib::NCLKF::R_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a7754b24176416b24869450c88a1328aa',1,'mrs_lib::NCLKF_partial::R_t()'],['../classmrs__lib_1_1Repredictor.html#aac7c07ba0237230fa7346932fb542ae9',1,'mrs_lib::Repredictor::R_t()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#afa36b8b183f868a84dc182e4ac562d44',1,'mrs_lib::RepredictorAloamgarm::R_t()'],['../classmrs__lib_1_1UKF.html#a0af0d9a246df0798b1cb1308cec82fd2',1,'mrs_lib::UKF::R_t()']]], + ['radians_263',['radians',['../structmrs__lib_1_1geometry_1_1radians.html',1,'mrs_lib::geometry']]], + ['range_264',['range',['../structmrs__lib_1_1geometry_1_1cyclic.html#a406dfc057fd17b5935add5a7bf9fe325',1,'mrs_lib::geometry::cyclic']]], + ['ray_265',['Ray',['../classmrs__lib_1_1geometry_1_1Ray.html',1,'mrs_lib::geometry::Ray'],['../classmrs__lib_1_1geometry_1_1Ray.html#aa0bff9427d14806607b5689f1d71604d',1,'mrs_lib::geometry::Ray::Ray()'],['../classmrs__lib_1_1geometry_1_1Ray.html#ab7466369083c82552f805fb20a16a8aa',1,'mrs_lib::geometry::Ray::Ray(Eigen::Vector3d p1, Eigen::Vector3d p2)']]], + ['rectangle_266',['Rectangle',['../classmrs__lib_1_1geometry_1_1Rectangle.html',1,'mrs_lib::geometry::Rectangle'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#af119a484beb0dbae7dd0a9a2d5f5123d',1,'mrs_lib::geometry::Rectangle::Rectangle()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a3b85d8ba9c03a1b2962eda68293da077',1,'mrs_lib::geometry::Rectangle::Rectangle(std::vector< Eigen::Vector3d > points)'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a707a6df742b90d626e5321a4324d75fd',1,'mrs_lib::geometry::Rectangle::Rectangle(Eigen::Vector3d a, Eigen::Vector3d b, Eigen::Vector3d c, Eigen::Vector3d d)']]], + ['remove_5fconst_267',['remove_const',['../namespacemrs__lib.html#a006d8eb9265ad5e8b2f908df6deb55b5',1,'mrs_lib']]], + ['repredictor_268',['Repredictor',['../classmrs__lib_1_1Repredictor.html',1,'mrs_lib::Repredictor< Model, disable_reprediction >'],['../classmrs__lib_1_1Repredictor.html#a035888099138efba982bda818c5fe390',1,'mrs_lib::Repredictor::Repredictor(const x_t &x0, const P_t &P0, const u_t &u0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len)'],['../classmrs__lib_1_1Repredictor.html#a0245871abc8208f13b4b33a7c2ece708',1,'mrs_lib::Repredictor::Repredictor()'],['../classmrs__lib_1_1Repredictor.html#a6ffbce95c9194f159c203378845851d0',1,'mrs_lib::Repredictor::Repredictor(const x_t &x0, const P_t &P0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len)']]], + ['repredictor_3c_20model_20_3e_269',['Repredictor< Model >',['../classmrs__lib_1_1Repredictor.html',1,'mrs_lib']]], + ['repredictoraloamgarm_270',['RepredictorAloamgarm',['../classmrs__lib_1_1RepredictorAloamgarm.html',1,'mrs_lib::RepredictorAloamgarm< Model >'],['../classmrs__lib_1_1RepredictorAloamgarm.html#a1e1d3245d8f2fd98c9f80d4795061395',1,'mrs_lib::RepredictorAloamgarm::RepredictorAloamgarm()']]], + ['resolveframe_271',['resolveFrame',['../classmrs__lib_1_1Transformer.html#aa4cf06770b355a01c66f227363a4967f',1,'mrs_lib::Transformer']]], + ['retrylookupnewest_272',['retryLookupNewest',['../classmrs__lib_1_1Transformer.html#abef2a59ed83e09ab103c060abb31dbb1',1,'mrs_lib::Transformer']]], + ['rheiv_273',['RHEIV',['../classmrs__lib_1_1RHEIV.html',1,'mrs_lib::RHEIV< n_states, n_params >'],['../classmrs__lib_1_1RHEIV.html#a057ffc158ceb64e933d3ae73e96bb033',1,'mrs_lib::RHEIV::RHEIV()'],['../classmrs__lib_1_1RHEIV.html#a4712a3306cdd759a73d2124b23bb388b',1,'mrs_lib::RHEIV::RHEIV(const f_z_t &f_z, const f_dzdx_t &f_dzdx, const double min_dtheta=1e-15, const unsigned max_its=100)'],['../classmrs__lib_1_1RHEIV.html#a8c8f7b9c1b3ea4daafc08e1a29941558',1,'mrs_lib::RHEIV::RHEIV(const f_z_t &f_z, const f_dzdx_t &f_dzdx, const double min_dtheta=1e-15, const unsigned max_its=100, const time_t &timeout=std::chrono::duration_cast< time_t >(ms_t::zero()), const int debug_nth_it=-1)'],['../classmrs__lib_1_1RHEIV.html#a66a840487d929607a3385e90b3c35ec5',1,'mrs_lib::RHEIV::RHEIV(const f_z_t &f_z, const dzdx_t &dzdx, const double min_dtheta=1e-15, const unsigned max_its=100)'],['../classmrs__lib_1_1RHEIV.html#a9c0c437bea8612516cb37d9503b6a852',1,'mrs_lib::RHEIV::RHEIV(const f_z_t &f_z, const dzdx_t &dzdx, const double min_dtheta=1e-15, const unsigned max_its=100, const time_t &timeout=std::chrono::duration_cast< time_t >(ms_t::zero()), const int debug_nth_it=-1)']]], + ['rheiv_2eh_274',['rheiv.h',['../rheiv_8h.html',1,'']]], + ['roll_275',['roll',['../classmrs__lib_1_1EulerAttitude.html#a7d62c8be0341555c3e03e124a617d765',1,'mrs_lib::EulerAttitude']]], + ['rosparamprovider_276',['RosParamProvider',['../classmrs__lib_1_1RosParamProvider.html',1,'mrs_lib']]], + ['rostimer_277',['ROSTimer',['../classmrs__lib_1_1ROSTimer.html',1,'mrs_lib::ROSTimer'],['../classmrs__lib_1_1ROSTimer.html#aaf683893d28eca7f91e4b2333cf4eed5',1,'mrs_lib::ROSTimer::ROSTimer(const ros::NodeHandle &nh, const ros::Rate &rate, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot=false, const bool autostart=true)'],['../classmrs__lib_1_1ROSTimer.html#ad4913fe0402a8be9b131ad5afb9d7d05',1,'mrs_lib::ROSTimer::ROSTimer(const ros::NodeHandle &nh, const ros::Duration &duration, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot=false, const bool autostart=true)']]], + ['rotatecovariance_278',['rotateCovariance',['../misc_8h.html#acfda874d1843fd8c03fb309b5024818f',1,'mrs_lib::geometry']]], + ['rotationbetween_279',['rotationBetween',['../misc_8h.html#a59d7c7ddea21a014b2c831a0fc65fbb1',1,'mrs_lib::geometry']]], + ['routine_280',['Routine',['../classmrs__lib_1_1Routine.html',1,'mrs_lib']]], + ['running_281',['running',['../classmrs__lib_1_1MRSTimer.html#a54461ff4541da2848c3263e646ff928a',1,'mrs_lib::MRSTimer::running()'],['../classmrs__lib_1_1ROSTimer.html#af5074139258db68cf314b1bf4868243a',1,'mrs_lib::ROSTimer::running()'],['../classmrs__lib_1_1ThreadTimer.html#ab3ecdba649fd5c849acd94ce9ad0c824',1,'mrs_lib::ThreadTimer::running()']]] +]; diff --git a/search/all_12.html b/search/all_12.html new file mode 100644 index 00000000..dd9ff1d5 --- /dev/null +++ b/search/all_12.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_12.js b/search/all_12.js new file mode 100644 index 00000000..192fe0c2 --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,51 @@ +var searchData= +[ + ['safetyzone_282',['SafetyZone',['../classmrs__lib_1_1SafetyZone.html',1,'mrs_lib']]], + ['scope_5ftimer_2eh_283',['scope_timer.h',['../scope__timer_8h.html',1,'']]], + ['scopetimer_284',['ScopeTimer',['../classmrs__lib_1_1ScopeTimer.html',1,'mrs_lib::ScopeTimer'],['../classmrs__lib_1_1ScopeTimer.html#aebac3a7bad2d63f49d5777e08b504661',1,'mrs_lib::ScopeTimer::ScopeTimer(const std::string &label, const ros::Duration &throttle_period=ros::Duration(0), const bool enable=true, const std::shared_ptr< ScopeTimerLogger > scope_timer_logger=nullptr)'],['../classmrs__lib_1_1ScopeTimer.html#a8943aec6fbe491633b7f698eb3f0d131',1,'mrs_lib::ScopeTimer::ScopeTimer(const std::string &label, const time_point &tp0, const ros::Duration &throttle_period=ros::Duration(0), const bool enable=true, const std::shared_ptr< ScopeTimerLogger > scope_timer_logger=nullptr)'],['../classmrs__lib_1_1ScopeTimer.html#abdaf77484c74055916b8e491c8ffe318',1,'mrs_lib::ScopeTimer::ScopeTimer(const std::string &label, const std::shared_ptr< ScopeTimerLogger > scope_timer_logger, const bool enable=true)']]], + ['scopetimerlogger_285',['ScopeTimerLogger',['../classmrs__lib_1_1ScopeTimerLogger.html',1,'mrs_lib::ScopeTimerLogger'],['../classmrs__lib_1_1ScopeTimerLogger.html#a5369b8ec91eab0a06b87485bed5c130c',1,'mrs_lib::ScopeTimerLogger::ScopeTimerLogger()']]], + ['sdegrees_286',['sdegrees',['../structmrs__lib_1_1geometry_1_1sdegrees.html',1,'mrs_lib::geometry']]], + ['sendtransform_287',['sendTransform',['../classmrs__lib_1_1TransformBroadcaster.html#a93913661cb31baeedb7d4e1f72142b93',1,'mrs_lib::TransformBroadcaster::sendTransform(const geometry_msgs::TransformStamped &transform)'],['../classmrs__lib_1_1TransformBroadcaster.html#a2adf5bd449b5561323fb7d8633e04bf5',1,'mrs_lib::TransformBroadcaster::sendTransform(const std::vector< geometry_msgs::TransformStamped > &transforms)']]], + ['service_5fclient_5fhandler_2eh_288',['service_client_handler.h',['../service__client__handler_8h.html',1,'']]], + ['serviceclienthandler_289',['ServiceClientHandler',['../classmrs__lib_1_1ServiceClientHandler.html',1,'mrs_lib::ServiceClientHandler< ServiceType >'],['../classmrs__lib_1_1ServiceClientHandler.html#a7d0e35cfbbe280ab0d739c23a26189de',1,'mrs_lib::ServiceClientHandler::ServiceClientHandler(void)'],['../classmrs__lib_1_1ServiceClientHandler.html#acf286dd2720d41fa05e98c7327d94413',1,'mrs_lib::ServiceClientHandler::ServiceClientHandler(const ServiceClientHandler &other)'],['../classmrs__lib_1_1ServiceClientHandler.html#a6da5592ce8388bd1aa08b63fd3d3d060',1,'mrs_lib::ServiceClientHandler::ServiceClientHandler(ros::NodeHandle &nh, const std::string &address)']]], + ['serviceclienthandler_5fimpl_290',['ServiceClientHandler_impl',['../classmrs__lib_1_1ServiceClientHandler__impl.html',1,'mrs_lib::ServiceClientHandler_impl< ServiceType >'],['../classmrs__lib_1_1ServiceClientHandler__impl.html#ae1f6eb48630bf4d3eb9e92b95c6269c8',1,'mrs_lib::ServiceClientHandler_impl::ServiceClientHandler_impl(void)'],['../classmrs__lib_1_1ServiceClientHandler__impl.html#a4ae10aba33d5d46013bf25a61c005ac0',1,'mrs_lib::ServiceClientHandler_impl::ServiceClientHandler_impl(ros::NodeHandle &nh, const std::string &address)']]], + ['set_5fmutexed_291',['set_mutexed',['../namespacemrs__lib.html#afae3eb66a47b80bd8bae3b4a0c6a9368',1,'mrs_lib::set_mutexed(std::mutex &mut, const T what, T &where)'],['../namespacemrs__lib.html#aa09cacb136795c2831ed0499518a2b17',1,'mrs_lib::set_mutexed(std::mutex &mut, Args &... args)'],['../namespacemrs__lib.html#a953c3bb11623623e1daef402272e6833',1,'mrs_lib::set_mutexed(std::mutex &mut, const std::tuple< Args... > from, std::tuple< Args &... > to)']]], + ['set_5fmutexed_5fimpl_292',['set_mutexed_impl',['../namespacemrs__lib.html#acc32702fff28a4a1515a586a94f51e79',1,'mrs_lib::set_mutexed_impl(const T what, T &where)'],['../namespacemrs__lib.html#ad43e8bfd91df3dae404738c355b136e9',1,'mrs_lib::set_mutexed_impl(const T what, T &where, Args... args)']]], + ['setbufferlength_293',['setBufferLength',['../classmrs__lib_1_1MedianFilter.html#af2888fa7449ce3ebc82f3255a519fe6a',1,'mrs_lib::MedianFilter']]], + ['setconstants_294',['setConstants',['../classmrs__lib_1_1UKF.html#a646b7755aaa478bb86d89e1923d5ed2a',1,'mrs_lib::UKF']]], + ['setdefaultframe_295',['setDefaultFrame',['../classmrs__lib_1_1Transformer.html#a16a54cd35b1f071a80197cbccccfe9c0',1,'mrs_lib::Transformer']]], + ['setdefaultprefix_296',['setDefaultPrefix',['../classmrs__lib_1_1Transformer.html#a5d6f4288d53f09474c92bda26d0c9f55',1,'mrs_lib::Transformer']]], + ['setheading_297',['setHeading',['../classmrs__lib_1_1AttitudeConverter.html#ac818b4e515d614d5d473be95b5ee9024',1,'mrs_lib::AttitudeConverter']]], + ['setheadingexception_298',['SetHeadingException',['../structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException.html',1,'mrs_lib::AttitudeConverter']]], + ['setlatlon_299',['setLatLon',['../classmrs__lib_1_1Transformer.html#a54764308675cc6df1782954870e1f3c2',1,'mrs_lib::Transformer']]], + ['setlinesscale_300',['setLinesScale',['../classmrs__lib_1_1BatchVisualizer.html#af36566a7f7267a2cdb167a533e4cb856',1,'mrs_lib::BatchVisualizer']]], + ['setlookuptimeout_301',['setLookupTimeout',['../classmrs__lib_1_1Transformer.html#ac073019d60f1d9c6d48a0c207bafb678',1,'mrs_lib::Transformer']]], + ['setmaxdifference_302',['setMaxDifference',['../classmrs__lib_1_1MedianFilter.html#a82d854470b0920fac623472721b01601',1,'mrs_lib::MedianFilter']]], + ['setmaxvalue_303',['setMaxValue',['../classmrs__lib_1_1MedianFilter.html#a8162e19bd901f6dcd542d4c8615732f9',1,'mrs_lib::MedianFilter']]], + ['setminvalue_304',['setMinValue',['../classmrs__lib_1_1MedianFilter.html#a569e93d2d4be9632db2943fedb8133ba',1,'mrs_lib::MedianFilter']]], + ['setobservationmodel_305',['setObservationModel',['../classmrs__lib_1_1UKF.html#a272c7435d05b9a8867df4bd131f01177',1,'mrs_lib::UKF']]], + ['setparentframe_306',['setParentFrame',['../classmrs__lib_1_1BatchVisualizer.html#a284c94fdfec8f359704d92f9ef79cd74',1,'mrs_lib::BatchVisualizer']]], + ['setperiod_307',['setPeriod',['../classmrs__lib_1_1MRSTimer.html#acf818ea5cffe17b89ed00866ca7cbeff',1,'mrs_lib::MRSTimer::setPeriod()'],['../classmrs__lib_1_1ROSTimer.html#a7dd4d03428c7abe2de8ea260a9a4eeff',1,'mrs_lib::ROSTimer::setPeriod()'],['../classmrs__lib_1_1ThreadTimer.html#a038246468811544860d5d2d1c4091e2d',1,'mrs_lib::ThreadTimer::setPeriod()']]], + ['setpointsscale_308',['setPointsScale',['../classmrs__lib_1_1BatchVisualizer.html#ac613c22b8ed79cd169636e6aafacf2dc',1,'mrs_lib::BatchVisualizer']]], + ['setprefix_309',['setPrefix',['../classmrs__lib_1_1ParamLoader.html#a8ad978834d5d6d1745a96f1ecc65a759',1,'mrs_lib::ParamLoader']]], + ['settransitionmodel_310',['setTransitionModel',['../classmrs__lib_1_1UKF.html#a724d2e508dd45e4e6cb7b08b023cae34',1,'mrs_lib::UKF']]], + ['setyaw_311',['setYaw',['../classmrs__lib_1_1AttitudeConverter.html#a945e6c80d148df27897391bfd69c0505',1,'mrs_lib::AttitudeConverter']]], + ['shapes_2eh_312',['shapes.h',['../shapes_8h.html',1,'']]], + ['shouldlog_313',['shouldLog',['../classmrs__lib_1_1ScopeTimerLogger.html#a8bb5c6453336967529f118a717f20825',1,'mrs_lib::ScopeTimerLogger']]], + ['simple_5fexample_2ecpp_314',['simple_example.cpp',['../simple__example_8cpp.html',1,'']]], + ['solidangle_315',['solidAngle',['../misc_8h.html#a3f9294141cc559ae94b4c026ac47d05a',1,'mrs_lib::geometry']]], + ['solidanglerelativeto_316',['solidAngleRelativeTo',['../classmrs__lib_1_1geometry_1_1Rectangle.html#a803dbb3eb6f8a24146bd4c01877769ce',1,'mrs_lib::geometry::Rectangle']]], + ['sphericaltrianglearea_317',['sphericalTriangleArea',['../misc_8h.html#a8605d3a799002897f1d260cc4be95682',1,'mrs_lib::geometry']]], + ['square_5froot_5fexception_318',['square_root_exception',['../structmrs__lib_1_1UKF_1_1square__root__exception.html',1,'mrs_lib::UKF']]], + ['sradians_319',['sradians',['../structmrs__lib_1_1geometry_1_1sradians.html',1,'mrs_lib::geometry']]], + ['stamp_320',['stamp',['../structmrs__lib_1_1KalmanFilter_1_1statecov__t.html#ab576efb895b5def90a7aab738c610f83',1,'mrs_lib::KalmanFilter::statecov_t']]], + ['start_321',['start',['../classmrs__lib_1_1SubscribeHandler.html#af8bc123e16de75e3b6c00724b817eaaf',1,'mrs_lib::SubscribeHandler::start()'],['../classmrs__lib_1_1MRSTimer.html#afda0c038cd360ccaa71b95227e413b44',1,'mrs_lib::MRSTimer::start()'],['../classmrs__lib_1_1ROSTimer.html#afd70b40e8e4b84b48215eeafc5e27520',1,'mrs_lib::ROSTimer::start()'],['../classmrs__lib_1_1ThreadTimer.html#a0425600320550d52408d1499ee3d7891',1,'mrs_lib::ThreadTimer::start()']]], + ['statecov_5ft_322',['statecov_t',['../structmrs__lib_1_1KalmanFilter_1_1statecov__t.html',1,'mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >::statecov_t'],['../structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html',1,'mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >::statecov_t'],['../classmrs__lib_1_1DKF.html#a1408b975fe2e4bd3fc5009c80d43f06b',1,'mrs_lib::DKF::statecov_t()'],['../classmrs__lib_1_1LKF.html#a54b2b4a3932510daad92da5a2b1274c1',1,'mrs_lib::LKF::statecov_t()'],['../classmrs__lib_1_1NCLKF.html#abac1b51597611226f2c0642230207e71',1,'mrs_lib::NCLKF::statecov_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a2bc4e99acb7f38dc41d6e63cdce5e805',1,'mrs_lib::NCLKF_partial::statecov_t()'],['../classmrs__lib_1_1Repredictor.html#a794952d1627187223300848cd3e1bf66',1,'mrs_lib::Repredictor::statecov_t()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#a4d5da8a5d296bf98bff6f99eaf550ae7',1,'mrs_lib::RepredictorAloamgarm::statecov_t()'],['../classmrs__lib_1_1UKF.html#a604c0bfee69ee5a34dc4412af3cc6e53',1,'mrs_lib::UKF::statecov_t()']]], + ['stop_323',['stop',['../classmrs__lib_1_1SubscribeHandler.html#a36a097cf480a16bf239885be6e35b5d0',1,'mrs_lib::SubscribeHandler::stop()'],['../classmrs__lib_1_1MRSTimer.html#aeda0660a5031f17bb57f55f4166e737e',1,'mrs_lib::MRSTimer::stop()'],['../classmrs__lib_1_1ROSTimer.html#a6a774123e3400848884fa83fe01e1955',1,'mrs_lib::ROSTimer::stop()'],['../classmrs__lib_1_1ThreadTimer.html#a26d89795a716aa2ae6d7f890626c0aaa',1,'mrs_lib::ThreadTimer::stop()']]], + ['subobject_324',['SubObject',['../classSubObject.html',1,'']]], + ['subscribe_5fhandler_2eh_325',['subscribe_handler.h',['../subscribe__handler_8h.html',1,'']]], + ['subscribedtopicname_326',['subscribedTopicName',['../classmrs__lib_1_1SubscribeHandler.html#a2ee619f8b6fe5ce56599752e63161b51',1,'mrs_lib::SubscribeHandler']]], + ['subscribehandler_327',['SubscribeHandler',['../classmrs__lib_1_1SubscribeHandler.html',1,'mrs_lib::SubscribeHandler< MessageType >'],['../classmrs__lib_1_1SubscribeHandler.html#a13159347fe9f13d778d7c02f2d1b1a98',1,'mrs_lib::SubscribeHandler::SubscribeHandler()'],['../classmrs__lib_1_1SubscribeHandler.html#aaceb7739b06d44d7fe619418d5cecd4e',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, const std::string &topic_name, Types ... args)'],['../classmrs__lib_1_1SubscribeHandler.html#a40f16a8553532b9685feb4b33f342602',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, const message_callback_t &message_callback={})'],['../classmrs__lib_1_1SubscribeHandler.html#aa625f9d69548da72d92f7e8a25b078e3',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, const timeout_callback_t &timeout_callback, Types ... args)'],['../classmrs__lib_1_1SubscribeHandler.html#ab24f400bfd36d733366d25b63ec8889d',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, void(ObjectType1::*const timeout_callback)(const std::string &topic_name, const ros::Time &last_msg), ObjectType1 *const obj1, Types ... args)'],['../classmrs__lib_1_1SubscribeHandler.html#a27ac792b1dfa8a62d087b565bec33925',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, void(ObjectType2::*const message_callback)(typename MessageType::ConstPtr), ObjectType2 *const obj2, Types ... args)'],['../classmrs__lib_1_1SubscribeHandler.html#a14c1c92e119c047a3c40724f1152b7b9',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, void(ObjectType2::*const message_callback)(typename MessageType::ConstPtr), ObjectType2 *const obj2, void(ObjectType1::*const timeout_callback)(const std::string &topic_name, const ros::Time &last_msg), ObjectType1 *const obj1, Types ... args)'],['../classmrs__lib_1_1SubscribeHandler.html#a367e7245e60ee2a87f680a27c0e1a8e5',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, const ros::Duration &no_message_timeout, Types ... args)'],['../classmrs__lib_1_1SubscribeHandler.html#ab3499b8b5910450df90c905d1811e4a3',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, mrs_lib::TimeoutManager &timeout_manager, Types ... args)']]], + ['subscribehandleroptions_328',['SubscribeHandlerOptions',['../structmrs__lib_1_1SubscribeHandlerOptions.html',1,'mrs_lib']]], + ['supremum_329',['supremum',['../structmrs__lib_1_1geometry_1_1cyclic.html#adf3f559f3099bf6002a8f1331df42142',1,'mrs_lib::geometry::cyclic']]] +]; diff --git a/search/all_13.html b/search/all_13.html new file mode 100644 index 00000000..2611a100 --- /dev/null +++ b/search/all_13.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_13.js b/search/all_13.js new file mode 100644 index 00000000..53da0cac --- /dev/null +++ b/search/all_13.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['theta_330',['theta',['../classmrs__lib_1_1geometry_1_1Cone.html#a708721c0fde7cb53e7ba4e585a2d5743',1,'mrs_lib::geometry::Cone']]], + ['theta_5ft_331',['theta_t',['../classmrs__lib_1_1RHEIV.html#af6d8212b941ad45ce6b53bc4e8449de1',1,'mrs_lib::RHEIV']]], + ['threadsafe_332',['threadsafe',['../structmrs__lib_1_1SubscribeHandlerOptions.html#a7c924f3581ff84d571b825d7e77b9511',1,'mrs_lib::SubscribeHandlerOptions']]], + ['threadtimer_333',['ThreadTimer',['../classmrs__lib_1_1ThreadTimer.html',1,'mrs_lib::ThreadTimer'],['../classmrs__lib_1_1ThreadTimer.html#ac2e365201eccac6aae67400e4da4438f',1,'mrs_lib::ThreadTimer::ThreadTimer(const ros::NodeHandle &nh, const ros::Rate &rate, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot=false, const bool autostart=true)'],['../classmrs__lib_1_1ThreadTimer.html#a2ccbea65e537f1f73da1fa75f37833fc',1,'mrs_lib::ThreadTimer::ThreadTimer(const ros::NodeHandle &nh, const ros::Duration &duration, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, bool oneshot=false, const bool autostart=true)']]], + ['time_5fpoint_334',['time_point',['../structmrs__lib_1_1ScopeTimer_1_1time__point.html',1,'mrs_lib::ScopeTimer']]], + ['timeout_5fcallback_335',['timeout_callback',['../structmrs__lib_1_1SubscribeHandlerOptions.html#aba6f6f262bfeae0d1f6f39bb778d04af',1,'mrs_lib::SubscribeHandlerOptions']]], + ['timeout_5fcallback_5ft_336',['timeout_callback_t',['../classmrs__lib_1_1SubscribeHandler.html#a6f12a82506c6967a8af9c2c878a1803a',1,'mrs_lib::SubscribeHandler']]], + ['timeout_5fmanager_337',['timeout_manager',['../structmrs__lib_1_1SubscribeHandlerOptions.html#a50dd6637eb0800d0ee53c1cd6cee058e',1,'mrs_lib::SubscribeHandlerOptions']]], + ['timeout_5fmanager_2eh_338',['timeout_manager.h',['../timeout__manager_8h.html',1,'']]], + ['timeoutmanager_339',['TimeoutManager',['../classmrs__lib_1_1TimeoutManager.html',1,'mrs_lib::TimeoutManager'],['../classmrs__lib_1_1TimeoutManager.html#a7627ccd5204a4f13c832db2cb558128f',1,'mrs_lib::TimeoutManager::TimeoutManager()']]], + ['topic_5fname_340',['topic_name',['../structmrs__lib_1_1SubscribeHandlerOptions.html#a374f745d46497064c62909412ebdf266',1,'mrs_lib::SubscribeHandlerOptions']]], + ['topicname_341',['topicName',['../classmrs__lib_1_1SubscribeHandler.html#a512ffa88a2164e420f1c4a6ae1823e68',1,'mrs_lib::SubscribeHandler']]], + ['transform_342',['transform',['../classmrs__lib_1_1Transformer.html#a8a66075edc7025976292ebd401d7de16',1,'mrs_lib::Transformer::transform(const T &what, const geometry_msgs::TransformStamped &tf)'],['../classmrs__lib_1_1Transformer.html#a8b05fe85c78f490b938bbf3d5884fce4',1,'mrs_lib::Transformer::transform(const boost::shared_ptr< const T > &what, const geometry_msgs::TransformStamped &tf)'],['../classmrs__lib_1_1Transformer.html#a6509524feeb70fe794964b7462f28409',1,'mrs_lib::Transformer::transform(const boost::shared_ptr< T > &what, const geometry_msgs::TransformStamped &tf)']]], + ['transformaspoint_343',['transformAsPoint',['../classmrs__lib_1_1Transformer.html#ae56ae48888d4fcaf21c912ed491b35d1',1,'mrs_lib::Transformer::transformAsPoint(const Eigen::Vector3d &what, const geometry_msgs::TransformStamped &tf)'],['../classmrs__lib_1_1Transformer.html#ab1533c559b6c94b406322bfbfc700ef7',1,'mrs_lib::Transformer::transformAsPoint(const std::string &from_frame, const Eigen::Vector3d &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))']]], + ['transformasvector_344',['transformAsVector',['../classmrs__lib_1_1Transformer.html#af17729e67e82876f6bbce2d5cec55613',1,'mrs_lib::Transformer::transformAsVector(const Eigen::Vector3d &what, const geometry_msgs::TransformStamped &tf)'],['../classmrs__lib_1_1Transformer.html#a1c71e387e846a2591616e83a88071d24',1,'mrs_lib::Transformer::transformAsVector(const std::string &from_frame, const Eigen::Vector3d &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))']]], + ['transformbroadcaster_345',['TransformBroadcaster',['../classmrs__lib_1_1TransformBroadcaster.html',1,'mrs_lib::TransformBroadcaster'],['../classmrs__lib_1_1TransformBroadcaster.html#ab8760c98f2d7111cc029f45b11e24bb9',1,'mrs_lib::TransformBroadcaster::TransformBroadcaster()']]], + ['transformer_346',['Transformer',['../classmrs__lib_1_1Transformer.html',1,'mrs_lib::Transformer'],['../classmrs__lib_1_1Transformer.html#aca0408b710e4fa6e163ac23719d30fd1',1,'mrs_lib::Transformer::Transformer()'],['../classmrs__lib_1_1Transformer.html#ae1a34c10d53059f9dfaf4c8c05a4f617',1,'mrs_lib::Transformer::Transformer(const std::string &node_name, const ros::Duration &cache_time=ros::Duration(tf2_ros::Buffer::DEFAULT_CACHE_TIME))'],['../classmrs__lib_1_1Transformer.html#a561b0c5342c38dea6071ab400b8eaae4',1,'mrs_lib::Transformer::Transformer(const ros::NodeHandle &nh, const std::string &node_name=std::string(), const ros::Duration &cache_time=ros::Duration(tf2_ros::Buffer::DEFAULT_CACHE_TIME))']]], + ['transformsingle_347',['transformSingle',['../classmrs__lib_1_1Transformer.html#a623af4e8100b71ac700ad5ffac96d2e2',1,'mrs_lib::Transformer::transformSingle(const T &what, const std::string &to_frame)'],['../classmrs__lib_1_1Transformer.html#a58e8e6d80098e192a0d415a14c6deec0',1,'mrs_lib::Transformer::transformSingle(const boost::shared_ptr< T > &what, const std::string &to_frame)'],['../classmrs__lib_1_1Transformer.html#a2c45ff29ac5f482ba9b9c2537d82b8fb',1,'mrs_lib::Transformer::transformSingle(const boost::shared_ptr< const T > &what, const std::string &to_frame)'],['../classmrs__lib_1_1Transformer.html#a7cea399425c4a51a676ba5aa285612d4',1,'mrs_lib::Transformer::transformSingle(const std::string &from_frame, const T &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))'],['../classmrs__lib_1_1Transformer.html#a5afde5d58bc9a558cba5da9e0c2d4d1b',1,'mrs_lib::Transformer::transformSingle(const std::string &from_frame, const boost::shared_ptr< T > &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))'],['../classmrs__lib_1_1Transformer.html#a4d01ec1804bb492694d328704dada907',1,'mrs_lib::Transformer::transformSingle(const std::string &from_frame, const boost::shared_ptr< const T > &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))']]], + ['transition_5fmodel_5ft_348',['transition_model_t',['../classmrs__lib_1_1UKF.html#a986f17f015282a33b140af4adabce091',1,'mrs_lib::UKF']]], + ['transport_5fhints_349',['transport_hints',['../structmrs__lib_1_1SubscribeHandlerOptions.html#a41f19ca415439152b934b3633933ec25',1,'mrs_lib::SubscribeHandlerOptions']]], + ['triangle_350',['Triangle',['../classmrs__lib_1_1geometry_1_1Triangle.html',1,'mrs_lib::geometry::Triangle'],['../classmrs__lib_1_1geometry_1_1Triangle.html#a14203384b0eb6d3a7ff01330ab24f679',1,'mrs_lib::geometry::Triangle::Triangle()'],['../classmrs__lib_1_1geometry_1_1Triangle.html#af765e8be7fef5ae4cfb972ec51c4a6e8',1,'mrs_lib::geometry::Triangle::Triangle(Eigen::Vector3d a, Eigen::Vector3d b, Eigen::Vector3d c)']]], + ['trianglearea_351',['triangleArea',['../misc_8h.html#a62f7d942a2445dc2c362678523966241',1,'mrs_lib::geometry']]], + ['triangles_352',['triangles',['../classmrs__lib_1_1geometry_1_1Rectangle.html#a4f2e1bce541675c91179b723aa4f9176',1,'mrs_lib::geometry::Rectangle']]], + ['tuple_5felement_3c_200_2c_20mrs_5flib_3a_3aattitudeconverter_20_3e_353',['tuple_element< 0, mrs_lib::AttitudeConverter >',['../structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4.html',1,'std']]], + ['tuple_5felement_3c_201_2c_20mrs_5flib_3a_3aattitudeconverter_20_3e_354',['tuple_element< 1, mrs_lib::AttitudeConverter >',['../structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4.html',1,'std']]], + ['tuple_5felement_3c_202_2c_20mrs_5flib_3a_3aattitudeconverter_20_3e_355',['tuple_element< 2, mrs_lib::AttitudeConverter >',['../structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4.html',1,'std']]], + ['tuple_5fsize_3c_20mrs_5flib_3a_3aattitudeconverter_20_3e_356',['tuple_size< mrs_lib::AttitudeConverter >',['../structstd_1_1tuple__size_3_01mrs__lib_1_1AttitudeConverter_01_4.html',1,'std']]], + ['twopointcast_357',['twopointCast',['../classmrs__lib_1_1geometry_1_1Ray.html#a4092f0d023b25fcf61fb426c7f0f6630',1,'mrs_lib::geometry::Ray']]] +]; diff --git a/search/all_14.html b/search/all_14.html new file mode 100644 index 00000000..72d12e90 --- /dev/null +++ b/search/all_14.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_14.js b/search/all_14.js new file mode 100644 index 00000000..e2671377 --- /dev/null +++ b/search/all_14.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['u_5ft_358',['u_t',['../classmrs__lib_1_1DKF.html#a5998af081256d469dbd4ac5a1d4d7fd7',1,'mrs_lib::DKF::u_t()'],['../classmrs__lib_1_1KalmanFilter.html#ad92ac4f280e849986554bc593e5ab96e',1,'mrs_lib::KalmanFilter::u_t()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#ae680d65b40883e1678e0365ed3924c16',1,'mrs_lib::KalmanFilterAloamGarm::u_t()'],['../classmrs__lib_1_1LKF.html#a98e130a3d14cd93b01b0b942de8af10c',1,'mrs_lib::LKF::u_t()'],['../classmrs__lib_1_1NCLKF.html#a8992c34838e430a64b070929e92c263a',1,'mrs_lib::NCLKF::u_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a5718270798d8227ccaf76a5d3b97fda5',1,'mrs_lib::NCLKF_partial::u_t()'],['../classmrs__lib_1_1Repredictor.html#a19532d9b875ac33f80ffe313dfb26e6d',1,'mrs_lib::Repredictor::u_t()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#acf7e98ab597eeeb4766b9794cf861f13',1,'mrs_lib::RepredictorAloamgarm::u_t()'],['../classmrs__lib_1_1RHEIV.html#a3bc18fd815c8f09123b0a9083ca3b959',1,'mrs_lib::RHEIV::u_t()'],['../classmrs__lib_1_1UKF.html#a6589d6a1f5eba355f1bec91e99826b71',1,'mrs_lib::UKF::u_t()']]], + ['ukf_359',['UKF',['../classmrs__lib_1_1UKF.html',1,'mrs_lib::UKF< n_states, n_inputs, n_measurements >'],['../classmrs__lib_1_1UKF.html#acf37d546ec0e03f1ef4c031f96057733',1,'mrs_lib::UKF::UKF()'],['../classmrs__lib_1_1UKF.html#a43f196bc0b8ef4dd75feba3b025576cb',1,'mrs_lib::UKF::UKF(const transition_model_t &transition_model, const observation_model_t &observation_model, const double alpha=1e-3, const double kappa=1, const double beta=2)']]], + ['ukf_2eh_360',['ukf.h',['../ukf_8h.html',1,'']]], + ['ukf_2ehpp_361',['ukf.hpp',['../ukf_8hpp.html',1,'']]], + ['unwrap_362',['unwrap',['../structmrs__lib_1_1geometry_1_1cyclic.html#a21d98e561a2d296e1d64b38a74883902',1,'mrs_lib::geometry::cyclic']]], + ['usedmsg_363',['usedMsg',['../classmrs__lib_1_1SubscribeHandler.html#ab027bb4a6edece35701e17ba0c137cfc',1,'mrs_lib::SubscribeHandler']]], + ['utils_2eh_364',['utils.h',['../utils_8h.html',1,'']]] +]; diff --git a/search/all_15.html b/search/all_15.html new file mode 100644 index 00000000..767aec36 --- /dev/null +++ b/search/all_15.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_15.js b/search/all_15.js new file mode 100644 index 00000000..0ec326af --- /dev/null +++ b/search/all_15.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['value_365',['value',['../structmrs__lib_1_1geometry_1_1cyclic.html#a064a156dd856871bf1b4acf22cba78e3',1,'mrs_lib::geometry::cyclic']]], + ['varsteplkf_366',['varstepLKF',['../classmrs__lib_1_1varstepLKF.html',1,'mrs_lib::varstepLKF< n_states, n_inputs, n_measurements >'],['../classmrs__lib_1_1varstepLKF.html#afe2d9f3643f3f8e4c82879384a4a5eea',1,'mrs_lib::varstepLKF::varstepLKF()']]], + ['vector3converter_367',['Vector3Converter',['../classmrs__lib_1_1Vector3Converter.html',1,'mrs_lib::Vector3Converter'],['../classmrs__lib_1_1Vector3Converter.html#ac5cf91c41293661ea55749d55aec4d48',1,'mrs_lib::Vector3Converter::Vector3Converter(const tf2::Vector3 &vector3)'],['../classmrs__lib_1_1Vector3Converter.html#abf2c3e688787834522c8a99c374f656e',1,'mrs_lib::Vector3Converter::Vector3Converter(const Eigen::Vector3d &vector3)'],['../classmrs__lib_1_1Vector3Converter.html#aec2780b4e6f0b58ee2c465ab2338df17',1,'mrs_lib::Vector3Converter::Vector3Converter(const geometry_msgs::Vector3 &vector3)'],['../classmrs__lib_1_1Vector3Converter.html#a3936cad709ed1018aba1d05d47639c80',1,'mrs_lib::Vector3Converter::Vector3Converter(const double &x, const double &y, const double &z)']]], + ['vector_5fconverter_2eh_368',['vector_converter.h',['../vector__converter_8h.html',1,'']]], + ['vector_5fconverter_2ehpp_369',['vector_converter.hpp',['../vector__converter_8hpp.html',1,'']]], + ['vectorconvertertest_370',['VectorConverterTest',['../classVectorConverterTest.html',1,'']]], + ['vertices_371',['vertices',['../classmrs__lib_1_1geometry_1_1Triangle.html#ad873b5c4ba04613f24dd12348f898487',1,'mrs_lib::geometry::Triangle::vertices()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a05fbbe3a262e09d5834431bc31f2648b',1,'mrs_lib::geometry::Rectangle::vertices()'],['../classmrs__lib_1_1geometry_1_1Cuboid.html#ae03413de879b1dd07df7a8f26b0a75f2',1,'mrs_lib::geometry::Cuboid::vertices()']]], + ['visual_5fobject_2eh_372',['visual_object.h',['../visual__object_8h.html',1,'']]], + ['visualobject_373',['VisualObject',['../classmrs__lib_1_1VisualObject.html',1,'mrs_lib']]] +]; diff --git a/search/all_16.html b/search/all_16.html new file mode 100644 index 00000000..7bd7afe6 --- /dev/null +++ b/search/all_16.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_16.js b/search/all_16.js new file mode 100644 index 00000000..a2baf2f8 --- /dev/null +++ b/search/all_16.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['w_374',['w',['../classmrs__lib_1_1UKF.html#a2bbb3c02f086402351601ca3c3a4c52f',1,'mrs_lib::UKF']]], + ['w_5ft_375',['W_t',['../classmrs__lib_1_1UKF.html#aca628bd6d14b59b9d0a10652a2665a32',1,'mrs_lib::UKF']]], + ['waitfornew_376',['waitForNew',['../classmrs__lib_1_1SubscribeHandler.html#a94f4bedf9229325ca6a14202f5cfbcc5',1,'mrs_lib::SubscribeHandler']]], + ['what_377',['what',['../structmrs__lib_1_1JLKF_1_1inverse__exception.html#a1f02bea6207ec02864a693067bcd499f',1,'mrs_lib::JLKF::inverse_exception::what()'],['../structmrs__lib_1_1LKF_1_1inverse__exception.html#a44d325f6cd975003b995d33bd78948ac',1,'mrs_lib::LKF::inverse_exception::what()'],['../structmrs__lib_1_1eigenvector__exception.html#ab825ec32cb055c8c0b3b8b59125e90b5',1,'mrs_lib::eigenvector_exception::what()']]], + ['wrap_378',['wrap',['../structmrs__lib_1_1geometry_1_1cyclic.html#ada5b55bcb4a01898fd9fdd9c393efd95',1,'mrs_lib::geometry::cyclic']]], + ['wrongheight_379',['WrongHeight',['../structmrs__lib_1_1PointObstacle_1_1WrongHeight.html',1,'mrs_lib::PointObstacle']]], + ['wrongnumberofcolumns_380',['WrongNumberOfColumns',['../structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns.html',1,'mrs_lib::Polygon']]], + ['wrongnumberofvertices_381',['WrongNumberOfVertices',['../structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices.html',1,'mrs_lib::Polygon']]], + ['wrongradius_382',['WrongRadius',['../structmrs__lib_1_1PointObstacle_1_1WrongRadius.html',1,'mrs_lib::PointObstacle']]] +]; diff --git a/search/all_17.html b/search/all_17.html new file mode 100644 index 00000000..35702ecd --- /dev/null +++ b/search/all_17.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_17.js b/search/all_17.js new file mode 100644 index 00000000..dabbdbcd --- /dev/null +++ b/search/all_17.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['x_383',['x',['../structmrs__lib_1_1KalmanFilter_1_1statecov__t.html#a725b61d95901486bbc17cf79e45bd5e4',1,'mrs_lib::KalmanFilter::statecov_t::x()'],['../structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html#a78cb90ec0a35a04f7f4abe69847979ec',1,'mrs_lib::KalmanFilterAloamGarm::statecov_t::x()']]], + ['x_5ft_384',['X_t',['../classmrs__lib_1_1UKF.html#a1435f2ed4e333151990355813cee95ba',1,'mrs_lib::UKF::X_t()'],['../classmrs__lib_1_1DKF.html#a094cf9bcb768de6db47e4c2703bede20',1,'mrs_lib::DKF::x_t()'],['../classmrs__lib_1_1KalmanFilter.html#a5b8f47081daf208496a19a4364e6509c',1,'mrs_lib::KalmanFilter::x_t()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#a0e19e15226a8e251452cd486153fba12',1,'mrs_lib::KalmanFilterAloamGarm::x_t()'],['../classmrs__lib_1_1LKF.html#abfad09fe2386fb87eaea7b4dd8b24409',1,'mrs_lib::LKF::x_t()'],['../classmrs__lib_1_1NCLKF.html#a8fa90de14ea4fa4125882bd49d101888',1,'mrs_lib::NCLKF::x_t()'],['../classmrs__lib_1_1NCLKF__partial.html#afaae66f623e768b19c0160fb21be9373',1,'mrs_lib::NCLKF_partial::x_t()'],['../classmrs__lib_1_1Repredictor.html#ac9550981d03dc3c898dcbd39c4bc461f',1,'mrs_lib::Repredictor::x_t()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#a5c2992c6bde2dd8f3bdc7673fc3977da',1,'mrs_lib::RepredictorAloamgarm::x_t()'],['../classmrs__lib_1_1RHEIV.html#a6482f5ff13cbfaef9f8dc86912c1258d',1,'mrs_lib::RHEIV::x_t()'],['../classmrs__lib_1_1UKF.html#a5ab9d25f7b2470c7abeacda7f8b80630',1,'mrs_lib::UKF::x_t()']]], + ['xq_5ft_385',['xq_t',['../classmrs__lib_1_1NCLKF__partial.html#a50092f2c99a521668dfd3211c999441c',1,'mrs_lib::NCLKF_partial']]], + ['xs_5ft_386',['xs_t',['../classmrs__lib_1_1RHEIV.html#aee3df85ac46e5b29259f8898388324ec',1,'mrs_lib::RHEIV']]] +]; diff --git a/search/all_18.html b/search/all_18.html new file mode 100644 index 00000000..540cdb6a --- /dev/null +++ b/search/all_18.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_18.js b/search/all_18.js new file mode 100644 index 00000000..a092e9a5 --- /dev/null +++ b/search/all_18.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['yaw_387',['yaw',['../classmrs__lib_1_1EulerAttitude.html#ab29c3b0fb567107c23eff485e8f2578d',1,'mrs_lib::EulerAttitude']]] +]; diff --git a/search/all_19.html b/search/all_19.html new file mode 100644 index 00000000..14e13e7d --- /dev/null +++ b/search/all_19.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_19.js b/search/all_19.js new file mode 100644 index 00000000..12cbc52d --- /dev/null +++ b/search/all_19.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['z_5ft_388',['z_t',['../classmrs__lib_1_1DKF.html#ad919f1d7a6f5d8be7361a8336aa6fd85',1,'mrs_lib::DKF::z_t()'],['../classmrs__lib_1_1KalmanFilter.html#a0825f38a6a4ddc522239bb7bf6279737',1,'mrs_lib::KalmanFilter::z_t()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#ae7fc4baaa223bf1ccebebc20c4b02bcc',1,'mrs_lib::KalmanFilterAloamGarm::z_t()'],['../classmrs__lib_1_1LKF.html#af4318056f5e0c024651bb882b60ec640',1,'mrs_lib::LKF::z_t()'],['../classmrs__lib_1_1NCLKF.html#a80db36613d09068f8daa0dc7e735dc64',1,'mrs_lib::NCLKF::z_t()'],['../classmrs__lib_1_1NCLKF__partial.html#ad5308432a3010edabc4598a92786fad5',1,'mrs_lib::NCLKF_partial::z_t()'],['../classmrs__lib_1_1Repredictor.html#a4f12cadd7f0377eccb70b8d61e7ee8e3',1,'mrs_lib::Repredictor::z_t()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#a3e265f15f9b8b031af819d1d2045909b',1,'mrs_lib::RepredictorAloamgarm::z_t()'],['../classmrs__lib_1_1RHEIV.html#a8e01ed1580572ec20f0230d9bfe5273f',1,'mrs_lib::RHEIV::z_t()'],['../classmrs__lib_1_1UKF.html#a7a68877ffa7bd8bb10f16d1f104e0a73',1,'mrs_lib::UKF::z_t()'],['../classmrs__lib_1_1UKF.html#a06a3fae37e8a0613d8169b638c4c0001',1,'mrs_lib::UKF::Z_t()']]], + ['zs_5ft_389',['zs_t',['../classmrs__lib_1_1RHEIV.html#a3b4e40932aae907ae8185df7703d5677',1,'mrs_lib::RHEIV']]] +]; diff --git a/search/all_1a.html b/search/all_1a.html new file mode 100644 index 00000000..233281a1 --- /dev/null +++ b/search/all_1a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_1a.js b/search/all_1a.js new file mode 100644 index 00000000..078ab795 --- /dev/null +++ b/search/all_1a.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['_7eatomicscopeflag_390',['~AtomicScopeFlag',['../classmrs__lib_1_1AtomicScopeFlag.html#aafdf61c0af0bffada120eec2a8c858b1',1,'mrs_lib::AtomicScopeFlag']]], + ['_7ebatchvisualizer_391',['~BatchVisualizer',['../classmrs__lib_1_1BatchVisualizer.html#a83a3baa46f7a3c22079a1d80aaed4459',1,'mrs_lib::BatchVisualizer']]], + ['_7econe_392',['~Cone',['../classmrs__lib_1_1geometry_1_1Cone.html#ae687be891abfb2db67245cd2c13f8586',1,'mrs_lib::geometry::Cone']]], + ['_7ecuboid_393',['~Cuboid',['../classmrs__lib_1_1geometry_1_1Cuboid.html#a5a78508d282bd8d273d97f3055ae0357',1,'mrs_lib::geometry::Cuboid']]], + ['_7ecylinder_394',['~Cylinder',['../classmrs__lib_1_1geometry_1_1Cylinder.html#a9a558196740fd2be133a3c2df7173f4f',1,'mrs_lib::geometry::Cylinder']]], + ['_7eellipse_395',['~Ellipse',['../classmrs__lib_1_1geometry_1_1Ellipse.html#a973caa18f7b0c2e41b263a4267914650',1,'mrs_lib::geometry::Ellipse']]], + ['_7epublisherhandler_396',['~PublisherHandler',['../classmrs__lib_1_1PublisherHandler.html#a9acaa1ef56768636f2163c75dd9e307e',1,'mrs_lib::PublisherHandler']]], + ['_7epublisherhandler_5fimpl_397',['~PublisherHandler_impl',['../classmrs__lib_1_1PublisherHandler__impl.html#a685a159577dfe363423c58a91ba92ac6',1,'mrs_lib::PublisherHandler_impl']]], + ['_7eray_398',['~Ray',['../classmrs__lib_1_1geometry_1_1Ray.html#ad79e6fdb9416510694f14fd92ca41c7a',1,'mrs_lib::geometry::Ray']]], + ['_7erectangle_399',['~Rectangle',['../classmrs__lib_1_1geometry_1_1Rectangle.html#a66d9286f92d6f8ea5c7ebc7400cb29be',1,'mrs_lib::geometry::Rectangle']]], + ['_7escopetimer_400',['~ScopeTimer',['../classmrs__lib_1_1ScopeTimer.html#a243e048e46a8ef623b60c465dc7ee102',1,'mrs_lib::ScopeTimer']]], + ['_7escopetimerlogger_401',['~ScopeTimerLogger',['../classmrs__lib_1_1ScopeTimerLogger.html#a0152ea8087d16a05027e66c44d99662e',1,'mrs_lib::ScopeTimerLogger']]], + ['_7eserviceclienthandler_402',['~ServiceClientHandler',['../classmrs__lib_1_1ServiceClientHandler.html#ad796fc7f9044bdeeacdf549faa1d2f48',1,'mrs_lib::ServiceClientHandler']]], + ['_7eserviceclienthandler_5fimpl_403',['~ServiceClientHandler_impl',['../classmrs__lib_1_1ServiceClientHandler__impl.html#a2d906a4c237db032edfb7578d0eb2be1',1,'mrs_lib::ServiceClientHandler_impl']]], + ['_7ethreadtimer_404',['~ThreadTimer',['../classmrs__lib_1_1ThreadTimer.html#a175a2bcce428cfca8bbf3f4ef836f4ed',1,'mrs_lib::ThreadTimer']]], + ['_7etriangle_405',['~Triangle',['../classmrs__lib_1_1geometry_1_1Triangle.html#ad5cc0e9eb09f9f4900f94fa1908b60f3',1,'mrs_lib::geometry::Triangle']]] +]; diff --git a/search/all_2.html b/search/all_2.html new file mode 100644 index 00000000..b26d9165 --- /dev/null +++ b/search/all_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 00000000..4e3a235d --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['c_36',['c',['../classmrs__lib_1_1geometry_1_1Triangle.html#aff6f8fb09fb5e7d4ebf2116142b85638',1,'mrs_lib::geometry::Triangle::c()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a9cd35540a57a2b0663a2a4b360e02d8c',1,'mrs_lib::geometry::Rectangle::c()']]], + ['c_5ft_37',['C_t',['../classmrs__lib_1_1JLKF.html#af34d34f55cb8804bd4e873a16c9e9a08',1,'mrs_lib::JLKF']]], + ['call_38',['call',['../classmrs__lib_1_1ServiceClientHandler__impl.html#a50394dc3190eafbce4c58b20823942d6',1,'mrs_lib::ServiceClientHandler_impl::call(ServiceType &srv)'],['../classmrs__lib_1_1ServiceClientHandler__impl.html#a35cc1c54991d1eb2801e2dfd205e1ef0',1,'mrs_lib::ServiceClientHandler_impl::call(ServiceType &srv, const int &attempts)'],['../classmrs__lib_1_1ServiceClientHandler__impl.html#aecd6585588ea75d444577651591fb847',1,'mrs_lib::ServiceClientHandler_impl::call(ServiceType &srv, const int &attempts, const double &repeat_delay)'],['../classmrs__lib_1_1ServiceClientHandler.html#acd827db26db5d8e1f310769509176fe2',1,'mrs_lib::ServiceClientHandler::call(ServiceType &srv)'],['../classmrs__lib_1_1ServiceClientHandler.html#a7eee51ebff7a805d425673ddc166d489',1,'mrs_lib::ServiceClientHandler::call(ServiceType &srv, const int &attempts)'],['../classmrs__lib_1_1ServiceClientHandler.html#afdf41e0cf6b2fa0941ee0ae703facc71',1,'mrs_lib::ServiceClientHandler::call(ServiceType &srv, const int &attempts, const double &repeat_delay)']]], + ['callasync_39',['callAsync',['../classmrs__lib_1_1ServiceClientHandler__impl.html#a39ed1a2c10f97d75447224bd9cb9e968',1,'mrs_lib::ServiceClientHandler_impl::callAsync(ServiceType &srv)'],['../classmrs__lib_1_1ServiceClientHandler__impl.html#acbc6113b775545e89e7fa4fd41cf15ed',1,'mrs_lib::ServiceClientHandler_impl::callAsync(ServiceType &srv, const int &attempts)'],['../classmrs__lib_1_1ServiceClientHandler__impl.html#ae15fc00b04219ae241e03c0973a00c5a',1,'mrs_lib::ServiceClientHandler_impl::callAsync(ServiceType &srv, const int &attempts, const double &repeat_delay)'],['../classmrs__lib_1_1ServiceClientHandler.html#aa7f3a5d1566aa2a361594797f162ca0d',1,'mrs_lib::ServiceClientHandler::callAsync(ServiceType &srv)'],['../classmrs__lib_1_1ServiceClientHandler.html#a390d8d24962c3efd849f44627b29387e',1,'mrs_lib::ServiceClientHandler::callAsync(ServiceType &srv, const int &attempts)'],['../classmrs__lib_1_1ServiceClientHandler.html#ac6babcda855d48bc3b8fc72f45f7672b',1,'mrs_lib::ServiceClientHandler::callAsync(ServiceType &srv, const int &attempts, const double &repeat_delay)']]], + ['center_40',['center',['../classmrs__lib_1_1geometry_1_1Triangle.html#a419f55d2c47dac6035495004fec746c9',1,'mrs_lib::geometry::Triangle::center()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#ab541a2748c4876234b4af0f3c220fb2d',1,'mrs_lib::geometry::Rectangle::center()'],['../classmrs__lib_1_1geometry_1_1Cuboid.html#a7ce6626c7018bdae2722073490c1729f',1,'mrs_lib::geometry::Cuboid::center()'],['../classmrs__lib_1_1geometry_1_1Ellipse.html#a058c83435e1cf0f393c1bde54e94f570',1,'mrs_lib::geometry::Ellipse::center()'],['../classmrs__lib_1_1geometry_1_1Cylinder.html#a766270eba57b916335ad0901fec74355',1,'mrs_lib::geometry::Cylinder::center()'],['../classmrs__lib_1_1geometry_1_1Cone.html#a2553c04b3dfef8dfceb938699e11f432',1,'mrs_lib::geometry::Cone::center()']]], + ['check_41',['check',['../classmrs__lib_1_1MedianFilter.html#a518d744f114ad6d0b2591d3804f6f095',1,'mrs_lib::MedianFilter']]], + ['checkpoint_42',['checkpoint',['../classmrs__lib_1_1ScopeTimer.html#acbb378343cba8f94ef228024d7a4b938',1,'mrs_lib::ScopeTimer']]], + ['clear_43',['clear',['../classmrs__lib_1_1MedianFilter.html#a533c6e194f991a9c11b9e2aadf7087a5',1,'mrs_lib::MedianFilter']]], + ['clearbuffers_44',['clearBuffers',['../classmrs__lib_1_1BatchVisualizer.html#a317a263d7a57b88805a3d264976b4c9f',1,'mrs_lib::BatchVisualizer']]], + ['clearvisuals_45',['clearVisuals',['../classmrs__lib_1_1BatchVisualizer.html#aacda752bbfd192279da0fe15f001b0bb',1,'mrs_lib::BatchVisualizer']]], + ['cone_46',['Cone',['../classmrs__lib_1_1geometry_1_1Cone.html',1,'mrs_lib::geometry::Cone'],['../classmrs__lib_1_1geometry_1_1Cone.html#a27103a8552d930ae3a3a2513990d9399',1,'mrs_lib::geometry::Cone::Cone()'],['../classmrs__lib_1_1geometry_1_1Cone.html#a078bc613852240cbf2a0adb086d3d127',1,'mrs_lib::geometry::Cone::Cone(Eigen::Vector3d origin_point, double angle, double height, Eigen::Vector3d orientation)']]], + ['construct_5fobject_47',['construct_object',['../namespacemrs__lib.html#a6bd2a4b1c7a370ecf5abcb082d68f02f',1,'mrs_lib']]], + ['containertostring_48',['containerToString',['../namespacemrs__lib.html#adcd658b38c38786fa906e95b1252393a',1,'mrs_lib::containerToString(const Iterator begin, const Iterator end, const std::string &delimiter=", ")'],['../namespacemrs__lib.html#a10c2af0f8c317177ca6abca5fd80a52a',1,'mrs_lib::containerToString(const Iterator begin, const Iterator end, const char *delimiter)'],['../namespacemrs__lib.html#a1c0c2c8502894646615382a9134c866a',1,'mrs_lib::containerToString(const Container &cont, const std::string &delimiter=", ")'],['../namespacemrs__lib.html#ad5bd70829aedd3ff4a67d8902855eed9',1,'mrs_lib::containerToString(const Container &cont, const char *delimiter=", ")']]], + ['convert_49',['convert',['../structmrs__lib_1_1geometry_1_1cyclic.html#a872202b166f48d3759cd58cc57242f5f',1,'mrs_lib::geometry::cyclic::convert(const cyclic &what)'],['../structmrs__lib_1_1geometry_1_1cyclic.html#aa86da042144ee34330e4cef57b410f58',1,'mrs_lib::geometry::cyclic::convert() const'],['../namespacemrs__lib.html#a66ab536759b8cab264138c098008c9ca',1,'mrs_lib::convert()']]], + ['correct_50',['correct',['../classmrs__lib_1_1JLKF.html#a6aa1475ecb42a4ee97e8d7e93cb5c523',1,'mrs_lib::JLKF::correct()'],['../classmrs__lib_1_1KalmanFilter.html#a66c1e0d2e496f304a4f6166e7b894aac',1,'mrs_lib::KalmanFilter::correct()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#a3e541e3ec53df99c77f8cc7031728d6f',1,'mrs_lib::KalmanFilterAloamGarm::correct()'],['../classmrs__lib_1_1LKF.html#a8ba4552b6fa909e5d899d2fe8c8fdaa5',1,'mrs_lib::LKF::correct()'],['../classmrs__lib_1_1NCUKF.html#ab12dfb8b6ad4c831c761327a3be2d814',1,'mrs_lib::NCUKF::correct()'],['../classmrs__lib_1_1UKF.html#ad31a0a6b6c1ea433daa0bae83e6fb6e4',1,'mrs_lib::UKF::correct()']]], + ['correctline_51',['correctLine',['../classmrs__lib_1_1DKF.html#a7e5d887496dea33a60b8cf2a0acc5fec',1,'mrs_lib::DKF']]], + ['createroutine_52',['createRoutine',['../classmrs__lib_1_1Profiler.html#aaf170ec3c6f67e11931cde978a5d3750',1,'mrs_lib::Profiler::createRoutine(std::string name, double expected_rate, double threshold, ros::TimerEvent event)'],['../classmrs__lib_1_1Profiler.html#a631e75be501cf4353dc8578bd9f66029',1,'mrs_lib::Profiler::createRoutine(std::string name)']]], + ['cross_53',['cross',['../misc_8h.html#aedd0e70cfd555703b53c469312d56293',1,'mrs_lib::geometry']]], + ['cuboid_54',['Cuboid',['../classmrs__lib_1_1geometry_1_1Cuboid.html',1,'mrs_lib::geometry::Cuboid'],['../classmrs__lib_1_1geometry_1_1Cuboid.html#a31a698a34b8443596be58a06f3046c79',1,'mrs_lib::geometry::Cuboid::Cuboid()'],['../classmrs__lib_1_1geometry_1_1Cuboid.html#a1dfbd69913658cddfc2394d8cfed8215',1,'mrs_lib::geometry::Cuboid::Cuboid(Eigen::Vector3d p0, Eigen::Vector3d p1, Eigen::Vector3d p2, Eigen::Vector3d p3, Eigen::Vector3d p4, Eigen::Vector3d p5, Eigen::Vector3d p6, Eigen::Vector3d p7)'],['../classmrs__lib_1_1geometry_1_1Cuboid.html#adcacc925347e73dbfd81529842ff3c21',1,'mrs_lib::geometry::Cuboid::Cuboid(std::vector< Eigen::Vector3d > points)'],['../classmrs__lib_1_1geometry_1_1Cuboid.html#a34b3cc64de7244e0b3ac2f71cdb22d95',1,'mrs_lib::geometry::Cuboid::Cuboid(Eigen::Vector3d center, Eigen::Vector3d size, Eigen::Quaterniond orientation)']]], + ['cyclic_55',['cyclic',['../structmrs__lib_1_1geometry_1_1cyclic.html',1,'mrs_lib::geometry::cyclic< flt, spec >'],['../structmrs__lib_1_1geometry_1_1cyclic.html#ab366578641265f73655d1edc023cc2c7',1,'mrs_lib::geometry::cyclic::cyclic()'],['../structmrs__lib_1_1geometry_1_1cyclic.html#ae0cfbde43f9fa6a3f26f1e4cf8184d30',1,'mrs_lib::geometry::cyclic::cyclic(const flt val)'],['../structmrs__lib_1_1geometry_1_1cyclic.html#a9ca52b4d47969ec56057b8217f201ab9',1,'mrs_lib::geometry::cyclic::cyclic(const cyclic &other)'],['../structmrs__lib_1_1geometry_1_1cyclic.html#ad40f88cb0dab7a684335f3403a9df7b0',1,'mrs_lib::geometry::cyclic::cyclic(const spec &other)']]], + ['cyclic_2eh_56',['cyclic.h',['../cyclic_8h.html',1,'']]], + ['cyclic_3c_20double_2c_20degrees_20_3e_57',['cyclic< double, degrees >',['../structmrs__lib_1_1geometry_1_1cyclic.html',1,'mrs_lib::geometry']]], + ['cyclic_3c_20double_2c_20radians_20_3e_58',['cyclic< double, radians >',['../structmrs__lib_1_1geometry_1_1cyclic.html',1,'mrs_lib::geometry']]], + ['cyclic_3c_20double_2c_20sdegrees_20_3e_59',['cyclic< double, sdegrees >',['../structmrs__lib_1_1geometry_1_1cyclic.html',1,'mrs_lib::geometry']]], + ['cyclic_3c_20double_2c_20sradians_20_3e_60',['cyclic< double, sradians >',['../structmrs__lib_1_1geometry_1_1cyclic.html',1,'mrs_lib::geometry']]], + ['cyclic_3c_20float_2c_20degrees_20_3e_61',['cyclic< float, degrees >',['../structmrs__lib_1_1geometry_1_1cyclic.html',1,'mrs_lib::geometry']]], + ['cyclic_5fexample_2ecpp_62',['cyclic_example.cpp',['../cyclic__example_8cpp.html',1,'']]], + ['cylinder_63',['Cylinder',['../classmrs__lib_1_1geometry_1_1Cylinder.html',1,'mrs_lib::geometry::Cylinder'],['../classmrs__lib_1_1geometry_1_1Cylinder.html#ae4b5f3500ae892f398ab88f5e545e0aa',1,'mrs_lib::geometry::Cylinder::Cylinder()'],['../classmrs__lib_1_1geometry_1_1Cylinder.html#a868fdc0baa204d3bf78d614b532aa32e',1,'mrs_lib::geometry::Cylinder::Cylinder(Eigen::Vector3d center, double radius, double height, Eigen::Quaterniond orientation)']]] +]; diff --git a/search/all_3.html b/search/all_3.html new file mode 100644 index 00000000..b61b96f8 --- /dev/null +++ b/search/all_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 00000000..8868ab24 --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['d_64',['d',['../classmrs__lib_1_1geometry_1_1Rectangle.html#aec6ae68b84c5a24580068fbc70a9452d',1,'mrs_lib::geometry::Rectangle']]], + ['d_5ft_65',['D_t',['../classmrs__lib_1_1JLKF.html#ac047c1625da963988acfc47edc200a57',1,'mrs_lib::JLKF']]], + ['degrees_66',['degrees',['../structmrs__lib_1_1geometry_1_1degrees.html',1,'mrs_lib::geometry::degrees'],['../structdegrees.html',1,'degrees']]], + ['diff_67',['diff',['../structmrs__lib_1_1geometry_1_1cyclic.html#aa5b1c6f8e1ab47b374f10a1a96de910b',1,'mrs_lib::geometry::cyclic']]], + ['direction_68',['direction',['../classmrs__lib_1_1geometry_1_1Ray.html#a01b7ff2bb88b61c178f4991c8cd847bf',1,'mrs_lib::geometry::Ray::direction()'],['../classmrs__lib_1_1geometry_1_1Cone.html#aa973eb3025776015d9e542af7aea730f',1,'mrs_lib::geometry::Cone::direction()']]], + ['directioncast_69',['directionCast',['../classmrs__lib_1_1geometry_1_1Ray.html#ab8ea82597cf6d0eb1e72105c13f41fed',1,'mrs_lib::geometry::Ray']]], + ['dist_70',['dist',['../structmrs__lib_1_1geometry_1_1cyclic.html#a9eb4b1ce4c4307d6bed9642bbf52133e',1,'mrs_lib::geometry::cyclic::dist()'],['../misc_8h.html#a53aed2b4889c7574f51b590d0a602722',1,'mrs_lib::geometry::dist(const vec2_t &a, const vec2_t &b)'],['../misc_8h.html#ae00d8eaf9c43e838e245454ef7c290f4',1,'mrs_lib::geometry::dist(const vec3_t &a, const vec3_t &b)']]], + ['dkf_71',['DKF',['../classmrs__lib_1_1DKF.html',1,'mrs_lib::DKF'],['../classmrs__lib_1_1DKF.html#a75bd345a8f4e3856d35d23d3b85b12cd',1,'mrs_lib::DKF::DKF()'],['../classmrs__lib_1_1DKF.html#a68c0d27c7ae1897c6b54cea9e75b95ec',1,'mrs_lib::DKF::DKF(const A_t &A, const B_t &B)']]], + ['dynamic_5fpublisher_2eh_72',['dynamic_publisher.h',['../dynamic__publisher_8h.html',1,'']]], + ['dynamic_5freconfigure_5fmgr_2eh_73',['dynamic_reconfigure_mgr.h',['../dynamic__reconfigure__mgr_8h.html',1,'']]], + ['dynamicpublisher_74',['DynamicPublisher',['../classmrs__lib_1_1DynamicPublisher.html',1,'mrs_lib::DynamicPublisher'],['../classmrs__lib_1_1DynamicPublisher.html#a2c671b4d99d4bb6bde12e7a1d8717687',1,'mrs_lib::DynamicPublisher::DynamicPublisher()'],['../classmrs__lib_1_1DynamicPublisher.html#a6a17d49f4d7203f8b8693c6ceb2fb1d9',1,'mrs_lib::DynamicPublisher::DynamicPublisher(const ros::NodeHandle &nh)']]], + ['dynamicreconfiguremgr_75',['DynamicReconfigureMgr',['../classmrs__lib_1_1DynamicReconfigureMgr.html',1,'mrs_lib']]], + ['dzdx_5ft_76',['dzdx_t',['../classmrs__lib_1_1RHEIV.html#abec4cb102b681ff3ec39786dc1d2bd4b',1,'mrs_lib::RHEIV']]], + ['dzdxs_5ft_77',['dzdxs_t',['../classmrs__lib_1_1RHEIV.html#ad85f14fb415e2fbe69ad05db0dc56e7b',1,'mrs_lib::RHEIV']]] +]; diff --git a/search/all_4.html b/search/all_4.html new file mode 100644 index 00000000..06de1550 --- /dev/null +++ b/search/all_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 00000000..956d3cf4 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['eigenvector_5fexception_78',['eigenvector_exception',['../structmrs__lib_1_1eigenvector__exception.html',1,'mrs_lib']]], + ['ellipse_79',['Ellipse',['../classmrs__lib_1_1geometry_1_1Ellipse.html',1,'mrs_lib::geometry::Ellipse'],['../classmrs__lib_1_1geometry_1_1Ellipse.html#ab891e8f86df11bb34f0571ebeb136c2a',1,'mrs_lib::geometry::Ellipse::Ellipse()'],['../classmrs__lib_1_1geometry_1_1Ellipse.html#ad64c67ccd7e0c21b5698a6791adf6831',1,'mrs_lib::geometry::Ellipse::Ellipse(Eigen::Vector3d center, Eigen::Quaterniond orientation, double a, double b)']]], + ['eta_5ft_80',['eta_t',['../classmrs__lib_1_1RHEIV.html#a238b7a1a44cb7711756bd7b94a11797d',1,'mrs_lib::RHEIV']]], + ['eulerattitude_81',['EulerAttitude',['../classmrs__lib_1_1EulerAttitude.html',1,'mrs_lib::EulerAttitude'],['../classmrs__lib_1_1EulerAttitude.html#ac4da09217c4956043801841737da8521',1,'mrs_lib::EulerAttitude::EulerAttitude()']]], + ['eulerformatexception_82',['EulerFormatException',['../structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException.html',1,'mrs_lib::AttitudeConverter']]], + ['example_2ecpp_83',['example.cpp',['../dynamic__publisher_2example_8cpp.html',1,'(Global Namespace)'],['../lkf_2example_8cpp.html',1,'(Global Namespace)'],['../param__loader_2example_8cpp.html',1,'(Global Namespace)'],['../repredictor_2example_8cpp.html',1,'(Global Namespace)'],['../rheiv_2example_8cpp.html',1,'(Global Namespace)'],['../subscribe__handler_2example_8cpp.html',1,'(Global Namespace)'],['../ukf_2example_8cpp.html',1,'(Global Namespace)'],['../vector__converter_2example_8cpp.html',1,'(Global Namespace)']]], + ['extravertices_84',['ExtraVertices',['../structmrs__lib_1_1Polygon_1_1ExtraVertices.html',1,'mrs_lib::Polygon']]] +]; diff --git a/search/all_5.html b/search/all_5.html new file mode 100644 index 00000000..2544c4e5 --- /dev/null +++ b/search/all_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 00000000..8b3be133 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['f_5fdzdx_5ft_85',['f_dzdx_t',['../classmrs__lib_1_1RHEIV.html#ac5b425f7782114173db5a275bea2c871',1,'mrs_lib::RHEIV']]], + ['f_5fz_5ft_86',['f_z_t',['../classmrs__lib_1_1RHEIV.html#abfea65ce9c912fcde3e805a66dc8ca42',1,'mrs_lib::RHEIV']]], + ['fit_87',['fit',['../classmrs__lib_1_1RHEIV.html#aad00da516e55bb60661b5cf234487932',1,'mrs_lib::RHEIV::fit(const xs_t &xs, const Ps_t &Ps)'],['../classmrs__lib_1_1RHEIV.html#a9eaa3b7a946a9c590326d3b47295d728',1,'mrs_lib::RHEIV::fit(const T_it1 &xs_begin, const T_it1 &xs_end, const T_it2 &Ps_begin, const T_it2 &Ps_end)']]], + ['fit_5fals_88',['fit_ALS',['../classmrs__lib_1_1RHEIV.html#a2123ee2ffa07063a8a50275b998874ca',1,'mrs_lib::RHEIV']]], + ['frame_5ffrom_89',['frame_from',['../classmrs__lib_1_1Transformer.html#a0a440d4cd248304525a05e8cfa9662f7',1,'mrs_lib::Transformer::frame_from(const geometry_msgs::TransformStamped &msg)'],['../classmrs__lib_1_1Transformer.html#a7a53d960ee4b76ea943d9c19d23f2e95',1,'mrs_lib::Transformer::frame_from(geometry_msgs::TransformStamped &msg)']]], + ['frame_5fto_90',['frame_to',['../classmrs__lib_1_1Transformer.html#a4f4befc33e5518afa01026b7955c1e2b',1,'mrs_lib::Transformer::frame_to(const geometry_msgs::TransformStamped &msg)'],['../classmrs__lib_1_1Transformer.html#a34792e38e397efc72701898ff22114cc',1,'mrs_lib::Transformer::frame_to(geometry_msgs::TransformStamped &msg)']]], + ['full_91',['full',['../classmrs__lib_1_1MedianFilter.html#acdd73f7ffc9868eb6a05e7b6aea35d85',1,'mrs_lib::MedianFilter']]] +]; diff --git a/search/all_6.html b/search/all_6.html new file mode 100644 index 00000000..43f14eab --- /dev/null +++ b/search/all_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 00000000..de5b35b5 --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,32 @@ +var searchData= +[ + ['get_5fals_5festimate_92',['get_ALS_estimate',['../classmrs__lib_1_1RHEIV.html#a96de075c76bf79a411606d762e4b9728',1,'mrs_lib::RHEIV']]], + ['get_5flast_5festimate_93',['get_last_estimate',['../classmrs__lib_1_1RHEIV.html#ac7f24b984bcfdee4f21de1206942f986',1,'mrs_lib::RHEIV']]], + ['get_5fmutexed_94',['get_mutexed',['../namespacemrs__lib.html#aaf62529e79b5d131ea5c0fedee10b9ca',1,'mrs_lib::get_mutexed(std::mutex &mut, Args &... args)'],['../namespacemrs__lib.html#aa3a541823230c37a69e51d4e90aa54e0',1,'mrs_lib::get_mutexed(std::mutex &mut, T &arg)']]], + ['get_5fset_5fmutexed_95',['get_set_mutexed',['../namespacemrs__lib.html#ae41b720a78b36db5ac51d8213972d001',1,'mrs_lib']]], + ['getcap_96',['getCap',['../classmrs__lib_1_1geometry_1_1Cylinder.html#a9730caea8c6bd44467038a8e04212fe6',1,'mrs_lib::geometry::Cylinder::getCap()'],['../classmrs__lib_1_1geometry_1_1Cone.html#a2e0546bb5ccb22ee88f1056dccc9a488',1,'mrs_lib::geometry::Cone::getCap()']]], + ['getextrinsicrpy_97',['getExtrinsicRPY',['../classmrs__lib_1_1AttitudeConverter.html#a0a9b9b0d146b4ccdc50c9a9037aec346',1,'mrs_lib::AttitudeConverter']]], + ['getheading_98',['getHeading',['../classmrs__lib_1_1AttitudeConverter.html#a6efdbb896bca9d52abdafb2eec0daf48',1,'mrs_lib::AttitudeConverter::getHeading()'],['../namespacemrs__lib.html#a193b468ac0f1b874af53c64ea0400236',1,'mrs_lib::getHeading(const geometry_msgs::Pose &data)'],['../namespacemrs__lib.html#a4c4a63d0de925cfa92316f6b5be78169',1,'mrs_lib::getHeading(const geometry_msgs::PoseConstPtr &data)'],['../namespacemrs__lib.html#ab57f24ac15517d030da375dfd6b27f2a',1,'mrs_lib::getHeading(const geometry_msgs::PoseWithCovariance &data)'],['../namespacemrs__lib.html#a0006b1926f70e598a4f22d0a4d0fd177',1,'mrs_lib::getHeading(const geometry_msgs::PoseWithCovarianceConstPtr &data)'],['../namespacemrs__lib.html#a482e880bcf945677389dcab02597e90f',1,'mrs_lib::getHeading(const nav_msgs::Odometry &data)'],['../namespacemrs__lib.html#aba8b3d81b8855577fbe90fc9a2f84fb6',1,'mrs_lib::getHeading(const nav_msgs::OdometryConstPtr &data)'],['../namespacemrs__lib.html#ad3594a3b11dd4b67c42c25e3caba896e',1,'mrs_lib::getHeading(const mrs_msgs::TrackerCommand &data)'],['../namespacemrs__lib.html#adfa03f341e40b1999bc66cdf066b714e',1,'mrs_lib::getHeading(const mrs_msgs::TrackerCommandConstPtr &data)'],['../namespacemrs__lib.html#af4481d1d612b63a2c63f9e2dac6aaa3c',1,'mrs_lib::getHeading(const mrs_msgs::Reference &data)'],['../namespacemrs__lib.html#a0285b59825283d220c6b3501853a2b28',1,'mrs_lib::getHeading(const mrs_msgs::ReferenceConstPtr &data)'],['../namespacemrs__lib.html#a58888855de6c5e0e9c0e9d9340299e54',1,'mrs_lib::getHeading(const mrs_msgs::ReferenceStamped &data)'],['../namespacemrs__lib.html#acfd8813200df68fad24ad3051f6b4a3d',1,'mrs_lib::getHeading(const mrs_msgs::ReferenceStampedConstPtr &data)']]], + ['getheadingexception_99',['GetHeadingException',['../structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException.html',1,'mrs_lib::AttitudeConverter']]], + ['getheadingrate_100',['getHeadingRate',['../classmrs__lib_1_1AttitudeConverter.html#ab3ac6086b34f743ac5e78249640eeddd',1,'mrs_lib::AttitudeConverter']]], + ['getintrinsicrpy_101',['getIntrinsicRPY',['../classmrs__lib_1_1AttitudeConverter.html#abe03466ce1c2aefb74d402a3f1433693',1,'mrs_lib::AttitudeConverter']]], + ['getlifetime_102',['getLifetime',['../classmrs__lib_1_1ScopeTimer.html#abe8dc75be918b3a2ca7bbb043a022106',1,'mrs_lib::ScopeTimer']]], + ['getlogfilepath_103',['getLogFilepath',['../classmrs__lib_1_1ScopeTimerLogger.html#addb114f39d72c3c3ee2ea8a4074cf455',1,'mrs_lib::ScopeTimerLogger']]], + ['getmsg_104',['getMsg',['../classmrs__lib_1_1SubscribeHandler.html#a19a708c3f200ccfac2695a649b9d6e77',1,'mrs_lib::SubscribeHandler']]], + ['getnumsubscribers_105',['getNumSubscribers',['../classmrs__lib_1_1PublisherHandler__impl.html#a2043d0a61e0ff0dbd0acd6a64f1e4bef',1,'mrs_lib::PublisherHandler_impl::getNumSubscribers()'],['../classmrs__lib_1_1PublisherHandler.html#acae5a82536022514c6a2cefa2f7980b1',1,'mrs_lib::PublisherHandler::getNumSubscribers()']]], + ['getpitch_106',['getPitch',['../classmrs__lib_1_1AttitudeConverter.html#a599afad1265aaa6fd32d518e4de7817f',1,'mrs_lib::AttitudeConverter']]], + ['getpose_107',['getPose',['../namespacemrs__lib.html#a1cd3887061c0b071a29dbbfe1b8a11dd',1,'mrs_lib::getPose(const nav_msgs::Odometry &data)'],['../namespacemrs__lib.html#acb6bfcfa0d9432d2184852b4f4d2694b',1,'mrs_lib::getPose(const nav_msgs::OdometryConstPtr &data)']]], + ['getposition_108',['getPosition',['../namespacemrs__lib.html#aafe68a11e627c33f976dac00f49edb03',1,'mrs_lib::getPosition(const geometry_msgs::Pose &data)'],['../namespacemrs__lib.html#a6ee4630b5dd76e9c67f00e7f4ce35806',1,'mrs_lib::getPosition(const geometry_msgs::PoseConstPtr &data)'],['../namespacemrs__lib.html#a4a813c8d2b7a92090ef94ed0ccc1f2d7',1,'mrs_lib::getPosition(const geometry_msgs::PoseWithCovariance &data)'],['../namespacemrs__lib.html#a2f32a3fa1e335cf1c33833ef33838f36',1,'mrs_lib::getPosition(const geometry_msgs::PoseWithCovarianceConstPtr &data)'],['../namespacemrs__lib.html#af2a47eec589a6a62199f9fa2b4879d5b',1,'mrs_lib::getPosition(const geometry_msgs::TwistConstPtr &data)'],['../namespacemrs__lib.html#addf482f99d48899ccf29a9e89eb5771e',1,'mrs_lib::getPosition(const geometry_msgs::TwistWithCovarianceConstPtr &data)'],['../namespacemrs__lib.html#a6beef9718623cdac64b8b5ea35c8be4a',1,'mrs_lib::getPosition(const nav_msgs::Odometry &data)'],['../namespacemrs__lib.html#a52981dc7eab7573aedf1d447cb40b1fb',1,'mrs_lib::getPosition(const nav_msgs::OdometryConstPtr &data)'],['../namespacemrs__lib.html#a4c51dc5a87098b8ecd7d7e78599be7b8',1,'mrs_lib::getPosition(const mrs_msgs::TrackerCommand &data)'],['../namespacemrs__lib.html#af85023d127c2383e6825ab7e4f7da1fb',1,'mrs_lib::getPosition(const mrs_msgs::TrackerCommandConstPtr &data)'],['../namespacemrs__lib.html#a8f78d985e8d87688482e5e30c948b067',1,'mrs_lib::getPosition(const mrs_msgs::Reference &data)'],['../namespacemrs__lib.html#aa767373d0d66e633d754d5fa4db1afca',1,'mrs_lib::getPosition(const mrs_msgs::ReferenceConstPtr &data)'],['../namespacemrs__lib.html#aa1c31d89c94806084e8da6fecd4ff575',1,'mrs_lib::getPosition(const mrs_msgs::ReferenceStamped &data)'],['../namespacemrs__lib.html#ae4a1dc71e3e48fa26fa8d2fed9211c8c',1,'mrs_lib::getPosition(const mrs_msgs::ReferenceStampedConstPtr &data)']]], + ['getprefix_109',['getPrefix',['../classmrs__lib_1_1ParamLoader.html#a68eb35df103229cd2de7416252723bf8',1,'mrs_lib::ParamLoader']]], + ['getrectangle_110',['getRectangle',['../classmrs__lib_1_1geometry_1_1Cuboid.html#a4279ad2916689b183e9647fbede9bcfb',1,'mrs_lib::geometry::Cuboid']]], + ['getroll_111',['getRoll',['../classmrs__lib_1_1AttitudeConverter.html#a82b32b4b7ff4de5bcf78b168f0c3c569',1,'mrs_lib::AttitudeConverter']]], + ['gettransform_112',['getTransform',['../classmrs__lib_1_1Transformer.html#a3a29dfb385f1b9c4deee695181880995',1,'mrs_lib::Transformer::getTransform(const std::string &from_frame, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))'],['../classmrs__lib_1_1Transformer.html#a73ce6b60499d9ed491859a444f8d8afd',1,'mrs_lib::Transformer::getTransform(const std::string &from_frame, const ros::Time &from_stamp, const std::string &to_frame, const ros::Time &to_stamp, const std::string &fixed_frame)']]], + ['getvectorx_113',['getVectorX',['../classmrs__lib_1_1AttitudeConverter.html#a131f7ba8484bd0c7465594625d19ae89',1,'mrs_lib::AttitudeConverter']]], + ['getvectory_114',['getVectorY',['../classmrs__lib_1_1AttitudeConverter.html#a901ca23ee140e6d42027b242f0dfac8b',1,'mrs_lib::AttitudeConverter']]], + ['getvectorz_115',['getVectorZ',['../classmrs__lib_1_1AttitudeConverter.html#a4853f4582b8af4f224726d15a18e9fbc',1,'mrs_lib::AttitudeConverter']]], + ['getvelocity_116',['getVelocity',['../namespacemrs__lib.html#a6e64da46123dd4cc793419585a66e54c',1,'mrs_lib::getVelocity(const geometry_msgs::Twist &data)'],['../namespacemrs__lib.html#a0669aa00311586cf9882f1bccff07d16',1,'mrs_lib::getVelocity(const geometry_msgs::TwistWithCovariance &data)'],['../namespacemrs__lib.html#aab2704bf692a6cfc5674272fc6ff06ca',1,'mrs_lib::getVelocity(const nav_msgs::Odometry &data)'],['../namespacemrs__lib.html#af8c731a97cd737d35d9524ec60f4ee2f',1,'mrs_lib::getVelocity(const nav_msgs::OdometryConstPtr &data)'],['../namespacemrs__lib.html#ade26d077c3e43c9f201a2e8d73dba2b7',1,'mrs_lib::getVelocity(const mrs_msgs::TrackerCommand &data)'],['../namespacemrs__lib.html#ad278e1089b273b3e0216977ee8df8ac5',1,'mrs_lib::getVelocity(const mrs_msgs::TrackerCommandConstPtr &data)']]], + ['getxyz_117',['getXYZ',['../namespacemrs__lib.html#a9ad821408d076d95467fc662b1dac1ab',1,'mrs_lib::getXYZ(const geometry_msgs::Point &data)'],['../namespacemrs__lib.html#a8fc9b477f93c9b8694fb8f90956ae830',1,'mrs_lib::getXYZ(const geometry_msgs::PointConstPtr &data)'],['../namespacemrs__lib.html#af79ccb18192e6ff1f1fc7fdafdee0a0b',1,'mrs_lib::getXYZ(const geometry_msgs::Vector3 &data)'],['../namespacemrs__lib.html#a32ae31e9589cb55806ec32edcf79f928',1,'mrs_lib::getXYZ(const geometry_msgs::Vector3ConstPtr &data)']]], + ['getyaw_118',['getYaw',['../classmrs__lib_1_1AttitudeConverter.html#ab2e8185898d05e5c2c9f7c7bf597f9a3',1,'mrs_lib::AttitudeConverter::getYaw()'],['../namespacemrs__lib.html#af1993419f7b19d38bdbfe3ceb5b7350f',1,'mrs_lib::getYaw(const geometry_msgs::Pose &data)'],['../namespacemrs__lib.html#acc3f167cadca01d5e92be7dc43078feb',1,'mrs_lib::getYaw(const geometry_msgs::PoseConstPtr &data)'],['../namespacemrs__lib.html#a13152460c1973b54f71f230340b20494',1,'mrs_lib::getYaw(const geometry_msgs::PoseWithCovariance &data)'],['../namespacemrs__lib.html#a2aa307f37eb6f60fc4d360adb8559946',1,'mrs_lib::getYaw(const geometry_msgs::PoseWithCovarianceConstPtr &data)'],['../namespacemrs__lib.html#af17cc11983807fb3d6bd17092fa30fc4',1,'mrs_lib::getYaw(const nav_msgs::Odometry &data)'],['../namespacemrs__lib.html#af62f21eed6f44954b6aefbf0afbbf2e0',1,'mrs_lib::getYaw(const nav_msgs::OdometryConstPtr &data)']]], + ['getyawrateintrinsic_119',['getYawRateIntrinsic',['../classmrs__lib_1_1AttitudeConverter.html#afa7a3ddc0e143fe90bd966a6ba9f2913',1,'mrs_lib::AttitudeConverter']]], + ['gps_5fconversions_2eh_120',['gps_conversions.h',['../gps__conversions_8h.html',1,'']]] +]; diff --git a/search/all_7.html b/search/all_7.html new file mode 100644 index 00000000..af52f82a --- /dev/null +++ b/search/all_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 00000000..69032f41 --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['h_121',['H',['../classmrs__lib_1_1LKF.html#a552fedb99ce43148c212c809dcd8191f',1,'mrs_lib::LKF::H()'],['../classmrs__lib_1_1geometry_1_1Cylinder.html#a730fee04b106aa4ec3fe08be6bb90751',1,'mrs_lib::geometry::Cylinder::h()'],['../classmrs__lib_1_1geometry_1_1Cone.html#a319fa2045f6d56c94f3fa198bd7ae7fc',1,'mrs_lib::geometry::Cone::h()']]], + ['h_5ft_122',['H_t',['../classmrs__lib_1_1DKF.html#aaee9d5c96d921fa7854f24460edf58ab',1,'mrs_lib::DKF::H_t()'],['../classmrs__lib_1_1JLKF.html#a7599ec962b434fe92534a58d48cdfacb',1,'mrs_lib::JLKF::H_t()'],['../classmrs__lib_1_1LKF.html#a78733a13f277480c5c8c42228d440df7',1,'mrs_lib::LKF::H_t()'],['../classmrs__lib_1_1NCLKF.html#a92eb1e6f9fe04297bb54fdfbdc74d460',1,'mrs_lib::NCLKF::H_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a12079d59b1f0e949c535e478d8e1d88c',1,'mrs_lib::NCLKF_partial::H_t()']]], + ['half_5frange_123',['half_range',['../structmrs__lib_1_1geometry_1_1cyclic.html#a78cd52e438886de479af6455e97da2b6',1,'mrs_lib::geometry::cyclic']]], + ['hasmsg_124',['hasMsg',['../classmrs__lib_1_1SubscribeHandler.html#a9c6bcd07e10b60c70f02de2c6d5f632e',1,'mrs_lib::SubscribeHandler']]], + ['haversin_125',['haversin',['../misc_8h.html#a61d1dcf236aac255d384e35efd67370e',1,'mrs_lib::geometry']]], + ['headingfromrot_126',['headingFromRot',['../misc_8h.html#ac5072a0343d0cfe703ddce456e7c5756',1,'mrs_lib::geometry']]], + ['hq_5ft_127',['Hq_t',['../classmrs__lib_1_1NCLKF__partial.html#a6f311605a0470b290c6917d555bb4c9a',1,'mrs_lib::NCLKF_partial']]] +]; diff --git a/search/all_8.html b/search/all_8.html new file mode 100644 index 00000000..cf2b5df9 --- /dev/null +++ b/search/all_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 00000000..99294681 --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['iir_5ffilter_2eh_128',['iir_filter.h',['../iir__filter_8h.html',1,'']]], + ['iirfilter_129',['IirFilter',['../classmrs__lib_1_1IirFilter.html',1,'mrs_lib']]], + ['imagepubliserdata_130',['ImagePubliserData',['../structmrs__lib_1_1ImagePubliserData.html',1,'mrs_lib']]], + ['imagepublisher_131',['ImagePublisher',['../classmrs__lib_1_1ImagePublisher.html',1,'mrs_lib']]], + ['impl_132',['impl',['../classDynamicPublisher_1_1impl.html',1,'DynamicPublisher::impl'],['../classmrs__lib_1_1SubscribeHandler_1_1Impl.html',1,'mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >'],['../classThreadTimer_1_1Impl.html',1,'ThreadTimer::Impl']]], + ['implthreadsafe_133',['ImplThreadsafe',['../classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html',1,'mrs_lib::SubscribeHandler']]], + ['indices_5ft_134',['indices_t',['../classmrs__lib_1_1NCLKF__partial.html#a93afd8063033124c0698426cd03d4507',1,'mrs_lib::NCLKF_partial']]], + ['initialize_135',['initialize',['../classmrs__lib_1_1ServiceClientHandler.html#adff9526494a62051bf864ef6a7178450',1,'mrs_lib::ServiceClientHandler']]], + ['initialized_136',['initialized',['../classmrs__lib_1_1MedianFilter.html#a843ddc70b6daf92fa91f225fab5b36f7',1,'mrs_lib::MedianFilter']]], + ['inrange_137',['inRange',['../structmrs__lib_1_1geometry_1_1cyclic.html#ae7ff9988f0d3ef6cf3bd724f3e29273b',1,'mrs_lib::geometry::cyclic']]], + ['interp_138',['interp',['../structmrs__lib_1_1geometry_1_1cyclic.html#afe8344d8017f4ed883ecc28379465d99',1,'mrs_lib::geometry::cyclic']]], + ['interpunwrapped_139',['interpUnwrapped',['../structmrs__lib_1_1geometry_1_1cyclic.html#a1c2837eea4d0635833a786d571922d76',1,'mrs_lib::geometry::cyclic']]], + ['intersection_140',['Intersection',['../structmrs__lib_1_1Intersection.html',1,'mrs_lib']]], + ['intersectionray_141',['intersectionRay',['../classmrs__lib_1_1geometry_1_1Triangle.html#a94238065a0e8d0c27135f55e1daa4ed3',1,'mrs_lib::geometry::Triangle::intersectionRay()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a0b92252c39c755b3a7cba989fbb5c854',1,'mrs_lib::geometry::Rectangle::intersectionRay()'],['../classmrs__lib_1_1geometry_1_1Cuboid.html#adfde2a501c9806bd6e6e99dcf0cac6ff',1,'mrs_lib::geometry::Cuboid::intersectionRay()']]], + ['invalidattitudeexception_142',['InvalidAttitudeException',['../structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException.html',1,'mrs_lib::AttitudeConverter']]], + ['inverse_143',['inverse',['../classmrs__lib_1_1Transformer.html#a17440196c1c894e265f77b0b9112336a',1,'mrs_lib::Transformer']]], + ['inverse_5fexception_144',['inverse_exception',['../structmrs__lib_1_1JLKF_1_1inverse__exception.html',1,'mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >::inverse_exception'],['../structmrs__lib_1_1LKF_1_1inverse__exception.html',1,'mrs_lib::LKF< n_states, n_inputs, n_measurements >::inverse_exception'],['../structmrs__lib_1_1UKF_1_1inverse__exception.html',1,'mrs_lib::UKF< n_states, n_inputs, n_measurements >::inverse_exception']]], + ['invhaversin_145',['invHaversin',['../misc_8h.html#a600a2f5b7f1e654339f7177f9a64934c',1,'mrs_lib::geometry']]], + ['isfacing_146',['isFacing',['../classmrs__lib_1_1geometry_1_1Rectangle.html#a62a1b7d39bd141d4c38d8079d43ffe02',1,'mrs_lib::geometry::Rectangle']]] +]; diff --git a/search/all_9.html b/search/all_9.html new file mode 100644 index 00000000..690785a5 --- /dev/null +++ b/search/all_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 00000000..9590faf2 --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['jlkf_147',['JLKF',['../classmrs__lib_1_1JLKF.html',1,'mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >'],['../classmrs__lib_1_1JLKF.html#a0c21f3599fe8ccfb1164ee204a0ae606',1,'mrs_lib::JLKF::JLKF()']]] +]; diff --git a/search/all_a.html b/search/all_a.html new file mode 100644 index 00000000..f2f3d3a3 --- /dev/null +++ b/search/all_a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 00000000..83dabe4a --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['k_148',['k',['../classmrs__lib_1_1RHEIV.html#a8d5b4a0df9a65eaf7127a6d93b38bf5e',1,'mrs_lib::RHEIV']]], + ['k_5ft_149',['K_t',['../classmrs__lib_1_1DKF.html#a87d3b7863fbd0b392f9c831fcaf8e345',1,'mrs_lib::DKF::K_t()'],['../classmrs__lib_1_1JLKF.html#a20be98f26b355640d078f196f9495fd5',1,'mrs_lib::JLKF::K_t()'],['../classmrs__lib_1_1LKF.html#a33b80f4e1b9b7eb7243b71a4ae6d99c6',1,'mrs_lib::LKF::K_t()'],['../classmrs__lib_1_1NCLKF.html#ae2d30fe948b17723e0a89450044f8f93',1,'mrs_lib::NCLKF::K_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a47b90d150c6147ab30ae1866b66ea49c',1,'mrs_lib::NCLKF_partial::K_t()'],['../classmrs__lib_1_1UKF.html#ace5416fd8ac52fba822337bceaf751a7',1,'mrs_lib::UKF::K_t()']]], + ['kalman_5ffilter_2eh_150',['kalman_filter.h',['../kalman__filter_8h.html',1,'']]], + ['kalman_5ffilter_5faloamgarm_2eh_151',['kalman_filter_aloamgarm.h',['../kalman__filter__aloamgarm_8h.html',1,'']]], + ['kalmanfilter_152',['KalmanFilter',['../classmrs__lib_1_1KalmanFilter.html',1,'mrs_lib']]], + ['kalmanfilteraloamgarm_153',['KalmanFilterAloamGarm',['../classmrs__lib_1_1KalmanFilterAloamGarm.html',1,'mrs_lib']]], + ['kq_5ft_154',['Kq_t',['../classmrs__lib_1_1NCLKF__partial.html#a459ce71ac559eb881415485df4d622fa',1,'mrs_lib::NCLKF_partial']]] +]; diff --git a/search/all_b.html b/search/all_b.html new file mode 100644 index 00000000..14f34036 --- /dev/null +++ b/search/all_b.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 00000000..aadef3ae --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['l_155',['l',['../classmrs__lib_1_1RHEIV.html#a1495045a8f4fca1f045da6866f5e62b0',1,'mrs_lib::RHEIV']]], + ['lastmsgtime_156',['lastMsgTime',['../classmrs__lib_1_1SubscribeHandler.html#ab96777b29e74827ad109346504565f9b',1,'mrs_lib::SubscribeHandler']]], + ['lkf_157',['LKF',['../classmrs__lib_1_1LKF.html',1,'mrs_lib::LKF< n_states, n_inputs, n_measurements >'],['../classmrs__lib_1_1LKF.html#aecd505e79c0102609c9e5ffbd91a7cc3',1,'mrs_lib::LKF::LKF()'],['../classmrs__lib_1_1LKF.html#a8bb9eee4045a176b56c28bc7e0113fa0',1,'mrs_lib::LKF::LKF(const A_t &A, const B_t &B, const H_t &H)']]], + ['lkf_3c_203_2c_20_2d1_2c_202_20_3e_158',['LKF< 3, -1, 2 >',['../classmrs__lib_1_1LKF.html',1,'mrs_lib']]], + ['lkf_3c_203_2c_201_2c_201_20_3e_159',['LKF< 3, 1, 1 >',['../classmrs__lib_1_1LKF.html',1,'mrs_lib']]], + ['lkf_5fmrs_5fodom_160',['LKF_MRS_odom',['../classmrs__lib_1_1LKF__MRS__odom.html',1,'mrs_lib']]], + ['loadedsuccessfully_161',['loadedSuccessfully',['../classmrs__lib_1_1ParamLoader.html#ad49130b893f09bc2247e2bc37a41f6d5',1,'mrs_lib::ParamLoader']]], + ['loadmatrixarray_162',['loadMatrixArray',['../classmrs__lib_1_1ParamLoader.html#af5397147ce0a3ecaf0e1f178a9435183',1,'mrs_lib::ParamLoader::loadMatrixArray(const std::string &name, std::vector< MatrixX< T >> &mat)'],['../classmrs__lib_1_1ParamLoader.html#aaeaec89a76f044b2e5fe2883ae768942',1,'mrs_lib::ParamLoader::loadMatrixArray(const std::string &name, std::vector< MatrixX< T >> &mat, const std::vector< MatrixX< T >> &default_value)']]], + ['loadmatrixarray2_163',['loadMatrixArray2',['../classmrs__lib_1_1ParamLoader.html#af7ffe39a26bd4a457ab01b83e5d5795d',1,'mrs_lib::ParamLoader::loadMatrixArray2(const std::string &name)'],['../classmrs__lib_1_1ParamLoader.html#a46bb91300eaa5c0d06d462b950f92897',1,'mrs_lib::ParamLoader::loadMatrixArray2(const std::string &name, const std::vector< MatrixX< T >> &default_value)']]], + ['loadmatrixdynamic_164',['loadMatrixDynamic',['../classmrs__lib_1_1ParamLoader.html#aabecb03ea3643752ddc3154e6c58d390',1,'mrs_lib::ParamLoader::loadMatrixDynamic(const std::string &name, MatrixX< T > &mat, int rows, int cols)'],['../classmrs__lib_1_1ParamLoader.html#a6b1fbdb2c1ed41ac533a67abad8638d9',1,'mrs_lib::ParamLoader::loadMatrixDynamic(const std::string &name, MatrixX< T > &mat, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)']]], + ['loadmatrixdynamic2_165',['loadMatrixDynamic2',['../classmrs__lib_1_1ParamLoader.html#a89bdbb61a1de508cc0f247f234d824d6',1,'mrs_lib::ParamLoader::loadMatrixDynamic2(const std::string &name, int rows, int cols)'],['../classmrs__lib_1_1ParamLoader.html#a99673cb2d8f39c18da5e6db967238ec9',1,'mrs_lib::ParamLoader::loadMatrixDynamic2(const std::string &name, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)']]], + ['loadmatrixstatic_166',['loadMatrixStatic',['../classmrs__lib_1_1ParamLoader.html#a03dc26f5fad92b0fb8b7437c074b23aa',1,'mrs_lib::ParamLoader::loadMatrixStatic(const std::string &name, Eigen::Matrix< T, rows, cols > &mat)'],['../classmrs__lib_1_1ParamLoader.html#a19bc5cbd5c3ee7d4614555dfe3d96001',1,'mrs_lib::ParamLoader::loadMatrixStatic(const std::string &name, Eigen::Matrix< T, rows, cols > &mat, const Eigen::MatrixBase< Derived > &default_value)'],['../classmrs__lib_1_1ParamLoader.html#aafc3bb716f3728d5a1b1cfc45b0d3ddf',1,'mrs_lib::ParamLoader::loadMatrixStatic(const std::string &name, MatrixX< T > &mat, int rows, int cols)'],['../classmrs__lib_1_1ParamLoader.html#af96b60fd7bce95d3e1d3aa351bccba9b',1,'mrs_lib::ParamLoader::loadMatrixStatic(const std::string &name, MatrixX< T > &mat, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)']]], + ['loadmatrixstatic2_167',['loadMatrixStatic2',['../classmrs__lib_1_1ParamLoader.html#a2a78e5b64d8681a46976a6e9d0486b1a',1,'mrs_lib::ParamLoader::loadMatrixStatic2(const std::string &name)'],['../classmrs__lib_1_1ParamLoader.html#ab6b1b2b00e8548b092893afcfbeee79f',1,'mrs_lib::ParamLoader::loadMatrixStatic2(const std::string &name, const Eigen::MatrixBase< Derived > &default_value)'],['../classmrs__lib_1_1ParamLoader.html#af06e1f2bdf94f8a18a19ae3e77a0f99a',1,'mrs_lib::ParamLoader::loadMatrixStatic2(const std::string &name, int rows, int cols)'],['../classmrs__lib_1_1ParamLoader.html#af8ab00da18479e583adf86983e77c577',1,'mrs_lib::ParamLoader::loadMatrixStatic2(const std::string &name, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)']]], + ['loadparam_168',['loadParam',['../classmrs__lib_1_1ParamLoader.html#a9e55225fa7d9de0e948b2e64494eb229',1,'mrs_lib::ParamLoader::loadParam(const std::string &name, T &out_value, const T &default_value)'],['../classmrs__lib_1_1ParamLoader.html#af5d9f2ac1549f9a7f03a04b9cebf9fed',1,'mrs_lib::ParamLoader::loadParam(const std::string &name, T &out_value)'],['../classmrs__lib_1_1ParamLoader.html#a5368f22f9c1eee287b39bcc91b8d8f42',1,'mrs_lib::ParamLoader::loadParam(const std::string &name, ros::Duration &out, const ros::Duration &default_value)'],['../classmrs__lib_1_1ParamLoader.html#ae4893dc129c5f6fd07fc26f6c03279cd',1,'mrs_lib::ParamLoader::loadParam(const std::string &name, ros::Duration &out)'],['../classmrs__lib_1_1ParamLoader.html#a472acaab459f4318dc20df8416b6023d',1,'mrs_lib::ParamLoader::loadParam(const std::string &name, std_msgs::ColorRGBA &out, const std_msgs::ColorRGBA &default_value={})'],['../classmrs__lib_1_1ParamLoader.html#a6ee4d78d716c92045a38c40d6ae41c4d',1,'mrs_lib::ParamLoader::loadParam(const std::string &name, MatrixX< T > &mat, const MatrixX< T > &default_value)']]], + ['loadparam2_169',['loadParam2',['../classmrs__lib_1_1ParamLoader.html#a7b31603059669efa75b00d8e73bc163a',1,'mrs_lib::ParamLoader::loadParam2(const std::string &name, const T &default_value)'],['../classmrs__lib_1_1ParamLoader.html#ab8a37a3b88261e120d6ff36a6aebf960',1,'mrs_lib::ParamLoader::loadParam2(const std::string &name)'],['../classmrs__lib_1_1ParamLoader.html#a708d62a49386efe8334d8c13af2d8f85',1,'mrs_lib::ParamLoader::loadParam2(const std::string &name, const std_msgs::ColorRGBA &default_value={})'],['../classmrs__lib_1_1ParamLoader.html#a080f2c2605b42219c63d62d0fd8e0948',1,'mrs_lib::ParamLoader::loadParam2(const std::string &name, const MatrixX< T > &default_value)']]], + ['loadparamreusable_170',['loadParamReusable',['../classmrs__lib_1_1ParamLoader.html#add294058e4857eda6a8ece7e0b451390',1,'mrs_lib::ParamLoader::loadParamReusable(const std::string &name, T &out_value, const T &default_value)'],['../classmrs__lib_1_1ParamLoader.html#a31b36d7e1109d2c1d663122c689359c0',1,'mrs_lib::ParamLoader::loadParamReusable(const std::string &name, T &out_value)']]], + ['loadparamreusable2_171',['loadParamReusable2',['../classmrs__lib_1_1ParamLoader.html#ae3e15767c2e94a1f22a9205ae3f507f1',1,'mrs_lib::ParamLoader::loadParamReusable2(const std::string &name, const T &default_value)'],['../classmrs__lib_1_1ParamLoader.html#abe9a7f5aea80c8cdb2d624c12f098a90',1,'mrs_lib::ParamLoader::loadParamReusable2(const std::string &name)']]], + ['log_172',['log',['../classmrs__lib_1_1ScopeTimerLogger.html#a98f7fe29f151e4d0b88952530f40ef06',1,'mrs_lib::ScopeTimerLogger::log(const std::string &scope, const chrono_tp &time_start, const chrono_tp &time_end)'],['../classmrs__lib_1_1ScopeTimerLogger.html#a8f3794f5477960606a86543ddb708b1f',1,'mrs_lib::ScopeTimerLogger::log(const std::string &scope, const std::string &label_from, const std::string &label_to, const chrono_tp &time_start, const chrono_tp &time_end)']]], + ['loggingenabled_173',['loggingEnabled',['../classmrs__lib_1_1ScopeTimerLogger.html#aaf51a60a214ab18976a354c328fc9d09',1,'mrs_lib::ScopeTimerLogger']]], + ['lr_174',['lr',['../classmrs__lib_1_1RHEIV.html#af267a00d1631e4685e5a1451f2510ac0',1,'mrs_lib::RHEIV']]] +]; diff --git a/search/all_c.html b/search/all_c.html new file mode 100644 index 00000000..da60ab8d --- /dev/null +++ b/search/all_c.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 00000000..8b4e96cd --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['mrs_20libraries_175',['MRS libraries',['../index.html',1,'']]], + ['m_176',['m',['../classmrs__lib_1_1DKF.html#a266b963fd1ed94246fc413ecfa510e54',1,'mrs_lib::DKF::m()'],['../classmrs__lib_1_1KalmanFilter.html#a472b37319b5dabb8cd4e4146bd86b8bf',1,'mrs_lib::KalmanFilter::m()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#a336bd0445bfa4ca091dda05d0f83757b',1,'mrs_lib::KalmanFilterAloamGarm::m()'],['../classmrs__lib_1_1LKF.html#ab2132e00d769c35bf4c89760b1f7da2f',1,'mrs_lib::LKF::m()'],['../classmrs__lib_1_1NCLKF.html#a4b3f2c1a84f0e0000d3d191c9f337306',1,'mrs_lib::NCLKF::m()'],['../classmrs__lib_1_1NCLKF__partial.html#a748e915398e1ff3c09675bfcb1af7985',1,'mrs_lib::NCLKF_partial::m()'],['../classmrs__lib_1_1UKF.html#a81c0e0d290f9eb1aecd28b0e0fa3b7ce',1,'mrs_lib::UKF::m()']]], + ['math_2eh_177',['math.h',['../math_8h.html',1,'']]], + ['matherrorexception_178',['MathErrorException',['../structmrs__lib_1_1AttitudeConverter_1_1MathErrorException.html',1,'mrs_lib::AttitudeConverter']]], + ['median_179',['median',['../classmrs__lib_1_1MedianFilter.html#a53562ea9addbf12ba3cd257cdede4af6',1,'mrs_lib::MedianFilter']]], + ['median_5ffilter_2eh_180',['median_filter.h',['../median__filter_8h.html',1,'']]], + ['medianfilter_181',['MedianFilter',['../classmrs__lib_1_1MedianFilter.html',1,'mrs_lib::MedianFilter'],['../classmrs__lib_1_1MedianFilter.html#a6c6bd20d15d66535b900634396e99f51',1,'mrs_lib::MedianFilter::MedianFilter(const size_t buffer_length, const double min_value=-std::numeric_limits< double >::infinity(), const double max_value=std::numeric_limits< double >::infinity(), const double max_diff=std::numeric_limits< double >::infinity())'],['../classmrs__lib_1_1MedianFilter.html#ae810bd254e4fccfeb883b4585062f166',1,'mrs_lib::MedianFilter::MedianFilter()'],['../classmrs__lib_1_1MedianFilter.html#aa17291d605ef5364db2835745a2c669c',1,'mrs_lib::MedianFilter::MedianFilter(const MedianFilter &other)'],['../classmrs__lib_1_1MedianFilter.html#a46da8f440b739a1d01710104fc38611c',1,'mrs_lib::MedianFilter::MedianFilter(MedianFilter &&other)']]], + ['message_5fcallback_5ft_182',['message_callback_t',['../classmrs__lib_1_1SubscribeHandler.html#a38b7371b24896e5ea21f5a8dd2821cf6',1,'mrs_lib::SubscribeHandler']]], + ['message_5ftype_183',['message_type',['../classmrs__lib_1_1SubscribeHandler.html#aab546ccb302e3e05d8e97e9085f62b9a',1,'mrs_lib::SubscribeHandler::message_type()'],['../namespacemrs__lib.html#afe10d9f91cc2173fa3c30021514a5c12',1,'mrs_lib::message_type()']]], + ['minimum_184',['minimum',['../structmrs__lib_1_1geometry_1_1cyclic.html#ada8bf8d17bfa81025b75d5a4e1da8ac0',1,'mrs_lib::geometry::cyclic']]], + ['misc_2eh_185',['misc.h',['../misc_8h.html',1,'']]], + ['modelptr_186',['ModelPtr',['../classmrs__lib_1_1Repredictor.html#acb4a34d97aab3896de9565012a890381',1,'mrs_lib::Repredictor::ModelPtr()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#a7766d3dbccd04fcbe584cca6730153ca',1,'mrs_lib::RepredictorAloamgarm::ModelPtr()']]], + ['motorparams_5ft_187',['MotorParams_t',['../structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t.html',1,'mrs_lib::quadratic_throttle_model']]], + ['mrs_5flib_188',['mrs_lib',['../namespacemrs__lib.html',1,'']]], + ['mrstimer_189',['MRSTimer',['../classmrs__lib_1_1MRSTimer.html',1,'mrs_lib']]], + ['msg_5fextractor_2eh_190',['msg_extractor.h',['../msg__extractor_8h.html',1,'']]], + ['mutex_2eh_191',['mutex.h',['../mutex_8h.html',1,'']]], + ['mypoint_192',['MyPoint',['../structMyPoint.html',1,'']]] +]; diff --git a/search/all_d.html b/search/all_d.html new file mode 100644 index 00000000..bc376fec --- /dev/null +++ b/search/all_d.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 00000000..866c5bb2 --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['n_193',['n',['../classmrs__lib_1_1DKF.html#a1c8d43906017aca20230464f87c0a28c',1,'mrs_lib::DKF::n()'],['../classmrs__lib_1_1KalmanFilter.html#a33bade5cb8e189919bd7c5c7d81a75fd',1,'mrs_lib::KalmanFilter::n()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#a7b9714f54a6ec03679cf3af571e4219a',1,'mrs_lib::KalmanFilterAloamGarm::n()'],['../classmrs__lib_1_1LKF.html#a23db0a12382876c56c4f696119a38dfb',1,'mrs_lib::LKF::n()'],['../classmrs__lib_1_1NCLKF.html#a8e0f671100fb36a431a1d2f6ed1df7b9',1,'mrs_lib::NCLKF::n()'],['../classmrs__lib_1_1NCLKF__partial.html#afa31bda8d042554992676389d464cfd9',1,'mrs_lib::NCLKF_partial::n()'],['../classmrs__lib_1_1UKF.html#a42270573cc14c2339a46841a5d3e264e',1,'mrs_lib::UKF::n()']]], + ['nckf_5ftests_2ecpp_194',['nckf_tests.cpp',['../nckf__tests_8cpp.html',1,'']]], + ['nclkf_195',['NCLKF',['../classmrs__lib_1_1NCLKF.html',1,'mrs_lib::NCLKF< n_states, n_inputs, n_measurements >'],['../classmrs__lib_1_1NCLKF.html#a5f970519deaccdbb021df412645f26d5',1,'mrs_lib::NCLKF::NCLKF()'],['../classmrs__lib_1_1NCLKF.html#aa4dcb47ceca9f506407e14858567ea09',1,'mrs_lib::NCLKF::NCLKF(const A_t &A, const B_t &B, const H_t &H, const double l)']]], + ['nclkf_5fpartial_196',['NCLKF_partial',['../classmrs__lib_1_1NCLKF__partial.html',1,'mrs_lib::NCLKF_partial< n_states, n_inputs, n_measurements, n_norm_constrained_states >'],['../classmrs__lib_1_1NCLKF__partial.html#aabe13461dda8a89463ce87888fd6e428',1,'mrs_lib::NCLKF_partial::NCLKF_partial()'],['../classmrs__lib_1_1NCLKF__partial.html#a1c6b3f2a9bd2d7cafe652d1bb24872e7',1,'mrs_lib::NCLKF_partial::NCLKF_partial(const A_t &A, const B_t &B, const H_t &H, const double l, const indices_t &norm_constrained_indices)']]], + ['ncukf_197',['NCUKF',['../classmrs__lib_1_1NCUKF.html',1,'mrs_lib']]], + ['newmsg_198',['newMsg',['../classmrs__lib_1_1SubscribeHandler.html#a46bde5660a9480814caa801e2baf3cd3',1,'mrs_lib::SubscribeHandler']]], + ['nh_199',['nh',['../structmrs__lib_1_1SubscribeHandlerOptions.html#ac5f6fabbc933d7e3f9beba07b166c054',1,'mrs_lib::SubscribeHandlerOptions']]], + ['no_5fmessage_5ftimeout_200',['no_message_timeout',['../structmrs__lib_1_1SubscribeHandlerOptions.html#a5702cb78ed291f5e36c960d0f90bb35c',1,'mrs_lib::SubscribeHandlerOptions']]], + ['node_5fname_201',['node_name',['../structmrs__lib_1_1SubscribeHandlerOptions.html#a3d31e2d693f41df180cd6911a3fb8310',1,'mrs_lib::SubscribeHandlerOptions']]], + ['normal_202',['normal',['../classmrs__lib_1_1geometry_1_1Triangle.html#ac9b355e443d37f91d83ab76bbfa35aa6',1,'mrs_lib::geometry::Triangle::normal()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a5cf41dfd6e82f02c8bcc18bc134d235b',1,'mrs_lib::geometry::Rectangle::normal()']]], + ['notch_5ffilter_2eh_203',['notch_filter.h',['../notch__filter_8h.html',1,'']]], + ['notchfilter_204',['NotchFilter',['../classmrs__lib_1_1NotchFilter.html',1,'mrs_lib']]], + ['nq_205',['nq',['../classmrs__lib_1_1NCLKF__partial.html#a139afd8f356f87aa0faadea3e8878649',1,'mrs_lib::NCLKF_partial']]] +]; diff --git a/search/all_e.html b/search/all_e.html new file mode 100644 index 00000000..2e3c74dc --- /dev/null +++ b/search/all_e.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 00000000..8beec6ae --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['angleaxis_3c_20t_20_3e_206',['AngleAxis< T >',['../classmrs__lib_1_1AttitudeConverter.html#a10847ba4ce35fa86efbe5933ba488183',1,'mrs_lib::AttitudeConverter']]], + ['matrix3x3_207',['Matrix3x3',['../classmrs__lib_1_1AttitudeConverter.html#a123b85369560e858a9d3aba19a49227a',1,'mrs_lib::AttitudeConverter']]], + ['obj_5ft_208',['obj_t',['../structobj__t.html',1,'']]], + ['observation_5fmodel_5ft_209',['observation_model_t',['../classmrs__lib_1_1UKF.html#ac515ea8c688d7ee67250c384417f9ab9',1,'mrs_lib::UKF']]], + ['operator_20eulerattitude_210',['operator EulerAttitude',['../classmrs__lib_1_1AttitudeConverter.html#a03ef9a1c10a9963e650fa217f0f04707',1,'mrs_lib::AttitudeConverter']]], + ['operator_2b_211',['operator+',['../structmrs__lib_1_1geometry_1_1cyclic.html#a58ca734b0e19c5f25da90761303451b7',1,'mrs_lib::geometry::cyclic']]], + ['operator_2b_3d_212',['operator+=',['../structmrs__lib_1_1geometry_1_1cyclic.html#a0d797e1245025227ede866ab08bcc19f',1,'mrs_lib::geometry::cyclic']]], + ['operator_2d_213',['operator-',['../structmrs__lib_1_1geometry_1_1cyclic.html#a9d401b110dd9e5372ffa4951f073e794',1,'mrs_lib::geometry::cyclic']]], + ['operator_2d_3d_214',['operator-=',['../structmrs__lib_1_1geometry_1_1cyclic.html#ad45609e5fa890a79729b100231e427da',1,'mrs_lib::geometry::cyclic']]], + ['operator_3c_215',['operator<',['../cyclic_8h.html#a8bb4c24541320f151f1781100c789cd3',1,'mrs_lib::geometry']]], + ['operator_3c_3c_216',['operator<<',['../cyclic_8h.html#aebc05b8cec59b7a37a72024e26a449f7',1,'mrs_lib::geometry']]], + ['operator_3d_217',['operator=',['../structmrs__lib_1_1geometry_1_1cyclic.html#a1ff6b499102b0eb290b6d121284c51ce',1,'mrs_lib::geometry::cyclic::operator=(const flt nval)'],['../structmrs__lib_1_1geometry_1_1cyclic.html#ace7e2ff831cf60311e28a70035114bcd',1,'mrs_lib::geometry::cyclic::operator=(const cyclic &other)'],['../structmrs__lib_1_1geometry_1_1cyclic.html#a8c81dca050a406b4225e8816a1955fb2',1,'mrs_lib::geometry::cyclic::operator=(cyclic &&other)'],['../classmrs__lib_1_1MedianFilter.html#ab30170b4f0d029c66e0a616936c7b693',1,'mrs_lib::MedianFilter::operator=(const MedianFilter &other)'],['../classmrs__lib_1_1MedianFilter.html#acc63d667e153c07ea9481eb0b3d74c54',1,'mrs_lib::MedianFilter::operator=(MedianFilter &&other)'],['../classmrs__lib_1_1Profiler.html#ae054cd2655538ee7b4a0dec35aa0cf16',1,'mrs_lib::Profiler::operator=()'],['../classmrs__lib_1_1PublisherHandler.html#a23a8578213fd78347ebaa259ee17c218',1,'mrs_lib::PublisherHandler::operator=()'],['../classmrs__lib_1_1ServiceClientHandler.html#a03d184432cd8b51f683746e87b071bdb',1,'mrs_lib::ServiceClientHandler::operator=()'],['../classmrs__lib_1_1Transformer.html#a6c4c846758bf173c7aeb488c8ff773b1',1,'mrs_lib::Transformer::operator=()']]], + ['operator_3e_218',['operator>',['../cyclic_8h.html#a60745f66bbc41c3cb323c8b1c3f050d7',1,'mrs_lib::geometry']]], + ['orientation_219',['orientation',['../classmrs__lib_1_1geometry_1_1Ellipse.html#a65f59ca228eea37a914ce0d6d6695b2d',1,'mrs_lib::geometry::Ellipse::orientation()'],['../classmrs__lib_1_1geometry_1_1Cylinder.html#aa7eccea15c92f1df02fc48684bb4d219',1,'mrs_lib::geometry::Cylinder::orientation()']]], + ['origin_220',['origin',['../classmrs__lib_1_1geometry_1_1Cone.html#a35b559777042218051ff46c3b7353232',1,'mrs_lib::geometry::Cone']]], + ['quaternion_221',['Quaternion',['../classmrs__lib_1_1AttitudeConverter.html#abc1686c5d27246a937c661f313ca13d0',1,'mrs_lib::AttitudeConverter::Quaternion() const'],['../classmrs__lib_1_1AttitudeConverter.html#a4dd088014d1f15da217c960e8a9dbd6f',1,'mrs_lib::AttitudeConverter::Quaternion() const'],['../classmrs__lib_1_1AttitudeConverter.html#a7b6d71e47ec12e76f25823ad408c704c',1,'mrs_lib::AttitudeConverter::Quaternion() const']]], + ['quaternion_3c_20t_20_3e_222',['Quaternion< T >',['../classmrs__lib_1_1AttitudeConverter.html#a6db421976b5060c086f495f00edca314',1,'mrs_lib::AttitudeConverter']]], + ['transform_223',['Transform',['../classmrs__lib_1_1AttitudeConverter.html#a09cd3459f52f9071db33c1ac7a5161de',1,'mrs_lib::AttitudeConverter']]], + ['tuple_3c_20double_20_26_2c_20double_20_26_2c_20double_20_26_20_3e_224',['tuple< double &, double &, double & >',['../classmrs__lib_1_1AttitudeConverter.html#a8f7e3a434632e7546149d64b2ab2e191',1,'mrs_lib::AttitudeConverter']]], + ['vector3_225',['Vector3',['../classmrs__lib_1_1Vector3Converter.html#a6f6edf59403aded9e3bffcd603cce5c0',1,'mrs_lib::Vector3Converter::Vector3() const'],['../classmrs__lib_1_1Vector3Converter.html#a96b9daae53786acb4f52e09e8fb7bc8a',1,'mrs_lib::Vector3Converter::Vector3() const']]], + ['vector3d_226',['Vector3d',['../classmrs__lib_1_1Vector3Converter.html#a69c3a9a8dbcff2876e40d28022c019e3',1,'mrs_lib::Vector3Converter']]] +]; diff --git a/search/all_f.html b/search/all_f.html new file mode 100644 index 00000000..246f8ab1 --- /dev/null +++ b/search/all_f.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 00000000..7f16f176 --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,32 @@ +var searchData= +[ + ['loadparam2_3c_20ros_3a_3aduration_20_3e_227',['loadParam2< ros::Duration >',['../namespacemrs__lib.html#a5edbd3a77e55f8ab165500ca05ad26f4',1,'mrs_lib::loadParam2< ros::Duration >(const std::string &name, const ros::Duration &default_value)'],['../namespacemrs__lib.html#a3b3a11cf5354658548afb9fd6f241d72',1,'mrs_lib::loadParam2< ros::Duration >(const std::string &name)']]], + ['p_228',['p',['../classmrs__lib_1_1DKF.html#afffd4a1421cb0ca08f75cd10c7cc2c78',1,'mrs_lib::DKF::p()'],['../classmrs__lib_1_1KalmanFilter.html#a72ed6c241094ce2b25fca0a97679a4c7',1,'mrs_lib::KalmanFilter::p()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#aade8833d5835d0ee12be558e16fe595a',1,'mrs_lib::KalmanFilterAloamGarm::p()'],['../classmrs__lib_1_1LKF.html#a87db95f28f4834e801cd7fbd0e98e388',1,'mrs_lib::LKF::p()'],['../classmrs__lib_1_1NCLKF.html#adc5fb114b6abc3e2a72fbe4ed3ba0753',1,'mrs_lib::NCLKF::p()'],['../classmrs__lib_1_1NCLKF__partial.html#a2048d62a3e243b91802f6e85fcdcf2b3',1,'mrs_lib::NCLKF_partial::p()'],['../classmrs__lib_1_1UKF.html#a0042b2b7c0deb10b5bb2825f10c5d769',1,'mrs_lib::UKF::p()'],['../structmrs__lib_1_1KalmanFilter_1_1statecov__t.html#aa2747c6fd07bc3a4d9b2c153e38c11ff',1,'mrs_lib::KalmanFilter::statecov_t::P()'],['../structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html#a876ae3c9d4dafac63ddd0723fe351874',1,'mrs_lib::KalmanFilterAloamGarm::statecov_t::P()']]], + ['p1_229',['p1',['../classmrs__lib_1_1geometry_1_1Ray.html#a8591c6b82a120832a7ed349fbd90163a',1,'mrs_lib::geometry::Ray']]], + ['p2_230',['p2',['../classmrs__lib_1_1geometry_1_1Ray.html#a7c830a43aa9550ef6d7b798dcb69f3f5',1,'mrs_lib::geometry::Ray']]], + ['p_5ft_231',['P_t',['../classmrs__lib_1_1DKF.html#aa351bed9f3bdac26c6ed2526a5b2ac01',1,'mrs_lib::DKF::P_t()'],['../classmrs__lib_1_1KalmanFilter.html#a8f5e50ea6668129218bd4113f4ffdf6f',1,'mrs_lib::KalmanFilter::P_t()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#a9b8488ef81812059a366fcc2e92e04f6',1,'mrs_lib::KalmanFilterAloamGarm::P_t()'],['../classmrs__lib_1_1LKF.html#a5d5cee075e30da36ffb946cffcfca688',1,'mrs_lib::LKF::P_t()'],['../classmrs__lib_1_1NCLKF.html#a1448842265f0b39d5da536488d146db3',1,'mrs_lib::NCLKF::P_t()'],['../classmrs__lib_1_1NCLKF__partial.html#aef875cb026a1a0d8df31a8fc3f02e63b',1,'mrs_lib::NCLKF_partial::P_t()'],['../classmrs__lib_1_1Repredictor.html#aca5fb76c2e698ed1dd2c58e340adca58',1,'mrs_lib::Repredictor::P_t()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#a1f2bffb8cbea233b14036e016e8bb654',1,'mrs_lib::RepredictorAloamgarm::P_t()'],['../classmrs__lib_1_1RHEIV.html#a9adfedc8dfbe38ccf06f556481a6c5c9',1,'mrs_lib::RHEIV::P_t()'],['../classmrs__lib_1_1UKF.html#ac1128f5d7fa36305a52859a752a97fda',1,'mrs_lib::UKF::P_t()']]], + ['param_5floader_2eh_232',['param_loader.h',['../param__loader_8h.html',1,'']]], + ['paramloader_233',['ParamLoader',['../classmrs__lib_1_1ParamLoader.html',1,'mrs_lib::ParamLoader'],['../classmrs__lib_1_1ParamLoader.html#a26079fe045fe261add0548c40c5d3baa',1,'mrs_lib::ParamLoader::ParamLoader(const ros::NodeHandle &nh, bool printValues=true, std::string_view node_name=std::string())'],['../classmrs__lib_1_1ParamLoader.html#a09d03d4f79736e8269f66ba2f11356c5',1,'mrs_lib::ParamLoader::ParamLoader(const ros::NodeHandle &nh, std::string_view node_name)'],['../classmrs__lib_1_1ParamLoader.html#ac3de917c61f02060c4e28afb2765f71c',1,'mrs_lib::ParamLoader::ParamLoader(const std::string &filepath, const ros::NodeHandle &nh)']]], + ['paramprovider_234',['ParamProvider',['../classmrs__lib_1_1ParamProvider.html',1,'mrs_lib']]], + ['pdist_235',['pdist',['../structmrs__lib_1_1geometry_1_1cyclic.html#a51db20b50daabf98afae8bd77e3a3ac4',1,'mrs_lib::geometry::cyclic']]], + ['peekmsg_236',['peekMsg',['../classmrs__lib_1_1SubscribeHandler.html#a6638d8d589149edba21bf08fa571f18e',1,'mrs_lib::SubscribeHandler']]], + ['pinterp_237',['pinterp',['../structmrs__lib_1_1geometry_1_1cyclic.html#a9b314c2ffd8a73a5a944bcdb751fdeac',1,'mrs_lib::geometry::cyclic']]], + ['pinterpunwrapped_238',['pinterpUnwrapped',['../structmrs__lib_1_1geometry_1_1cyclic.html#a0d9809504c23cb0854df0b4ceb95f426',1,'mrs_lib::geometry::cyclic']]], + ['pitch_239',['pitch',['../classmrs__lib_1_1EulerAttitude.html#abbed482a509d21505dfd1e608cd362fe',1,'mrs_lib::EulerAttitude']]], + ['pointobstacle_240',['PointObstacle',['../classmrs__lib_1_1PointObstacle.html',1,'mrs_lib']]], + ['pointobstacleerror_241',['PointObstacleError',['../structmrs__lib_1_1SafetyZone_1_1PointObstacleError.html',1,'mrs_lib::SafetyZone']]], + ['polygon_242',['Polygon',['../classmrs__lib_1_1Polygon.html',1,'mrs_lib']]], + ['polygonobstacleerror_243',['PolygonObstacleError',['../structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError.html',1,'mrs_lib::SafetyZone']]], + ['predict_244',['predict',['../classmrs__lib_1_1JLKF.html#acb856c6a2d7378bc6abd46af99efe580',1,'mrs_lib::JLKF::predict()'],['../classmrs__lib_1_1KalmanFilter.html#a7c8e64828a78d1a680d1ef467633d9d5',1,'mrs_lib::KalmanFilter::predict()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#a139f8d4f64e9e45ca68b9141ecae8c99',1,'mrs_lib::KalmanFilterAloamGarm::predict()'],['../classmrs__lib_1_1LKF.html#af4027c4bef5dda2a12af1f728e92c45a',1,'mrs_lib::LKF::predict()'],['../classmrs__lib_1_1varstepLKF.html#ac1f671eb73017a1c05303e29ddf0c1f2',1,'mrs_lib::varstepLKF::predict()'],['../classmrs__lib_1_1UKF.html#a4c9c1e158bb4b6739b8bfdbdc1369c41',1,'mrs_lib::UKF::predict()']]], + ['predictto_245',['predictTo',['../classmrs__lib_1_1Repredictor.html#a018a96efcc5533e0e43b195cc23ee42e',1,'mrs_lib::Repredictor::predictTo(const ros::Time &to_stamp)'],['../classmrs__lib_1_1Repredictor.html#ac4bd7a77f3a9c73309108c35cad4936c',1,'mrs_lib::Repredictor::predictTo(const ros::Time &to_stamp)']]], + ['probit_246',['probit',['../namespacemrs__lib.html#a8b597ab1c70f0f92933e24e13f390bf5',1,'mrs_lib']]], + ['profiler_247',['Profiler',['../classmrs__lib_1_1Profiler.html',1,'mrs_lib::Profiler'],['../classmrs__lib_1_1Profiler.html#aeb0acb43639e4e29572b1ecbedf6029e',1,'mrs_lib::Profiler::Profiler()'],['../classmrs__lib_1_1Profiler.html#a1a61b447fb65e1d09a0bd6dab57c73eb',1,'mrs_lib::Profiler::Profiler(ros::NodeHandle &nh, std::string node_name, bool profiler_enabled)'],['../classmrs__lib_1_1Profiler.html#ac384b6aa30ce0f43ee8d38eaad93ca28',1,'mrs_lib::Profiler::Profiler(const Profiler &other)']]], + ['profiler_2eh_248',['profiler.h',['../profiler_8h.html',1,'']]], + ['projectpoint_249',['projectPoint',['../classmrs__lib_1_1geometry_1_1Cone.html#a80223a2934d899aead407545c044e279',1,'mrs_lib::geometry::Cone']]], + ['ps_5ft_250',['Ps_t',['../classmrs__lib_1_1RHEIV.html#aab24b461160051b3537f76e633d47d8d',1,'mrs_lib::RHEIV']]], + ['publish_251',['publish',['../classmrs__lib_1_1BatchVisualizer.html#a3b7e6b602bdaf7d42e1c48ea511aa93b',1,'mrs_lib::BatchVisualizer::publish()'],['../classmrs__lib_1_1DynamicPublisher.html#a57946b630bcf2892658f754ecb6b735d',1,'mrs_lib::DynamicPublisher::publish()'],['../classmrs__lib_1_1PublisherHandler__impl.html#a4404a3234f548fe9184ec43ac18c9671',1,'mrs_lib::PublisherHandler_impl::publish(const TopicType &msg)'],['../classmrs__lib_1_1PublisherHandler__impl.html#ad41ed622292e537101a2dac779c08f34',1,'mrs_lib::PublisherHandler_impl::publish(const boost::shared_ptr< TopicType > &msg)'],['../classmrs__lib_1_1PublisherHandler__impl.html#a80c0caa745661936409fdc93277e7453',1,'mrs_lib::PublisherHandler_impl::publish(const boost::shared_ptr< TopicType const > &msg)'],['../classmrs__lib_1_1PublisherHandler.html#a0c5bebc2848b0547048edb1297833290',1,'mrs_lib::PublisherHandler::publish(const TopicType &msg)'],['../classmrs__lib_1_1PublisherHandler.html#a3201fd4703f7e9cec24de7bc189356a5',1,'mrs_lib::PublisherHandler::publish(const boost::shared_ptr< TopicType > &msg)'],['../classmrs__lib_1_1PublisherHandler.html#ace9906a5cf9ae33115fc44af0e078f3f',1,'mrs_lib::PublisherHandler::publish(const boost::shared_ptr< TopicType const > &msg)']]], + ['publisher_5fhandler_2eh_252',['publisher_handler.h',['../publisher__handler_8h.html',1,'']]], + ['publisherhandler_253',['PublisherHandler',['../classmrs__lib_1_1PublisherHandler.html',1,'mrs_lib::PublisherHandler< TopicType >'],['../classmrs__lib_1_1PublisherHandler.html#aefafd64bd0d8a9b9717c94b76368fd0d',1,'mrs_lib::PublisherHandler::PublisherHandler(void)'],['../classmrs__lib_1_1PublisherHandler.html#a08abb836db076c390101880ff34b8fe8',1,'mrs_lib::PublisherHandler::PublisherHandler(const PublisherHandler &other)'],['../classmrs__lib_1_1PublisherHandler.html#a334376e25e8fb011ca27736cd2cf12b7',1,'mrs_lib::PublisherHandler::PublisherHandler(ros::NodeHandle &nh, const std::string &address, const unsigned int &buffer_size=1, const bool &latch=false, const double &rate=0)']]], + ['publisherhandler_5fimpl_254',['PublisherHandler_impl',['../classmrs__lib_1_1PublisherHandler__impl.html',1,'mrs_lib::PublisherHandler_impl< TopicType >'],['../classmrs__lib_1_1PublisherHandler__impl.html#ab6dfde5a454ce357957a2ea8618890fc',1,'mrs_lib::PublisherHandler_impl::PublisherHandler_impl(void)'],['../classmrs__lib_1_1PublisherHandler__impl.html#a9168a142f84bf96f73563fe5f3589ce7',1,'mrs_lib::PublisherHandler_impl::PublisherHandler_impl(ros::NodeHandle &nh, const std::string &address, const unsigned int &buffer_size=1, const bool &latch=false, const double &rate=0.0)']]], + ['pzz_5ft_255',['Pzz_t',['../classmrs__lib_1_1UKF.html#af11dc75b608a43930e8289c51e8ab7c6',1,'mrs_lib::UKF']]] +]; diff --git a/search/classes_0.html b/search/classes_0.html new file mode 100644 index 00000000..f7e4c14e --- /dev/null +++ b/search/classes_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 00000000..16acacb0 --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['atomicscopeflag_406',['AtomicScopeFlag',['../classmrs__lib_1_1AtomicScopeFlag.html',1,'mrs_lib']]], + ['attitudeconverter_407',['AttitudeConverter',['../classmrs__lib_1_1AttitudeConverter.html',1,'mrs_lib']]] +]; diff --git a/search/classes_1.html b/search/classes_1.html new file mode 100644 index 00000000..c7ff4b31 --- /dev/null +++ b/search/classes_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 00000000..90461d1c --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['batchvisualizer_408',['BatchVisualizer',['../classmrs__lib_1_1BatchVisualizer.html',1,'mrs_lib']]], + ['bordererror_409',['BorderError',['../structmrs__lib_1_1SafetyZone_1_1BorderError.html',1,'mrs_lib::SafetyZone']]] +]; diff --git a/search/classes_10.html b/search/classes_10.html new file mode 100644 index 00000000..abf37f53 --- /dev/null +++ b/search/classes_10.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_10.js b/search/classes_10.js new file mode 100644 index 00000000..391f46a2 --- /dev/null +++ b/search/classes_10.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['threadtimer_486',['ThreadTimer',['../classmrs__lib_1_1ThreadTimer.html',1,'mrs_lib']]], + ['time_5fpoint_487',['time_point',['../structmrs__lib_1_1ScopeTimer_1_1time__point.html',1,'mrs_lib::ScopeTimer']]], + ['timeoutmanager_488',['TimeoutManager',['../classmrs__lib_1_1TimeoutManager.html',1,'mrs_lib']]], + ['transformbroadcaster_489',['TransformBroadcaster',['../classmrs__lib_1_1TransformBroadcaster.html',1,'mrs_lib']]], + ['transformer_490',['Transformer',['../classmrs__lib_1_1Transformer.html',1,'mrs_lib']]], + ['triangle_491',['Triangle',['../classmrs__lib_1_1geometry_1_1Triangle.html',1,'mrs_lib::geometry']]], + ['tuple_5felement_3c_200_2c_20mrs_5flib_3a_3aattitudeconverter_20_3e_492',['tuple_element< 0, mrs_lib::AttitudeConverter >',['../structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4.html',1,'std']]], + ['tuple_5felement_3c_201_2c_20mrs_5flib_3a_3aattitudeconverter_20_3e_493',['tuple_element< 1, mrs_lib::AttitudeConverter >',['../structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4.html',1,'std']]], + ['tuple_5felement_3c_202_2c_20mrs_5flib_3a_3aattitudeconverter_20_3e_494',['tuple_element< 2, mrs_lib::AttitudeConverter >',['../structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4.html',1,'std']]], + ['tuple_5fsize_3c_20mrs_5flib_3a_3aattitudeconverter_20_3e_495',['tuple_size< mrs_lib::AttitudeConverter >',['../structstd_1_1tuple__size_3_01mrs__lib_1_1AttitudeConverter_01_4.html',1,'std']]] +]; diff --git a/search/classes_11.html b/search/classes_11.html new file mode 100644 index 00000000..29283b0f --- /dev/null +++ b/search/classes_11.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_11.js b/search/classes_11.js new file mode 100644 index 00000000..4a0a8ca3 --- /dev/null +++ b/search/classes_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ukf_496',['UKF',['../classmrs__lib_1_1UKF.html',1,'mrs_lib']]] +]; diff --git a/search/classes_12.html b/search/classes_12.html new file mode 100644 index 00000000..5353e463 --- /dev/null +++ b/search/classes_12.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_12.js b/search/classes_12.js new file mode 100644 index 00000000..2404d1f4 --- /dev/null +++ b/search/classes_12.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['varsteplkf_497',['varstepLKF',['../classmrs__lib_1_1varstepLKF.html',1,'mrs_lib']]], + ['vector3converter_498',['Vector3Converter',['../classmrs__lib_1_1Vector3Converter.html',1,'mrs_lib']]], + ['vectorconvertertest_499',['VectorConverterTest',['../classVectorConverterTest.html',1,'']]], + ['visualobject_500',['VisualObject',['../classmrs__lib_1_1VisualObject.html',1,'mrs_lib']]] +]; diff --git a/search/classes_13.html b/search/classes_13.html new file mode 100644 index 00000000..94ea6cbb --- /dev/null +++ b/search/classes_13.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_13.js b/search/classes_13.js new file mode 100644 index 00000000..91c11d11 --- /dev/null +++ b/search/classes_13.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['wrongheight_501',['WrongHeight',['../structmrs__lib_1_1PointObstacle_1_1WrongHeight.html',1,'mrs_lib::PointObstacle']]], + ['wrongnumberofcolumns_502',['WrongNumberOfColumns',['../structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns.html',1,'mrs_lib::Polygon']]], + ['wrongnumberofvertices_503',['WrongNumberOfVertices',['../structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices.html',1,'mrs_lib::Polygon']]], + ['wrongradius_504',['WrongRadius',['../structmrs__lib_1_1PointObstacle_1_1WrongRadius.html',1,'mrs_lib::PointObstacle']]] +]; diff --git a/search/classes_2.html b/search/classes_2.html new file mode 100644 index 00000000..0d1e8a0c --- /dev/null +++ b/search/classes_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 00000000..5c26e727 --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['cone_410',['Cone',['../classmrs__lib_1_1geometry_1_1Cone.html',1,'mrs_lib::geometry']]], + ['cuboid_411',['Cuboid',['../classmrs__lib_1_1geometry_1_1Cuboid.html',1,'mrs_lib::geometry']]], + ['cyclic_412',['cyclic',['../structmrs__lib_1_1geometry_1_1cyclic.html',1,'mrs_lib::geometry']]], + ['cyclic_3c_20double_2c_20degrees_20_3e_413',['cyclic< double, degrees >',['../structmrs__lib_1_1geometry_1_1cyclic.html',1,'mrs_lib::geometry']]], + ['cyclic_3c_20double_2c_20radians_20_3e_414',['cyclic< double, radians >',['../structmrs__lib_1_1geometry_1_1cyclic.html',1,'mrs_lib::geometry']]], + ['cyclic_3c_20double_2c_20sdegrees_20_3e_415',['cyclic< double, sdegrees >',['../structmrs__lib_1_1geometry_1_1cyclic.html',1,'mrs_lib::geometry']]], + ['cyclic_3c_20double_2c_20sradians_20_3e_416',['cyclic< double, sradians >',['../structmrs__lib_1_1geometry_1_1cyclic.html',1,'mrs_lib::geometry']]], + ['cyclic_3c_20float_2c_20degrees_20_3e_417',['cyclic< float, degrees >',['../structmrs__lib_1_1geometry_1_1cyclic.html',1,'mrs_lib::geometry']]], + ['cylinder_418',['Cylinder',['../classmrs__lib_1_1geometry_1_1Cylinder.html',1,'mrs_lib::geometry']]] +]; diff --git a/search/classes_3.html b/search/classes_3.html new file mode 100644 index 00000000..21025456 --- /dev/null +++ b/search/classes_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 00000000..2b28546e --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['degrees_419',['degrees',['../structmrs__lib_1_1geometry_1_1degrees.html',1,'mrs_lib::geometry::degrees'],['../structdegrees.html',1,'degrees']]], + ['dkf_420',['DKF',['../classmrs__lib_1_1DKF.html',1,'mrs_lib']]], + ['dynamicpublisher_421',['DynamicPublisher',['../classmrs__lib_1_1DynamicPublisher.html',1,'mrs_lib']]], + ['dynamicreconfiguremgr_422',['DynamicReconfigureMgr',['../classmrs__lib_1_1DynamicReconfigureMgr.html',1,'mrs_lib']]] +]; diff --git a/search/classes_4.html b/search/classes_4.html new file mode 100644 index 00000000..095ab595 --- /dev/null +++ b/search/classes_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_4.js b/search/classes_4.js new file mode 100644 index 00000000..896aee6c --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['eigenvector_5fexception_423',['eigenvector_exception',['../structmrs__lib_1_1eigenvector__exception.html',1,'mrs_lib']]], + ['ellipse_424',['Ellipse',['../classmrs__lib_1_1geometry_1_1Ellipse.html',1,'mrs_lib::geometry']]], + ['eulerattitude_425',['EulerAttitude',['../classmrs__lib_1_1EulerAttitude.html',1,'mrs_lib']]], + ['eulerformatexception_426',['EulerFormatException',['../structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException.html',1,'mrs_lib::AttitudeConverter']]], + ['extravertices_427',['ExtraVertices',['../structmrs__lib_1_1Polygon_1_1ExtraVertices.html',1,'mrs_lib::Polygon']]] +]; diff --git a/search/classes_5.html b/search/classes_5.html new file mode 100644 index 00000000..fc9cdc99 --- /dev/null +++ b/search/classes_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_5.js b/search/classes_5.js new file mode 100644 index 00000000..369232ff --- /dev/null +++ b/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['getheadingexception_428',['GetHeadingException',['../structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException.html',1,'mrs_lib::AttitudeConverter']]] +]; diff --git a/search/classes_6.html b/search/classes_6.html new file mode 100644 index 00000000..1ecfdddf --- /dev/null +++ b/search/classes_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_6.js b/search/classes_6.js new file mode 100644 index 00000000..cee413a8 --- /dev/null +++ b/search/classes_6.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['iirfilter_429',['IirFilter',['../classmrs__lib_1_1IirFilter.html',1,'mrs_lib']]], + ['imagepubliserdata_430',['ImagePubliserData',['../structmrs__lib_1_1ImagePubliserData.html',1,'mrs_lib']]], + ['imagepublisher_431',['ImagePublisher',['../classmrs__lib_1_1ImagePublisher.html',1,'mrs_lib']]], + ['impl_432',['impl',['../classDynamicPublisher_1_1impl.html',1,'DynamicPublisher::impl'],['../classmrs__lib_1_1SubscribeHandler_1_1Impl.html',1,'mrs_lib::SubscribeHandler< MessageType >::Impl< MessageType >'],['../classThreadTimer_1_1Impl.html',1,'ThreadTimer::Impl']]], + ['implthreadsafe_433',['ImplThreadsafe',['../classmrs__lib_1_1SubscribeHandler_1_1ImplThreadsafe.html',1,'mrs_lib::SubscribeHandler']]], + ['intersection_434',['Intersection',['../structmrs__lib_1_1Intersection.html',1,'mrs_lib']]], + ['invalidattitudeexception_435',['InvalidAttitudeException',['../structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException.html',1,'mrs_lib::AttitudeConverter']]], + ['inverse_5fexception_436',['inverse_exception',['../structmrs__lib_1_1JLKF_1_1inverse__exception.html',1,'mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >::inverse_exception'],['../structmrs__lib_1_1LKF_1_1inverse__exception.html',1,'mrs_lib::LKF< n_states, n_inputs, n_measurements >::inverse_exception'],['../structmrs__lib_1_1UKF_1_1inverse__exception.html',1,'mrs_lib::UKF< n_states, n_inputs, n_measurements >::inverse_exception']]] +]; diff --git a/search/classes_7.html b/search/classes_7.html new file mode 100644 index 00000000..0fc6fc3e --- /dev/null +++ b/search/classes_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_7.js b/search/classes_7.js new file mode 100644 index 00000000..e9db3673 --- /dev/null +++ b/search/classes_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['jlkf_437',['JLKF',['../classmrs__lib_1_1JLKF.html',1,'mrs_lib']]] +]; diff --git a/search/classes_8.html b/search/classes_8.html new file mode 100644 index 00000000..ac8af7dc --- /dev/null +++ b/search/classes_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_8.js b/search/classes_8.js new file mode 100644 index 00000000..2e0f9196 --- /dev/null +++ b/search/classes_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kalmanfilter_438',['KalmanFilter',['../classmrs__lib_1_1KalmanFilter.html',1,'mrs_lib']]], + ['kalmanfilteraloamgarm_439',['KalmanFilterAloamGarm',['../classmrs__lib_1_1KalmanFilterAloamGarm.html',1,'mrs_lib']]] +]; diff --git a/search/classes_9.html b/search/classes_9.html new file mode 100644 index 00000000..86cad046 --- /dev/null +++ b/search/classes_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_9.js b/search/classes_9.js new file mode 100644 index 00000000..05a4e33a --- /dev/null +++ b/search/classes_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['lkf_440',['LKF',['../classmrs__lib_1_1LKF.html',1,'mrs_lib']]], + ['lkf_3c_203_2c_20_2d1_2c_202_20_3e_441',['LKF< 3, -1, 2 >',['../classmrs__lib_1_1LKF.html',1,'mrs_lib']]], + ['lkf_3c_203_2c_201_2c_201_20_3e_442',['LKF< 3, 1, 1 >',['../classmrs__lib_1_1LKF.html',1,'mrs_lib']]], + ['lkf_5fmrs_5fodom_443',['LKF_MRS_odom',['../classmrs__lib_1_1LKF__MRS__odom.html',1,'mrs_lib']]] +]; diff --git a/search/classes_a.html b/search/classes_a.html new file mode 100644 index 00000000..4201e97e --- /dev/null +++ b/search/classes_a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_a.js b/search/classes_a.js new file mode 100644 index 00000000..a6e12876 --- /dev/null +++ b/search/classes_a.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['matherrorexception_444',['MathErrorException',['../structmrs__lib_1_1AttitudeConverter_1_1MathErrorException.html',1,'mrs_lib::AttitudeConverter']]], + ['medianfilter_445',['MedianFilter',['../classmrs__lib_1_1MedianFilter.html',1,'mrs_lib']]], + ['motorparams_5ft_446',['MotorParams_t',['../structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t.html',1,'mrs_lib::quadratic_throttle_model']]], + ['mrstimer_447',['MRSTimer',['../classmrs__lib_1_1MRSTimer.html',1,'mrs_lib']]], + ['mypoint_448',['MyPoint',['../structMyPoint.html',1,'']]] +]; diff --git a/search/classes_b.html b/search/classes_b.html new file mode 100644 index 00000000..f88a5780 --- /dev/null +++ b/search/classes_b.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_b.js b/search/classes_b.js new file mode 100644 index 00000000..f83a660a --- /dev/null +++ b/search/classes_b.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['nclkf_449',['NCLKF',['../classmrs__lib_1_1NCLKF.html',1,'mrs_lib']]], + ['nclkf_5fpartial_450',['NCLKF_partial',['../classmrs__lib_1_1NCLKF__partial.html',1,'mrs_lib']]], + ['ncukf_451',['NCUKF',['../classmrs__lib_1_1NCUKF.html',1,'mrs_lib']]], + ['notchfilter_452',['NotchFilter',['../classmrs__lib_1_1NotchFilter.html',1,'mrs_lib']]] +]; diff --git a/search/classes_c.html b/search/classes_c.html new file mode 100644 index 00000000..fa0cf4d6 --- /dev/null +++ b/search/classes_c.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_c.js b/search/classes_c.js new file mode 100644 index 00000000..c6cbbcb1 --- /dev/null +++ b/search/classes_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['obj_5ft_453',['obj_t',['../structobj__t.html',1,'']]] +]; diff --git a/search/classes_d.html b/search/classes_d.html new file mode 100644 index 00000000..0b6b1371 --- /dev/null +++ b/search/classes_d.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_d.js b/search/classes_d.js new file mode 100644 index 00000000..b61614ef --- /dev/null +++ b/search/classes_d.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['paramloader_454',['ParamLoader',['../classmrs__lib_1_1ParamLoader.html',1,'mrs_lib']]], + ['paramprovider_455',['ParamProvider',['../classmrs__lib_1_1ParamProvider.html',1,'mrs_lib']]], + ['pointobstacle_456',['PointObstacle',['../classmrs__lib_1_1PointObstacle.html',1,'mrs_lib']]], + ['pointobstacleerror_457',['PointObstacleError',['../structmrs__lib_1_1SafetyZone_1_1PointObstacleError.html',1,'mrs_lib::SafetyZone']]], + ['polygon_458',['Polygon',['../classmrs__lib_1_1Polygon.html',1,'mrs_lib']]], + ['polygonobstacleerror_459',['PolygonObstacleError',['../structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError.html',1,'mrs_lib::SafetyZone']]], + ['profiler_460',['Profiler',['../classmrs__lib_1_1Profiler.html',1,'mrs_lib']]], + ['publisherhandler_461',['PublisherHandler',['../classmrs__lib_1_1PublisherHandler.html',1,'mrs_lib']]], + ['publisherhandler_5fimpl_462',['PublisherHandler_impl',['../classmrs__lib_1_1PublisherHandler__impl.html',1,'mrs_lib']]] +]; diff --git a/search/classes_e.html b/search/classes_e.html new file mode 100644 index 00000000..2e42779f --- /dev/null +++ b/search/classes_e.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_e.js b/search/classes_e.js new file mode 100644 index 00000000..72b85438 --- /dev/null +++ b/search/classes_e.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['radians_463',['radians',['../structmrs__lib_1_1geometry_1_1radians.html',1,'mrs_lib::geometry']]], + ['ray_464',['Ray',['../classmrs__lib_1_1geometry_1_1Ray.html',1,'mrs_lib::geometry']]], + ['rectangle_465',['Rectangle',['../classmrs__lib_1_1geometry_1_1Rectangle.html',1,'mrs_lib::geometry']]], + ['repredictor_466',['Repredictor',['../classmrs__lib_1_1Repredictor.html',1,'mrs_lib']]], + ['repredictor_3c_20model_20_3e_467',['Repredictor< Model >',['../classmrs__lib_1_1Repredictor.html',1,'mrs_lib']]], + ['repredictoraloamgarm_468',['RepredictorAloamgarm',['../classmrs__lib_1_1RepredictorAloamgarm.html',1,'mrs_lib']]], + ['rheiv_469',['RHEIV',['../classmrs__lib_1_1RHEIV.html',1,'mrs_lib']]], + ['rosparamprovider_470',['RosParamProvider',['../classmrs__lib_1_1RosParamProvider.html',1,'mrs_lib']]], + ['rostimer_471',['ROSTimer',['../classmrs__lib_1_1ROSTimer.html',1,'mrs_lib']]], + ['routine_472',['Routine',['../classmrs__lib_1_1Routine.html',1,'mrs_lib']]] +]; diff --git a/search/classes_f.html b/search/classes_f.html new file mode 100644 index 00000000..e664ccd8 --- /dev/null +++ b/search/classes_f.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_f.js b/search/classes_f.js new file mode 100644 index 00000000..17d5babd --- /dev/null +++ b/search/classes_f.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['safetyzone_473',['SafetyZone',['../classmrs__lib_1_1SafetyZone.html',1,'mrs_lib']]], + ['scopetimer_474',['ScopeTimer',['../classmrs__lib_1_1ScopeTimer.html',1,'mrs_lib']]], + ['scopetimerlogger_475',['ScopeTimerLogger',['../classmrs__lib_1_1ScopeTimerLogger.html',1,'mrs_lib']]], + ['sdegrees_476',['sdegrees',['../structmrs__lib_1_1geometry_1_1sdegrees.html',1,'mrs_lib::geometry']]], + ['serviceclienthandler_477',['ServiceClientHandler',['../classmrs__lib_1_1ServiceClientHandler.html',1,'mrs_lib']]], + ['serviceclienthandler_5fimpl_478',['ServiceClientHandler_impl',['../classmrs__lib_1_1ServiceClientHandler__impl.html',1,'mrs_lib']]], + ['setheadingexception_479',['SetHeadingException',['../structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException.html',1,'mrs_lib::AttitudeConverter']]], + ['square_5froot_5fexception_480',['square_root_exception',['../structmrs__lib_1_1UKF_1_1square__root__exception.html',1,'mrs_lib::UKF']]], + ['sradians_481',['sradians',['../structmrs__lib_1_1geometry_1_1sradians.html',1,'mrs_lib::geometry']]], + ['statecov_5ft_482',['statecov_t',['../structmrs__lib_1_1KalmanFilter_1_1statecov__t.html',1,'mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >::statecov_t'],['../structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html',1,'mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >::statecov_t']]], + ['subobject_483',['SubObject',['../classSubObject.html',1,'']]], + ['subscribehandler_484',['SubscribeHandler',['../classmrs__lib_1_1SubscribeHandler.html',1,'mrs_lib']]], + ['subscribehandleroptions_485',['SubscribeHandlerOptions',['../structmrs__lib_1_1SubscribeHandlerOptions.html',1,'mrs_lib']]] +]; diff --git a/search/close.png b/search/close.png new file mode 100644 index 00000000..9342d3df Binary files /dev/null and b/search/close.png differ diff --git a/search/files_0.html b/search/files_0.html new file mode 100644 index 00000000..737608e1 --- /dev/null +++ b/search/files_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_0.js b/search/files_0.js new file mode 100644 index 00000000..ec1d4e9e --- /dev/null +++ b/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['attitude_5fconverter_2eh_506',['attitude_converter.h',['../attitude__converter_8h.html',1,'']]] +]; diff --git a/search/files_1.html b/search/files_1.html new file mode 100644 index 00000000..f27a62de --- /dev/null +++ b/search/files_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_1.js b/search/files_1.js new file mode 100644 index 00000000..b3796654 --- /dev/null +++ b/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['batch_5fvisualizer_2eh_507',['batch_visualizer.h',['../batch__visualizer_8h.html',1,'']]] +]; diff --git a/search/files_2.html b/search/files_2.html new file mode 100644 index 00000000..a45066e9 --- /dev/null +++ b/search/files_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_2.js b/search/files_2.js new file mode 100644 index 00000000..69d7ece8 --- /dev/null +++ b/search/files_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['cyclic_2eh_508',['cyclic.h',['../cyclic_8h.html',1,'']]], + ['cyclic_5fexample_2ecpp_509',['cyclic_example.cpp',['../cyclic__example_8cpp.html',1,'']]] +]; diff --git a/search/files_3.html b/search/files_3.html new file mode 100644 index 00000000..1076bc5a --- /dev/null +++ b/search/files_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_3.js b/search/files_3.js new file mode 100644 index 00000000..2ee45d84 --- /dev/null +++ b/search/files_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dynamic_5fpublisher_2eh_510',['dynamic_publisher.h',['../dynamic__publisher_8h.html',1,'']]], + ['dynamic_5freconfigure_5fmgr_2eh_511',['dynamic_reconfigure_mgr.h',['../dynamic__reconfigure__mgr_8h.html',1,'']]] +]; diff --git a/search/files_4.html b/search/files_4.html new file mode 100644 index 00000000..e5cd7f43 --- /dev/null +++ b/search/files_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_4.js b/search/files_4.js new file mode 100644 index 00000000..33de251d --- /dev/null +++ b/search/files_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['example_2ecpp_512',['example.cpp',['../dynamic__publisher_2example_8cpp.html',1,'(Global Namespace)'],['../lkf_2example_8cpp.html',1,'(Global Namespace)'],['../param__loader_2example_8cpp.html',1,'(Global Namespace)'],['../repredictor_2example_8cpp.html',1,'(Global Namespace)'],['../rheiv_2example_8cpp.html',1,'(Global Namespace)'],['../subscribe__handler_2example_8cpp.html',1,'(Global Namespace)'],['../ukf_2example_8cpp.html',1,'(Global Namespace)'],['../vector__converter_2example_8cpp.html',1,'(Global Namespace)']]] +]; diff --git a/search/files_5.html b/search/files_5.html new file mode 100644 index 00000000..2cc480f2 --- /dev/null +++ b/search/files_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_5.js b/search/files_5.js new file mode 100644 index 00000000..0bc57d0f --- /dev/null +++ b/search/files_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gps_5fconversions_2eh_513',['gps_conversions.h',['../gps__conversions_8h.html',1,'']]] +]; diff --git a/search/files_6.html b/search/files_6.html new file mode 100644 index 00000000..6510245f --- /dev/null +++ b/search/files_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_6.js b/search/files_6.js new file mode 100644 index 00000000..0b6af196 --- /dev/null +++ b/search/files_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['iir_5ffilter_2eh_514',['iir_filter.h',['../iir__filter_8h.html',1,'']]] +]; diff --git a/search/files_7.html b/search/files_7.html new file mode 100644 index 00000000..819f7b86 --- /dev/null +++ b/search/files_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_7.js b/search/files_7.js new file mode 100644 index 00000000..54d59ab4 --- /dev/null +++ b/search/files_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kalman_5ffilter_2eh_515',['kalman_filter.h',['../kalman__filter_8h.html',1,'']]], + ['kalman_5ffilter_5faloamgarm_2eh_516',['kalman_filter_aloamgarm.h',['../kalman__filter__aloamgarm_8h.html',1,'']]] +]; diff --git a/search/files_8.html b/search/files_8.html new file mode 100644 index 00000000..fa1a27f7 --- /dev/null +++ b/search/files_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_8.js b/search/files_8.js new file mode 100644 index 00000000..d02ee5a5 --- /dev/null +++ b/search/files_8.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['math_2eh_517',['math.h',['../math_8h.html',1,'']]], + ['median_5ffilter_2eh_518',['median_filter.h',['../median__filter_8h.html',1,'']]], + ['misc_2eh_519',['misc.h',['../misc_8h.html',1,'']]], + ['msg_5fextractor_2eh_520',['msg_extractor.h',['../msg__extractor_8h.html',1,'']]], + ['mutex_2eh_521',['mutex.h',['../mutex_8h.html',1,'']]] +]; diff --git a/search/files_9.html b/search/files_9.html new file mode 100644 index 00000000..3af3e474 --- /dev/null +++ b/search/files_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_9.js b/search/files_9.js new file mode 100644 index 00000000..9353cc3c --- /dev/null +++ b/search/files_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['nckf_5ftests_2ecpp_522',['nckf_tests.cpp',['../nckf__tests_8cpp.html',1,'']]], + ['notch_5ffilter_2eh_523',['notch_filter.h',['../notch__filter_8h.html',1,'']]] +]; diff --git a/search/files_a.html b/search/files_a.html new file mode 100644 index 00000000..17f65ad9 --- /dev/null +++ b/search/files_a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_a.js b/search/files_a.js new file mode 100644 index 00000000..dd95bdf2 --- /dev/null +++ b/search/files_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['param_5floader_2eh_524',['param_loader.h',['../param__loader_8h.html',1,'']]], + ['profiler_2eh_525',['profiler.h',['../profiler_8h.html',1,'']]], + ['publisher_5fhandler_2eh_526',['publisher_handler.h',['../publisher__handler_8h.html',1,'']]] +]; diff --git a/search/files_b.html b/search/files_b.html new file mode 100644 index 00000000..aaa7731b --- /dev/null +++ b/search/files_b.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_b.js b/search/files_b.js new file mode 100644 index 00000000..47d7c5c0 --- /dev/null +++ b/search/files_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rheiv_2eh_527',['rheiv.h',['../rheiv_8h.html',1,'']]] +]; diff --git a/search/files_c.html b/search/files_c.html new file mode 100644 index 00000000..79e79635 --- /dev/null +++ b/search/files_c.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_c.js b/search/files_c.js new file mode 100644 index 00000000..0a1d9a92 --- /dev/null +++ b/search/files_c.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['scope_5ftimer_2eh_528',['scope_timer.h',['../scope__timer_8h.html',1,'']]], + ['service_5fclient_5fhandler_2eh_529',['service_client_handler.h',['../service__client__handler_8h.html',1,'']]], + ['shapes_2eh_530',['shapes.h',['../shapes_8h.html',1,'']]], + ['simple_5fexample_2ecpp_531',['simple_example.cpp',['../simple__example_8cpp.html',1,'']]], + ['subscribe_5fhandler_2eh_532',['subscribe_handler.h',['../subscribe__handler_8h.html',1,'']]] +]; diff --git a/search/files_d.html b/search/files_d.html new file mode 100644 index 00000000..94b2ff2d --- /dev/null +++ b/search/files_d.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_d.js b/search/files_d.js new file mode 100644 index 00000000..b754626d --- /dev/null +++ b/search/files_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['timeout_5fmanager_2eh_533',['timeout_manager.h',['../timeout__manager_8h.html',1,'']]] +]; diff --git a/search/files_e.html b/search/files_e.html new file mode 100644 index 00000000..cb205ad3 --- /dev/null +++ b/search/files_e.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_e.js b/search/files_e.js new file mode 100644 index 00000000..d5009821 --- /dev/null +++ b/search/files_e.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['ukf_2eh_534',['ukf.h',['../ukf_8h.html',1,'']]], + ['ukf_2ehpp_535',['ukf.hpp',['../ukf_8hpp.html',1,'']]], + ['utils_2eh_536',['utils.h',['../utils_8h.html',1,'']]] +]; diff --git a/search/files_f.html b/search/files_f.html new file mode 100644 index 00000000..90cf7fd3 --- /dev/null +++ b/search/files_f.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_f.js b/search/files_f.js new file mode 100644 index 00000000..c508e1a3 --- /dev/null +++ b/search/files_f.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['vector_5fconverter_2eh_537',['vector_converter.h',['../vector__converter_8h.html',1,'']]], + ['vector_5fconverter_2ehpp_538',['vector_converter.hpp',['../vector__converter_8hpp.html',1,'']]], + ['visual_5fobject_2eh_539',['visual_object.h',['../visual__object_8h.html',1,'']]] +]; diff --git a/search/functions_0.html b/search/functions_0.html new file mode 100644 index 00000000..e17c7111 --- /dev/null +++ b/search/functions_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 00000000..514f5df3 --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['a_540',['a',['../classmrs__lib_1_1geometry_1_1Triangle.html#abd847d705725f4dffa10e6e00ba5f24c',1,'mrs_lib::geometry::Triangle::a()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a5370711517c0449167cfd0efaee8e821',1,'mrs_lib::geometry::Rectangle::a()'],['../classmrs__lib_1_1geometry_1_1Ellipse.html#aee622887a91b50f8fa8bbd476614006e',1,'mrs_lib::geometry::Ellipse::a()']]], + ['add_541',['add',['../classmrs__lib_1_1MedianFilter.html#aaf3d8e3bab539001962f2b29dabd314d',1,'mrs_lib::MedianFilter']]], + ['addcheck_542',['addCheck',['../classmrs__lib_1_1MedianFilter.html#a234342f8780bce6019f5183f798fe348',1,'mrs_lib::MedianFilter']]], + ['addcone_543',['addCone',['../classmrs__lib_1_1BatchVisualizer.html#a937c831f9caac50bc84f671c3260f1a7',1,'mrs_lib::BatchVisualizer']]], + ['addcuboid_544',['addCuboid',['../classmrs__lib_1_1BatchVisualizer.html#ab5aba26d50dbe7fe22cd4c0549a99051',1,'mrs_lib::BatchVisualizer']]], + ['addcylinder_545',['addCylinder',['../classmrs__lib_1_1BatchVisualizer.html#abd2f9394a4cb63da0478ad1621ed7e79',1,'mrs_lib::BatchVisualizer']]], + ['addellipse_546',['addEllipse',['../classmrs__lib_1_1BatchVisualizer.html#ac03c515ed44761d88f43a2af446c26b7',1,'mrs_lib::BatchVisualizer']]], + ['addinputchange_547',['addInputChange',['../classmrs__lib_1_1Repredictor.html#a4db1b1896eb17c54bc906d0e9da1eee9',1,'mrs_lib::Repredictor::addInputChange(const u_t &u, const ros::Time &stamp, const ModelPtr &model=nullptr)'],['../classmrs__lib_1_1Repredictor.html#a2fa01fc3dbe7a557b80b6104466c8b7e',1,'mrs_lib::Repredictor::addInputChange(const u_t &u, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)']]], + ['addinputchangewithnoise_548',['addInputChangeWithNoise',['../classmrs__lib_1_1Repredictor.html#ac85faca4dca9e6f785078eac6819f10f',1,'mrs_lib::Repredictor::addInputChangeWithNoise(const u_t &u, const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)'],['../classmrs__lib_1_1Repredictor.html#a203a2fc80f2ab2d0caeb2b09e2c410a3',1,'mrs_lib::Repredictor::addInputChangeWithNoise(const u_t &u, const Q_t &Q, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)']]], + ['addmeasurement_549',['addMeasurement',['../classmrs__lib_1_1Repredictor.html#a5e1db8bec67cabd386b8924c5312f648',1,'mrs_lib::Repredictor::addMeasurement(const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)'],['../classmrs__lib_1_1Repredictor.html#a0aed856752f139230db775620b4b97da',1,'mrs_lib::Repredictor::addMeasurement(const z_t &z, const R_t &R, const ros::Time &stamp, const ModelPtr &model=nullptr, const double &meas_id=-1)']]], + ['addnullline_550',['addNullLine',['../classmrs__lib_1_1BatchVisualizer.html#a7f4d6d1ae967d6a5c15351969d9e4592',1,'mrs_lib::BatchVisualizer']]], + ['addnullpoint_551',['addNullPoint',['../classmrs__lib_1_1BatchVisualizer.html#a7556fd856cd4be7d0bdea9a4c0c6e1fc',1,'mrs_lib::BatchVisualizer']]], + ['addnulltriangle_552',['addNullTriangle',['../classmrs__lib_1_1BatchVisualizer.html#a6a844cdffd1474570988e8d1a87126cb',1,'mrs_lib::BatchVisualizer']]], + ['addpoint_553',['addPoint',['../classmrs__lib_1_1BatchVisualizer.html#ac9c76c18ef837dc7b87cf20f5e2511b9',1,'mrs_lib::BatchVisualizer']]], + ['addprocessnoisechange_554',['addProcessNoiseChange',['../classmrs__lib_1_1Repredictor.html#a1a409036d5c94ee2115b2e31465fd2c7',1,'mrs_lib::Repredictor::addProcessNoiseChange(const Q_t &Q, const ros::Time &stamp, const ModelPtr &model=nullptr)'],['../classmrs__lib_1_1Repredictor.html#ad07b1f478d926355157c46d93cde1b4b',1,'mrs_lib::Repredictor::addProcessNoiseChange(const Q_t &Q, [[maybe_unused]] const ros::Time &stamp, const ModelPtr &model=nullptr)']]], + ['addray_555',['addRay',['../classmrs__lib_1_1BatchVisualizer.html#ae3c2f932f592a0e61da8e51643cc686a',1,'mrs_lib::BatchVisualizer']]], + ['addrectangle_556',['addRectangle',['../classmrs__lib_1_1BatchVisualizer.html#a5a68c474ce18a4fccbc8f14066267d73',1,'mrs_lib::BatchVisualizer']]], + ['addtrajectory_557',['addTrajectory',['../classmrs__lib_1_1BatchVisualizer.html#a5dad7ddef02d959da350385544b98063',1,'mrs_lib::BatchVisualizer']]], + ['addtriangle_558',['addTriangle',['../classmrs__lib_1_1BatchVisualizer.html#ae2cf4d2a0578711a060f7f398179a677',1,'mrs_lib::BatchVisualizer']]], + ['addyamlfile_559',['addYamlFile',['../classmrs__lib_1_1ParamLoader.html#a7e0a9d3c3ca4e85692999f99b51e53e7',1,'mrs_lib::ParamLoader']]], + ['addyamlfilefromparam_560',['addYamlFileFromParam',['../classmrs__lib_1_1ParamLoader.html#a3ae6c294bc7bcf0fa17557ee36e04b31',1,'mrs_lib::ParamLoader']]], + ['angleaxisbetween_561',['angleaxisBetween',['../misc_8h.html#a3c40238e3620a619ddadf518321ccaae',1,'mrs_lib::geometry']]], + ['anglebetween_562',['angleBetween',['../misc_8h.html#a926f171b122a39c63ccb860666a7e254',1,'mrs_lib::geometry::angleBetween(const vec2_t &a, const vec2_t &b)'],['../misc_8h.html#a277dbfe7688635c28c5a1b34f32ed81e',1,'mrs_lib::geometry::angleBetween(const vec3_t &a, const vec3_t &b)']]], + ['atomicscopeflag_563',['AtomicScopeFlag',['../classmrs__lib_1_1AtomicScopeFlag.html#a168dc1d0a0ae38b254d89a84afdc4cab',1,'mrs_lib::AtomicScopeFlag']]], + ['attitudeconverter_564',['AttitudeConverter',['../classmrs__lib_1_1AttitudeConverter.html#a1a98367c2a004a298a2026d883cfc0eb',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const double &roll, const double &pitch, const double &yaw, const RPY_convention_t &format=RPY_EXTRINSIC)'],['../classmrs__lib_1_1AttitudeConverter.html#a134453cd539536eea199763467690483',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const tf::Quaternion quaternion)'],['../classmrs__lib_1_1AttitudeConverter.html#a9f00a180ebe802b8b7e30e08cc688f26',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const geometry_msgs::Quaternion quaternion)'],['../classmrs__lib_1_1AttitudeConverter.html#a28987247a78e426e03eb37d51c7b6d82',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const mrs_lib::EulerAttitude &euler_attitude)'],['../classmrs__lib_1_1AttitudeConverter.html#a15e411e1c06cd3af16d10f660656718b',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const Eigen::Quaterniond quaternion)'],['../classmrs__lib_1_1AttitudeConverter.html#ad50e60f2d412b2253221c00fbbff2ead',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const Eigen::Matrix3d matrix)'],['../classmrs__lib_1_1AttitudeConverter.html#a0046963fb6f70e1ecc1d50c9778fec44',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const Eigen::AngleAxis< T > angle_axis)'],['../classmrs__lib_1_1AttitudeConverter.html#a7d3224c3f9b32c2a9c65f63f5a2644ea',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const tf2::Quaternion quaternion)'],['../classmrs__lib_1_1AttitudeConverter.html#a24d9d274eb16af01c3630ecb32065652',1,'mrs_lib::AttitudeConverter::AttitudeConverter(const tf2::Matrix3x3 matrix)']]] +]; diff --git a/search/functions_1.html b/search/functions_1.html new file mode 100644 index 00000000..0ddac0a4 --- /dev/null +++ b/search/functions_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 00000000..deea7dec --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['b_565',['b',['../classmrs__lib_1_1geometry_1_1Triangle.html#a6ac4e01a62fbb343d177bf47b3d38219',1,'mrs_lib::geometry::Triangle::b()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a82cb0598bd97e772d5fdbeeb5fde3657',1,'mrs_lib::geometry::Rectangle::b()'],['../classmrs__lib_1_1geometry_1_1Ellipse.html#ab42e4c580aeda44204c5854e1ccd4513',1,'mrs_lib::geometry::Ellipse::b()']]], + ['batchvisualizer_566',['BatchVisualizer',['../classmrs__lib_1_1BatchVisualizer.html#a2a426c62b02dec6430362920db0d6c80',1,'mrs_lib::BatchVisualizer::BatchVisualizer()'],['../classmrs__lib_1_1BatchVisualizer.html#a3a857713e5516bec553b5380eaa423f8',1,'mrs_lib::BatchVisualizer::BatchVisualizer(ros::NodeHandle &nh, std::string marker_topic_name, std::string parent_frame)']]], + ['bequiet_567',['beQuiet',['../classmrs__lib_1_1Transformer.html#ab1e3fff472e6c6320a41d6f6ca331ca0',1,'mrs_lib::Transformer']]] +]; diff --git a/search/functions_10.html b/search/functions_10.html new file mode 100644 index 00000000..09422e1e --- /dev/null +++ b/search/functions_10.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_10.js b/search/functions_10.js new file mode 100644 index 00000000..5f021086 --- /dev/null +++ b/search/functions_10.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['r_701',['r',['../classmrs__lib_1_1geometry_1_1Cylinder.html#aa442455784da2246f8bc25aa0eccadbb',1,'mrs_lib::geometry::Cylinder']]], + ['ray_702',['Ray',['../classmrs__lib_1_1geometry_1_1Ray.html#aa0bff9427d14806607b5689f1d71604d',1,'mrs_lib::geometry::Ray::Ray()'],['../classmrs__lib_1_1geometry_1_1Ray.html#ab7466369083c82552f805fb20a16a8aa',1,'mrs_lib::geometry::Ray::Ray(Eigen::Vector3d p1, Eigen::Vector3d p2)']]], + ['rectangle_703',['Rectangle',['../classmrs__lib_1_1geometry_1_1Rectangle.html#af119a484beb0dbae7dd0a9a2d5f5123d',1,'mrs_lib::geometry::Rectangle::Rectangle()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a3b85d8ba9c03a1b2962eda68293da077',1,'mrs_lib::geometry::Rectangle::Rectangle(std::vector< Eigen::Vector3d > points)'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a707a6df742b90d626e5321a4324d75fd',1,'mrs_lib::geometry::Rectangle::Rectangle(Eigen::Vector3d a, Eigen::Vector3d b, Eigen::Vector3d c, Eigen::Vector3d d)']]], + ['remove_5fconst_704',['remove_const',['../namespacemrs__lib.html#a006d8eb9265ad5e8b2f908df6deb55b5',1,'mrs_lib']]], + ['repredictor_705',['Repredictor',['../classmrs__lib_1_1Repredictor.html#a035888099138efba982bda818c5fe390',1,'mrs_lib::Repredictor::Repredictor(const x_t &x0, const P_t &P0, const u_t &u0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len)'],['../classmrs__lib_1_1Repredictor.html#a0245871abc8208f13b4b33a7c2ece708',1,'mrs_lib::Repredictor::Repredictor()'],['../classmrs__lib_1_1Repredictor.html#a6ffbce95c9194f159c203378845851d0',1,'mrs_lib::Repredictor::Repredictor(const x_t &x0, const P_t &P0, const Q_t &Q0, const ros::Time &t0, const ModelPtr &model, const unsigned hist_len)']]], + ['repredictoraloamgarm_706',['RepredictorAloamgarm',['../classmrs__lib_1_1RepredictorAloamgarm.html#a1e1d3245d8f2fd98c9f80d4795061395',1,'mrs_lib::RepredictorAloamgarm']]], + ['resolveframe_707',['resolveFrame',['../classmrs__lib_1_1Transformer.html#aa4cf06770b355a01c66f227363a4967f',1,'mrs_lib::Transformer']]], + ['retrylookupnewest_708',['retryLookupNewest',['../classmrs__lib_1_1Transformer.html#abef2a59ed83e09ab103c060abb31dbb1',1,'mrs_lib::Transformer']]], + ['rheiv_709',['RHEIV',['../classmrs__lib_1_1RHEIV.html#a057ffc158ceb64e933d3ae73e96bb033',1,'mrs_lib::RHEIV::RHEIV()'],['../classmrs__lib_1_1RHEIV.html#a4712a3306cdd759a73d2124b23bb388b',1,'mrs_lib::RHEIV::RHEIV(const f_z_t &f_z, const f_dzdx_t &f_dzdx, const double min_dtheta=1e-15, const unsigned max_its=100)'],['../classmrs__lib_1_1RHEIV.html#a8c8f7b9c1b3ea4daafc08e1a29941558',1,'mrs_lib::RHEIV::RHEIV(const f_z_t &f_z, const f_dzdx_t &f_dzdx, const double min_dtheta=1e-15, const unsigned max_its=100, const time_t &timeout=std::chrono::duration_cast< time_t >(ms_t::zero()), const int debug_nth_it=-1)'],['../classmrs__lib_1_1RHEIV.html#a66a840487d929607a3385e90b3c35ec5',1,'mrs_lib::RHEIV::RHEIV(const f_z_t &f_z, const dzdx_t &dzdx, const double min_dtheta=1e-15, const unsigned max_its=100)'],['../classmrs__lib_1_1RHEIV.html#a9c0c437bea8612516cb37d9503b6a852',1,'mrs_lib::RHEIV::RHEIV(const f_z_t &f_z, const dzdx_t &dzdx, const double min_dtheta=1e-15, const unsigned max_its=100, const time_t &timeout=std::chrono::duration_cast< time_t >(ms_t::zero()), const int debug_nth_it=-1)']]], + ['roll_710',['roll',['../classmrs__lib_1_1EulerAttitude.html#a7d62c8be0341555c3e03e124a617d765',1,'mrs_lib::EulerAttitude']]], + ['rostimer_711',['ROSTimer',['../classmrs__lib_1_1ROSTimer.html#aaf683893d28eca7f91e4b2333cf4eed5',1,'mrs_lib::ROSTimer::ROSTimer(const ros::NodeHandle &nh, const ros::Rate &rate, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot=false, const bool autostart=true)'],['../classmrs__lib_1_1ROSTimer.html#ad4913fe0402a8be9b131ad5afb9d7d05',1,'mrs_lib::ROSTimer::ROSTimer(const ros::NodeHandle &nh, const ros::Duration &duration, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot=false, const bool autostart=true)']]], + ['rotatecovariance_712',['rotateCovariance',['../misc_8h.html#acfda874d1843fd8c03fb309b5024818f',1,'mrs_lib::geometry']]], + ['rotationbetween_713',['rotationBetween',['../misc_8h.html#a59d7c7ddea21a014b2c831a0fc65fbb1',1,'mrs_lib::geometry']]], + ['running_714',['running',['../classmrs__lib_1_1MRSTimer.html#a54461ff4541da2848c3263e646ff928a',1,'mrs_lib::MRSTimer::running()'],['../classmrs__lib_1_1ROSTimer.html#af5074139258db68cf314b1bf4868243a',1,'mrs_lib::ROSTimer::running()'],['../classmrs__lib_1_1ThreadTimer.html#ab3ecdba649fd5c849acd94ce9ad0c824',1,'mrs_lib::ThreadTimer::running()']]] +]; diff --git a/search/functions_11.html b/search/functions_11.html new file mode 100644 index 00000000..1cde7b49 --- /dev/null +++ b/search/functions_11.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_11.js b/search/functions_11.js new file mode 100644 index 00000000..40395dea --- /dev/null +++ b/search/functions_11.js @@ -0,0 +1,36 @@ +var searchData= +[ + ['scopetimer_715',['ScopeTimer',['../classmrs__lib_1_1ScopeTimer.html#aebac3a7bad2d63f49d5777e08b504661',1,'mrs_lib::ScopeTimer::ScopeTimer(const std::string &label, const ros::Duration &throttle_period=ros::Duration(0), const bool enable=true, const std::shared_ptr< ScopeTimerLogger > scope_timer_logger=nullptr)'],['../classmrs__lib_1_1ScopeTimer.html#a8943aec6fbe491633b7f698eb3f0d131',1,'mrs_lib::ScopeTimer::ScopeTimer(const std::string &label, const time_point &tp0, const ros::Duration &throttle_period=ros::Duration(0), const bool enable=true, const std::shared_ptr< ScopeTimerLogger > scope_timer_logger=nullptr)'],['../classmrs__lib_1_1ScopeTimer.html#abdaf77484c74055916b8e491c8ffe318',1,'mrs_lib::ScopeTimer::ScopeTimer(const std::string &label, const std::shared_ptr< ScopeTimerLogger > scope_timer_logger, const bool enable=true)']]], + ['scopetimerlogger_716',['ScopeTimerLogger',['../classmrs__lib_1_1ScopeTimerLogger.html#a5369b8ec91eab0a06b87485bed5c130c',1,'mrs_lib::ScopeTimerLogger']]], + ['sendtransform_717',['sendTransform',['../classmrs__lib_1_1TransformBroadcaster.html#a93913661cb31baeedb7d4e1f72142b93',1,'mrs_lib::TransformBroadcaster::sendTransform(const geometry_msgs::TransformStamped &transform)'],['../classmrs__lib_1_1TransformBroadcaster.html#a2adf5bd449b5561323fb7d8633e04bf5',1,'mrs_lib::TransformBroadcaster::sendTransform(const std::vector< geometry_msgs::TransformStamped > &transforms)']]], + ['serviceclienthandler_718',['ServiceClientHandler',['../classmrs__lib_1_1ServiceClientHandler.html#a7d0e35cfbbe280ab0d739c23a26189de',1,'mrs_lib::ServiceClientHandler::ServiceClientHandler(void)'],['../classmrs__lib_1_1ServiceClientHandler.html#acf286dd2720d41fa05e98c7327d94413',1,'mrs_lib::ServiceClientHandler::ServiceClientHandler(const ServiceClientHandler &other)'],['../classmrs__lib_1_1ServiceClientHandler.html#a6da5592ce8388bd1aa08b63fd3d3d060',1,'mrs_lib::ServiceClientHandler::ServiceClientHandler(ros::NodeHandle &nh, const std::string &address)']]], + ['serviceclienthandler_5fimpl_719',['ServiceClientHandler_impl',['../classmrs__lib_1_1ServiceClientHandler__impl.html#ae1f6eb48630bf4d3eb9e92b95c6269c8',1,'mrs_lib::ServiceClientHandler_impl::ServiceClientHandler_impl(void)'],['../classmrs__lib_1_1ServiceClientHandler__impl.html#a4ae10aba33d5d46013bf25a61c005ac0',1,'mrs_lib::ServiceClientHandler_impl::ServiceClientHandler_impl(ros::NodeHandle &nh, const std::string &address)']]], + ['set_5fmutexed_720',['set_mutexed',['../namespacemrs__lib.html#afae3eb66a47b80bd8bae3b4a0c6a9368',1,'mrs_lib::set_mutexed(std::mutex &mut, const T what, T &where)'],['../namespacemrs__lib.html#aa09cacb136795c2831ed0499518a2b17',1,'mrs_lib::set_mutexed(std::mutex &mut, Args &... args)'],['../namespacemrs__lib.html#a953c3bb11623623e1daef402272e6833',1,'mrs_lib::set_mutexed(std::mutex &mut, const std::tuple< Args... > from, std::tuple< Args &... > to)']]], + ['set_5fmutexed_5fimpl_721',['set_mutexed_impl',['../namespacemrs__lib.html#acc32702fff28a4a1515a586a94f51e79',1,'mrs_lib::set_mutexed_impl(const T what, T &where)'],['../namespacemrs__lib.html#ad43e8bfd91df3dae404738c355b136e9',1,'mrs_lib::set_mutexed_impl(const T what, T &where, Args... args)']]], + ['setbufferlength_722',['setBufferLength',['../classmrs__lib_1_1MedianFilter.html#af2888fa7449ce3ebc82f3255a519fe6a',1,'mrs_lib::MedianFilter']]], + ['setconstants_723',['setConstants',['../classmrs__lib_1_1UKF.html#a646b7755aaa478bb86d89e1923d5ed2a',1,'mrs_lib::UKF']]], + ['setdefaultframe_724',['setDefaultFrame',['../classmrs__lib_1_1Transformer.html#a16a54cd35b1f071a80197cbccccfe9c0',1,'mrs_lib::Transformer']]], + ['setdefaultprefix_725',['setDefaultPrefix',['../classmrs__lib_1_1Transformer.html#a5d6f4288d53f09474c92bda26d0c9f55',1,'mrs_lib::Transformer']]], + ['setheading_726',['setHeading',['../classmrs__lib_1_1AttitudeConverter.html#ac818b4e515d614d5d473be95b5ee9024',1,'mrs_lib::AttitudeConverter']]], + ['setlatlon_727',['setLatLon',['../classmrs__lib_1_1Transformer.html#a54764308675cc6df1782954870e1f3c2',1,'mrs_lib::Transformer']]], + ['setlinesscale_728',['setLinesScale',['../classmrs__lib_1_1BatchVisualizer.html#af36566a7f7267a2cdb167a533e4cb856',1,'mrs_lib::BatchVisualizer']]], + ['setlookuptimeout_729',['setLookupTimeout',['../classmrs__lib_1_1Transformer.html#ac073019d60f1d9c6d48a0c207bafb678',1,'mrs_lib::Transformer']]], + ['setmaxdifference_730',['setMaxDifference',['../classmrs__lib_1_1MedianFilter.html#a82d854470b0920fac623472721b01601',1,'mrs_lib::MedianFilter']]], + ['setmaxvalue_731',['setMaxValue',['../classmrs__lib_1_1MedianFilter.html#a8162e19bd901f6dcd542d4c8615732f9',1,'mrs_lib::MedianFilter']]], + ['setminvalue_732',['setMinValue',['../classmrs__lib_1_1MedianFilter.html#a569e93d2d4be9632db2943fedb8133ba',1,'mrs_lib::MedianFilter']]], + ['setobservationmodel_733',['setObservationModel',['../classmrs__lib_1_1UKF.html#a272c7435d05b9a8867df4bd131f01177',1,'mrs_lib::UKF']]], + ['setparentframe_734',['setParentFrame',['../classmrs__lib_1_1BatchVisualizer.html#a284c94fdfec8f359704d92f9ef79cd74',1,'mrs_lib::BatchVisualizer']]], + ['setperiod_735',['setPeriod',['../classmrs__lib_1_1MRSTimer.html#acf818ea5cffe17b89ed00866ca7cbeff',1,'mrs_lib::MRSTimer::setPeriod()'],['../classmrs__lib_1_1ROSTimer.html#a7dd4d03428c7abe2de8ea260a9a4eeff',1,'mrs_lib::ROSTimer::setPeriod()'],['../classmrs__lib_1_1ThreadTimer.html#a038246468811544860d5d2d1c4091e2d',1,'mrs_lib::ThreadTimer::setPeriod()']]], + ['setpointsscale_736',['setPointsScale',['../classmrs__lib_1_1BatchVisualizer.html#ac613c22b8ed79cd169636e6aafacf2dc',1,'mrs_lib::BatchVisualizer']]], + ['setprefix_737',['setPrefix',['../classmrs__lib_1_1ParamLoader.html#a8ad978834d5d6d1745a96f1ecc65a759',1,'mrs_lib::ParamLoader']]], + ['settransitionmodel_738',['setTransitionModel',['../classmrs__lib_1_1UKF.html#a724d2e508dd45e4e6cb7b08b023cae34',1,'mrs_lib::UKF']]], + ['setyaw_739',['setYaw',['../classmrs__lib_1_1AttitudeConverter.html#a945e6c80d148df27897391bfd69c0505',1,'mrs_lib::AttitudeConverter']]], + ['shouldlog_740',['shouldLog',['../classmrs__lib_1_1ScopeTimerLogger.html#a8bb5c6453336967529f118a717f20825',1,'mrs_lib::ScopeTimerLogger']]], + ['solidangle_741',['solidAngle',['../misc_8h.html#a3f9294141cc559ae94b4c026ac47d05a',1,'mrs_lib::geometry']]], + ['solidanglerelativeto_742',['solidAngleRelativeTo',['../classmrs__lib_1_1geometry_1_1Rectangle.html#a803dbb3eb6f8a24146bd4c01877769ce',1,'mrs_lib::geometry::Rectangle']]], + ['sphericaltrianglearea_743',['sphericalTriangleArea',['../misc_8h.html#a8605d3a799002897f1d260cc4be95682',1,'mrs_lib::geometry']]], + ['start_744',['start',['../classmrs__lib_1_1SubscribeHandler.html#af8bc123e16de75e3b6c00724b817eaaf',1,'mrs_lib::SubscribeHandler::start()'],['../classmrs__lib_1_1MRSTimer.html#afda0c038cd360ccaa71b95227e413b44',1,'mrs_lib::MRSTimer::start()'],['../classmrs__lib_1_1ROSTimer.html#afd70b40e8e4b84b48215eeafc5e27520',1,'mrs_lib::ROSTimer::start()'],['../classmrs__lib_1_1ThreadTimer.html#a0425600320550d52408d1499ee3d7891',1,'mrs_lib::ThreadTimer::start()']]], + ['stop_745',['stop',['../classmrs__lib_1_1SubscribeHandler.html#a36a097cf480a16bf239885be6e35b5d0',1,'mrs_lib::SubscribeHandler::stop()'],['../classmrs__lib_1_1MRSTimer.html#aeda0660a5031f17bb57f55f4166e737e',1,'mrs_lib::MRSTimer::stop()'],['../classmrs__lib_1_1ROSTimer.html#a6a774123e3400848884fa83fe01e1955',1,'mrs_lib::ROSTimer::stop()'],['../classmrs__lib_1_1ThreadTimer.html#a26d89795a716aa2ae6d7f890626c0aaa',1,'mrs_lib::ThreadTimer::stop()']]], + ['subscribedtopicname_746',['subscribedTopicName',['../classmrs__lib_1_1SubscribeHandler.html#a2ee619f8b6fe5ce56599752e63161b51',1,'mrs_lib::SubscribeHandler']]], + ['subscribehandler_747',['SubscribeHandler',['../classmrs__lib_1_1SubscribeHandler.html#a13159347fe9f13d778d7c02f2d1b1a98',1,'mrs_lib::SubscribeHandler::SubscribeHandler()'],['../classmrs__lib_1_1SubscribeHandler.html#aaceb7739b06d44d7fe619418d5cecd4e',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, const std::string &topic_name, Types ... args)'],['../classmrs__lib_1_1SubscribeHandler.html#a40f16a8553532b9685feb4b33f342602',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, const message_callback_t &message_callback={})'],['../classmrs__lib_1_1SubscribeHandler.html#aa625f9d69548da72d92f7e8a25b078e3',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, const timeout_callback_t &timeout_callback, Types ... args)'],['../classmrs__lib_1_1SubscribeHandler.html#ab24f400bfd36d733366d25b63ec8889d',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, void(ObjectType1::*const timeout_callback)(const std::string &topic_name, const ros::Time &last_msg), ObjectType1 *const obj1, Types ... args)'],['../classmrs__lib_1_1SubscribeHandler.html#a27ac792b1dfa8a62d087b565bec33925',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, void(ObjectType2::*const message_callback)(typename MessageType::ConstPtr), ObjectType2 *const obj2, Types ... args)'],['../classmrs__lib_1_1SubscribeHandler.html#a14c1c92e119c047a3c40724f1152b7b9',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, void(ObjectType2::*const message_callback)(typename MessageType::ConstPtr), ObjectType2 *const obj2, void(ObjectType1::*const timeout_callback)(const std::string &topic_name, const ros::Time &last_msg), ObjectType1 *const obj1, Types ... args)'],['../classmrs__lib_1_1SubscribeHandler.html#a367e7245e60ee2a87f680a27c0e1a8e5',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, const ros::Duration &no_message_timeout, Types ... args)'],['../classmrs__lib_1_1SubscribeHandler.html#ab3499b8b5910450df90c905d1811e4a3',1,'mrs_lib::SubscribeHandler::SubscribeHandler(const SubscribeHandlerOptions &options, mrs_lib::TimeoutManager &timeout_manager, Types ... args)']]] +]; diff --git a/search/functions_12.html b/search/functions_12.html new file mode 100644 index 00000000..48e59155 --- /dev/null +++ b/search/functions_12.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_12.js b/search/functions_12.js new file mode 100644 index 00000000..b989ee98 --- /dev/null +++ b/search/functions_12.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['theta_748',['theta',['../classmrs__lib_1_1geometry_1_1Cone.html#a708721c0fde7cb53e7ba4e585a2d5743',1,'mrs_lib::geometry::Cone']]], + ['threadtimer_749',['ThreadTimer',['../classmrs__lib_1_1ThreadTimer.html#ac2e365201eccac6aae67400e4da4438f',1,'mrs_lib::ThreadTimer::ThreadTimer(const ros::NodeHandle &nh, const ros::Rate &rate, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, const bool oneshot=false, const bool autostart=true)'],['../classmrs__lib_1_1ThreadTimer.html#a2ccbea65e537f1f73da1fa75f37833fc',1,'mrs_lib::ThreadTimer::ThreadTimer(const ros::NodeHandle &nh, const ros::Duration &duration, void(ObjectType::*const callback)(const ros::TimerEvent &), ObjectType *const obj, bool oneshot=false, const bool autostart=true)']]], + ['timeoutmanager_750',['TimeoutManager',['../classmrs__lib_1_1TimeoutManager.html#a7627ccd5204a4f13c832db2cb558128f',1,'mrs_lib::TimeoutManager']]], + ['topicname_751',['topicName',['../classmrs__lib_1_1SubscribeHandler.html#a512ffa88a2164e420f1c4a6ae1823e68',1,'mrs_lib::SubscribeHandler']]], + ['transform_752',['transform',['../classmrs__lib_1_1Transformer.html#a8a66075edc7025976292ebd401d7de16',1,'mrs_lib::Transformer::transform(const T &what, const geometry_msgs::TransformStamped &tf)'],['../classmrs__lib_1_1Transformer.html#a8b05fe85c78f490b938bbf3d5884fce4',1,'mrs_lib::Transformer::transform(const boost::shared_ptr< const T > &what, const geometry_msgs::TransformStamped &tf)'],['../classmrs__lib_1_1Transformer.html#a6509524feeb70fe794964b7462f28409',1,'mrs_lib::Transformer::transform(const boost::shared_ptr< T > &what, const geometry_msgs::TransformStamped &tf)']]], + ['transformaspoint_753',['transformAsPoint',['../classmrs__lib_1_1Transformer.html#ae56ae48888d4fcaf21c912ed491b35d1',1,'mrs_lib::Transformer::transformAsPoint(const Eigen::Vector3d &what, const geometry_msgs::TransformStamped &tf)'],['../classmrs__lib_1_1Transformer.html#ab1533c559b6c94b406322bfbfc700ef7',1,'mrs_lib::Transformer::transformAsPoint(const std::string &from_frame, const Eigen::Vector3d &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))']]], + ['transformasvector_754',['transformAsVector',['../classmrs__lib_1_1Transformer.html#af17729e67e82876f6bbce2d5cec55613',1,'mrs_lib::Transformer::transformAsVector(const Eigen::Vector3d &what, const geometry_msgs::TransformStamped &tf)'],['../classmrs__lib_1_1Transformer.html#a1c71e387e846a2591616e83a88071d24',1,'mrs_lib::Transformer::transformAsVector(const std::string &from_frame, const Eigen::Vector3d &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))']]], + ['transformbroadcaster_755',['TransformBroadcaster',['../classmrs__lib_1_1TransformBroadcaster.html#ab8760c98f2d7111cc029f45b11e24bb9',1,'mrs_lib::TransformBroadcaster']]], + ['transformer_756',['Transformer',['../classmrs__lib_1_1Transformer.html#aca0408b710e4fa6e163ac23719d30fd1',1,'mrs_lib::Transformer::Transformer()'],['../classmrs__lib_1_1Transformer.html#ae1a34c10d53059f9dfaf4c8c05a4f617',1,'mrs_lib::Transformer::Transformer(const std::string &node_name, const ros::Duration &cache_time=ros::Duration(tf2_ros::Buffer::DEFAULT_CACHE_TIME))'],['../classmrs__lib_1_1Transformer.html#a561b0c5342c38dea6071ab400b8eaae4',1,'mrs_lib::Transformer::Transformer(const ros::NodeHandle &nh, const std::string &node_name=std::string(), const ros::Duration &cache_time=ros::Duration(tf2_ros::Buffer::DEFAULT_CACHE_TIME))']]], + ['transformsingle_757',['transformSingle',['../classmrs__lib_1_1Transformer.html#a623af4e8100b71ac700ad5ffac96d2e2',1,'mrs_lib::Transformer::transformSingle(const T &what, const std::string &to_frame)'],['../classmrs__lib_1_1Transformer.html#a58e8e6d80098e192a0d415a14c6deec0',1,'mrs_lib::Transformer::transformSingle(const boost::shared_ptr< T > &what, const std::string &to_frame)'],['../classmrs__lib_1_1Transformer.html#a2c45ff29ac5f482ba9b9c2537d82b8fb',1,'mrs_lib::Transformer::transformSingle(const boost::shared_ptr< const T > &what, const std::string &to_frame)'],['../classmrs__lib_1_1Transformer.html#a7cea399425c4a51a676ba5aa285612d4',1,'mrs_lib::Transformer::transformSingle(const std::string &from_frame, const T &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))'],['../classmrs__lib_1_1Transformer.html#a5afde5d58bc9a558cba5da9e0c2d4d1b',1,'mrs_lib::Transformer::transformSingle(const std::string &from_frame, const boost::shared_ptr< T > &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))'],['../classmrs__lib_1_1Transformer.html#a4d01ec1804bb492694d328704dada907',1,'mrs_lib::Transformer::transformSingle(const std::string &from_frame, const boost::shared_ptr< const T > &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))']]], + ['triangle_758',['Triangle',['../classmrs__lib_1_1geometry_1_1Triangle.html#a14203384b0eb6d3a7ff01330ab24f679',1,'mrs_lib::geometry::Triangle::Triangle()'],['../classmrs__lib_1_1geometry_1_1Triangle.html#af765e8be7fef5ae4cfb972ec51c4a6e8',1,'mrs_lib::geometry::Triangle::Triangle(Eigen::Vector3d a, Eigen::Vector3d b, Eigen::Vector3d c)']]], + ['trianglearea_759',['triangleArea',['../misc_8h.html#a62f7d942a2445dc2c362678523966241',1,'mrs_lib::geometry']]], + ['triangles_760',['triangles',['../classmrs__lib_1_1geometry_1_1Rectangle.html#a4f2e1bce541675c91179b723aa4f9176',1,'mrs_lib::geometry::Rectangle']]], + ['twopointcast_761',['twopointCast',['../classmrs__lib_1_1geometry_1_1Ray.html#a4092f0d023b25fcf61fb426c7f0f6630',1,'mrs_lib::geometry::Ray']]] +]; diff --git a/search/functions_13.html b/search/functions_13.html new file mode 100644 index 00000000..f1fc553f --- /dev/null +++ b/search/functions_13.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_13.js b/search/functions_13.js new file mode 100644 index 00000000..a46d252b --- /dev/null +++ b/search/functions_13.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['ukf_762',['UKF',['../classmrs__lib_1_1UKF.html#acf37d546ec0e03f1ef4c031f96057733',1,'mrs_lib::UKF::UKF()'],['../classmrs__lib_1_1UKF.html#a43f196bc0b8ef4dd75feba3b025576cb',1,'mrs_lib::UKF::UKF(const transition_model_t &transition_model, const observation_model_t &observation_model, const double alpha=1e-3, const double kappa=1, const double beta=2)']]], + ['unwrap_763',['unwrap',['../structmrs__lib_1_1geometry_1_1cyclic.html#a21d98e561a2d296e1d64b38a74883902',1,'mrs_lib::geometry::cyclic']]], + ['usedmsg_764',['usedMsg',['../classmrs__lib_1_1SubscribeHandler.html#ab027bb4a6edece35701e17ba0c137cfc',1,'mrs_lib::SubscribeHandler']]] +]; diff --git a/search/functions_14.html b/search/functions_14.html new file mode 100644 index 00000000..0302cd98 --- /dev/null +++ b/search/functions_14.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_14.js b/search/functions_14.js new file mode 100644 index 00000000..a267d40e --- /dev/null +++ b/search/functions_14.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['value_765',['value',['../structmrs__lib_1_1geometry_1_1cyclic.html#a064a156dd856871bf1b4acf22cba78e3',1,'mrs_lib::geometry::cyclic']]], + ['varsteplkf_766',['varstepLKF',['../classmrs__lib_1_1varstepLKF.html#afe2d9f3643f3f8e4c82879384a4a5eea',1,'mrs_lib::varstepLKF']]], + ['vector3converter_767',['Vector3Converter',['../classmrs__lib_1_1Vector3Converter.html#ac5cf91c41293661ea55749d55aec4d48',1,'mrs_lib::Vector3Converter::Vector3Converter(const tf2::Vector3 &vector3)'],['../classmrs__lib_1_1Vector3Converter.html#abf2c3e688787834522c8a99c374f656e',1,'mrs_lib::Vector3Converter::Vector3Converter(const Eigen::Vector3d &vector3)'],['../classmrs__lib_1_1Vector3Converter.html#aec2780b4e6f0b58ee2c465ab2338df17',1,'mrs_lib::Vector3Converter::Vector3Converter(const geometry_msgs::Vector3 &vector3)'],['../classmrs__lib_1_1Vector3Converter.html#a3936cad709ed1018aba1d05d47639c80',1,'mrs_lib::Vector3Converter::Vector3Converter(const double &x, const double &y, const double &z)']]], + ['vertices_768',['vertices',['../classmrs__lib_1_1geometry_1_1Triangle.html#ad873b5c4ba04613f24dd12348f898487',1,'mrs_lib::geometry::Triangle::vertices()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a05fbbe3a262e09d5834431bc31f2648b',1,'mrs_lib::geometry::Rectangle::vertices()'],['../classmrs__lib_1_1geometry_1_1Cuboid.html#ae03413de879b1dd07df7a8f26b0a75f2',1,'mrs_lib::geometry::Cuboid::vertices()']]] +]; diff --git a/search/functions_15.html b/search/functions_15.html new file mode 100644 index 00000000..18cf76b2 --- /dev/null +++ b/search/functions_15.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_15.js b/search/functions_15.js new file mode 100644 index 00000000..88080e3c --- /dev/null +++ b/search/functions_15.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['waitfornew_769',['waitForNew',['../classmrs__lib_1_1SubscribeHandler.html#a94f4bedf9229325ca6a14202f5cfbcc5',1,'mrs_lib::SubscribeHandler']]], + ['what_770',['what',['../structmrs__lib_1_1JLKF_1_1inverse__exception.html#a1f02bea6207ec02864a693067bcd499f',1,'mrs_lib::JLKF::inverse_exception::what()'],['../structmrs__lib_1_1LKF_1_1inverse__exception.html#a44d325f6cd975003b995d33bd78948ac',1,'mrs_lib::LKF::inverse_exception::what()'],['../structmrs__lib_1_1eigenvector__exception.html#ab825ec32cb055c8c0b3b8b59125e90b5',1,'mrs_lib::eigenvector_exception::what()']]], + ['wrap_771',['wrap',['../structmrs__lib_1_1geometry_1_1cyclic.html#ada5b55bcb4a01898fd9fdd9c393efd95',1,'mrs_lib::geometry::cyclic']]] +]; diff --git a/search/functions_16.html b/search/functions_16.html new file mode 100644 index 00000000..9182391d --- /dev/null +++ b/search/functions_16.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_16.js b/search/functions_16.js new file mode 100644 index 00000000..466af523 --- /dev/null +++ b/search/functions_16.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['yaw_772',['yaw',['../classmrs__lib_1_1EulerAttitude.html#ab29c3b0fb567107c23eff485e8f2578d',1,'mrs_lib::EulerAttitude']]] +]; diff --git a/search/functions_17.html b/search/functions_17.html new file mode 100644 index 00000000..80795060 --- /dev/null +++ b/search/functions_17.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_17.js b/search/functions_17.js new file mode 100644 index 00000000..1c2e9b9e --- /dev/null +++ b/search/functions_17.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['_7eatomicscopeflag_773',['~AtomicScopeFlag',['../classmrs__lib_1_1AtomicScopeFlag.html#aafdf61c0af0bffada120eec2a8c858b1',1,'mrs_lib::AtomicScopeFlag']]], + ['_7ebatchvisualizer_774',['~BatchVisualizer',['../classmrs__lib_1_1BatchVisualizer.html#a83a3baa46f7a3c22079a1d80aaed4459',1,'mrs_lib::BatchVisualizer']]], + ['_7econe_775',['~Cone',['../classmrs__lib_1_1geometry_1_1Cone.html#ae687be891abfb2db67245cd2c13f8586',1,'mrs_lib::geometry::Cone']]], + ['_7ecuboid_776',['~Cuboid',['../classmrs__lib_1_1geometry_1_1Cuboid.html#a5a78508d282bd8d273d97f3055ae0357',1,'mrs_lib::geometry::Cuboid']]], + ['_7ecylinder_777',['~Cylinder',['../classmrs__lib_1_1geometry_1_1Cylinder.html#a9a558196740fd2be133a3c2df7173f4f',1,'mrs_lib::geometry::Cylinder']]], + ['_7eellipse_778',['~Ellipse',['../classmrs__lib_1_1geometry_1_1Ellipse.html#a973caa18f7b0c2e41b263a4267914650',1,'mrs_lib::geometry::Ellipse']]], + ['_7epublisherhandler_779',['~PublisherHandler',['../classmrs__lib_1_1PublisherHandler.html#a9acaa1ef56768636f2163c75dd9e307e',1,'mrs_lib::PublisherHandler']]], + ['_7epublisherhandler_5fimpl_780',['~PublisherHandler_impl',['../classmrs__lib_1_1PublisherHandler__impl.html#a685a159577dfe363423c58a91ba92ac6',1,'mrs_lib::PublisherHandler_impl']]], + ['_7eray_781',['~Ray',['../classmrs__lib_1_1geometry_1_1Ray.html#ad79e6fdb9416510694f14fd92ca41c7a',1,'mrs_lib::geometry::Ray']]], + ['_7erectangle_782',['~Rectangle',['../classmrs__lib_1_1geometry_1_1Rectangle.html#a66d9286f92d6f8ea5c7ebc7400cb29be',1,'mrs_lib::geometry::Rectangle']]], + ['_7escopetimer_783',['~ScopeTimer',['../classmrs__lib_1_1ScopeTimer.html#a243e048e46a8ef623b60c465dc7ee102',1,'mrs_lib::ScopeTimer']]], + ['_7escopetimerlogger_784',['~ScopeTimerLogger',['../classmrs__lib_1_1ScopeTimerLogger.html#a0152ea8087d16a05027e66c44d99662e',1,'mrs_lib::ScopeTimerLogger']]], + ['_7eserviceclienthandler_785',['~ServiceClientHandler',['../classmrs__lib_1_1ServiceClientHandler.html#ad796fc7f9044bdeeacdf549faa1d2f48',1,'mrs_lib::ServiceClientHandler']]], + ['_7eserviceclienthandler_5fimpl_786',['~ServiceClientHandler_impl',['../classmrs__lib_1_1ServiceClientHandler__impl.html#a2d906a4c237db032edfb7578d0eb2be1',1,'mrs_lib::ServiceClientHandler_impl']]], + ['_7ethreadtimer_787',['~ThreadTimer',['../classmrs__lib_1_1ThreadTimer.html#a175a2bcce428cfca8bbf3f4ef836f4ed',1,'mrs_lib::ThreadTimer']]], + ['_7etriangle_788',['~Triangle',['../classmrs__lib_1_1geometry_1_1Triangle.html#ad5cc0e9eb09f9f4900f94fa1908b60f3',1,'mrs_lib::geometry::Triangle']]] +]; diff --git a/search/functions_2.html b/search/functions_2.html new file mode 100644 index 00000000..2737c5ac --- /dev/null +++ b/search/functions_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 00000000..bc88178e --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['c_568',['c',['../classmrs__lib_1_1geometry_1_1Triangle.html#aff6f8fb09fb5e7d4ebf2116142b85638',1,'mrs_lib::geometry::Triangle::c()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a9cd35540a57a2b0663a2a4b360e02d8c',1,'mrs_lib::geometry::Rectangle::c()']]], + ['call_569',['call',['../classmrs__lib_1_1ServiceClientHandler__impl.html#a50394dc3190eafbce4c58b20823942d6',1,'mrs_lib::ServiceClientHandler_impl::call(ServiceType &srv)'],['../classmrs__lib_1_1ServiceClientHandler__impl.html#a35cc1c54991d1eb2801e2dfd205e1ef0',1,'mrs_lib::ServiceClientHandler_impl::call(ServiceType &srv, const int &attempts)'],['../classmrs__lib_1_1ServiceClientHandler__impl.html#aecd6585588ea75d444577651591fb847',1,'mrs_lib::ServiceClientHandler_impl::call(ServiceType &srv, const int &attempts, const double &repeat_delay)'],['../classmrs__lib_1_1ServiceClientHandler.html#acd827db26db5d8e1f310769509176fe2',1,'mrs_lib::ServiceClientHandler::call(ServiceType &srv)'],['../classmrs__lib_1_1ServiceClientHandler.html#a7eee51ebff7a805d425673ddc166d489',1,'mrs_lib::ServiceClientHandler::call(ServiceType &srv, const int &attempts)'],['../classmrs__lib_1_1ServiceClientHandler.html#afdf41e0cf6b2fa0941ee0ae703facc71',1,'mrs_lib::ServiceClientHandler::call(ServiceType &srv, const int &attempts, const double &repeat_delay)']]], + ['callasync_570',['callAsync',['../classmrs__lib_1_1ServiceClientHandler__impl.html#a39ed1a2c10f97d75447224bd9cb9e968',1,'mrs_lib::ServiceClientHandler_impl::callAsync(ServiceType &srv)'],['../classmrs__lib_1_1ServiceClientHandler__impl.html#acbc6113b775545e89e7fa4fd41cf15ed',1,'mrs_lib::ServiceClientHandler_impl::callAsync(ServiceType &srv, const int &attempts)'],['../classmrs__lib_1_1ServiceClientHandler__impl.html#ae15fc00b04219ae241e03c0973a00c5a',1,'mrs_lib::ServiceClientHandler_impl::callAsync(ServiceType &srv, const int &attempts, const double &repeat_delay)'],['../classmrs__lib_1_1ServiceClientHandler.html#aa7f3a5d1566aa2a361594797f162ca0d',1,'mrs_lib::ServiceClientHandler::callAsync(ServiceType &srv)'],['../classmrs__lib_1_1ServiceClientHandler.html#a390d8d24962c3efd849f44627b29387e',1,'mrs_lib::ServiceClientHandler::callAsync(ServiceType &srv, const int &attempts)'],['../classmrs__lib_1_1ServiceClientHandler.html#ac6babcda855d48bc3b8fc72f45f7672b',1,'mrs_lib::ServiceClientHandler::callAsync(ServiceType &srv, const int &attempts, const double &repeat_delay)']]], + ['center_571',['center',['../classmrs__lib_1_1geometry_1_1Triangle.html#a419f55d2c47dac6035495004fec746c9',1,'mrs_lib::geometry::Triangle::center()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#ab541a2748c4876234b4af0f3c220fb2d',1,'mrs_lib::geometry::Rectangle::center()'],['../classmrs__lib_1_1geometry_1_1Cuboid.html#a7ce6626c7018bdae2722073490c1729f',1,'mrs_lib::geometry::Cuboid::center()'],['../classmrs__lib_1_1geometry_1_1Ellipse.html#a058c83435e1cf0f393c1bde54e94f570',1,'mrs_lib::geometry::Ellipse::center()'],['../classmrs__lib_1_1geometry_1_1Cylinder.html#a766270eba57b916335ad0901fec74355',1,'mrs_lib::geometry::Cylinder::center()'],['../classmrs__lib_1_1geometry_1_1Cone.html#a2553c04b3dfef8dfceb938699e11f432',1,'mrs_lib::geometry::Cone::center()']]], + ['check_572',['check',['../classmrs__lib_1_1MedianFilter.html#a518d744f114ad6d0b2591d3804f6f095',1,'mrs_lib::MedianFilter']]], + ['checkpoint_573',['checkpoint',['../classmrs__lib_1_1ScopeTimer.html#acbb378343cba8f94ef228024d7a4b938',1,'mrs_lib::ScopeTimer']]], + ['clear_574',['clear',['../classmrs__lib_1_1MedianFilter.html#a533c6e194f991a9c11b9e2aadf7087a5',1,'mrs_lib::MedianFilter']]], + ['clearbuffers_575',['clearBuffers',['../classmrs__lib_1_1BatchVisualizer.html#a317a263d7a57b88805a3d264976b4c9f',1,'mrs_lib::BatchVisualizer']]], + ['clearvisuals_576',['clearVisuals',['../classmrs__lib_1_1BatchVisualizer.html#aacda752bbfd192279da0fe15f001b0bb',1,'mrs_lib::BatchVisualizer']]], + ['cone_577',['Cone',['../classmrs__lib_1_1geometry_1_1Cone.html#a27103a8552d930ae3a3a2513990d9399',1,'mrs_lib::geometry::Cone::Cone()'],['../classmrs__lib_1_1geometry_1_1Cone.html#a078bc613852240cbf2a0adb086d3d127',1,'mrs_lib::geometry::Cone::Cone(Eigen::Vector3d origin_point, double angle, double height, Eigen::Vector3d orientation)']]], + ['construct_5fobject_578',['construct_object',['../namespacemrs__lib.html#a6bd2a4b1c7a370ecf5abcb082d68f02f',1,'mrs_lib']]], + ['containertostring_579',['containerToString',['../namespacemrs__lib.html#adcd658b38c38786fa906e95b1252393a',1,'mrs_lib::containerToString(const Iterator begin, const Iterator end, const std::string &delimiter=", ")'],['../namespacemrs__lib.html#a10c2af0f8c317177ca6abca5fd80a52a',1,'mrs_lib::containerToString(const Iterator begin, const Iterator end, const char *delimiter)'],['../namespacemrs__lib.html#a1c0c2c8502894646615382a9134c866a',1,'mrs_lib::containerToString(const Container &cont, const std::string &delimiter=", ")'],['../namespacemrs__lib.html#ad5bd70829aedd3ff4a67d8902855eed9',1,'mrs_lib::containerToString(const Container &cont, const char *delimiter=", ")']]], + ['convert_580',['convert',['../structmrs__lib_1_1geometry_1_1cyclic.html#a872202b166f48d3759cd58cc57242f5f',1,'mrs_lib::geometry::cyclic::convert(const cyclic &what)'],['../structmrs__lib_1_1geometry_1_1cyclic.html#aa86da042144ee34330e4cef57b410f58',1,'mrs_lib::geometry::cyclic::convert() const'],['../namespacemrs__lib.html#a66ab536759b8cab264138c098008c9ca',1,'mrs_lib::convert()']]], + ['correct_581',['correct',['../classmrs__lib_1_1JLKF.html#a6aa1475ecb42a4ee97e8d7e93cb5c523',1,'mrs_lib::JLKF::correct()'],['../classmrs__lib_1_1KalmanFilter.html#a66c1e0d2e496f304a4f6166e7b894aac',1,'mrs_lib::KalmanFilter::correct()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#a3e541e3ec53df99c77f8cc7031728d6f',1,'mrs_lib::KalmanFilterAloamGarm::correct()'],['../classmrs__lib_1_1LKF.html#a8ba4552b6fa909e5d899d2fe8c8fdaa5',1,'mrs_lib::LKF::correct()'],['../classmrs__lib_1_1NCUKF.html#ab12dfb8b6ad4c831c761327a3be2d814',1,'mrs_lib::NCUKF::correct()'],['../classmrs__lib_1_1UKF.html#ad31a0a6b6c1ea433daa0bae83e6fb6e4',1,'mrs_lib::UKF::correct()']]], + ['correctline_582',['correctLine',['../classmrs__lib_1_1DKF.html#a7e5d887496dea33a60b8cf2a0acc5fec',1,'mrs_lib::DKF']]], + ['createroutine_583',['createRoutine',['../classmrs__lib_1_1Profiler.html#aaf170ec3c6f67e11931cde978a5d3750',1,'mrs_lib::Profiler::createRoutine(std::string name, double expected_rate, double threshold, ros::TimerEvent event)'],['../classmrs__lib_1_1Profiler.html#a631e75be501cf4353dc8578bd9f66029',1,'mrs_lib::Profiler::createRoutine(std::string name)']]], + ['cross_584',['cross',['../misc_8h.html#aedd0e70cfd555703b53c469312d56293',1,'mrs_lib::geometry']]], + ['cuboid_585',['Cuboid',['../classmrs__lib_1_1geometry_1_1Cuboid.html#a31a698a34b8443596be58a06f3046c79',1,'mrs_lib::geometry::Cuboid::Cuboid()'],['../classmrs__lib_1_1geometry_1_1Cuboid.html#a1dfbd69913658cddfc2394d8cfed8215',1,'mrs_lib::geometry::Cuboid::Cuboid(Eigen::Vector3d p0, Eigen::Vector3d p1, Eigen::Vector3d p2, Eigen::Vector3d p3, Eigen::Vector3d p4, Eigen::Vector3d p5, Eigen::Vector3d p6, Eigen::Vector3d p7)'],['../classmrs__lib_1_1geometry_1_1Cuboid.html#adcacc925347e73dbfd81529842ff3c21',1,'mrs_lib::geometry::Cuboid::Cuboid(std::vector< Eigen::Vector3d > points)'],['../classmrs__lib_1_1geometry_1_1Cuboid.html#a34b3cc64de7244e0b3ac2f71cdb22d95',1,'mrs_lib::geometry::Cuboid::Cuboid(Eigen::Vector3d center, Eigen::Vector3d size, Eigen::Quaterniond orientation)']]], + ['cyclic_586',['cyclic',['../structmrs__lib_1_1geometry_1_1cyclic.html#ab366578641265f73655d1edc023cc2c7',1,'mrs_lib::geometry::cyclic::cyclic()'],['../structmrs__lib_1_1geometry_1_1cyclic.html#ae0cfbde43f9fa6a3f26f1e4cf8184d30',1,'mrs_lib::geometry::cyclic::cyclic(const flt val)'],['../structmrs__lib_1_1geometry_1_1cyclic.html#a9ca52b4d47969ec56057b8217f201ab9',1,'mrs_lib::geometry::cyclic::cyclic(const cyclic &other)'],['../structmrs__lib_1_1geometry_1_1cyclic.html#ad40f88cb0dab7a684335f3403a9df7b0',1,'mrs_lib::geometry::cyclic::cyclic(const spec &other)']]], + ['cylinder_587',['Cylinder',['../classmrs__lib_1_1geometry_1_1Cylinder.html#ae4b5f3500ae892f398ab88f5e545e0aa',1,'mrs_lib::geometry::Cylinder::Cylinder()'],['../classmrs__lib_1_1geometry_1_1Cylinder.html#a868fdc0baa204d3bf78d614b532aa32e',1,'mrs_lib::geometry::Cylinder::Cylinder(Eigen::Vector3d center, double radius, double height, Eigen::Quaterniond orientation)']]] +]; diff --git a/search/functions_3.html b/search/functions_3.html new file mode 100644 index 00000000..6da86e7d --- /dev/null +++ b/search/functions_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 00000000..ad243ec6 --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['d_588',['d',['../classmrs__lib_1_1geometry_1_1Rectangle.html#aec6ae68b84c5a24580068fbc70a9452d',1,'mrs_lib::geometry::Rectangle']]], + ['diff_589',['diff',['../structmrs__lib_1_1geometry_1_1cyclic.html#aa5b1c6f8e1ab47b374f10a1a96de910b',1,'mrs_lib::geometry::cyclic']]], + ['direction_590',['direction',['../classmrs__lib_1_1geometry_1_1Ray.html#a01b7ff2bb88b61c178f4991c8cd847bf',1,'mrs_lib::geometry::Ray::direction()'],['../classmrs__lib_1_1geometry_1_1Cone.html#aa973eb3025776015d9e542af7aea730f',1,'mrs_lib::geometry::Cone::direction()']]], + ['directioncast_591',['directionCast',['../classmrs__lib_1_1geometry_1_1Ray.html#ab8ea82597cf6d0eb1e72105c13f41fed',1,'mrs_lib::geometry::Ray']]], + ['dist_592',['dist',['../structmrs__lib_1_1geometry_1_1cyclic.html#a9eb4b1ce4c4307d6bed9642bbf52133e',1,'mrs_lib::geometry::cyclic::dist()'],['../misc_8h.html#a53aed2b4889c7574f51b590d0a602722',1,'mrs_lib::geometry::dist(const vec2_t &a, const vec2_t &b)'],['../misc_8h.html#ae00d8eaf9c43e838e245454ef7c290f4',1,'mrs_lib::geometry::dist(const vec3_t &a, const vec3_t &b)']]], + ['dkf_593',['DKF',['../classmrs__lib_1_1DKF.html#a75bd345a8f4e3856d35d23d3b85b12cd',1,'mrs_lib::DKF::DKF()'],['../classmrs__lib_1_1DKF.html#a68c0d27c7ae1897c6b54cea9e75b95ec',1,'mrs_lib::DKF::DKF(const A_t &A, const B_t &B)']]], + ['dynamicpublisher_594',['DynamicPublisher',['../classmrs__lib_1_1DynamicPublisher.html#a2c671b4d99d4bb6bde12e7a1d8717687',1,'mrs_lib::DynamicPublisher::DynamicPublisher()'],['../classmrs__lib_1_1DynamicPublisher.html#a6a17d49f4d7203f8b8693c6ceb2fb1d9',1,'mrs_lib::DynamicPublisher::DynamicPublisher(const ros::NodeHandle &nh)']]] +]; diff --git a/search/functions_4.html b/search/functions_4.html new file mode 100644 index 00000000..911304e6 --- /dev/null +++ b/search/functions_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 00000000..d6f19be6 --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['ellipse_595',['Ellipse',['../classmrs__lib_1_1geometry_1_1Ellipse.html#ab891e8f86df11bb34f0571ebeb136c2a',1,'mrs_lib::geometry::Ellipse::Ellipse()'],['../classmrs__lib_1_1geometry_1_1Ellipse.html#ad64c67ccd7e0c21b5698a6791adf6831',1,'mrs_lib::geometry::Ellipse::Ellipse(Eigen::Vector3d center, Eigen::Quaterniond orientation, double a, double b)']]], + ['eulerattitude_596',['EulerAttitude',['../classmrs__lib_1_1EulerAttitude.html#ac4da09217c4956043801841737da8521',1,'mrs_lib::EulerAttitude']]] +]; diff --git a/search/functions_5.html b/search/functions_5.html new file mode 100644 index 00000000..61b920db --- /dev/null +++ b/search/functions_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 00000000..2fc2caec --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['fit_597',['fit',['../classmrs__lib_1_1RHEIV.html#aad00da516e55bb60661b5cf234487932',1,'mrs_lib::RHEIV::fit(const xs_t &xs, const Ps_t &Ps)'],['../classmrs__lib_1_1RHEIV.html#a9eaa3b7a946a9c590326d3b47295d728',1,'mrs_lib::RHEIV::fit(const T_it1 &xs_begin, const T_it1 &xs_end, const T_it2 &Ps_begin, const T_it2 &Ps_end)']]], + ['fit_5fals_598',['fit_ALS',['../classmrs__lib_1_1RHEIV.html#a2123ee2ffa07063a8a50275b998874ca',1,'mrs_lib::RHEIV']]], + ['frame_5ffrom_599',['frame_from',['../classmrs__lib_1_1Transformer.html#a0a440d4cd248304525a05e8cfa9662f7',1,'mrs_lib::Transformer::frame_from(const geometry_msgs::TransformStamped &msg)'],['../classmrs__lib_1_1Transformer.html#a7a53d960ee4b76ea943d9c19d23f2e95',1,'mrs_lib::Transformer::frame_from(geometry_msgs::TransformStamped &msg)']]], + ['frame_5fto_600',['frame_to',['../classmrs__lib_1_1Transformer.html#a4f4befc33e5518afa01026b7955c1e2b',1,'mrs_lib::Transformer::frame_to(const geometry_msgs::TransformStamped &msg)'],['../classmrs__lib_1_1Transformer.html#a34792e38e397efc72701898ff22114cc',1,'mrs_lib::Transformer::frame_to(geometry_msgs::TransformStamped &msg)']]], + ['full_601',['full',['../classmrs__lib_1_1MedianFilter.html#acdd73f7ffc9868eb6a05e7b6aea35d85',1,'mrs_lib::MedianFilter']]] +]; diff --git a/search/functions_6.html b/search/functions_6.html new file mode 100644 index 00000000..dc70a4a0 --- /dev/null +++ b/search/functions_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_6.js b/search/functions_6.js new file mode 100644 index 00000000..c9608c2e --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,30 @@ +var searchData= +[ + ['get_5fals_5festimate_602',['get_ALS_estimate',['../classmrs__lib_1_1RHEIV.html#a96de075c76bf79a411606d762e4b9728',1,'mrs_lib::RHEIV']]], + ['get_5flast_5festimate_603',['get_last_estimate',['../classmrs__lib_1_1RHEIV.html#ac7f24b984bcfdee4f21de1206942f986',1,'mrs_lib::RHEIV']]], + ['get_5fmutexed_604',['get_mutexed',['../namespacemrs__lib.html#aaf62529e79b5d131ea5c0fedee10b9ca',1,'mrs_lib::get_mutexed(std::mutex &mut, Args &... args)'],['../namespacemrs__lib.html#aa3a541823230c37a69e51d4e90aa54e0',1,'mrs_lib::get_mutexed(std::mutex &mut, T &arg)']]], + ['get_5fset_5fmutexed_605',['get_set_mutexed',['../namespacemrs__lib.html#ae41b720a78b36db5ac51d8213972d001',1,'mrs_lib']]], + ['getcap_606',['getCap',['../classmrs__lib_1_1geometry_1_1Cylinder.html#a9730caea8c6bd44467038a8e04212fe6',1,'mrs_lib::geometry::Cylinder::getCap()'],['../classmrs__lib_1_1geometry_1_1Cone.html#a2e0546bb5ccb22ee88f1056dccc9a488',1,'mrs_lib::geometry::Cone::getCap()']]], + ['getextrinsicrpy_607',['getExtrinsicRPY',['../classmrs__lib_1_1AttitudeConverter.html#a0a9b9b0d146b4ccdc50c9a9037aec346',1,'mrs_lib::AttitudeConverter']]], + ['getheading_608',['getHeading',['../classmrs__lib_1_1AttitudeConverter.html#a6efdbb896bca9d52abdafb2eec0daf48',1,'mrs_lib::AttitudeConverter::getHeading()'],['../namespacemrs__lib.html#a193b468ac0f1b874af53c64ea0400236',1,'mrs_lib::getHeading(const geometry_msgs::Pose &data)'],['../namespacemrs__lib.html#a4c4a63d0de925cfa92316f6b5be78169',1,'mrs_lib::getHeading(const geometry_msgs::PoseConstPtr &data)'],['../namespacemrs__lib.html#ab57f24ac15517d030da375dfd6b27f2a',1,'mrs_lib::getHeading(const geometry_msgs::PoseWithCovariance &data)'],['../namespacemrs__lib.html#a0006b1926f70e598a4f22d0a4d0fd177',1,'mrs_lib::getHeading(const geometry_msgs::PoseWithCovarianceConstPtr &data)'],['../namespacemrs__lib.html#a482e880bcf945677389dcab02597e90f',1,'mrs_lib::getHeading(const nav_msgs::Odometry &data)'],['../namespacemrs__lib.html#aba8b3d81b8855577fbe90fc9a2f84fb6',1,'mrs_lib::getHeading(const nav_msgs::OdometryConstPtr &data)'],['../namespacemrs__lib.html#ad3594a3b11dd4b67c42c25e3caba896e',1,'mrs_lib::getHeading(const mrs_msgs::TrackerCommand &data)'],['../namespacemrs__lib.html#adfa03f341e40b1999bc66cdf066b714e',1,'mrs_lib::getHeading(const mrs_msgs::TrackerCommandConstPtr &data)'],['../namespacemrs__lib.html#af4481d1d612b63a2c63f9e2dac6aaa3c',1,'mrs_lib::getHeading(const mrs_msgs::Reference &data)'],['../namespacemrs__lib.html#a0285b59825283d220c6b3501853a2b28',1,'mrs_lib::getHeading(const mrs_msgs::ReferenceConstPtr &data)'],['../namespacemrs__lib.html#a58888855de6c5e0e9c0e9d9340299e54',1,'mrs_lib::getHeading(const mrs_msgs::ReferenceStamped &data)'],['../namespacemrs__lib.html#acfd8813200df68fad24ad3051f6b4a3d',1,'mrs_lib::getHeading(const mrs_msgs::ReferenceStampedConstPtr &data)']]], + ['getheadingrate_609',['getHeadingRate',['../classmrs__lib_1_1AttitudeConverter.html#ab3ac6086b34f743ac5e78249640eeddd',1,'mrs_lib::AttitudeConverter']]], + ['getintrinsicrpy_610',['getIntrinsicRPY',['../classmrs__lib_1_1AttitudeConverter.html#abe03466ce1c2aefb74d402a3f1433693',1,'mrs_lib::AttitudeConverter']]], + ['getlifetime_611',['getLifetime',['../classmrs__lib_1_1ScopeTimer.html#abe8dc75be918b3a2ca7bbb043a022106',1,'mrs_lib::ScopeTimer']]], + ['getlogfilepath_612',['getLogFilepath',['../classmrs__lib_1_1ScopeTimerLogger.html#addb114f39d72c3c3ee2ea8a4074cf455',1,'mrs_lib::ScopeTimerLogger']]], + ['getmsg_613',['getMsg',['../classmrs__lib_1_1SubscribeHandler.html#a19a708c3f200ccfac2695a649b9d6e77',1,'mrs_lib::SubscribeHandler']]], + ['getnumsubscribers_614',['getNumSubscribers',['../classmrs__lib_1_1PublisherHandler__impl.html#a2043d0a61e0ff0dbd0acd6a64f1e4bef',1,'mrs_lib::PublisherHandler_impl::getNumSubscribers()'],['../classmrs__lib_1_1PublisherHandler.html#acae5a82536022514c6a2cefa2f7980b1',1,'mrs_lib::PublisherHandler::getNumSubscribers()']]], + ['getpitch_615',['getPitch',['../classmrs__lib_1_1AttitudeConverter.html#a599afad1265aaa6fd32d518e4de7817f',1,'mrs_lib::AttitudeConverter']]], + ['getpose_616',['getPose',['../namespacemrs__lib.html#a1cd3887061c0b071a29dbbfe1b8a11dd',1,'mrs_lib::getPose(const nav_msgs::Odometry &data)'],['../namespacemrs__lib.html#acb6bfcfa0d9432d2184852b4f4d2694b',1,'mrs_lib::getPose(const nav_msgs::OdometryConstPtr &data)']]], + ['getposition_617',['getPosition',['../namespacemrs__lib.html#aafe68a11e627c33f976dac00f49edb03',1,'mrs_lib::getPosition(const geometry_msgs::Pose &data)'],['../namespacemrs__lib.html#a6ee4630b5dd76e9c67f00e7f4ce35806',1,'mrs_lib::getPosition(const geometry_msgs::PoseConstPtr &data)'],['../namespacemrs__lib.html#a4a813c8d2b7a92090ef94ed0ccc1f2d7',1,'mrs_lib::getPosition(const geometry_msgs::PoseWithCovariance &data)'],['../namespacemrs__lib.html#a2f32a3fa1e335cf1c33833ef33838f36',1,'mrs_lib::getPosition(const geometry_msgs::PoseWithCovarianceConstPtr &data)'],['../namespacemrs__lib.html#af2a47eec589a6a62199f9fa2b4879d5b',1,'mrs_lib::getPosition(const geometry_msgs::TwistConstPtr &data)'],['../namespacemrs__lib.html#addf482f99d48899ccf29a9e89eb5771e',1,'mrs_lib::getPosition(const geometry_msgs::TwistWithCovarianceConstPtr &data)'],['../namespacemrs__lib.html#a6beef9718623cdac64b8b5ea35c8be4a',1,'mrs_lib::getPosition(const nav_msgs::Odometry &data)'],['../namespacemrs__lib.html#a52981dc7eab7573aedf1d447cb40b1fb',1,'mrs_lib::getPosition(const nav_msgs::OdometryConstPtr &data)'],['../namespacemrs__lib.html#a4c51dc5a87098b8ecd7d7e78599be7b8',1,'mrs_lib::getPosition(const mrs_msgs::TrackerCommand &data)'],['../namespacemrs__lib.html#af85023d127c2383e6825ab7e4f7da1fb',1,'mrs_lib::getPosition(const mrs_msgs::TrackerCommandConstPtr &data)'],['../namespacemrs__lib.html#a8f78d985e8d87688482e5e30c948b067',1,'mrs_lib::getPosition(const mrs_msgs::Reference &data)'],['../namespacemrs__lib.html#aa767373d0d66e633d754d5fa4db1afca',1,'mrs_lib::getPosition(const mrs_msgs::ReferenceConstPtr &data)'],['../namespacemrs__lib.html#aa1c31d89c94806084e8da6fecd4ff575',1,'mrs_lib::getPosition(const mrs_msgs::ReferenceStamped &data)'],['../namespacemrs__lib.html#ae4a1dc71e3e48fa26fa8d2fed9211c8c',1,'mrs_lib::getPosition(const mrs_msgs::ReferenceStampedConstPtr &data)']]], + ['getprefix_618',['getPrefix',['../classmrs__lib_1_1ParamLoader.html#a68eb35df103229cd2de7416252723bf8',1,'mrs_lib::ParamLoader']]], + ['getrectangle_619',['getRectangle',['../classmrs__lib_1_1geometry_1_1Cuboid.html#a4279ad2916689b183e9647fbede9bcfb',1,'mrs_lib::geometry::Cuboid']]], + ['getroll_620',['getRoll',['../classmrs__lib_1_1AttitudeConverter.html#a82b32b4b7ff4de5bcf78b168f0c3c569',1,'mrs_lib::AttitudeConverter']]], + ['gettransform_621',['getTransform',['../classmrs__lib_1_1Transformer.html#a3a29dfb385f1b9c4deee695181880995',1,'mrs_lib::Transformer::getTransform(const std::string &from_frame, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))'],['../classmrs__lib_1_1Transformer.html#a73ce6b60499d9ed491859a444f8d8afd',1,'mrs_lib::Transformer::getTransform(const std::string &from_frame, const ros::Time &from_stamp, const std::string &to_frame, const ros::Time &to_stamp, const std::string &fixed_frame)']]], + ['getvectorx_622',['getVectorX',['../classmrs__lib_1_1AttitudeConverter.html#a131f7ba8484bd0c7465594625d19ae89',1,'mrs_lib::AttitudeConverter']]], + ['getvectory_623',['getVectorY',['../classmrs__lib_1_1AttitudeConverter.html#a901ca23ee140e6d42027b242f0dfac8b',1,'mrs_lib::AttitudeConverter']]], + ['getvectorz_624',['getVectorZ',['../classmrs__lib_1_1AttitudeConverter.html#a4853f4582b8af4f224726d15a18e9fbc',1,'mrs_lib::AttitudeConverter']]], + ['getvelocity_625',['getVelocity',['../namespacemrs__lib.html#a6e64da46123dd4cc793419585a66e54c',1,'mrs_lib::getVelocity(const geometry_msgs::Twist &data)'],['../namespacemrs__lib.html#a0669aa00311586cf9882f1bccff07d16',1,'mrs_lib::getVelocity(const geometry_msgs::TwistWithCovariance &data)'],['../namespacemrs__lib.html#aab2704bf692a6cfc5674272fc6ff06ca',1,'mrs_lib::getVelocity(const nav_msgs::Odometry &data)'],['../namespacemrs__lib.html#af8c731a97cd737d35d9524ec60f4ee2f',1,'mrs_lib::getVelocity(const nav_msgs::OdometryConstPtr &data)'],['../namespacemrs__lib.html#ade26d077c3e43c9f201a2e8d73dba2b7',1,'mrs_lib::getVelocity(const mrs_msgs::TrackerCommand &data)'],['../namespacemrs__lib.html#ad278e1089b273b3e0216977ee8df8ac5',1,'mrs_lib::getVelocity(const mrs_msgs::TrackerCommandConstPtr &data)']]], + ['getxyz_626',['getXYZ',['../namespacemrs__lib.html#a9ad821408d076d95467fc662b1dac1ab',1,'mrs_lib::getXYZ(const geometry_msgs::Point &data)'],['../namespacemrs__lib.html#a8fc9b477f93c9b8694fb8f90956ae830',1,'mrs_lib::getXYZ(const geometry_msgs::PointConstPtr &data)'],['../namespacemrs__lib.html#af79ccb18192e6ff1f1fc7fdafdee0a0b',1,'mrs_lib::getXYZ(const geometry_msgs::Vector3 &data)'],['../namespacemrs__lib.html#a32ae31e9589cb55806ec32edcf79f928',1,'mrs_lib::getXYZ(const geometry_msgs::Vector3ConstPtr &data)']]], + ['getyaw_627',['getYaw',['../classmrs__lib_1_1AttitudeConverter.html#ab2e8185898d05e5c2c9f7c7bf597f9a3',1,'mrs_lib::AttitudeConverter::getYaw()'],['../namespacemrs__lib.html#af1993419f7b19d38bdbfe3ceb5b7350f',1,'mrs_lib::getYaw(const geometry_msgs::Pose &data)'],['../namespacemrs__lib.html#acc3f167cadca01d5e92be7dc43078feb',1,'mrs_lib::getYaw(const geometry_msgs::PoseConstPtr &data)'],['../namespacemrs__lib.html#a13152460c1973b54f71f230340b20494',1,'mrs_lib::getYaw(const geometry_msgs::PoseWithCovariance &data)'],['../namespacemrs__lib.html#a2aa307f37eb6f60fc4d360adb8559946',1,'mrs_lib::getYaw(const geometry_msgs::PoseWithCovarianceConstPtr &data)'],['../namespacemrs__lib.html#af17cc11983807fb3d6bd17092fa30fc4',1,'mrs_lib::getYaw(const nav_msgs::Odometry &data)'],['../namespacemrs__lib.html#af62f21eed6f44954b6aefbf0afbbf2e0',1,'mrs_lib::getYaw(const nav_msgs::OdometryConstPtr &data)']]], + ['getyawrateintrinsic_628',['getYawRateIntrinsic',['../classmrs__lib_1_1AttitudeConverter.html#afa7a3ddc0e143fe90bd966a6ba9f2913',1,'mrs_lib::AttitudeConverter']]] +]; diff --git a/search/functions_7.html b/search/functions_7.html new file mode 100644 index 00000000..7de31067 --- /dev/null +++ b/search/functions_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_7.js b/search/functions_7.js new file mode 100644 index 00000000..5da17457 --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['h_629',['h',['../classmrs__lib_1_1geometry_1_1Cylinder.html#a730fee04b106aa4ec3fe08be6bb90751',1,'mrs_lib::geometry::Cylinder::h()'],['../classmrs__lib_1_1geometry_1_1Cone.html#a319fa2045f6d56c94f3fa198bd7ae7fc',1,'mrs_lib::geometry::Cone::h()']]], + ['hasmsg_630',['hasMsg',['../classmrs__lib_1_1SubscribeHandler.html#a9c6bcd07e10b60c70f02de2c6d5f632e',1,'mrs_lib::SubscribeHandler']]], + ['haversin_631',['haversin',['../misc_8h.html#a61d1dcf236aac255d384e35efd67370e',1,'mrs_lib::geometry']]], + ['headingfromrot_632',['headingFromRot',['../misc_8h.html#ac5072a0343d0cfe703ddce456e7c5756',1,'mrs_lib::geometry']]] +]; diff --git a/search/functions_8.html b/search/functions_8.html new file mode 100644 index 00000000..7422be24 --- /dev/null +++ b/search/functions_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_8.js b/search/functions_8.js new file mode 100644 index 00000000..26b5d455 --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['initialize_633',['initialize',['../classmrs__lib_1_1ServiceClientHandler.html#adff9526494a62051bf864ef6a7178450',1,'mrs_lib::ServiceClientHandler']]], + ['initialized_634',['initialized',['../classmrs__lib_1_1MedianFilter.html#a843ddc70b6daf92fa91f225fab5b36f7',1,'mrs_lib::MedianFilter']]], + ['inrange_635',['inRange',['../structmrs__lib_1_1geometry_1_1cyclic.html#ae7ff9988f0d3ef6cf3bd724f3e29273b',1,'mrs_lib::geometry::cyclic']]], + ['interp_636',['interp',['../structmrs__lib_1_1geometry_1_1cyclic.html#afe8344d8017f4ed883ecc28379465d99',1,'mrs_lib::geometry::cyclic']]], + ['interpunwrapped_637',['interpUnwrapped',['../structmrs__lib_1_1geometry_1_1cyclic.html#a1c2837eea4d0635833a786d571922d76',1,'mrs_lib::geometry::cyclic']]], + ['intersectionray_638',['intersectionRay',['../classmrs__lib_1_1geometry_1_1Triangle.html#a94238065a0e8d0c27135f55e1daa4ed3',1,'mrs_lib::geometry::Triangle::intersectionRay()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a0b92252c39c755b3a7cba989fbb5c854',1,'mrs_lib::geometry::Rectangle::intersectionRay()'],['../classmrs__lib_1_1geometry_1_1Cuboid.html#adfde2a501c9806bd6e6e99dcf0cac6ff',1,'mrs_lib::geometry::Cuboid::intersectionRay()']]], + ['inverse_639',['inverse',['../classmrs__lib_1_1Transformer.html#a17440196c1c894e265f77b0b9112336a',1,'mrs_lib::Transformer']]], + ['invhaversin_640',['invHaversin',['../misc_8h.html#a600a2f5b7f1e654339f7177f9a64934c',1,'mrs_lib::geometry']]], + ['isfacing_641',['isFacing',['../classmrs__lib_1_1geometry_1_1Rectangle.html#a62a1b7d39bd141d4c38d8079d43ffe02',1,'mrs_lib::geometry::Rectangle']]] +]; diff --git a/search/functions_9.html b/search/functions_9.html new file mode 100644 index 00000000..befd4faa --- /dev/null +++ b/search/functions_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_9.js b/search/functions_9.js new file mode 100644 index 00000000..995ce261 --- /dev/null +++ b/search/functions_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['jlkf_642',['JLKF',['../classmrs__lib_1_1JLKF.html#a0c21f3599fe8ccfb1164ee204a0ae606',1,'mrs_lib::JLKF']]] +]; diff --git a/search/functions_a.html b/search/functions_a.html new file mode 100644 index 00000000..a81e9633 --- /dev/null +++ b/search/functions_a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_a.js b/search/functions_a.js new file mode 100644 index 00000000..734a92e5 --- /dev/null +++ b/search/functions_a.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['lastmsgtime_643',['lastMsgTime',['../classmrs__lib_1_1SubscribeHandler.html#ab96777b29e74827ad109346504565f9b',1,'mrs_lib::SubscribeHandler']]], + ['lkf_644',['LKF',['../classmrs__lib_1_1LKF.html#aecd505e79c0102609c9e5ffbd91a7cc3',1,'mrs_lib::LKF::LKF()'],['../classmrs__lib_1_1LKF.html#a8bb9eee4045a176b56c28bc7e0113fa0',1,'mrs_lib::LKF::LKF(const A_t &A, const B_t &B, const H_t &H)']]], + ['loadedsuccessfully_645',['loadedSuccessfully',['../classmrs__lib_1_1ParamLoader.html#ad49130b893f09bc2247e2bc37a41f6d5',1,'mrs_lib::ParamLoader']]], + ['loadmatrixarray_646',['loadMatrixArray',['../classmrs__lib_1_1ParamLoader.html#af5397147ce0a3ecaf0e1f178a9435183',1,'mrs_lib::ParamLoader::loadMatrixArray(const std::string &name, std::vector< MatrixX< T >> &mat)'],['../classmrs__lib_1_1ParamLoader.html#aaeaec89a76f044b2e5fe2883ae768942',1,'mrs_lib::ParamLoader::loadMatrixArray(const std::string &name, std::vector< MatrixX< T >> &mat, const std::vector< MatrixX< T >> &default_value)']]], + ['loadmatrixarray2_647',['loadMatrixArray2',['../classmrs__lib_1_1ParamLoader.html#af7ffe39a26bd4a457ab01b83e5d5795d',1,'mrs_lib::ParamLoader::loadMatrixArray2(const std::string &name)'],['../classmrs__lib_1_1ParamLoader.html#a46bb91300eaa5c0d06d462b950f92897',1,'mrs_lib::ParamLoader::loadMatrixArray2(const std::string &name, const std::vector< MatrixX< T >> &default_value)']]], + ['loadmatrixdynamic_648',['loadMatrixDynamic',['../classmrs__lib_1_1ParamLoader.html#aabecb03ea3643752ddc3154e6c58d390',1,'mrs_lib::ParamLoader::loadMatrixDynamic(const std::string &name, MatrixX< T > &mat, int rows, int cols)'],['../classmrs__lib_1_1ParamLoader.html#a6b1fbdb2c1ed41ac533a67abad8638d9',1,'mrs_lib::ParamLoader::loadMatrixDynamic(const std::string &name, MatrixX< T > &mat, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)']]], + ['loadmatrixdynamic2_649',['loadMatrixDynamic2',['../classmrs__lib_1_1ParamLoader.html#a89bdbb61a1de508cc0f247f234d824d6',1,'mrs_lib::ParamLoader::loadMatrixDynamic2(const std::string &name, int rows, int cols)'],['../classmrs__lib_1_1ParamLoader.html#a99673cb2d8f39c18da5e6db967238ec9',1,'mrs_lib::ParamLoader::loadMatrixDynamic2(const std::string &name, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)']]], + ['loadmatrixstatic_650',['loadMatrixStatic',['../classmrs__lib_1_1ParamLoader.html#a03dc26f5fad92b0fb8b7437c074b23aa',1,'mrs_lib::ParamLoader::loadMatrixStatic(const std::string &name, Eigen::Matrix< T, rows, cols > &mat)'],['../classmrs__lib_1_1ParamLoader.html#a19bc5cbd5c3ee7d4614555dfe3d96001',1,'mrs_lib::ParamLoader::loadMatrixStatic(const std::string &name, Eigen::Matrix< T, rows, cols > &mat, const Eigen::MatrixBase< Derived > &default_value)'],['../classmrs__lib_1_1ParamLoader.html#aafc3bb716f3728d5a1b1cfc45b0d3ddf',1,'mrs_lib::ParamLoader::loadMatrixStatic(const std::string &name, MatrixX< T > &mat, int rows, int cols)'],['../classmrs__lib_1_1ParamLoader.html#af96b60fd7bce95d3e1d3aa351bccba9b',1,'mrs_lib::ParamLoader::loadMatrixStatic(const std::string &name, MatrixX< T > &mat, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)']]], + ['loadmatrixstatic2_651',['loadMatrixStatic2',['../classmrs__lib_1_1ParamLoader.html#a2a78e5b64d8681a46976a6e9d0486b1a',1,'mrs_lib::ParamLoader::loadMatrixStatic2(const std::string &name)'],['../classmrs__lib_1_1ParamLoader.html#ab6b1b2b00e8548b092893afcfbeee79f',1,'mrs_lib::ParamLoader::loadMatrixStatic2(const std::string &name, const Eigen::MatrixBase< Derived > &default_value)'],['../classmrs__lib_1_1ParamLoader.html#af06e1f2bdf94f8a18a19ae3e77a0f99a',1,'mrs_lib::ParamLoader::loadMatrixStatic2(const std::string &name, int rows, int cols)'],['../classmrs__lib_1_1ParamLoader.html#af8ab00da18479e583adf86983e77c577',1,'mrs_lib::ParamLoader::loadMatrixStatic2(const std::string &name, const Eigen::MatrixBase< Derived > &default_value, int rows, int cols)']]], + ['loadparam_652',['loadParam',['../classmrs__lib_1_1ParamLoader.html#a9e55225fa7d9de0e948b2e64494eb229',1,'mrs_lib::ParamLoader::loadParam(const std::string &name, T &out_value, const T &default_value)'],['../classmrs__lib_1_1ParamLoader.html#af5d9f2ac1549f9a7f03a04b9cebf9fed',1,'mrs_lib::ParamLoader::loadParam(const std::string &name, T &out_value)'],['../classmrs__lib_1_1ParamLoader.html#a5368f22f9c1eee287b39bcc91b8d8f42',1,'mrs_lib::ParamLoader::loadParam(const std::string &name, ros::Duration &out, const ros::Duration &default_value)'],['../classmrs__lib_1_1ParamLoader.html#ae4893dc129c5f6fd07fc26f6c03279cd',1,'mrs_lib::ParamLoader::loadParam(const std::string &name, ros::Duration &out)'],['../classmrs__lib_1_1ParamLoader.html#a472acaab459f4318dc20df8416b6023d',1,'mrs_lib::ParamLoader::loadParam(const std::string &name, std_msgs::ColorRGBA &out, const std_msgs::ColorRGBA &default_value={})'],['../classmrs__lib_1_1ParamLoader.html#a6ee4d78d716c92045a38c40d6ae41c4d',1,'mrs_lib::ParamLoader::loadParam(const std::string &name, MatrixX< T > &mat, const MatrixX< T > &default_value)']]], + ['loadparam2_653',['loadParam2',['../classmrs__lib_1_1ParamLoader.html#a7b31603059669efa75b00d8e73bc163a',1,'mrs_lib::ParamLoader::loadParam2(const std::string &name, const T &default_value)'],['../classmrs__lib_1_1ParamLoader.html#ab8a37a3b88261e120d6ff36a6aebf960',1,'mrs_lib::ParamLoader::loadParam2(const std::string &name)'],['../classmrs__lib_1_1ParamLoader.html#a708d62a49386efe8334d8c13af2d8f85',1,'mrs_lib::ParamLoader::loadParam2(const std::string &name, const std_msgs::ColorRGBA &default_value={})'],['../classmrs__lib_1_1ParamLoader.html#a080f2c2605b42219c63d62d0fd8e0948',1,'mrs_lib::ParamLoader::loadParam2(const std::string &name, const MatrixX< T > &default_value)']]], + ['loadparamreusable_654',['loadParamReusable',['../classmrs__lib_1_1ParamLoader.html#add294058e4857eda6a8ece7e0b451390',1,'mrs_lib::ParamLoader::loadParamReusable(const std::string &name, T &out_value, const T &default_value)'],['../classmrs__lib_1_1ParamLoader.html#a31b36d7e1109d2c1d663122c689359c0',1,'mrs_lib::ParamLoader::loadParamReusable(const std::string &name, T &out_value)']]], + ['loadparamreusable2_655',['loadParamReusable2',['../classmrs__lib_1_1ParamLoader.html#ae3e15767c2e94a1f22a9205ae3f507f1',1,'mrs_lib::ParamLoader::loadParamReusable2(const std::string &name, const T &default_value)'],['../classmrs__lib_1_1ParamLoader.html#abe9a7f5aea80c8cdb2d624c12f098a90',1,'mrs_lib::ParamLoader::loadParamReusable2(const std::string &name)']]], + ['log_656',['log',['../classmrs__lib_1_1ScopeTimerLogger.html#a98f7fe29f151e4d0b88952530f40ef06',1,'mrs_lib::ScopeTimerLogger::log(const std::string &scope, const chrono_tp &time_start, const chrono_tp &time_end)'],['../classmrs__lib_1_1ScopeTimerLogger.html#a8f3794f5477960606a86543ddb708b1f',1,'mrs_lib::ScopeTimerLogger::log(const std::string &scope, const std::string &label_from, const std::string &label_to, const chrono_tp &time_start, const chrono_tp &time_end)']]], + ['loggingenabled_657',['loggingEnabled',['../classmrs__lib_1_1ScopeTimerLogger.html#aaf51a60a214ab18976a354c328fc9d09',1,'mrs_lib::ScopeTimerLogger']]] +]; diff --git a/search/functions_b.html b/search/functions_b.html new file mode 100644 index 00000000..345265d6 --- /dev/null +++ b/search/functions_b.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_b.js b/search/functions_b.js new file mode 100644 index 00000000..0a3d168b --- /dev/null +++ b/search/functions_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['median_658',['median',['../classmrs__lib_1_1MedianFilter.html#a53562ea9addbf12ba3cd257cdede4af6',1,'mrs_lib::MedianFilter']]], + ['medianfilter_659',['MedianFilter',['../classmrs__lib_1_1MedianFilter.html#a6c6bd20d15d66535b900634396e99f51',1,'mrs_lib::MedianFilter::MedianFilter(const size_t buffer_length, const double min_value=-std::numeric_limits< double >::infinity(), const double max_value=std::numeric_limits< double >::infinity(), const double max_diff=std::numeric_limits< double >::infinity())'],['../classmrs__lib_1_1MedianFilter.html#ae810bd254e4fccfeb883b4585062f166',1,'mrs_lib::MedianFilter::MedianFilter()'],['../classmrs__lib_1_1MedianFilter.html#aa17291d605ef5364db2835745a2c669c',1,'mrs_lib::MedianFilter::MedianFilter(const MedianFilter &other)'],['../classmrs__lib_1_1MedianFilter.html#a46da8f440b739a1d01710104fc38611c',1,'mrs_lib::MedianFilter::MedianFilter(MedianFilter &&other)']]] +]; diff --git a/search/functions_c.html b/search/functions_c.html new file mode 100644 index 00000000..858bfd6c --- /dev/null +++ b/search/functions_c.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_c.js b/search/functions_c.js new file mode 100644 index 00000000..e503ea0d --- /dev/null +++ b/search/functions_c.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['nclkf_660',['NCLKF',['../classmrs__lib_1_1NCLKF.html#a5f970519deaccdbb021df412645f26d5',1,'mrs_lib::NCLKF::NCLKF()'],['../classmrs__lib_1_1NCLKF.html#aa4dcb47ceca9f506407e14858567ea09',1,'mrs_lib::NCLKF::NCLKF(const A_t &A, const B_t &B, const H_t &H, const double l)']]], + ['nclkf_5fpartial_661',['NCLKF_partial',['../classmrs__lib_1_1NCLKF__partial.html#aabe13461dda8a89463ce87888fd6e428',1,'mrs_lib::NCLKF_partial::NCLKF_partial()'],['../classmrs__lib_1_1NCLKF__partial.html#a1c6b3f2a9bd2d7cafe652d1bb24872e7',1,'mrs_lib::NCLKF_partial::NCLKF_partial(const A_t &A, const B_t &B, const H_t &H, const double l, const indices_t &norm_constrained_indices)']]], + ['newmsg_662',['newMsg',['../classmrs__lib_1_1SubscribeHandler.html#a46bde5660a9480814caa801e2baf3cd3',1,'mrs_lib::SubscribeHandler']]], + ['normal_663',['normal',['../classmrs__lib_1_1geometry_1_1Triangle.html#ac9b355e443d37f91d83ab76bbfa35aa6',1,'mrs_lib::geometry::Triangle::normal()'],['../classmrs__lib_1_1geometry_1_1Rectangle.html#a5cf41dfd6e82f02c8bcc18bc134d235b',1,'mrs_lib::geometry::Rectangle::normal()']]] +]; diff --git a/search/functions_d.html b/search/functions_d.html new file mode 100644 index 00000000..2f09f51b --- /dev/null +++ b/search/functions_d.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_d.js b/search/functions_d.js new file mode 100644 index 00000000..23049161 --- /dev/null +++ b/search/functions_d.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['angleaxis_3c_20t_20_3e_664',['AngleAxis< T >',['../classmrs__lib_1_1AttitudeConverter.html#a10847ba4ce35fa86efbe5933ba488183',1,'mrs_lib::AttitudeConverter']]], + ['matrix3x3_665',['Matrix3x3',['../classmrs__lib_1_1AttitudeConverter.html#a123b85369560e858a9d3aba19a49227a',1,'mrs_lib::AttitudeConverter']]], + ['operator_20eulerattitude_666',['operator EulerAttitude',['../classmrs__lib_1_1AttitudeConverter.html#a03ef9a1c10a9963e650fa217f0f04707',1,'mrs_lib::AttitudeConverter']]], + ['operator_2b_3d_667',['operator+=',['../structmrs__lib_1_1geometry_1_1cyclic.html#a0d797e1245025227ede866ab08bcc19f',1,'mrs_lib::geometry::cyclic']]], + ['operator_2d_3d_668',['operator-=',['../structmrs__lib_1_1geometry_1_1cyclic.html#ad45609e5fa890a79729b100231e427da',1,'mrs_lib::geometry::cyclic']]], + ['operator_3c_669',['operator<',['../cyclic_8h.html#a8bb4c24541320f151f1781100c789cd3',1,'mrs_lib::geometry']]], + ['operator_3c_3c_670',['operator<<',['../cyclic_8h.html#aebc05b8cec59b7a37a72024e26a449f7',1,'mrs_lib::geometry']]], + ['operator_3d_671',['operator=',['../structmrs__lib_1_1geometry_1_1cyclic.html#a1ff6b499102b0eb290b6d121284c51ce',1,'mrs_lib::geometry::cyclic::operator=(const flt nval)'],['../structmrs__lib_1_1geometry_1_1cyclic.html#ace7e2ff831cf60311e28a70035114bcd',1,'mrs_lib::geometry::cyclic::operator=(const cyclic &other)'],['../structmrs__lib_1_1geometry_1_1cyclic.html#a8c81dca050a406b4225e8816a1955fb2',1,'mrs_lib::geometry::cyclic::operator=(cyclic &&other)'],['../classmrs__lib_1_1MedianFilter.html#ab30170b4f0d029c66e0a616936c7b693',1,'mrs_lib::MedianFilter::operator=(const MedianFilter &other)'],['../classmrs__lib_1_1MedianFilter.html#acc63d667e153c07ea9481eb0b3d74c54',1,'mrs_lib::MedianFilter::operator=(MedianFilter &&other)'],['../classmrs__lib_1_1Profiler.html#ae054cd2655538ee7b4a0dec35aa0cf16',1,'mrs_lib::Profiler::operator=()'],['../classmrs__lib_1_1PublisherHandler.html#a23a8578213fd78347ebaa259ee17c218',1,'mrs_lib::PublisherHandler::operator=()'],['../classmrs__lib_1_1ServiceClientHandler.html#a03d184432cd8b51f683746e87b071bdb',1,'mrs_lib::ServiceClientHandler::operator=()'],['../classmrs__lib_1_1Transformer.html#a6c4c846758bf173c7aeb488c8ff773b1',1,'mrs_lib::Transformer::operator=()']]], + ['operator_3e_672',['operator>',['../cyclic_8h.html#a60745f66bbc41c3cb323c8b1c3f050d7',1,'mrs_lib::geometry']]], + ['orientation_673',['orientation',['../classmrs__lib_1_1geometry_1_1Ellipse.html#a65f59ca228eea37a914ce0d6d6695b2d',1,'mrs_lib::geometry::Ellipse::orientation()'],['../classmrs__lib_1_1geometry_1_1Cylinder.html#aa7eccea15c92f1df02fc48684bb4d219',1,'mrs_lib::geometry::Cylinder::orientation()']]], + ['origin_674',['origin',['../classmrs__lib_1_1geometry_1_1Cone.html#a35b559777042218051ff46c3b7353232',1,'mrs_lib::geometry::Cone']]], + ['quaternion_675',['Quaternion',['../classmrs__lib_1_1AttitudeConverter.html#abc1686c5d27246a937c661f313ca13d0',1,'mrs_lib::AttitudeConverter::Quaternion() const'],['../classmrs__lib_1_1AttitudeConverter.html#a4dd088014d1f15da217c960e8a9dbd6f',1,'mrs_lib::AttitudeConverter::Quaternion() const'],['../classmrs__lib_1_1AttitudeConverter.html#a7b6d71e47ec12e76f25823ad408c704c',1,'mrs_lib::AttitudeConverter::Quaternion() const']]], + ['quaternion_3c_20t_20_3e_676',['Quaternion< T >',['../classmrs__lib_1_1AttitudeConverter.html#a6db421976b5060c086f495f00edca314',1,'mrs_lib::AttitudeConverter']]], + ['transform_677',['Transform',['../classmrs__lib_1_1AttitudeConverter.html#a09cd3459f52f9071db33c1ac7a5161de',1,'mrs_lib::AttitudeConverter']]], + ['tuple_3c_20double_20_26_2c_20double_20_26_2c_20double_20_26_20_3e_678',['tuple< double &, double &, double & >',['../classmrs__lib_1_1AttitudeConverter.html#a8f7e3a434632e7546149d64b2ab2e191',1,'mrs_lib::AttitudeConverter']]], + ['vector3_679',['Vector3',['../classmrs__lib_1_1Vector3Converter.html#a6f6edf59403aded9e3bffcd603cce5c0',1,'mrs_lib::Vector3Converter::Vector3() const'],['../classmrs__lib_1_1Vector3Converter.html#a96b9daae53786acb4f52e09e8fb7bc8a',1,'mrs_lib::Vector3Converter::Vector3() const']]], + ['vector3d_680',['Vector3d',['../classmrs__lib_1_1Vector3Converter.html#a69c3a9a8dbcff2876e40d28022c019e3',1,'mrs_lib::Vector3Converter']]] +]; diff --git a/search/functions_e.html b/search/functions_e.html new file mode 100644 index 00000000..ee5afa65 --- /dev/null +++ b/search/functions_e.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_e.js b/search/functions_e.js new file mode 100644 index 00000000..8c917232 --- /dev/null +++ b/search/functions_e.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['loadparam2_3c_20ros_3a_3aduration_20_3e_681',['loadParam2< ros::Duration >',['../namespacemrs__lib.html#a5edbd3a77e55f8ab165500ca05ad26f4',1,'mrs_lib::loadParam2< ros::Duration >(const std::string &name, const ros::Duration &default_value)'],['../namespacemrs__lib.html#a3b3a11cf5354658548afb9fd6f241d72',1,'mrs_lib::loadParam2< ros::Duration >(const std::string &name)']]], + ['p1_682',['p1',['../classmrs__lib_1_1geometry_1_1Ray.html#a8591c6b82a120832a7ed349fbd90163a',1,'mrs_lib::geometry::Ray']]], + ['p2_683',['p2',['../classmrs__lib_1_1geometry_1_1Ray.html#a7c830a43aa9550ef6d7b798dcb69f3f5',1,'mrs_lib::geometry::Ray']]], + ['paramloader_684',['ParamLoader',['../classmrs__lib_1_1ParamLoader.html#a26079fe045fe261add0548c40c5d3baa',1,'mrs_lib::ParamLoader::ParamLoader(const ros::NodeHandle &nh, bool printValues=true, std::string_view node_name=std::string())'],['../classmrs__lib_1_1ParamLoader.html#a09d03d4f79736e8269f66ba2f11356c5',1,'mrs_lib::ParamLoader::ParamLoader(const ros::NodeHandle &nh, std::string_view node_name)'],['../classmrs__lib_1_1ParamLoader.html#ac3de917c61f02060c4e28afb2765f71c',1,'mrs_lib::ParamLoader::ParamLoader(const std::string &filepath, const ros::NodeHandle &nh)']]], + ['pdist_685',['pdist',['../structmrs__lib_1_1geometry_1_1cyclic.html#a51db20b50daabf98afae8bd77e3a3ac4',1,'mrs_lib::geometry::cyclic']]], + ['peekmsg_686',['peekMsg',['../classmrs__lib_1_1SubscribeHandler.html#a6638d8d589149edba21bf08fa571f18e',1,'mrs_lib::SubscribeHandler']]], + ['pinterp_687',['pinterp',['../structmrs__lib_1_1geometry_1_1cyclic.html#a9b314c2ffd8a73a5a944bcdb751fdeac',1,'mrs_lib::geometry::cyclic']]], + ['pinterpunwrapped_688',['pinterpUnwrapped',['../structmrs__lib_1_1geometry_1_1cyclic.html#a0d9809504c23cb0854df0b4ceb95f426',1,'mrs_lib::geometry::cyclic']]], + ['pitch_689',['pitch',['../classmrs__lib_1_1EulerAttitude.html#abbed482a509d21505dfd1e608cd362fe',1,'mrs_lib::EulerAttitude']]], + ['predict_690',['predict',['../classmrs__lib_1_1JLKF.html#acb856c6a2d7378bc6abd46af99efe580',1,'mrs_lib::JLKF::predict()'],['../classmrs__lib_1_1KalmanFilter.html#a7c8e64828a78d1a680d1ef467633d9d5',1,'mrs_lib::KalmanFilter::predict()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#a139f8d4f64e9e45ca68b9141ecae8c99',1,'mrs_lib::KalmanFilterAloamGarm::predict()'],['../classmrs__lib_1_1LKF.html#af4027c4bef5dda2a12af1f728e92c45a',1,'mrs_lib::LKF::predict()'],['../classmrs__lib_1_1varstepLKF.html#ac1f671eb73017a1c05303e29ddf0c1f2',1,'mrs_lib::varstepLKF::predict()'],['../classmrs__lib_1_1UKF.html#a4c9c1e158bb4b6739b8bfdbdc1369c41',1,'mrs_lib::UKF::predict()']]], + ['predictto_691',['predictTo',['../classmrs__lib_1_1Repredictor.html#a018a96efcc5533e0e43b195cc23ee42e',1,'mrs_lib::Repredictor::predictTo(const ros::Time &to_stamp)'],['../classmrs__lib_1_1Repredictor.html#ac4bd7a77f3a9c73309108c35cad4936c',1,'mrs_lib::Repredictor::predictTo(const ros::Time &to_stamp)']]], + ['probit_692',['probit',['../namespacemrs__lib.html#a8b597ab1c70f0f92933e24e13f390bf5',1,'mrs_lib']]], + ['profiler_693',['Profiler',['../classmrs__lib_1_1Profiler.html#aeb0acb43639e4e29572b1ecbedf6029e',1,'mrs_lib::Profiler::Profiler()'],['../classmrs__lib_1_1Profiler.html#a1a61b447fb65e1d09a0bd6dab57c73eb',1,'mrs_lib::Profiler::Profiler(ros::NodeHandle &nh, std::string node_name, bool profiler_enabled)'],['../classmrs__lib_1_1Profiler.html#ac384b6aa30ce0f43ee8d38eaad93ca28',1,'mrs_lib::Profiler::Profiler(const Profiler &other)']]], + ['projectpoint_694',['projectPoint',['../classmrs__lib_1_1geometry_1_1Cone.html#a80223a2934d899aead407545c044e279',1,'mrs_lib::geometry::Cone']]], + ['publish_695',['publish',['../classmrs__lib_1_1BatchVisualizer.html#a3b7e6b602bdaf7d42e1c48ea511aa93b',1,'mrs_lib::BatchVisualizer::publish()'],['../classmrs__lib_1_1DynamicPublisher.html#a57946b630bcf2892658f754ecb6b735d',1,'mrs_lib::DynamicPublisher::publish()'],['../classmrs__lib_1_1PublisherHandler__impl.html#a4404a3234f548fe9184ec43ac18c9671',1,'mrs_lib::PublisherHandler_impl::publish(const TopicType &msg)'],['../classmrs__lib_1_1PublisherHandler__impl.html#ad41ed622292e537101a2dac779c08f34',1,'mrs_lib::PublisherHandler_impl::publish(const boost::shared_ptr< TopicType > &msg)'],['../classmrs__lib_1_1PublisherHandler__impl.html#a80c0caa745661936409fdc93277e7453',1,'mrs_lib::PublisherHandler_impl::publish(const boost::shared_ptr< TopicType const > &msg)'],['../classmrs__lib_1_1PublisherHandler.html#a0c5bebc2848b0547048edb1297833290',1,'mrs_lib::PublisherHandler::publish(const TopicType &msg)'],['../classmrs__lib_1_1PublisherHandler.html#a3201fd4703f7e9cec24de7bc189356a5',1,'mrs_lib::PublisherHandler::publish(const boost::shared_ptr< TopicType > &msg)'],['../classmrs__lib_1_1PublisherHandler.html#ace9906a5cf9ae33115fc44af0e078f3f',1,'mrs_lib::PublisherHandler::publish(const boost::shared_ptr< TopicType const > &msg)']]], + ['publisherhandler_696',['PublisherHandler',['../classmrs__lib_1_1PublisherHandler.html#aefafd64bd0d8a9b9717c94b76368fd0d',1,'mrs_lib::PublisherHandler::PublisherHandler(void)'],['../classmrs__lib_1_1PublisherHandler.html#a08abb836db076c390101880ff34b8fe8',1,'mrs_lib::PublisherHandler::PublisherHandler(const PublisherHandler &other)'],['../classmrs__lib_1_1PublisherHandler.html#a334376e25e8fb011ca27736cd2cf12b7',1,'mrs_lib::PublisherHandler::PublisherHandler(ros::NodeHandle &nh, const std::string &address, const unsigned int &buffer_size=1, const bool &latch=false, const double &rate=0)']]], + ['publisherhandler_5fimpl_697',['PublisherHandler_impl',['../classmrs__lib_1_1PublisherHandler__impl.html#ab6dfde5a454ce357957a2ea8618890fc',1,'mrs_lib::PublisherHandler_impl::PublisherHandler_impl(void)'],['../classmrs__lib_1_1PublisherHandler__impl.html#a9168a142f84bf96f73563fe5f3589ce7',1,'mrs_lib::PublisherHandler_impl::PublisherHandler_impl(ros::NodeHandle &nh, const std::string &address, const unsigned int &buffer_size=1, const bool &latch=false, const double &rate=0.0)']]] +]; diff --git a/search/functions_f.html b/search/functions_f.html new file mode 100644 index 00000000..f17c412c --- /dev/null +++ b/search/functions_f.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_f.js b/search/functions_f.js new file mode 100644 index 00000000..24ee1a94 --- /dev/null +++ b/search/functions_f.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['quaternionbetween_698',['quaternionBetween',['../misc_8h.html#afc7674301c81fd347f26a2bc0bb96979',1,'mrs_lib::geometry']]], + ['quaternionfromeuler_699',['quaternionFromEuler',['../misc_8h.html#acbd2f281f58752d98b9482f3a9697363',1,'mrs_lib::geometry::quaternionFromEuler(double x, double y, double z)'],['../misc_8h.html#a105c80e76bac24eb3e2a16bed6609a80',1,'mrs_lib::geometry::quaternionFromEuler(const Eigen::Vector3d &euler)']]], + ['quaternionfromheading_700',['quaternionFromHeading',['../misc_8h.html#aac041627690bc6f377e60b99344b8b3a',1,'mrs_lib::geometry']]] +]; diff --git a/search/mag_sel.png b/search/mag_sel.png new file mode 100644 index 00000000..39c0ed52 Binary files /dev/null and b/search/mag_sel.png differ diff --git a/search/namespaces_0.html b/search/namespaces_0.html new file mode 100644 index 00000000..76996d1c --- /dev/null +++ b/search/namespaces_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/namespaces_0.js b/search/namespaces_0.js new file mode 100644 index 00000000..fd75d6a4 --- /dev/null +++ b/search/namespaces_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mrs_5flib_505',['mrs_lib',['../namespacemrs__lib.html',1,'']]] +]; diff --git a/search/nomatches.html b/search/nomatches.html new file mode 100644 index 00000000..43773208 --- /dev/null +++ b/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/search/pages_0.html b/search/pages_0.html new file mode 100644 index 00000000..9a6a29ad --- /dev/null +++ b/search/pages_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 00000000..73965f39 --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bibliography_853',['Bibliography',['../citelist.html',1,'']]] +]; diff --git a/search/pages_1.html b/search/pages_1.html new file mode 100644 index 00000000..132ee038 --- /dev/null +++ b/search/pages_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_1.js b/search/pages_1.js new file mode 100644 index 00000000..b67e5b41 --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mrs_20libraries_854',['MRS libraries',['../index.html',1,'']]] +]; diff --git a/search/related_0.html b/search/related_0.html new file mode 100644 index 00000000..bbe15faa --- /dev/null +++ b/search/related_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/related_0.js b/search/related_0.js new file mode 100644 index 00000000..714413dc --- /dev/null +++ b/search/related_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['operator_2b_851',['operator+',['../structmrs__lib_1_1geometry_1_1cyclic.html#a58ca734b0e19c5f25da90761303451b7',1,'mrs_lib::geometry::cyclic']]], + ['operator_2d_852',['operator-',['../structmrs__lib_1_1geometry_1_1cyclic.html#a9d401b110dd9e5372ffa4951f073e794',1,'mrs_lib::geometry::cyclic']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 00000000..3cf9df94 --- /dev/null +++ b/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + float: none; + margin-top: 8px; + right: 0px; + width: 170px; + height: 24px; + z-index: 102; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:115px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:8px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 00000000..a554ab9c --- /dev/null +++ b/search/search.js @@ -0,0 +1,814 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_0.js b/search/typedefs_0.js new file mode 100644 index 00000000..1df385e5 --- /dev/null +++ b/search/typedefs_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['a_5ft_816',['A_t',['../classmrs__lib_1_1DKF.html#a1d615e5b5aef4c5a00de9b42eef43c1b',1,'mrs_lib::DKF::A_t()'],['../classmrs__lib_1_1JLKF.html#a72ceb375903022d0dfc396b6f1ead479',1,'mrs_lib::JLKF::A_t()'],['../classmrs__lib_1_1LKF.html#aa5c83985c5c7685ebe2af0e445fbc0ad',1,'mrs_lib::LKF::A_t()'],['../classmrs__lib_1_1NCLKF.html#aa7b38a32abe6a319930d6392178d5e3e',1,'mrs_lib::NCLKF::A_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a6d62f542c4ee39019c9466e82ed0cd51',1,'mrs_lib::NCLKF_partial::A_t()']]] +]; diff --git a/search/typedefs_1.html b/search/typedefs_1.html new file mode 100644 index 00000000..9b8bf72f --- /dev/null +++ b/search/typedefs_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_1.js b/search/typedefs_1.js new file mode 100644 index 00000000..62866791 --- /dev/null +++ b/search/typedefs_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['b_5ft_817',['B_t',['../classmrs__lib_1_1DKF.html#a5de2bdb0aa87e268361e19206849bb22',1,'mrs_lib::DKF::B_t()'],['../classmrs__lib_1_1JLKF.html#ac8971eebc826cd62aadd45d4b64d216c',1,'mrs_lib::JLKF::B_t()'],['../classmrs__lib_1_1LKF.html#a5ca7805e401bd7b718b510269a6ce7bf',1,'mrs_lib::LKF::B_t()'],['../classmrs__lib_1_1NCLKF.html#af283625e8caefbccb8ca64072dab91a8',1,'mrs_lib::NCLKF::B_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a749bb8222899e2b056e27875c0f951f6',1,'mrs_lib::NCLKF_partial::B_t()']]], + ['base_5fclass_818',['Base_class',['../classmrs__lib_1_1DKF.html#ad7e6756be6a89592151d092f20d19811',1,'mrs_lib::DKF::Base_class()'],['../classmrs__lib_1_1LKF.html#ae54a2cc807bafeee1777ffdbd37e3c02',1,'mrs_lib::LKF::Base_class()'],['../classmrs__lib_1_1NCLKF.html#aa670be9fba29c7d8d8c7c849d9d844d1',1,'mrs_lib::NCLKF::Base_class()'],['../classmrs__lib_1_1NCLKF__partial.html#a13dac50b4906535f6ff5837b1057597f',1,'mrs_lib::NCLKF_partial::Base_class()'],['../classmrs__lib_1_1UKF.html#ae5a0eb2f31131ed4cec117d4a1000080',1,'mrs_lib::UKF::Base_class()']]] +]; diff --git a/search/typedefs_10.html b/search/typedefs_10.html new file mode 100644 index 00000000..bbfbcf0b --- /dev/null +++ b/search/typedefs_10.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_10.js b/search/typedefs_10.js new file mode 100644 index 00000000..c39a7044 --- /dev/null +++ b/search/typedefs_10.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['u_5ft_844',['u_t',['../classmrs__lib_1_1DKF.html#a5998af081256d469dbd4ac5a1d4d7fd7',1,'mrs_lib::DKF::u_t()'],['../classmrs__lib_1_1KalmanFilter.html#ad92ac4f280e849986554bc593e5ab96e',1,'mrs_lib::KalmanFilter::u_t()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#ae680d65b40883e1678e0365ed3924c16',1,'mrs_lib::KalmanFilterAloamGarm::u_t()'],['../classmrs__lib_1_1LKF.html#a98e130a3d14cd93b01b0b942de8af10c',1,'mrs_lib::LKF::u_t()'],['../classmrs__lib_1_1NCLKF.html#a8992c34838e430a64b070929e92c263a',1,'mrs_lib::NCLKF::u_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a5718270798d8227ccaf76a5d3b97fda5',1,'mrs_lib::NCLKF_partial::u_t()'],['../classmrs__lib_1_1Repredictor.html#a19532d9b875ac33f80ffe313dfb26e6d',1,'mrs_lib::Repredictor::u_t()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#acf7e98ab597eeeb4766b9794cf861f13',1,'mrs_lib::RepredictorAloamgarm::u_t()'],['../classmrs__lib_1_1RHEIV.html#a3bc18fd815c8f09123b0a9083ca3b959',1,'mrs_lib::RHEIV::u_t()'],['../classmrs__lib_1_1UKF.html#a6589d6a1f5eba355f1bec91e99826b71',1,'mrs_lib::UKF::u_t()']]] +]; diff --git a/search/typedefs_11.html b/search/typedefs_11.html new file mode 100644 index 00000000..98de1ae1 --- /dev/null +++ b/search/typedefs_11.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_11.js b/search/typedefs_11.js new file mode 100644 index 00000000..22e941a3 --- /dev/null +++ b/search/typedefs_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['w_5ft_845',['W_t',['../classmrs__lib_1_1UKF.html#aca628bd6d14b59b9d0a10652a2665a32',1,'mrs_lib::UKF']]] +]; diff --git a/search/typedefs_12.html b/search/typedefs_12.html new file mode 100644 index 00000000..40ed3476 --- /dev/null +++ b/search/typedefs_12.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_12.js b/search/typedefs_12.js new file mode 100644 index 00000000..aafac35e --- /dev/null +++ b/search/typedefs_12.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['x_5ft_846',['X_t',['../classmrs__lib_1_1UKF.html#a1435f2ed4e333151990355813cee95ba',1,'mrs_lib::UKF::X_t()'],['../classmrs__lib_1_1DKF.html#a094cf9bcb768de6db47e4c2703bede20',1,'mrs_lib::DKF::x_t()'],['../classmrs__lib_1_1KalmanFilter.html#a5b8f47081daf208496a19a4364e6509c',1,'mrs_lib::KalmanFilter::x_t()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#a0e19e15226a8e251452cd486153fba12',1,'mrs_lib::KalmanFilterAloamGarm::x_t()'],['../classmrs__lib_1_1LKF.html#abfad09fe2386fb87eaea7b4dd8b24409',1,'mrs_lib::LKF::x_t()'],['../classmrs__lib_1_1NCLKF.html#a8fa90de14ea4fa4125882bd49d101888',1,'mrs_lib::NCLKF::x_t()'],['../classmrs__lib_1_1NCLKF__partial.html#afaae66f623e768b19c0160fb21be9373',1,'mrs_lib::NCLKF_partial::x_t()'],['../classmrs__lib_1_1Repredictor.html#ac9550981d03dc3c898dcbd39c4bc461f',1,'mrs_lib::Repredictor::x_t()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#a5c2992c6bde2dd8f3bdc7673fc3977da',1,'mrs_lib::RepredictorAloamgarm::x_t()'],['../classmrs__lib_1_1RHEIV.html#a6482f5ff13cbfaef9f8dc86912c1258d',1,'mrs_lib::RHEIV::x_t()'],['../classmrs__lib_1_1UKF.html#a5ab9d25f7b2470c7abeacda7f8b80630',1,'mrs_lib::UKF::x_t()']]], + ['xq_5ft_847',['xq_t',['../classmrs__lib_1_1NCLKF__partial.html#a50092f2c99a521668dfd3211c999441c',1,'mrs_lib::NCLKF_partial']]], + ['xs_5ft_848',['xs_t',['../classmrs__lib_1_1RHEIV.html#aee3df85ac46e5b29259f8898388324ec',1,'mrs_lib::RHEIV']]] +]; diff --git a/search/typedefs_13.html b/search/typedefs_13.html new file mode 100644 index 00000000..17938c1c --- /dev/null +++ b/search/typedefs_13.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_13.js b/search/typedefs_13.js new file mode 100644 index 00000000..6e360d23 --- /dev/null +++ b/search/typedefs_13.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['z_5ft_849',['z_t',['../classmrs__lib_1_1DKF.html#ad919f1d7a6f5d8be7361a8336aa6fd85',1,'mrs_lib::DKF::z_t()'],['../classmrs__lib_1_1KalmanFilter.html#a0825f38a6a4ddc522239bb7bf6279737',1,'mrs_lib::KalmanFilter::z_t()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#ae7fc4baaa223bf1ccebebc20c4b02bcc',1,'mrs_lib::KalmanFilterAloamGarm::z_t()'],['../classmrs__lib_1_1LKF.html#af4318056f5e0c024651bb882b60ec640',1,'mrs_lib::LKF::z_t()'],['../classmrs__lib_1_1NCLKF.html#a80db36613d09068f8daa0dc7e735dc64',1,'mrs_lib::NCLKF::z_t()'],['../classmrs__lib_1_1NCLKF__partial.html#ad5308432a3010edabc4598a92786fad5',1,'mrs_lib::NCLKF_partial::z_t()'],['../classmrs__lib_1_1Repredictor.html#a4f12cadd7f0377eccb70b8d61e7ee8e3',1,'mrs_lib::Repredictor::z_t()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#a3e265f15f9b8b031af819d1d2045909b',1,'mrs_lib::RepredictorAloamgarm::z_t()'],['../classmrs__lib_1_1RHEIV.html#a8e01ed1580572ec20f0230d9bfe5273f',1,'mrs_lib::RHEIV::z_t()'],['../classmrs__lib_1_1UKF.html#a7a68877ffa7bd8bb10f16d1f104e0a73',1,'mrs_lib::UKF::z_t()'],['../classmrs__lib_1_1UKF.html#a06a3fae37e8a0613d8169b638c4c0001',1,'mrs_lib::UKF::Z_t()']]], + ['zs_5ft_850',['zs_t',['../classmrs__lib_1_1RHEIV.html#a3b4e40932aae907ae8185df7703d5677',1,'mrs_lib::RHEIV']]] +]; diff --git a/search/typedefs_2.html b/search/typedefs_2.html new file mode 100644 index 00000000..d18982f5 --- /dev/null +++ b/search/typedefs_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_2.js b/search/typedefs_2.js new file mode 100644 index 00000000..7b41ce5e --- /dev/null +++ b/search/typedefs_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['c_5ft_819',['C_t',['../classmrs__lib_1_1JLKF.html#af34d34f55cb8804bd4e873a16c9e9a08',1,'mrs_lib::JLKF']]] +]; diff --git a/search/typedefs_3.html b/search/typedefs_3.html new file mode 100644 index 00000000..8941740c --- /dev/null +++ b/search/typedefs_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_3.js b/search/typedefs_3.js new file mode 100644 index 00000000..9272e85e --- /dev/null +++ b/search/typedefs_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['d_5ft_820',['D_t',['../classmrs__lib_1_1JLKF.html#ac047c1625da963988acfc47edc200a57',1,'mrs_lib::JLKF']]], + ['dzdx_5ft_821',['dzdx_t',['../classmrs__lib_1_1RHEIV.html#abec4cb102b681ff3ec39786dc1d2bd4b',1,'mrs_lib::RHEIV']]], + ['dzdxs_5ft_822',['dzdxs_t',['../classmrs__lib_1_1RHEIV.html#ad85f14fb415e2fbe69ad05db0dc56e7b',1,'mrs_lib::RHEIV']]] +]; diff --git a/search/typedefs_4.html b/search/typedefs_4.html new file mode 100644 index 00000000..933bd3b9 --- /dev/null +++ b/search/typedefs_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_4.js b/search/typedefs_4.js new file mode 100644 index 00000000..bed12fd7 --- /dev/null +++ b/search/typedefs_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['eta_5ft_823',['eta_t',['../classmrs__lib_1_1RHEIV.html#a238b7a1a44cb7711756bd7b94a11797d',1,'mrs_lib::RHEIV']]] +]; diff --git a/search/typedefs_5.html b/search/typedefs_5.html new file mode 100644 index 00000000..7712e6f8 --- /dev/null +++ b/search/typedefs_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_5.js b/search/typedefs_5.js new file mode 100644 index 00000000..297868e2 --- /dev/null +++ b/search/typedefs_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['f_5fdzdx_5ft_824',['f_dzdx_t',['../classmrs__lib_1_1RHEIV.html#ac5b425f7782114173db5a275bea2c871',1,'mrs_lib::RHEIV']]], + ['f_5fz_5ft_825',['f_z_t',['../classmrs__lib_1_1RHEIV.html#abfea65ce9c912fcde3e805a66dc8ca42',1,'mrs_lib::RHEIV']]] +]; diff --git a/search/typedefs_6.html b/search/typedefs_6.html new file mode 100644 index 00000000..25aa6dd4 --- /dev/null +++ b/search/typedefs_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_6.js b/search/typedefs_6.js new file mode 100644 index 00000000..c70e1e32 --- /dev/null +++ b/search/typedefs_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['h_5ft_826',['H_t',['../classmrs__lib_1_1DKF.html#aaee9d5c96d921fa7854f24460edf58ab',1,'mrs_lib::DKF::H_t()'],['../classmrs__lib_1_1JLKF.html#a7599ec962b434fe92534a58d48cdfacb',1,'mrs_lib::JLKF::H_t()'],['../classmrs__lib_1_1LKF.html#a78733a13f277480c5c8c42228d440df7',1,'mrs_lib::LKF::H_t()'],['../classmrs__lib_1_1NCLKF.html#a92eb1e6f9fe04297bb54fdfbdc74d460',1,'mrs_lib::NCLKF::H_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a12079d59b1f0e949c535e478d8e1d88c',1,'mrs_lib::NCLKF_partial::H_t()']]], + ['hq_5ft_827',['Hq_t',['../classmrs__lib_1_1NCLKF__partial.html#a6f311605a0470b290c6917d555bb4c9a',1,'mrs_lib::NCLKF_partial']]] +]; diff --git a/search/typedefs_7.html b/search/typedefs_7.html new file mode 100644 index 00000000..6cb2ddea --- /dev/null +++ b/search/typedefs_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_7.js b/search/typedefs_7.js new file mode 100644 index 00000000..1e77b5c6 --- /dev/null +++ b/search/typedefs_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['indices_5ft_828',['indices_t',['../classmrs__lib_1_1NCLKF__partial.html#a93afd8063033124c0698426cd03d4507',1,'mrs_lib::NCLKF_partial']]] +]; diff --git a/search/typedefs_8.html b/search/typedefs_8.html new file mode 100644 index 00000000..52ab5aa2 --- /dev/null +++ b/search/typedefs_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_8.js b/search/typedefs_8.js new file mode 100644 index 00000000..fa4848a5 --- /dev/null +++ b/search/typedefs_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['k_5ft_829',['K_t',['../classmrs__lib_1_1DKF.html#a87d3b7863fbd0b392f9c831fcaf8e345',1,'mrs_lib::DKF::K_t()'],['../classmrs__lib_1_1JLKF.html#a20be98f26b355640d078f196f9495fd5',1,'mrs_lib::JLKF::K_t()'],['../classmrs__lib_1_1LKF.html#a33b80f4e1b9b7eb7243b71a4ae6d99c6',1,'mrs_lib::LKF::K_t()'],['../classmrs__lib_1_1NCLKF.html#ae2d30fe948b17723e0a89450044f8f93',1,'mrs_lib::NCLKF::K_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a47b90d150c6147ab30ae1866b66ea49c',1,'mrs_lib::NCLKF_partial::K_t()'],['../classmrs__lib_1_1UKF.html#ace5416fd8ac52fba822337bceaf751a7',1,'mrs_lib::UKF::K_t()']]], + ['kq_5ft_830',['Kq_t',['../classmrs__lib_1_1NCLKF__partial.html#a459ce71ac559eb881415485df4d622fa',1,'mrs_lib::NCLKF_partial']]] +]; diff --git a/search/typedefs_9.html b/search/typedefs_9.html new file mode 100644 index 00000000..7b6dd851 --- /dev/null +++ b/search/typedefs_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_9.js b/search/typedefs_9.js new file mode 100644 index 00000000..da7c776e --- /dev/null +++ b/search/typedefs_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['message_5fcallback_5ft_831',['message_callback_t',['../classmrs__lib_1_1SubscribeHandler.html#a38b7371b24896e5ea21f5a8dd2821cf6',1,'mrs_lib::SubscribeHandler']]], + ['message_5ftype_832',['message_type',['../classmrs__lib_1_1SubscribeHandler.html#aab546ccb302e3e05d8e97e9085f62b9a',1,'mrs_lib::SubscribeHandler::message_type()'],['../namespacemrs__lib.html#afe10d9f91cc2173fa3c30021514a5c12',1,'mrs_lib::message_type()']]], + ['modelptr_833',['ModelPtr',['../classmrs__lib_1_1Repredictor.html#acb4a34d97aab3896de9565012a890381',1,'mrs_lib::Repredictor::ModelPtr()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#a7766d3dbccd04fcbe584cca6730153ca',1,'mrs_lib::RepredictorAloamgarm::ModelPtr()']]] +]; diff --git a/search/typedefs_a.html b/search/typedefs_a.html new file mode 100644 index 00000000..ba5e6689 --- /dev/null +++ b/search/typedefs_a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_a.js b/search/typedefs_a.js new file mode 100644 index 00000000..2f1e534b --- /dev/null +++ b/search/typedefs_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['observation_5fmodel_5ft_834',['observation_model_t',['../classmrs__lib_1_1UKF.html#ac515ea8c688d7ee67250c384417f9ab9',1,'mrs_lib::UKF']]] +]; diff --git a/search/typedefs_b.html b/search/typedefs_b.html new file mode 100644 index 00000000..9b598551 --- /dev/null +++ b/search/typedefs_b.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_b.js b/search/typedefs_b.js new file mode 100644 index 00000000..15ce2f4d --- /dev/null +++ b/search/typedefs_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['p_5ft_835',['P_t',['../classmrs__lib_1_1DKF.html#aa351bed9f3bdac26c6ed2526a5b2ac01',1,'mrs_lib::DKF::P_t()'],['../classmrs__lib_1_1KalmanFilter.html#a8f5e50ea6668129218bd4113f4ffdf6f',1,'mrs_lib::KalmanFilter::P_t()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#a9b8488ef81812059a366fcc2e92e04f6',1,'mrs_lib::KalmanFilterAloamGarm::P_t()'],['../classmrs__lib_1_1LKF.html#a5d5cee075e30da36ffb946cffcfca688',1,'mrs_lib::LKF::P_t()'],['../classmrs__lib_1_1NCLKF.html#a1448842265f0b39d5da536488d146db3',1,'mrs_lib::NCLKF::P_t()'],['../classmrs__lib_1_1NCLKF__partial.html#aef875cb026a1a0d8df31a8fc3f02e63b',1,'mrs_lib::NCLKF_partial::P_t()'],['../classmrs__lib_1_1Repredictor.html#aca5fb76c2e698ed1dd2c58e340adca58',1,'mrs_lib::Repredictor::P_t()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#a1f2bffb8cbea233b14036e016e8bb654',1,'mrs_lib::RepredictorAloamgarm::P_t()'],['../classmrs__lib_1_1RHEIV.html#a9adfedc8dfbe38ccf06f556481a6c5c9',1,'mrs_lib::RHEIV::P_t()'],['../classmrs__lib_1_1UKF.html#ac1128f5d7fa36305a52859a752a97fda',1,'mrs_lib::UKF::P_t()']]], + ['ps_5ft_836',['Ps_t',['../classmrs__lib_1_1RHEIV.html#aab24b461160051b3537f76e633d47d8d',1,'mrs_lib::RHEIV']]], + ['pzz_5ft_837',['Pzz_t',['../classmrs__lib_1_1UKF.html#af11dc75b608a43930e8289c51e8ab7c6',1,'mrs_lib::UKF']]] +]; diff --git a/search/typedefs_c.html b/search/typedefs_c.html new file mode 100644 index 00000000..1924d704 --- /dev/null +++ b/search/typedefs_c.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_c.js b/search/typedefs_c.js new file mode 100644 index 00000000..3bcb5840 --- /dev/null +++ b/search/typedefs_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['q_5ft_838',['Q_t',['../classmrs__lib_1_1DKF.html#a59afcc2127ecd2a9dba8a53ca505f97a',1,'mrs_lib::DKF::Q_t()'],['../classmrs__lib_1_1KalmanFilter.html#ab2c5ddabe3fc919334595ec1e535c848',1,'mrs_lib::KalmanFilter::Q_t()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#ab9efcd795fc6c47ef94c20f9ff9547dc',1,'mrs_lib::KalmanFilterAloamGarm::Q_t()'],['../classmrs__lib_1_1LKF.html#a5df2fd299b9da75a872e8d9194da1ca9',1,'mrs_lib::LKF::Q_t()'],['../classmrs__lib_1_1NCLKF.html#aab7df7efe1e8e70d0e79ad374c6674a0',1,'mrs_lib::NCLKF::Q_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a2ba0fce7ba12825a0c498f7676848fce',1,'mrs_lib::NCLKF_partial::Q_t()'],['../classmrs__lib_1_1Repredictor.html#af0b9dfd5f21b220e87c79298b061f63d',1,'mrs_lib::Repredictor::Q_t()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#aa031cc536ee7a46c3e79287c65fc1fa7',1,'mrs_lib::RepredictorAloamgarm::Q_t()'],['../classmrs__lib_1_1UKF.html#abd8f845f1b3f138949bd95c7dc12e011',1,'mrs_lib::UKF::Q_t()']]] +]; diff --git a/search/typedefs_d.html b/search/typedefs_d.html new file mode 100644 index 00000000..1b480876 --- /dev/null +++ b/search/typedefs_d.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_d.js b/search/typedefs_d.js new file mode 100644 index 00000000..629f3a76 --- /dev/null +++ b/search/typedefs_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['r_5ft_839',['R_t',['../classmrs__lib_1_1DKF.html#a6c1a5e6a6cdcb52271774b566957f948',1,'mrs_lib::DKF::R_t()'],['../classmrs__lib_1_1KalmanFilter.html#a1e4c8aa79cfcea707876d85950132450',1,'mrs_lib::KalmanFilter::R_t()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#ab6bf1e91bfeb633b08038f54b2b5d0fa',1,'mrs_lib::KalmanFilterAloamGarm::R_t()'],['../classmrs__lib_1_1LKF.html#a5d2cb5ed042b660f1a44bdb9f4d2612f',1,'mrs_lib::LKF::R_t()'],['../classmrs__lib_1_1NCLKF.html#a4b6b964e9491ca80fdfc1afacc9b23fc',1,'mrs_lib::NCLKF::R_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a7754b24176416b24869450c88a1328aa',1,'mrs_lib::NCLKF_partial::R_t()'],['../classmrs__lib_1_1Repredictor.html#aac7c07ba0237230fa7346932fb542ae9',1,'mrs_lib::Repredictor::R_t()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#afa36b8b183f868a84dc182e4ac562d44',1,'mrs_lib::RepredictorAloamgarm::R_t()'],['../classmrs__lib_1_1UKF.html#a0af0d9a246df0798b1cb1308cec82fd2',1,'mrs_lib::UKF::R_t()']]] +]; diff --git a/search/typedefs_e.html b/search/typedefs_e.html new file mode 100644 index 00000000..fed948df --- /dev/null +++ b/search/typedefs_e.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_e.js b/search/typedefs_e.js new file mode 100644 index 00000000..2ce814db --- /dev/null +++ b/search/typedefs_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['statecov_5ft_840',['statecov_t',['../classmrs__lib_1_1DKF.html#a1408b975fe2e4bd3fc5009c80d43f06b',1,'mrs_lib::DKF::statecov_t()'],['../classmrs__lib_1_1LKF.html#a54b2b4a3932510daad92da5a2b1274c1',1,'mrs_lib::LKF::statecov_t()'],['../classmrs__lib_1_1NCLKF.html#abac1b51597611226f2c0642230207e71',1,'mrs_lib::NCLKF::statecov_t()'],['../classmrs__lib_1_1NCLKF__partial.html#a2bc4e99acb7f38dc41d6e63cdce5e805',1,'mrs_lib::NCLKF_partial::statecov_t()'],['../classmrs__lib_1_1Repredictor.html#a794952d1627187223300848cd3e1bf66',1,'mrs_lib::Repredictor::statecov_t()'],['../classmrs__lib_1_1RepredictorAloamgarm.html#a4d5da8a5d296bf98bff6f99eaf550ae7',1,'mrs_lib::RepredictorAloamgarm::statecov_t()'],['../classmrs__lib_1_1UKF.html#a604c0bfee69ee5a34dc4412af3cc6e53',1,'mrs_lib::UKF::statecov_t()']]] +]; diff --git a/search/typedefs_f.html b/search/typedefs_f.html new file mode 100644 index 00000000..fe33f52d --- /dev/null +++ b/search/typedefs_f.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_f.js b/search/typedefs_f.js new file mode 100644 index 00000000..71917497 --- /dev/null +++ b/search/typedefs_f.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['theta_5ft_841',['theta_t',['../classmrs__lib_1_1RHEIV.html#af6d8212b941ad45ce6b53bc4e8449de1',1,'mrs_lib::RHEIV']]], + ['timeout_5fcallback_5ft_842',['timeout_callback_t',['../classmrs__lib_1_1SubscribeHandler.html#a6f12a82506c6967a8af9c2c878a1803a',1,'mrs_lib::SubscribeHandler']]], + ['transition_5fmodel_5ft_843',['transition_model_t',['../classmrs__lib_1_1UKF.html#a986f17f015282a33b140af4adabce091',1,'mrs_lib::UKF']]] +]; diff --git a/search/variables_0.html b/search/variables_0.html new file mode 100644 index 00000000..bf3eba5c --- /dev/null +++ b/search/variables_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_0.js b/search/variables_0.js new file mode 100644 index 00000000..41fedbd4 --- /dev/null +++ b/search/variables_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['a_789',['A',['../classmrs__lib_1_1LKF.html#a0926533d35a53410b4302fda99a45321',1,'mrs_lib::LKF']]], + ['autostart_790',['autostart',['../structmrs__lib_1_1SubscribeHandlerOptions.html#aab7865b63b3dd44b61dba06c54f981c8',1,'mrs_lib::SubscribeHandlerOptions']]] +]; diff --git a/search/variables_1.html b/search/variables_1.html new file mode 100644 index 00000000..49fe59a1 --- /dev/null +++ b/search/variables_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_1.js b/search/variables_1.js new file mode 100644 index 00000000..abdddb3c --- /dev/null +++ b/search/variables_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['b_791',['B',['../classmrs__lib_1_1LKF.html#a2d88249f1992d772631026387a45445a',1,'mrs_lib::LKF']]] +]; diff --git a/search/variables_2.html b/search/variables_2.html new file mode 100644 index 00000000..0c8a18cf --- /dev/null +++ b/search/variables_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_2.js b/search/variables_2.js new file mode 100644 index 00000000..e4b5178f --- /dev/null +++ b/search/variables_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['h_792',['H',['../classmrs__lib_1_1LKF.html#a552fedb99ce43148c212c809dcd8191f',1,'mrs_lib::LKF']]], + ['half_5frange_793',['half_range',['../structmrs__lib_1_1geometry_1_1cyclic.html#a78cd52e438886de479af6455e97da2b6',1,'mrs_lib::geometry::cyclic']]] +]; diff --git a/search/variables_3.html b/search/variables_3.html new file mode 100644 index 00000000..19a31fc2 --- /dev/null +++ b/search/variables_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_3.js b/search/variables_3.js new file mode 100644 index 00000000..47023de7 --- /dev/null +++ b/search/variables_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['k_794',['k',['../classmrs__lib_1_1RHEIV.html#a8d5b4a0df9a65eaf7127a6d93b38bf5e',1,'mrs_lib::RHEIV']]] +]; diff --git a/search/variables_4.html b/search/variables_4.html new file mode 100644 index 00000000..bdc37be7 --- /dev/null +++ b/search/variables_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_4.js b/search/variables_4.js new file mode 100644 index 00000000..9c4bca24 --- /dev/null +++ b/search/variables_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['l_795',['l',['../classmrs__lib_1_1RHEIV.html#a1495045a8f4fca1f045da6866f5e62b0',1,'mrs_lib::RHEIV']]], + ['lr_796',['lr',['../classmrs__lib_1_1RHEIV.html#af267a00d1631e4685e5a1451f2510ac0',1,'mrs_lib::RHEIV']]] +]; diff --git a/search/variables_5.html b/search/variables_5.html new file mode 100644 index 00000000..6aa2249b --- /dev/null +++ b/search/variables_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_5.js b/search/variables_5.js new file mode 100644 index 00000000..fbfee7da --- /dev/null +++ b/search/variables_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['m_797',['m',['../classmrs__lib_1_1DKF.html#a266b963fd1ed94246fc413ecfa510e54',1,'mrs_lib::DKF::m()'],['../classmrs__lib_1_1KalmanFilter.html#a472b37319b5dabb8cd4e4146bd86b8bf',1,'mrs_lib::KalmanFilter::m()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#a336bd0445bfa4ca091dda05d0f83757b',1,'mrs_lib::KalmanFilterAloamGarm::m()'],['../classmrs__lib_1_1LKF.html#ab2132e00d769c35bf4c89760b1f7da2f',1,'mrs_lib::LKF::m()'],['../classmrs__lib_1_1NCLKF.html#a4b3f2c1a84f0e0000d3d191c9f337306',1,'mrs_lib::NCLKF::m()'],['../classmrs__lib_1_1NCLKF__partial.html#a748e915398e1ff3c09675bfcb1af7985',1,'mrs_lib::NCLKF_partial::m()'],['../classmrs__lib_1_1UKF.html#a81c0e0d290f9eb1aecd28b0e0fa3b7ce',1,'mrs_lib::UKF::m()']]], + ['minimum_798',['minimum',['../structmrs__lib_1_1geometry_1_1cyclic.html#ada8bf8d17bfa81025b75d5a4e1da8ac0',1,'mrs_lib::geometry::cyclic']]] +]; diff --git a/search/variables_6.html b/search/variables_6.html new file mode 100644 index 00000000..ce4a9063 --- /dev/null +++ b/search/variables_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_6.js b/search/variables_6.js new file mode 100644 index 00000000..126ca011 --- /dev/null +++ b/search/variables_6.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['n_799',['n',['../classmrs__lib_1_1DKF.html#a1c8d43906017aca20230464f87c0a28c',1,'mrs_lib::DKF::n()'],['../classmrs__lib_1_1KalmanFilter.html#a33bade5cb8e189919bd7c5c7d81a75fd',1,'mrs_lib::KalmanFilter::n()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#a7b9714f54a6ec03679cf3af571e4219a',1,'mrs_lib::KalmanFilterAloamGarm::n()'],['../classmrs__lib_1_1LKF.html#a23db0a12382876c56c4f696119a38dfb',1,'mrs_lib::LKF::n()'],['../classmrs__lib_1_1NCLKF.html#a8e0f671100fb36a431a1d2f6ed1df7b9',1,'mrs_lib::NCLKF::n()'],['../classmrs__lib_1_1NCLKF__partial.html#afa31bda8d042554992676389d464cfd9',1,'mrs_lib::NCLKF_partial::n()'],['../classmrs__lib_1_1UKF.html#a42270573cc14c2339a46841a5d3e264e',1,'mrs_lib::UKF::n()']]], + ['nh_800',['nh',['../structmrs__lib_1_1SubscribeHandlerOptions.html#ac5f6fabbc933d7e3f9beba07b166c054',1,'mrs_lib::SubscribeHandlerOptions']]], + ['no_5fmessage_5ftimeout_801',['no_message_timeout',['../structmrs__lib_1_1SubscribeHandlerOptions.html#a5702cb78ed291f5e36c960d0f90bb35c',1,'mrs_lib::SubscribeHandlerOptions']]], + ['node_5fname_802',['node_name',['../structmrs__lib_1_1SubscribeHandlerOptions.html#a3d31e2d693f41df180cd6911a3fb8310',1,'mrs_lib::SubscribeHandlerOptions']]], + ['nq_803',['nq',['../classmrs__lib_1_1NCLKF__partial.html#a139afd8f356f87aa0faadea3e8878649',1,'mrs_lib::NCLKF_partial']]] +]; diff --git a/search/variables_7.html b/search/variables_7.html new file mode 100644 index 00000000..39ffd474 --- /dev/null +++ b/search/variables_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_7.js b/search/variables_7.js new file mode 100644 index 00000000..e097a452 --- /dev/null +++ b/search/variables_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['p_804',['p',['../classmrs__lib_1_1DKF.html#afffd4a1421cb0ca08f75cd10c7cc2c78',1,'mrs_lib::DKF::p()'],['../classmrs__lib_1_1KalmanFilter.html#a72ed6c241094ce2b25fca0a97679a4c7',1,'mrs_lib::KalmanFilter::p()'],['../classmrs__lib_1_1KalmanFilterAloamGarm.html#aade8833d5835d0ee12be558e16fe595a',1,'mrs_lib::KalmanFilterAloamGarm::p()'],['../classmrs__lib_1_1LKF.html#a87db95f28f4834e801cd7fbd0e98e388',1,'mrs_lib::LKF::p()'],['../classmrs__lib_1_1NCLKF.html#adc5fb114b6abc3e2a72fbe4ed3ba0753',1,'mrs_lib::NCLKF::p()'],['../classmrs__lib_1_1NCLKF__partial.html#a2048d62a3e243b91802f6e85fcdcf2b3',1,'mrs_lib::NCLKF_partial::p()'],['../classmrs__lib_1_1UKF.html#a0042b2b7c0deb10b5bb2825f10c5d769',1,'mrs_lib::UKF::p()'],['../structmrs__lib_1_1KalmanFilter_1_1statecov__t.html#aa2747c6fd07bc3a4d9b2c153e38c11ff',1,'mrs_lib::KalmanFilter::statecov_t::P()'],['../structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html#a876ae3c9d4dafac63ddd0723fe351874',1,'mrs_lib::KalmanFilterAloamGarm::statecov_t::P()']]] +]; diff --git a/search/variables_8.html b/search/variables_8.html new file mode 100644 index 00000000..37a2eddf --- /dev/null +++ b/search/variables_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_8.js b/search/variables_8.js new file mode 100644 index 00000000..48420c6d --- /dev/null +++ b/search/variables_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['queue_5fsize_805',['queue_size',['../structmrs__lib_1_1SubscribeHandlerOptions.html#a5abe6590d88b396d94cce7a7ae652e09',1,'mrs_lib::SubscribeHandlerOptions']]] +]; diff --git a/search/variables_9.html b/search/variables_9.html new file mode 100644 index 00000000..21e5a4f3 --- /dev/null +++ b/search/variables_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_9.js b/search/variables_9.js new file mode 100644 index 00000000..355cedc0 --- /dev/null +++ b/search/variables_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['range_806',['range',['../structmrs__lib_1_1geometry_1_1cyclic.html#a406dfc057fd17b5935add5a7bf9fe325',1,'mrs_lib::geometry::cyclic']]] +]; diff --git a/search/variables_a.html b/search/variables_a.html new file mode 100644 index 00000000..1f650553 --- /dev/null +++ b/search/variables_a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_a.js b/search/variables_a.js new file mode 100644 index 00000000..db922b74 --- /dev/null +++ b/search/variables_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['stamp_807',['stamp',['../structmrs__lib_1_1KalmanFilter_1_1statecov__t.html#ab576efb895b5def90a7aab738c610f83',1,'mrs_lib::KalmanFilter::statecov_t']]], + ['supremum_808',['supremum',['../structmrs__lib_1_1geometry_1_1cyclic.html#adf3f559f3099bf6002a8f1331df42142',1,'mrs_lib::geometry::cyclic']]] +]; diff --git a/search/variables_b.html b/search/variables_b.html new file mode 100644 index 00000000..c02d066f --- /dev/null +++ b/search/variables_b.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_b.js b/search/variables_b.js new file mode 100644 index 00000000..a3b33072 --- /dev/null +++ b/search/variables_b.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['threadsafe_809',['threadsafe',['../structmrs__lib_1_1SubscribeHandlerOptions.html#a7c924f3581ff84d571b825d7e77b9511',1,'mrs_lib::SubscribeHandlerOptions']]], + ['timeout_5fcallback_810',['timeout_callback',['../structmrs__lib_1_1SubscribeHandlerOptions.html#aba6f6f262bfeae0d1f6f39bb778d04af',1,'mrs_lib::SubscribeHandlerOptions']]], + ['timeout_5fmanager_811',['timeout_manager',['../structmrs__lib_1_1SubscribeHandlerOptions.html#a50dd6637eb0800d0ee53c1cd6cee058e',1,'mrs_lib::SubscribeHandlerOptions']]], + ['topic_5fname_812',['topic_name',['../structmrs__lib_1_1SubscribeHandlerOptions.html#a374f745d46497064c62909412ebdf266',1,'mrs_lib::SubscribeHandlerOptions']]], + ['transport_5fhints_813',['transport_hints',['../structmrs__lib_1_1SubscribeHandlerOptions.html#a41f19ca415439152b934b3633933ec25',1,'mrs_lib::SubscribeHandlerOptions']]] +]; diff --git a/search/variables_c.html b/search/variables_c.html new file mode 100644 index 00000000..4b866c6c --- /dev/null +++ b/search/variables_c.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_c.js b/search/variables_c.js new file mode 100644 index 00000000..db901572 --- /dev/null +++ b/search/variables_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['w_814',['w',['../classmrs__lib_1_1UKF.html#a2bbb3c02f086402351601ca3c3a4c52f',1,'mrs_lib::UKF']]] +]; diff --git a/search/variables_d.html b/search/variables_d.html new file mode 100644 index 00000000..84d878b8 --- /dev/null +++ b/search/variables_d.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_d.js b/search/variables_d.js new file mode 100644 index 00000000..d92b8f04 --- /dev/null +++ b/search/variables_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['x_815',['x',['../structmrs__lib_1_1KalmanFilter_1_1statecov__t.html#a725b61d95901486bbc17cf79e45bd5e4',1,'mrs_lib::KalmanFilter::statecov_t::x()'],['../structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html#a78cb90ec0a35a04f7f4abe69847979ec',1,'mrs_lib::KalmanFilterAloamGarm::statecov_t::x()']]] +]; diff --git a/service__client__handler_8h.html b/service__client__handler_8h.html new file mode 100644 index 00000000..6f233556 --- /dev/null +++ b/service__client__handler_8h.html @@ -0,0 +1,151 @@ + + + + + + + +mrs_lib: include/mrs_lib/service_client_handler.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    service_client_handler.h File Reference
    +
    +
    + +

    Defines ServiceClientHandler and related convenience classes for upgrading the ROS service client. +More...

    +
    #include <ros/ros.h>
    +#include <ros/package.h>
    +#include <string>
    +#include <future>
    +#include <mutex>
    +#include <mrs_lib/impl/service_client_handler.hpp>
    +
    + + Include dependency graph for service_client_handler.h:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Classes

    class  mrs_lib::ServiceClientHandler_impl< ServiceType >
     implementation of the service client handler More...
     
    class  mrs_lib::ServiceClientHandler< ServiceType >
     user wrapper of the service client handler implementation More...
     
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    +

    Detailed Description

    +

    Defines ServiceClientHandler and related convenience classes for upgrading the ROS service client.

    +
    Author
    Tomas Baca - tomas.nosp@m..bac.nosp@m.a@fel.nosp@m..cvu.nosp@m.t.cz
    +
    +
    + + + + diff --git a/service__client__handler_8h__incl.map b/service__client__handler_8h__incl.map new file mode 100644 index 00000000..35ecf68b --- /dev/null +++ b/service__client__handler_8h__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/service__client__handler_8h__incl.md5 b/service__client__handler_8h__incl.md5 new file mode 100644 index 00000000..10abe3de --- /dev/null +++ b/service__client__handler_8h__incl.md5 @@ -0,0 +1 @@ +540cc6548715584d173546cf1c63e663 \ No newline at end of file diff --git a/service__client__handler_8h__incl.png b/service__client__handler_8h__incl.png new file mode 100644 index 00000000..528668f8 Binary files /dev/null and b/service__client__handler_8h__incl.png differ diff --git a/service__client__handler_8h_source.html b/service__client__handler_8h_source.html new file mode 100644 index 00000000..a40f9ee4 --- /dev/null +++ b/service__client__handler_8h_source.html @@ -0,0 +1,211 @@ + + + + + + + +mrs_lib: include/mrs_lib/service_client_handler.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    service_client_handler.h
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 #ifndef SERVICE_CLIENT_HANDLER_H
    +
    6 #define SERVICE_CLIENT_HANDLER_H
    +
    7 
    +
    8 #include <ros/ros.h>
    +
    9 #include <ros/package.h>
    +
    10 
    +
    11 #include <string>
    +
    12 #include <future>
    +
    13 #include <mutex>
    +
    14 
    +
    15 namespace mrs_lib
    +
    16 {
    +
    17 
    +
    18 /* class ServiceClientHandler_impl //{ */
    +
    19 
    +
    23 template <class ServiceType>
    + +
    25 
    +
    26 public:
    + +
    31 
    + +
    36 
    +
    43  ServiceClientHandler_impl(ros::NodeHandle& nh, const std::string& address);
    +
    44 
    +
    52  bool call(ServiceType& srv);
    +
    53 
    +
    62  bool call(ServiceType& srv, const int& attempts);
    +
    63 
    +
    73  bool call(ServiceType& srv, const int& attempts, const double& repeat_delay);
    +
    74 
    +
    82  std::future<ServiceType> callAsync(ServiceType& srv);
    +
    83 
    +
    92  std::future<ServiceType> callAsync(ServiceType& srv, const int& attempts);
    +
    93 
    +
    103  std::future<ServiceType> callAsync(ServiceType& srv, const int& attempts, const double& repeat_delay);
    +
    104 
    +
    105 private:
    +
    106  ros::ServiceClient service_client_;
    +
    107  std::mutex mutex_service_client_;
    +
    108  std::atomic<bool> service_initialized_;
    +
    109 
    +
    110  std::string _address_;
    +
    111 
    +
    112  ServiceType async_data_;
    +
    113  int async_attempts_;
    +
    114  double async_repeat_delay_;
    +
    115  std::mutex mutex_async_;
    +
    116 
    +
    117  ServiceType asyncRun(void);
    +
    118 };
    +
    119 
    +
    120 //}
    +
    121 
    +
    122 /* class ServiceClientHandler //{ */
    +
    123 
    +
    127 template <class ServiceType>
    + +
    129 
    +
    130 public:
    + +
    135 
    + +
    140 
    + +
    149 
    + +
    156 
    +
    163  ServiceClientHandler(ros::NodeHandle& nh, const std::string& address);
    +
    164 
    +
    171  void initialize(ros::NodeHandle& nh, const std::string& address);
    +
    172 
    +
    180  bool call(ServiceType& srv);
    +
    181 
    +
    190  bool call(ServiceType& srv, const int& attempts);
    +
    191 
    +
    201  bool call(ServiceType& srv, const int& attempts, const double& repeat_delay);
    +
    202 
    +
    210  std::future<ServiceType> callAsync(ServiceType& srv);
    +
    211 
    +
    220  std::future<ServiceType> callAsync(ServiceType& srv, const int& attempts);
    +
    221 
    +
    231  std::future<ServiceType> callAsync(ServiceType& srv, const int& attempts, const double& repeat_delay);
    +
    232 
    +
    233 private:
    +
    234  std::shared_ptr<ServiceClientHandler_impl<ServiceType>> impl_;
    +
    235 };
    +
    236 
    +
    237 //}
    +
    238 
    +
    239 } // namespace mrs_lib
    +
    240 
    +
    241 #include <mrs_lib/impl/service_client_handler.hpp>
    +
    242 
    +
    243 #endif // SERVICE_CLIENT_HANDLER_H
    +
    +
    +
    ~ServiceClientHandler(void)
    generic destructor
    Definition: service_client_handler.h:139
    +
    user wrapper of the service client handler implementation
    Definition: service_client_handler.h:128
    +
    implementation of the service client handler
    Definition: service_client_handler.h:24
    +
    ServiceClientHandler_impl(void)
    default constructor
    Definition: service_client_handler.hpp:14
    +
    ServiceClientHandler(void)
    generic constructor
    Definition: service_client_handler.h:134
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    std::future< ServiceType > callAsync(ServiceType &srv)
    asynchronous call
    Definition: service_client_handler.hpp:284
    +
    std::future< ServiceType > callAsync(ServiceType &srv)
    asynchronous service call
    Definition: service_client_handler.hpp:123
    +
    ~ServiceClientHandler_impl(void)
    default destructor
    Definition: service_client_handler.h:35
    +
    void initialize(ros::NodeHandle &nh, const std::string &address)
    initializer
    Definition: service_client_handler.hpp:244
    +
    bool call(ServiceType &srv)
    "classic" synchronous service call
    Definition: service_client_handler.hpp:43
    +
    bool call(ServiceType &srv)
    "standard" synchronous call
    Definition: service_client_handler.hpp:254
    +
    ServiceClientHandler & operator=(const ServiceClientHandler &other)
    operator=
    Definition: service_client_handler.hpp:204
    + + + + diff --git a/service__client__handler_8hpp_source.html b/service__client__handler_8hpp_source.html new file mode 100644 index 00000000..7859cfd6 --- /dev/null +++ b/service__client__handler_8hpp_source.html @@ -0,0 +1,432 @@ + + + + + + + +mrs_lib: include/mrs_lib/impl/service_client_handler.hpp Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    service_client_handler.hpp
    +
    +
    +
    1 #ifndef SERVICE_CLIENT_HANDLER_HPP
    +
    2 #define SERVICE_CLIENT_HANDLER_HPP
    +
    3 
    +
    4 namespace mrs_lib
    +
    5 {
    +
    6 
    +
    7 // --------------------------------------------------------------
    +
    8 // | ServiceClientHandler_impl |
    +
    9 // --------------------------------------------------------------
    +
    10 
    +
    11 /* ServiceClientHandler_impl(void) //{ */
    +
    12 
    +
    13 template <class ServiceType>
    + +
    15 }
    +
    16 
    +
    17 //}
    +
    18 
    +
    19 /* ServiceClientHandler_impl(ros::NodeHandle& nh, const std::string& address) //{ */
    +
    20 
    +
    21 template <class ServiceType>
    +
    22 ServiceClientHandler_impl<ServiceType>::ServiceClientHandler_impl(ros::NodeHandle& nh, const std::string& address) {
    +
    23 
    +
    24  {
    +
    25  std::scoped_lock lock(mutex_service_client_);
    +
    26 
    +
    27  service_client_ = nh.serviceClient<ServiceType>(address);
    +
    28  }
    +
    29 
    +
    30  _address_ = address;
    +
    31  async_attempts_ = 1;
    +
    32 
    +
    33  /* thread_oneshot_ = std::make_shared<std::thread>(std::thread(&ServiceClientHandler_impl::threadOneshot, this, true, false)); */
    +
    34 
    +
    35  service_initialized_ = true;
    +
    36 }
    +
    37 
    +
    38 //}
    +
    39 
    +
    40 /* call(ServiceType& srv) //{ */
    +
    41 
    +
    42 template <class ServiceType>
    + +
    44 
    +
    45  if (!service_initialized_) {
    +
    46  return false;
    +
    47  }
    +
    48 
    +
    49  return service_client_.call(srv);
    +
    50 }
    +
    51 
    +
    52 //}
    +
    53 
    +
    54 /* call(ServiceType& srv, const int& attempts) //{ */
    +
    55 
    +
    56 template <class ServiceType>
    +
    57 bool ServiceClientHandler_impl<ServiceType>::call(ServiceType& srv, const int& attempts) {
    +
    58 
    +
    59  if (!service_initialized_) {
    +
    60  return false;
    +
    61  }
    +
    62 
    +
    63  std::scoped_lock lock(mutex_service_client_);
    +
    64 
    +
    65  bool success = false;
    +
    66  int counter = 0;
    +
    67 
    +
    68  while (!success && ros::ok()) {
    +
    69 
    +
    70  success = service_client_.call(srv);
    +
    71 
    +
    72  if (!success) {
    +
    73  ROS_ERROR("[%s]: failed to call service to '%s'", ros::this_node::getName().c_str(), _address_.c_str());
    +
    74  }
    +
    75 
    +
    76  if (++counter >= attempts) {
    +
    77  break;
    +
    78  }
    +
    79  }
    +
    80 
    +
    81  return success;
    +
    82 }
    +
    83 
    +
    84 //}
    +
    85 
    +
    86 /* call(ServiceType& srv, const int& attempts, const double& repeat_delay) //{ */
    +
    87 
    +
    88 template <class ServiceType>
    +
    89 bool ServiceClientHandler_impl<ServiceType>::call(ServiceType& srv, const int& attempts, const double& repeat_delay) {
    +
    90 
    +
    91  if (!service_initialized_) {
    +
    92  return false;
    +
    93  }
    +
    94 
    +
    95  std::scoped_lock lock(mutex_service_client_);
    +
    96 
    +
    97  bool success = false;
    +
    98  int counter = 0;
    +
    99 
    +
    100  while (!success && ros::ok()) {
    +
    101 
    +
    102  success = service_client_.call(srv);
    +
    103 
    +
    104  if (!success) {
    +
    105  ROS_ERROR("[%s]: failed to call service to '%s'", ros::this_node::getName().c_str(), _address_.c_str());
    +
    106  }
    +
    107 
    +
    108  if (++counter >= attempts) {
    +
    109  break;
    +
    110  }
    +
    111 
    +
    112  ros::Duration(repeat_delay).sleep();
    +
    113  }
    +
    114 
    +
    115  return success;
    +
    116 }
    +
    117 
    +
    118 //}
    +
    119 
    +
    120 /* callAsync(ServiceType& srv) //{ */
    +
    121 
    +
    122 template <class ServiceType>
    +
    123 std::future<ServiceType> ServiceClientHandler_impl<ServiceType>::callAsync(ServiceType& srv) {
    +
    124 
    +
    125  {
    +
    126  std::scoped_lock lock(mutex_async_);
    +
    127 
    +
    128  async_data_ = srv;
    +
    129  async_attempts_ = 1;
    +
    130  async_repeat_delay_ = 0;
    +
    131  }
    +
    132 
    +
    133  return std::async(std::launch::async, &ServiceClientHandler_impl::asyncRun, this);
    +
    134 }
    +
    135 
    +
    136 //}
    +
    137 
    +
    138 /* callAsync(ServiceType& srv, const int& attempts) //{ */
    +
    139 
    +
    140 template <class ServiceType>
    +
    141 std::future<ServiceType> ServiceClientHandler_impl<ServiceType>::callAsync(ServiceType& srv, const int& attempts) {
    +
    142 
    +
    143  {
    +
    144  std::scoped_lock lock(mutex_async_);
    +
    145 
    +
    146  async_data_ = srv;
    +
    147  async_attempts_ = attempts;
    +
    148  async_repeat_delay_ = 0;
    +
    149  }
    +
    150 
    +
    151  return std::async(std::launch::async, &ServiceClientHandler_impl::asyncRun, this);
    +
    152 }
    +
    153 
    +
    154 //}
    +
    155 
    +
    156 /* callAsync(ServiceType& srv, const int& attempts, const double &repeat_delay) //{ */
    +
    157 
    +
    158 template <class ServiceType>
    +
    159 std::future<ServiceType> ServiceClientHandler_impl<ServiceType>::callAsync(ServiceType& srv, const int& attempts, const double& repeat_delay) {
    +
    160 
    +
    161  {
    +
    162  std::scoped_lock lock(mutex_async_);
    +
    163 
    +
    164  async_data_ = srv;
    +
    165  async_attempts_ = attempts;
    +
    166  async_repeat_delay_ = repeat_delay;
    +
    167  }
    +
    168 
    +
    169  return std::async(std::launch::async, &ServiceClientHandler_impl::asyncRun, this);
    +
    170 }
    +
    171 
    +
    172 //}
    +
    173 
    +
    174 /* asyncRun(void) //{ */
    +
    175 
    +
    176 template <class ServiceType>
    + +
    178 
    +
    179  ServiceType async_data;
    +
    180  int async_attempts;
    +
    181 
    +
    182  {
    +
    183  std::scoped_lock lock(mutex_async_);
    +
    184 
    +
    185  async_data = async_data_;
    +
    186  async_attempts = async_attempts_;
    +
    187  async_repeat_delay_ = async_repeat_delay_;
    +
    188  }
    +
    189 
    +
    190  call(async_data, async_attempts, async_repeat_delay_);
    +
    191 
    +
    192  return async_data;
    +
    193 }
    +
    194 
    +
    195 //}
    +
    196 
    +
    197 // --------------------------------------------------------------
    +
    198 // | ServiceClientHandler |
    +
    199 // --------------------------------------------------------------
    +
    200 
    +
    201 /* operator= //{ */
    +
    202 
    +
    203 template <class ServiceType>
    + +
    205 
    +
    206  if (this == &other) {
    +
    207  return *this;
    +
    208  }
    +
    209 
    +
    210  if (other.impl_) {
    +
    211  this->impl_ = other.impl_;
    +
    212  }
    +
    213 
    +
    214  return *this;
    +
    215 }
    +
    216 
    +
    217 //}
    +
    218 
    +
    219 /* copy constructor //{ */
    +
    220 
    +
    221 template <class ServiceType>
    + +
    223 
    +
    224  if (other.impl_) {
    +
    225  this->impl_ = other.impl_;
    +
    226  }
    +
    227 }
    +
    228 
    +
    229 //}
    +
    230 
    +
    231 /* ServiceClientHandler(ros::NodeHandle& nh, const std::string& address) //{ */
    +
    232 
    +
    233 template <class ServiceType>
    +
    234 ServiceClientHandler<ServiceType>::ServiceClientHandler(ros::NodeHandle& nh, const std::string& address) {
    +
    235 
    +
    236  impl_ = std::make_shared<ServiceClientHandler_impl<ServiceType>>(nh, address);
    +
    237 }
    +
    238 
    +
    239 //}
    +
    240 
    +
    241 /* initialize(ros::NodeHandle& nh, const std::string& address) //{ */
    +
    242 
    +
    243 template <class ServiceType>
    +
    244 void ServiceClientHandler<ServiceType>::initialize(ros::NodeHandle& nh, const std::string& address) {
    +
    245 
    +
    246  impl_ = std::make_shared<ServiceClientHandler_impl<ServiceType>>(nh, address);
    +
    247 }
    +
    248 
    +
    249 //}
    +
    250 
    +
    251 /* call(ServiceType& srv) //{ */
    +
    252 
    +
    253 template <class ServiceType>
    + +
    255 
    +
    256  return impl_->call(srv);
    +
    257 }
    +
    258 
    +
    259 //}
    +
    260 
    +
    261 /* call(ServiceType& srv, const int& attempts) //{ */
    +
    262 
    +
    263 template <class ServiceType>
    +
    264 bool ServiceClientHandler<ServiceType>::call(ServiceType& srv, const int& attempts) {
    +
    265 
    +
    266  return impl_->call(srv, attempts);
    +
    267 }
    +
    268 
    +
    269 //}
    +
    270 
    +
    271 /* call(ServiceType& srv, const int& attempts, const double& repeat_delay) //{ */
    +
    272 
    +
    273 template <class ServiceType>
    +
    274 bool ServiceClientHandler<ServiceType>::call(ServiceType& srv, const int& attempts, const double& repeat_delay) {
    +
    275 
    +
    276  return impl_->call(srv, attempts, repeat_delay);
    +
    277 }
    +
    278 
    +
    279 //}
    +
    280 
    +
    281 /* callAsync(ServiceType& srv) //{ */
    +
    282 
    +
    283 template <class ServiceType>
    +
    284 std::future<ServiceType> ServiceClientHandler<ServiceType>::callAsync(ServiceType& srv) {
    +
    285 
    +
    286  std::future<ServiceType> res = impl_->callAsync(srv);
    +
    287 
    +
    288  return res;
    +
    289 }
    +
    290 
    +
    291 //}
    +
    292 
    +
    293 /* callAsync(ServiceType& srv, const int& attempts) //{ */
    +
    294 
    +
    295 template <class ServiceType>
    +
    296 std::future<ServiceType> ServiceClientHandler<ServiceType>::callAsync(ServiceType& srv, const int& attempts) {
    +
    297 
    +
    298  std::future<ServiceType> res = impl_->callAsync(srv, attempts);
    +
    299 
    +
    300  return res;
    +
    301 }
    +
    302 
    +
    303 //}
    +
    304 
    +
    305 /* callAsync(ServiceType& srv, const int& attempts, const double& repeat_delay) //{ */
    +
    306 
    +
    307 template <class ServiceType>
    +
    308 std::future<ServiceType> ServiceClientHandler<ServiceType>::callAsync(ServiceType& srv, const int& attempts, const double& repeat_delay) {
    +
    309 
    +
    310  std::future<ServiceType> res = impl_->callAsync(srv, attempts, repeat_delay);
    +
    311 
    +
    312  return res;
    +
    313 }
    +
    314 
    +
    315 //}
    +
    316 
    +
    317 } // namespace mrs_lib
    +
    318 
    +
    319 #endif // SERVICE_CLIENT_HANDLER_HPP
    +
    +
    +
    user wrapper of the service client handler implementation
    Definition: service_client_handler.h:128
    +
    implementation of the service client handler
    Definition: service_client_handler.h:24
    +
    ServiceClientHandler_impl(void)
    default constructor
    Definition: service_client_handler.hpp:14
    +
    ServiceClientHandler(void)
    generic constructor
    Definition: service_client_handler.h:134
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    std::future< ServiceType > callAsync(ServiceType &srv)
    asynchronous call
    Definition: service_client_handler.hpp:284
    +
    std::future< ServiceType > callAsync(ServiceType &srv)
    asynchronous service call
    Definition: service_client_handler.hpp:123
    +
    void initialize(ros::NodeHandle &nh, const std::string &address)
    initializer
    Definition: service_client_handler.hpp:244
    +
    bool call(ServiceType &srv)
    "classic" synchronous service call
    Definition: service_client_handler.hpp:43
    +
    bool call(ServiceType &srv)
    "standard" synchronous call
    Definition: service_client_handler.hpp:254
    +
    ServiceClientHandler & operator=(const ServiceClientHandler &other)
    operator=
    Definition: service_client_handler.hpp:204
    + + + + diff --git a/shapes_8h.html b/shapes_8h.html new file mode 100644 index 00000000..deb7c369 --- /dev/null +++ b/shapes_8h.html @@ -0,0 +1,172 @@ + + + + + + + +mrs_lib: include/mrs_lib/geometry/shapes.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    shapes.h File Reference
    +
    +
    + +

    Defines various geometrical shapes and their relations. +More...

    +
    #include <boost/optional.hpp>
    +#include <Eigen/Dense>
    +
    + + Include dependency graph for shapes.h:
    +
    +
    + +
    + + This graph shows which files directly or indirectly include this file:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  mrs_lib::geometry::Ray
     geometric representation of a ray. Instantiate it by two input Vector3. Use static methods for from-to raycast, or a point-direction raycast. More...
     
    class  mrs_lib::geometry::Triangle
     geometric representation of a triangle. Instantiate a new triangle by providing three vertices More...
     
    class  mrs_lib::geometry::Rectangle
     geometric representation of a rectangle (can represent any quadrilateral) More...
     
    class  mrs_lib::geometry::Cuboid
     geometric representation of a cuboid More...
     
    class  mrs_lib::geometry::Ellipse
     geometric representation of an ellipse More...
     
    class  mrs_lib::geometry::Cylinder
     geometric representation of a cylinder More...
     
    class  mrs_lib::geometry::Cone
     geometric representaiton of a cone More...
     
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    +

    Detailed Description

    +

    Defines various geometrical shapes and their relations.

    +
    Author
    Petr Štibinger - stibi.nosp@m.pet@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +
    +Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +
    +
    + + + + diff --git a/shapes_8h__dep__incl.map b/shapes_8h__dep__incl.map new file mode 100644 index 00000000..2be432da --- /dev/null +++ b/shapes_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/shapes_8h__dep__incl.md5 b/shapes_8h__dep__incl.md5 new file mode 100644 index 00000000..dca1de03 --- /dev/null +++ b/shapes_8h__dep__incl.md5 @@ -0,0 +1 @@ +bf8f78553be13a71b7fe8ee8fc41dd5a \ No newline at end of file diff --git a/shapes_8h__dep__incl.png b/shapes_8h__dep__incl.png new file mode 100644 index 00000000..877f2de4 Binary files /dev/null and b/shapes_8h__dep__incl.png differ diff --git a/shapes_8h__incl.map b/shapes_8h__incl.map new file mode 100644 index 00000000..0d4e915d --- /dev/null +++ b/shapes_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/shapes_8h__incl.md5 b/shapes_8h__incl.md5 new file mode 100644 index 00000000..54ceae1f --- /dev/null +++ b/shapes_8h__incl.md5 @@ -0,0 +1 @@ +49986c82dee51ade50ac44d0a7987dd3 \ No newline at end of file diff --git a/shapes_8h__incl.png b/shapes_8h__incl.png new file mode 100644 index 00000000..e2ab2c6c Binary files /dev/null and b/shapes_8h__incl.png differ diff --git a/shapes_8h_source.html b/shapes_8h_source.html new file mode 100644 index 00000000..8da37177 --- /dev/null +++ b/shapes_8h_source.html @@ -0,0 +1,427 @@ + + + + + + + +mrs_lib: include/mrs_lib/geometry/shapes.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    shapes.h
    +
    +
    +Go to the documentation of this file.
    1 // clang: MatousFormat
    +
    8 #ifndef SHAPES_H
    +
    9 #define SHAPES_H
    +
    10 
    +
    11 #include <boost/optional.hpp>
    +
    12 #include <Eigen/Dense>
    +
    13 
    +
    14 namespace mrs_lib
    +
    15 {
    +
    16  namespace geometry
    +
    17  {
    +
    18 
    +
    19  /* class Ray //{ */
    +
    20 
    +
    24  class Ray
    +
    25  {
    +
    26  public:
    +
    30  Ray();
    +
    31 
    +
    35  ~Ray();
    +
    36 
    +
    43  Ray(Eigen::Vector3d p1, Eigen::Vector3d p2);
    +
    44 
    +
    45  private:
    +
    46  Eigen::Vector3d point1;
    +
    47  Eigen::Vector3d point2;
    +
    48 
    +
    49  public:
    +
    55  const Eigen::Vector3d p1() const;
    +
    61  const Eigen::Vector3d p2() const;
    +
    62 
    +
    68  const Eigen::Vector3d direction() const;
    +
    69 
    +
    70  public:
    +
    79  static Ray twopointCast(Eigen::Vector3d pointFrom, Eigen::Vector3d pointTo);
    +
    80 
    +
    89  static Ray directionCast(Eigen::Vector3d origin, Eigen::Vector3d direction);
    +
    90  };
    +
    91 
    +
    92  //}
    +
    93 
    +
    94  /* class Triangle //{ */
    +
    98  class Triangle
    +
    99  {
    +
    100  public:
    +
    104  Triangle();
    +
    105 
    +
    109  ~Triangle();
    +
    110 
    +
    118  Triangle(Eigen::Vector3d a, Eigen::Vector3d b, Eigen::Vector3d c);
    +
    119 
    +
    120  private:
    +
    121  Eigen::Vector3d point1;
    +
    122  Eigen::Vector3d point2;
    +
    123  Eigen::Vector3d point3;
    +
    124 
    +
    125  public:
    +
    131  const Eigen::Vector3d a() const;
    +
    132 
    +
    138  const Eigen::Vector3d b() const;
    +
    139 
    +
    145  const Eigen::Vector3d c() const;
    +
    146 
    +
    152  const Eigen::Vector3d center() const;
    +
    153 
    +
    160  const Eigen::Vector3d normal() const;
    +
    161 
    +
    167  const std::vector<Eigen::Vector3d> vertices() const;
    +
    168 
    +
    169  public:
    +
    178  const boost::optional<Eigen::Vector3d> intersectionRay(Ray r, double epsilon = 1e-4) const;
    +
    179  };
    +
    180  //}
    +
    181 
    +
    182  /* class Rectangle //{ */
    +
    183 
    +
    187  class Rectangle
    +
    188  {
    +
    189  public:
    +
    193  Rectangle();
    +
    194 
    +
    198  ~Rectangle();
    +
    199 
    +
    205  Rectangle(std::vector<Eigen::Vector3d> points);
    +
    206 
    +
    215  Rectangle(Eigen::Vector3d a, Eigen::Vector3d b, Eigen::Vector3d c, Eigen::Vector3d d);
    +
    216 
    +
    217  private:
    +
    218  Eigen::Vector3d point1;
    +
    219  Eigen::Vector3d point2;
    +
    220  Eigen::Vector3d point3;
    +
    221  Eigen::Vector3d point4;
    +
    222 
    +
    223  public:
    +
    229  const Eigen::Vector3d a() const;
    +
    230 
    +
    236  const Eigen::Vector3d b() const;
    +
    237 
    +
    243  const Eigen::Vector3d c() const;
    +
    244 
    +
    250  const Eigen::Vector3d d() const;
    +
    251 
    +
    257  const Eigen::Vector3d center() const;
    +
    258 
    +
    265  const Eigen::Vector3d normal() const;
    +
    266 
    +
    272  const std::vector<Eigen::Vector3d> vertices() const;
    +
    273 
    +
    279  const std::vector<Triangle> triangles() const;
    +
    280 
    +
    289  const boost::optional<Eigen::Vector3d> intersectionRay(Ray r, double epsilon = 1e-4) const;
    +
    290 
    +
    298  bool isFacing(Eigen::Vector3d point) const;
    +
    299 
    +
    300 
    +
    308  double solidAngleRelativeTo(Eigen::Vector3d point) const;
    +
    309  };
    +
    310 
    +
    311  //}
    +
    312 
    +
    313  /* class Cuboid //{ */
    +
    317  class Cuboid
    +
    318  {
    +
    319  public:
    +
    323  Cuboid();
    +
    324 
    +
    328  ~Cuboid();
    +
    329 
    +
    342  Cuboid(Eigen::Vector3d p0, Eigen::Vector3d p1, Eigen::Vector3d p2, Eigen::Vector3d p3, Eigen::Vector3d p4, Eigen::Vector3d p5, Eigen::Vector3d p6,
    +
    343  Eigen::Vector3d p7);
    +
    349  Cuboid(std::vector<Eigen::Vector3d> points);
    +
    350 
    +
    358  Cuboid(Eigen::Vector3d center, Eigen::Vector3d size, Eigen::Quaterniond orientation);
    +
    359 
    +
    360  private:
    +
    364  enum
    +
    365  {
    +
    366  FRONT = 0,
    +
    367  BACK = 1,
    +
    368  LEFT = 2,
    +
    369  RIGHT = 3,
    +
    370  BOTTOM = 4,
    +
    371  TOP = 5,
    +
    372  };
    +
    373 
    +
    374  private:
    +
    375  std::vector<Eigen::Vector3d> points;
    +
    376 
    +
    384  std::vector<Eigen::Vector3d> lookupPoints(int face_idx) const;
    +
    385 
    +
    386  public:
    +
    392  const std::vector<Eigen::Vector3d> vertices() const;
    +
    393 
    +
    399  const Eigen::Vector3d center() const;
    +
    400 
    +
    408  const Rectangle getRectangle(int face_idx) const;
    +
    409 
    +
    418  const std::vector<Eigen::Vector3d> intersectionRay(Ray r, double epsilon = 1e-4) const;
    +
    419  };
    +
    420  //}
    +
    421 
    +
    422  /* class Ellipse //{ */
    +
    426  class Ellipse
    +
    427  {
    +
    428  public:
    +
    432  Ellipse();
    +
    433 
    +
    437  ~Ellipse();
    +
    438 
    +
    447  Ellipse(Eigen::Vector3d center, Eigen::Quaterniond orientation, double a, double b);
    +
    448 
    +
    449  private:
    +
    450  double major_semi;
    +
    451  double minor_semi;
    +
    452  Eigen::Vector3d center_point;
    +
    453  Eigen::Quaterniond absolute_orientation;
    +
    454 
    +
    455  public:
    +
    461  double a() const;
    +
    462 
    +
    468  double b() const;
    +
    469 
    +
    475  const Eigen::Vector3d center() const;
    +
    476 
    +
    482  const Eigen::Quaterniond orientation() const;
    +
    483  };
    +
    484  //}
    +
    485 
    +
    486  /* class Cylinder //{ */
    +
    490  class Cylinder
    +
    491  {
    +
    492  public:
    +
    496  Cylinder();
    +
    497 
    +
    501  ~Cylinder();
    +
    502 
    +
    511  Cylinder(Eigen::Vector3d center, double radius, double height, Eigen::Quaterniond orientation);
    +
    512 
    +
    513  private:
    +
    514  Eigen::Vector3d center_point;
    +
    515  double radius;
    +
    516  double height;
    +
    517  Eigen::Quaterniond absolute_orientation;
    +
    518 
    +
    519  public:
    +
    523  enum
    +
    524  {
    +
    525  BOTTOM = 0,
    +
    526  TOP = 1,
    +
    527  };
    +
    528 
    +
    529  public:
    +
    535  const Eigen::Vector3d center() const;
    +
    536 
    +
    542  const Eigen::Quaterniond orientation() const;
    +
    543 
    +
    549  double r() const;
    +
    550 
    +
    556  double h() const;
    +
    557 
    +
    565  const Ellipse getCap(int index) const;
    +
    566  };
    +
    567  //}
    +
    568 
    +
    569  /* class Cone //{ */
    +
    573  class Cone
    +
    574  {
    +
    575  public:
    +
    579  Cone();
    +
    580 
    +
    584  ~Cone();
    +
    585 
    +
    594  Cone(Eigen::Vector3d origin_point, double angle, double height, Eigen::Vector3d orientation);
    +
    595 
    +
    596  private:
    +
    597  Eigen::Vector3d origin_point;
    +
    598  double angle;
    +
    599  double height;
    +
    600  Eigen::Vector3d absolute_direction;
    +
    601 
    +
    602  public:
    +
    608  const Eigen::Vector3d origin() const;
    +
    609 
    +
    615  const Eigen::Vector3d direction() const;
    +
    616 
    +
    622  const Eigen::Vector3d center() const;
    +
    623 
    +
    629  double theta() const;
    +
    630 
    +
    636  double h() const;
    +
    637 
    +
    643  const Ellipse getCap() const;
    +
    644 
    +
    652  const std::optional<Eigen::Vector3d> projectPoint(const Eigen::Vector3d& point) const;
    +
    653  };
    +
    654  //}
    +
    655  } // namespace geometry
    +
    656 } // namespace mrs_lib
    +
    657 
    +
    658 #endif // SHAPES_H
    +
    +
    +
    Ray()
    constructor without initialization of internal variables
    Definition: shapes.cpp:13
    +
    ~Cylinder()
    destructor
    Definition: shapes.cpp:498
    +
    const Ellipse getCap() const
    getter for the cap of the cone
    Definition: shapes.cpp:600
    +
    const Eigen::Quaterniond orientation() const
    getter for the orientation
    Definition: shapes.cpp:517
    +
    Ellipse()
    constructor for initialization without setting internal variables
    Definition: shapes.cpp:449
    +
    const boost::optional< Eigen::Vector3d > intersectionRay(Ray r, double epsilon=1e-4) const
    calculate an intersection of this triangle with a given ray with given tolerance
    Definition: shapes.cpp:122
    +
    const std::vector< Eigen::Vector3d > vertices() const
    get a vector of all vertices
    Definition: shapes.cpp:111
    +
    const boost::optional< Eigen::Vector3d > intersectionRay(Ray r, double epsilon=1e-4) const
    calculate an intersection of this rectangle with a given ray with given tolerance
    Definition: shapes.cpp:247
    +
    ~Cone()
    destructor
    Definition: shapes.cpp:561
    +
    double b() const
    getter for minor semi-axis
    Definition: shapes.cpp:472
    +
    const Eigen::Vector3d center() const
    getter for the center point
    Definition: shapes.cpp:512
    +
    const Eigen::Vector3d center() const
    getter for the center point. Center point lies in half of the body height
    Definition: shapes.cpp:585
    +
    const Eigen::Vector3d c() const
    getter for third point
    Definition: shapes.cpp:94
    +
    Cylinder()
    constructor without setting the internal variables
    Definition: shapes.cpp:494
    +
    Triangle()
    constructor for initialization with default values (points [0,0,0], [1,0,0] and [0,...
    Definition: shapes.cpp:64
    +
    const std::vector< Triangle > triangles() const
    getter for the triangles forming this rectangle
    Definition: shapes.cpp:234
    +
    const Eigen::Vector3d p2() const
    get the end point
    Definition: shapes.cpp:36
    +
    double h() const
    getter for body height
    Definition: shapes.cpp:595
    +
    const Eigen::Vector3d center() const
    get position on the triangle center
    Definition: shapes.cpp:106
    +
    geometric representation of a ray. Instantiate it by two input Vector3. Use static methods for from-t...
    Definition: shapes.h:24
    +
    double a() const
    getter for major semi-axis
    Definition: shapes.cpp:467
    +
    geometric representation of a cuboid
    Definition: shapes.h:317
    +
    const Eigen::Vector3d d() const
    getter for the fourth point
    Definition: shapes.cpp:207
    +
    const std::vector< Eigen::Vector3d > vertices() const
    getter for all vertices (vector3) of this cuboid
    Definition: shapes.cpp:406
    +
    const Eigen::Vector3d origin() const
    getter for the tip point
    Definition: shapes.cpp:575
    +
    Cuboid()
    constructor for initialization with all points set to [0,0,0]
    Definition: shapes.cpp:295
    +
    double theta() const
    getter for angle between body height and body side
    Definition: shapes.cpp:590
    +
    const Eigen::Vector3d center() const
    getter for center point
    Definition: shapes.cpp:212
    +
    Rectangle()
    constructor for initialization with points set to [0,0,0], [1,0,0], [1,1,0] and [0,...
    Definition: shapes.cpp:162
    +
    const Eigen::Vector3d b() const
    getter for second point
    Definition: shapes.cpp:89
    +
    ~Triangle()
    destructor
    Definition: shapes.cpp:78
    +
    const Eigen::Vector3d a() const
    getter for first point
    Definition: shapes.cpp:192
    +
    const Eigen::Vector3d p1() const
    get the origin point
    Definition: shapes.cpp:31
    +
    geometric representation of an ellipse
    Definition: shapes.h:426
    +
    const Ellipse getCap(int index) const
    getter for a cap corresponding to a provided index
    Definition: shapes.cpp:532
    +
    double r() const
    getter for cap radius
    Definition: shapes.cpp:522
    +
    const Eigen::Vector3d center() const
    getter for the center point
    Definition: shapes.cpp:477
    +
    const Eigen::Vector3d b() const
    getter for the second point
    Definition: shapes.cpp:197
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    const Eigen::Vector3d a() const
    getter for first point
    Definition: shapes.cpp:84
    +
    Cone()
    constructor without setting the internal variables
    Definition: shapes.cpp:557
    +
    const Rectangle getRectangle(int face_idx) const
    getter for one side corresponding to a provided index
    Definition: shapes.cpp:411
    +
    geometric representation of a rectangle (can represent any quadrilateral)
    Definition: shapes.h:187
    +
    const std::vector< Eigen::Vector3d > vertices() const
    getter for all the points of this rectangle provided as std::vector
    Definition: shapes.cpp:224
    +
    double h() const
    getter for the body height
    Definition: shapes.cpp:527
    +
    ~Ray()
    destructor
    Definition: shapes.cpp:25
    +
    const Eigen::Vector3d normal() const
    getter for the normal vector. It originates in the center of the Rectangle, length is normalized,...
    Definition: shapes.cpp:217
    +
    const Eigen::Vector3d direction() const
    getter for the direction. Normalized direction from origin towards base
    Definition: shapes.cpp:580
    +
    double solidAngleRelativeTo(Eigen::Vector3d point) const
    compute the solid angle of this rectangle relative to a given sphere center
    Definition: shapes.cpp:271
    +
    const Eigen::Vector3d normal() const
    get normal vector of this triangle. The vector origin is placed at triangle center,...
    Definition: shapes.cpp:99
    +
    static Ray twopointCast(Eigen::Vector3d pointFrom, Eigen::Vector3d pointTo)
    static method for generating new rays by raycasting from-to
    Definition: shapes.cpp:48
    +
    geometric representation of a triangle. Instantiate a new triangle by providing three vertices
    Definition: shapes.h:98
    +
    const Eigen::Vector3d center() const
    getter for the center point
    Definition: shapes.cpp:416
    +
    ~Ellipse()
    destructor
    Definition: shapes.cpp:453
    +
    ~Rectangle()
    destructor
    Definition: shapes.cpp:186
    +
    const Eigen::Quaterniond orientation() const
    getter for the orientation
    Definition: shapes.cpp:482
    +
    const Eigen::Vector3d direction() const
    get the direction of ray (normalized)
    Definition: shapes.cpp:41
    +
    const std::optional< Eigen::Vector3d > projectPoint(const Eigen::Vector3d &point) const
    Project a 3D point orthogonally onto the Cone surface.
    Definition: shapes.cpp:609
    +
    geometric representation of a cylinder
    Definition: shapes.h:490
    +
    static Ray directionCast(Eigen::Vector3d origin, Eigen::Vector3d direction)
    static method for generating new rays by raycasting origin-direction
    Definition: shapes.cpp:53
    +
    ~Cuboid()
    virtual destructor
    Definition: shapes.cpp:353
    +
    bool isFacing(Eigen::Vector3d point) const
    check if the normal is facing a given point, i.e. if the point lies in the same half-space as the rec...
    Definition: shapes.cpp:261
    +
    const Eigen::Vector3d c() const
    getter for the third point
    Definition: shapes.cpp:202
    +
    geometric representaiton of a cone
    Definition: shapes.h:573
    +
    const std::vector< Eigen::Vector3d > intersectionRay(Ray r, double epsilon=1e-4) const
    calculate the intersection between this cuboid and a provided ray within a given tolerance....
    Definition: shapes.cpp:428
    + + + + diff --git a/simple__example_8cpp.html b/simple__example_8cpp.html new file mode 100644 index 00000000..cedb10be --- /dev/null +++ b/simple__example_8cpp.html @@ -0,0 +1,143 @@ + + + + + + + +mrs_lib: src/subscribe_handler/simple_example.cpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    simple_example.cpp File Reference
    +
    +
    + +

    Example file for the SubscribeHandler convenience class. +More...

    +
    #include <mrs_lib/subscribe_handler.h>
    +#include <std_msgs/String.h>
    +
    + + Include dependency graph for simple_example.cpp:
    +
    +
    + +
    + + + +

    +Functions

    +int main (int argc, char **argv)
     
    +

    Detailed Description

    +

    Example file for the SubscribeHandler convenience class.

    +
    Author
    Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +

    A simple example demonstrating basic usage of the SubscribeHandler class. This example may be run after building mrs_lib by executing rosrun mrs_lib subscribe_handler_simple_example.

    +

    See subscribe_handler/simple_example.cpp.

    +
    +
    + + + + diff --git a/simple__example_8cpp.js b/simple__example_8cpp.js new file mode 100644 index 00000000..2a171865 --- /dev/null +++ b/simple__example_8cpp.js @@ -0,0 +1,4 @@ +var simple__example_8cpp = +[ + [ "main", "simple__example_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627", null ] +]; \ No newline at end of file diff --git a/simple__example_8cpp__incl.map b/simple__example_8cpp__incl.map new file mode 100644 index 00000000..d82d6b50 --- /dev/null +++ b/simple__example_8cpp__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/simple__example_8cpp__incl.md5 b/simple__example_8cpp__incl.md5 new file mode 100644 index 00000000..283fc1b3 --- /dev/null +++ b/simple__example_8cpp__incl.md5 @@ -0,0 +1 @@ +62f57ad1462bccbf7d6970222bb9880c \ No newline at end of file diff --git a/simple__example_8cpp__incl.png b/simple__example_8cpp__incl.png new file mode 100644 index 00000000..ebe5f848 Binary files /dev/null and b/simple__example_8cpp__incl.png differ diff --git a/splitbar.png b/splitbar.png new file mode 100644 index 00000000..fe895f2c Binary files /dev/null and b/splitbar.png differ diff --git a/structMyPoint-members.html b/structMyPoint-members.html new file mode 100644 index 00000000..a6bd17cd --- /dev/null +++ b/structMyPoint-members.html @@ -0,0 +1,107 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    MyPoint Member List
    +
    +
    + +

    This is the complete list of members for MyPoint, including all inherited members.

    + + + + +
    e1 (defined in MyPoint)MyPoint
    e2 (defined in MyPoint)MyPoint
    e3 (defined in MyPoint)MyPoint
    +
    + + + + diff --git a/structMyPoint.html b/structMyPoint.html new file mode 100644 index 00000000..175a101e --- /dev/null +++ b/structMyPoint.html @@ -0,0 +1,124 @@ + + + + + + + +mrs_lib: MyPoint Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    MyPoint Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    +double e1
     
    +double e2
     
    +double e3
     
    +

    Detailed Description

    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structMyPoint.js b/structMyPoint.js new file mode 100644 index 00000000..4855d3d7 --- /dev/null +++ b/structMyPoint.js @@ -0,0 +1,6 @@ +var structMyPoint = +[ + [ "e1", "structMyPoint.html#af05a7b1e25b260ab521d15dd7b1992bc", null ], + [ "e2", "structMyPoint.html#a57a729c54a388896f9502cb49d91596e", null ], + [ "e3", "structMyPoint.html#a9d2ceea3609452e2d3f880c6f8690733", null ] +]; \ No newline at end of file diff --git a/structdegrees-members.html b/structdegrees-members.html new file mode 100644 index 00000000..6357952e --- /dev/null +++ b/structdegrees-members.html @@ -0,0 +1,138 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    degrees Member List
    +
    +
    + +

    This is the complete list of members for degrees, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    convert(const cyclic &what)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    convert() constmrs_lib::geometry::cyclic< float, degrees >inline
    cyclic()mrs_lib::geometry::cyclic< float, degrees >inline
    cyclic(const float val)mrs_lib::geometry::cyclic< float, degrees >inline
    cyclic(const cyclic &other)mrs_lib::geometry::cyclic< float, degrees >inline
    cyclic(const degrees &other)mrs_lib::geometry::cyclic< float, degrees >inline
    diff(const float minuend, const float subtrahend)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    diff(const cyclic minuend, const cyclic subtrahend) (defined in mrs_lib::geometry::cyclic< float, degrees >)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    dist(const float from, const float to)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    dist(const cyclic from, const cyclic to) (defined in mrs_lib::geometry::cyclic< float, degrees >)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    half_rangemrs_lib::geometry::cyclic< float, degrees >static
    inRange(const float val)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    interp(const float from, const float to, const float coeff)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    interp(const cyclic from, const cyclic to, const float coeff) (defined in mrs_lib::geometry::cyclic< float, degrees >)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    interpUnwrapped(const float from, const float to, const float coeff)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    interpUnwrapped(const cyclic from, const cyclic to, const float coeff) (defined in mrs_lib::geometry::cyclic< float, degrees >)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    minimum (defined in degrees)degreesstatic
    operator+=(const cyclic &other)mrs_lib::geometry::cyclic< float, degrees >inline
    operator-=(const cyclic &other)mrs_lib::geometry::cyclic< float, degrees >inline
    operator=(const float nval)mrs_lib::geometry::cyclic< float, degrees >inline
    operator=(const cyclic &other)mrs_lib::geometry::cyclic< float, degrees >inline
    operator=(cyclic &&other)mrs_lib::geometry::cyclic< float, degrees >inline
    pdist(const float from, const float to)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    pdist(const cyclic from, const cyclic to) (defined in mrs_lib::geometry::cyclic< float, degrees >)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    pinterp(const float from, const float to, const float coeff)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    pinterp(const cyclic from, const cyclic to, const float coeff) (defined in mrs_lib::geometry::cyclic< float, degrees >)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    pinterpUnwrapped(const float from, const float to, const float coeff)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    pinterpUnwrapped(const cyclic from, const cyclic to, const float coeff) (defined in mrs_lib::geometry::cyclic< float, degrees >)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    rangemrs_lib::geometry::cyclic< float, degrees >static
    supremum (defined in degrees)degreesstatic
    unwrap(const float what, const float from)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    val (defined in mrs_lib::geometry::cyclic< float, degrees >)mrs_lib::geometry::cyclic< float, degrees >protected
    value() constmrs_lib::geometry::cyclic< float, degrees >inline
    wrap(const float val)mrs_lib::geometry::cyclic< float, degrees >inlinestatic
    +
    + + + + diff --git a/structdegrees.html b/structdegrees.html new file mode 100644 index 00000000..5c56be1a --- /dev/null +++ b/structdegrees.html @@ -0,0 +1,256 @@ + + + + + + + +mrs_lib: degrees Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    degrees Struct Reference
    +
    +
    +
    + + Inheritance diagram for degrees:
    +
    +
    + +
    + + Collaboration diagram for degrees:
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Static Public Attributes

    +static constexpr double minimum = -180
     
    +static constexpr double supremum = 180
     
    - Static Public Attributes inherited from mrs_lib::geometry::cyclic< float, degrees >
    +static constexpr float minimum
     Minimum of the valid interval of wrapped values $ m $.
     
    +static constexpr float supremum
     Supremum of the valid interval of wrapped values $ s $.
     
    +static constexpr float range
     Range of the valid interval of wrapped values $ r $ (also the period of the cyclic quantity).
     
    +static constexpr float half_range
     Half of the range of the valid interval of wrapped values $ r/2 $ (used for some calculations).
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Member Functions inherited from mrs_lib::geometry::cyclic< float, degrees >
     cyclic ()
     Default constructor. More...
     
     cyclic (const float val)
     Constructor overload. More...
     
     cyclic (const cyclic &other)
     Copy constructor. More...
     
     cyclic (const degrees &other)
     Copy constructor. More...
     
    float value () const
     Getter for val. More...
     
    other_t convert () const
     Conversion between two different circular quantities. More...
     
    cyclicoperator= (const float nval)
     Assignment operator. More...
     
    cyclicoperator= (const cyclic &other)
     Assignment operator. More...
     
    cyclicoperator= (cyclic &&other)
     Move operator. More...
     
    cyclicoperator+= (const cyclic &other)
     Addition compound operator. More...
     
    cyclicoperator-= (const cyclic &other)
     Subtraction compound operator. More...
     
    - Static Public Member Functions inherited from mrs_lib::geometry::cyclic< float, degrees >
    static bool inRange (const float val)
     Checks if val is within the valid interval of wrapped values. More...
     
    static float wrap (const float val)
     Returns val, converted to the valid interval of values. More...
     
    static float unwrap (const float what, const float from)
     Returns value of the parameter what modified so that there is no "jump" between from and \t what. More...
     
    static float pdist (const float from, const float to)
     Returns length of the shortest walk in the positive direction from the first parameter to the second one. More...
     
    +static float pdist (const cyclic from, const cyclic to)
     
    static float diff (const float minuend, const float subtrahend)
     Returns the difference between the two circular values. More...
     
    +static float diff (const cyclic minuend, const cyclic subtrahend)
     
    static float dist (const float from, const float to)
     Returns the distance between the two circular values. More...
     
    +static float dist (const cyclic from, const cyclic to)
     
    static float interpUnwrapped (const float from, const float to, const float coeff)
     Interpolation between two circular quantities without wrapping of the result. More...
     
    +static float interpUnwrapped (const cyclic from, const cyclic to, const float coeff)
     
    static float interp (const float from, const float to, const float coeff)
     Interpolation between two circular quantities. More...
     
    +static float interp (const cyclic from, const cyclic to, const float coeff)
     
    static float pinterpUnwrapped (const float from, const float to, const float coeff)
     Interpolation between two circular quantities in the positive direction without wrapping of the result. More...
     
    +static float pinterpUnwrapped (const cyclic from, const cyclic to, const float coeff)
     
    static float pinterp (const float from, const float to, const float coeff)
     Interpolation between two circular quantities in the positive direction. More...
     
    +static float pinterp (const cyclic from, const cyclic to, const float coeff)
     
    static other_t convert (const cyclic &what)
     Conversion between two different circular quantities. More...
     
    - Protected Attributes inherited from mrs_lib::geometry::cyclic< float, degrees >
    +float val
     
    +

    Detailed Description

    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structdegrees__coll__graph.map b/structdegrees__coll__graph.map new file mode 100644 index 00000000..5e947cde --- /dev/null +++ b/structdegrees__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structdegrees__coll__graph.md5 b/structdegrees__coll__graph.md5 new file mode 100644 index 00000000..f90b4174 --- /dev/null +++ b/structdegrees__coll__graph.md5 @@ -0,0 +1 @@ +b3e6316aef96ac0c93d4901b70325b14 \ No newline at end of file diff --git a/structdegrees__coll__graph.png b/structdegrees__coll__graph.png new file mode 100644 index 00000000..2adc2f3a Binary files /dev/null and b/structdegrees__coll__graph.png differ diff --git a/structdegrees__inherit__graph.map b/structdegrees__inherit__graph.map new file mode 100644 index 00000000..5e947cde --- /dev/null +++ b/structdegrees__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structdegrees__inherit__graph.md5 b/structdegrees__inherit__graph.md5 new file mode 100644 index 00000000..f90b4174 --- /dev/null +++ b/structdegrees__inherit__graph.md5 @@ -0,0 +1 @@ +b3e6316aef96ac0c93d4901b70325b14 \ No newline at end of file diff --git a/structdegrees__inherit__graph.png b/structdegrees__inherit__graph.png new file mode 100644 index 00000000..2adc2f3a Binary files /dev/null and b/structdegrees__inherit__graph.png differ diff --git a/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException-members.html b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException-members.html new file mode 100644 index 00000000..98fd808c --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::AttitudeConverter::EulerFormatException Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::AttitudeConverter::EulerFormatException, including all inherited members.

    + + +
    what() const (defined in mrs_lib::AttitudeConverter::EulerFormatException)mrs_lib::AttitudeConverter::EulerFormatExceptioninline
    +
    + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException.html b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException.html new file mode 100644 index 00000000..6047c98e --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException.html @@ -0,0 +1,144 @@ + + + + + + + +mrs_lib: mrs_lib::AttitudeConverter::EulerFormatException Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::AttitudeConverter::EulerFormatException Struct Reference
    +
    +
    + +

    is thrown when the Euler angle format is set wrongly + More...

    + +

    #include <attitude_converter.h>

    +
    + + Inheritance diagram for mrs_lib::AttitudeConverter::EulerFormatException:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::AttitudeConverter::EulerFormatException:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +

    Detailed Description

    +

    is thrown when the Euler angle format is set wrongly

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException.js b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException.js new file mode 100644 index 00000000..3c283237 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException = +[ + [ "what", "structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException.html#a90bf91f9cf25539f57aea2103abe5b5e", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__coll__graph.map b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__coll__graph.map new file mode 100644 index 00000000..8e808907 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__coll__graph.md5 b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__coll__graph.md5 new file mode 100644 index 00000000..0d769c32 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__coll__graph.md5 @@ -0,0 +1 @@ +f3803f2788b35b56e2ed6e7ab43bacb8 \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__coll__graph.png b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__coll__graph.png new file mode 100644 index 00000000..9c2ef322 Binary files /dev/null and b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__coll__graph.png differ diff --git a/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__inherit__graph.map b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__inherit__graph.map new file mode 100644 index 00000000..8e808907 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__inherit__graph.md5 b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__inherit__graph.md5 new file mode 100644 index 00000000..0d769c32 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__inherit__graph.md5 @@ -0,0 +1 @@ +f3803f2788b35b56e2ed6e7ab43bacb8 \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__inherit__graph.png b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__inherit__graph.png new file mode 100644 index 00000000..9c2ef322 Binary files /dev/null and b/structmrs__lib_1_1AttitudeConverter_1_1EulerFormatException__inherit__graph.png differ diff --git a/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException-members.html b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException-members.html new file mode 100644 index 00000000..d8484c8e --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::AttitudeConverter::GetHeadingException Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::AttitudeConverter::GetHeadingException, including all inherited members.

    + + +
    what() const (defined in mrs_lib::AttitudeConverter::GetHeadingException)mrs_lib::AttitudeConverter::GetHeadingExceptioninline
    +
    + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException.html b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException.html new file mode 100644 index 00000000..3c8656f5 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException.html @@ -0,0 +1,144 @@ + + + + + + + +mrs_lib: mrs_lib::AttitudeConverter::GetHeadingException Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::AttitudeConverter::GetHeadingException Struct Reference
    +
    +
    + +

    is thrown when calculating of heading is not possible due to atan2 exception + More...

    + +

    #include <attitude_converter.h>

    +
    + + Inheritance diagram for mrs_lib::AttitudeConverter::GetHeadingException:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::AttitudeConverter::GetHeadingException:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +

    Detailed Description

    +

    is thrown when calculating of heading is not possible due to atan2 exception

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException.js b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException.js new file mode 100644 index 00000000..a1740afe --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException = +[ + [ "what", "structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException.html#ae4993f4da84447fc6165b0ba85b9fcf1", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__coll__graph.map b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__coll__graph.map new file mode 100644 index 00000000..dc1778b9 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__coll__graph.md5 b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__coll__graph.md5 new file mode 100644 index 00000000..fee5a872 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__coll__graph.md5 @@ -0,0 +1 @@ +150fdc740f9d80c1007a346abfdf6c19 \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__coll__graph.png b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__coll__graph.png new file mode 100644 index 00000000..c8b1b565 Binary files /dev/null and b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__coll__graph.png differ diff --git a/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__inherit__graph.map b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__inherit__graph.map new file mode 100644 index 00000000..dc1778b9 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__inherit__graph.md5 b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__inherit__graph.md5 new file mode 100644 index 00000000..fee5a872 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__inherit__graph.md5 @@ -0,0 +1 @@ +150fdc740f9d80c1007a346abfdf6c19 \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__inherit__graph.png b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__inherit__graph.png new file mode 100644 index 00000000..c8b1b565 Binary files /dev/null and b/structmrs__lib_1_1AttitudeConverter_1_1GetHeadingException__inherit__graph.png differ diff --git a/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException-members.html b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException-members.html new file mode 100644 index 00000000..2dc81ce7 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::AttitudeConverter::InvalidAttitudeException Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::AttitudeConverter::InvalidAttitudeException, including all inherited members.

    + + +
    what() const (defined in mrs_lib::AttitudeConverter::InvalidAttitudeException)mrs_lib::AttitudeConverter::InvalidAttitudeExceptioninline
    +
    + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException.html b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException.html new file mode 100644 index 00000000..1bea45ea --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException.html @@ -0,0 +1,144 @@ + + + + + + + +mrs_lib: mrs_lib::AttitudeConverter::InvalidAttitudeException Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::AttitudeConverter::InvalidAttitudeException Struct Reference
    +
    +
    + +

    is thrown when the internal attitude becomes invalid + More...

    + +

    #include <attitude_converter.h>

    +
    + + Inheritance diagram for mrs_lib::AttitudeConverter::InvalidAttitudeException:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::AttitudeConverter::InvalidAttitudeException:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +

    Detailed Description

    +

    is thrown when the internal attitude becomes invalid

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException.js b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException.js new file mode 100644 index 00000000..e88e45d0 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException = +[ + [ "what", "structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException.html#aec35a6c521fdfe0e2afae636d24f7849", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__coll__graph.map b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__coll__graph.map new file mode 100644 index 00000000..93f860ae --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__coll__graph.md5 b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__coll__graph.md5 new file mode 100644 index 00000000..8df1a836 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__coll__graph.md5 @@ -0,0 +1 @@ +14c62a6e7a6f35af73544b5a593c27d7 \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__coll__graph.png b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__coll__graph.png new file mode 100644 index 00000000..15fa859c Binary files /dev/null and b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__coll__graph.png differ diff --git a/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__inherit__graph.map b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__inherit__graph.map new file mode 100644 index 00000000..93f860ae --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__inherit__graph.md5 b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__inherit__graph.md5 new file mode 100644 index 00000000..8df1a836 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__inherit__graph.md5 @@ -0,0 +1 @@ +14c62a6e7a6f35af73544b5a593c27d7 \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__inherit__graph.png b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__inherit__graph.png new file mode 100644 index 00000000..15fa859c Binary files /dev/null and b/structmrs__lib_1_1AttitudeConverter_1_1InvalidAttitudeException__inherit__graph.png differ diff --git a/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException-members.html b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException-members.html new file mode 100644 index 00000000..0bc5ac4e --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::AttitudeConverter::MathErrorException Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::AttitudeConverter::MathErrorException, including all inherited members.

    + + +
    what() const (defined in mrs_lib::AttitudeConverter::MathErrorException)mrs_lib::AttitudeConverter::MathErrorExceptioninline
    +
    + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException.html b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException.html new file mode 100644 index 00000000..c2ee0792 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException.html @@ -0,0 +1,144 @@ + + + + + + + +mrs_lib: mrs_lib::AttitudeConverter::MathErrorException Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::AttitudeConverter::MathErrorException Struct Reference
    +
    +
    + +

    is thrown when math breaks + More...

    + +

    #include <attitude_converter.h>

    +
    + + Inheritance diagram for mrs_lib::AttitudeConverter::MathErrorException:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::AttitudeConverter::MathErrorException:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +

    Detailed Description

    +

    is thrown when math breaks

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException.js b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException.js new file mode 100644 index 00000000..862d9803 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1AttitudeConverter_1_1MathErrorException = +[ + [ "what", "structmrs__lib_1_1AttitudeConverter_1_1MathErrorException.html#abbcf2cf961b24158e9b4f4a6655ae42f", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__coll__graph.map b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__coll__graph.map new file mode 100644 index 00000000..663c8b73 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__coll__graph.md5 b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__coll__graph.md5 new file mode 100644 index 00000000..bf359346 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__coll__graph.md5 @@ -0,0 +1 @@ +78a66fff742a006c817afd90ac2e632c \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__coll__graph.png b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__coll__graph.png new file mode 100644 index 00000000..8e550322 Binary files /dev/null and b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__coll__graph.png differ diff --git a/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__inherit__graph.map b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__inherit__graph.map new file mode 100644 index 00000000..663c8b73 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__inherit__graph.md5 b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__inherit__graph.md5 new file mode 100644 index 00000000..bf359346 --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__inherit__graph.md5 @@ -0,0 +1 @@ +78a66fff742a006c817afd90ac2e632c \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__inherit__graph.png b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__inherit__graph.png new file mode 100644 index 00000000..8e550322 Binary files /dev/null and b/structmrs__lib_1_1AttitudeConverter_1_1MathErrorException__inherit__graph.png differ diff --git a/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException-members.html b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException-members.html new file mode 100644 index 00000000..81d176aa --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::AttitudeConverter::SetHeadingException Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::AttitudeConverter::SetHeadingException, including all inherited members.

    + + +
    what() const (defined in mrs_lib::AttitudeConverter::SetHeadingException)mrs_lib::AttitudeConverter::SetHeadingExceptioninline
    +
    + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException.html b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException.html new file mode 100644 index 00000000..9834993c --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException.html @@ -0,0 +1,144 @@ + + + + + + + +mrs_lib: mrs_lib::AttitudeConverter::SetHeadingException Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::AttitudeConverter::SetHeadingException Struct Reference
    +
    +
    + +

    is thrown when the heading cannot be set to an existing attitude + More...

    + +

    #include <attitude_converter.h>

    +
    + + Inheritance diagram for mrs_lib::AttitudeConverter::SetHeadingException:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::AttitudeConverter::SetHeadingException:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +

    Detailed Description

    +

    is thrown when the heading cannot be set to an existing attitude

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException.js b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException.js new file mode 100644 index 00000000..af00fb6d --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException = +[ + [ "what", "structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException.html#a32d0564ba5616e6579cf8a2dd98592ca", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__coll__graph.map b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__coll__graph.map new file mode 100644 index 00000000..d9b88acb --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__coll__graph.md5 b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__coll__graph.md5 new file mode 100644 index 00000000..028cf46d --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__coll__graph.md5 @@ -0,0 +1 @@ +f70d875c07165591e0f806a0fe11b167 \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__coll__graph.png b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__coll__graph.png new file mode 100644 index 00000000..217d98a6 Binary files /dev/null and b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__coll__graph.png differ diff --git a/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__inherit__graph.map b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__inherit__graph.map new file mode 100644 index 00000000..d9b88acb --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__inherit__graph.md5 b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__inherit__graph.md5 new file mode 100644 index 00000000..028cf46d --- /dev/null +++ b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__inherit__graph.md5 @@ -0,0 +1 @@ +f70d875c07165591e0f806a0fe11b167 \ No newline at end of file diff --git a/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__inherit__graph.png b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__inherit__graph.png new file mode 100644 index 00000000..217d98a6 Binary files /dev/null and b/structmrs__lib_1_1AttitudeConverter_1_1SetHeadingException__inherit__graph.png differ diff --git a/structmrs__lib_1_1ImagePubliserData-members.html b/structmrs__lib_1_1ImagePubliserData-members.html new file mode 100644 index 00000000..8640313a --- /dev/null +++ b/structmrs__lib_1_1ImagePubliserData-members.html @@ -0,0 +1,109 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::ImagePubliserData Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::ImagePubliserData, including all inherited members.

    + + + + + + +
    ImagePubliserData(const image_transport::Publisher &publisher, const std::string &topic_name, const ros::Time &last_hit) (defined in mrs_lib::ImagePubliserData)mrs_lib::ImagePubliserDatainline
    last_hit (defined in mrs_lib::ImagePubliserData)mrs_lib::ImagePubliserData
    pub_mutex (defined in mrs_lib::ImagePubliserData)mrs_lib::ImagePubliserData
    publisher (defined in mrs_lib::ImagePubliserData)mrs_lib::ImagePubliserData
    topic_name (defined in mrs_lib::ImagePubliserData)mrs_lib::ImagePubliserData
    +
    + + + + diff --git a/structmrs__lib_1_1ImagePubliserData.html b/structmrs__lib_1_1ImagePubliserData.html new file mode 100644 index 00000000..08d06485 --- /dev/null +++ b/structmrs__lib_1_1ImagePubliserData.html @@ -0,0 +1,131 @@ + + + + + + + +mrs_lib: mrs_lib::ImagePubliserData Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::ImagePubliserData Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    ImagePubliserData (const image_transport::Publisher &publisher, const std::string &topic_name, const ros::Time &last_hit)
     
    + + + + + + + + + +

    +Public Attributes

    +image_transport::Publisher publisher
     
    +std::string topic_name
     
    +std::mutex pub_mutex
     
    +ros::Time last_hit
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1ImagePubliserData.js b/structmrs__lib_1_1ImagePubliserData.js new file mode 100644 index 00000000..fa2e891e --- /dev/null +++ b/structmrs__lib_1_1ImagePubliserData.js @@ -0,0 +1,8 @@ +var structmrs__lib_1_1ImagePubliserData = +[ + [ "ImagePubliserData", "structmrs__lib_1_1ImagePubliserData.html#ac3eeffc6b177501732094a6454b74f23", null ], + [ "last_hit", "structmrs__lib_1_1ImagePubliserData.html#a3083f04a921a1bc3785fceb79ff59362", null ], + [ "pub_mutex", "structmrs__lib_1_1ImagePubliserData.html#a1295d317b06cd4b2c0e5948b1dba96ab", null ], + [ "publisher", "structmrs__lib_1_1ImagePubliserData.html#a504614afd37ac4e3684a24ff899b28fa", null ], + [ "topic_name", "structmrs__lib_1_1ImagePubliserData.html#a066839c78b40c3cbfadc81eeb8877ad7", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1Intersection-members.html b/structmrs__lib_1_1Intersection-members.html new file mode 100644 index 00000000..5804072f --- /dev/null +++ b/structmrs__lib_1_1Intersection-members.html @@ -0,0 +1,108 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::Intersection Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::Intersection, including all inherited members.

    + + + + + +
    intersect (defined in mrs_lib::Intersection)mrs_lib::Intersection
    Intersection(bool intersect, bool parallel=false, Eigen::RowVector2d point=Eigen::RowVector2d{}) (defined in mrs_lib::Intersection)mrs_lib::Intersectionexplicit
    parallel (defined in mrs_lib::Intersection)mrs_lib::Intersection
    point (defined in mrs_lib::Intersection)mrs_lib::Intersection
    +
    + + + + diff --git a/structmrs__lib_1_1Intersection.html b/structmrs__lib_1_1Intersection.html new file mode 100644 index 00000000..0889bcdc --- /dev/null +++ b/structmrs__lib_1_1Intersection.html @@ -0,0 +1,129 @@ + + + + + + + +mrs_lib: mrs_lib::Intersection Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::Intersection Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    Intersection (bool intersect, bool parallel=false, Eigen::RowVector2d point=Eigen::RowVector2d{})
     
    + + + + + + + +

    +Public Attributes

    +Eigen::RowVector2d point
     
    +bool parallel
     
    +bool intersect
     
    +
    The documentation for this struct was generated from the following files:
      +
    • include/mrs_lib/safety_zone/line_operations.h
    • +
    • src/safety_zone/line_operations.cpp
    • +
    +
    +
    + + + + diff --git a/structmrs__lib_1_1Intersection.js b/structmrs__lib_1_1Intersection.js new file mode 100644 index 00000000..b26739e2 --- /dev/null +++ b/structmrs__lib_1_1Intersection.js @@ -0,0 +1,7 @@ +var structmrs__lib_1_1Intersection = +[ + [ "Intersection", "structmrs__lib_1_1Intersection.html#a2a6b162130041bd6b9bfe1bb10f8dd12", null ], + [ "intersect", "structmrs__lib_1_1Intersection.html#a999a121be8f56b8f808ad9478d9ff5c6", null ], + [ "parallel", "structmrs__lib_1_1Intersection.html#a8e115e749f0c893356ffb09967832e3f", null ], + [ "point", "structmrs__lib_1_1Intersection.html#ae9426aa1099955e326ef8e65c4b5edc7", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1JLKF_1_1inverse__exception-members.html b/structmrs__lib_1_1JLKF_1_1inverse__exception-members.html new file mode 100644 index 00000000..c3c3f9e2 --- /dev/null +++ b/structmrs__lib_1_1JLKF_1_1inverse__exception-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >::inverse_exception Member List
    +
    + +
    + + + + diff --git a/structmrs__lib_1_1JLKF_1_1inverse__exception.html b/structmrs__lib_1_1JLKF_1_1inverse__exception.html new file mode 100644 index 00000000..71876bc9 --- /dev/null +++ b/structmrs__lib_1_1JLKF_1_1inverse__exception.html @@ -0,0 +1,185 @@ + + + + + + + +mrs_lib: mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >::inverse_exception Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >::inverse_exception Struct Reference
    +
    +
    + +

    This exception is thrown when taking the inverse of a matrix fails. + More...

    + +

    #include <jlkf.h>

    +
    + + Inheritance diagram for mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >::inverse_exception:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >::inverse_exception:
    +
    +
    + + + + + + +

    +Public Member Functions

    const char * what () const throw ()
     Returns the error message, describing what caused the exception. More...
     
    +

    Detailed Description

    +

    template<int n_states, int n_inputs, int n_measurements, int n_biases>
    +struct mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >::inverse_exception

    + +

    This exception is thrown when taking the inverse of a matrix fails.

    +

    You should catch this exception in your code and act accordingly if it appears (e.g. reset the state and covariance or modify the measurement/process noise parameters).

    +

    Member Function Documentation

    + +

    ◆ what()

    + +
    +
    +
    +template<int n_states, int n_inputs, int n_measurements, int n_biases>
    + + + + + +
    + + + + + + + + + + + + + +
    const char* mrs_lib::JLKF< n_states, n_inputs, n_measurements, n_biases >::inverse_exception::what () const
    throw (
    )
    +
    +inline
    +
    + +

    Returns the error message, describing what caused the exception.

    +
    Returns
    The error message, describing what caused the exception.
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1JLKF_1_1inverse__exception.js b/structmrs__lib_1_1JLKF_1_1inverse__exception.js new file mode 100644 index 00000000..1baa48a6 --- /dev/null +++ b/structmrs__lib_1_1JLKF_1_1inverse__exception.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1JLKF_1_1inverse__exception = +[ + [ "what", "structmrs__lib_1_1JLKF_1_1inverse__exception.html#a1f02bea6207ec02864a693067bcd499f", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1JLKF_1_1inverse__exception__coll__graph.map b/structmrs__lib_1_1JLKF_1_1inverse__exception__coll__graph.map new file mode 100644 index 00000000..3a0c65a2 --- /dev/null +++ b/structmrs__lib_1_1JLKF_1_1inverse__exception__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1JLKF_1_1inverse__exception__coll__graph.md5 b/structmrs__lib_1_1JLKF_1_1inverse__exception__coll__graph.md5 new file mode 100644 index 00000000..1a0a949e --- /dev/null +++ b/structmrs__lib_1_1JLKF_1_1inverse__exception__coll__graph.md5 @@ -0,0 +1 @@ +2b27b7fdeed4e686073a4fe14091d71f \ No newline at end of file diff --git a/structmrs__lib_1_1JLKF_1_1inverse__exception__coll__graph.png b/structmrs__lib_1_1JLKF_1_1inverse__exception__coll__graph.png new file mode 100644 index 00000000..4ca84afd Binary files /dev/null and b/structmrs__lib_1_1JLKF_1_1inverse__exception__coll__graph.png differ diff --git a/structmrs__lib_1_1JLKF_1_1inverse__exception__inherit__graph.map b/structmrs__lib_1_1JLKF_1_1inverse__exception__inherit__graph.map new file mode 100644 index 00000000..3a0c65a2 --- /dev/null +++ b/structmrs__lib_1_1JLKF_1_1inverse__exception__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1JLKF_1_1inverse__exception__inherit__graph.md5 b/structmrs__lib_1_1JLKF_1_1inverse__exception__inherit__graph.md5 new file mode 100644 index 00000000..1a0a949e --- /dev/null +++ b/structmrs__lib_1_1JLKF_1_1inverse__exception__inherit__graph.md5 @@ -0,0 +1 @@ +2b27b7fdeed4e686073a4fe14091d71f \ No newline at end of file diff --git a/structmrs__lib_1_1JLKF_1_1inverse__exception__inherit__graph.png b/structmrs__lib_1_1JLKF_1_1inverse__exception__inherit__graph.png new file mode 100644 index 00000000..4ca84afd Binary files /dev/null and b/structmrs__lib_1_1JLKF_1_1inverse__exception__inherit__graph.png differ diff --git a/structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t-members.html b/structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t-members.html new file mode 100644 index 00000000..c6bdcf7d --- /dev/null +++ b/structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t-members.html @@ -0,0 +1,110 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + + + + + + diff --git a/structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html b/structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html new file mode 100644 index 00000000..70f846d3 --- /dev/null +++ b/structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html @@ -0,0 +1,146 @@ + + + + + + + +mrs_lib: mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >::statecov_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >::statecov_t Struct Reference
    +
    +
    + +

    Helper struct for passing around the state and its covariance in one variable. + More...

    + +

    #include <kalman_filter_aloamgarm.h>

    + + + + +

    +Public Member Functions

    +statecov_toperator= (statecov_t other)
     
    + + + + + + + + + + + + + +

    +Public Attributes

    +x_t x
     State vector.
     
    +P_t P
     State covariance matrix.
     
    +std::shared_ptr< boost::circular_buffer< double > > nis_buffer = nullptr
     
    +ros::Time stamp = ros::Time(0)
     
    +bool measurement_jumped = false
     
    +

    Detailed Description

    +

    template<int n_states, int n_inputs, int n_measurements>
    +struct mrs_lib::KalmanFilterAloamGarm< n_states, n_inputs, n_measurements >::statecov_t

    + +

    Helper struct for passing around the state and its covariance in one variable.

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.js b/structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.js new file mode 100644 index 00000000..0a043c9d --- /dev/null +++ b/structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.js @@ -0,0 +1,9 @@ +var structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t = +[ + [ "operator=", "structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html#a9f859ca07487925676bfb3015501b113", null ], + [ "measurement_jumped", "structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html#a3217639b2d6b87bab7f64fd3a609a068", null ], + [ "nis_buffer", "structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html#a5f1075016b7dd24e558d9e8286e65232", null ], + [ "P", "structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html#a876ae3c9d4dafac63ddd0723fe351874", null ], + [ "stamp", "structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html#a20ce953ee53eb7d730fcd5f7d4c8be90", null ], + [ "x", "structmrs__lib_1_1KalmanFilterAloamGarm_1_1statecov__t.html#a78cb90ec0a35a04f7f4abe69847979ec", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1KalmanFilter_1_1statecov__t-members.html b/structmrs__lib_1_1KalmanFilter_1_1statecov__t-members.html new file mode 100644 index 00000000..b21b9d4a --- /dev/null +++ b/structmrs__lib_1_1KalmanFilter_1_1statecov__t-members.html @@ -0,0 +1,107 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >::statecov_t Member List
    +
    + +
    + + + + diff --git a/structmrs__lib_1_1KalmanFilter_1_1statecov__t.html b/structmrs__lib_1_1KalmanFilter_1_1statecov__t.html new file mode 100644 index 00000000..9eda374b --- /dev/null +++ b/structmrs__lib_1_1KalmanFilter_1_1statecov__t.html @@ -0,0 +1,134 @@ + + + + + + + +mrs_lib: mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >::statecov_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >::statecov_t Struct Reference
    +
    +
    + +

    Helper struct for passing around the state and its covariance in one variable. + More...

    + +

    #include <kalman_filter.h>

    + + + + + + + + + + + +

    +Public Attributes

    +x_t x
     State vector.
     
    +P_t P
     State covariance matrix.
     
    +ros::Time stamp = ros::Time(0)
     ROS time stamp.
     
    +

    Detailed Description

    +

    template<int n_states, int n_inputs, int n_measurements>
    +struct mrs_lib::KalmanFilter< n_states, n_inputs, n_measurements >::statecov_t

    + +

    Helper struct for passing around the state and its covariance in one variable.

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1KalmanFilter_1_1statecov__t.js b/structmrs__lib_1_1KalmanFilter_1_1statecov__t.js new file mode 100644 index 00000000..d978962f --- /dev/null +++ b/structmrs__lib_1_1KalmanFilter_1_1statecov__t.js @@ -0,0 +1,6 @@ +var structmrs__lib_1_1KalmanFilter_1_1statecov__t = +[ + [ "P", "structmrs__lib_1_1KalmanFilter_1_1statecov__t.html#aa2747c6fd07bc3a4d9b2c153e38c11ff", null ], + [ "stamp", "structmrs__lib_1_1KalmanFilter_1_1statecov__t.html#ab576efb895b5def90a7aab738c610f83", null ], + [ "x", "structmrs__lib_1_1KalmanFilter_1_1statecov__t.html#a725b61d95901486bbc17cf79e45bd5e4", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1LKF_1_1inverse__exception-members.html b/structmrs__lib_1_1LKF_1_1inverse__exception-members.html new file mode 100644 index 00000000..beded87b --- /dev/null +++ b/structmrs__lib_1_1LKF_1_1inverse__exception-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::LKF< n_states, n_inputs, n_measurements >::inverse_exception Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::LKF< n_states, n_inputs, n_measurements >::inverse_exception, including all inherited members.

    + + +
    what() constmrs_lib::LKF< n_states, n_inputs, n_measurements >::inverse_exceptioninline
    +
    + + + + diff --git a/structmrs__lib_1_1LKF_1_1inverse__exception.html b/structmrs__lib_1_1LKF_1_1inverse__exception.html new file mode 100644 index 00000000..a0659c27 --- /dev/null +++ b/structmrs__lib_1_1LKF_1_1inverse__exception.html @@ -0,0 +1,185 @@ + + + + + + + +mrs_lib: mrs_lib::LKF< n_states, n_inputs, n_measurements >::inverse_exception Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::LKF< n_states, n_inputs, n_measurements >::inverse_exception Struct Reference
    +
    +
    + +

    This exception is thrown when taking the inverse of a matrix fails. + More...

    + +

    #include <lkf.h>

    +
    + + Inheritance diagram for mrs_lib::LKF< n_states, n_inputs, n_measurements >::inverse_exception:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::LKF< n_states, n_inputs, n_measurements >::inverse_exception:
    +
    +
    + + + + + + +

    +Public Member Functions

    const char * what () const throw ()
     Returns the error message, describing what caused the exception. More...
     
    +

    Detailed Description

    +

    template<int n_states, int n_inputs, int n_measurements>
    +struct mrs_lib::LKF< n_states, n_inputs, n_measurements >::inverse_exception

    + +

    This exception is thrown when taking the inverse of a matrix fails.

    +

    You should catch this exception in your code and act accordingly if it appears (e.g. reset the state and covariance or modify the measurement/process noise parameters).

    +

    Member Function Documentation

    + +

    ◆ what()

    + +
    +
    +
    +template<int n_states, int n_inputs, int n_measurements>
    + + + + + +
    + + + + + + + + + + + + + +
    const char* mrs_lib::LKF< n_states, n_inputs, n_measurements >::inverse_exception::what () const
    throw (
    )
    +
    +inline
    +
    + +

    Returns the error message, describing what caused the exception.

    +
    Returns
    The error message, describing what caused the exception.
    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • include/mrs_lib/lkf.h
    • +
    +
    +
    + + + + diff --git a/structmrs__lib_1_1LKF_1_1inverse__exception.js b/structmrs__lib_1_1LKF_1_1inverse__exception.js new file mode 100644 index 00000000..f4efdaf6 --- /dev/null +++ b/structmrs__lib_1_1LKF_1_1inverse__exception.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1LKF_1_1inverse__exception = +[ + [ "what", "structmrs__lib_1_1LKF_1_1inverse__exception.html#a44d325f6cd975003b995d33bd78948ac", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1LKF_1_1inverse__exception__coll__graph.map b/structmrs__lib_1_1LKF_1_1inverse__exception__coll__graph.map new file mode 100644 index 00000000..a6801f04 --- /dev/null +++ b/structmrs__lib_1_1LKF_1_1inverse__exception__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1LKF_1_1inverse__exception__coll__graph.md5 b/structmrs__lib_1_1LKF_1_1inverse__exception__coll__graph.md5 new file mode 100644 index 00000000..eb8b663f --- /dev/null +++ b/structmrs__lib_1_1LKF_1_1inverse__exception__coll__graph.md5 @@ -0,0 +1 @@ +bf1002a01e68d538b0e505425328c540 \ No newline at end of file diff --git a/structmrs__lib_1_1LKF_1_1inverse__exception__coll__graph.png b/structmrs__lib_1_1LKF_1_1inverse__exception__coll__graph.png new file mode 100644 index 00000000..a8e51f42 Binary files /dev/null and b/structmrs__lib_1_1LKF_1_1inverse__exception__coll__graph.png differ diff --git a/structmrs__lib_1_1LKF_1_1inverse__exception__inherit__graph.map b/structmrs__lib_1_1LKF_1_1inverse__exception__inherit__graph.map new file mode 100644 index 00000000..a6801f04 --- /dev/null +++ b/structmrs__lib_1_1LKF_1_1inverse__exception__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1LKF_1_1inverse__exception__inherit__graph.md5 b/structmrs__lib_1_1LKF_1_1inverse__exception__inherit__graph.md5 new file mode 100644 index 00000000..eb8b663f --- /dev/null +++ b/structmrs__lib_1_1LKF_1_1inverse__exception__inherit__graph.md5 @@ -0,0 +1 @@ +bf1002a01e68d538b0e505425328c540 \ No newline at end of file diff --git a/structmrs__lib_1_1LKF_1_1inverse__exception__inherit__graph.png b/structmrs__lib_1_1LKF_1_1inverse__exception__inherit__graph.png new file mode 100644 index 00000000..a8e51f42 Binary files /dev/null and b/structmrs__lib_1_1LKF_1_1inverse__exception__inherit__graph.png differ diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongHeight-members.html b/structmrs__lib_1_1PointObstacle_1_1WrongHeight-members.html new file mode 100644 index 00000000..39be8519 --- /dev/null +++ b/structmrs__lib_1_1PointObstacle_1_1WrongHeight-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::PointObstacle::WrongHeight Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::PointObstacle::WrongHeight, including all inherited members.

    + + +
    what() const (defined in mrs_lib::PointObstacle::WrongHeight)mrs_lib::PointObstacle::WrongHeightinline
    +
    + + + + diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongHeight.html b/structmrs__lib_1_1PointObstacle_1_1WrongHeight.html new file mode 100644 index 00000000..ec554bc9 --- /dev/null +++ b/structmrs__lib_1_1PointObstacle_1_1WrongHeight.html @@ -0,0 +1,137 @@ + + + + + + + +mrs_lib: mrs_lib::PointObstacle::WrongHeight Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::PointObstacle::WrongHeight Struct Reference
    +
    +
    +
    + + Inheritance diagram for mrs_lib::PointObstacle::WrongHeight:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::PointObstacle::WrongHeight:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongHeight.js b/structmrs__lib_1_1PointObstacle_1_1WrongHeight.js new file mode 100644 index 00000000..156f8fa9 --- /dev/null +++ b/structmrs__lib_1_1PointObstacle_1_1WrongHeight.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1PointObstacle_1_1WrongHeight = +[ + [ "what", "structmrs__lib_1_1PointObstacle_1_1WrongHeight.html#a99daad37fcc8d6b45804b8a29a8c6232", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongHeight__coll__graph.map b/structmrs__lib_1_1PointObstacle_1_1WrongHeight__coll__graph.map new file mode 100644 index 00000000..6c8ce8c8 --- /dev/null +++ b/structmrs__lib_1_1PointObstacle_1_1WrongHeight__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongHeight__coll__graph.md5 b/structmrs__lib_1_1PointObstacle_1_1WrongHeight__coll__graph.md5 new file mode 100644 index 00000000..ac768a75 --- /dev/null +++ b/structmrs__lib_1_1PointObstacle_1_1WrongHeight__coll__graph.md5 @@ -0,0 +1 @@ +1f6a1fb66844ba0660006579670c642c \ No newline at end of file diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongHeight__coll__graph.png b/structmrs__lib_1_1PointObstacle_1_1WrongHeight__coll__graph.png new file mode 100644 index 00000000..d6b239a5 Binary files /dev/null and b/structmrs__lib_1_1PointObstacle_1_1WrongHeight__coll__graph.png differ diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongHeight__inherit__graph.map b/structmrs__lib_1_1PointObstacle_1_1WrongHeight__inherit__graph.map new file mode 100644 index 00000000..6c8ce8c8 --- /dev/null +++ b/structmrs__lib_1_1PointObstacle_1_1WrongHeight__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongHeight__inherit__graph.md5 b/structmrs__lib_1_1PointObstacle_1_1WrongHeight__inherit__graph.md5 new file mode 100644 index 00000000..ac768a75 --- /dev/null +++ b/structmrs__lib_1_1PointObstacle_1_1WrongHeight__inherit__graph.md5 @@ -0,0 +1 @@ +1f6a1fb66844ba0660006579670c642c \ No newline at end of file diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongHeight__inherit__graph.png b/structmrs__lib_1_1PointObstacle_1_1WrongHeight__inherit__graph.png new file mode 100644 index 00000000..d6b239a5 Binary files /dev/null and b/structmrs__lib_1_1PointObstacle_1_1WrongHeight__inherit__graph.png differ diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongRadius-members.html b/structmrs__lib_1_1PointObstacle_1_1WrongRadius-members.html new file mode 100644 index 00000000..8d1b3a62 --- /dev/null +++ b/structmrs__lib_1_1PointObstacle_1_1WrongRadius-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::PointObstacle::WrongRadius Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::PointObstacle::WrongRadius, including all inherited members.

    + + +
    what() const (defined in mrs_lib::PointObstacle::WrongRadius)mrs_lib::PointObstacle::WrongRadiusinline
    +
    + + + + diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongRadius.html b/structmrs__lib_1_1PointObstacle_1_1WrongRadius.html new file mode 100644 index 00000000..52bdf815 --- /dev/null +++ b/structmrs__lib_1_1PointObstacle_1_1WrongRadius.html @@ -0,0 +1,137 @@ + + + + + + + +mrs_lib: mrs_lib::PointObstacle::WrongRadius Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::PointObstacle::WrongRadius Struct Reference
    +
    +
    +
    + + Inheritance diagram for mrs_lib::PointObstacle::WrongRadius:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::PointObstacle::WrongRadius:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongRadius.js b/structmrs__lib_1_1PointObstacle_1_1WrongRadius.js new file mode 100644 index 00000000..f7941ab1 --- /dev/null +++ b/structmrs__lib_1_1PointObstacle_1_1WrongRadius.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1PointObstacle_1_1WrongRadius = +[ + [ "what", "structmrs__lib_1_1PointObstacle_1_1WrongRadius.html#ad804f15b21c8eafbcca47a4e5264c64c", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongRadius__coll__graph.map b/structmrs__lib_1_1PointObstacle_1_1WrongRadius__coll__graph.map new file mode 100644 index 00000000..1bed4874 --- /dev/null +++ b/structmrs__lib_1_1PointObstacle_1_1WrongRadius__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongRadius__coll__graph.md5 b/structmrs__lib_1_1PointObstacle_1_1WrongRadius__coll__graph.md5 new file mode 100644 index 00000000..c59e6205 --- /dev/null +++ b/structmrs__lib_1_1PointObstacle_1_1WrongRadius__coll__graph.md5 @@ -0,0 +1 @@ +80f01f82b29101f2fab6fa02f78882bb \ No newline at end of file diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongRadius__coll__graph.png b/structmrs__lib_1_1PointObstacle_1_1WrongRadius__coll__graph.png new file mode 100644 index 00000000..8d310fa6 Binary files /dev/null and b/structmrs__lib_1_1PointObstacle_1_1WrongRadius__coll__graph.png differ diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongRadius__inherit__graph.map b/structmrs__lib_1_1PointObstacle_1_1WrongRadius__inherit__graph.map new file mode 100644 index 00000000..1bed4874 --- /dev/null +++ b/structmrs__lib_1_1PointObstacle_1_1WrongRadius__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongRadius__inherit__graph.md5 b/structmrs__lib_1_1PointObstacle_1_1WrongRadius__inherit__graph.md5 new file mode 100644 index 00000000..c59e6205 --- /dev/null +++ b/structmrs__lib_1_1PointObstacle_1_1WrongRadius__inherit__graph.md5 @@ -0,0 +1 @@ +80f01f82b29101f2fab6fa02f78882bb \ No newline at end of file diff --git a/structmrs__lib_1_1PointObstacle_1_1WrongRadius__inherit__graph.png b/structmrs__lib_1_1PointObstacle_1_1WrongRadius__inherit__graph.png new file mode 100644 index 00000000..8d310fa6 Binary files /dev/null and b/structmrs__lib_1_1PointObstacle_1_1WrongRadius__inherit__graph.png differ diff --git a/structmrs__lib_1_1Polygon_1_1ExtraVertices-members.html b/structmrs__lib_1_1Polygon_1_1ExtraVertices-members.html new file mode 100644 index 00000000..60ec4410 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1ExtraVertices-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::Polygon::ExtraVertices Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::Polygon::ExtraVertices, including all inherited members.

    + + +
    what() const (defined in mrs_lib::Polygon::ExtraVertices)mrs_lib::Polygon::ExtraVerticesinline
    +
    + + + + diff --git a/structmrs__lib_1_1Polygon_1_1ExtraVertices.html b/structmrs__lib_1_1Polygon_1_1ExtraVertices.html new file mode 100644 index 00000000..7540dc94 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1ExtraVertices.html @@ -0,0 +1,137 @@ + + + + + + + +mrs_lib: mrs_lib::Polygon::ExtraVertices Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::Polygon::ExtraVertices Struct Reference
    +
    +
    +
    + + Inheritance diagram for mrs_lib::Polygon::ExtraVertices:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::Polygon::ExtraVertices:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1Polygon_1_1ExtraVertices.js b/structmrs__lib_1_1Polygon_1_1ExtraVertices.js new file mode 100644 index 00000000..b003e526 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1ExtraVertices.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1Polygon_1_1ExtraVertices = +[ + [ "what", "structmrs__lib_1_1Polygon_1_1ExtraVertices.html#aa6cfe154bdf65be75421c67ea9e98a42", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1Polygon_1_1ExtraVertices__coll__graph.map b/structmrs__lib_1_1Polygon_1_1ExtraVertices__coll__graph.map new file mode 100644 index 00000000..9d97e3bf --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1ExtraVertices__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1Polygon_1_1ExtraVertices__coll__graph.md5 b/structmrs__lib_1_1Polygon_1_1ExtraVertices__coll__graph.md5 new file mode 100644 index 00000000..acd456f2 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1ExtraVertices__coll__graph.md5 @@ -0,0 +1 @@ +ba2b0356399dd8914a3b853bc01f612e \ No newline at end of file diff --git a/structmrs__lib_1_1Polygon_1_1ExtraVertices__coll__graph.png b/structmrs__lib_1_1Polygon_1_1ExtraVertices__coll__graph.png new file mode 100644 index 00000000..4d514540 Binary files /dev/null and b/structmrs__lib_1_1Polygon_1_1ExtraVertices__coll__graph.png differ diff --git a/structmrs__lib_1_1Polygon_1_1ExtraVertices__inherit__graph.map b/structmrs__lib_1_1Polygon_1_1ExtraVertices__inherit__graph.map new file mode 100644 index 00000000..9d97e3bf --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1ExtraVertices__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1Polygon_1_1ExtraVertices__inherit__graph.md5 b/structmrs__lib_1_1Polygon_1_1ExtraVertices__inherit__graph.md5 new file mode 100644 index 00000000..acd456f2 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1ExtraVertices__inherit__graph.md5 @@ -0,0 +1 @@ +ba2b0356399dd8914a3b853bc01f612e \ No newline at end of file diff --git a/structmrs__lib_1_1Polygon_1_1ExtraVertices__inherit__graph.png b/structmrs__lib_1_1Polygon_1_1ExtraVertices__inherit__graph.png new file mode 100644 index 00000000..4d514540 Binary files /dev/null and b/structmrs__lib_1_1Polygon_1_1ExtraVertices__inherit__graph.png differ diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns-members.html b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns-members.html new file mode 100644 index 00000000..50caf950 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::Polygon::WrongNumberOfColumns Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::Polygon::WrongNumberOfColumns, including all inherited members.

    + + +
    what() const (defined in mrs_lib::Polygon::WrongNumberOfColumns)mrs_lib::Polygon::WrongNumberOfColumnsinline
    +
    + + + + diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns.html b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns.html new file mode 100644 index 00000000..3f3eff19 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns.html @@ -0,0 +1,137 @@ + + + + + + + +mrs_lib: mrs_lib::Polygon::WrongNumberOfColumns Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::Polygon::WrongNumberOfColumns Struct Reference
    +
    +
    +
    + + Inheritance diagram for mrs_lib::Polygon::WrongNumberOfColumns:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::Polygon::WrongNumberOfColumns:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns.js b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns.js new file mode 100644 index 00000000..07923459 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns = +[ + [ "what", "structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns.html#a0d96a9a964ec4528c4a8614e5e79419c", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__coll__graph.map b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__coll__graph.map new file mode 100644 index 00000000..0e9ea29b --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__coll__graph.md5 b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__coll__graph.md5 new file mode 100644 index 00000000..ebbce641 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__coll__graph.md5 @@ -0,0 +1 @@ +83d7307c3ed783faf6fc024e043781ae \ No newline at end of file diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__coll__graph.png b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__coll__graph.png new file mode 100644 index 00000000..1547ebc8 Binary files /dev/null and b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__coll__graph.png differ diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__inherit__graph.map b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__inherit__graph.map new file mode 100644 index 00000000..0e9ea29b --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__inherit__graph.md5 b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__inherit__graph.md5 new file mode 100644 index 00000000..ebbce641 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__inherit__graph.md5 @@ -0,0 +1 @@ +83d7307c3ed783faf6fc024e043781ae \ No newline at end of file diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__inherit__graph.png b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__inherit__graph.png new file mode 100644 index 00000000..1547ebc8 Binary files /dev/null and b/structmrs__lib_1_1Polygon_1_1WrongNumberOfColumns__inherit__graph.png differ diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices-members.html b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices-members.html new file mode 100644 index 00000000..d83a3f17 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::Polygon::WrongNumberOfVertices Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::Polygon::WrongNumberOfVertices, including all inherited members.

    + + +
    what() const (defined in mrs_lib::Polygon::WrongNumberOfVertices)mrs_lib::Polygon::WrongNumberOfVerticesinline
    +
    + + + + diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices.html b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices.html new file mode 100644 index 00000000..e1ed72ef --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices.html @@ -0,0 +1,137 @@ + + + + + + + +mrs_lib: mrs_lib::Polygon::WrongNumberOfVertices Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::Polygon::WrongNumberOfVertices Struct Reference
    +
    +
    +
    + + Inheritance diagram for mrs_lib::Polygon::WrongNumberOfVertices:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::Polygon::WrongNumberOfVertices:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices.js b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices.js new file mode 100644 index 00000000..da409b54 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices = +[ + [ "what", "structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices.html#ab526669939611986e9e515293fe292cf", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__coll__graph.map b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__coll__graph.map new file mode 100644 index 00000000..8a9e7b11 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__coll__graph.md5 b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__coll__graph.md5 new file mode 100644 index 00000000..951e3807 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__coll__graph.md5 @@ -0,0 +1 @@ +b1265b44259b4081bedb9d54634023fe \ No newline at end of file diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__coll__graph.png b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__coll__graph.png new file mode 100644 index 00000000..d0afc894 Binary files /dev/null and b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__coll__graph.png differ diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__inherit__graph.map b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__inherit__graph.map new file mode 100644 index 00000000..8a9e7b11 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__inherit__graph.md5 b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__inherit__graph.md5 new file mode 100644 index 00000000..951e3807 --- /dev/null +++ b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__inherit__graph.md5 @@ -0,0 +1 @@ +b1265b44259b4081bedb9d54634023fe \ No newline at end of file diff --git a/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__inherit__graph.png b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__inherit__graph.png new file mode 100644 index 00000000..d0afc894 Binary files /dev/null and b/structmrs__lib_1_1Polygon_1_1WrongNumberOfVertices__inherit__graph.png differ diff --git a/structmrs__lib_1_1SafetyZone_1_1BorderError-members.html b/structmrs__lib_1_1SafetyZone_1_1BorderError-members.html new file mode 100644 index 00000000..64bd2e1e --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1BorderError-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::SafetyZone::BorderError Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::SafetyZone::BorderError, including all inherited members.

    + + +
    what() const (defined in mrs_lib::SafetyZone::BorderError)mrs_lib::SafetyZone::BorderErrorinline
    +
    + + + + diff --git a/structmrs__lib_1_1SafetyZone_1_1BorderError.html b/structmrs__lib_1_1SafetyZone_1_1BorderError.html new file mode 100644 index 00000000..8ff3c9c1 --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1BorderError.html @@ -0,0 +1,137 @@ + + + + + + + +mrs_lib: mrs_lib::SafetyZone::BorderError Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::SafetyZone::BorderError Struct Reference
    +
    +
    +
    + + Inheritance diagram for mrs_lib::SafetyZone::BorderError:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::SafetyZone::BorderError:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1SafetyZone_1_1BorderError.js b/structmrs__lib_1_1SafetyZone_1_1BorderError.js new file mode 100644 index 00000000..1e9342b3 --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1BorderError.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1SafetyZone_1_1BorderError = +[ + [ "what", "structmrs__lib_1_1SafetyZone_1_1BorderError.html#ae29f05e234116edb0c1bc4af26466144", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1SafetyZone_1_1BorderError__coll__graph.map b/structmrs__lib_1_1SafetyZone_1_1BorderError__coll__graph.map new file mode 100644 index 00000000..53a283d6 --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1BorderError__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1SafetyZone_1_1BorderError__coll__graph.md5 b/structmrs__lib_1_1SafetyZone_1_1BorderError__coll__graph.md5 new file mode 100644 index 00000000..49ad9e46 --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1BorderError__coll__graph.md5 @@ -0,0 +1 @@ +701d5c80a0512af9b062ab70d3744008 \ No newline at end of file diff --git a/structmrs__lib_1_1SafetyZone_1_1BorderError__coll__graph.png b/structmrs__lib_1_1SafetyZone_1_1BorderError__coll__graph.png new file mode 100644 index 00000000..fdc0dd26 Binary files /dev/null and b/structmrs__lib_1_1SafetyZone_1_1BorderError__coll__graph.png differ diff --git a/structmrs__lib_1_1SafetyZone_1_1BorderError__inherit__graph.map b/structmrs__lib_1_1SafetyZone_1_1BorderError__inherit__graph.map new file mode 100644 index 00000000..53a283d6 --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1BorderError__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1SafetyZone_1_1BorderError__inherit__graph.md5 b/structmrs__lib_1_1SafetyZone_1_1BorderError__inherit__graph.md5 new file mode 100644 index 00000000..49ad9e46 --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1BorderError__inherit__graph.md5 @@ -0,0 +1 @@ +701d5c80a0512af9b062ab70d3744008 \ No newline at end of file diff --git a/structmrs__lib_1_1SafetyZone_1_1BorderError__inherit__graph.png b/structmrs__lib_1_1SafetyZone_1_1BorderError__inherit__graph.png new file mode 100644 index 00000000..fdc0dd26 Binary files /dev/null and b/structmrs__lib_1_1SafetyZone_1_1BorderError__inherit__graph.png differ diff --git a/structmrs__lib_1_1SafetyZone_1_1PointObstacleError-members.html b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError-members.html new file mode 100644 index 00000000..4a8ce4f2 --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::SafetyZone::PointObstacleError Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::SafetyZone::PointObstacleError, including all inherited members.

    + + +
    what() const (defined in mrs_lib::SafetyZone::PointObstacleError)mrs_lib::SafetyZone::PointObstacleErrorinline
    +
    + + + + diff --git a/structmrs__lib_1_1SafetyZone_1_1PointObstacleError.html b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError.html new file mode 100644 index 00000000..d14dd091 --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError.html @@ -0,0 +1,137 @@ + + + + + + + +mrs_lib: mrs_lib::SafetyZone::PointObstacleError Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::SafetyZone::PointObstacleError Struct Reference
    +
    +
    +
    + + Inheritance diagram for mrs_lib::SafetyZone::PointObstacleError:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::SafetyZone::PointObstacleError:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1SafetyZone_1_1PointObstacleError.js b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError.js new file mode 100644 index 00000000..daed510a --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1SafetyZone_1_1PointObstacleError = +[ + [ "what", "structmrs__lib_1_1SafetyZone_1_1PointObstacleError.html#ade653ffb01063b24ccc2a5dfdffabad2", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__coll__graph.map b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__coll__graph.map new file mode 100644 index 00000000..0f07c87c --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__coll__graph.md5 b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__coll__graph.md5 new file mode 100644 index 00000000..437deaaf --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__coll__graph.md5 @@ -0,0 +1 @@ +8604ba0c8e4c351120a46fdd9517d061 \ No newline at end of file diff --git a/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__coll__graph.png b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__coll__graph.png new file mode 100644 index 00000000..1f639b39 Binary files /dev/null and b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__coll__graph.png differ diff --git a/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__inherit__graph.map b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__inherit__graph.map new file mode 100644 index 00000000..0f07c87c --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__inherit__graph.md5 b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__inherit__graph.md5 new file mode 100644 index 00000000..437deaaf --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__inherit__graph.md5 @@ -0,0 +1 @@ +8604ba0c8e4c351120a46fdd9517d061 \ No newline at end of file diff --git a/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__inherit__graph.png b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__inherit__graph.png new file mode 100644 index 00000000..1f639b39 Binary files /dev/null and b/structmrs__lib_1_1SafetyZone_1_1PointObstacleError__inherit__graph.png differ diff --git a/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError-members.html b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError-members.html new file mode 100644 index 00000000..0a93830b --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::SafetyZone::PolygonObstacleError Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::SafetyZone::PolygonObstacleError, including all inherited members.

    + + +
    what() const (defined in mrs_lib::SafetyZone::PolygonObstacleError)mrs_lib::SafetyZone::PolygonObstacleErrorinline
    +
    + + + + diff --git a/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError.html b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError.html new file mode 100644 index 00000000..f036dcf4 --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError.html @@ -0,0 +1,137 @@ + + + + + + + +mrs_lib: mrs_lib::SafetyZone::PolygonObstacleError Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::SafetyZone::PolygonObstacleError Struct Reference
    +
    +
    +
    + + Inheritance diagram for mrs_lib::SafetyZone::PolygonObstacleError:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::SafetyZone::PolygonObstacleError:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError.js b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError.js new file mode 100644 index 00000000..ec1b4eca --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError = +[ + [ "what", "structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError.html#a12bf6deb420bef7edbbead2e9856d737", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__coll__graph.map b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__coll__graph.map new file mode 100644 index 00000000..9846fb37 --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__coll__graph.md5 b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__coll__graph.md5 new file mode 100644 index 00000000..6994c9f4 --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__coll__graph.md5 @@ -0,0 +1 @@ +3fd32803f7f303fc9c91fd5c3e00a3be \ No newline at end of file diff --git a/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__coll__graph.png b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__coll__graph.png new file mode 100644 index 00000000..e11c7ef7 Binary files /dev/null and b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__coll__graph.png differ diff --git a/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__inherit__graph.map b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__inherit__graph.map new file mode 100644 index 00000000..9846fb37 --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__inherit__graph.md5 b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__inherit__graph.md5 new file mode 100644 index 00000000..6994c9f4 --- /dev/null +++ b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__inherit__graph.md5 @@ -0,0 +1 @@ +3fd32803f7f303fc9c91fd5c3e00a3be \ No newline at end of file diff --git a/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__inherit__graph.png b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__inherit__graph.png new file mode 100644 index 00000000..e11c7ef7 Binary files /dev/null and b/structmrs__lib_1_1SafetyZone_1_1PolygonObstacleError__inherit__graph.png differ diff --git a/structmrs__lib_1_1ScopeTimer_1_1time__point-members.html b/structmrs__lib_1_1ScopeTimer_1_1time__point-members.html new file mode 100644 index 00000000..40143250 --- /dev/null +++ b/structmrs__lib_1_1ScopeTimer_1_1time__point-members.html @@ -0,0 +1,110 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::ScopeTimer::time_point Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::ScopeTimer::time_point, including all inherited members.

    + + + + + + + +
    chrono_time (defined in mrs_lib::ScopeTimer::time_point)mrs_lib::ScopeTimer::time_point
    chrono_tp typedef (defined in mrs_lib::ScopeTimer::time_point)mrs_lib::ScopeTimer::time_point
    label (defined in mrs_lib::ScopeTimer::time_point)mrs_lib::ScopeTimer::time_point
    ros_time (defined in mrs_lib::ScopeTimer::time_point)mrs_lib::ScopeTimer::time_point
    time_point(const std::string &label) (defined in mrs_lib::ScopeTimer::time_point)mrs_lib::ScopeTimer::time_pointinline
    time_point(const std::string &label, const ros::Time &ros_time) (defined in mrs_lib::ScopeTimer::time_point)mrs_lib::ScopeTimer::time_pointinline
    +
    + + + + diff --git a/structmrs__lib_1_1ScopeTimer_1_1time__point.html b/structmrs__lib_1_1ScopeTimer_1_1time__point.html new file mode 100644 index 00000000..ebcfabfa --- /dev/null +++ b/structmrs__lib_1_1ScopeTimer_1_1time__point.html @@ -0,0 +1,138 @@ + + + + + + + +mrs_lib: mrs_lib::ScopeTimer::time_point Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::ScopeTimer::time_point Struct Reference
    +
    +
    + + + + +

    +Public Types

    +using chrono_tp = std::chrono::time_point< std::chrono::steady_clock >
     
    + + + + + +

    +Public Member Functions

    time_point (const std::string &label)
     
    time_point (const std::string &label, const ros::Time &ros_time)
     
    + + + + + + + +

    +Public Attributes

    +ros::Time ros_time
     
    +chrono_tp chrono_time
     
    +std::string label
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1ScopeTimer_1_1time__point.js b/structmrs__lib_1_1ScopeTimer_1_1time__point.js new file mode 100644 index 00000000..19184e02 --- /dev/null +++ b/structmrs__lib_1_1ScopeTimer_1_1time__point.js @@ -0,0 +1,9 @@ +var structmrs__lib_1_1ScopeTimer_1_1time__point = +[ + [ "chrono_tp", "structmrs__lib_1_1ScopeTimer_1_1time__point.html#aa5378259bc9f62441c73a2c88aa5c55d", null ], + [ "time_point", "structmrs__lib_1_1ScopeTimer_1_1time__point.html#a6b7346c9fd6bb61a26ce075eb40ed199", null ], + [ "time_point", "structmrs__lib_1_1ScopeTimer_1_1time__point.html#acf225035aff4e8fbd7fbf5e8fe4791fe", null ], + [ "chrono_time", "structmrs__lib_1_1ScopeTimer_1_1time__point.html#a2c0bfcad0dcda9f9f788d7b68193af3b", null ], + [ "label", "structmrs__lib_1_1ScopeTimer_1_1time__point.html#aebc889a16ac71272523ee3c58929b460", null ], + [ "ros_time", "structmrs__lib_1_1ScopeTimer_1_1time__point.html#a2c5a2b08de7bd6d21bad8f72454bbb1d", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1SubscribeHandlerOptions-members.html b/structmrs__lib_1_1SubscribeHandlerOptions-members.html new file mode 100644 index 00000000..7198f06a --- /dev/null +++ b/structmrs__lib_1_1SubscribeHandlerOptions-members.html @@ -0,0 +1,116 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + + + + + + diff --git a/structmrs__lib_1_1SubscribeHandlerOptions.html b/structmrs__lib_1_1SubscribeHandlerOptions.html new file mode 100644 index 00000000..a1c1a4fb --- /dev/null +++ b/structmrs__lib_1_1SubscribeHandlerOptions.html @@ -0,0 +1,169 @@ + + + + + + + +mrs_lib: mrs_lib::SubscribeHandlerOptions Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::SubscribeHandlerOptions Struct Reference
    +
    +
    + +

    A helper class to simplify setup of SubscribeHandler construction. This class is passed to the SubscribeHandler constructor and specifies its common options. + More...

    + +

    #include <subscribe_handler.h>

    + + + + +

    +Public Member Functions

    SubscribeHandlerOptions (const ros::NodeHandle &nh)
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +ros::NodeHandle nh
     The ROS NodeHandle to be used for subscription.
     
    +std::string node_name = {}
     Name of the ROS node, using this handle (used for messages printed to console).
     
    +std::string topic_name = {}
     Name of the ROS topic to be handled.
     
    +std::shared_ptr< mrs_lib::TimeoutManagertimeout_manager = nullptr
     Will be used for handling message timouts if necessary. If no manager is specified, it will be created with rate equal to half of no_message_timeout.
     
    +ros::Duration no_message_timeout = mrs_lib::no_timeout
     If no new message is received for this duration, the timeout_callback function will be called. If timeout_callback is empty, an error message will be printed to the console.
     
    +std::function< void(const std::string &topic_name, const ros::Time &last_msg)> timeout_callback = {}
     This function will be called if no new message is received for the no_message_timeout duration. If this variable is empty, an error message will be printed to the console.
     
    +bool threadsafe = true
     If true, all methods of the SubscribeHandler will be mutexed (using a recursive mutex) to avoid data races.
     
    +bool autostart = true
     If true, the SubscribeHandler will be started after construction. Otherwise it has to be started using the start() method.
     
    +uint32_t queue_size = 3
     This parameter is passed to the NodeHandle when subscribing to the topic.
     
    +ros::TransportHints transport_hints = ros::TransportHints()
     This parameter is passed to the NodeHandle when subscribing to the topic.
     
    +

    Detailed Description

    +

    A helper class to simplify setup of SubscribeHandler construction. This class is passed to the SubscribeHandler constructor and specifies its common options.

    +
    Note
    Any option, passed directly to the SubscribeHandler constructor outside this structure, OVERRIDES values in this structure. The values in this structure can be thought of as default common values for all SubscribeHandler objects you want to create, and values passed directly to the constructor as specific options for the concrete handler.
    +
    Examples
    subscribe_handler/example.cpp, and subscribe_handler/simple_example.cpp.
    +
    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1SubscribeHandlerOptions.js b/structmrs__lib_1_1SubscribeHandlerOptions.js new file mode 100644 index 00000000..d67c8823 --- /dev/null +++ b/structmrs__lib_1_1SubscribeHandlerOptions.js @@ -0,0 +1,15 @@ +var structmrs__lib_1_1SubscribeHandlerOptions = +[ + [ "SubscribeHandlerOptions", "structmrs__lib_1_1SubscribeHandlerOptions.html#ad7814b824334ea5a3642be4cb4001fe2", null ], + [ "SubscribeHandlerOptions", "structmrs__lib_1_1SubscribeHandlerOptions.html#a53659049ab4818428a64180204ba108c", null ], + [ "autostart", "structmrs__lib_1_1SubscribeHandlerOptions.html#aab7865b63b3dd44b61dba06c54f981c8", null ], + [ "nh", "structmrs__lib_1_1SubscribeHandlerOptions.html#ac5f6fabbc933d7e3f9beba07b166c054", null ], + [ "no_message_timeout", "structmrs__lib_1_1SubscribeHandlerOptions.html#a5702cb78ed291f5e36c960d0f90bb35c", null ], + [ "node_name", "structmrs__lib_1_1SubscribeHandlerOptions.html#a3d31e2d693f41df180cd6911a3fb8310", null ], + [ "queue_size", "structmrs__lib_1_1SubscribeHandlerOptions.html#a5abe6590d88b396d94cce7a7ae652e09", null ], + [ "threadsafe", "structmrs__lib_1_1SubscribeHandlerOptions.html#a7c924f3581ff84d571b825d7e77b9511", null ], + [ "timeout_callback", "structmrs__lib_1_1SubscribeHandlerOptions.html#aba6f6f262bfeae0d1f6f39bb778d04af", null ], + [ "timeout_manager", "structmrs__lib_1_1SubscribeHandlerOptions.html#a50dd6637eb0800d0ee53c1cd6cee058e", null ], + [ "topic_name", "structmrs__lib_1_1SubscribeHandlerOptions.html#a374f745d46497064c62909412ebdf266", null ], + [ "transport_hints", "structmrs__lib_1_1SubscribeHandlerOptions.html#a41f19ca415439152b934b3633933ec25", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1UKF_1_1inverse__exception-members.html b/structmrs__lib_1_1UKF_1_1inverse__exception-members.html new file mode 100644 index 00000000..53c940a0 --- /dev/null +++ b/structmrs__lib_1_1UKF_1_1inverse__exception-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::UKF< n_states, n_inputs, n_measurements >::inverse_exception Member List
    +
    + +
    + + + + diff --git a/structmrs__lib_1_1UKF_1_1inverse__exception.html b/structmrs__lib_1_1UKF_1_1inverse__exception.html new file mode 100644 index 00000000..174b2d42 --- /dev/null +++ b/structmrs__lib_1_1UKF_1_1inverse__exception.html @@ -0,0 +1,147 @@ + + + + + + + +mrs_lib: mrs_lib::UKF< n_states, n_inputs, n_measurements >::inverse_exception Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::UKF< n_states, n_inputs, n_measurements >::inverse_exception Struct Reference
    +
    +
    + +

    is thrown when taking the inverse of a matrix fails during kalman gain calculation + More...

    + +

    #include <ukf.h>

    +
    + + Inheritance diagram for mrs_lib::UKF< n_states, n_inputs, n_measurements >::inverse_exception:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::UKF< n_states, n_inputs, n_measurements >::inverse_exception:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +

    Detailed Description

    +

    template<int n_states, int n_inputs, int n_measurements>
    +struct mrs_lib::UKF< n_states, n_inputs, n_measurements >::inverse_exception

    + +

    is thrown when taking the inverse of a matrix fails during kalman gain calculation

    +

    The documentation for this struct was generated from the following file:
      +
    • include/mrs_lib/ukf.h
    • +
    +
    +
    + + + + diff --git a/structmrs__lib_1_1UKF_1_1inverse__exception.js b/structmrs__lib_1_1UKF_1_1inverse__exception.js new file mode 100644 index 00000000..ad655115 --- /dev/null +++ b/structmrs__lib_1_1UKF_1_1inverse__exception.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1UKF_1_1inverse__exception = +[ + [ "what", "structmrs__lib_1_1UKF_1_1inverse__exception.html#a30f40124b1988fec5273fa1a0c3bfc7c", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1UKF_1_1inverse__exception__coll__graph.map b/structmrs__lib_1_1UKF_1_1inverse__exception__coll__graph.map new file mode 100644 index 00000000..6a27a327 --- /dev/null +++ b/structmrs__lib_1_1UKF_1_1inverse__exception__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1UKF_1_1inverse__exception__coll__graph.md5 b/structmrs__lib_1_1UKF_1_1inverse__exception__coll__graph.md5 new file mode 100644 index 00000000..d5c792c6 --- /dev/null +++ b/structmrs__lib_1_1UKF_1_1inverse__exception__coll__graph.md5 @@ -0,0 +1 @@ +baffa10969dc3ecd81910e93463ff5b9 \ No newline at end of file diff --git a/structmrs__lib_1_1UKF_1_1inverse__exception__coll__graph.png b/structmrs__lib_1_1UKF_1_1inverse__exception__coll__graph.png new file mode 100644 index 00000000..493afa46 Binary files /dev/null and b/structmrs__lib_1_1UKF_1_1inverse__exception__coll__graph.png differ diff --git a/structmrs__lib_1_1UKF_1_1inverse__exception__inherit__graph.map b/structmrs__lib_1_1UKF_1_1inverse__exception__inherit__graph.map new file mode 100644 index 00000000..6a27a327 --- /dev/null +++ b/structmrs__lib_1_1UKF_1_1inverse__exception__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1UKF_1_1inverse__exception__inherit__graph.md5 b/structmrs__lib_1_1UKF_1_1inverse__exception__inherit__graph.md5 new file mode 100644 index 00000000..d5c792c6 --- /dev/null +++ b/structmrs__lib_1_1UKF_1_1inverse__exception__inherit__graph.md5 @@ -0,0 +1 @@ +baffa10969dc3ecd81910e93463ff5b9 \ No newline at end of file diff --git a/structmrs__lib_1_1UKF_1_1inverse__exception__inherit__graph.png b/structmrs__lib_1_1UKF_1_1inverse__exception__inherit__graph.png new file mode 100644 index 00000000..493afa46 Binary files /dev/null and b/structmrs__lib_1_1UKF_1_1inverse__exception__inherit__graph.png differ diff --git a/structmrs__lib_1_1UKF_1_1square__root__exception-members.html b/structmrs__lib_1_1UKF_1_1square__root__exception-members.html new file mode 100644 index 00000000..95b0b5c5 --- /dev/null +++ b/structmrs__lib_1_1UKF_1_1square__root__exception-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::UKF< n_states, n_inputs, n_measurements >::square_root_exception Member List
    +
    + +
    + + + + diff --git a/structmrs__lib_1_1UKF_1_1square__root__exception.html b/structmrs__lib_1_1UKF_1_1square__root__exception.html new file mode 100644 index 00000000..fd76d135 --- /dev/null +++ b/structmrs__lib_1_1UKF_1_1square__root__exception.html @@ -0,0 +1,147 @@ + + + + + + + +mrs_lib: mrs_lib::UKF< n_states, n_inputs, n_measurements >::square_root_exception Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::UKF< n_states, n_inputs, n_measurements >::square_root_exception Struct Reference
    +
    +
    + +

    is thrown when taking the square root of a matrix fails during sigma generation + More...

    + +

    #include <ukf.h>

    +
    + + Inheritance diagram for mrs_lib::UKF< n_states, n_inputs, n_measurements >::square_root_exception:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::UKF< n_states, n_inputs, n_measurements >::square_root_exception:
    +
    +
    + + + + + +

    +Public Member Functions

    +const char * what () const throw ()
     
    +

    Detailed Description

    +

    template<int n_states, int n_inputs, int n_measurements>
    +struct mrs_lib::UKF< n_states, n_inputs, n_measurements >::square_root_exception

    + +

    is thrown when taking the square root of a matrix fails during sigma generation

    +

    The documentation for this struct was generated from the following file:
      +
    • include/mrs_lib/ukf.h
    • +
    +
    +
    + + + + diff --git a/structmrs__lib_1_1UKF_1_1square__root__exception.js b/structmrs__lib_1_1UKF_1_1square__root__exception.js new file mode 100644 index 00000000..2b214c4d --- /dev/null +++ b/structmrs__lib_1_1UKF_1_1square__root__exception.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1UKF_1_1square__root__exception = +[ + [ "what", "structmrs__lib_1_1UKF_1_1square__root__exception.html#a9da9699dedf5b959651141b9057ec5ec", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1UKF_1_1square__root__exception__coll__graph.map b/structmrs__lib_1_1UKF_1_1square__root__exception__coll__graph.map new file mode 100644 index 00000000..6765d134 --- /dev/null +++ b/structmrs__lib_1_1UKF_1_1square__root__exception__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1UKF_1_1square__root__exception__coll__graph.md5 b/structmrs__lib_1_1UKF_1_1square__root__exception__coll__graph.md5 new file mode 100644 index 00000000..b148d83d --- /dev/null +++ b/structmrs__lib_1_1UKF_1_1square__root__exception__coll__graph.md5 @@ -0,0 +1 @@ +9d7f67109196bcfd3d9a2ae491312983 \ No newline at end of file diff --git a/structmrs__lib_1_1UKF_1_1square__root__exception__coll__graph.png b/structmrs__lib_1_1UKF_1_1square__root__exception__coll__graph.png new file mode 100644 index 00000000..a5fb55b2 Binary files /dev/null and b/structmrs__lib_1_1UKF_1_1square__root__exception__coll__graph.png differ diff --git a/structmrs__lib_1_1UKF_1_1square__root__exception__inherit__graph.map b/structmrs__lib_1_1UKF_1_1square__root__exception__inherit__graph.map new file mode 100644 index 00000000..6765d134 --- /dev/null +++ b/structmrs__lib_1_1UKF_1_1square__root__exception__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1UKF_1_1square__root__exception__inherit__graph.md5 b/structmrs__lib_1_1UKF_1_1square__root__exception__inherit__graph.md5 new file mode 100644 index 00000000..b148d83d --- /dev/null +++ b/structmrs__lib_1_1UKF_1_1square__root__exception__inherit__graph.md5 @@ -0,0 +1 @@ +9d7f67109196bcfd3d9a2ae491312983 \ No newline at end of file diff --git a/structmrs__lib_1_1UKF_1_1square__root__exception__inherit__graph.png b/structmrs__lib_1_1UKF_1_1square__root__exception__inherit__graph.png new file mode 100644 index 00000000..a5fb55b2 Binary files /dev/null and b/structmrs__lib_1_1UKF_1_1square__root__exception__inherit__graph.png differ diff --git a/structmrs__lib_1_1eigenvector__exception-members.html b/structmrs__lib_1_1eigenvector__exception-members.html new file mode 100644 index 00000000..b9301bce --- /dev/null +++ b/structmrs__lib_1_1eigenvector__exception-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::eigenvector_exception Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::eigenvector_exception, including all inherited members.

    + + +
    what() const overridemrs_lib::eigenvector_exceptioninlinevirtual
    +
    + + + + diff --git a/structmrs__lib_1_1eigenvector__exception.html b/structmrs__lib_1_1eigenvector__exception.html new file mode 100644 index 00000000..d7f18fcf --- /dev/null +++ b/structmrs__lib_1_1eigenvector__exception.html @@ -0,0 +1,184 @@ + + + + + + + +mrs_lib: mrs_lib::eigenvector_exception Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::eigenvector_exception Struct Reference
    +
    +
    + +

    This exception may be thrown when solving the generalized eigenvalue problem with the M and N matrices. + More...

    + +

    #include <rheiv.h>

    +
    + + Inheritance diagram for mrs_lib::eigenvector_exception:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::eigenvector_exception:
    +
    +
    + + + + + + +

    +Public Member Functions

    virtual const char * what () const override throw ()
     Returns the error message, describing what caused the exception. More...
     
    +

    Detailed Description

    +

    This exception may be thrown when solving the generalized eigenvalue problem with the M and N matrices.

    +

    You should catch this exception in your code and act accordingly if it appears (e.g. ask for the last valid parameter estimate).

    +
    Examples
    rheiv/example.cpp.
    +
    +

    Member Function Documentation

    + +

    ◆ what()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + +
    virtual const char* mrs_lib::eigenvector_exception::what () const
    throw (
    )
    +
    +inlineoverridevirtual
    +
    + +

    Returns the error message, describing what caused the exception.

    +
    Returns
    The error message, describing what caused the exception.
    +
    Examples
    rheiv/example.cpp.
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1eigenvector__exception.js b/structmrs__lib_1_1eigenvector__exception.js new file mode 100644 index 00000000..d77bd3c9 --- /dev/null +++ b/structmrs__lib_1_1eigenvector__exception.js @@ -0,0 +1,4 @@ +var structmrs__lib_1_1eigenvector__exception = +[ + [ "what", "structmrs__lib_1_1eigenvector__exception.html#ab825ec32cb055c8c0b3b8b59125e90b5", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1eigenvector__exception__coll__graph.map b/structmrs__lib_1_1eigenvector__exception__coll__graph.map new file mode 100644 index 00000000..f241da56 --- /dev/null +++ b/structmrs__lib_1_1eigenvector__exception__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1eigenvector__exception__coll__graph.md5 b/structmrs__lib_1_1eigenvector__exception__coll__graph.md5 new file mode 100644 index 00000000..99f675e9 --- /dev/null +++ b/structmrs__lib_1_1eigenvector__exception__coll__graph.md5 @@ -0,0 +1 @@ +9ff5b67a5f18be78ea9a35fa2f89e853 \ No newline at end of file diff --git a/structmrs__lib_1_1eigenvector__exception__coll__graph.png b/structmrs__lib_1_1eigenvector__exception__coll__graph.png new file mode 100644 index 00000000..2191cddc Binary files /dev/null and b/structmrs__lib_1_1eigenvector__exception__coll__graph.png differ diff --git a/structmrs__lib_1_1eigenvector__exception__inherit__graph.map b/structmrs__lib_1_1eigenvector__exception__inherit__graph.map new file mode 100644 index 00000000..f241da56 --- /dev/null +++ b/structmrs__lib_1_1eigenvector__exception__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1eigenvector__exception__inherit__graph.md5 b/structmrs__lib_1_1eigenvector__exception__inherit__graph.md5 new file mode 100644 index 00000000..99f675e9 --- /dev/null +++ b/structmrs__lib_1_1eigenvector__exception__inherit__graph.md5 @@ -0,0 +1 @@ +9ff5b67a5f18be78ea9a35fa2f89e853 \ No newline at end of file diff --git a/structmrs__lib_1_1eigenvector__exception__inherit__graph.png b/structmrs__lib_1_1eigenvector__exception__inherit__graph.png new file mode 100644 index 00000000..2191cddc Binary files /dev/null and b/structmrs__lib_1_1eigenvector__exception__inherit__graph.png differ diff --git a/structmrs__lib_1_1geometry_1_1cyclic-members.html b/structmrs__lib_1_1geometry_1_1cyclic-members.html new file mode 100644 index 00000000..54861301 --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1cyclic-members.html @@ -0,0 +1,140 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::geometry::cyclic< flt, spec > Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::geometry::cyclic< flt, spec >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    convert(const cyclic &what)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    convert() constmrs_lib::geometry::cyclic< flt, spec >inline
    cyclic()mrs_lib::geometry::cyclic< flt, spec >inline
    cyclic(const flt val)mrs_lib::geometry::cyclic< flt, spec >inline
    cyclic(const cyclic &other)mrs_lib::geometry::cyclic< flt, spec >inline
    cyclic(const spec &other)mrs_lib::geometry::cyclic< flt, spec >inline
    diff(const flt minuend, const flt subtrahend)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    diff(const cyclic minuend, const cyclic subtrahend) (defined in mrs_lib::geometry::cyclic< flt, spec >)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    dist(const flt from, const flt to)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    dist(const cyclic from, const cyclic to) (defined in mrs_lib::geometry::cyclic< flt, spec >)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    half_rangemrs_lib::geometry::cyclic< flt, spec >static
    inRange(const flt val)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    interp(const flt from, const flt to, const flt coeff)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    interp(const cyclic from, const cyclic to, const flt coeff) (defined in mrs_lib::geometry::cyclic< flt, spec >)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    interpUnwrapped(const flt from, const flt to, const flt coeff)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    interpUnwrapped(const cyclic from, const cyclic to, const flt coeff) (defined in mrs_lib::geometry::cyclic< flt, spec >)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    minimummrs_lib::geometry::cyclic< flt, spec >static
    operator+(const cyclic &lhs, const cyclic &rhs)mrs_lib::geometry::cyclic< flt, spec >friend
    operator+=(const cyclic &other)mrs_lib::geometry::cyclic< flt, spec >inline
    operator-(const cyclic &lhs, const cyclic &rhs)mrs_lib::geometry::cyclic< flt, spec >friend
    operator-=(const cyclic &other)mrs_lib::geometry::cyclic< flt, spec >inline
    operator=(const flt nval)mrs_lib::geometry::cyclic< flt, spec >inline
    operator=(const cyclic &other)mrs_lib::geometry::cyclic< flt, spec >inline
    operator=(cyclic &&other)mrs_lib::geometry::cyclic< flt, spec >inline
    pdist(const flt from, const flt to)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    pdist(const cyclic from, const cyclic to) (defined in mrs_lib::geometry::cyclic< flt, spec >)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    pinterp(const flt from, const flt to, const flt coeff)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    pinterp(const cyclic from, const cyclic to, const flt coeff) (defined in mrs_lib::geometry::cyclic< flt, spec >)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    pinterpUnwrapped(const flt from, const flt to, const flt coeff)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    pinterpUnwrapped(const cyclic from, const cyclic to, const flt coeff) (defined in mrs_lib::geometry::cyclic< flt, spec >)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    rangemrs_lib::geometry::cyclic< flt, spec >static
    supremummrs_lib::geometry::cyclic< flt, spec >static
    unwrap(const flt what, const flt from)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    val (defined in mrs_lib::geometry::cyclic< flt, spec >)mrs_lib::geometry::cyclic< flt, spec >protected
    value() constmrs_lib::geometry::cyclic< flt, spec >inline
    wrap(const flt val)mrs_lib::geometry::cyclic< flt, spec >inlinestatic
    +
    + + + + diff --git a/structmrs__lib_1_1geometry_1_1cyclic.html b/structmrs__lib_1_1geometry_1_1cyclic.html new file mode 100644 index 00000000..1bbdacce --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1cyclic.html @@ -0,0 +1,1373 @@ + + + + + + + +mrs_lib: mrs_lib::geometry::cyclic< flt, spec > Struct Template Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::geometry::cyclic< flt, spec > Struct Template Reference
    +
    +
    + +

    Implementation of the a general cyclic value (such as angles in radians/degrees etc). + More...

    + +

    #include <cyclic.h>

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     cyclic ()
     Default constructor. More...
     
     cyclic (const flt val)
     Constructor overload. More...
     
     cyclic (const cyclic &other)
     Copy constructor. More...
     
     cyclic (const spec &other)
     Copy constructor. More...
     
    flt value () const
     Getter for val. More...
     
    template<class other_t >
    other_t convert () const
     Conversion between two different circular quantities. More...
     
    cyclicoperator= (const flt nval)
     Assignment operator. More...
     
    cyclicoperator= (const cyclic &other)
     Assignment operator. More...
     
    cyclicoperator= (cyclic &&other)
     Move operator. More...
     
    cyclicoperator+= (const cyclic &other)
     Addition compound operator. More...
     
    cyclicoperator-= (const cyclic &other)
     Subtraction compound operator. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Static Public Member Functions

    static bool inRange (const flt val)
     Checks if val is within the valid interval of wrapped values. More...
     
    static flt wrap (const flt val)
     Returns val, converted to the valid interval of values. More...
     
    static flt unwrap (const flt what, const flt from)
     Returns value of the parameter what modified so that there is no "jump" between from and \t what. More...
     
    static flt pdist (const flt from, const flt to)
     Returns length of the shortest walk in the positive direction from the first parameter to the second one. More...
     
    +static flt pdist (const cyclic from, const cyclic to)
     
    static flt diff (const flt minuend, const flt subtrahend)
     Returns the difference between the two circular values. More...
     
    +static flt diff (const cyclic minuend, const cyclic subtrahend)
     
    static flt dist (const flt from, const flt to)
     Returns the distance between the two circular values. More...
     
    +static flt dist (const cyclic from, const cyclic to)
     
    static flt interpUnwrapped (const flt from, const flt to, const flt coeff)
     Interpolation between two circular quantities without wrapping of the result. More...
     
    +static flt interpUnwrapped (const cyclic from, const cyclic to, const flt coeff)
     
    static flt interp (const flt from, const flt to, const flt coeff)
     Interpolation between two circular quantities. More...
     
    +static flt interp (const cyclic from, const cyclic to, const flt coeff)
     
    static flt pinterpUnwrapped (const flt from, const flt to, const flt coeff)
     Interpolation between two circular quantities in the positive direction without wrapping of the result. More...
     
    +static flt pinterpUnwrapped (const cyclic from, const cyclic to, const flt coeff)
     
    static flt pinterp (const flt from, const flt to, const flt coeff)
     Interpolation between two circular quantities in the positive direction. More...
     
    +static flt pinterp (const cyclic from, const cyclic to, const flt coeff)
     
    template<class other_t >
    static other_t convert (const cyclic &what)
     Conversion between two different circular quantities. More...
     
    + + + + + + + + + + + + + +

    +Static Public Attributes

    +static constexpr flt minimum = spec::minimum
     Minimum of the valid interval of wrapped values $ m $.
     
    +static constexpr flt supremum = spec::supremum
     Supremum of the valid interval of wrapped values $ s $.
     
    static constexpr flt range
     Range of the valid interval of wrapped values $ r $ (also the period of the cyclic quantity). More...
     
    static constexpr flt half_range
     Half of the range of the valid interval of wrapped values $ r/2 $ (used for some calculations). More...
     
    + + + +

    +Protected Attributes

    +flt val
     
    + + + + + + + +

    +Friends

    spec operator+ (const cyclic &lhs, const cyclic &rhs)
     Addition operator. More...
     
    flt operator- (const cyclic &lhs, const cyclic &rhs)
     Subtraction operator (uses the diff() method). More...
     
    +

    Detailed Description

    +

    template<typename flt, class spec>
    +struct mrs_lib::geometry::cyclic< flt, spec >

    + +

    Implementation of the a general cyclic value (such as angles in radians/degrees etc).

    +

    This class implements a periodical value with a period of $ r \in {\rm I\!R} $ so that a general number $ v \in {\rm I\!R} $ represents the same value as $ v + kr,~k \in {\rm I\!N} $. For the purposes of calculations in this class, $ v $ is confined to a half-open interval $ v \in [~m,~s~[ $, where $ m $ is the minimum of this interval and $ s $ is its supremum, and $ s = m + r $ holds. This approach enables representing $ v $ in different intervals on the real numbers axis; eg. angle in radians may be represented within the interval $ v \in [~-\pi,~\pi~[ $ or $ v \in [~0,~2\pi~[ $, according to the needs of the specific application. The period $ r $ is called range for the purposes of this class, as it represents range of the interval of valid ("wrapped") values of $ v $.

    +

    This class may be used as an object or its static methods may be used on regular floating-point types, avoiding any object-related overheads (see example). Specializations for the most common cyclic values are provided and a new specialization may be easily created simply by inheriting from this class and specifying a different minimum and supremum values.

    +

    Implementation inspired by: https://www.codeproject.com/Articles/190833/Circular-Values-Math-and-Statistics-with-Cplusplus

    +
    Note
    For a better intuitive understanding of the used functions, the term walk is sometimes used in the function explanations. You can imagine walking along the circle from one angle to another (represented by the circular quantities). The walk may be the shortest - then you're walking in such a manner that you reach the other point in the least of steps. The walk may also be oriented - then you're walking in a specific direction (ie. according to the increasing/decreasing angle).
    +
    Note
    The terms circular quantity and value are used in the function explanations. A circular quantity is eg. an angle and the same quantity may be represented using different values: the same angle is represented by the values of 100 degrees and 460 degrees.
    +
    Template Parameters
    + + +
    fltfloating data type to be used by this class.
    +
    +
    +
    Examples
    geometry/cyclic_example.cpp.
    +
    +

    Constructor & Destructor Documentation

    + +

    ◆ cyclic() [1/4]

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + +
    mrs_lib::geometry::cyclic< flt, spec >::cyclic ()
    +
    +inline
    +
    + +

    Default constructor.

    +

    Sets the value to the minimum.

    + +
    +
    + +

    ◆ cyclic() [2/4]

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + +
    mrs_lib::geometry::cyclic< flt, spec >::cyclic (const flt val)
    +
    +inline
    +
    + +

    Constructor overload.

    +
    Parameters
    + + +
    valinitialization value (will be wrapped).
    +
    +
    + +
    +
    + +

    ◆ cyclic() [3/4]

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + +
    mrs_lib::geometry::cyclic< flt, spec >::cyclic (const cyclic< flt, spec > & other)
    +
    +inline
    +
    + +

    Copy constructor.

    +
    Parameters
    + + +
    valinitialization value.
    +
    +
    + +
    +
    + +

    ◆ cyclic() [4/4]

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + +
    mrs_lib::geometry::cyclic< flt, spec >::cyclic (const spec & other)
    +
    +inline
    +
    + +

    Copy constructor.

    +
    Parameters
    + + +
    valinitialization value.
    +
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ convert() [1/2]

    + +
    +
    +
    +template<typename flt , class spec >
    +
    +template<class other_t >
    + + + + + +
    + + + + + + + +
    other_t mrs_lib::geometry::cyclic< flt, spec >::convert () const
    +
    +inline
    +
    + +

    Conversion between two different circular quantities.

    +

    This method returns the circular quantity, represented by this object, converted to the other_t type of circular quantity.

    +
    Returns
    the circular quantity converted to the range of other_t.
    +
    Template Parameters
    + + +
    other_ttype of the circular quantity to be converted to.
    +
    +
    +
    Warning
    For the purposes of this function, it is assumed that the range of one type corresponds to the whole range of the other type and zeros of both types correspond to each other (such as when converting eg. degrees to radians).
    + +
    +
    + +

    ◆ convert() [2/2]

    + +
    +
    +
    +template<typename flt , class spec >
    +
    +template<class other_t >
    + + + + + +
    + + + + + + + + +
    static other_t mrs_lib::geometry::cyclic< flt, spec >::convert (const cyclic< flt, spec > & what)
    +
    +inlinestatic
    +
    + +

    Conversion between two different circular quantities.

    +

    This function converts its parameter, interpreted as the circular quantity, represented by this class, to the other_t type of circular quantity.

    +
    Parameters
    + + +
    whatthe circular quantity to be converted.
    +
    +
    +
    Returns
    the circular quantity converted to the range of other_t.
    +
    Template Parameters
    + + +
    other_ttype of the circular quantity to be converted to.
    +
    +
    +
    Warning
    For the purposes of this function, it is assumed that the range of one type corresponds to the whole range of the other type and zeros of both types correspond to each other (such as when converting eg. degrees to radians).
    + +
    +
    + +

    ◆ diff()

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    static flt mrs_lib::geometry::cyclic< flt, spec >::diff (const flt minuend,
    const flt subtrahend 
    )
    +
    +inlinestatic
    +
    + +

    Returns the difference between the two circular values.

    +

    The difference may also be interpreted as length of the shortest walk between the two values, with a sign according to the direction of the shortest walk.

    +
    Parameters
    + + + +
    minuendthe subtrahend will be subtracted from this value.
    subtrahendthis value will be subtracted from the minuend.
    +
    +
    +
    Returns
    the difference of the two circular quantities.
    + +
    +
    + +

    ◆ dist()

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    static flt mrs_lib::geometry::cyclic< flt, spec >::dist (const flt from,
    const flt to 
    )
    +
    +inlinestatic
    +
    + +

    Returns the distance between the two circular values.

    +

    The distance may also be interpreted as length of the shortest walk between the two values.

    +
    Parameters
    + + + +
    fromthe first circular quantity.
    tothe second circular quantity.
    +
    +
    +
    Returns
    distance of the two circular quantities.
    +
    Note
    The order of the parameters doesn't matter.
    + +
    +
    + +

    ◆ inRange()

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + +
    static bool mrs_lib::geometry::cyclic< flt, spec >::inRange (const flt val)
    +
    +inlinestatic
    +
    + +

    Checks if val is within the valid interval of wrapped values.

    +
    Parameters
    + + +
    valthe value to be checked.
    +
    +
    +
    Returns
    true if val is within the valid interval of wrapped values.
    + +
    +
    + +

    ◆ interp()

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    static flt mrs_lib::geometry::cyclic< flt, spec >::interp (const flt from,
    const flt to,
    const flt coeff 
    )
    +
    +inlinestatic
    +
    + +

    Interpolation between two circular quantities.

    +

    This function wraps the returned value so that it is in the interval of valid values.

    +
    Parameters
    + + + + +
    fromthe first circular quantity.
    tothe second circular quantity.
    coeffthe interpolation coefficient.
    +
    +
    +
    Returns
    interpolation of the two circular quantities using the coefficient, wrapped to the interval of valid values.
    + +
    +
    + +

    ◆ interpUnwrapped()

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    static flt mrs_lib::geometry::cyclic< flt, spec >::interpUnwrapped (const flt from,
    const flt to,
    const flt coeff 
    )
    +
    +inlinestatic
    +
    + +

    Interpolation between two circular quantities without wrapping of the result.

    +

    This function doesn't wrap the returned value.

    +
    Parameters
    + + + + +
    fromthe first circular quantity.
    tothe second circular quantity.
    coeffthe interpolation coefficient.
    +
    +
    +
    Returns
    interpolation of the two circular quantities using the coefficient.
    +
    Warning
    Note that the returned value may be outside the valid interval of wrapped values, specified by the minimum and supremum parameters of this class.
    + +
    +
    + +

    ◆ operator+=()

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + +
    cyclic& mrs_lib::geometry::cyclic< flt, spec >::operator+= (const cyclic< flt, spec > & other)
    +
    +inline
    +
    + +

    Addition compound operator.

    +
    Parameters
    + + +
    othervalue to be added.
    +
    +
    +
    Returns
    reference to self.
    + +
    +
    + +

    ◆ operator-=()

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + +
    cyclic& mrs_lib::geometry::cyclic< flt, spec >::operator-= (const cyclic< flt, spec > & other)
    +
    +inline
    +
    + +

    Subtraction compound operator.

    +
    Parameters
    + + +
    othervalue to be subtracted.
    +
    +
    +
    Returns
    reference to self.
    + +
    +
    + +

    ◆ operator=() [1/3]

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + +
    cyclic& mrs_lib::geometry::cyclic< flt, spec >::operator= (const cyclic< flt, spec > & other)
    +
    +inline
    +
    + +

    Assignment operator.

    +
    Parameters
    + + +
    othervalue to be assigned.
    +
    +
    +
    Returns
    reference to self.
    + +
    +
    + +

    ◆ operator=() [2/3]

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + +
    cyclic& mrs_lib::geometry::cyclic< flt, spec >::operator= (const flt nval)
    +
    +inline
    +
    + +

    Assignment operator.

    +
    Parameters
    + + +
    nvalvalue to be assigned (will be wrapped).
    +
    +
    +
    Returns
    reference to self.
    + +
    +
    + +

    ◆ operator=() [3/3]

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + +
    cyclic& mrs_lib::geometry::cyclic< flt, spec >::operator= (cyclic< flt, spec > && other)
    +
    +inline
    +
    + +

    Move operator.

    +
    Parameters
    + + +
    othervalue to be assigned.
    +
    +
    +
    Returns
    reference to self.
    + +
    +
    + +

    ◆ pdist()

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    static flt mrs_lib::geometry::cyclic< flt, spec >::pdist (const flt from,
    const flt to 
    )
    +
    +inlinestatic
    +
    + +

    Returns length of the shortest walk in the positive direction from the first parameter to the second one.

    +
    Parameters
    + + + +
    fromthe positive walk starts at this value.
    tothe positive walk ends at this value.
    +
    +
    +
    Returns
    length of the shortest positive walk from the first parameter to the second one.
    +
    Note
    The returned value is not necessarily the shortest distance between the two circular quantities (see the dist() function for that).
    + +
    +
    + +

    ◆ pinterp()

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    static flt mrs_lib::geometry::cyclic< flt, spec >::pinterp (const flt from,
    const flt to,
    const flt coeff 
    )
    +
    +inlinestatic
    +
    + +

    Interpolation between two circular quantities in the positive direction.

    +

    Interpolates the two values in the positive direction from the first parameter to the second by the coefficient. This function wraps the returned value so that it is in the interval of valid values.

    +
    Parameters
    + + + + +
    fromthe first circular quantity.
    tothe second circular quantity.
    coeffthe interpolation coefficient.
    +
    +
    +
    Returns
    interpolation of the two circular quantities using the coefficient, wrapped to the interval of valid values.
    + +
    +
    + +

    ◆ pinterpUnwrapped()

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    static flt mrs_lib::geometry::cyclic< flt, spec >::pinterpUnwrapped (const flt from,
    const flt to,
    const flt coeff 
    )
    +
    +inlinestatic
    +
    + +

    Interpolation between two circular quantities in the positive direction without wrapping of the result.

    +

    Interpolates the two values in the positive direction from the first parameter to the second by the coefficient. This function doesn't wrap the returned value.

    +
    Parameters
    + + + + +
    fromthe first circular quantity.
    tothe second circular quantity.
    coeffthe interpolation coefficient.
    +
    +
    +
    Returns
    interpolation of the two circular quantities using the coefficient.
    +
    Warning
    Note that the returned value may be outside the valid interval of wrapped values, specified by the minimum and supremum parameters of this class.
    + +
    +
    + +

    ◆ unwrap()

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    static flt mrs_lib::geometry::cyclic< flt, spec >::unwrap (const flt what,
    const flt from 
    )
    +
    +inlinestatic
    +
    + +

    Returns value of the parameter what modified so that there is no "jump" between from and \t what.

    +

    The circular difference between the two input quantities is preserved, but the returned value is modified if necessary so that the linear distance between the values is the smallest. This is useful whenever you need to preserve linear continuity of consecutive values, eg. when commanding a multi-rotational servo motor or when using a simple linear Kalman filter to estimate circular quantities.

    +

    An example of inputs and outputs if $ m = 0,~s=360 $:

    + + + + + + + + + + +
    what from return
    20 10 20
    20 350 380
    0 350 360
    200 10 -160
    +
    Parameters
    + + + +
    whatthe value to be unwrapped.
    fromthe previous value from which the unwrapped value of what should have the same circular difference and minimal linear distance.
    +
    +
    +
    Returns
    the unwrapped value of what.
    +
    Warning
    Note that the returned value may be outside the valid interval of wrapped values, specified by the minimum and supremum parameters of this class.
    + +
    +
    + +

    ◆ value()

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + +
    flt mrs_lib::geometry::cyclic< flt, spec >::value () const
    +
    +inline
    +
    + +

    Getter for val.

    +
    Returns
    the value.
    + +
    +
    + +

    ◆ wrap()

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + +
    static flt mrs_lib::geometry::cyclic< flt, spec >::wrap (const flt val)
    +
    +inlinestatic
    +
    + +

    Returns val, converted to the valid interval of values.

    +

    The wrapped value represents the same quantity as the parameter (ie. $ v' = v + kr $, where $ v $ is the parameter and $ v' $ is the returned value).

    +
    Parameters
    + + +
    valthe value to be wrapped.
    +
    +
    +
    Returns
    val wrapped to the valid interval of values.
    + +
    +
    +

    Friends And Related Function Documentation

    + +

    ◆ operator+

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    spec operator+ (const cyclic< flt, spec > & lhs,
    const cyclic< flt, spec > & rhs 
    )
    +
    +friend
    +
    + +

    Addition operator.

    +
    Parameters
    + + + +
    lhsleft-hand-side.
    rhsright-hand-side.
    +
    +
    +
    Returns
    the result of adding the two angles.
    + +
    +
    + +

    ◆ operator-

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    flt operator- (const cyclic< flt, spec > & lhs,
    const cyclic< flt, spec > & rhs 
    )
    +
    +friend
    +
    + +

    Subtraction operator (uses the diff() method).

    +
    Parameters
    + + + +
    lhsleft-hand-side.
    rhsright-hand-side.
    +
    +
    +
    Returns
    the result of subtracting rhs from lhs.
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ half_range

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + +
    constexpr flt mrs_lib::geometry::cyclic< flt, spec >::half_range
    +
    +staticconstexpr
    +
    +Initial value:
    =
    +
    range / flt(2)
    +
    +

    Half of the range of the valid interval of wrapped values $ r/2 $ (used for some calculations).

    + +
    +
    + +

    ◆ range

    + +
    +
    +
    +template<typename flt , class spec >
    + + + + + +
    + + + + +
    constexpr flt mrs_lib::geometry::cyclic< flt, spec >::range
    +
    +staticconstexpr
    +
    +Initial value: +

    Range of the valid interval of wrapped values $ r $ (also the period of the cyclic quantity).

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    +
    static constexpr flt supremum
    Supremum of the valid interval of wrapped values .
    Definition: cyclic.h:86
    +
    static constexpr flt minimum
    Minimum of the valid interval of wrapped values .
    Definition: cyclic.h:85
    +
    static constexpr flt range
    Range of the valid interval of wrapped values (also the period of the cyclic quantity).
    Definition: cyclic.h:87
    + + + + diff --git a/structmrs__lib_1_1geometry_1_1cyclic.js b/structmrs__lib_1_1geometry_1_1cyclic.js new file mode 100644 index 00000000..46cdf527 --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1cyclic.js @@ -0,0 +1,17 @@ +var structmrs__lib_1_1geometry_1_1cyclic = +[ + [ "cyclic", "structmrs__lib_1_1geometry_1_1cyclic.html#ab366578641265f73655d1edc023cc2c7", null ], + [ "cyclic", "structmrs__lib_1_1geometry_1_1cyclic.html#ae0cfbde43f9fa6a3f26f1e4cf8184d30", null ], + [ "cyclic", "structmrs__lib_1_1geometry_1_1cyclic.html#a9ca52b4d47969ec56057b8217f201ab9", null ], + [ "cyclic", "structmrs__lib_1_1geometry_1_1cyclic.html#ad40f88cb0dab7a684335f3403a9df7b0", null ], + [ "convert", "structmrs__lib_1_1geometry_1_1cyclic.html#aa86da042144ee34330e4cef57b410f58", null ], + [ "operator+=", "structmrs__lib_1_1geometry_1_1cyclic.html#a0d797e1245025227ede866ab08bcc19f", null ], + [ "operator-=", "structmrs__lib_1_1geometry_1_1cyclic.html#ad45609e5fa890a79729b100231e427da", null ], + [ "operator=", "structmrs__lib_1_1geometry_1_1cyclic.html#ace7e2ff831cf60311e28a70035114bcd", null ], + [ "operator=", "structmrs__lib_1_1geometry_1_1cyclic.html#a1ff6b499102b0eb290b6d121284c51ce", null ], + [ "operator=", "structmrs__lib_1_1geometry_1_1cyclic.html#a8c81dca050a406b4225e8816a1955fb2", null ], + [ "value", "structmrs__lib_1_1geometry_1_1cyclic.html#a064a156dd856871bf1b4acf22cba78e3", null ], + [ "operator+", "structmrs__lib_1_1geometry_1_1cyclic.html#a58ca734b0e19c5f25da90761303451b7", null ], + [ "operator-", "structmrs__lib_1_1geometry_1_1cyclic.html#a9d401b110dd9e5372ffa4951f073e794", null ], + [ "val", "structmrs__lib_1_1geometry_1_1cyclic.html#a94f9db20b89133f33a4c7117a8224a0b", null ] +]; \ No newline at end of file diff --git a/structmrs__lib_1_1geometry_1_1degrees-members.html b/structmrs__lib_1_1geometry_1_1degrees-members.html new file mode 100644 index 00000000..d77b32be --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1degrees-members.html @@ -0,0 +1,138 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::geometry::degrees Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::geometry::degrees, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    convert(const cyclic &what)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    convert() constmrs_lib::geometry::cyclic< double, degrees >inline
    cyclic()mrs_lib::geometry::cyclic< double, degrees >inline
    cyclic(const double val)mrs_lib::geometry::cyclic< double, degrees >inline
    cyclic(const cyclic &other)mrs_lib::geometry::cyclic< double, degrees >inline
    cyclic(const degrees &other)mrs_lib::geometry::cyclic< double, degrees >inline
    diff(const double minuend, const double subtrahend)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    diff(const cyclic minuend, const cyclic subtrahend) (defined in mrs_lib::geometry::cyclic< double, degrees >)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    dist(const double from, const double to)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    dist(const cyclic from, const cyclic to) (defined in mrs_lib::geometry::cyclic< double, degrees >)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    half_rangemrs_lib::geometry::cyclic< double, degrees >static
    inRange(const double val)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    interp(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    interp(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, degrees >)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    interpUnwrapped(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    interpUnwrapped(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, degrees >)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    minimum (defined in mrs_lib::geometry::degrees)mrs_lib::geometry::degreesstatic
    operator+=(const cyclic &other)mrs_lib::geometry::cyclic< double, degrees >inline
    operator-=(const cyclic &other)mrs_lib::geometry::cyclic< double, degrees >inline
    operator=(const double nval)mrs_lib::geometry::cyclic< double, degrees >inline
    operator=(const cyclic &other)mrs_lib::geometry::cyclic< double, degrees >inline
    operator=(cyclic &&other)mrs_lib::geometry::cyclic< double, degrees >inline
    pdist(const double from, const double to)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    pdist(const cyclic from, const cyclic to) (defined in mrs_lib::geometry::cyclic< double, degrees >)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    pinterp(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    pinterp(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, degrees >)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    pinterpUnwrapped(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    pinterpUnwrapped(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, degrees >)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    rangemrs_lib::geometry::cyclic< double, degrees >static
    supremum (defined in mrs_lib::geometry::degrees)mrs_lib::geometry::degreesstatic
    unwrap(const double what, const double from)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    val (defined in mrs_lib::geometry::cyclic< double, degrees >)mrs_lib::geometry::cyclic< double, degrees >protected
    value() constmrs_lib::geometry::cyclic< double, degrees >inline
    wrap(const double val)mrs_lib::geometry::cyclic< double, degrees >inlinestatic
    +
    + + + + diff --git a/structmrs__lib_1_1geometry_1_1degrees.html b/structmrs__lib_1_1geometry_1_1degrees.html new file mode 100644 index 00000000..b64ec64c --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1degrees.html @@ -0,0 +1,260 @@ + + + + + + + +mrs_lib: mrs_lib::geometry::degrees Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::geometry::degrees Struct Reference
    +
    +
    + +

    Convenience specialization of the cyclic class for unsigned degrees (from $0$ to $360$). + More...

    + +

    #include <cyclic.h>

    +
    + + Inheritance diagram for mrs_lib::geometry::degrees:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::geometry::degrees:
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Static Public Attributes

    +static constexpr double minimum = 0
     
    +static constexpr double supremum = 360
     
    - Static Public Attributes inherited from mrs_lib::geometry::cyclic< double, degrees >
    +static constexpr double minimum
     Minimum of the valid interval of wrapped values $ m $.
     
    +static constexpr double supremum
     Supremum of the valid interval of wrapped values $ s $.
     
    +static constexpr double range
     Range of the valid interval of wrapped values $ r $ (also the period of the cyclic quantity).
     
    +static constexpr double half_range
     Half of the range of the valid interval of wrapped values $ r/2 $ (used for some calculations).
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Member Functions inherited from mrs_lib::geometry::cyclic< double, degrees >
     cyclic ()
     Default constructor. More...
     
     cyclic (const double val)
     Constructor overload. More...
     
     cyclic (const cyclic &other)
     Copy constructor. More...
     
     cyclic (const degrees &other)
     Copy constructor. More...
     
    double value () const
     Getter for val. More...
     
    other_t convert () const
     Conversion between two different circular quantities. More...
     
    cyclicoperator= (const double nval)
     Assignment operator. More...
     
    cyclicoperator= (const cyclic &other)
     Assignment operator. More...
     
    cyclicoperator= (cyclic &&other)
     Move operator. More...
     
    cyclicoperator+= (const cyclic &other)
     Addition compound operator. More...
     
    cyclicoperator-= (const cyclic &other)
     Subtraction compound operator. More...
     
    - Static Public Member Functions inherited from mrs_lib::geometry::cyclic< double, degrees >
    static bool inRange (const double val)
     Checks if val is within the valid interval of wrapped values. More...
     
    static double wrap (const double val)
     Returns val, converted to the valid interval of values. More...
     
    static double unwrap (const double what, const double from)
     Returns value of the parameter what modified so that there is no "jump" between from and \t what. More...
     
    static double pdist (const double from, const double to)
     Returns length of the shortest walk in the positive direction from the first parameter to the second one. More...
     
    +static double pdist (const cyclic from, const cyclic to)
     
    static double diff (const double minuend, const double subtrahend)
     Returns the difference between the two circular values. More...
     
    +static double diff (const cyclic minuend, const cyclic subtrahend)
     
    static double dist (const double from, const double to)
     Returns the distance between the two circular values. More...
     
    +static double dist (const cyclic from, const cyclic to)
     
    static double interpUnwrapped (const double from, const double to, const double coeff)
     Interpolation between two circular quantities without wrapping of the result. More...
     
    +static double interpUnwrapped (const cyclic from, const cyclic to, const double coeff)
     
    static double interp (const double from, const double to, const double coeff)
     Interpolation between two circular quantities. More...
     
    +static double interp (const cyclic from, const cyclic to, const double coeff)
     
    static double pinterpUnwrapped (const double from, const double to, const double coeff)
     Interpolation between two circular quantities in the positive direction without wrapping of the result. More...
     
    +static double pinterpUnwrapped (const cyclic from, const cyclic to, const double coeff)
     
    static double pinterp (const double from, const double to, const double coeff)
     Interpolation between two circular quantities in the positive direction. More...
     
    +static double pinterp (const cyclic from, const cyclic to, const double coeff)
     
    static other_t convert (const cyclic &what)
     Conversion between two different circular quantities. More...
     
    - Protected Attributes inherited from mrs_lib::geometry::cyclic< double, degrees >
    +double val
     
    +

    Detailed Description

    +

    Convenience specialization of the cyclic class for unsigned degrees (from $0$ to $360$).

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1geometry_1_1degrees__coll__graph.map b/structmrs__lib_1_1geometry_1_1degrees__coll__graph.map new file mode 100644 index 00000000..e34a195b --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1degrees__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1geometry_1_1degrees__coll__graph.md5 b/structmrs__lib_1_1geometry_1_1degrees__coll__graph.md5 new file mode 100644 index 00000000..7b45e86d --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1degrees__coll__graph.md5 @@ -0,0 +1 @@ +cac1bec9373883796f6a1ba0b8bda207 \ No newline at end of file diff --git a/structmrs__lib_1_1geometry_1_1degrees__coll__graph.png b/structmrs__lib_1_1geometry_1_1degrees__coll__graph.png new file mode 100644 index 00000000..88c75bac Binary files /dev/null and b/structmrs__lib_1_1geometry_1_1degrees__coll__graph.png differ diff --git a/structmrs__lib_1_1geometry_1_1degrees__inherit__graph.map b/structmrs__lib_1_1geometry_1_1degrees__inherit__graph.map new file mode 100644 index 00000000..e34a195b --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1degrees__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1geometry_1_1degrees__inherit__graph.md5 b/structmrs__lib_1_1geometry_1_1degrees__inherit__graph.md5 new file mode 100644 index 00000000..7b45e86d --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1degrees__inherit__graph.md5 @@ -0,0 +1 @@ +cac1bec9373883796f6a1ba0b8bda207 \ No newline at end of file diff --git a/structmrs__lib_1_1geometry_1_1degrees__inherit__graph.png b/structmrs__lib_1_1geometry_1_1degrees__inherit__graph.png new file mode 100644 index 00000000..88c75bac Binary files /dev/null and b/structmrs__lib_1_1geometry_1_1degrees__inherit__graph.png differ diff --git a/structmrs__lib_1_1geometry_1_1radians-members.html b/structmrs__lib_1_1geometry_1_1radians-members.html new file mode 100644 index 00000000..3ff7ea86 --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1radians-members.html @@ -0,0 +1,138 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::geometry::radians Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::geometry::radians, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    convert(const cyclic &what)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    convert() constmrs_lib::geometry::cyclic< double, radians >inline
    cyclic()mrs_lib::geometry::cyclic< double, radians >inline
    cyclic(const double val)mrs_lib::geometry::cyclic< double, radians >inline
    cyclic(const cyclic &other)mrs_lib::geometry::cyclic< double, radians >inline
    cyclic(const radians &other)mrs_lib::geometry::cyclic< double, radians >inline
    diff(const double minuend, const double subtrahend)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    diff(const cyclic minuend, const cyclic subtrahend) (defined in mrs_lib::geometry::cyclic< double, radians >)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    dist(const double from, const double to)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    dist(const cyclic from, const cyclic to) (defined in mrs_lib::geometry::cyclic< double, radians >)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    half_rangemrs_lib::geometry::cyclic< double, radians >static
    inRange(const double val)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    interp(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    interp(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, radians >)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    interpUnwrapped(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    interpUnwrapped(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, radians >)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    minimum (defined in mrs_lib::geometry::radians)mrs_lib::geometry::radiansstatic
    operator+=(const cyclic &other)mrs_lib::geometry::cyclic< double, radians >inline
    operator-=(const cyclic &other)mrs_lib::geometry::cyclic< double, radians >inline
    operator=(const double nval)mrs_lib::geometry::cyclic< double, radians >inline
    operator=(const cyclic &other)mrs_lib::geometry::cyclic< double, radians >inline
    operator=(cyclic &&other)mrs_lib::geometry::cyclic< double, radians >inline
    pdist(const double from, const double to)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    pdist(const cyclic from, const cyclic to) (defined in mrs_lib::geometry::cyclic< double, radians >)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    pinterp(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    pinterp(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, radians >)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    pinterpUnwrapped(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    pinterpUnwrapped(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, radians >)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    rangemrs_lib::geometry::cyclic< double, radians >static
    supremum (defined in mrs_lib::geometry::radians)mrs_lib::geometry::radiansstatic
    unwrap(const double what, const double from)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    val (defined in mrs_lib::geometry::cyclic< double, radians >)mrs_lib::geometry::cyclic< double, radians >protected
    value() constmrs_lib::geometry::cyclic< double, radians >inline
    wrap(const double val)mrs_lib::geometry::cyclic< double, radians >inlinestatic
    +
    + + + + diff --git a/structmrs__lib_1_1geometry_1_1radians.html b/structmrs__lib_1_1geometry_1_1radians.html new file mode 100644 index 00000000..9292c1cc --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1radians.html @@ -0,0 +1,262 @@ + + + + + + + +mrs_lib: mrs_lib::geometry::radians Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::geometry::radians Struct Reference
    +
    +
    + +

    Convenience specialization of the cyclic class for unsigned radians (from $0$ to $2\pi$). + More...

    + +

    #include <cyclic.h>

    +
    + + Inheritance diagram for mrs_lib::geometry::radians:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::geometry::radians:
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Static Public Attributes

    +static constexpr double minimum = 0
     
    +static constexpr double supremum = 2 * M_PI
     
    - Static Public Attributes inherited from mrs_lib::geometry::cyclic< double, radians >
    +static constexpr double minimum
     Minimum of the valid interval of wrapped values $ m $.
     
    +static constexpr double supremum
     Supremum of the valid interval of wrapped values $ s $.
     
    +static constexpr double range
     Range of the valid interval of wrapped values $ r $ (also the period of the cyclic quantity).
     
    +static constexpr double half_range
     Half of the range of the valid interval of wrapped values $ r/2 $ (used for some calculations).
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Member Functions inherited from mrs_lib::geometry::cyclic< double, radians >
     cyclic ()
     Default constructor. More...
     
     cyclic (const double val)
     Constructor overload. More...
     
     cyclic (const cyclic &other)
     Copy constructor. More...
     
     cyclic (const radians &other)
     Copy constructor. More...
     
    double value () const
     Getter for val. More...
     
    other_t convert () const
     Conversion between two different circular quantities. More...
     
    cyclicoperator= (const double nval)
     Assignment operator. More...
     
    cyclicoperator= (const cyclic &other)
     Assignment operator. More...
     
    cyclicoperator= (cyclic &&other)
     Move operator. More...
     
    cyclicoperator+= (const cyclic &other)
     Addition compound operator. More...
     
    cyclicoperator-= (const cyclic &other)
     Subtraction compound operator. More...
     
    - Static Public Member Functions inherited from mrs_lib::geometry::cyclic< double, radians >
    static bool inRange (const double val)
     Checks if val is within the valid interval of wrapped values. More...
     
    static double wrap (const double val)
     Returns val, converted to the valid interval of values. More...
     
    static double unwrap (const double what, const double from)
     Returns value of the parameter what modified so that there is no "jump" between from and \t what. More...
     
    static double pdist (const double from, const double to)
     Returns length of the shortest walk in the positive direction from the first parameter to the second one. More...
     
    +static double pdist (const cyclic from, const cyclic to)
     
    static double diff (const double minuend, const double subtrahend)
     Returns the difference between the two circular values. More...
     
    +static double diff (const cyclic minuend, const cyclic subtrahend)
     
    static double dist (const double from, const double to)
     Returns the distance between the two circular values. More...
     
    +static double dist (const cyclic from, const cyclic to)
     
    static double interpUnwrapped (const double from, const double to, const double coeff)
     Interpolation between two circular quantities without wrapping of the result. More...
     
    +static double interpUnwrapped (const cyclic from, const cyclic to, const double coeff)
     
    static double interp (const double from, const double to, const double coeff)
     Interpolation between two circular quantities. More...
     
    +static double interp (const cyclic from, const cyclic to, const double coeff)
     
    static double pinterpUnwrapped (const double from, const double to, const double coeff)
     Interpolation between two circular quantities in the positive direction without wrapping of the result. More...
     
    +static double pinterpUnwrapped (const cyclic from, const cyclic to, const double coeff)
     
    static double pinterp (const double from, const double to, const double coeff)
     Interpolation between two circular quantities in the positive direction. More...
     
    +static double pinterp (const cyclic from, const cyclic to, const double coeff)
     
    static other_t convert (const cyclic &what)
     Conversion between two different circular quantities. More...
     
    - Protected Attributes inherited from mrs_lib::geometry::cyclic< double, radians >
    +double val
     
    +

    Detailed Description

    +

    Convenience specialization of the cyclic class for unsigned radians (from $0$ to $2\pi$).

    +
    Examples
    geometry/cyclic_example.cpp.
    +
    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1geometry_1_1radians__coll__graph.map b/structmrs__lib_1_1geometry_1_1radians__coll__graph.map new file mode 100644 index 00000000..6a66dec7 --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1radians__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1geometry_1_1radians__coll__graph.md5 b/structmrs__lib_1_1geometry_1_1radians__coll__graph.md5 new file mode 100644 index 00000000..9f1cae10 --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1radians__coll__graph.md5 @@ -0,0 +1 @@ +461a7a6829dba785d161f3c0a460464d \ No newline at end of file diff --git a/structmrs__lib_1_1geometry_1_1radians__coll__graph.png b/structmrs__lib_1_1geometry_1_1radians__coll__graph.png new file mode 100644 index 00000000..2d011a10 Binary files /dev/null and b/structmrs__lib_1_1geometry_1_1radians__coll__graph.png differ diff --git a/structmrs__lib_1_1geometry_1_1radians__inherit__graph.map b/structmrs__lib_1_1geometry_1_1radians__inherit__graph.map new file mode 100644 index 00000000..6a66dec7 --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1radians__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1geometry_1_1radians__inherit__graph.md5 b/structmrs__lib_1_1geometry_1_1radians__inherit__graph.md5 new file mode 100644 index 00000000..9f1cae10 --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1radians__inherit__graph.md5 @@ -0,0 +1 @@ +461a7a6829dba785d161f3c0a460464d \ No newline at end of file diff --git a/structmrs__lib_1_1geometry_1_1radians__inherit__graph.png b/structmrs__lib_1_1geometry_1_1radians__inherit__graph.png new file mode 100644 index 00000000..2d011a10 Binary files /dev/null and b/structmrs__lib_1_1geometry_1_1radians__inherit__graph.png differ diff --git a/structmrs__lib_1_1geometry_1_1sdegrees-members.html b/structmrs__lib_1_1geometry_1_1sdegrees-members.html new file mode 100644 index 00000000..8a256a5e --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1sdegrees-members.html @@ -0,0 +1,138 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::geometry::sdegrees Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::geometry::sdegrees, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    convert(const cyclic &what)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    convert() constmrs_lib::geometry::cyclic< double, sdegrees >inline
    cyclic()mrs_lib::geometry::cyclic< double, sdegrees >inline
    cyclic(const double val)mrs_lib::geometry::cyclic< double, sdegrees >inline
    cyclic(const cyclic &other)mrs_lib::geometry::cyclic< double, sdegrees >inline
    cyclic(const sdegrees &other)mrs_lib::geometry::cyclic< double, sdegrees >inline
    diff(const double minuend, const double subtrahend)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    diff(const cyclic minuend, const cyclic subtrahend) (defined in mrs_lib::geometry::cyclic< double, sdegrees >)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    dist(const double from, const double to)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    dist(const cyclic from, const cyclic to) (defined in mrs_lib::geometry::cyclic< double, sdegrees >)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    half_rangemrs_lib::geometry::cyclic< double, sdegrees >static
    inRange(const double val)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    interp(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    interp(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, sdegrees >)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    interpUnwrapped(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    interpUnwrapped(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, sdegrees >)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    minimum (defined in mrs_lib::geometry::sdegrees)mrs_lib::geometry::sdegreesstatic
    operator+=(const cyclic &other)mrs_lib::geometry::cyclic< double, sdegrees >inline
    operator-=(const cyclic &other)mrs_lib::geometry::cyclic< double, sdegrees >inline
    operator=(const double nval)mrs_lib::geometry::cyclic< double, sdegrees >inline
    operator=(const cyclic &other)mrs_lib::geometry::cyclic< double, sdegrees >inline
    operator=(cyclic &&other)mrs_lib::geometry::cyclic< double, sdegrees >inline
    pdist(const double from, const double to)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    pdist(const cyclic from, const cyclic to) (defined in mrs_lib::geometry::cyclic< double, sdegrees >)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    pinterp(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    pinterp(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, sdegrees >)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    pinterpUnwrapped(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    pinterpUnwrapped(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, sdegrees >)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    rangemrs_lib::geometry::cyclic< double, sdegrees >static
    supremum (defined in mrs_lib::geometry::sdegrees)mrs_lib::geometry::sdegreesstatic
    unwrap(const double what, const double from)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    val (defined in mrs_lib::geometry::cyclic< double, sdegrees >)mrs_lib::geometry::cyclic< double, sdegrees >protected
    value() constmrs_lib::geometry::cyclic< double, sdegrees >inline
    wrap(const double val)mrs_lib::geometry::cyclic< double, sdegrees >inlinestatic
    +
    + + + + diff --git a/structmrs__lib_1_1geometry_1_1sdegrees.html b/structmrs__lib_1_1geometry_1_1sdegrees.html new file mode 100644 index 00000000..e86c811f --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1sdegrees.html @@ -0,0 +1,260 @@ + + + + + + + +mrs_lib: mrs_lib::geometry::sdegrees Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::geometry::sdegrees Struct Reference
    +
    +
    + +

    Convenience specialization of the cyclic class for signed degrees (from $-180$ to $180$). + More...

    + +

    #include <cyclic.h>

    +
    + + Inheritance diagram for mrs_lib::geometry::sdegrees:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::geometry::sdegrees:
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Static Public Attributes

    +static constexpr double minimum = -180
     
    +static constexpr double supremum = 180
     
    - Static Public Attributes inherited from mrs_lib::geometry::cyclic< double, sdegrees >
    +static constexpr double minimum
     Minimum of the valid interval of wrapped values $ m $.
     
    +static constexpr double supremum
     Supremum of the valid interval of wrapped values $ s $.
     
    +static constexpr double range
     Range of the valid interval of wrapped values $ r $ (also the period of the cyclic quantity).
     
    +static constexpr double half_range
     Half of the range of the valid interval of wrapped values $ r/2 $ (used for some calculations).
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Member Functions inherited from mrs_lib::geometry::cyclic< double, sdegrees >
     cyclic ()
     Default constructor. More...
     
     cyclic (const double val)
     Constructor overload. More...
     
     cyclic (const cyclic &other)
     Copy constructor. More...
     
     cyclic (const sdegrees &other)
     Copy constructor. More...
     
    double value () const
     Getter for val. More...
     
    other_t convert () const
     Conversion between two different circular quantities. More...
     
    cyclicoperator= (const double nval)
     Assignment operator. More...
     
    cyclicoperator= (const cyclic &other)
     Assignment operator. More...
     
    cyclicoperator= (cyclic &&other)
     Move operator. More...
     
    cyclicoperator+= (const cyclic &other)
     Addition compound operator. More...
     
    cyclicoperator-= (const cyclic &other)
     Subtraction compound operator. More...
     
    - Static Public Member Functions inherited from mrs_lib::geometry::cyclic< double, sdegrees >
    static bool inRange (const double val)
     Checks if val is within the valid interval of wrapped values. More...
     
    static double wrap (const double val)
     Returns val, converted to the valid interval of values. More...
     
    static double unwrap (const double what, const double from)
     Returns value of the parameter what modified so that there is no "jump" between from and \t what. More...
     
    static double pdist (const double from, const double to)
     Returns length of the shortest walk in the positive direction from the first parameter to the second one. More...
     
    +static double pdist (const cyclic from, const cyclic to)
     
    static double diff (const double minuend, const double subtrahend)
     Returns the difference between the two circular values. More...
     
    +static double diff (const cyclic minuend, const cyclic subtrahend)
     
    static double dist (const double from, const double to)
     Returns the distance between the two circular values. More...
     
    +static double dist (const cyclic from, const cyclic to)
     
    static double interpUnwrapped (const double from, const double to, const double coeff)
     Interpolation between two circular quantities without wrapping of the result. More...
     
    +static double interpUnwrapped (const cyclic from, const cyclic to, const double coeff)
     
    static double interp (const double from, const double to, const double coeff)
     Interpolation between two circular quantities. More...
     
    +static double interp (const cyclic from, const cyclic to, const double coeff)
     
    static double pinterpUnwrapped (const double from, const double to, const double coeff)
     Interpolation between two circular quantities in the positive direction without wrapping of the result. More...
     
    +static double pinterpUnwrapped (const cyclic from, const cyclic to, const double coeff)
     
    static double pinterp (const double from, const double to, const double coeff)
     Interpolation between two circular quantities in the positive direction. More...
     
    +static double pinterp (const cyclic from, const cyclic to, const double coeff)
     
    static other_t convert (const cyclic &what)
     Conversion between two different circular quantities. More...
     
    - Protected Attributes inherited from mrs_lib::geometry::cyclic< double, sdegrees >
    +double val
     
    +

    Detailed Description

    +

    Convenience specialization of the cyclic class for signed degrees (from $-180$ to $180$).

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1geometry_1_1sdegrees__coll__graph.map b/structmrs__lib_1_1geometry_1_1sdegrees__coll__graph.map new file mode 100644 index 00000000..08feefa4 --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1sdegrees__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1geometry_1_1sdegrees__coll__graph.md5 b/structmrs__lib_1_1geometry_1_1sdegrees__coll__graph.md5 new file mode 100644 index 00000000..6edc85f6 --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1sdegrees__coll__graph.md5 @@ -0,0 +1 @@ +69f5bcb801b87cbbb5f73c549300da1e \ No newline at end of file diff --git a/structmrs__lib_1_1geometry_1_1sdegrees__coll__graph.png b/structmrs__lib_1_1geometry_1_1sdegrees__coll__graph.png new file mode 100644 index 00000000..e94b87da Binary files /dev/null and b/structmrs__lib_1_1geometry_1_1sdegrees__coll__graph.png differ diff --git a/structmrs__lib_1_1geometry_1_1sdegrees__inherit__graph.map b/structmrs__lib_1_1geometry_1_1sdegrees__inherit__graph.map new file mode 100644 index 00000000..08feefa4 --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1sdegrees__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1geometry_1_1sdegrees__inherit__graph.md5 b/structmrs__lib_1_1geometry_1_1sdegrees__inherit__graph.md5 new file mode 100644 index 00000000..6edc85f6 --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1sdegrees__inherit__graph.md5 @@ -0,0 +1 @@ +69f5bcb801b87cbbb5f73c549300da1e \ No newline at end of file diff --git a/structmrs__lib_1_1geometry_1_1sdegrees__inherit__graph.png b/structmrs__lib_1_1geometry_1_1sdegrees__inherit__graph.png new file mode 100644 index 00000000..e94b87da Binary files /dev/null and b/structmrs__lib_1_1geometry_1_1sdegrees__inherit__graph.png differ diff --git a/structmrs__lib_1_1geometry_1_1sradians-members.html b/structmrs__lib_1_1geometry_1_1sradians-members.html new file mode 100644 index 00000000..6114912c --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1sradians-members.html @@ -0,0 +1,138 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::geometry::sradians Member List
    +
    +
    + +

    This is the complete list of members for mrs_lib::geometry::sradians, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    convert(const cyclic &what)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    convert() constmrs_lib::geometry::cyclic< double, sradians >inline
    cyclic()mrs_lib::geometry::cyclic< double, sradians >inline
    cyclic(const double val)mrs_lib::geometry::cyclic< double, sradians >inline
    cyclic(const cyclic &other)mrs_lib::geometry::cyclic< double, sradians >inline
    cyclic(const sradians &other)mrs_lib::geometry::cyclic< double, sradians >inline
    diff(const double minuend, const double subtrahend)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    diff(const cyclic minuend, const cyclic subtrahend) (defined in mrs_lib::geometry::cyclic< double, sradians >)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    dist(const double from, const double to)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    dist(const cyclic from, const cyclic to) (defined in mrs_lib::geometry::cyclic< double, sradians >)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    half_rangemrs_lib::geometry::cyclic< double, sradians >static
    inRange(const double val)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    interp(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    interp(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, sradians >)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    interpUnwrapped(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    interpUnwrapped(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, sradians >)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    minimum (defined in mrs_lib::geometry::sradians)mrs_lib::geometry::sradiansstatic
    operator+=(const cyclic &other)mrs_lib::geometry::cyclic< double, sradians >inline
    operator-=(const cyclic &other)mrs_lib::geometry::cyclic< double, sradians >inline
    operator=(const double nval)mrs_lib::geometry::cyclic< double, sradians >inline
    operator=(const cyclic &other)mrs_lib::geometry::cyclic< double, sradians >inline
    operator=(cyclic &&other)mrs_lib::geometry::cyclic< double, sradians >inline
    pdist(const double from, const double to)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    pdist(const cyclic from, const cyclic to) (defined in mrs_lib::geometry::cyclic< double, sradians >)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    pinterp(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    pinterp(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, sradians >)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    pinterpUnwrapped(const double from, const double to, const double coeff)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    pinterpUnwrapped(const cyclic from, const cyclic to, const double coeff) (defined in mrs_lib::geometry::cyclic< double, sradians >)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    rangemrs_lib::geometry::cyclic< double, sradians >static
    supremum (defined in mrs_lib::geometry::sradians)mrs_lib::geometry::sradiansstatic
    unwrap(const double what, const double from)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    val (defined in mrs_lib::geometry::cyclic< double, sradians >)mrs_lib::geometry::cyclic< double, sradians >protected
    value() constmrs_lib::geometry::cyclic< double, sradians >inline
    wrap(const double val)mrs_lib::geometry::cyclic< double, sradians >inlinestatic
    +
    + + + + diff --git a/structmrs__lib_1_1geometry_1_1sradians.html b/structmrs__lib_1_1geometry_1_1sradians.html new file mode 100644 index 00000000..93b38536 --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1sradians.html @@ -0,0 +1,262 @@ + + + + + + + +mrs_lib: mrs_lib::geometry::sradians Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::geometry::sradians Struct Reference
    +
    +
    + +

    Convenience specialization of the cyclic class for signed radians (from $-\pi$ to $\pi$). + More...

    + +

    #include <cyclic.h>

    +
    + + Inheritance diagram for mrs_lib::geometry::sradians:
    +
    +
    + +
    + + Collaboration diagram for mrs_lib::geometry::sradians:
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Static Public Attributes

    +static constexpr double minimum = -M_PI
     
    +static constexpr double supremum = M_PI
     
    - Static Public Attributes inherited from mrs_lib::geometry::cyclic< double, sradians >
    +static constexpr double minimum
     Minimum of the valid interval of wrapped values $ m $.
     
    +static constexpr double supremum
     Supremum of the valid interval of wrapped values $ s $.
     
    +static constexpr double range
     Range of the valid interval of wrapped values $ r $ (also the period of the cyclic quantity).
     
    +static constexpr double half_range
     Half of the range of the valid interval of wrapped values $ r/2 $ (used for some calculations).
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Member Functions inherited from mrs_lib::geometry::cyclic< double, sradians >
     cyclic ()
     Default constructor. More...
     
     cyclic (const double val)
     Constructor overload. More...
     
     cyclic (const cyclic &other)
     Copy constructor. More...
     
     cyclic (const sradians &other)
     Copy constructor. More...
     
    double value () const
     Getter for val. More...
     
    other_t convert () const
     Conversion between two different circular quantities. More...
     
    cyclicoperator= (const double nval)
     Assignment operator. More...
     
    cyclicoperator= (const cyclic &other)
     Assignment operator. More...
     
    cyclicoperator= (cyclic &&other)
     Move operator. More...
     
    cyclicoperator+= (const cyclic &other)
     Addition compound operator. More...
     
    cyclicoperator-= (const cyclic &other)
     Subtraction compound operator. More...
     
    - Static Public Member Functions inherited from mrs_lib::geometry::cyclic< double, sradians >
    static bool inRange (const double val)
     Checks if val is within the valid interval of wrapped values. More...
     
    static double wrap (const double val)
     Returns val, converted to the valid interval of values. More...
     
    static double unwrap (const double what, const double from)
     Returns value of the parameter what modified so that there is no "jump" between from and \t what. More...
     
    static double pdist (const double from, const double to)
     Returns length of the shortest walk in the positive direction from the first parameter to the second one. More...
     
    +static double pdist (const cyclic from, const cyclic to)
     
    static double diff (const double minuend, const double subtrahend)
     Returns the difference between the two circular values. More...
     
    +static double diff (const cyclic minuend, const cyclic subtrahend)
     
    static double dist (const double from, const double to)
     Returns the distance between the two circular values. More...
     
    +static double dist (const cyclic from, const cyclic to)
     
    static double interpUnwrapped (const double from, const double to, const double coeff)
     Interpolation between two circular quantities without wrapping of the result. More...
     
    +static double interpUnwrapped (const cyclic from, const cyclic to, const double coeff)
     
    static double interp (const double from, const double to, const double coeff)
     Interpolation between two circular quantities. More...
     
    +static double interp (const cyclic from, const cyclic to, const double coeff)
     
    static double pinterpUnwrapped (const double from, const double to, const double coeff)
     Interpolation between two circular quantities in the positive direction without wrapping of the result. More...
     
    +static double pinterpUnwrapped (const cyclic from, const cyclic to, const double coeff)
     
    static double pinterp (const double from, const double to, const double coeff)
     Interpolation between two circular quantities in the positive direction. More...
     
    +static double pinterp (const cyclic from, const cyclic to, const double coeff)
     
    static other_t convert (const cyclic &what)
     Conversion between two different circular quantities. More...
     
    - Protected Attributes inherited from mrs_lib::geometry::cyclic< double, sradians >
    +double val
     
    +

    Detailed Description

    +

    Convenience specialization of the cyclic class for signed radians (from $-\pi$ to $\pi$).

    +
    Examples
    geometry/cyclic_example.cpp.
    +
    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1geometry_1_1sradians__coll__graph.map b/structmrs__lib_1_1geometry_1_1sradians__coll__graph.map new file mode 100644 index 00000000..8b08057f --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1sradians__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1geometry_1_1sradians__coll__graph.md5 b/structmrs__lib_1_1geometry_1_1sradians__coll__graph.md5 new file mode 100644 index 00000000..eb5e336f --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1sradians__coll__graph.md5 @@ -0,0 +1 @@ +fde4a2604bda82e0f997e8f3cfaf9404 \ No newline at end of file diff --git a/structmrs__lib_1_1geometry_1_1sradians__coll__graph.png b/structmrs__lib_1_1geometry_1_1sradians__coll__graph.png new file mode 100644 index 00000000..cd1a623d Binary files /dev/null and b/structmrs__lib_1_1geometry_1_1sradians__coll__graph.png differ diff --git a/structmrs__lib_1_1geometry_1_1sradians__inherit__graph.map b/structmrs__lib_1_1geometry_1_1sradians__inherit__graph.map new file mode 100644 index 00000000..8b08057f --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1sradians__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmrs__lib_1_1geometry_1_1sradians__inherit__graph.md5 b/structmrs__lib_1_1geometry_1_1sradians__inherit__graph.md5 new file mode 100644 index 00000000..eb5e336f --- /dev/null +++ b/structmrs__lib_1_1geometry_1_1sradians__inherit__graph.md5 @@ -0,0 +1 @@ +fde4a2604bda82e0f997e8f3cfaf9404 \ No newline at end of file diff --git a/structmrs__lib_1_1geometry_1_1sradians__inherit__graph.png b/structmrs__lib_1_1geometry_1_1sradians__inherit__graph.png new file mode 100644 index 00000000..cd1a623d Binary files /dev/null and b/structmrs__lib_1_1geometry_1_1sradians__inherit__graph.png differ diff --git a/structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t-members.html b/structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t-members.html new file mode 100644 index 00000000..eb681062 --- /dev/null +++ b/structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t-members.html @@ -0,0 +1,107 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    mrs_lib::quadratic_throttle_model::MotorParams_t Member List
    +
    + +
    + + + + diff --git a/structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t.html b/structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t.html new file mode 100644 index 00000000..5902ec7d --- /dev/null +++ b/structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t.html @@ -0,0 +1,121 @@ + + + + + + + +mrs_lib: mrs_lib::quadratic_throttle_model::MotorParams_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    mrs_lib::quadratic_throttle_model::MotorParams_t Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    +double A
     
    +double B
     
    +int n_motors
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t.js b/structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t.js new file mode 100644 index 00000000..60e81349 --- /dev/null +++ b/structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t.js @@ -0,0 +1,6 @@ +var structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t = +[ + [ "A", "structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t.html#aeed28b8e587ddfda609cf66935c7267e", null ], + [ "B", "structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t.html#ac94138c9d8fc8a364941024bbc7650b3", null ], + [ "n_motors", "structmrs__lib_1_1quadratic__throttle__model_1_1MotorParams__t.html#a8ed1e7a5a1c5acca1444d3de59cb83e6", null ] +]; \ No newline at end of file diff --git a/structobj__t-members.html b/structobj__t-members.html new file mode 100644 index 00000000..5319415f --- /dev/null +++ b/structobj__t-members.html @@ -0,0 +1,124 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    obj_t Member List
    +
    +
    + +

    This is the complete list of members for obj_t, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + +
    avg_dt_err_s (defined in obj_t)obj_t
    callback(const ros::Time &last_update) (defined in obj_t)obj_tinline
    callback(const ros::TimerEvent &evt) (defined in obj_t)obj_tinline
    cbk_not_running (defined in obj_t)obj_t
    cbk_running (defined in obj_t)obj_t
    cbk_running (defined in obj_t)obj_t
    cbk_running_mtx (defined in obj_t)obj_t
    cbks_in_time (defined in obj_t)obj_t
    cbks_ok (defined in obj_t)obj_t
    check_dt_err (defined in obj_t)obj_t
    desired_dt (defined in obj_t)obj_t
    max_dt_err_s (defined in obj_t)obj_t
    max_expected_dt_err_s (defined in obj_t)obj_t
    mtx (defined in obj_t)obj_t
    n_cbks (defined in obj_t)obj_t
    null_cbk (defined in obj_t)obj_t
    obj_t(const ros::Duration &desired_dt, const ros::Duration &max_expected_dt_err) (defined in obj_t)obj_tinline
    r (defined in obj_t)obj_t
    set_timeout_id(mrs_lib::TimeoutManager::timeout_id_t new_timeout_id) (defined in obj_t)obj_tinline
    timeout_id (defined in obj_t)obj_t
    +
    + + + + diff --git a/structobj__t.html b/structobj__t.html new file mode 100644 index 00000000..2f839246 --- /dev/null +++ b/structobj__t.html @@ -0,0 +1,176 @@ + + + + + + + +mrs_lib: obj_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    obj_t Struct Reference
    +
    +
    + + + + + + + + + + +

    +Public Member Functions

    obj_t (const ros::Duration &desired_dt, const ros::Duration &max_expected_dt_err)
     
    +void set_timeout_id (mrs_lib::TimeoutManager::timeout_id_t new_timeout_id)
     
    +void callback (const ros::Time &last_update)
     
    +void callback (const ros::TimerEvent &evt)
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +std::mutex mtx
     
    +int n_cbks = 0
     
    +bool null_cbk = false
     
    +bool cbk_not_running = false
     
    +std::atomic_bool cbk_running = false
     
    +double max_dt_err_s = 0.0
     
    +double avg_dt_err_s = 0.0
     
    +bool check_dt_err = false
     
    +ros::Duration desired_dt
     
    +double max_expected_dt_err_s
     
    +mrs_lib::TimeoutManager::timeout_id_t timeout_id
     
    +ros::Rate r = ros::Rate(50.0)
     
    +bool cbks_in_time = true
     
    +bool cbks_ok = true
     
    +std::mutex cbk_running_mtx
     
    +std::atomic< bool > cbk_running = false
     
    +
    The documentation for this struct was generated from the following file:
      +
    • test/timeout_manager/test.cpp
    • +
    +
    +
    + + + + diff --git a/structobj__t.js b/structobj__t.js new file mode 100644 index 00000000..339b846f --- /dev/null +++ b/structobj__t.js @@ -0,0 +1,23 @@ +var structobj__t = +[ + [ "obj_t", "structobj__t.html#ae665f687754e0c21a9481f731b1140c0", null ], + [ "callback", "structobj__t.html#a5e0225095a080c24d639ac69bd76e642", null ], + [ "callback", "structobj__t.html#a7bc5903a6c67f5357c9165f02397516b", null ], + [ "set_timeout_id", "structobj__t.html#a739d7a31c4aaec46e6e833e9c635b28a", null ], + [ "avg_dt_err_s", "structobj__t.html#aad0d6cd5b788d2219466acce5902e812", null ], + [ "cbk_not_running", "structobj__t.html#aa3df20c1db5a58e9863ce7d0c57b9c47", null ], + [ "cbk_running", "structobj__t.html#a95c61d5d1b2e290294535388eed67883", null ], + [ "cbk_running", "structobj__t.html#a7d8d04844773296d3e1fc0936d4e6977", null ], + [ "cbk_running_mtx", "structobj__t.html#aae522b83048c71a51a47f120e5d295dc", null ], + [ "cbks_in_time", "structobj__t.html#a3b618588ff7cf0efa10bcc5b87266247", null ], + [ "cbks_ok", "structobj__t.html#aa62bb73d1d20b1e47d25efff2a402169", null ], + [ "check_dt_err", "structobj__t.html#a24d261ceae096dbead4a249d52fb195e", null ], + [ "desired_dt", "structobj__t.html#a1a2aeae5f8bdde7f65acfd4a0054d134", null ], + [ "max_dt_err_s", "structobj__t.html#aa6d9ee19be6d6b18ddeae5785d6bc12a", null ], + [ "max_expected_dt_err_s", "structobj__t.html#aa928cfe75f9cd52c96137bc0b736bff0", null ], + [ "mtx", "structobj__t.html#ac07a0989a31d1815bb24b51c0901f2b4", null ], + [ "n_cbks", "structobj__t.html#ad379d320a4bf80fb874492fa96f80e09", null ], + [ "null_cbk", "structobj__t.html#a851f76bd033dd4b3799b151ec4bda0fc", null ], + [ "r", "structobj__t.html#a0250294ebf35cd4c6347fd1194c69df2", null ], + [ "timeout_id", "structobj__t.html#aee3cfe702d12b3e2d7c64e93a1d4eca9", null ] +]; \ No newline at end of file diff --git a/structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4-members.html b/structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4-members.html new file mode 100644 index 00000000..5bc5685a --- /dev/null +++ b/structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    std::tuple_element< 0, mrs_lib::AttitudeConverter > Member List
    +
    +
    + +

    This is the complete list of members for std::tuple_element< 0, mrs_lib::AttitudeConverter >, including all inherited members.

    + + +
    type typedef (defined in std::tuple_element< 0, mrs_lib::AttitudeConverter >)std::tuple_element< 0, mrs_lib::AttitudeConverter >
    +
    + + + + diff --git a/structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4.html b/structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4.html new file mode 100644 index 00000000..4901d4e6 --- /dev/null +++ b/structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: std::tuple_element< 0, mrs_lib::AttitudeConverter > Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    std::tuple_element< 0, mrs_lib::AttitudeConverter > Struct Reference
    +
    +
    + + + + +

    +Public Types

    +using type = double
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4.js b/structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4.js new file mode 100644 index 00000000..653e810d --- /dev/null +++ b/structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4.js @@ -0,0 +1,4 @@ +var structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4 = +[ + [ "type", "structstd_1_1tuple__element_3_010_00_01mrs__lib_1_1AttitudeConverter_01_4.html#a3387de57fff88b3f8e5758b4c969cdcb", null ] +]; \ No newline at end of file diff --git a/structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4-members.html b/structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4-members.html new file mode 100644 index 00000000..effb843f --- /dev/null +++ b/structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    std::tuple_element< 1, mrs_lib::AttitudeConverter > Member List
    +
    +
    + +

    This is the complete list of members for std::tuple_element< 1, mrs_lib::AttitudeConverter >, including all inherited members.

    + + +
    type typedef (defined in std::tuple_element< 1, mrs_lib::AttitudeConverter >)std::tuple_element< 1, mrs_lib::AttitudeConverter >
    +
    + + + + diff --git a/structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4.html b/structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4.html new file mode 100644 index 00000000..0a3daa04 --- /dev/null +++ b/structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: std::tuple_element< 1, mrs_lib::AttitudeConverter > Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    std::tuple_element< 1, mrs_lib::AttitudeConverter > Struct Reference
    +
    +
    + + + + +

    +Public Types

    +using type = double
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4.js b/structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4.js new file mode 100644 index 00000000..bd4465e1 --- /dev/null +++ b/structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4.js @@ -0,0 +1,4 @@ +var structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4 = +[ + [ "type", "structstd_1_1tuple__element_3_011_00_01mrs__lib_1_1AttitudeConverter_01_4.html#a1780696fccc9e4639b3272e9837076b0", null ] +]; \ No newline at end of file diff --git a/structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4-members.html b/structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4-members.html new file mode 100644 index 00000000..b61e6b67 --- /dev/null +++ b/structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    std::tuple_element< 2, mrs_lib::AttitudeConverter > Member List
    +
    +
    + +

    This is the complete list of members for std::tuple_element< 2, mrs_lib::AttitudeConverter >, including all inherited members.

    + + +
    type typedef (defined in std::tuple_element< 2, mrs_lib::AttitudeConverter >)std::tuple_element< 2, mrs_lib::AttitudeConverter >
    +
    + + + + diff --git a/structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4.html b/structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4.html new file mode 100644 index 00000000..186a6c4f --- /dev/null +++ b/structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: std::tuple_element< 2, mrs_lib::AttitudeConverter > Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    std::tuple_element< 2, mrs_lib::AttitudeConverter > Struct Reference
    +
    +
    + + + + +

    +Public Types

    +using type = double
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4.js b/structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4.js new file mode 100644 index 00000000..bf59def3 --- /dev/null +++ b/structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4.js @@ -0,0 +1,4 @@ +var structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4 = +[ + [ "type", "structstd_1_1tuple__element_3_012_00_01mrs__lib_1_1AttitudeConverter_01_4.html#a2fca6607bbe082969b9cf24ca7905739", null ] +]; \ No newline at end of file diff --git a/structstd_1_1tuple__size_3_01mrs__lib_1_1AttitudeConverter_01_4-members.html b/structstd_1_1tuple__size_3_01mrs__lib_1_1AttitudeConverter_01_4-members.html new file mode 100644 index 00000000..7e7b338c --- /dev/null +++ b/structstd_1_1tuple__size_3_01mrs__lib_1_1AttitudeConverter_01_4-members.html @@ -0,0 +1,105 @@ + + + + + + + +mrs_lib: Member List + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    std::tuple_size< mrs_lib::AttitudeConverter > Member List
    +
    +
    + +

    This is the complete list of members for std::tuple_size< mrs_lib::AttitudeConverter >, including all inherited members.

    + + +
    value (defined in std::tuple_size< mrs_lib::AttitudeConverter >)std::tuple_size< mrs_lib::AttitudeConverter >static
    +
    + + + + diff --git a/structstd_1_1tuple__size_3_01mrs__lib_1_1AttitudeConverter_01_4.html b/structstd_1_1tuple__size_3_01mrs__lib_1_1AttitudeConverter_01_4.html new file mode 100644 index 00000000..ec957321 --- /dev/null +++ b/structstd_1_1tuple__size_3_01mrs__lib_1_1AttitudeConverter_01_4.html @@ -0,0 +1,115 @@ + + + + + + + +mrs_lib: std::tuple_size< mrs_lib::AttitudeConverter > Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    std::tuple_size< mrs_lib::AttitudeConverter > Struct Reference
    +
    +
    + + + + +

    +Static Public Attributes

    +static constexpr int value = 3
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/subscribe__handler_2example_8cpp.html b/subscribe__handler_2example_8cpp.html new file mode 100644 index 00000000..e427928e --- /dev/null +++ b/subscribe__handler_2example_8cpp.html @@ -0,0 +1,163 @@ + + + + + + + +mrs_lib: src/subscribe_handler/example.cpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    example.cpp File Reference
    +
    +
    + +

    Example file for the SubscribeHandler convenience class. +More...

    +
    #include <mrs_lib/subscribe_handler.h>
    +#include <mrs_lib/impl/subscribe_handler.hpp>
    +#include <std_msgs/String.h>
    +
    + + Include dependency graph for example.cpp:
    +
    +
    + +
    + + + +

    +Classes

    class  SubObject
     
    + + + + + + + +

    +Functions

    +void timeout_callback (const std::string &topic_name, const ros::Time &last_msg)
     
    +void message_callback (const std_msgs::String::ConstPtr msg)
     
    +int main (int argc, char **argv)
     
    + + + +

    +Variables

    +class SubObject sub_obj
     
    +

    Detailed Description

    +

    Example file for the SubscribeHandler convenience class.

    +
    Author
    Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +

    This example may be run after building mrs_lib by executing rosrun mrs_lib subscribe_handler_example.

    +

    See subscribe_handler/example.cpp.

    +
    +
    + + + + diff --git a/subscribe__handler_2example_8cpp.js b/subscribe__handler_2example_8cpp.js new file mode 100644 index 00000000..3373b152 --- /dev/null +++ b/subscribe__handler_2example_8cpp.js @@ -0,0 +1,8 @@ +var subscribe__handler_2example_8cpp = +[ + [ "SubObject", "classSubObject.html", "classSubObject" ], + [ "main", "subscribe__handler_2example_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627", null ], + [ "message_callback", "subscribe__handler_2example_8cpp.html#a24622b7a9c364e5304d136fb7517ba25", null ], + [ "timeout_callback", "subscribe__handler_2example_8cpp.html#aeef8c1f6cb88fff39120645123fb0061", null ], + [ "sub_obj", "subscribe__handler_2example_8cpp.html#aeac2f2d0a7c6cf5d1a3d27230238086f", null ] +]; \ No newline at end of file diff --git a/subscribe__handler_2example_8cpp__incl.map b/subscribe__handler_2example_8cpp__incl.map new file mode 100644 index 00000000..9e59747c --- /dev/null +++ b/subscribe__handler_2example_8cpp__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/subscribe__handler_2example_8cpp__incl.md5 b/subscribe__handler_2example_8cpp__incl.md5 new file mode 100644 index 00000000..48f2cdec --- /dev/null +++ b/subscribe__handler_2example_8cpp__incl.md5 @@ -0,0 +1 @@ +48016e67af04aee12e9ccc8960777491 \ No newline at end of file diff --git a/subscribe__handler_2example_8cpp__incl.png b/subscribe__handler_2example_8cpp__incl.png new file mode 100644 index 00000000..7b037cac Binary files /dev/null and b/subscribe__handler_2example_8cpp__incl.png differ diff --git a/subscribe__handler_8h.html b/subscribe__handler_8h.html new file mode 100644 index 00000000..b0564e6b --- /dev/null +++ b/subscribe__handler_8h.html @@ -0,0 +1,182 @@ + + + + + + + +mrs_lib: include/mrs_lib/subscribe_handler.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    subscribe_handler.h File Reference
    +
    +
    + +

    Defines SubscribeHandler and related convenience classes for subscribing to ROS topics. +More...

    +
    #include <ros/ros.h>
    +#include <mrs_lib/timeout_manager.h>
    +#include <mrs_lib/impl/subscribe_handler.hpp>
    +
    + + Include dependency graph for subscribe_handler.h:
    +
    +
    + +
    + + This graph shows which files directly or indirectly include this file:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Classes

    struct  mrs_lib::SubscribeHandlerOptions
     A helper class to simplify setup of SubscribeHandler construction. This class is passed to the SubscribeHandler constructor and specifies its common options. More...
     
    class  mrs_lib::SubscribeHandler< MessageType >
     The main class for ROS topic subscription, message timeout handling etc. More...
     
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    + + + + + +

    +Typedefs

    +template<typename SubscribeHandler >
    using mrs_lib::message_type = typename SubscribeHandler::message_type
     Helper alias for convenient extraction of handled message type from a SubscribeHandlerPtr.
     
    + + + + + +

    +Functions

    template<typename Class , class ... Types>
    void mrs_lib::construct_object (Class &object, Types ... args)
     Helper function for object construstion e.g. in case of member objects. This function is useful to avoid specifying object template parameters twice - once in definition of the variable and second time during object construction. This function can deduce the template parameters from the type of the already defined object, because it returns the newly constructed object as a reference argument and not as a return type. More...
     
    +

    Detailed Description

    +

    Defines SubscribeHandler and related convenience classes for subscribing to ROS topics.

    +
    Author
    Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +
    +
    + + + + diff --git a/subscribe__handler_8h.js b/subscribe__handler_8h.js new file mode 100644 index 00000000..ed7f27a0 --- /dev/null +++ b/subscribe__handler_8h.js @@ -0,0 +1,7 @@ +var subscribe__handler_8h = +[ + [ "SubscribeHandlerOptions", "structmrs__lib_1_1SubscribeHandlerOptions.html", "structmrs__lib_1_1SubscribeHandlerOptions" ], + [ "SubscribeHandler", "classmrs__lib_1_1SubscribeHandler.html", "classmrs__lib_1_1SubscribeHandler" ], + [ "message_type", "subscribe__handler_8h.html#afe10d9f91cc2173fa3c30021514a5c12", null ], + [ "construct_object", "subscribe__handler_8h.html#a6bd2a4b1c7a370ecf5abcb082d68f02f", null ] +]; \ No newline at end of file diff --git a/subscribe__handler_8h__dep__incl.map b/subscribe__handler_8h__dep__incl.map new file mode 100644 index 00000000..88cbc3c8 --- /dev/null +++ b/subscribe__handler_8h__dep__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/subscribe__handler_8h__dep__incl.md5 b/subscribe__handler_8h__dep__incl.md5 new file mode 100644 index 00000000..3c0579a2 --- /dev/null +++ b/subscribe__handler_8h__dep__incl.md5 @@ -0,0 +1 @@ +9b28763189bc9c2ba8f5774ea37e58d1 \ No newline at end of file diff --git a/subscribe__handler_8h__dep__incl.png b/subscribe__handler_8h__dep__incl.png new file mode 100644 index 00000000..1f9ccd53 Binary files /dev/null and b/subscribe__handler_8h__dep__incl.png differ diff --git a/subscribe__handler_8h__incl.map b/subscribe__handler_8h__incl.map new file mode 100644 index 00000000..08e21f4d --- /dev/null +++ b/subscribe__handler_8h__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/subscribe__handler_8h__incl.md5 b/subscribe__handler_8h__incl.md5 new file mode 100644 index 00000000..6df1b921 --- /dev/null +++ b/subscribe__handler_8h__incl.md5 @@ -0,0 +1 @@ +ef6070599d5504a5778bcca341dd9026 \ No newline at end of file diff --git a/subscribe__handler_8h__incl.png b/subscribe__handler_8h__incl.png new file mode 100644 index 00000000..f4729dca Binary files /dev/null and b/subscribe__handler_8h__incl.png differ diff --git a/subscribe__handler_8h_source.html b/subscribe__handler_8h_source.html new file mode 100644 index 00000000..3a99b023 --- /dev/null +++ b/subscribe__handler_8h_source.html @@ -0,0 +1,408 @@ + + + + + + + +mrs_lib: include/mrs_lib/subscribe_handler.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    subscribe_handler.h
    +
    +
    +Go to the documentation of this file.
    1 // clang: MatousFormat
    +
    7 #ifndef SUBRSCRIBE_HANDLER_H
    +
    8 #define SUBRSCRIBE_HANDLER_H
    +
    9 
    +
    10 #include <ros/ros.h>
    + +
    12 
    +
    13 namespace mrs_lib
    +
    14 {
    +
    15 
    +
    16  static const ros::Duration no_timeout = ros::Duration(0);
    +
    17 
    +
    18  /* struct SubscribeHandlerOptions //{ */
    +
    19 
    + +
    30  {
    +
    31  SubscribeHandlerOptions(const ros::NodeHandle& nh) : nh(nh) {}
    +
    32  SubscribeHandlerOptions() = default;
    +
    33 
    +
    34  ros::NodeHandle nh;
    +
    36  std::string node_name = {};
    +
    38  std::string topic_name = {};
    +
    40  std::shared_ptr<mrs_lib::TimeoutManager> timeout_manager = nullptr;
    +
    42  ros::Duration no_message_timeout = mrs_lib::no_timeout;
    +
    44  std::function<void(const std::string& topic_name, const ros::Time& last_msg)> timeout_callback = {};
    +
    46  bool threadsafe = true;
    +
    48  bool autostart = true;
    +
    50  uint32_t queue_size = 3;
    +
    52  ros::TransportHints transport_hints = ros::TransportHints();
    +
    53  };
    +
    54 
    +
    55  //}
    +
    56 
    +
    57  /* SubscribeHandler class //{ */
    +
    79  template <typename MessageType>
    + +
    81  {
    +
    82  public:
    +
    86  using message_type = MessageType;
    +
    87 
    +
    91  using timeout_callback_t = std::function<void(const std::string& topic_name, const ros::Time& last_msg)>;
    +
    92 
    +
    96  using message_callback_t = std::function<void(typename MessageType::ConstPtr)>;
    +
    97 
    +
    98  public:
    +
    106  virtual typename MessageType::ConstPtr getMsg() {assert(m_pimpl); return m_pimpl->getMsg();};
    +
    107 
    +
    113  virtual typename MessageType::ConstPtr peekMsg() const {assert(m_pimpl); return m_pimpl->peekMsg();};
    +
    114 
    +
    120  virtual bool hasMsg() const {assert(m_pimpl); return m_pimpl->hasMsg();};
    +
    121 
    +
    127  virtual bool newMsg() const {assert(m_pimpl); return m_pimpl->newMsg();};
    +
    128 
    +
    134  virtual bool usedMsg() const {assert(m_pimpl); return m_pimpl->usedMsg();};
    +
    135 
    +
    141  virtual typename MessageType::ConstPtr waitForNew(const ros::WallDuration& timeout) {assert(m_pimpl); return m_pimpl->waitForNew(timeout);};
    +
    142 
    +
    148  virtual ros::Time lastMsgTime() const {assert(m_pimpl); return m_pimpl->lastMsgTime();};
    +
    149 
    +
    155  virtual std::string topicName() const {assert(m_pimpl); return m_pimpl->topicName();};
    +
    156 
    +
    162  virtual std::string subscribedTopicName() const {assert(m_pimpl); return m_pimpl->m_topic_name;};
    +
    163 
    +
    170  virtual void start() {assert(m_pimpl); return m_pimpl->start();};
    +
    171 
    +
    178  virtual void stop() {assert(m_pimpl); return m_pimpl->stop();};
    +
    179 
    +
    180  public:
    + +
    188 
    +
    197  template<class ... Types>
    + +
    199  const SubscribeHandlerOptions& options,
    +
    200  const std::string& topic_name,
    +
    201  Types ... args
    +
    202  )
    +
    203  :
    + +
    205  [options, topic_name]()
    +
    206  {
    +
    207  SubscribeHandlerOptions opts = options;
    +
    208  opts.topic_name = topic_name;
    +
    209  return opts;
    +
    210  }(),
    +
    211  args...
    +
    212  )
    +
    213  {
    +
    214  }
    +
    215 
    + +
    224  const SubscribeHandlerOptions& options,
    +
    225  const message_callback_t& message_callback = {}
    +
    226  )
    +
    227  {
    +
    228  if (options.threadsafe)
    +
    229  {
    +
    230  m_pimpl = std::make_unique<ImplThreadsafe>
    +
    231  (
    +
    232  options,
    +
    233  message_callback
    +
    234  );
    +
    235  }
    +
    236  else
    +
    237  {
    +
    238  m_pimpl = std::make_unique<Impl>
    +
    239  (
    +
    240  options,
    +
    241  message_callback
    +
    242  );
    +
    243  }
    +
    244  if (options.autostart)
    +
    245  start();
    +
    246  };
    +
    247 
    +
    256  template <class ... Types>
    + +
    258  const SubscribeHandlerOptions& options,
    +
    259  const timeout_callback_t& timeout_callback,
    +
    260  Types ... args
    +
    261  )
    +
    262  :
    + +
    264  [options, timeout_callback]()
    +
    265  {
    +
    266  SubscribeHandlerOptions opts = options;
    +
    267  opts.timeout_callback = timeout_callback;
    +
    268  return opts;
    +
    269  }(),
    +
    270  args...
    +
    271  )
    +
    272  {
    +
    273  }
    +
    274 
    +
    284  template <class ObjectType1, class ... Types>
    + +
    286  const SubscribeHandlerOptions& options,
    +
    287  void (ObjectType1::*const timeout_callback) (const std::string& topic_name, const ros::Time& last_msg),
    +
    288  ObjectType1* const obj1,
    +
    289  Types ... args
    +
    290  )
    +
    291  :
    + +
    293  [options, timeout_callback, obj1]()
    +
    294  {
    +
    295  SubscribeHandlerOptions opts = options;
    +
    296  opts.timeout_callback = timeout_callback == nullptr ? timeout_callback_t() : std::bind(timeout_callback, obj1, std::placeholders::_1, std::placeholders::_2);
    +
    297  return opts;
    +
    298  }(),
    +
    299  args...
    +
    300  )
    +
    301  {
    +
    302  }
    +
    303 
    +
    313  template <class ObjectType2, class ... Types>
    + +
    315  const SubscribeHandlerOptions& options,
    +
    316  void (ObjectType2::*const message_callback) (typename MessageType::ConstPtr),
    +
    317  ObjectType2* const obj2,
    +
    318  Types ... args
    +
    319  )
    +
    320  :
    + +
    322  options,
    +
    323  message_callback == nullptr ? message_callback_t() : std::bind(message_callback, obj2, std::placeholders::_1),
    +
    324  args...
    +
    325  )
    +
    326  {
    +
    327  }
    +
    328 
    +
    340  template <class ObjectType1, class ObjectType2, class ... Types>
    + +
    342  const SubscribeHandlerOptions& options,
    +
    343  void (ObjectType2::*const message_callback) (typename MessageType::ConstPtr),
    +
    344  ObjectType2* const obj2,
    +
    345  void (ObjectType1::*const timeout_callback) (const std::string& topic_name, const ros::Time& last_msg),
    +
    346  ObjectType1* const obj1,
    +
    347  Types ... args
    +
    348  )
    +
    349  :
    + +
    351  [options, timeout_callback, obj1]()
    +
    352  {
    +
    353  SubscribeHandlerOptions opts = options;
    +
    354  opts.timeout_callback = timeout_callback == nullptr ? timeout_callback_t() : std::bind(timeout_callback, obj1, std::placeholders::_1, std::placeholders::_2);
    +
    355  return opts;
    +
    356  }(),
    +
    357  message_callback == nullptr ? message_callback_t() : std::bind(message_callback, obj2, std::placeholders::_1),
    +
    358  args...
    +
    359  )
    +
    360  {
    +
    361  }
    +
    362 
    +
    371  template<class ... Types>
    + +
    373  const SubscribeHandlerOptions& options,
    +
    374  const ros::Duration& no_message_timeout,
    +
    375  Types ... args
    +
    376  )
    +
    377  :
    + +
    379  [options, no_message_timeout]()
    +
    380  {
    +
    381  SubscribeHandlerOptions opts = options;
    +
    382  opts.no_message_timeout = no_message_timeout;
    +
    383  return opts;
    +
    384  }(),
    +
    385  args...
    +
    386  )
    +
    387  {
    +
    388  }
    +
    389 
    +
    398  template <class ... Types>
    + +
    400  const SubscribeHandlerOptions& options,
    +
    401  mrs_lib::TimeoutManager& timeout_manager,
    +
    402  Types ... args
    +
    403  )
    +
    404  :
    + +
    406  options,
    +
    407  timeout_manager = timeout_manager,
    +
    408  args...
    +
    409  )
    +
    410  {
    +
    411  }
    +
    412 
    +
    413  ~SubscribeHandler() = default;
    +
    414  // delete copy constructor and assignment operator (forbid copying shandlers)
    +
    415  SubscribeHandler(const SubscribeHandler&) = delete;
    +
    416  SubscribeHandler& operator=(const SubscribeHandler&) = delete;
    +
    417  // define only move constructor and assignemnt operator
    + +
    419  {
    +
    420  this->m_pimpl = std::move(other.m_pimpl);
    +
    421  other.m_pimpl = nullptr;
    +
    422  }
    +
    423  SubscribeHandler& operator=(SubscribeHandler&& other)
    +
    424  {
    +
    425  this->m_pimpl = std::move(other.m_pimpl);
    +
    426  other.m_pimpl = nullptr;
    +
    427  return *this;
    +
    428  }
    +
    429 
    +
    430  private:
    +
    431  class Impl;
    +
    432  class ImplThreadsafe;
    +
    433  std::unique_ptr<Impl> m_pimpl;
    +
    434  };
    +
    435  //}
    +
    436 
    +
    440  template<typename SubscribeHandler>
    + +
    442 
    +
    452  template<typename Class, class ... Types>
    + +
    454  Class& object,
    +
    455  Types ... args
    +
    456  )
    +
    457  {
    +
    458  object = Class(args...);
    +
    459  }
    +
    460 }
    +
    461 
    +
    462 #include <mrs_lib/impl/subscribe_handler.hpp>
    +
    463 
    +
    464 #endif // SUBRSCRIBE_HANDLER_H
    +
    +
    +
    uint32_t queue_size
    This parameter is passed to the NodeHandle when subscribing to the topic.
    Definition: subscribe_handler.h:50
    +
    virtual bool hasMsg() const
    Used to check whether at least one message has been received on the handled topic.
    Definition: subscribe_handler.h:120
    +
    SubscribeHandler(const SubscribeHandlerOptions &options, const timeout_callback_t &timeout_callback, Types ... args)
    Convenience constructor overload.
    Definition: subscribe_handler.h:257
    +
    MessageType message_type
    Convenience type for the template parameter to enable nice aliasing.
    Definition: subscribe_handler.h:86
    +
    std::function< void(const std::string &topic_name, const ros::Time &last_msg)> timeout_callback_t
    Type for the timeout callback function.
    Definition: subscribe_handler.h:91
    +
    std::shared_ptr< mrs_lib::TimeoutManager > timeout_manager
    Will be used for handling message timouts if necessary. If no manager is specified,...
    Definition: subscribe_handler.h:40
    +
    virtual bool usedMsg() const
    Used to check whether getMsg() was called at least once on this SubscribeHandler.
    Definition: subscribe_handler.h:134
    +
    ros::TransportHints transport_hints
    This parameter is passed to the NodeHandle when subscribing to the topic.
    Definition: subscribe_handler.h:52
    +
    A helper class to simplify setup of SubscribeHandler construction. This class is passed to the Subscr...
    Definition: subscribe_handler.h:29
    +
    SubscribeHandler(const SubscribeHandlerOptions &options, void(ObjectType2::*const message_callback)(typename MessageType::ConstPtr), ObjectType2 *const obj2, Types ... args)
    Convenience constructor overload.
    Definition: subscribe_handler.h:314
    +
    virtual void stop()
    Disables the callbacks for the handled topic.
    Definition: subscribe_handler.h:178
    +
    SubscribeHandler(const SubscribeHandlerOptions &options, const std::string &topic_name, Types ... args)
    Main constructor.
    Definition: subscribe_handler.h:198
    +
    virtual MessageType::ConstPtr getMsg()
    Returns the last received message on the topic, handled by this SubscribeHandler. Use hasMsg() first ...
    Definition: subscribe_handler.h:106
    +
    SubscribeHandler(const SubscribeHandlerOptions &options, void(ObjectType2::*const message_callback)(typename MessageType::ConstPtr), ObjectType2 *const obj2, void(ObjectType1::*const timeout_callback)(const std::string &topic_name, const ros::Time &last_msg), ObjectType1 *const obj1, Types ... args)
    Convenience constructor overload.
    Definition: subscribe_handler.h:341
    +
    virtual void start()
    Enables the callbacks for the handled topic.
    Definition: subscribe_handler.h:170
    +
    The main class for ROS topic subscription, message timeout handling etc.
    Definition: subscribe_handler.h:80
    + +
    ros::Duration no_message_timeout
    If no new message is received for this duration, the timeout_callback function will be called....
    Definition: subscribe_handler.h:42
    +
    virtual MessageType::ConstPtr waitForNew(const ros::WallDuration &timeout)
    Blocks until new data becomes available or until the timeout runs out or until a spurious wake-up.
    Definition: subscribe_handler.h:141
    +
    typename SubscribeHandler::message_type message_type
    Helper alias for convenient extraction of handled message type from a SubscribeHandlerPtr.
    Definition: subscribe_handler.h:441
    +
    SubscribeHandler()
    Default constructor to avoid having to use pointers.
    Definition: subscribe_handler.h:187
    +
    std::string node_name
    Name of the ROS node, using this handle (used for messages printed to console).
    Definition: subscribe_handler.h:36
    +
    SubscribeHandler(const SubscribeHandlerOptions &options, void(ObjectType1::*const timeout_callback)(const std::string &topic_name, const ros::Time &last_msg), ObjectType1 *const obj1, Types ... args)
    Convenience constructor overload.
    Definition: subscribe_handler.h:285
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    virtual MessageType::ConstPtr peekMsg() const
    Returns the last received message on the topic without modifying the newMsg() or usedMsg() flags.
    Definition: subscribe_handler.h:113
    +
    std::function< void(const std::string &topic_name, const ros::Time &last_msg)> timeout_callback
    This function will be called if no new message is received for the no_message_timeout duration....
    Definition: subscribe_handler.h:44
    +
    TODO.
    Definition: timeout_manager.h:19
    +
    SubscribeHandler(const SubscribeHandlerOptions &options, const message_callback_t &message_callback={})
    Convenience constructor overload.
    Definition: subscribe_handler.h:223
    +
    virtual std::string topicName() const
    Returns the resolved (full) name of the topic, handled by this SubscribeHandler.
    Definition: subscribe_handler.h:155
    +
    std::string topic_name
    Name of the ROS topic to be handled.
    Definition: subscribe_handler.h:38
    +
    std::function< void(typename MessageType::ConstPtr)> message_callback_t
    Convenience type for the message callback function.
    Definition: subscribe_handler.h:96
    +
    virtual std::string subscribedTopicName() const
    Returns the subscribed (unresolved) name of the topic, handled by this SubscribeHandler.
    Definition: subscribe_handler.h:162
    +
    virtual bool newMsg() const
    Used to check whether at least one message has been received on the handled topic since the last call...
    Definition: subscribe_handler.h:127
    +
    bool threadsafe
    If true, all methods of the SubscribeHandler will be mutexed (using a recursive mutex) to avoid data ...
    Definition: subscribe_handler.h:46
    +
    ros::NodeHandle nh
    The ROS NodeHandle to be used for subscription.
    Definition: subscribe_handler.h:34
    +
    SubscribeHandler(const SubscribeHandlerOptions &options, mrs_lib::TimeoutManager &timeout_manager, Types ... args)
    Convenience constructor overload.
    Definition: subscribe_handler.h:399
    +
    SubscribeHandler(const SubscribeHandlerOptions &options, const ros::Duration &no_message_timeout, Types ... args)
    Convenience constructor overload.
    Definition: subscribe_handler.h:372
    +
    virtual ros::Time lastMsgTime() const
    Returns time of the last received message on the topic, handled by this SubscribeHandler.
    Definition: subscribe_handler.h:148
    +
    void construct_object(Class &object, Types ... args)
    Helper function for object construstion e.g. in case of member objects. This function is useful to av...
    Definition: subscribe_handler.h:453
    +
    bool autostart
    If true, the SubscribeHandler will be started after construction. Otherwise it has to be started usin...
    Definition: subscribe_handler.h:48
    + + + + diff --git a/subscribe__handler_8hpp_source.html b/subscribe__handler_8hpp_source.html new file mode 100644 index 00000000..16374735 --- /dev/null +++ b/subscribe__handler_8hpp_source.html @@ -0,0 +1,457 @@ + + + + + + + +mrs_lib: include/mrs_lib/impl/subscribe_handler.hpp Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    subscribe_handler.hpp
    +
    +
    +
    1 // clang: MatousFormat
    +
    2 
    +
    3 #ifndef SUBSCRIBE_HANDLER_HPP
    +
    4 #define SUBSCRIBE_HANDLER_HPP
    +
    5 
    + +
    7 #include <mrs_lib/timer.h>
    +
    8 #include <mutex>
    +
    9 #include <condition_variable>
    +
    10 
    +
    11 namespace mrs_lib
    +
    12 {
    +
    13  /* SubscribeHandler::Impl class //{ */
    +
    14  // implements the constructor, getMsg() method and data_callback method (non-thread-safe)
    +
    15  template <typename MessageType>
    +
    16  class SubscribeHandler<MessageType>::Impl
    +
    17  {
    +
    18  public:
    +
    19  using timeout_callback_t = typename SubscribeHandler<MessageType>::timeout_callback_t;
    +
    20  using message_callback_t = typename SubscribeHandler<MessageType>::message_callback_t;
    +
    21  using data_callback_t = std::function<void(const typename MessageType::ConstPtr&)>;
    +
    22 
    +
    23  private:
    +
    24  friend class SubscribeHandler<MessageType>;
    +
    25 
    +
    26  public:
    +
    27  /* constructor //{ */
    +
    28  Impl(const SubscribeHandlerOptions& options, const message_callback_t& message_callback = message_callback_t())
    +
    29  : m_nh(options.nh),
    +
    30  m_topic_name(options.topic_name),
    +
    31  m_node_name(options.node_name),
    +
    32  m_got_data(false),
    +
    33  m_new_data(false),
    +
    34  m_used_data(false),
    +
    35  m_timeout_manager(options.timeout_manager),
    +
    36  m_latest_message_time(0),
    +
    37  m_latest_message(nullptr),
    +
    38  m_message_callback(message_callback),
    +
    39  m_queue_size(options.queue_size),
    +
    40  m_transport_hints(options.transport_hints)
    +
    41  {
    +
    42  if (options.no_message_timeout != mrs_lib::no_timeout)
    +
    43  {
    +
    44  // initialize a new TimeoutManager if not provided by the user
    +
    45  if (!m_timeout_manager)
    +
    46  m_timeout_manager = std::make_shared<mrs_lib::TimeoutManager>(m_nh, ros::Rate(2.0/options.no_message_timeout.toSec()));
    +
    47 
    +
    48  // initialize the callback for the TimeoutManager
    +
    49  std::function<void(const ros::Time&)> timeout_mgr_callback;
    +
    50  if (options.timeout_callback)
    +
    51  timeout_mgr_callback = std::bind(options.timeout_callback, topicName(), std::placeholders::_1);
    +
    52  else
    +
    53  timeout_mgr_callback = std::bind(&Impl::default_timeout_callback, this, topicName(), std::placeholders::_1);
    +
    54 
    +
    55  // register the timeout callback with the TimeoutManager
    +
    56  m_timeout_id = m_timeout_manager->registerNew(options.no_message_timeout, timeout_mgr_callback);
    +
    57  }
    +
    58 
    +
    59  const std::string msg = "Subscribed to topic '" + m_topic_name + "' -> '" + topicName() + "'";
    +
    60  if (m_node_name.empty())
    +
    61  ROS_INFO_STREAM(msg);
    +
    62  else
    +
    63  ROS_INFO_STREAM("[" << m_node_name << "]: " << msg);
    +
    64  }
    +
    65  //}
    +
    66 
    +
    67  virtual ~Impl() = default;
    +
    68 
    +
    69  public:
    +
    70  /* getMsg() method //{ */
    +
    71  virtual typename MessageType::ConstPtr getMsg()
    +
    72  {
    +
    73  m_new_data = false;
    +
    74  m_used_data = true;
    +
    75  return peekMsg();
    +
    76  }
    +
    77  //}
    +
    78 
    +
    79  /* peekMsg() method //{ */
    +
    80  virtual typename MessageType::ConstPtr peekMsg() const
    +
    81  {
    +
    82  /* assert(m_got_data); */
    +
    83  /* if (!m_got_data) */
    +
    84  /* ROS_ERROR("[%s]: No data received yet from topic '%s' (forgot to check hasMsg()?)! Returning empty message.", m_node_name.c_str(), */
    +
    85  /* topicName().c_str()); */
    +
    86  return m_latest_message;
    +
    87  }
    +
    88  //}
    +
    89 
    +
    90  /* hasMsg() method //{ */
    +
    91  virtual bool hasMsg() const
    +
    92  {
    +
    93  return m_got_data;
    +
    94  }
    +
    95  //}
    +
    96 
    +
    97  /* newMsg() method //{ */
    +
    98  virtual bool newMsg() const
    +
    99  {
    +
    100  return m_new_data;
    +
    101  }
    +
    102  //}
    +
    103 
    +
    104  /* usedMsg() method //{ */
    +
    105  virtual bool usedMsg() const
    +
    106  {
    +
    107  return m_used_data;
    +
    108  }
    +
    109  //}
    +
    110 
    +
    111  /* waitForNew() method //{ */
    +
    112  virtual typename MessageType::ConstPtr waitForNew(const ros::WallDuration& timeout)
    +
    113  {
    +
    114  // convert the ros type to chrono type
    +
    115  const std::chrono::duration<float> chrono_timeout(timeout.toSec());
    +
    116  // lock the mutex guarding the m_new_data flag
    +
    117  std::unique_lock lock(m_new_data_mtx);
    +
    118  // if new data is available, return immediately, otherwise attempt to wait for new data using the respective condition variable
    +
    119  if (m_new_data)
    +
    120  return getMsg();
    +
    121  else if (m_new_data_cv.wait_for(lock, chrono_timeout) == std::cv_status::no_timeout && m_new_data)
    +
    122  return getMsg();
    +
    123  else
    +
    124  return nullptr;
    +
    125  };
    +
    126  //}
    +
    127 
    +
    128  /* lastMsgTime() method //{ */
    +
    129  virtual ros::Time lastMsgTime() const
    +
    130  {
    +
    131  return m_latest_message_time;
    +
    132  };
    +
    133  //}
    +
    134 
    +
    135  /* topicName() method //{ */
    +
    136  virtual std::string topicName() const
    +
    137  {
    +
    138  std::string ret = m_sub.getTopic();
    +
    139  if (ret.empty())
    +
    140  ret = m_nh.resolveName(m_topic_name);
    +
    141  return ret;
    +
    142  }
    +
    143  //}
    +
    144 
    +
    145  /* start() method //{ */
    +
    146  virtual void start()
    +
    147  {
    +
    148  if (m_timeout_manager)
    +
    149  m_timeout_manager->start(m_timeout_id);
    +
    150  m_sub = m_nh.subscribe(m_topic_name, m_queue_size, &Impl::data_callback, this, m_transport_hints);
    +
    151  }
    +
    152  //}
    +
    153 
    +
    154  /* stop() method //{ */
    +
    155  virtual void stop()
    +
    156  {
    +
    157  if (m_timeout_manager)
    +
    158  m_timeout_manager->pause(m_timeout_id);
    +
    159  m_sub.shutdown();
    +
    160  }
    +
    161  //}
    +
    162 
    +
    163  protected:
    +
    164  ros::NodeHandle m_nh;
    +
    165  ros::Subscriber m_sub;
    +
    166 
    +
    167  protected:
    +
    168  std::string m_topic_name;
    +
    169  std::string m_node_name;
    +
    170 
    +
    171  protected:
    +
    172  bool m_got_data; // whether any data was received
    +
    173 
    +
    174  mutable std::mutex m_new_data_mtx;
    +
    175  mutable std::condition_variable m_new_data_cv;
    +
    176  bool m_new_data; // whether new data was received since last call to get_data
    +
    177 
    +
    178  bool m_used_data; // whether get_data was successfully called at least once
    +
    179 
    +
    180  protected:
    +
    181  std::shared_ptr<mrs_lib::TimeoutManager> m_timeout_manager;
    +
    182  mrs_lib::TimeoutManager::timeout_id_t m_timeout_id;
    +
    183 
    +
    184  protected:
    +
    185  ros::Time m_latest_message_time;
    +
    186  typename MessageType::ConstPtr m_latest_message;
    +
    187  message_callback_t m_message_callback;
    +
    188 
    +
    189  private:
    +
    190  uint32_t m_queue_size;
    +
    191  ros::TransportHints m_transport_hints;
    +
    192 
    +
    193  protected:
    +
    194  /* default_timeout_callback() method //{ */
    +
    195  void default_timeout_callback(const std::string& topic_name, const ros::Time& last_msg)
    +
    196  {
    +
    197  const ros::Duration since_msg = (ros::Time::now() - last_msg);
    +
    198  const auto n_pubs = m_sub.getNumPublishers();
    +
    199  const std::string txt = "Did not receive any message from topic '" + topic_name + "' for " + std::to_string(since_msg.toSec()) + "s ("
    +
    200  + std::to_string(n_pubs) + " publishers on this topic)";
    +
    201  if (m_node_name.empty())
    +
    202  ROS_WARN_STREAM(txt);
    +
    203  else
    +
    204  ROS_WARN_STREAM("[" << m_node_name << "]: " << txt);
    +
    205  }
    +
    206  //}
    +
    207 
    +
    208  /* process_new_message() method //{ */
    +
    209  void process_new_message(const typename MessageType::ConstPtr& msg)
    +
    210  {
    +
    211  m_latest_message_time = ros::Time::now();
    +
    212  m_latest_message = msg;
    +
    213  // If the message callback is registered, the new data will immediately be processed,
    +
    214  // so reset the flag. Otherwise, set the flag.
    +
    215  m_new_data = !m_message_callback;
    +
    216  m_got_data = true;
    +
    217  m_new_data_cv.notify_one();
    +
    218  }
    +
    219  //}
    +
    220 
    +
    221  /* data_callback() method //{ */
    +
    222  virtual void data_callback(const typename MessageType::ConstPtr& msg)
    +
    223  {
    +
    224  {
    +
    225  std::lock_guard lck(m_new_data_mtx);
    +
    226  if (m_timeout_manager)
    +
    227  m_timeout_manager->reset(m_timeout_id);
    +
    228  process_new_message(msg);
    +
    229  }
    +
    230 
    +
    231  // execute the callback after unlocking the mutex to enable multi-threaded callback execution
    +
    232  if (m_message_callback)
    +
    233  m_message_callback(msg);
    +
    234  }
    +
    235  //}
    +
    236  };
    +
    237  //}
    +
    238 
    +
    239  /* SubscribeHandler_threadsafe class //{ */
    +
    240  template <typename MessageType>
    +
    241  class SubscribeHandler<MessageType>::ImplThreadsafe : public SubscribeHandler<MessageType>::Impl
    +
    242  {
    +
    243  private:
    + +
    245 
    +
    246  public:
    +
    247  using timeout_callback_t = typename impl_class_t::timeout_callback_t;
    +
    248  using message_callback_t = typename impl_class_t::message_callback_t;
    +
    249 
    +
    250  friend class SubscribeHandler<MessageType>;
    +
    251 
    +
    252  public:
    +
    253  ImplThreadsafe(const SubscribeHandlerOptions& options, const message_callback_t& message_callback = message_callback_t())
    +
    254  : impl_class_t::Impl(options, message_callback)
    +
    255  {
    +
    256  }
    +
    257 
    +
    258  public:
    +
    259  virtual bool hasMsg() const override
    +
    260  {
    +
    261  std::lock_guard lck(m_mtx);
    +
    262  return impl_class_t::hasMsg();
    +
    263  }
    +
    264  virtual bool newMsg() const override
    +
    265  {
    +
    266  std::lock_guard lck(m_mtx);
    +
    267  return impl_class_t::newMsg();
    +
    268  }
    +
    269  virtual bool usedMsg() const override
    +
    270  {
    +
    271  std::lock_guard lck(m_mtx);
    +
    272  return impl_class_t::usedMsg();
    +
    273  }
    +
    274  virtual typename MessageType::ConstPtr getMsg() override
    +
    275  {
    +
    276  std::lock_guard lck(m_mtx);
    +
    277  return impl_class_t::getMsg();
    +
    278  }
    +
    279  virtual typename MessageType::ConstPtr peekMsg() const override
    +
    280  {
    +
    281  std::lock_guard lck(m_mtx);
    +
    282  return impl_class_t::peekMsg();
    +
    283  }
    +
    284  virtual ros::Time lastMsgTime() const override
    +
    285  {
    +
    286  std::lock_guard lck(m_mtx);
    +
    287  return impl_class_t::lastMsgTime();
    +
    288  };
    +
    289  virtual std::string topicName() const override
    +
    290  {
    +
    291  std::lock_guard lck(m_mtx);
    +
    292  return impl_class_t::topicName();
    +
    293  };
    +
    294  virtual void start() override
    +
    295  {
    +
    296  std::lock_guard lck(m_mtx);
    +
    297  return impl_class_t::start();
    +
    298  }
    +
    299  virtual void stop() override
    +
    300  {
    +
    301  std::lock_guard lck(m_mtx);
    +
    302  return impl_class_t::stop();
    +
    303  }
    +
    304 
    +
    305  virtual ~ImplThreadsafe() override = default;
    +
    306 
    +
    307  protected:
    +
    308  virtual void data_callback(const typename MessageType::ConstPtr& msg) override
    +
    309  {
    +
    310  {
    +
    311  std::scoped_lock lck(m_mtx, this->m_new_data_mtx);
    +
    312  if (this->m_timeout_manager)
    +
    313  this->m_timeout_manager->reset(this->m_timeout_id);
    +
    314  impl_class_t::process_new_message(msg);
    +
    315  }
    +
    316 
    +
    317  // execute the callback after unlocking the mutex to enable multi-threaded callback execution
    +
    318  if (this->m_message_callback)
    +
    319  impl_class_t::m_message_callback(msg);
    +
    320  }
    +
    321 
    +
    322  private:
    +
    323  mutable std::recursive_mutex m_mtx;
    +
    324  };
    +
    325  //}
    +
    326 
    +
    327 } // namespace mrs_lib
    +
    328 
    +
    329 #endif // SUBSCRIBE_HANDLER_HPP
    +
    +
    +
    uint32_t queue_size
    This parameter is passed to the NodeHandle when subscribing to the topic.
    Definition: subscribe_handler.h:50
    +
    virtual bool hasMsg() const
    Used to check whether at least one message has been received on the handled topic.
    Definition: subscribe_handler.h:120
    +
    std::shared_ptr< mrs_lib::TimeoutManager > timeout_manager
    Will be used for handling message timouts if necessary. If no manager is specified,...
    Definition: subscribe_handler.h:40
    +
    std::function< void(const std::string &topic_name, const ros::Time &last_msg)> timeout_callback_t
    Type for the timeout callback function.
    Definition: subscribe_handler.h:91
    +
    virtual bool usedMsg() const
    Used to check whether getMsg() was called at least once on this SubscribeHandler.
    Definition: subscribe_handler.h:134
    +
    ros::TransportHints transport_hints
    This parameter is passed to the NodeHandle when subscribing to the topic.
    Definition: subscribe_handler.h:52
    +
    A helper class to simplify setup of SubscribeHandler construction. This class is passed to the Subscr...
    Definition: subscribe_handler.h:29
    +
    virtual void stop()
    Disables the callbacks for the handled topic.
    Definition: subscribe_handler.h:178
    +
    Defines SubscribeHandler and related convenience classes for subscribing to ROS topics.
    +
    virtual MessageType::ConstPtr getMsg()
    Returns the last received message on the topic, handled by this SubscribeHandler. Use hasMsg() first ...
    Definition: subscribe_handler.h:106
    +
    virtual void start()
    Enables the callbacks for the handled topic.
    Definition: subscribe_handler.h:170
    +
    The main class for ROS topic subscription, message timeout handling etc.
    Definition: subscribe_handler.h:80
    +
    ros::Duration no_message_timeout
    If no new message is received for this duration, the timeout_callback function will be called....
    Definition: subscribe_handler.h:42
    +
    virtual MessageType::ConstPtr waitForNew(const ros::WallDuration &timeout)
    Blocks until new data becomes available or until the timeout runs out or until a spurious wake-up.
    Definition: subscribe_handler.h:141
    +
    Definition: subscribe_handler.hpp:16
    +
    std::string node_name
    Name of the ROS node, using this handle (used for messages printed to console).
    Definition: subscribe_handler.h:36
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    virtual MessageType::ConstPtr peekMsg() const
    Returns the last received message on the topic without modifying the newMsg() or usedMsg() flags.
    Definition: subscribe_handler.h:113
    +
    std::function< void(const std::string &topic_name, const ros::Time &last_msg)> timeout_callback
    This function will be called if no new message is received for the no_message_timeout duration....
    Definition: subscribe_handler.h:44
    +
    virtual std::string topicName() const
    Returns the resolved (full) name of the topic, handled by this SubscribeHandler.
    Definition: subscribe_handler.h:155
    +
    std::string topic_name
    Name of the ROS topic to be handled.
    Definition: subscribe_handler.h:38
    +
    std::function< void(typename MessageType::ConstPtr)> message_callback_t
    Convenience type for the message callback function.
    Definition: subscribe_handler.h:96
    +
    virtual bool newMsg() const
    Used to check whether at least one message has been received on the handled topic since the last call...
    Definition: subscribe_handler.h:127
    +
    ros::NodeHandle nh
    The ROS NodeHandle to be used for subscription.
    Definition: subscribe_handler.h:34
    +
    virtual ros::Time lastMsgTime() const
    Returns time of the last received message on the topic, handled by this SubscribeHandler.
    Definition: subscribe_handler.h:148
    +
    Definition: subscribe_handler.hpp:241
    + + + + diff --git a/subscribe_handler_2example_8cpp-example.html b/subscribe_handler_2example_8cpp-example.html new file mode 100644 index 00000000..c4cc9a50 --- /dev/null +++ b/subscribe_handler_2example_8cpp-example.html @@ -0,0 +1,190 @@ + + + + + + + +mrs_lib: subscribe_handler/example.cpp + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    subscribe_handler/example.cpp
    +
    +
    +

    This example may be run after building mrs_lib by executing rosrun mrs_lib subscribe_handler_example.

    +
    // clang: MatousFormat
    +
    // Include the SubscribeHandler header
    + +
    #include <mrs_lib/impl/subscribe_handler.hpp>
    +
    #include <std_msgs/String.h>
    +
    +
    void timeout_callback(const std::string& topic_name, const ros::Time& last_msg)
    +
    {
    +
    ROS_ERROR_STREAM("Have not received a message on topic '" << topic_name << "' for " << (ros::Time::now() - last_msg).toSec() << " seconds");
    +
    }
    +
    +
    void message_callback(const std_msgs::String::ConstPtr msg)
    +
    {
    +
    ROS_INFO_STREAM("Received: '" << msg->data << "'.");
    +
    }
    +
    +
    class SubObject
    +
    {
    +
    public:
    +
    void callback_method(const std_msgs::String::ConstPtr msg)
    +
    {
    +
    ROS_INFO_STREAM("Object received: '" << msg->data << "'.");
    +
    }
    +
    +
    void timeout_method(const std::string& topic_name, const ros::Time& last_msg)
    +
    {
    +
    ROS_ERROR_STREAM("Object has not received a message on topic '" << topic_name << "' for " << (ros::Time::now()-last_msg).toSec() << " seconds");
    +
    }
    +
    } sub_obj;
    +
    +
    int main(int argc, char **argv)
    +
    {
    +
    /* Set up ROS. */
    +
    const std::string node_name("subscribe_handler_example");
    +
    ros::init(argc, argv, node_name);
    +
    ros::NodeHandle nh;
    +
    +
    /* name of the topic to be handled */
    +
    const std::string topic_name = "test_topic";
    +
    /* after this duration without receiving messages on the handled topic, the timeout_callback will be called */
    +
    const ros::Duration no_message_timeout = ros::Duration(1.0);
    +
    +
    ROS_INFO("[%s]: Creating SubscribeHandlers.", node_name.c_str());
    +
    + +
    shopts.node_name = node_name;
    +
    shopts.no_message_timeout = no_message_timeout;
    +
    +
    /* This is how a new SubscribeHandler object is initialized. */
    + +
    shopts,
    +
    topic_name,
    +
    timeout_callback,
    +
    message_callback
    +
    );
    +
    +
    /* A variation of the factory method for easier use with objects also exists. */
    + +
    handler,
    +
    shopts,
    +
    topic_name,
    +
    no_message_timeout,
    +
    &SubObject::timeout_method, &sub_obj,
    +
    &SubObject::callback_method, &sub_obj
    +
    );
    +
    +
    /* Type of the message may be accessed by C++11 decltype in case of need */
    +
    using message_type = mrs_lib::message_type<decltype(handler)>;
    +
    ros::Publisher pub = nh.advertise<message_type>(topic_name, 5);
    +
    +
    /* Now let's just spin to process calbacks until the user decides to stop the program. */
    +
    ros::Duration d(3.0);
    +
    while (ros::ok())
    +
    {
    + +
    msg.data = "asdf";
    +
    pub.publish(msg);
    +
    ROS_INFO_THROTTLE(1.0, "[%s]: Spinning", ros::this_node::getName().c_str());
    +
    ros::spinOnce();
    +
    d.sleep();
    +
    }
    +
    }
    +
    +
    +
    A helper class to simplify setup of SubscribeHandler construction. This class is passed to the Subscr...
    Definition: subscribe_handler.h:29
    +
    Defines SubscribeHandler and related convenience classes for subscribing to ROS topics.
    +
    The main class for ROS topic subscription, message timeout handling etc.
    Definition: subscribe_handler.h:80
    +
    typename SubscribeHandler::message_type message_type
    Helper alias for convenient extraction of handled message type from a SubscribeHandlerPtr.
    Definition: subscribe_handler.h:441
    +
    Definition: example.cpp:31
    +
    void construct_object(Class &object, Types ... args)
    Helper function for object construstion e.g. in case of member objects. This function is useful to av...
    Definition: subscribe_handler.h:453
    + + + + diff --git a/subscribe_handler_2simple_example_8cpp-example.html b/subscribe_handler_2simple_example_8cpp-example.html new file mode 100644 index 00000000..08c71573 --- /dev/null +++ b/subscribe_handler_2simple_example_8cpp-example.html @@ -0,0 +1,148 @@ + + + + + + + +mrs_lib: subscribe_handler/simple_example.cpp + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    subscribe_handler/simple_example.cpp
    +
    +
    +

    This example may be run after building mrs_lib by executing rosrun mrs_lib subscribe_handler_simple_example.

    +
    // clang: MatousFormat
    +
    // Include the SubscribeHandler header
    + +
    #include <std_msgs/String.h>
    +
    +
    int main(int argc, char **argv)
    +
    {
    +
    /* Set up ROS. */
    +
    const std::string node_name = "subscribe_handler_simple_example";
    +
    ros::init(argc, argv, node_name);
    +
    ros::NodeHandle nh;
    +
    +
    /* Basic configuration of the SubscribeHandler. */
    + +
    shopts.node_name = node_name; //< used for the ROS logging from inside the SubscribeHandler (ROS_INFO, ROS_WARN etc.)
    +
    shopts.no_message_timeout = ros::Duration(3.0); //< SubscribeHandler warns if no messages arrive for this duration
    +
    +
    /* name of the topic to be handled */
    +
    const std::string topic_name = "test_topic";
    +
    +
    /* This is how a new SubscribeHandler object is initialized. */
    + +
    shopts,
    +
    topic_name
    +
    );
    +
    +
    /* Now let's just spin to process calbacks until the user decides to stop the program. */
    +
    ros::Duration d(0.1);
    +
    while (ros::ok())
    +
    {
    +
    ROS_INFO_STREAM_THROTTLE(1.0, "[" << node_name << "]: Spinning");
    +
    ros::spinOnce();
    +
    /* Print out any new messages */
    +
    if (handler.newMsg())
    +
    ROS_INFO_STREAM("[" << node_name << "]: Got a new message: " << handler.getMsg()->data);
    +
    d.sleep();
    +
    }
    +
    }
    +
    +
    +
    +
    A helper class to simplify setup of SubscribeHandler construction. This class is passed to the Subscr...
    Definition: subscribe_handler.h:29
    +
    Defines SubscribeHandler and related convenience classes for subscribing to ROS topics.
    +
    virtual MessageType::ConstPtr getMsg()
    Returns the last received message on the topic, handled by this SubscribeHandler. Use hasMsg() first ...
    Definition: subscribe_handler.h:106
    +
    The main class for ROS topic subscription, message timeout handling etc.
    Definition: subscribe_handler.h:80
    +
    ros::Duration no_message_timeout
    If no new message is received for this duration, the timeout_callback function will be called....
    Definition: subscribe_handler.h:42
    +
    std::string node_name
    Name of the ROS node, using this handle (used for messages printed to console).
    Definition: subscribe_handler.h:36
    +
    virtual bool newMsg() const
    Used to check whether at least one message has been received on the handled topic since the last call...
    Definition: subscribe_handler.h:127
    + + + + diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 00000000..3b443fc6 Binary files /dev/null and b/sync_off.png differ diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 00000000..e08320fb Binary files /dev/null and b/sync_on.png differ diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 00000000..3b725c41 Binary files /dev/null and b/tab_a.png differ diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 00000000..e2b4a863 Binary files /dev/null and b/tab_b.png differ diff --git a/tab_h.png b/tab_h.png new file mode 100644 index 00000000..fd5cb705 Binary files /dev/null and b/tab_h.png differ diff --git a/tab_s.png b/tab_s.png new file mode 100644 index 00000000..ab478c95 Binary files /dev/null and b/tab_s.png differ diff --git a/tabs.css b/tabs.css new file mode 100644 index 00000000..7d45d36c --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/timeout__manager_8h.html b/timeout__manager_8h.html new file mode 100644 index 00000000..65dada34 --- /dev/null +++ b/timeout__manager_8h.html @@ -0,0 +1,152 @@ + + + + + + + +mrs_lib: include/mrs_lib/timeout_manager.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    timeout_manager.h File Reference
    +
    +
    + +

    TODO. +More...

    +
    #include <ros/ros.h>
    +
    + + Include dependency graph for timeout_manager.h:
    +
    +
    + +
    + + This graph shows which files directly or indirectly include this file:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  mrs_lib::TimeoutManager
     TODO. More...
     
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    +

    Detailed Description

    +
    +
    + + + + diff --git a/timeout__manager_8h__dep__incl.map b/timeout__manager_8h__dep__incl.map new file mode 100644 index 00000000..a264f2f5 --- /dev/null +++ b/timeout__manager_8h__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/timeout__manager_8h__dep__incl.md5 b/timeout__manager_8h__dep__incl.md5 new file mode 100644 index 00000000..0d55b00d --- /dev/null +++ b/timeout__manager_8h__dep__incl.md5 @@ -0,0 +1 @@ +488158dca2210dacce13572f6d4d47f6 \ No newline at end of file diff --git a/timeout__manager_8h__dep__incl.png b/timeout__manager_8h__dep__incl.png new file mode 100644 index 00000000..b3f035b5 Binary files /dev/null and b/timeout__manager_8h__dep__incl.png differ diff --git a/timeout__manager_8h__incl.map b/timeout__manager_8h__incl.map new file mode 100644 index 00000000..cd98eab6 --- /dev/null +++ b/timeout__manager_8h__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/timeout__manager_8h__incl.md5 b/timeout__manager_8h__incl.md5 new file mode 100644 index 00000000..73124908 --- /dev/null +++ b/timeout__manager_8h__incl.md5 @@ -0,0 +1 @@ +fe85c21ba0b3cd63446d6b263b813e2e \ No newline at end of file diff --git a/timeout__manager_8h__incl.png b/timeout__manager_8h__incl.png new file mode 100644 index 00000000..8cb676f5 Binary files /dev/null and b/timeout__manager_8h__incl.png differ diff --git a/timeout__manager_8h_source.html b/timeout__manager_8h_source.html new file mode 100644 index 00000000..7bcc4e6a --- /dev/null +++ b/timeout__manager_8h_source.html @@ -0,0 +1,177 @@ + + + + + + + +mrs_lib: include/mrs_lib/timeout_manager.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    timeout_manager.h
    +
    +
    +Go to the documentation of this file.
    1 // clang: MatousFormat
    +
    7 #ifndef TIMEOUT_MANAGER_H
    +
    8 #define TIMEOUT_MANAGER_H
    +
    9 
    +
    10 #include <ros/ros.h>
    +
    11 
    +
    12 namespace mrs_lib
    +
    13 {
    +
    14  /* TimeoutManager class //{ */
    + +
    20  {
    +
    21  public:
    +
    22  // | ---------------------- public types ---------------------- |
    +
    23  using timeout_id_t = size_t;
    +
    24  using callback_t = std::function<void(const ros::Time&)>;
    +
    25 
    +
    26  public:
    +
    27  // | --------------------- public methods --------------------- |
    +
    28 
    +
    33  TimeoutManager(const ros::NodeHandle& nh, const ros::Rate& update_rate);
    +
    34 
    +
    35  timeout_id_t registerNew(const ros::Duration& timeout, const callback_t& callback, const ros::Time& last_reset = ros::Time::now(), const bool oneshot = false, const bool autostart = true);
    +
    36 
    +
    37  void reset(const timeout_id_t id, const ros::Time& time = ros::Time::now());
    +
    38 
    +
    39  void pause(const timeout_id_t id);
    +
    40 
    +
    41  void start(const timeout_id_t id, const ros::Time& time = ros::Time::now());
    +
    42 
    +
    43  void pauseAll();
    +
    44 
    +
    45  void startAll(const ros::Time& time = ros::Time::now());
    +
    46 
    +
    47  void change(const timeout_id_t id, const ros::Duration& timeout, const callback_t& callback, const ros::Time& last_reset = ros::Time::now(), const bool oneshot = false, const bool autostart = true);
    +
    48 
    +
    49  ros::Time lastReset(const timeout_id_t id);
    +
    50 
    +
    51  bool started(const timeout_id_t id);
    +
    52 
    +
    53  /* implementation details //{ */
    +
    54 
    +
    55  private:
    +
    56  // | ---------------------- private types --------------------- |
    +
    57  struct timeout_info_t
    +
    58  {
    +
    59  bool oneshot;
    +
    60  bool started;
    +
    61  callback_t callback;
    +
    62  ros::Duration timeout;
    +
    63  ros::Time last_reset;
    +
    64  ros::Time last_callback;
    +
    65  };
    +
    66 
    +
    67  private:
    +
    68  // | --------------------- private methods -------------------- |
    +
    69  void main_timer_callback([[maybe_unused]] const ros::TimerEvent& evt);
    +
    70 
    +
    71  private:
    +
    72  // | ------------------------- members ------------------------ |
    +
    73  std::recursive_mutex m_mtx;
    +
    74  timeout_id_t m_last_id;
    +
    75  std::vector<timeout_info_t> m_timeouts;
    +
    76 
    +
    77  ros::Timer m_main_timer;
    +
    78 
    +
    79  //}
    +
    80 
    +
    81  };
    +
    82  //}
    +
    83 }
    +
    84 
    +
    85 #endif // TIMEOUT_MANAGER_H
    +
    +
    +
    TimeoutManager(const ros::NodeHandle &nh, const ros::Rate &update_rate)
    TODO.
    Definition: timeout_manager.cpp:6
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    TODO.
    Definition: timeout_manager.h:19
    + + + + diff --git a/timer_8h_source.html b/timer_8h_source.html new file mode 100644 index 00000000..58b9ae00 --- /dev/null +++ b/timer_8h_source.html @@ -0,0 +1,240 @@ + + + + + + + +mrs_lib: include/mrs_lib/timer.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    timer.h
    +
    +
    +
    1 #ifndef MRS_TIMER_H
    +
    2 #define MRS_TIMER_H
    +
    3 
    +
    4 #include <ros/ros.h>
    +
    5 #include <thread>
    +
    6 #include <mutex>
    +
    7 #include <condition_variable>
    +
    8 #include <atomic>
    +
    9 
    +
    10 namespace mrs_lib
    +
    11 {
    +
    12  bool breakable_sleep(const ros::Duration& dur, const std::atomic<bool>& continue_sleep);
    +
    13 
    +
    23  class MRSTimer
    +
    24  {
    +
    25  public:
    +
    26  using callback_t = std::function<void(const ros::TimerEvent&)>;
    +
    27 
    +
    31  virtual void stop() = 0;
    +
    32 
    +
    36  virtual void start() = 0;
    +
    37 
    +
    44  virtual void setPeriod(const ros::Duration& duration, const bool reset = true) = 0;
    +
    45 
    +
    51  virtual bool running() = 0;
    +
    52 
    +
    53  virtual ~MRSTimer() = default;
    +
    54  MRSTimer(const MRSTimer&) = default;
    +
    55  MRSTimer(MRSTimer&&) = default;
    +
    56  MRSTimer& operator=(const MRSTimer&) = default;
    +
    57  MRSTimer& operator=(MRSTimer&&) = default;
    +
    58 
    +
    59  protected:
    +
    60  MRSTimer() = default;
    +
    61  };
    +
    62 
    +
    63  // | ------------------------ ROSTimer ------------------------ |
    +
    64 
    +
    65  /* class ROSTimer //{ */
    +
    66 
    +
    70  class ROSTimer : public MRSTimer {
    +
    71  public:
    +
    72  ROSTimer();
    +
    73 
    +
    85  template <class ObjectType>
    +
    86  ROSTimer(const ros::NodeHandle& nh, const ros::Rate& rate, void (ObjectType::*const callback)(const ros::TimerEvent&), ObjectType* const obj,
    +
    87  const bool oneshot = false, const bool autostart = true);
    +
    88 
    +
    100  template <class ObjectType>
    +
    101  ROSTimer(const ros::NodeHandle& nh, const ros::Duration& duration, void (ObjectType::*const callback)(const ros::TimerEvent&), ObjectType* const obj,
    +
    102  const bool oneshot = false, const bool autostart = true);
    +
    103 
    +
    107  virtual void stop() override;
    +
    108 
    +
    112  virtual void start() override;
    +
    113 
    +
    120  virtual void setPeriod(const ros::Duration& duration, const bool reset = true) override;
    +
    121 
    +
    127  virtual bool running() override;
    +
    128 
    +
    129  virtual ~ROSTimer() override {stop();};
    +
    130  // to keep rule of five since we have a custom destructor
    +
    131  ROSTimer(const ROSTimer&) = delete;
    +
    132  ROSTimer(ROSTimer&&) = delete;
    +
    133  ROSTimer& operator=(const ROSTimer&) = delete;
    +
    134  ROSTimer& operator=(ROSTimer&&) = delete;
    +
    135 
    +
    136  private:
    +
    137  std::mutex mutex_timer_;
    +
    138 
    +
    139  std::unique_ptr<ros::Timer> timer_;
    +
    140  };
    +
    141 
    +
    142  //}
    +
    143 
    +
    144  // | ----------------------- ThreadTimer ---------------------- |
    +
    145 
    +
    146  /* class ThreadTimer //{ */
    +
    147 
    +
    151  class ThreadTimer : public MRSTimer {
    +
    152 
    +
    153  public:
    +
    154  ThreadTimer();
    +
    155 
    +
    167  template <class ObjectType>
    +
    168  ThreadTimer(const ros::NodeHandle& nh, const ros::Rate& rate, void (ObjectType::*const callback)(const ros::TimerEvent&), ObjectType* const obj,
    +
    169  const bool oneshot = false, const bool autostart = true);
    +
    170 
    +
    182  template <class ObjectType>
    +
    183  ThreadTimer(const ros::NodeHandle& nh, const ros::Duration& duration, void (ObjectType::*const callback)(const ros::TimerEvent&), ObjectType* const obj,
    +
    184  bool oneshot = false, const bool autostart = true);
    +
    185 
    +
    191  virtual void stop() override;
    +
    192 
    +
    200  virtual void start() override;
    +
    201 
    +
    210  virtual void setPeriod(const ros::Duration& duration, const bool reset = true) override;
    +
    211 
    +
    217  virtual bool running() override;
    +
    218 
    +
    224  virtual ~ThreadTimer() override {stop();};
    +
    225  // to keep rule of five since we have a custom destructor
    +
    226  ThreadTimer(const ThreadTimer&) = delete;
    +
    227  ThreadTimer(ThreadTimer&&) = delete;
    +
    228  ThreadTimer& operator=(const ThreadTimer&) = delete;
    +
    229  ThreadTimer& operator=(ThreadTimer&&) = delete;
    +
    230 
    +
    231  private:
    +
    232  class Impl;
    +
    233 
    +
    234  std::unique_ptr<Impl> impl_;
    +
    235 
    +
    236  }; // namespace mrs_lib
    +
    237 
    +
    238  //}
    +
    239 
    +
    240 #include <mrs_lib/impl/timer.hpp>
    +
    241 
    +
    242 } // namespace mrs_lib
    +
    243 
    +
    244 #endif // MRS_TIMER_H
    +
    +
    +
    virtual ~ThreadTimer() override
    stops the timer and then destroys the object
    Definition: timer.h:224
    +
    virtual void stop() override
    stop the timer
    Definition: timer.cpp:76
    +
    virtual void start() override
    start the timer
    Definition: timer.cpp:23
    +
    virtual void setPeriod(const ros::Duration &duration, const bool reset=true)=0
    set the timer period/duration
    +
    virtual bool running() override
    returns true if callbacks should be called
    Definition: timer.cpp:49
    +
    virtual void start()=0
    start the timer
    +
    ros::Timer wrapper. The interface is the same as with ros::Timer, except for the initialization metho...
    Definition: timer.h:70
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    virtual void stop() override
    stop the timer
    Definition: timer.cpp:10
    +
    virtual bool running()=0
    returns true if callbacks should be called
    +
    virtual bool running() override
    returns true if callbacks should be called
    Definition: timer.cpp:98
    +
    virtual void setPeriod(const ros::Duration &duration, const bool reset=true) override
    set the timer period/duration
    Definition: timer.cpp:36
    +
    virtual void setPeriod(const ros::Duration &duration, const bool reset=true) override
    set the timer period/duration
    Definition: timer.cpp:87
    +
    virtual void stop()=0
    stop the timer
    +
    virtual void start() override
    start the timer
    Definition: timer.cpp:65
    +
    Common wrapper representing the functionality of the ros::Timer.
    Definition: timer.h:23
    +
    Custom thread-based Timers with the same interface as mrs_lib::ROSTimer.
    Definition: timer.h:151
    + + + + diff --git a/timer_8hpp_source.html b/timer_8hpp_source.html new file mode 100644 index 00000000..afb7c0c9 --- /dev/null +++ b/timer_8hpp_source.html @@ -0,0 +1,198 @@ + + + + + + + +mrs_lib: include/mrs_lib/impl/timer.hpp Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    timer.hpp
    +
    +
    +
    1 #ifndef MRS_TIMER_HPP
    +
    2 #define MRS_TIMER_HPP
    +
    3 
    +
    4 // | ------------------------ ROSTimer ------------------------ |
    +
    5 
    +
    6 /* ROSTimer constructors //{ */
    +
    7 
    +
    8 // duration + oneshot + autostart
    +
    9 #include <chrono>
    +
    10 #include <mutex>
    +
    11 template <class ObjectType>
    +
    12 ROSTimer::ROSTimer(const ros::NodeHandle& nh, const ros::Duration& duration, void (ObjectType::*const callback)(const ros::TimerEvent&),
    +
    13  ObjectType* const obj, const bool oneshot, const bool autostart) {
    +
    14 
    +
    15  this->timer_ = std::make_unique<ros::Timer>(nh.createTimer(duration, callback, obj, oneshot, autostart));
    +
    16 }
    +
    17 
    +
    18 // rate + oneshot + autostart
    +
    19 template <class ObjectType>
    +
    20 ROSTimer::ROSTimer(const ros::NodeHandle& nh, const ros::Rate& rate, void (ObjectType::*const callback)(const ros::TimerEvent&), ObjectType* const obj,
    +
    21  const bool oneshot, const bool autostart) {
    +
    22 
    +
    23  this->timer_ = std::make_unique<ros::Timer>(nh.createTimer(rate, callback, obj, oneshot, autostart));
    +
    24 }
    +
    25 
    +
    26 //}
    +
    27 
    +
    28 // | ----------------------- ThreadTimer ---------------------- |
    +
    29 
    +
    30 /* class ThreadTimer::Impl //{ */
    +
    31 
    + +
    33 public:
    +
    34  Impl(const std::function<void(const ros::TimerEvent&)>& callback, const ros::Duration& delay_dur, const bool oneshot);
    +
    35  ~Impl();
    +
    36 
    +
    37  void start();
    +
    38  void stop();
    +
    39  void setPeriod(const ros::Duration& duration, const bool reset = true);
    +
    40 
    +
    41  friend class ThreadTimer;
    +
    42 
    +
    43  // to keep rule of five since we have a custom destructor
    +
    44  Impl(const Impl&) = delete;
    +
    45  Impl(Impl&&) = delete;
    +
    46  Impl& operator=(const Impl&) = delete;
    +
    47  Impl& operator=(Impl&&) = delete;
    +
    48 
    +
    49 private:
    +
    50  std::thread thread_;
    +
    51  std::function<void(const ros::TimerEvent&)> callback_;
    +
    52 
    +
    53  bool oneshot_;
    +
    54 
    +
    55  bool breakableSleep(const ros::Time& until);
    +
    56  void threadFcn();
    +
    57 
    +
    58  std::mutex mutex_wakeup_;
    +
    59  std::condition_variable wakeup_cond_;
    +
    60  std::recursive_mutex mutex_state_;
    +
    61  bool running_;
    +
    62  ros::Duration delay_dur_;
    +
    63  bool ending_;
    +
    64  ros::Time next_expected_;
    +
    65  ros::Time last_expected_;
    +
    66  ros::Time last_real_;
    +
    67 
    +
    68 };
    +
    69 
    +
    70 //}
    +
    71 
    +
    72 /* ThreadTimer constructors and destructors//{ */
    +
    73 
    +
    74 template <class ObjectType>
    +
    75 ThreadTimer::ThreadTimer([[maybe_unused]] const ros::NodeHandle& nh, const ros::Rate& rate, void (ObjectType::*const callback)(const ros::TimerEvent&),
    +
    76  ObjectType* const obj, const bool oneshot, const bool autostart)
    +
    77  : ThreadTimer(nh, rate.expectedCycleTime(), callback, obj, oneshot, autostart)
    +
    78 {
    +
    79 }
    +
    80 
    +
    81 template <class ObjectType>
    +
    82 ThreadTimer::ThreadTimer([[maybe_unused]] const ros::NodeHandle& nh, const ros::Duration& duration,
    +
    83  void (ObjectType::*const callback)(const ros::TimerEvent&), ObjectType* const obj, bool oneshot, const bool autostart)
    +
    84 {
    +
    85  const auto cbk = std::bind(callback, obj, std::placeholders::_1);
    +
    86  if (duration == ros::Duration(0))
    +
    87  oneshot = true;
    +
    88  this->impl_ = std::make_unique<Impl>(cbk, duration, oneshot);
    +
    89  if (autostart)
    +
    90  this->impl_->start();
    +
    91 }
    +
    92 
    +
    93 //}
    +
    94 
    +
    95 #endif // MRS_TIMER_HPP
    +
    +
    +
    Definition: timer.hpp:32
    + + + + diff --git a/transform__broadcaster_8h_source.html b/transform__broadcaster_8h_source.html new file mode 100644 index 00000000..ab7ed68b --- /dev/null +++ b/transform__broadcaster_8h_source.html @@ -0,0 +1,135 @@ + + + + + + + +mrs_lib: include/mrs_lib/transform_broadcaster.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    transform_broadcaster.h
    +
    +
    +
    1 #ifndef TRANSFORM_BROADCASTER_H
    +
    2 #define TRANSFORM_BROADCASTER_H
    +
    3 
    +
    4 #include <tf2_ros/transform_broadcaster.h>
    +
    5 
    +
    6 namespace mrs_lib
    +
    7 {
    +
    8 
    +
    9 /* TransformBroadcaster //{ */
    +
    10 
    + +
    18 
    +
    19 public:
    + +
    24 
    +
    30  void sendTransform(const geometry_msgs::TransformStamped &transform);
    +
    31 
    +
    37  void sendTransform(const std::vector<geometry_msgs::TransformStamped> &transforms);
    +
    38 
    +
    39 private:
    +
    43  tf2_ros::TransformBroadcaster broadcaster_;
    +
    44 
    +
    51  std::map<std::string, ros::Time> last_messages_;
    +
    52 };
    +
    53 //}
    +
    54 
    +
    55 } // namespace mrs_lib
    +
    56 
    +
    57 #endif // TRANSFORM_BROADCASTER_H
    +
    +
    +
    void sendTransform(const geometry_msgs::TransformStamped &transform)
    check if the transform is newer than the last published one and publish it. Transform is skipped if a...
    Definition: transform_broadcaster.cpp:13
    +
    Wrapper for the tf2_ros::TransformBroadcaster. With each sendTransform() command, the message is chec...
    Definition: transform_broadcaster.h:17
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    TransformBroadcaster()
    constructor, internally starts the TransformBroadcaster
    Definition: transform_broadcaster.cpp:7
    + + + + diff --git a/transformer_8h_source.html b/transformer_8h_source.html new file mode 100644 index 00000000..a532d425 --- /dev/null +++ b/transformer_8h_source.html @@ -0,0 +1,504 @@ + + + + + + + +mrs_lib: include/mrs_lib/transformer.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    transformer.h
    +
    +
    +
    1 // clang: MatousFormat
    +
    2 
    +
    8 #ifndef TRANSFORMER_H
    +
    9 #define TRANSFORMER_H
    +
    10 
    +
    11 /* #define EIGEN_DONT_VECTORIZE */
    +
    12 /* #define EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT */
    +
    13 
    +
    14 /* includes //{ */
    +
    15 
    +
    16 #include <ros/ros.h>
    +
    17 
    +
    18 #include <tf2_ros/transform_listener.h>
    +
    19 #include <tf2_ros/buffer.h>
    +
    20 #include <tf2_eigen/tf2_eigen.h>
    +
    21 #include <tf2_geometry_msgs/tf2_geometry_msgs.h>
    +
    22 #include <tf/transform_datatypes.h>
    +
    23 #include <tf_conversions/tf_eigen.h>
    +
    24 
    +
    25 #include <mrs_msgs/ReferenceStamped.h>
    +
    26 
    +
    27 #include <geometry_msgs/PoseStamped.h>
    +
    28 #include <geometry_msgs/Vector3Stamped.h>
    +
    29 #include <std_msgs/Header.h>
    +
    30 
    +
    31 #include <mrs_lib/geometry/misc.h>
    +
    32 
    +
    33 #include <pcl_ros/point_cloud.h>
    +
    34 #include <pcl_ros/transforms.h>
    +
    35 #include <pcl_conversions/pcl_conversions.h>
    +
    36 
    +
    37 #include <mutex>
    +
    38 #include <experimental/type_traits>
    +
    39 
    +
    40 //}
    +
    41 
    +
    42 namespace tf2
    +
    43 {
    +
    44 
    +
    45  template <typename pt_t>
    +
    46  void doTransform(const pcl::PointCloud<pt_t>& cloud_in, pcl::PointCloud<pt_t>& cloud_out, const geometry_msgs::TransformStamped& transform)
    +
    47  {
    +
    48  pcl_ros::transformPointCloud(cloud_in, cloud_out, transform.transform);
    +
    49  pcl_conversions::toPCL(transform.header.stamp, cloud_out.header.stamp);
    +
    50  cloud_out.header.frame_id = transform.header.frame_id;
    +
    51  }
    +
    52 
    +
    53 } // namespace tf2
    +
    54 
    +
    55 namespace mrs_lib
    +
    56 {
    +
    57 
    +
    58  static const std::string UTM_ORIGIN = "utm_origin";
    +
    59  static const std::string LATLON_ORIGIN = "latlon_origin";
    +
    60 
    +
    66  /* class Transformer //{ */
    +
    67 
    + +
    69  {
    +
    70 
    +
    71  public:
    +
    72  /* Constructor, assignment operator and overloads //{ */
    +
    73 
    +
    82  Transformer();
    +
    83 
    +
    92  Transformer(const std::string& node_name, const ros::Duration& cache_time = ros::Duration(tf2_ros::Buffer::DEFAULT_CACHE_TIME));
    +
    93 
    +
    103  Transformer(const ros::NodeHandle& nh, const std::string& node_name = std::string(), const ros::Duration& cache_time = ros::Duration(tf2_ros::Buffer::DEFAULT_CACHE_TIME));
    +
    104 
    + +
    114 
    +
    115  //}
    +
    116 
    +
    117  // | ------------------ Configuration methods ----------------- |
    +
    118 
    +
    119  /* setDefaultFrame() //{ */
    +
    120 
    +
    130  void setDefaultFrame(const std::string& frame_id)
    +
    131  {
    +
    132  std::scoped_lock lck(mutex_);
    +
    133  default_frame_id_ = frame_id;
    +
    134  }
    +
    135 
    +
    136  //}
    +
    137 
    +
    138  /* setDefaultPrefix() //{ */
    +
    139 
    +
    153  void setDefaultPrefix(const std::string& prefix)
    +
    154  {
    +
    155  std::scoped_lock lck(mutex_);
    +
    156  if (prefix.empty())
    +
    157  prefix_ = "";
    +
    158  else
    +
    159  prefix_ = prefix + "/";
    +
    160  }
    +
    161 
    +
    162  //}
    +
    163 
    +
    164  /* setLatLon() //{ */
    +
    165 
    +
    176  void setLatLon(const double lat, const double lon);
    +
    177 
    +
    178  //}
    +
    179 
    +
    180  /* setLookupTimeout() //{ */
    +
    181 
    +
    191  void setLookupTimeout(const ros::Duration timeout = ros::Duration(0))
    +
    192  {
    +
    193  std::scoped_lock lck(mutex_);
    +
    194  lookup_timeout_ = timeout;
    +
    195  }
    +
    196 
    +
    197  //}
    +
    198 
    +
    199  /* retryLookupNewest() //{ */
    +
    200 
    +
    211  void retryLookupNewest(const bool retry = true)
    +
    212  {
    +
    213  std::scoped_lock lck(mutex_);
    +
    214  retry_lookup_newest_ = retry;
    +
    215  }
    +
    216 
    +
    217  //}
    +
    218 
    +
    219  /* beQuiet() //{ */
    +
    220 
    +
    228  void beQuiet(const bool quiet = true)
    +
    229  {
    +
    230  std::scoped_lock lck(mutex_);
    +
    231  quiet_ = quiet;
    +
    232  }
    +
    233 
    +
    234  //}
    +
    235 
    +
    236  /* resolveFrame() //{ */
    +
    248  std::string resolveFrame(const std::string& frame_id)
    +
    249  {
    +
    250  std::scoped_lock lck(mutex_);
    +
    251  return resolveFrameImpl(frame_id);
    +
    252  }
    +
    253  //}
    +
    254 
    +
    255  /* transformSingle() //{ */
    +
    256 
    +
    265  template <class T>
    +
    266  [[nodiscard]] std::optional<T> transformSingle(const T& what, const std::string& to_frame);
    +
    267 
    +
    278  template <class T>
    +
    279  [[nodiscard]] std::optional<boost::shared_ptr<T>> transformSingle(const boost::shared_ptr<T>& what, const std::string& to_frame)
    +
    280  {
    +
    281  return transformSingle(boost::shared_ptr<const T>(what), to_frame);
    +
    282  }
    +
    283 
    +
    294  template <class T>
    +
    295  [[nodiscard]] std::optional<boost::shared_ptr<T>> transformSingle(const boost::shared_ptr<const T>& what, const std::string& to_frame)
    +
    296  {
    +
    297  auto ret = transformSingle(*what, to_frame);
    +
    298  if (ret == std::nullopt)
    +
    299  return std::nullopt;
    +
    300  else
    +
    301  return boost::make_shared<T>(std::move(ret.value()));
    +
    302  }
    +
    303 
    +
    316  template <class T>
    +
    317  [[nodiscard]] std::optional<T> transformSingle(const std::string& from_frame, const T& what, const std::string& to_frame, const ros::Time& time_stamp = ros::Time(0));
    +
    318 
    +
    331  template <class T>
    +
    332  [[nodiscard]] std::optional<boost::shared_ptr<T>> transformSingle(const std::string& from_frame, const boost::shared_ptr<T>& what, const std::string& to_frame, const ros::Time& time_stamp = ros::Time(0))
    +
    333  {
    +
    334  return transformSingle(from_frame, boost::shared_ptr<const T>(what), to_frame, time_stamp);
    +
    335  }
    +
    336 
    +
    349  template <class T>
    +
    350  [[nodiscard]] std::optional<boost::shared_ptr<T>> transformSingle(const std::string& from_frame, const boost::shared_ptr<const T>& what, const std::string& to_frame, const ros::Time& time_stamp = ros::Time(0))
    +
    351  {
    +
    352  auto ret = transformSingle(from_frame, *what, to_frame, time_stamp);
    +
    353  if (ret == std::nullopt)
    +
    354  return std::nullopt;
    +
    355  else
    +
    356  return boost::make_shared<T>(std::move(ret.value()));
    +
    357  }
    +
    358 
    +
    359  //}
    +
    360 
    +
    361  /* transform() //{ */
    +
    362 
    +
    371  template <class T>
    +
    372  [[nodiscard]] std::optional<T> transform(const T& what, const geometry_msgs::TransformStamped& tf);
    +
    373 
    +
    384  template <class T>
    +
    385  [[nodiscard]] std::optional<boost::shared_ptr<T>> transform(const boost::shared_ptr<const T>& what, const geometry_msgs::TransformStamped& tf)
    +
    386  {
    +
    387  auto ret = transform(*what, tf);
    +
    388  if (ret == std::nullopt)
    +
    389  return std::nullopt;
    +
    390  else
    +
    391  return boost::make_shared<T>(std::move(ret.value()));
    +
    392  }
    +
    393 
    +
    404  template <class T>
    +
    405  [[nodiscard]] std::optional<boost::shared_ptr<T>> transform(const boost::shared_ptr<T>& what, const geometry_msgs::TransformStamped& tf)
    +
    406  {
    +
    407  return transform(boost::shared_ptr<const T>(what), tf);
    +
    408  }
    +
    409 
    +
    410  //}
    +
    411 
    +
    412  /* transformAsVector() method //{ */
    +
    423  [[nodiscard]] std::optional<Eigen::Vector3d> transformAsVector(const Eigen::Vector3d& what, const geometry_msgs::TransformStamped& tf);
    +
    424 
    +
    437  [[nodiscard]] std::optional<Eigen::Vector3d> transformAsVector(const std::string& from_frame, const Eigen::Vector3d& what, const std::string& to_frame, const ros::Time& time_stamp = ros::Time(0));
    +
    438  //}
    +
    439 
    +
    440  /* transformAsPoint() method //{ */
    +
    451  [[nodiscard]] std::optional<Eigen::Vector3d> transformAsPoint(const Eigen::Vector3d& what, const geometry_msgs::TransformStamped& tf);
    +
    452 
    +
    465  [[nodiscard]] std::optional<Eigen::Vector3d> transformAsPoint(const std::string& from_frame, const Eigen::Vector3d& what, const std::string& to_frame, const ros::Time& time_stamp = ros::Time(0));
    +
    466  //}
    +
    467 
    +
    468  /* getTransform() //{ */
    +
    469 
    +
    479  [[nodiscard]] std::optional<geometry_msgs::TransformStamped> getTransform(const std::string& from_frame, const std::string& to_frame, const ros::Time& time_stamp = ros::Time(0));
    +
    480 
    +
    496  [[nodiscard]] std::optional<geometry_msgs::TransformStamped> getTransform(const std::string& from_frame, const ros::Time& from_stamp, const std::string& to_frame, const ros::Time& to_stamp, const std::string& fixed_frame);
    +
    497 
    +
    498  //}
    +
    499 
    +
    500  private:
    +
    501  /* private members, methods etc //{ */
    +
    502 
    +
    503  std::mutex mutex_;
    +
    504 
    +
    505  // keeps track whether a non-basic constructor was called and the transform listener is initialized
    +
    506  bool initialized_ = false;
    +
    507  std::string node_name_;
    +
    508 
    +
    509  std::unique_ptr<tf2_ros::Buffer> tf_buffer_;
    +
    510  std::unique_ptr<tf2_ros::TransformListener> tf_listener_ptr_;
    +
    511 
    +
    512  // user-configurable options
    +
    513  std::string default_frame_id_ = "";
    +
    514  std::string prefix_ = ""; // if not empty, includes the forward slash
    +
    515  bool quiet_ = false;
    +
    516  ros::Duration lookup_timeout_ = ros::Duration(0);
    +
    517  bool retry_lookup_newest_ = false;
    +
    518 
    +
    519  bool got_utm_zone_ = false;
    +
    520  std::array<char, 10> utm_zone_ = {};
    +
    521 
    +
    522  // returns the first namespace prefix of the frame (if any) includin the forward slash
    +
    523  std::string getFramePrefix(const std::string& frame_id);
    +
    524 
    +
    525  template <class T>
    +
    526  std::optional<T> transformImpl(const geometry_msgs::TransformStamped& tf, const T& what);
    +
    527  std::optional<mrs_msgs::ReferenceStamped> transformImpl(const geometry_msgs::TransformStamped& tf, const mrs_msgs::ReferenceStamped& what);
    +
    528  std::optional<Eigen::Vector3d> transformImpl(const geometry_msgs::TransformStamped& tf, const Eigen::Vector3d& what);
    +
    529 
    +
    530  [[nodiscard]] std::optional<geometry_msgs::TransformStamped> getTransformImpl(const std::string& from_frame, const std::string& to_frame, const ros::Time& time_stamp, const std::string& latlon_frame);
    +
    531  [[nodiscard]] std::optional<geometry_msgs::TransformStamped> getTransformImpl(const std::string& from_frame, const ros::Time& from_stamp, const std::string& to_frame, const ros::Time& to_stamp, const std::string& fixed_frame, const std::string& latlon_frame);
    +
    532 
    +
    533  std::string resolveFrameImpl(const std::string& frame_id);
    +
    534 
    +
    535  template <class T>
    +
    536  std::optional<T> doTransform(const T& what, const geometry_msgs::TransformStamped& tf);
    +
    537 
    +
    538  //}
    +
    539 
    +
    540  // | ------------------- some helper methods ------------------ |
    +
    541  public:
    +
    542  /* frame_from(), frame_to() and inverse() methods //{ */
    +
    543 
    +
    550  static constexpr const std::string& frame_from(const geometry_msgs::TransformStamped& msg)
    +
    551  {
    +
    552  return msg.child_frame_id;
    +
    553  }
    +
    554 
    +
    563  static constexpr std::string& frame_from(geometry_msgs::TransformStamped& msg)
    +
    564  {
    +
    565  return msg.child_frame_id;
    +
    566  }
    +
    567 
    +
    574  static constexpr const std::string& frame_to(const geometry_msgs::TransformStamped& msg)
    +
    575  {
    +
    576  return msg.header.frame_id;
    +
    577  }
    +
    578 
    +
    587  static constexpr std::string& frame_to(geometry_msgs::TransformStamped& msg)
    +
    588  {
    +
    589  return msg.header.frame_id;
    +
    590  }
    +
    591 
    +
    598  static geometry_msgs::TransformStamped inverse(const geometry_msgs::TransformStamped& msg)
    +
    599  {
    +
    600  tf2::Transform tf2;
    +
    601  tf2::fromMsg(msg.transform, tf2);
    +
    602  tf2 = tf2.inverse();
    +
    603  return create_transform(frame_to(msg), frame_from(msg), msg.header.stamp, tf2::toMsg(tf2));
    +
    604  }
    +
    605  //}
    +
    606 
    +
    607  private:
    +
    608  /* create_transform() method //{ */
    +
    609  static geometry_msgs::TransformStamped create_transform(const std::string& from_frame, const std::string& to_frame, const ros::Time& time_stamp)
    +
    610  {
    +
    611  geometry_msgs::TransformStamped ret;
    +
    612  frame_from(ret) = from_frame;
    +
    613  frame_to(ret) = to_frame;
    +
    614  ret.header.stamp = time_stamp;
    +
    615  return ret;
    +
    616  }
    +
    617 
    +
    618  static geometry_msgs::TransformStamped create_transform(const std::string& from_frame, const std::string& to_frame, const ros::Time& time_stamp, const geometry_msgs::Transform& tf)
    +
    619  {
    +
    620  geometry_msgs::TransformStamped ret;
    +
    621  frame_from(ret) = from_frame;
    +
    622  frame_to(ret) = to_frame;
    +
    623  ret.header.stamp = time_stamp;
    +
    624  ret.transform = tf;
    +
    625  return ret;
    +
    626  }
    +
    627  //}
    +
    628 
    +
    629  /* copyChangeFrame() and related methods //{ */
    +
    630 
    +
    631  // helper type and member for detecting whether a message has a header using SFINAE
    +
    632  template<typename T>
    +
    633  using has_header_member_chk = decltype( std::declval<T&>().header );
    +
    634  template<typename T>
    +
    635  static constexpr bool has_header_member_v = std::experimental::is_detected<has_header_member_chk, T>::value;
    +
    636 
    +
    637  template <typename msg_t>
    +
    638  std_msgs::Header getHeader(const msg_t& msg);
    +
    639  template <typename pt_t>
    +
    640  std_msgs::Header getHeader(const pcl::PointCloud<pt_t>& cloud);
    +
    641 
    +
    642  template <typename msg_t>
    +
    643  void setHeader(msg_t& msg, const std_msgs::Header& header);
    +
    644  template <typename pt_t>
    +
    645  void setHeader(pcl::PointCloud<pt_t>& cloud, const std_msgs::Header& header);
    +
    646 
    +
    647  template <typename T>
    +
    648  T copyChangeFrame(const T& what, const std::string& frame_id);
    +
    649 
    +
    650  //}
    +
    651 
    +
    652  /* methods for converting between lattitude/longitude and UTM coordinates //{ */
    +
    653  geometry_msgs::Point LLtoUTM(const geometry_msgs::Point& what, const std::string& prefix);
    +
    654  geometry_msgs::PointStamped LLtoUTM(const geometry_msgs::PointStamped& what, const std::string& prefix);
    +
    655  geometry_msgs::Pose LLtoUTM(const geometry_msgs::Pose& what, const std::string& prefix);
    +
    656  geometry_msgs::PoseStamped LLtoUTM(const geometry_msgs::PoseStamped& what, const std::string& prefix);
    +
    657 
    +
    658  std::optional<geometry_msgs::Point> UTMtoLL(const geometry_msgs::Point& what, const std::string& prefix);
    +
    659  std::optional<geometry_msgs::PointStamped> UTMtoLL(const geometry_msgs::PointStamped& what, const std::string& prefix);
    +
    660  std::optional<geometry_msgs::Pose> UTMtoLL(const geometry_msgs::Pose& what, const std::string& prefix);
    +
    661  std::optional<geometry_msgs::PoseStamped> UTMtoLL(const geometry_msgs::PoseStamped& what, const std::string& prefix);
    +
    662 
    +
    663  // helper types and member for detecting whether the UTMtoLL and LLtoUTM methods are defined for a certain message
    +
    664  template<class Class, typename Message>
    +
    665  using UTMLL_method_chk = decltype(std::declval<Class>().UTMtoLL(std::declval<const Message&>(), ""));
    +
    666  template<class Class, typename Message>
    +
    667  using LLUTM_method_chk = decltype(std::declval<Class>().LLtoUTM(std::declval<const Message&>(), ""));
    +
    668  template<class Class, typename Message>
    +
    669  static constexpr bool UTMLL_exists_v = std::experimental::is_detected<UTMLL_method_chk, Class, Message>::value && std::experimental::is_detected<LLUTM_method_chk, Class, Message>::value;
    +
    670  //}
    +
    671 
    +
    672  };
    +
    673 
    +
    674  //}
    +
    675 
    +
    676 } // namespace mrs_lib
    +
    677 
    +
    678 #include <mrs_lib/impl/transformer.hpp>
    +
    679 
    +
    680 #endif // TRANSFORMER_H
    +
    +
    +
    std::optional< boost::shared_ptr< T > > transform(const boost::shared_ptr< T > &what, const geometry_msgs::TransformStamped &tf)
    Transform a variable to new frame using a particular transformation.
    Definition: transformer.h:405
    +
    std::string resolveFrame(const std::string &frame_id)
    Deduce the full frame ID from a shortened or empty string using current default prefix and default fr...
    Definition: transformer.h:248
    +
    std::optional< T > transformSingle(const T &what, const std::string &to_frame)
    Transforms a single variable to a new frame and returns it or std::nullopt if transformation fails.
    Definition: transformer.hpp:138
    +
    static constexpr std::string & frame_from(geometry_msgs::TransformStamped &msg)
    A convenience function that returns the frame from which the message transforms.
    Definition: transformer.h:563
    +
    static geometry_msgs::TransformStamped inverse(const geometry_msgs::TransformStamped &msg)
    A convenience function implements returns the inverse of the transform message as a one-liner.
    Definition: transformer.h:598
    +
    Transformer()
    A convenience constructor that doesn't initialize anything.
    Definition: transformer.cpp:39
    +
    std::optional< boost::shared_ptr< T > > transform(const boost::shared_ptr< const T > &what, const geometry_msgs::TransformStamped &tf)
    Transform a variable to new frame using a particular transformation.
    Definition: transformer.h:385
    +
    Defines useful geometry utilities and functions.
    +
    std::optional< boost::shared_ptr< T > > transformSingle(const std::string &from_frame, const boost::shared_ptr< T > &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))
    Transforms a single variable to a new frame and returns it or std::nullopt if transformation fails.
    Definition: transformer.h:332
    +
    void retryLookupNewest(const bool retry=true)
    Enable/disable retry of a failed transform lookup with ros::Time(0).
    Definition: transformer.h:211
    +
    A convenience wrapper class for ROS's native TF2 API to simplify transforming of various messages.
    Definition: transformer.h:68
    +
    void setLatLon(const double lat, const double lon)
    Sets the curret lattitude and longitude for UTM zone calculation.
    Definition: transformer.cpp:117
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    void setDefaultFrame(const std::string &frame_id)
    Sets the default frame ID to be used instead of any empty frame ID.
    Definition: transformer.h:130
    +
    std::optional< T > transform(const T &what, const geometry_msgs::TransformStamped &tf)
    Transform a variable to new frame using a particular transformation.
    Definition: transformer.hpp:175
    +
    static constexpr std::string & frame_to(geometry_msgs::TransformStamped &msg)
    A convenience function that returns the frame to which the message transforms.
    Definition: transformer.h:587
    +
    static constexpr const std::string & frame_to(const geometry_msgs::TransformStamped &msg)
    A convenience function that returns the frame to which the message transforms.
    Definition: transformer.h:574
    +
    static constexpr const std::string & frame_from(const geometry_msgs::TransformStamped &msg)
    A convenience function that returns the frame from which the message transforms.
    Definition: transformer.h:550
    +
    std::optional< Eigen::Vector3d > transformAsPoint(const Eigen::Vector3d &what, const geometry_msgs::TransformStamped &tf)
    Transform an Eigen::Vector3d (interpreting it as a point).
    Definition: transformer.cpp:186
    +
    void beQuiet(const bool quiet=true)
    Enable/disable some prints that may be too noisy.
    Definition: transformer.h:228
    +
    void setLookupTimeout(const ros::Duration timeout=ros::Duration(0))
    Set a timeout for transform lookup.
    Definition: transformer.h:191
    +
    std::optional< boost::shared_ptr< T > > transformSingle(const boost::shared_ptr< const T > &what, const std::string &to_frame)
    Transforms a single variable to a new frame.
    Definition: transformer.h:295
    +
    std::optional< boost::shared_ptr< T > > transformSingle(const boost::shared_ptr< T > &what, const std::string &to_frame)
    Transforms a single variable to a new frame.
    Definition: transformer.h:279
    +
    std::optional< Eigen::Vector3d > transformAsVector(const Eigen::Vector3d &what, const geometry_msgs::TransformStamped &tf)
    Transform an Eigen::Vector3d (interpreting it as a vector).
    Definition: transformer.cpp:130
    +
    Transformer & operator=(Transformer &&other)
    A convenience move assignment operator.
    Definition: transformer.cpp:53
    +
    std::optional< geometry_msgs::TransformStamped > getTransform(const std::string &from_frame, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))
    Obtains a transform between two frames in a given time.
    Definition: transformer.cpp:78
    +
    void setDefaultPrefix(const std::string &prefix)
    Sets the default frame ID prefix to be used if no prefix is present in the frame.
    Definition: transformer.h:153
    +
    std::optional< boost::shared_ptr< T > > transformSingle(const std::string &from_frame, const boost::shared_ptr< const T > &what, const std::string &to_frame, const ros::Time &time_stamp=ros::Time(0))
    Transforms a single variable to a new frame and returns it or std::nullopt if transformation fails.
    Definition: transformer.h:350
    + + + + diff --git a/transformer_8hpp_source.html b/transformer_8hpp_source.html new file mode 100644 index 00000000..418b5bb0 --- /dev/null +++ b/transformer_8hpp_source.html @@ -0,0 +1,303 @@ + + + + + + + +mrs_lib: include/mrs_lib/impl/transformer.hpp Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    transformer.hpp
    +
    +
    +
    1 #ifndef TRANSFORMER_HPP
    +
    2 #define TRANSFORMER_HPP
    +
    3 
    +
    4 // clang: MatousFormat
    +
    5 
    +
    6 namespace mrs_lib
    +
    7 {
    +
    8 
    +
    9  // | --------------------- helper methods --------------------- |
    +
    10 
    +
    11  /* getHeader() overloads for different message types (pointers, pointclouds etc) //{ */
    +
    12 
    +
    13  template <typename msg_t>
    +
    14  std_msgs::Header Transformer::getHeader(const msg_t& msg)
    +
    15  {
    +
    16  return msg.header;
    +
    17  }
    +
    18 
    +
    19  template <typename pt_t>
    +
    20  std_msgs::Header Transformer::getHeader(const pcl::PointCloud<pt_t>& cloud)
    +
    21  {
    +
    22  std_msgs::Header ret;
    +
    23  pcl_conversions::fromPCL(cloud.header, ret);
    +
    24  return ret;
    +
    25  }
    +
    26 
    +
    27  //}
    +
    28 
    +
    29  /* setHeader() overloads for different message types (pointers, pointclouds etc) //{ */
    +
    30 
    +
    31  template <typename msg_t>
    +
    32  void Transformer::setHeader(msg_t& msg, const std_msgs::Header& header)
    +
    33  {
    +
    34  msg.header = header;
    +
    35  }
    +
    36 
    +
    37  template <typename pt_t>
    +
    38  void Transformer::setHeader(pcl::PointCloud<pt_t>& cloud, const std_msgs::Header& header)
    +
    39  {
    +
    40  pcl_conversions::toPCL(header, cloud.header);
    +
    41  }
    +
    42 
    +
    43  //}
    +
    44 
    +
    45  /* copyChangeFrame() helper function //{ */
    +
    46 
    +
    47  template <typename T>
    +
    48  T Transformer::copyChangeFrame(const T& what, const std::string& frame_id)
    +
    49  {
    +
    50  T ret = what;
    +
    51  if constexpr (has_header_member_v<T>)
    +
    52  {
    +
    53  std_msgs::Header new_header = getHeader(what);
    +
    54  new_header.frame_id = frame_id;
    +
    55  setHeader(ret, new_header);
    +
    56  }
    +
    57  return ret;
    +
    58  }
    +
    59 
    +
    60  //}
    +
    61 
    +
    62  /* transformImpl() //{ */
    +
    63 
    +
    64  template <class T>
    +
    65  std::optional<T> Transformer::transformImpl(const geometry_msgs::TransformStamped& tf, const T& what)
    +
    66  {
    +
    67  const std::string from_frame = frame_from(tf);
    +
    68  const std::string to_frame = frame_to(tf);
    +
    69 
    +
    70  if (from_frame == to_frame)
    +
    71  return copyChangeFrame(what, from_frame);
    +
    72 
    +
    73  const std::string latlon_frame_name = resolveFrameImpl(LATLON_ORIGIN);
    +
    74 
    +
    75  // First, check if the transformation is from/to the latlon frame
    +
    76  // if conversion between UVM and LatLon coordinates is defined for this message, it may be resolved
    +
    77  if constexpr (UTMLL_exists_v<Transformer, T>)
    +
    78  {
    +
    79  // check for transformation from LAT-LON GPS
    +
    80  if (from_frame == latlon_frame_name)
    +
    81  {
    +
    82  const std::optional<T> tmp = LLtoUTM(what, getFramePrefix(from_frame));
    +
    83  if (!tmp.has_value())
    +
    84  return std::nullopt;
    +
    85  return doTransform(tmp.value(), tf);
    +
    86  }
    +
    87  // check for transformation to LAT-LON GPS
    +
    88  else if (to_frame == latlon_frame_name)
    +
    89  {
    +
    90  const std::optional<T> tmp = doTransform(what, tf);
    +
    91  if (!tmp.has_value())
    +
    92  return std::nullopt;
    +
    93  return UTMtoLL(tmp.value(), getFramePrefix(to_frame));
    +
    94  }
    +
    95  }
    +
    96  else
    +
    97  {
    +
    98  // by default, transformation from/to LATLON is undefined, so return nullopt if it's attempted
    +
    99  if (from_frame == latlon_frame_name || to_frame == latlon_frame_name)
    +
    100  {
    +
    101  ROS_ERROR_STREAM_THROTTLE(1.0, "[" << node_name_ << "]: Transformer: cannot transform message of this type (" << typeid(T).name() << ") to/from latitude/longitude coordinates!");
    +
    102  return std::nullopt;
    +
    103  }
    +
    104  }
    +
    105 
    +
    106  // otherwise it's just an ol' borin' transformation
    +
    107  return doTransform(what, tf);
    +
    108  }
    +
    109 
    +
    110  //}
    +
    111 
    +
    112  /* doTransform() //{ */
    +
    113 
    +
    114  template <class T>
    +
    115  std::optional<T> Transformer::doTransform(const T& what, const geometry_msgs::TransformStamped& tf)
    +
    116  {
    +
    117  try
    +
    118  {
    +
    119  T result;
    +
    120  tf2::doTransform(what, result, tf);
    +
    121  return result;
    +
    122  }
    +
    123  catch (tf2::TransformException& ex)
    +
    124  {
    +
    125  ROS_WARN_THROTTLE(1.0, "[%s]: Transformer: Error during transform from \"%s\" frame to \"%s\" frame.\n\tMSG: %s", node_name_.c_str(), frame_from(tf).c_str(),
    +
    126  frame_to(tf).c_str(), ex.what());
    +
    127  return std::nullopt;
    +
    128  }
    +
    129  }
    +
    130 
    +
    131  //}
    +
    132 
    +
    133  // | ------------------ user-callable methods ----------------- |
    +
    134 
    +
    135  /* transformSingle() //{ */
    +
    136 
    +
    137  template <class T>
    +
    138  std::optional<T> Transformer::transformSingle(const T& what, const std::string& to_frame_raw)
    +
    139  {
    +
    140  const std_msgs::Header orig_header = getHeader(what);
    +
    141  return transformSingle(orig_header.frame_id, what, to_frame_raw, orig_header.stamp);
    +
    142  }
    +
    143 
    +
    144  template <class T>
    +
    145  std::optional<T> Transformer::transformSingle(const std::string& from_frame_raw, const T& what, const std::string& to_frame_raw, const ros::Time& time_stamp)
    +
    146  {
    +
    147  std::scoped_lock lck(mutex_);
    +
    148 
    +
    149  if (!initialized_)
    +
    150  {
    +
    151  ROS_ERROR_THROTTLE(1.0, "[%s]: Transformer: cannot transform, not initialized", node_name_.c_str());
    +
    152  return std::nullopt;
    +
    153  }
    +
    154 
    +
    155  const std::string from_frame = resolveFrameImpl(from_frame_raw);
    +
    156  const std::string to_frame = resolveFrameImpl(to_frame_raw);
    +
    157  const std::string latlon_frame = resolveFrameImpl(LATLON_ORIGIN);
    +
    158 
    +
    159  // get the transform
    +
    160  const auto tf_opt = getTransformImpl(from_frame, to_frame, time_stamp, latlon_frame);
    +
    161  if (!tf_opt.has_value())
    +
    162  return std::nullopt;
    +
    163  const geometry_msgs::TransformStamped& tf = tf_opt.value();
    +
    164 
    +
    165  // do the transformation
    +
    166  const geometry_msgs::TransformStamped tf_resolved = create_transform(from_frame, to_frame, tf.header.stamp, tf.transform);
    +
    167  return transformImpl(tf_resolved, what);
    +
    168  }
    +
    169 
    +
    170  //}
    +
    171 
    +
    172  /* transform() //{ */
    +
    173 
    +
    174  template <class T>
    +
    175  std::optional<T> Transformer::transform(const T& what, const geometry_msgs::TransformStamped& tf)
    +
    176  {
    +
    177  std::scoped_lock lck(mutex_);
    +
    178 
    +
    179  if (!initialized_)
    +
    180  {
    +
    181  ROS_ERROR_THROTTLE(1.0, "[%s]: Transformer: cannot transform, not initialized", node_name_.c_str());
    +
    182  return std::nullopt;
    +
    183  }
    +
    184 
    +
    185  const std::string from_frame = resolveFrameImpl(frame_from(tf));
    +
    186  const std::string to_frame = resolveFrameImpl(frame_to(tf));
    +
    187  const geometry_msgs::TransformStamped tf_resolved = create_transform(from_frame, to_frame, tf.header.stamp, tf.transform);
    +
    188 
    +
    189  return transformImpl(tf_resolved, what);
    +
    190  }
    +
    191 
    +
    192  /* //} */
    +
    193 
    +
    194 }
    +
    195 
    +
    196 #endif // TRANSFORMER_HPP
    +
    +
    +
    std::optional< T > transformSingle(const T &what, const std::string &to_frame)
    Transforms a single variable to a new frame and returns it or std::nullopt if transformation fails.
    Definition: transformer.hpp:138
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    std::optional< T > transform(const T &what, const geometry_msgs::TransformStamped &tf)
    Transform a variable to new frame using a particular transformation.
    Definition: transformer.hpp:175
    +
    static constexpr const std::string & frame_to(const geometry_msgs::TransformStamped &msg)
    A convenience function that returns the frame to which the message transforms.
    Definition: transformer.h:574
    +
    static constexpr const std::string & frame_from(const geometry_msgs::TransformStamped &msg)
    A convenience function that returns the frame from which the message transforms.
    Definition: transformer.h:550
    + + + + diff --git a/ukf_2example_8cpp-example.html b/ukf_2example_8cpp-example.html new file mode 100644 index 00000000..1c18617d --- /dev/null +++ b/ukf_2example_8cpp-example.html @@ -0,0 +1,269 @@ + + + + + + + +mrs_lib: ukf/example.cpp + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ukf/example.cpp
    +
    +
    +

    This example may be run after building mrs_lib by executing rosrun mrs_lib ukf_example.

    +

    Example code for using the UKF implementation (see documentation of the UKF class):

    +
    // clang: MatousFormat
    +
    // Include the UKF header
    +
    #include <mrs_lib/ukf.h>
    +
    #include <random>
    +
    #include <ros/ros.h>
    +
    +
    // Define the UKF we will be using
    +
    namespace mrs_lib
    +
    {
    +
    const int n_states = 3;
    +
    const int n_inputs = 1;
    +
    const int n_measurements = 2;
    +
    +
    using ukf_t = UKF<n_states, n_inputs, n_measurements>;
    +
    }
    +
    +
    // Some helpful aliases to make writing of types shorter
    +
    using namespace mrs_lib;
    +
    using Q_t = ukf_t::Q_t;
    +
    using tra_model_t = ukf_t::transition_model_t;
    +
    using obs_model_t = ukf_t::observation_model_t;
    +
    using x_t = ukf_t::x_t;
    +
    using P_t = ukf_t::P_t;
    +
    using u_t = ukf_t::u_t;
    +
    using z_t = ukf_t::z_t;
    +
    using R_t = ukf_t::R_t;
    +
    using statecov_t = ukf_t::statecov_t;
    +
    +
    // Some helper enums to make the code more readable
    +
    enum x_pos
    +
    {
    +
    x_x = 0,
    +
    x_y = 1,
    +
    x_alpha = 2,
    +
    };
    +
    enum u_pos
    +
    {
    +
    u_alpha = 0,
    +
    };
    +
    enum z_pos
    +
    {
    +
    z_x = 0,
    +
    z_y = 1,
    +
    };
    +
    +
    // This function implements the state transition
    +
    const double speed = 0.3;
    +
    x_t tra_model_f(const x_t& x, const u_t& u, const double dt)
    +
    {
    +
    x_t ret;
    +
    ret(x_x) = x(x_x) + dt*std::cos(x(x_alpha))*speed;
    +
    ret(x_y) = x(x_y) + dt*std::sin(x(x_alpha))*speed;
    +
    ret(x_alpha) = x(x_alpha) + u(u_alpha);
    +
    return ret;
    +
    }
    +
    +
    // This function implements the observation generation from a state
    +
    ukf_t::z_t obs_model_f(const ukf_t::x_t& x)
    +
    {
    +
    z_t ret;
    +
    ret(z_x) = x(x_x);
    +
    ret(z_y) = x(x_y);
    +
    return ret;
    +
    }
    +
    +
    // Helper function to generate a random Eigen matrix with normal distribution
    +
    template <int rows>
    +
    Eigen::Matrix<double, rows, 1> normal_randmat(const Eigen::Matrix<double, rows, rows>& cov)
    +
    {
    +
    static std::random_device rd{};
    +
    static std::mt19937 gen{rd()};
    +
    static std::normal_distribution<> d{0,1};
    +
    Eigen::Matrix<double, rows, 1> ret;
    +
    for (int row = 0; row < rows; row++)
    +
    ret(row, 0) = d(gen);
    +
    return cov*ret;
    +
    }
    +
    +
    int main()
    +
    {
    +
    // Parameters of the Unscented Kalman Filter
    +
    const double alpha = 1e-3;
    +
    const double kappa = 1;
    +
    const double beta = 2;
    +
    tra_model_t tra_model(tra_model_f);
    +
    obs_model_t obs_model(obs_model_f);
    +
    +
    // dt will be constant in this example
    +
    const double dt = 1.0;
    +
    +
    // Initialize the process noise matrix
    +
    Q_t Q; Q <<
    +
    1e-3, 0, 0,
    +
    0, 1e-3, 0,
    +
    0, 0, 1e-2;
    +
    +
    // Initialize the measurement noise matrix
    +
    R_t R; R <<
    +
    1e-2, 0,
    +
    0, 1e-2;
    +
    +
    // Generate initial state and covariance
    +
    const x_t x0 = 100.0*x_t::Random();
    +
    P_t P_tmp = P_t::Random();
    +
    const P_t P0 = 10.0*P_tmp*P_tmp.transpose();
    +
    const ukf_t::statecov_t sc0({x0, P0});
    +
    +
    // Instantiate the UKF itself
    +
    ukf_t ukf(tra_model, obs_model, alpha, kappa, beta);
    +
    +
    const int n_its = 1e4;
    +
    // Prepare the ground-truth state and the estimated state and covariance
    +
    x_t x_gt = sc0.x;
    +
    statecov_t sc_est = sc0;
    +
    +
    for (int it = 0; it < n_its; it++)
    +
    {
    +
    std::cout << "step: " << it << std::endl;
    +
    +
    // Generate a new input vector
    +
    const u_t u = u_t::Random();
    +
    +
    // Generate a new state according to the model and noise parameters
    +
    x_gt = tra_model_f(x_gt, u, dt) + normal_randmat(Q);
    +
    +
    // Generate a new observation according to the model and noise parameters
    +
    const z_t z = obs_model_f(x_gt) + normal_randmat(R);
    +
    +
    // There should be a try-catch here to prevent program crashes
    +
    // in case of numerical instabilities (which are possible with UKF)
    +
    try
    +
    {
    +
    // Apply the prediction step
    +
    sc_est = ukf.predict(sc_est, u, Q, dt);
    +
    +
    // Apply the correction step
    +
    sc_est = ukf.correct(sc_est, z, R);
    +
    }
    +
    catch (const std::exception& e)
    +
    {
    +
    // In case of error, alert the user
    +
    ROS_ERROR("UKF failed: %s", e.what());
    +
    }
    +
    +
    const auto error = (x_gt-sc_est.x).norm();
    +
    std::cout << "Current UKF estimation error is: " << error << std::endl;
    +
    std::cout << "Current ground-truth state is: " << x_gt.transpose() << std::endl;
    +
    std::cout << "Current UKF estimated state is: " << sc_est.x.transpose() << std::endl;
    +
    std::cout << "Current UKF state covariance is:" << std::endl << sc_est.P << std::endl;
    +
    }
    +
    +
    return 0;
    +
    }
    +
    +
    +
    +
    typename Base_class::Q_t Q_t
    process covariance n*n typedef
    Definition: ukf.h:69
    +
    typename Base_class::z_t z_t
    measurement vector p*1 typedef
    Definition: ukf.h:63
    +
    typename std::function< x_t(const x_t &, const u_t &, double)> transition_model_t
    function of the state transition model typedef
    Definition: ukf.h:75
    +
    typename Base_class::u_t u_t
    input vector m*1 typedef
    Definition: ukf.h:61
    +
    typename Base_class::statecov_t statecov_t
    typedef of a helper struct for state and covariance
    Definition: ukf.h:73
    +
    typename std::function< z_t(const x_t &)> observation_model_t
    function of the observation model typedef
    Definition: ukf.h:77
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    typename Base_class::R_t R_t
    measurement covariance p*p typedef
    Definition: ukf.h:67
    +
    typename Base_class::P_t P_t
    state covariance n*n typedef
    Definition: ukf.h:65
    +
    typename Base_class::x_t x_t
    state vector n*1 typedef
    Definition: ukf.h:59
    +
    Defines UKF - a class implementing the Unscented Kalman Filter .
    +
    Implementation of the Unscented Kalman filter .
    Definition: ukf.h:39
    + + + + diff --git a/ukf_2example_8cpp.html b/ukf_2example_8cpp.html new file mode 100644 index 00000000..1ec3b8e5 --- /dev/null +++ b/ukf_2example_8cpp.html @@ -0,0 +1,234 @@ + + + + + + + +mrs_lib: src/ukf/example.cpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    example.cpp File Reference
    +
    +
    + +

    Example file for the UKF implementation. +More...

    +
    #include <mrs_lib/ukf.h>
    +#include <random>
    +#include <ros/ros.h>
    +
    + + Include dependency graph for example.cpp:
    +
    +
    + +
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    +using mrs_lib::ukf_t = UKF< n_states, n_inputs, n_measurements >
     
    +using Q_t = ukf_t::Q_t
     
    +using tra_model_t = ukf_t::transition_model_t
     
    +using obs_model_t = ukf_t::observation_model_t
     
    +using x_t = ukf_t::x_t
     
    +using P_t = ukf_t::P_t
     
    +using u_t = ukf_t::u_t
     
    +using z_t = ukf_t::z_t
     
    +using R_t = ukf_t::R_t
     
    +using statecov_t = ukf_t::statecov_t
     
    + + + + + + + +

    +Enumerations

    enum  x_pos {
    +  x_x = 0, +x_y = 1, +x_dx = 2, +x_dy = 3, +
    +  x_x = 0, +x_y = 1, +x_alpha = 2, +x_x = 0, +
    +  x_y, +x_alpha, +x_speed +
    + }
     
    enum  u_pos { u_dx = 0, +u_dy = 0, +u_alpha = 0, +u_alpha = 0 + }
     
    enum  z_pos {
    +  z_x = 0, +z_y = 1, +z_x = 0, +z_y = 1, +
    +  z_x = 0, +z_y +
    + }
     
    + + + + + + + + + + +

    +Functions

    +x_t tra_model_f (const x_t &x, const u_t &u, const double dt)
     
    +ukf_t::z_t obs_model_f (const ukf_t::x_t &x)
     
    +template<int rows>
    Eigen::Matrix< double, rows, 1 > normal_randmat (const Eigen::Matrix< double, rows, rows > &cov)
     
    +int main ()
     
    + + + +

    +Variables

    +const double speed = 0.3
     
    +

    Detailed Description

    +

    Example file for the UKF implementation.

    +
    Author
    Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +

    This example may be run after building mrs_lib by executing rosrun mrs_lib ukf_example.

    +

    See ukf/example.cpp.

    +
    +
    + + + + diff --git a/ukf_2example_8cpp.js b/ukf_2example_8cpp.js new file mode 100644 index 00000000..721ab78d --- /dev/null +++ b/ukf_2example_8cpp.js @@ -0,0 +1,45 @@ +var ukf_2example_8cpp = +[ + [ "obs_model_t", "ukf_2example_8cpp.html#aee654ce22e33b09c6661f26354647913", null ], + [ "P_t", "ukf_2example_8cpp.html#a2e6c44a337167abef6c8358ec879babc", null ], + [ "Q_t", "ukf_2example_8cpp.html#a48a3b5d352fb2b050710720c67f14bf5", null ], + [ "R_t", "ukf_2example_8cpp.html#a0eb6584c89962faa4a31546f3dc59228", null ], + [ "statecov_t", "ukf_2example_8cpp.html#a1ca48b74ebe6b20239eb737cfa0fb1e0", null ], + [ "tra_model_t", "ukf_2example_8cpp.html#ac8c529530a49c5c7851f3dc33de33f15", null ], + [ "u_t", "ukf_2example_8cpp.html#a37f1e01ad571bef8f44e01ff29b8ef6a", null ], + [ "ukf_t", "ukf_2example_8cpp.html#a2635db3a96f0b457abe21cac4669c4a9", null ], + [ "x_t", "ukf_2example_8cpp.html#a8470a3151c8e60cd2d8b634068a10665", null ], + [ "z_t", "ukf_2example_8cpp.html#ae2e2918bf1c1c46e7031e414d13d3b6d", null ], + [ "u_pos", "ukf_2example_8cpp.html#af4cfed65720084d0bd14a3d413e1dcf5", [ + [ "u_dx", "lkf_2example_8cpp.html#af4cfed65720084d0bd14a3d413e1dcf5a7d974952f0e878cbc8d0576f49892b04", null ], + [ "u_dy", "lkf_2example_8cpp.html#af4cfed65720084d0bd14a3d413e1dcf5a9882f4765a1cde48a725304736906a59", null ], + [ "u_alpha", "ukf_2example_8cpp.html#af4cfed65720084d0bd14a3d413e1dcf5ab11d48e78f42e7cbf42ab7d09dd53403", null ], + [ "u_alpha", "ukf_2test_8cpp.html#af4cfed65720084d0bd14a3d413e1dcf5ab11d48e78f42e7cbf42ab7d09dd53403", null ] + ] ], + [ "x_pos", "ukf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3", [ + [ "x_x", "lkf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a73f2def2a7f99112d90954c4343b9341", null ], + [ "x_y", "lkf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a19830385ee6cb72a377bbb2680bb48f8", null ], + [ "x_dx", "lkf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a51fd194b0acf678a00fd40d662dec461", null ], + [ "x_dy", "lkf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3ae7ae62baad83c4d51fd304977c5bb5fa", null ], + [ "x_x", "ukf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a73f2def2a7f99112d90954c4343b9341", null ], + [ "x_y", "ukf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a19830385ee6cb72a377bbb2680bb48f8", null ], + [ "x_alpha", "ukf_2example_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a3e43122a748ab55aaf12a0ab4acc33ce", null ], + [ "x_x", "ukf_2test_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a73f2def2a7f99112d90954c4343b9341", null ], + [ "x_y", "ukf_2test_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a19830385ee6cb72a377bbb2680bb48f8", null ], + [ "x_alpha", "ukf_2test_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3a3e43122a748ab55aaf12a0ab4acc33ce", null ], + [ "x_speed", "ukf_2test_8cpp.html#af66fc452d7243bb3be3e0dec10c684b3aa7e2945a84168a1e2f80c386acbeaae4", null ] + ] ], + [ "z_pos", "ukf_2example_8cpp.html#a333f210bb9cc2047487bc6ea732e6084", [ + [ "z_x", "lkf_2example_8cpp.html#a333f210bb9cc2047487bc6ea732e6084aab5757870b95e7a22683c18efee6ca83", null ], + [ "z_y", "lkf_2example_8cpp.html#a333f210bb9cc2047487bc6ea732e6084a53109a343e0ef48e39be85965b69f609", null ], + [ "z_x", "ukf_2example_8cpp.html#a333f210bb9cc2047487bc6ea732e6084aab5757870b95e7a22683c18efee6ca83", null ], + [ "z_y", "ukf_2example_8cpp.html#a333f210bb9cc2047487bc6ea732e6084a53109a343e0ef48e39be85965b69f609", null ], + [ "z_x", "ukf_2test_8cpp.html#a333f210bb9cc2047487bc6ea732e6084aab5757870b95e7a22683c18efee6ca83", null ], + [ "z_y", "ukf_2test_8cpp.html#a333f210bb9cc2047487bc6ea732e6084a53109a343e0ef48e39be85965b69f609", null ] + ] ], + [ "main", "ukf_2example_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4", null ], + [ "normal_randmat", "ukf_2example_8cpp.html#a1aa37976011a3b2fb4c2af6d82853687", null ], + [ "obs_model_f", "ukf_2example_8cpp.html#a2f2d91655b6f61b5e4dc53c95e10d710", null ], + [ "tra_model_f", "ukf_2example_8cpp.html#abc7dbaca2f835f1baab605fa3faa01a4", null ], + [ "speed", "ukf_2example_8cpp.html#a71fd37308050cd439537c5c6c2cb4614", null ] +]; \ No newline at end of file diff --git a/ukf_2example_8cpp__incl.map b/ukf_2example_8cpp__incl.map new file mode 100644 index 00000000..3a7919a2 --- /dev/null +++ b/ukf_2example_8cpp__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ukf_2example_8cpp__incl.md5 b/ukf_2example_8cpp__incl.md5 new file mode 100644 index 00000000..b633c2c1 --- /dev/null +++ b/ukf_2example_8cpp__incl.md5 @@ -0,0 +1 @@ +b915c9a451a0fffd61820b131622eece \ No newline at end of file diff --git a/ukf_2example_8cpp__incl.png b/ukf_2example_8cpp__incl.png new file mode 100644 index 00000000..803af7b9 Binary files /dev/null and b/ukf_2example_8cpp__incl.png differ diff --git a/ukf_8h.html b/ukf_8h.html new file mode 100644 index 00000000..5dbc060b --- /dev/null +++ b/ukf_8h.html @@ -0,0 +1,164 @@ + + + + + + + +mrs_lib: include/mrs_lib/ukf.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ukf.h File Reference
    +
    +
    + +

    Defines UKF - a class implementing the Unscented Kalman Filter [4]. +More...

    +
    + + Include dependency graph for ukf.h:
    +
    +
    + +
    + + This graph shows which files directly or indirectly include this file:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + + + + + + + +

    +Classes

    class  mrs_lib::UKF< n_states, n_inputs, n_measurements >
     Implementation of the Unscented Kalman filter [4]. More...
     
    struct  mrs_lib::UKF< n_states, n_inputs, n_measurements >::square_root_exception
     is thrown when taking the square root of a matrix fails during sigma generation More...
     
    struct  mrs_lib::UKF< n_states, n_inputs, n_measurements >::inverse_exception
     is thrown when taking the inverse of a matrix fails during kalman gain calculation More...
     
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    +

    Detailed Description

    +

    Defines UKF - a class implementing the Unscented Kalman Filter [4].

    +
    Author
    Tomáš Báča - bacat.nosp@m.oma@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz (original implementation)
    +
    +Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz (rewrite, documentation)
    +
    +
    + + + + diff --git a/ukf_8h__dep__incl.map b/ukf_8h__dep__incl.map new file mode 100644 index 00000000..17475939 --- /dev/null +++ b/ukf_8h__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ukf_8h__dep__incl.md5 b/ukf_8h__dep__incl.md5 new file mode 100644 index 00000000..bba8dbd3 --- /dev/null +++ b/ukf_8h__dep__incl.md5 @@ -0,0 +1 @@ +bb15f9e9d557198366ab3464f9a1e3c1 \ No newline at end of file diff --git a/ukf_8h__dep__incl.png b/ukf_8h__dep__incl.png new file mode 100644 index 00000000..971aad0b Binary files /dev/null and b/ukf_8h__dep__incl.png differ diff --git a/ukf_8h__incl.map b/ukf_8h__incl.map new file mode 100644 index 00000000..83464ff3 --- /dev/null +++ b/ukf_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ukf_8h__incl.md5 b/ukf_8h__incl.md5 new file mode 100644 index 00000000..59d0621f --- /dev/null +++ b/ukf_8h__incl.md5 @@ -0,0 +1 @@ +a4ea7977f7e979f765d1a2e740205b09 \ No newline at end of file diff --git a/ukf_8h__incl.png b/ukf_8h__incl.png new file mode 100644 index 00000000..c3ca29f0 Binary files /dev/null and b/ukf_8h__incl.png differ diff --git a/ukf_8h_source.html b/ukf_8h_source.html new file mode 100644 index 00000000..5c1334f6 --- /dev/null +++ b/ukf_8h_source.html @@ -0,0 +1,246 @@ + + + + + + + +mrs_lib: include/mrs_lib/ukf.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ukf.h
    +
    +
    +Go to the documentation of this file.
    1 // clang: MatousFormat
    +
    2 #ifndef UKF_H
    +
    3 #define UKF_H
    +
    4 
    +
    11 #include <mrs_lib/kalman_filter.h>
    +
    12 
    +
    13 namespace mrs_lib
    +
    14 {
    +
    15 
    +
    38  template <int n_states, int n_inputs, int n_measurements>
    +
    39  class UKF : KalmanFilter<n_states, n_inputs, n_measurements>
    +
    40  {
    +
    41  protected:
    +
    42  /* protected UKF definitions (typedefs, constants etc) //{ */
    +
    43  static constexpr int n = n_states;
    +
    44  static constexpr int m = n_inputs;
    +
    45  static constexpr int p = n_measurements;
    +
    46  static constexpr int w = 2 * n + 1;
    + +
    50  using X_t = typename Eigen::Matrix<double, n, w>;
    +
    51  using Z_t = typename Eigen::Matrix<double, p, w>;
    +
    52  using Pzz_t = typename Eigen::Matrix<double, p, p>;
    +
    53  using K_t = typename Eigen::Matrix<double, n, p>;
    +
    54  //}
    +
    55 
    +
    56  public:
    +
    57  /* public UKF definitions (typedefs, constants etc) //{ */
    +
    59  using x_t = typename Base_class::x_t;
    +
    61  using u_t = typename Base_class::u_t;
    +
    63  using z_t = typename Base_class::z_t;
    +
    65  using P_t = typename Base_class::P_t;
    +
    67  using R_t = typename Base_class::R_t;
    +
    69  using Q_t = typename Base_class::Q_t;
    +
    71  using W_t = typename Eigen::Matrix<double, w, 1>;
    + +
    75  using transition_model_t = typename std::function<x_t(const x_t&, const u_t&, double)>;
    +
    77  using observation_model_t = typename std::function<z_t(const x_t&)>;
    +
    78 
    +
    80  struct square_root_exception : public std::exception
    +
    81  {
    +
    82  const char* what() const throw()
    +
    83  {
    +
    84  return "UKF: taking the square root of covariance update produced NANs!!!";
    +
    85  }
    +
    86  };
    +
    87 
    +
    89  struct inverse_exception : public std::exception
    +
    90  {
    +
    91  const char* what() const throw()
    +
    92  {
    +
    93  return "UKF: inverting of Pzz in correction update produced NANs!!!";
    +
    94  }
    +
    95  };
    +
    96  //}
    +
    97 
    +
    98  public:
    +
    99  /* UKF constructor //{ */
    +
    106  UKF();
    +
    107 
    +
    117  UKF(const transition_model_t& transition_model, const observation_model_t& observation_model, const double alpha = 1e-3, const double kappa = 1, const double beta = 2);
    +
    118  //}
    +
    119 
    +
    120  /* correct() method //{ */
    +
    129  virtual statecov_t correct(const statecov_t& sc, const z_t& z, const R_t& R) const override;
    +
    130  //}
    +
    131 
    +
    132  /* predict() method //{ */
    +
    142  virtual statecov_t predict(const statecov_t& sc, const u_t& u, const Q_t& Q, double dt) const override;
    +
    143  //}
    +
    144 
    +
    145  /* setConstants() method //{ */
    +
    153  void setConstants(const double alpha, const double kappa, const double beta);
    +
    154  //}
    +
    155 
    +
    156  /* setTransitionModel() method //{ */
    +
    162  void setTransitionModel(const transition_model_t& transition_model);
    +
    163  //}
    +
    164 
    +
    165  /* setObservationModel() method //{ */
    +
    171  void setObservationModel(const observation_model_t& observation_model);
    +
    172  //}
    +
    173 
    +
    174  protected:
    +
    175  /* protected methods and member variables //{ */
    +
    176 
    +
    177  void computeWeights();
    +
    178 
    +
    179  X_t computeSigmas(const x_t& x, const P_t& P) const;
    +
    180 
    +
    181  P_t computePaSqrt(const P_t& P) const;
    +
    182 
    +
    183  Pzz_t computeInverse(const Pzz_t& Pzz) const;
    +
    184 
    +
    185  virtual K_t computeKalmanGain([[maybe_unused]] const x_t& x, [[maybe_unused]] const z_t& inn, const K_t& Pxz, const Pzz_t& Pzz) const;
    +
    186 
    +
    187  double m_alpha, m_kappa, m_beta, m_lambda;
    +
    188  W_t m_Wm;
    +
    189  W_t m_Wc;
    +
    190 
    +
    191  transition_model_t m_transition_model;
    +
    192  observation_model_t m_observation_model;
    +
    193 
    +
    194  //}
    +
    195  };
    +
    196 
    +
    197 } // namespace mrs_lib
    +
    198 
    +
    199 #include <mrs_lib/impl/ukf.hpp>
    +
    200 
    +
    201 #endif
    +
    +
    +
    typename Eigen::Matrix< double, n, w > X_t
    State sigma points matrix.
    Definition: ukf.h:50
    +
    is thrown when taking the square root of a matrix fails during sigma generation
    Definition: ukf.h:80
    +
    void setConstants(const double alpha, const double kappa, const double beta)
    Changes the Unscented Transform parameters.
    Definition: ukf.hpp:61
    +
    UKF()
    Convenience default constructor.
    Definition: ukf.hpp:20
    +
    typename Base_class::z_t z_t
    measurement vector p*1 typedef
    Definition: ukf.h:63
    +
    static constexpr int n
    Length of the state vector of the system.
    Definition: ukf.h:43
    +
    Eigen::Matrix< double, p, p > R_t
    Measurement noise covariance matrix type .
    Definition: kalman_filter.h:39
    +
    typename Eigen::Matrix< double, n, p > K_t
    Kalman gain matrix.
    Definition: ukf.h:53
    +
    Implements UKF - a class implementing the Unscented Kalman Filter.
    +
    static constexpr int p
    Length of the measurement vector of the system.
    Definition: ukf.h:45
    +
    typename std::function< x_t(const x_t &, const u_t &, double)> transition_model_t
    function of the state transition model typedef
    Definition: ukf.h:75
    +
    virtual statecov_t correct(const statecov_t &sc, const z_t &z, const R_t &R) const override
    Implements the state correction step (measurement update).
    Definition: ukf.hpp:223
    +
    Eigen::Matrix< double, n, n > P_t
    State uncertainty covariance matrix type .
    Definition: kalman_filter.h:38
    +
    typename Base_class::statecov_t statecov_t
    typedef of a helper struct for state and covariance
    Definition: ukf.h:73
    +
    typename Eigen::Matrix< double, w, 1 > W_t
    weights vector (2n+1)*1 typedef
    Definition: ukf.h:71
    +
    Eigen::Matrix< double, m, 1 > u_t
    Input vector type .
    Definition: kalman_filter.h:35
    +
    static constexpr int w
    Number of sigma points/weights.
    Definition: ukf.h:46
    +
    typename std::function< z_t(const x_t &)> observation_model_t
    function of the observation model typedef
    Definition: ukf.h:77
    +
    void setObservationModel(const observation_model_t &observation_model)
    Changes the observation model function.
    Definition: ukf.hpp:85
    +
    Eigen::Matrix< double, n, 1 > x_t
    State vector type .
    Definition: kalman_filter.h:34
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    void setTransitionModel(const transition_model_t &transition_model)
    Changes the transition model function.
    Definition: ukf.hpp:75
    +
    Defines KalmanFilter - an abstract class, defining common interfaces and types for a generic Kalman f...
    +
    typename Eigen::Matrix< double, p, p > Pzz_t
    Pzz helper matrix.
    Definition: ukf.h:52
    +
    static constexpr int m
    Length of the input vector of the system.
    Definition: ukf.h:44
    +
    virtual statecov_t predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const override
    Implements the state prediction step (time update).
    Definition: ukf.hpp:178
    +
    typename Base_class::x_t x_t
    state vector n*1 typedef
    Definition: ukf.h:59
    +
    Eigen::Matrix< double, n, n > Q_t
    Process noise covariance matrix type .
    Definition: kalman_filter.h:40
    +
    Eigen::Matrix< double, p, 1 > z_t
    Measurement vector type .
    Definition: kalman_filter.h:36
    +
    typename Eigen::Matrix< double, p, w > Z_t
    Measurement sigma points matrix.
    Definition: ukf.h:51
    +
    Helper struct for passing around the state and its covariance in one variable.
    Definition: kalman_filter.h:47
    +
    Implementation of the Unscented Kalman filter .
    Definition: ukf.h:39
    +
    is thrown when taking the inverse of a matrix fails during kalman gain calculation
    Definition: ukf.h:89
    +
    This abstract class defines common interfaces and types for a generic Kalman filter.
    Definition: kalman_filter.h:26
    + + + + diff --git a/ukf_8hpp.html b/ukf_8hpp.html new file mode 100644 index 00000000..668c8f5f --- /dev/null +++ b/ukf_8hpp.html @@ -0,0 +1,151 @@ + + + + + + + +mrs_lib: include/mrs_lib/impl/ukf.hpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ukf.hpp File Reference
    +
    +
    + +

    Implements UKF - a class implementing the Unscented Kalman Filter. +More...

    +
    #include <ros/ros.h>
    +#include <mrs_lib/ukf.h>
    +
    + + Include dependency graph for ukf.hpp:
    +
    +
    + +
    + + This graph shows which files directly or indirectly include this file:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    +

    Detailed Description

    +

    Implements UKF - a class implementing the Unscented Kalman Filter.

    +
    Author
    Tomáš Báča - bacat.nosp@m.oma@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz (original implementation)
    +
    +Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz (rewrite, documentation)
    +
    +
    + + + + diff --git a/ukf_8hpp__dep__incl.map b/ukf_8hpp__dep__incl.map new file mode 100644 index 00000000..44a11c27 --- /dev/null +++ b/ukf_8hpp__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ukf_8hpp__dep__incl.md5 b/ukf_8hpp__dep__incl.md5 new file mode 100644 index 00000000..757c4296 --- /dev/null +++ b/ukf_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +ab2a079642e8b494b5aac490be2e7d39 \ No newline at end of file diff --git a/ukf_8hpp__dep__incl.png b/ukf_8hpp__dep__incl.png new file mode 100644 index 00000000..a904e3d4 Binary files /dev/null and b/ukf_8hpp__dep__incl.png differ diff --git a/ukf_8hpp__incl.map b/ukf_8hpp__incl.map new file mode 100644 index 00000000..5ef19e96 --- /dev/null +++ b/ukf_8hpp__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ukf_8hpp__incl.md5 b/ukf_8hpp__incl.md5 new file mode 100644 index 00000000..b381286c --- /dev/null +++ b/ukf_8hpp__incl.md5 @@ -0,0 +1 @@ +168e0a71714413452afdf269c5a72d61 \ No newline at end of file diff --git a/ukf_8hpp__incl.png b/ukf_8hpp__incl.png new file mode 100644 index 00000000..6306355f Binary files /dev/null and b/ukf_8hpp__incl.png differ diff --git a/ukf_8hpp_source.html b/ukf_8hpp_source.html new file mode 100644 index 00000000..9567cf9e --- /dev/null +++ b/ukf_8hpp_source.html @@ -0,0 +1,400 @@ + + + + + + + +mrs_lib: include/mrs_lib/impl/ukf.hpp Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ukf.hpp
    +
    +
    +Go to the documentation of this file.
    1 // clang: MatousFormat
    +
    2 
    +
    3 #ifndef UKF_HPP
    +
    4 #define UKF_HPP
    +
    5 
    +
    12 #include <ros/ros.h>
    +
    13 #include <mrs_lib/ukf.h>
    +
    14 
    +
    15 namespace mrs_lib
    +
    16 {
    +
    17  /* constructor //{ */
    +
    18 
    +
    19  template <int n_states, int n_inputs, int n_measurements>
    + +
    21  {
    +
    22  }
    +
    23 
    +
    24  template <int n_states, int n_inputs, int n_measurements>
    +
    25  UKF<n_states, n_inputs, n_measurements>::UKF(const transition_model_t& transition_model, const observation_model_t& observation_model, const double alpha, const double kappa, const double beta)
    +
    26  : m_alpha(alpha), m_kappa(kappa), m_beta(beta), m_Wm(W_t::Zero()), m_Wc(W_t::Zero()), m_transition_model(transition_model), m_observation_model(observation_model)
    +
    27  {
    +
    28  assert(alpha > 0.0);
    +
    29  computeWeights();
    +
    30  }
    +
    31 
    +
    32  //}
    +
    33 
    +
    34  /* computeWeights() //{ */
    +
    35 
    +
    36  template <int n_states, int n_inputs, int n_measurements>
    + +
    38  {
    +
    39  // initialize lambda
    +
    40  /* m_lambda = double(n) * (m_alpha * m_alpha - 1.0); */
    +
    41  m_lambda = m_alpha*m_alpha*(double(n) + m_kappa) - double(n);
    +
    42 
    +
    43  // initialize first terms of the weights
    +
    44  m_Wm(0) = m_lambda / (double(n) + m_lambda);
    +
    45  m_Wc(0) = m_Wm(0) + (1.0 - m_alpha*m_alpha + m_beta);
    +
    46 
    +
    47  // initialize the rest of the weights
    +
    48  for (int i = 1; i < w; i++)
    +
    49  {
    +
    50  m_Wm(i) = (1.0 - m_Wm(0))/(w - 1.0);
    +
    51  m_Wc(i) = m_Wm(i);
    +
    52  }
    +
    53  }
    +
    54 
    +
    55  //}
    +
    56 
    +
    57  /* setConstants() //{ */
    +
    58 
    +
    59  template <int n_states, int n_inputs, int n_measurements>
    +
    60  // update the UKF constants
    +
    61  void UKF<n_states, n_inputs, n_measurements>::setConstants(const double alpha, const double kappa, const double beta)
    +
    62  {
    +
    63  m_alpha = alpha;
    +
    64  m_kappa = kappa;
    +
    65  m_beta = beta;
    +
    66 
    +
    67  computeWeights();
    +
    68  }
    +
    69 
    +
    70  //}
    +
    71 
    +
    72  /* setTransitionModel() method //{ */
    +
    73 
    +
    74  template <int n_states, int n_inputs, int n_measurements>
    + +
    76  {
    +
    77  m_transition_model = transition_model;
    +
    78  }
    +
    79 
    +
    80  //}
    +
    81 
    +
    82  /* setObservationModel() method //{ */
    +
    83 
    +
    84  template <int n_states, int n_inputs, int n_measurements>
    + +
    86  {
    +
    87  m_observation_model = observation_model;
    +
    88  }
    +
    89 
    +
    90  //}
    +
    91 
    +
    92  /* computePaSqrt() method //{ */
    +
    93  template <int n_states, int n_inputs, int n_measurements>
    + +
    95  {
    +
    96  // calculate the square root of the covariance matrix
    +
    97  const P_t Pa = (double(n) + m_lambda)*P;
    +
    98 
    +
    99  /* Eigen::SelfAdjointEigenSolver<P_t> es(Pa); */
    +
    100  Eigen::LLT<P_t> llt(Pa);
    +
    101  if (llt.info() != Eigen::Success)
    +
    102  {
    +
    103  P_t tmp = Pa + (double(n) + m_lambda)*1e-9*P_t::Identity();
    +
    104  llt.compute(tmp);
    +
    105  if (llt.info() != Eigen::Success)
    +
    106  {
    +
    107  ROS_WARN("UKF: taking the square root of covariance during sigma point generation failed.");
    +
    108  throw square_root_exception();
    +
    109  }
    +
    110  }
    +
    111 
    +
    112  const P_t Pa_sqrt = llt.matrixL();
    +
    113  return Pa_sqrt;
    +
    114  }
    +
    115  //}
    +
    116 
    +
    117  /* computeInverse() method //{ */
    +
    118  template <int n_states, int n_inputs, int n_measurements>
    +
    119  typename UKF<n_states, n_inputs, n_measurements>::Pzz_t UKF<n_states, n_inputs, n_measurements>::computeInverse(const Pzz_t& Pzz) const
    +
    120  {
    +
    121  Eigen::ColPivHouseholderQR<Pzz_t> qr(Pzz);
    +
    122  if (!qr.isInvertible())
    +
    123  {
    +
    124  // add some stuff to the tmp matrix diagonal to make it invertible
    +
    125  Pzz_t tmp = Pzz + 1e-9*Pzz_t::Identity(Pzz.rows(), Pzz.cols());
    +
    126  qr.compute(tmp);
    +
    127  if (!qr.isInvertible())
    +
    128  {
    +
    129  // never managed to make this happen except for explicitly putting NaNs in the input
    +
    130  ROS_ERROR("UKF: could not compute matrix inversion!!! Fix your covariances (the measurement's is probably too low...)");
    +
    131  throw inverse_exception();
    +
    132  }
    +
    133  ROS_WARN("UKF: artificially inflating matrix for inverse computation! Check your covariances (the measurement's might be too low...)");
    +
    134  }
    +
    135  Pzz_t ret = qr.inverse();
    +
    136  return ret;
    +
    137  }
    +
    138  //}
    +
    139 
    +
    140  /* computeKalmanGain() method //{ */
    +
    141  template <int n_states, int n_inputs, int n_measurements>
    +
    142  typename UKF<n_states, n_inputs, n_measurements>::K_t UKF<n_states, n_inputs, n_measurements>::computeKalmanGain([[maybe_unused]] const x_t& x, [[maybe_unused]] const z_t& inn, const K_t& Pxz, const Pzz_t& Pzz) const
    +
    143  {
    +
    144  const Pzz_t Pzz_inv = computeInverse(Pzz);
    +
    145  const K_t K = Pxz * Pzz_inv;
    +
    146  return K;
    +
    147  }
    +
    148  //}
    +
    149 
    +
    150  /* computeSigmas() method //{ */
    +
    151  template <int n_states, int n_inputs, int n_measurements>
    +
    152  typename UKF<n_states, n_inputs, n_measurements>::X_t UKF<n_states, n_inputs, n_measurements>::computeSigmas(const x_t& x, const P_t& P) const
    +
    153  {
    +
    154  // calculate sigma points
    +
    155  // fill in the middle of the elipsoid
    +
    156  X_t S;
    +
    157  S.col(0) = x;
    +
    158 
    +
    159  const P_t P_sqrt = computePaSqrt(P);
    +
    160  const auto xrep = x.replicate(1, n);
    +
    161 
    +
    162  // positive sigma points
    +
    163  S.template block<n, n>(0, 1) = xrep + P_sqrt;
    +
    164 
    +
    165  // negative sigma points
    +
    166  S.template block<n, n>(0, n+1) = xrep - P_sqrt;
    +
    167 
    +
    168  /* std::cout << "x: " << std::endl << x << std::endl; */
    +
    169  /* std::cout << "S rowmean: " << std::endl << S.rowwise().mean() << std::endl; */
    +
    170 
    +
    171  return S;
    +
    172  }
    +
    173  //}
    +
    174 
    +
    175  /* predict() method //{ */
    +
    176 
    +
    177  template <int n_states, int n_inputs, int n_measurements>
    + +
    179  {
    +
    180  const auto& x = sc.x;
    +
    181  const auto& P = sc.P;
    +
    182  statecov_t ret;
    +
    183 
    +
    184  const X_t S = computeSigmas(x, P);
    +
    185 
    +
    186  // propagate sigmas through the transition model
    +
    187  X_t X;
    +
    188  for (int i = 0; i < w; i++)
    +
    189  {
    +
    190  X.col(i) = m_transition_model(S.col(i), u, dt);
    +
    191  }
    +
    192 
    +
    193  /* std::cout << "x: " << std::endl << x << std::endl; */
    +
    194  /* std::cout << "X rowmean: " << std::endl << X.rowwise().mean() << std::endl; */
    +
    195  /* std::cout << "m_Wm sum: " << m_Wm.sum() << std::endl; */
    +
    196 
    +
    197  // recompute the state vector
    +
    198  ret.x = x_t::Zero();
    +
    199  for (int i = 0; i < w; i++)
    +
    200  {
    +
    201  //TODO: WHY DOES THIS SHIT WORK IF I SUBSTITUTE m_Wm(i) FOR 1.0/w ??
    +
    202  x_t tmp = 1.0/w * X.col(i);
    +
    203  /* x_t tmp = m_Wm(i) * X.col(i); */
    +
    204  ret.x += tmp;
    +
    205  }
    +
    206 
    +
    207  // recompute the covariance
    +
    208  ret.P = P_t::Zero();
    +
    209  for (int i = 0; i < w; i++)
    +
    210  {
    +
    211  ret.P += m_Wc(i) * (X.col(i) - ret.x) * (X.col(i) - ret.x).transpose();
    +
    212  }
    +
    213  ret.P += Q;
    +
    214 
    +
    215  return ret;
    +
    216  }
    +
    217 
    +
    218  //}
    +
    219 
    +
    220  /* correct() method //{ */
    +
    221 
    +
    222  template <int n_states, int n_inputs, int n_measurements>
    + +
    224  {
    +
    225  const auto& x = sc.x;
    +
    226  const auto& P = sc.P;
    +
    227  const X_t S = computeSigmas(x, P);
    +
    228 
    +
    229  // propagate sigmas through the observation model
    +
    230  Z_t Z_exp(z.rows(), w);
    +
    231  for (int i = 0; i < w; i++)
    +
    232  {
    +
    233  Z_exp.col(i) = m_observation_model(S.col(i));
    +
    234  }
    +
    235 
    +
    236  // compute expected measurement
    +
    237  z_t z_exp = z_t::Zero(z.rows());
    +
    238  for (int i = 0; i < w; i++)
    +
    239  {
    +
    240  z_exp += m_Wm(i) * Z_exp.col(i);
    +
    241  }
    +
    242 
    +
    243  // compute the covariance of measurement
    +
    244  Pzz_t Pzz = Pzz_t::Zero(z.rows(), z.rows());
    +
    245  for (int i = 0; i < w; i++)
    +
    246  {
    +
    247  Pzz += m_Wc(i) * (Z_exp.col(i) - z_exp) * (Z_exp.col(i) - z_exp).transpose();
    +
    248  }
    +
    249  Pzz += R;
    +
    250 
    +
    251  // compute cross covariance
    +
    252  K_t Pxz = K_t::Zero(n, z.rows());
    +
    253  for (int i = 0; i < w; i++)
    +
    254  {
    +
    255  Pxz += m_Wc(i) * (S.col(i) - x) * (Z_exp.col(i) - z_exp).transpose();
    +
    256  }
    +
    257 
    +
    258  // compute Kalman gain
    +
    259  const z_t inn = (z - z_exp); // innovation
    +
    260  const K_t K = computeKalmanGain(sc.x, inn, Pxz, Pzz);
    +
    261 
    +
    262  // check whether the inverse produced valid numbers
    +
    263  if (!K.array().isFinite().all())
    +
    264  {
    +
    265  ROS_ERROR("UKF: inverting of Pzz in correction update produced non-finite numbers!!! Fix your covariances (the measurement's is probably too low...)");
    +
    266  throw inverse_exception();
    +
    267  }
    +
    268 
    +
    269  // correct
    +
    270  statecov_t ret;
    +
    271  ret.x = x + K * inn;
    +
    272  ret.P = P - K * Pzz * K.transpose();
    +
    273  return ret;
    +
    274  }
    +
    275 
    +
    276  //}
    +
    277 
    +
    278 } // namespace mrs_lib
    +
    279 
    +
    280 #endif
    +
    +
    +
    typename Eigen::Matrix< double, n, w > X_t
    State sigma points matrix.
    Definition: ukf.h:50
    +
    void setConstants(const double alpha, const double kappa, const double beta)
    Changes the Unscented Transform parameters.
    Definition: ukf.hpp:61
    +
    UKF()
    Convenience default constructor.
    Definition: ukf.hpp:20
    +
    Eigen::Matrix< double, p, p > R_t
    Measurement noise covariance matrix type .
    Definition: kalman_filter.h:39
    +
    typename Eigen::Matrix< double, n, p > K_t
    Kalman gain matrix.
    Definition: ukf.h:53
    +
    typename std::function< x_t(const x_t &, const u_t &, double)> transition_model_t
    function of the state transition model typedef
    Definition: ukf.h:75
    +
    virtual statecov_t correct(const statecov_t &sc, const z_t &z, const R_t &R) const override
    Implements the state correction step (measurement update).
    Definition: ukf.hpp:223
    +
    typename Base_class::statecov_t statecov_t
    typedef of a helper struct for state and covariance
    Definition: ukf.h:73
    +
    typename Eigen::Matrix< double, w, 1 > W_t
    weights vector (2n+1)*1 typedef
    Definition: ukf.h:71
    +
    Eigen::Matrix< double, m, 1 > u_t
    Input vector type .
    Definition: kalman_filter.h:35
    +
    typename std::function< z_t(const x_t &)> observation_model_t
    function of the observation model typedef
    Definition: ukf.h:77
    +
    void setObservationModel(const observation_model_t &observation_model)
    Changes the observation model function.
    Definition: ukf.hpp:85
    +
    Eigen::Matrix< double, n, 1 > x_t
    State vector type .
    Definition: kalman_filter.h:34
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    void setTransitionModel(const transition_model_t &transition_model)
    Changes the transition model function.
    Definition: ukf.hpp:75
    +
    typename Eigen::Matrix< double, p, p > Pzz_t
    Pzz helper matrix.
    Definition: ukf.h:52
    +
    typename Base_class::P_t P_t
    state covariance n*n typedef
    Definition: ukf.h:65
    +
    virtual statecov_t predict(const statecov_t &sc, const u_t &u, const Q_t &Q, double dt) const override
    Implements the state prediction step (time update).
    Definition: ukf.hpp:178
    +
    Eigen::Matrix< double, n, n > Q_t
    Process noise covariance matrix type .
    Definition: kalman_filter.h:40
    +
    Eigen::Matrix< double, p, 1 > z_t
    Measurement vector type .
    Definition: kalman_filter.h:36
    +
    typename Eigen::Matrix< double, p, w > Z_t
    Measurement sigma points matrix.
    Definition: ukf.h:51
    +
    Defines UKF - a class implementing the Unscented Kalman Filter .
    +
    Implementation of the Unscented Kalman filter .
    Definition: ukf.h:39
    +
    is thrown when taking the inverse of a matrix fails during kalman gain calculation
    Definition: ukf.h:89
    + + + + diff --git a/utils_8h.html b/utils_8h.html new file mode 100644 index 00000000..611837a2 --- /dev/null +++ b/utils_8h.html @@ -0,0 +1,189 @@ + + + + + + + +mrs_lib: include/mrs_lib/utils.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    utils.h File Reference
    +
    +
    + +

    Defines various general utility functions. +More...

    +
    #include <iterator>
    +#include <vector>
    +#include <sstream>
    +#include <atomic>
    +
    + + Include dependency graph for utils.h:
    +
    +
    + +
    + + This graph shows which files directly or indirectly include this file:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  mrs_lib::AtomicScopeFlag
     Convenience class for automatically setting and unsetting an atomic boolean based on the object's scope. Useful e.g. for indicating whether a thread is running or not. More...
     
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename Iterator >
    std::string mrs_lib::containerToString (const Iterator begin, const Iterator end, const std::string &delimiter=", ")
     Convenience function for converting container ranges to strings (e.g. for printing). More...
     
    template<typename Iterator >
    std::string mrs_lib::containerToString (const Iterator begin, const Iterator end, const char *delimiter)
     Convenience function for converting container ranges to strings (e.g. for printing). More...
     
    template<typename Container >
    std::string mrs_lib::containerToString (const Container &cont, const std::string &delimiter=", ")
     Convenience function for converting containers to strings (e.g. for printing). More...
     
    template<typename Container >
    std::string mrs_lib::containerToString (const Container &cont, const char *delimiter=", ")
     Convenience function for converting containers to strings (e.g. for printing). More...
     
    template<typename T >
    T::iterator mrs_lib::remove_const (const typename T::const_iterator &it, T &cont)
     Convenience class for removing const-ness from a container iterator. More...
     
    +template<typename T >
    int mrs_lib::signum (T val)
     
    +

    Detailed Description

    +
    +
    + + + + diff --git a/utils_8h.js b/utils_8h.js new file mode 100644 index 00000000..e2aca68f --- /dev/null +++ b/utils_8h.js @@ -0,0 +1,10 @@ +var utils_8h = +[ + [ "AtomicScopeFlag", "classmrs__lib_1_1AtomicScopeFlag.html", "classmrs__lib_1_1AtomicScopeFlag" ], + [ "containerToString", "utils_8h.html#ad5bd70829aedd3ff4a67d8902855eed9", null ], + [ "containerToString", "utils_8h.html#a1c0c2c8502894646615382a9134c866a", null ], + [ "containerToString", "utils_8h.html#a10c2af0f8c317177ca6abca5fd80a52a", null ], + [ "containerToString", "utils_8h.html#adcd658b38c38786fa906e95b1252393a", null ], + [ "remove_const", "utils_8h.html#a006d8eb9265ad5e8b2f908df6deb55b5", null ], + [ "signum", "utils_8h.html#a860d8ff84b45a6a45863d410b54a6dec", null ] +]; \ No newline at end of file diff --git a/utils_8h__dep__incl.map b/utils_8h__dep__incl.map new file mode 100644 index 00000000..ae392433 --- /dev/null +++ b/utils_8h__dep__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/utils_8h__dep__incl.md5 b/utils_8h__dep__incl.md5 new file mode 100644 index 00000000..ee21bbb6 --- /dev/null +++ b/utils_8h__dep__incl.md5 @@ -0,0 +1 @@ +75b31844a7013110d1c813fc2aeadb2c \ No newline at end of file diff --git a/utils_8h__dep__incl.png b/utils_8h__dep__incl.png new file mode 100644 index 00000000..ba0e6b52 Binary files /dev/null and b/utils_8h__dep__incl.png differ diff --git a/utils_8h__incl.map b/utils_8h__incl.map new file mode 100644 index 00000000..71f8c7e1 --- /dev/null +++ b/utils_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/utils_8h__incl.md5 b/utils_8h__incl.md5 new file mode 100644 index 00000000..027361a4 --- /dev/null +++ b/utils_8h__incl.md5 @@ -0,0 +1 @@ +5b66800825eb91f27808fe3e0ac83511 \ No newline at end of file diff --git a/utils_8h__incl.png b/utils_8h__incl.png new file mode 100644 index 00000000..7093baad Binary files /dev/null and b/utils_8h__incl.png differ diff --git a/utils_8h_source.html b/utils_8h_source.html new file mode 100644 index 00000000..e1daea17 --- /dev/null +++ b/utils_8h_source.html @@ -0,0 +1,190 @@ + + + + + + + +mrs_lib: include/mrs_lib/utils.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    utils.h
    +
    +
    +Go to the documentation of this file.
    1 // clang: MatousFormat
    +
    8 #ifndef UTILS_H
    +
    9 #define UTILS_H
    +
    10 
    +
    11 #include <iterator>
    +
    12 #include <vector>
    +
    13 #include <sstream>
    +
    14 #include <atomic>
    +
    15 
    +
    16 namespace mrs_lib
    +
    17 {
    +
    18  /* containerToString() function //{ */
    +
    19 
    +
    29  template <typename Iterator>
    +
    30  std::string containerToString(const Iterator begin, const Iterator end, const std::string& delimiter = ", ")
    +
    31  {
    +
    32  bool first = true;
    +
    33  std::ostringstream output;
    +
    34  for (Iterator it = begin; it != end; it++)
    +
    35  {
    +
    36  if (!first)
    +
    37  output << delimiter;
    +
    38  output << *it;
    +
    39  first = false;
    +
    40  }
    +
    41  return output.str();
    +
    42  }
    +
    43 
    +
    53  template <typename Iterator>
    +
    54  std::string containerToString(const Iterator begin, const Iterator end, const char* delimiter)
    +
    55  {
    +
    56  return containerToString(begin, end, std::string(delimiter));
    +
    57  }
    +
    58 
    +
    67  template <typename Container>
    +
    68  std::string containerToString(const Container& cont, const std::string& delimiter = ", ")
    +
    69  {
    +
    70  return containerToString(std::begin(cont), std::end(cont), delimiter);
    +
    71  }
    +
    72 
    +
    81  template <typename Container>
    +
    82  std::string containerToString(const Container& cont, const char* delimiter = ", ")
    +
    83  {
    +
    84  return containerToString(std::begin(cont), std::end(cont), std::string(delimiter));
    +
    85  }
    +
    86 
    +
    87  //}
    +
    88 
    +
    89  /* remove_const() function //{ */
    +
    90 
    +
    99  template <typename T>
    +
    100  typename T::iterator remove_const(const typename T::const_iterator& it, T& cont)
    +
    101  {
    +
    102  typename T::iterator ret = cont.begin();
    +
    103  std::advance(ret, std::distance((typename T::const_iterator)ret, it));
    +
    104  return ret;
    +
    105  }
    +
    106 
    +
    107  //}
    +
    108 
    + +
    115  {
    +
    116 
    +
    117  public:
    +
    124  AtomicScopeFlag(std::atomic<bool>& in);
    + +
    130 
    +
    131  private:
    +
    132  std::atomic<bool>& variable;
    +
    133  };
    +
    134 
    +
    135  // branchless, templated, more efficient version of the signum function
    +
    136  // taken from https://stackoverflow.com/questions/1903954/is-there-a-standard-sign-function-signum-sgn-in-c-c
    +
    137  template <typename T>
    +
    138  int signum(T val)
    +
    139  {
    +
    140  return (T(0) < val) - (val < T(0));
    +
    141  }
    +
    142 
    +
    143 } // namespace mrs_lib
    +
    144 
    +
    145 #endif
    +
    +
    +
    Convenience class for automatically setting and unsetting an atomic boolean based on the object's sco...
    Definition: utils.h:114
    +
    std::string containerToString(const Iterator begin, const Iterator end, const std::string &delimiter=", ")
    Convenience function for converting container ranges to strings (e.g. for printing).
    Definition: utils.h:30
    +
    T::iterator remove_const(const typename T::const_iterator &it, T &cont)
    Convenience class for removing const-ness from a container iterator.
    Definition: utils.h:100
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    AtomicScopeFlag(std::atomic< bool > &in)
    The constructor. Sets the flag in to true.
    Definition: utils.cpp:6
    +
    ~AtomicScopeFlag()
    The destructor. Resets the variable given in the constructor to false.
    Definition: utils.cpp:12
    + + + + diff --git a/vector__converter_2example_8cpp.html b/vector__converter_2example_8cpp.html new file mode 100644 index 00000000..21362ace --- /dev/null +++ b/vector__converter_2example_8cpp.html @@ -0,0 +1,159 @@ + + + + + + + +mrs_lib: src/vector_converter/example.cpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    example.cpp File Reference
    +
    +
    + +

    Example file for the convert() vector type conversion function. +More...

    +
    #include <geometry_msgs/Vector3.h>
    +#include <Eigen/Dense>
    +#include <pcl/point_types.h>
    +#include <mrs_lib/vector_converter.h>
    +
    + + Include dependency graph for example.cpp:
    +
    +
    + +
    + + + +

    +Classes

    struct  MyPoint
     
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    + + + + + + + +

    +Functions

    +std::tuple< double, double, double > mrs_lib::impl::convertFrom (const MyPoint &in)
     
    +void mrs_lib::impl::convertTo (MyPoint &ret, const double x, const double y, const double z)
     
    +int main ()
     
    +

    Detailed Description

    +

    Example file for the convert() vector type conversion function.

    +
    Author
    Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +

    This example may be run after building mrs_lib by executing rosrun mrs_lib vector_converter_example.

    +

    See vector_converter/example.cpp.

    +
    +
    + + + + diff --git a/vector__converter_2example_8cpp.js b/vector__converter_2example_8cpp.js new file mode 100644 index 00000000..b3ec1887 --- /dev/null +++ b/vector__converter_2example_8cpp.js @@ -0,0 +1,7 @@ +var vector__converter_2example_8cpp = +[ + [ "MyPoint", "structMyPoint.html", "structMyPoint" ], + [ "convertFrom", "vector__converter_2example_8cpp.html#a6828e3ce1e89ca5de408209a5e5fb049", null ], + [ "convertTo", "vector__converter_2example_8cpp.html#af40c76d70b6c9cce94cf336ac620887c", null ], + [ "main", "vector__converter_2example_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4", null ] +]; \ No newline at end of file diff --git a/vector__converter_2example_8cpp__incl.map b/vector__converter_2example_8cpp__incl.map new file mode 100644 index 00000000..6581407b --- /dev/null +++ b/vector__converter_2example_8cpp__incl.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/vector__converter_2example_8cpp__incl.md5 b/vector__converter_2example_8cpp__incl.md5 new file mode 100644 index 00000000..2ee67eed --- /dev/null +++ b/vector__converter_2example_8cpp__incl.md5 @@ -0,0 +1 @@ +c2d4f9f7c8deb607a11470f3524ed3c7 \ No newline at end of file diff --git a/vector__converter_2example_8cpp__incl.png b/vector__converter_2example_8cpp__incl.png new file mode 100644 index 00000000..49705ef0 Binary files /dev/null and b/vector__converter_2example_8cpp__incl.png differ diff --git a/vector__converter_8h.html b/vector__converter_8h.html new file mode 100644 index 00000000..a9d6e357 --- /dev/null +++ b/vector__converter_8h.html @@ -0,0 +1,153 @@ + + + + + + + +mrs_lib: include/mrs_lib/vector_converter.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    vector_converter.h File Reference
    +
    +
    + +

    Defines the convert() function for conversion between different vector representations (Eigen, OpenCV, tf2 etc.). +More...

    +
    #include <tuple>
    +#include <mrs_lib/impl/vector_converter.hpp>
    +
    + + Include dependency graph for vector_converter.h:
    +
    +
    + +
    + + This graph shows which files directly or indirectly include this file:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    + + + + + +

    +Functions

    template<typename ret_t , typename in_t >
    ret_t mrs_lib::convert (const in_t &in)
     Converts between different vector representations. More...
     
    +

    Detailed Description

    +

    Defines the convert() function for conversion between different vector representations (Eigen, OpenCV, tf2 etc.).

    +
    Author
    Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +
    +
    + + + + diff --git a/vector__converter_8h.js b/vector__converter_8h.js new file mode 100644 index 00000000..9a104ec7 --- /dev/null +++ b/vector__converter_8h.js @@ -0,0 +1,4 @@ +var vector__converter_8h = +[ + [ "convert", "vector__converter_8h.html#a66ab536759b8cab264138c098008c9ca", null ] +]; \ No newline at end of file diff --git a/vector__converter_8h__dep__incl.map b/vector__converter_8h__dep__incl.map new file mode 100644 index 00000000..d4cbe81c --- /dev/null +++ b/vector__converter_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/vector__converter_8h__dep__incl.md5 b/vector__converter_8h__dep__incl.md5 new file mode 100644 index 00000000..12f493fb --- /dev/null +++ b/vector__converter_8h__dep__incl.md5 @@ -0,0 +1 @@ +d916916ab8b3e4b7b2df2c0df9b294da \ No newline at end of file diff --git a/vector__converter_8h__dep__incl.png b/vector__converter_8h__dep__incl.png new file mode 100644 index 00000000..dfa5bd1b Binary files /dev/null and b/vector__converter_8h__dep__incl.png differ diff --git a/vector__converter_8h__incl.map b/vector__converter_8h__incl.map new file mode 100644 index 00000000..ea4fffb8 --- /dev/null +++ b/vector__converter_8h__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/vector__converter_8h__incl.md5 b/vector__converter_8h__incl.md5 new file mode 100644 index 00000000..c6da6874 --- /dev/null +++ b/vector__converter_8h__incl.md5 @@ -0,0 +1 @@ +1daaf89af5bc6561e7f0192ae9e97e8e \ No newline at end of file diff --git a/vector__converter_8h__incl.png b/vector__converter_8h__incl.png new file mode 100644 index 00000000..153f76ad Binary files /dev/null and b/vector__converter_8h__incl.png differ diff --git a/vector__converter_8h_source.html b/vector__converter_8h_source.html new file mode 100644 index 00000000..b96e2fa8 --- /dev/null +++ b/vector__converter_8h_source.html @@ -0,0 +1,128 @@ + + + + + + + +mrs_lib: include/mrs_lib/vector_converter.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    vector_converter.h
    +
    +
    +Go to the documentation of this file.
    1 // clang: MatousFormat
    +
    6 #ifndef VECTOR_CONVERTER_H
    +
    7 #define VECTOR_CONVERTER_H
    +
    8 
    +
    9 #include <tuple>
    +
    10 
    + +
    12 
    +
    13 namespace mrs_lib
    +
    14 {
    +
    15 
    +
    33  template <typename ret_t, typename in_t>
    +
    34  ret_t convert(const in_t& in)
    +
    35  {
    +
    36  const auto [x, y, z] = impl::convertFrom(in);
    +
    37  ret_t ret;
    +
    38  impl::convertTo(ret, x, y, z);
    +
    39  return ret;
    +
    40  }
    +
    41 
    +
    42 }
    +
    43 
    +
    44 #endif // VECTOR_CONVERTER_H
    +
    +
    +
    ret_t convert(const in_t &in)
    Converts between different vector representations.
    Definition: vector_converter.h:34
    +
    Implements the convertTo() and convertFrom() functions for conversion between different vector repres...
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    + + + + diff --git a/vector__converter_8hpp.html b/vector__converter_8hpp.html new file mode 100644 index 00000000..103dc23e --- /dev/null +++ b/vector__converter_8hpp.html @@ -0,0 +1,267 @@ + + + + + + + +mrs_lib: include/mrs_lib/impl/vector_converter.hpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    vector_converter.hpp File Reference
    +
    +
    + +

    Implements the convertTo() and convertFrom() functions for conversion between different vector representations (Eigen, OpenCV, tf2 etc.). +More...

    +
    #include <experimental/type_traits>
    +
    + + Include dependency graph for vector_converter.hpp:
    +
    +
    + +
    + + This graph shows which files directly or indirectly include this file:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    + + + + + +

    +Macros

    #define GENERATE_HAS_MEMBER_FUNC(func, rettype)
     
    #define GENERATE_HAS_MEMBER(memb, type)
     
    + + + + + + +

    +Typedefs

    +using mrs_lib::impl::unw_t = std::tuple< double, double, double >
     
    +template<class T >
    using mrs_lib::impl::_has_squarebracket_operator_chk = decltype(std::declval< T & >()[0])
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions

    +template<typename in_t >
    std::enable_if_t< has_xfun_v< in_t >, unw_t > mrs_lib::impl::convertFrom (const in_t &in)
     
    +template<typename in_t >
    std::enable_if_t< has_xmem_v< in_t >, unw_t > mrs_lib::impl::convertFrom (const in_t &in)
     
    +template<typename in_t >
    std::enable_if_t< has_squarebracket_operator_v< in_t > &&!has_xfun_v< in_t >, unw_t > mrs_lib::impl::convertFrom (const in_t &in)
     
    +template<typename ret_t >
    std::enable_if_t< has_xyz_constructor_v< ret_t >, void > mrs_lib::impl::convertTo (ret_t &out, const double x, const double y, const double z)
     
    +template<typename ret_t >
    std::enable_if_t<!has_xyz_constructor_v< ret_t > &&has_xmem_v< ret_t >, void > mrs_lib::impl::convertTo (ret_t &out, const double x, const double y, const double z)
     
    +template<typename ret_t >
    ret_t mrs_lib::impl::convertTo (const double x, const double y, const double z)
     
    + + + + + + + +

    +Variables

    +template<class T >
    constexpr bool mrs_lib::impl::has_squarebracket_operator_v = std::experimental::is_detected_convertible_v<double, _has_squarebracket_operator_chk, T>
     
    +template<class T >
    constexpr bool mrs_lib::impl::has_xyz_constructor_v = std::experimental::is_constructible_v<T, double, double, double>
     
    +

    Detailed Description

    +

    Implements the convertTo() and convertFrom() functions for conversion between different vector representations (Eigen, OpenCV, tf2 etc.).

    +
    Author
    Matouš Vrba - vrbam.nosp@m.ato@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +

    Macro Definition Documentation

    + +

    ◆ GENERATE_HAS_MEMBER

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define GENERATE_HAS_MEMBER( memb,
     type 
    )
    +
    +Value:
    template<class T> using _has_##memb##mem_chk = \
    +
    decltype(std::declval<T &>().memb); \
    +
    template<class T> constexpr bool has_##memb##mem_v = \
    +
    std::experimental::is_detected_convertible_v<type, _has_##memb##mem_chk, T>;
    +
    +
    +
    + +

    ◆ GENERATE_HAS_MEMBER_FUNC

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define GENERATE_HAS_MEMBER_FUNC( func,
     rettype 
    )
    +
    +Value:
    template<class T> using _has_##func##fun_chk = \
    +
    decltype(std::declval<T &>().func()); \
    +
    template<class T> constexpr bool has_##func##fun_v = \
    +
    std::experimental::is_detected_convertible_v<rettype, _has_##func##fun_chk, T>;
    +
    +
    +
    +
    +
    + + + + diff --git a/vector__converter_8hpp.js b/vector__converter_8hpp.js new file mode 100644 index 00000000..4405c9ff --- /dev/null +++ b/vector__converter_8hpp.js @@ -0,0 +1,15 @@ +var vector__converter_8hpp = +[ + [ "GENERATE_HAS_MEMBER", "vector__converter_8hpp.html#aa41d8468e319f49aa2522ff4ab2353a0", null ], + [ "GENERATE_HAS_MEMBER_FUNC", "vector__converter_8hpp.html#a65f0dda4c9fc957340ff554926c94d04", null ], + [ "_has_squarebracket_operator_chk", "vector__converter_8hpp.html#a4eae190daf29448c2fc41fd55aa46467", null ], + [ "unw_t", "vector__converter_8hpp.html#a58f0f9a437a7cd5d07b57ab0a78bc280", null ], + [ "convertFrom", "vector__converter_8hpp.html#afc6c8098a01c4174a87d3339b8d1025a", null ], + [ "convertFrom", "vector__converter_8hpp.html#a2ebce3a44ae9b2febe7adce4c775ddf4", null ], + [ "convertFrom", "vector__converter_8hpp.html#a1bfa972986fa65e93eb79a28aacc532f", null ], + [ "convertTo", "vector__converter_8hpp.html#a7867152bf1395e0cafb4b31f565e2304", null ], + [ "convertTo", "vector__converter_8hpp.html#a7b987e1f29569d4848b90e21a44a330e", null ], + [ "convertTo", "vector__converter_8hpp.html#a521be99b55661a3496c95a526fb9fad5", null ], + [ "has_squarebracket_operator_v", "vector__converter_8hpp.html#afe0124d8facb7f51b97db1237945825a", null ], + [ "has_xyz_constructor_v", "vector__converter_8hpp.html#aaddf0e395b295102fbc6011eda6450c5", null ] +]; \ No newline at end of file diff --git a/vector__converter_8hpp__dep__incl.map b/vector__converter_8hpp__dep__incl.map new file mode 100644 index 00000000..b159db62 --- /dev/null +++ b/vector__converter_8hpp__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/vector__converter_8hpp__dep__incl.md5 b/vector__converter_8hpp__dep__incl.md5 new file mode 100644 index 00000000..6a891573 --- /dev/null +++ b/vector__converter_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +cfac1f8079466ec20379ab1a1709d58e \ No newline at end of file diff --git a/vector__converter_8hpp__dep__incl.png b/vector__converter_8hpp__dep__incl.png new file mode 100644 index 00000000..9d76090d Binary files /dev/null and b/vector__converter_8hpp__dep__incl.png differ diff --git a/vector__converter_8hpp__incl.map b/vector__converter_8hpp__incl.map new file mode 100644 index 00000000..89e7cdf3 --- /dev/null +++ b/vector__converter_8hpp__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/vector__converter_8hpp__incl.md5 b/vector__converter_8hpp__incl.md5 new file mode 100644 index 00000000..b38b9258 --- /dev/null +++ b/vector__converter_8hpp__incl.md5 @@ -0,0 +1 @@ +62e0fa06a887f780f1a666d9413d0d64 \ No newline at end of file diff --git a/vector__converter_8hpp__incl.png b/vector__converter_8hpp__incl.png new file mode 100644 index 00000000..9fdad77c Binary files /dev/null and b/vector__converter_8hpp__incl.png differ diff --git a/vector__converter_8hpp_source.html b/vector__converter_8hpp_source.html new file mode 100644 index 00000000..3a22791a --- /dev/null +++ b/vector__converter_8hpp_source.html @@ -0,0 +1,189 @@ + + + + + + + +mrs_lib: include/mrs_lib/impl/vector_converter.hpp Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    vector_converter.hpp
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 #ifndef VECTOR_CONVERTER_HPP
    +
    6 #define VECTOR_CONVERTER_HPP
    +
    7 
    +
    8 #include <experimental/type_traits>
    +
    9 
    +
    10 namespace mrs_lib
    +
    11 {
    +
    12  namespace impl
    +
    13  {
    +
    14  using unw_t = std::tuple<double, double, double>;
    +
    15 
    +
    16  /* SFINAE magic - only for black wizards! //{ */
    +
    17 
    +
    18  #define GENERATE_HAS_MEMBER_FUNC(func, rettype) \
    +
    19  template<class T> using _has_##func##fun_chk = \
    +
    20  decltype(std::declval<T &>().func()); \
    +
    21  template<class T> constexpr bool has_##func##fun_v = \
    +
    22  std::experimental::is_detected_convertible_v<rettype, _has_##func##fun_chk, T>;
    +
    23 
    +
    24  #define GENERATE_HAS_MEMBER(memb, type) \
    +
    25  template<class T> using _has_##memb##mem_chk = \
    +
    26  decltype(std::declval<T &>().memb); \
    +
    27  template<class T> constexpr bool has_##memb##mem_v = \
    +
    28  std::experimental::is_detected_convertible_v<type, _has_##memb##mem_chk, T>;
    +
    29 
    +
    30  GENERATE_HAS_MEMBER_FUNC(x, double)
    +
    31  GENERATE_HAS_MEMBER(x, double)
    +
    32 
    +
    33  template<class T> using _has_squarebracket_operator_chk = decltype(std::declval<T &>()[0]);
    +
    34  template<class T> constexpr bool has_squarebracket_operator_v = std::experimental::is_detected_convertible_v<double, _has_squarebracket_operator_chk, T>;
    +
    35 
    +
    36  template<class T> constexpr bool has_xyz_constructor_v = std::experimental::is_constructible_v<T, double, double, double>;
    +
    37 
    +
    38  //}
    +
    39 
    +
    40  // convertFrom specialization for Eigen types
    +
    41  template <typename in_t>
    +
    42  std::enable_if_t<has_xfun_v<in_t>, unw_t> convertFrom(const in_t& in)
    +
    43  {
    +
    44  return {in.x(), in.y(), in.z()};
    +
    45  }
    +
    46 
    +
    47  // convertFrom specialization for plain member types
    +
    48  template <typename in_t>
    +
    49  std::enable_if_t<has_xmem_v<in_t>, unw_t> convertFrom(const in_t& in)
    +
    50  {
    +
    51  return {in.x, in.y, in.z};
    +
    52  }
    +
    53 
    +
    54  // convertFrom specialization for OpenCV vectors
    +
    55  template <typename in_t>
    +
    56  std::enable_if_t<has_squarebracket_operator_v<in_t> && !has_xfun_v<in_t>, unw_t> convertFrom(const in_t& in)
    +
    57  {
    +
    58  return {in[0], in[1], in[2]};
    +
    59  }
    +
    60 
    +
    61  // convertTo specialization for types with a constructor that takes three doubles
    +
    62  template <typename ret_t>
    +
    63  std::enable_if_t<has_xyz_constructor_v<ret_t>, void> convertTo(ret_t& out, const double x, const double y, const double z)
    +
    64  {
    +
    65  out = {x, y, z};
    +
    66  }
    +
    67 
    +
    68  // convertTo specialization for other types
    +
    69  template <typename ret_t>
    +
    70  std::enable_if_t<!has_xyz_constructor_v<ret_t> && has_xmem_v<ret_t>, void> convertTo(ret_t& out, const double x, const double y, const double z)
    +
    71  {
    +
    72  out.x = x;
    +
    73  out.y = y;
    +
    74  out.z = z;
    +
    75  }
    +
    76 
    +
    77  template <typename ret_t>
    +
    78  ret_t convertTo(const double x, const double y, const double z)
    +
    79  {
    +
    80  ret_t ret;
    +
    81  convertTo(ret, x, y, z);
    +
    82  return ret;
    +
    83  }
    +
    84 
    +
    85  } // namespace impl
    +
    86 
    +
    87 } // namespace mrs_lib
    +
    88 
    +
    89 #endif // VECTOR_CONVERTER_HPP
    +
    +
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    + + + + diff --git a/vector__converter__types_8h_source.html b/vector__converter__types_8h_source.html new file mode 100644 index 00000000..741d6263 --- /dev/null +++ b/vector__converter__types_8h_source.html @@ -0,0 +1,110 @@ + + + + + + + +mrs_lib: include/mrs_lib/impl/vector_converter_types.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    vector_converter_types.h
    +
    +
    +
    1 // Include necessary files for the vector types here
    +
    2 #include <Eigen/Dense>
    +
    3 #include <geometry_msgs/Vector3.h>
    +
    4 #include <opencv2/imgproc/imgproc.hpp>
    +
    5 #include <pcl/point_types.h>
    +
    6 
    +
    7 // Add the types for which you want the conversion to be instantiated to this list
    +
    8 #define VC_TYPE_LIST Eigen::Vector3d, Eigen::Vector3f, cv::Vec3d, cv::Vec3f, geometry_msgs::Vector3, pcl::PointXYZ
    +
    +
    + + + + diff --git a/vector_converter_2example_8cpp-example.html b/vector_converter_2example_8cpp-example.html new file mode 100644 index 00000000..a9bbc9de --- /dev/null +++ b/vector_converter_2example_8cpp-example.html @@ -0,0 +1,180 @@ + + + + + + + +mrs_lib: vector_converter/example.cpp + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    vector_converter/example.cpp
    +
    +
    +

    This is an example of usage of the convert() function for conversion between different vector types. It may be run after building mrs_lib by executing rosrun mrs_lib vector_converter_example.

    +
    // clang: MatousFormat
    +
    #include <geometry_msgs/Vector3.h>
    +
    #include <Eigen/Dense>
    +
    #include <pcl/point_types.h>
    +
    +
    /* Demonstration of usage for custom incompatible types. //{ */
    +
    +
    // What if we want to convert from/to a different type, which doesn't provide either operator[], nor x(), y() and z() getter/setter methods, nor x, y and z-named members?
    +
    struct MyPoint
    +
    {
    +
    double e1, e2, e3;
    +
    };
    +
    +
    // We need to define our own specialization of the mrs_lib::impl::convertFrom() and mrs_lib::impl::convertTo() functions for this type. convert() will then work automatically.
    +
    namespace mrs_lib
    +
    {
    +
    namespace impl
    +
    {
    +
    +
    // convertFrom specialization for MyPoint (mrs_lib::impl::unw_t is just a shorthand for std::tuple<double, double, double>)
    +
    std::tuple<double, double, double> convertFrom(const MyPoint& in)
    +
    {
    +
    return {in.e1, in.e2, in.e3};
    +
    }
    +
    +
    // convertTo specialization for MyPoint
    +
    void convertTo(MyPoint& ret, const double x, const double y, const double z)
    +
    {
    +
    ret.e1 = x;
    +
    ret.e2 = y;
    +
    ret.e3 = z;
    +
    }
    +
    +
    }
    +
    }
    +
    +
    //}
    +
    +
    // Include the vector_converter.h header (this has to be included *after* defining functions for your custom types)
    +
    #pragma GCC diagnostic push
    +
    #pragma GCC diagnostic ignored "-Wnarrowing"
    + +
    #pragma GCC diagnostic pop
    +
    +
    int main()
    +
    {
    +
    // prepare a source variable `from` with the type, which we'll want to convert
    +
    const double xo = rand(), yo = rand(), zo = rand();
    +
    // the mrs_lib::impl::convertTo() function is used as a shortcut for initialization of the object
    +
    // Note, then when converting to a single precision floating type,
    +
    // the compiler will emit a narrowing conversion waring. This can be disabled using the pragma statements
    +
    // around the line `#include <mrs_lib/vector_converter.h>` (see above).
    +
    const auto from = mrs_lib::impl::convertTo<pcl::PointXYZ>(xo, yo, zo);
    +
    +
    // This is the main functionality - one-liner for converting between two vector types.
    +
    const auto to = mrs_lib::convert<Eigen::Vector3d>(from);
    +
    const auto to2 = mrs_lib::convert<geometry_msgs::Vector3>(to);
    +
    +
    std::cout << "Converted from type " << typeid(decltype(from)).name() << " with value:" << std::endl << from << std::endl;
    +
    std::cout << " to type " << typeid(decltype(to)).name() << " with value:" << std::endl << to << std::endl << std::endl;
    +
    std::cout << " and then to type " << typeid(decltype(to2)).name() << " with value:" << std::endl << to2 << std::endl;
    +
    +
    // Even for custom types with compatible API, the convert() function will work (thanks to templates)
    +
    struct MyPointOK
    +
    {
    +
    double x, y, z;
    +
    };
    +
    const auto custom1 = mrs_lib::convert<MyPointOK>(from); // works
    +
    std::cout << " and to new type " << typeid(decltype(custom1)).name() << " with value:" << std::endl << custom1.x << std::endl << custom1.y << std::endl << custom1.z << std::endl << std::endl;
    +
    +
    // However, for custom types with incompatible API, the convertFrom() and convertTo() functions have to be manually implemented for convert() to work (take a look before main()):
    +
    const auto custom2 = mrs_lib::convert<MyPoint>(from); // now also works
    +
    std::cout << " and to new type " << typeid(decltype(custom2)).name() << " with value:" << std::endl << custom2.e1 << std::endl << custom2.e2 << std::endl << custom2.e3 << std::endl << std::endl;
    +
    }
    +
    +
    +
    +
    Defines the convert() function for conversion between different vector representations (Eigen,...
    +
    Definition: example.cpp:24
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    + + + + diff --git a/visual__object_8h.html b/visual__object_8h.html new file mode 100644 index 00000000..4f9594a4 --- /dev/null +++ b/visual__object_8h.html @@ -0,0 +1,176 @@ + + + + + + + +mrs_lib: include/mrs_lib/visual_object.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    visual_object.h File Reference
    +
    +
    + +

    Object abstraction for the Batch Visualizer. +More...

    +
    #include <Eigen/Core>
    +#include <ros/time.h>
    +#include <std_msgs/ColorRGBA.h>
    +#include <geometry_msgs/Point.h>
    +#include <mrs_lib/geometry/shapes.h>
    +#include <mrs_msgs/TrajectoryReference.h>
    +
    + + Include dependency graph for visual_object.h:
    +
    +
    + +
    + + This graph shows which files directly or indirectly include this file:
    +
    +
    + +
    +

    Go to the source code of this file.

    + + + + +

    +Classes

    class  mrs_lib::VisualObject
     
    + + + + +

    +Namespaces

     mrs_lib
     All mrs_lib functions, classes, variables and definitions are contained in this namespace.
     
    + + + +

    +Macros

    +#define DEFAULT_ELLIPSE_POINTS   64
     
    + + + +

    +Enumerations

    enum  MarkerType { POINT = 0, +LINE = 1, +TRIANGLE = 2 + }
     
    +

    Detailed Description

    +

    Object abstraction for the Batch Visualizer.

    +
    Author
    Petr Štibinger - stibi.nosp@m.pet@.nosp@m.fel.c.nosp@m.vut..nosp@m.cz
    +
    +
    + + + + diff --git a/visual__object_8h.js b/visual__object_8h.js new file mode 100644 index 00000000..2fad00e8 --- /dev/null +++ b/visual__object_8h.js @@ -0,0 +1,10 @@ +var visual__object_8h = +[ + [ "VisualObject", "classmrs__lib_1_1VisualObject.html", "classmrs__lib_1_1VisualObject" ], + [ "DEFAULT_ELLIPSE_POINTS", "visual__object_8h.html#a51b7645de121a21302986b8fa7ff2759", null ], + [ "MarkerType", "visual__object_8h.html#a76c3f6cd3ae9c808511ffe4d2a3d799f", [ + [ "POINT", "visual__object_8h.html#a76c3f6cd3ae9c808511ffe4d2a3d799faf4a7505a8b840856e361a9852997d8c6", null ], + [ "LINE", "visual__object_8h.html#a76c3f6cd3ae9c808511ffe4d2a3d799fa1d6aa4216fb97d4aef252473bed38425", null ], + [ "TRIANGLE", "visual__object_8h.html#a76c3f6cd3ae9c808511ffe4d2a3d799fabd23f5af6c16dfdb2f098be0be10264a", null ] + ] ] +]; \ No newline at end of file diff --git a/visual__object_8h__dep__incl.map b/visual__object_8h__dep__incl.map new file mode 100644 index 00000000..e639f217 --- /dev/null +++ b/visual__object_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/visual__object_8h__dep__incl.md5 b/visual__object_8h__dep__incl.md5 new file mode 100644 index 00000000..ecd025ad --- /dev/null +++ b/visual__object_8h__dep__incl.md5 @@ -0,0 +1 @@ +6435b4219fd5f921f887776643edb21b \ No newline at end of file diff --git a/visual__object_8h__dep__incl.png b/visual__object_8h__dep__incl.png new file mode 100644 index 00000000..8cf99afa Binary files /dev/null and b/visual__object_8h__dep__incl.png differ diff --git a/visual__object_8h__incl.map b/visual__object_8h__incl.map new file mode 100644 index 00000000..477a1969 --- /dev/null +++ b/visual__object_8h__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/visual__object_8h__incl.md5 b/visual__object_8h__incl.md5 new file mode 100644 index 00000000..025b3ad5 --- /dev/null +++ b/visual__object_8h__incl.md5 @@ -0,0 +1 @@ +05fa3ca8656a451a296cf3f8cb98d18e \ No newline at end of file diff --git a/visual__object_8h__incl.png b/visual__object_8h__incl.png new file mode 100644 index 00000000..82ba9dd4 Binary files /dev/null and b/visual__object_8h__incl.png differ diff --git a/visual__object_8h_source.html b/visual__object_8h_source.html new file mode 100644 index 00000000..d037d19e --- /dev/null +++ b/visual__object_8h_source.html @@ -0,0 +1,206 @@ + + + + + + + +mrs_lib: include/mrs_lib/visual_object.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    mrs_lib +
    +
    Various reusable classes, functions and utilities for use in MRS projects
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    visual_object.h
    +
    +
    +Go to the documentation of this file.
    1 
    +
    6 #ifndef BATCH_VISUALIZER__VISUAL_OBJECT_H
    +
    7 #define BATCH_VISUALIZER__VISUAL_OBJECT_H
    +
    8 
    +
    9 #include <Eigen/Core>
    +
    10 #include <ros/time.h>
    +
    11 #include <std_msgs/ColorRGBA.h>
    +
    12 #include <geometry_msgs/Point.h>
    + +
    14 #include <mrs_msgs/TrajectoryReference.h>
    +
    15 
    +
    16 #define DEFAULT_ELLIPSE_POINTS 64
    +
    17 
    +
    18 namespace mrs_lib
    +
    19 {
    +
    20 
    +
    21 enum MarkerType
    +
    22 {
    +
    23  POINT = 0,
    +
    24  LINE = 1,
    +
    25  TRIANGLE = 2
    +
    26 };
    +
    27 
    +
    28 class VisualObject {
    +
    29 
    +
    30 
    +
    31 public:
    +
    32  VisualObject(const Eigen::Vector3d& point, const double r, const double g, const double b, const double a, const ros::Duration& timeout,
    +
    33  const unsigned long& id);
    +
    34 
    +
    35  VisualObject(const mrs_lib::geometry::Ray& ray, const double r, const double g, const double b, const double a, const ros::Duration& timeout,
    +
    36  const unsigned long& id);
    +
    37 
    +
    38  VisualObject(const mrs_lib::geometry::Triangle& triangle, const double r, const double g, const double b, const double a, const ros::Duration& timeout,
    +
    39  const bool filled, const unsigned long& id);
    +
    40 
    +
    41  VisualObject(const mrs_lib::geometry::Rectangle& rectangle, const double r, const double g, const double b, const double a, const ros::Duration& timeout,
    +
    42  const bool filled, const unsigned long& id);
    +
    43 
    +
    44  VisualObject(const mrs_lib::geometry::Cuboid& cuboid, const double r, const double g, const double b, const double a, const ros::Duration& timeout,
    +
    45  const bool filled, const unsigned long& id);
    +
    46 
    +
    47  VisualObject(const mrs_lib::geometry::Ellipse& ellipse, const double r, const double g, const double b, const double a, const ros::Duration& timeout,
    +
    48  const bool filled, const unsigned long& id, const int num_points = DEFAULT_ELLIPSE_POINTS);
    +
    49 
    +
    50  VisualObject(const mrs_lib::geometry::Cylinder& cylinder, const double r, const double g, const double b, const double a, const ros::Duration& timeout,
    +
    51  const bool filled, const bool capped, const unsigned long& id, const int num_sides = DEFAULT_ELLIPSE_POINTS);
    +
    52 
    +
    53  VisualObject(const mrs_lib::geometry::Cone& cone, const double r, const double g, const double b, const double a, const ros::Duration& timeout,
    +
    54  const bool filled, const bool capped, const unsigned long& id, const int num_sides = DEFAULT_ELLIPSE_POINTS);
    +
    55 
    +
    56  VisualObject(const mrs_msgs::TrajectoryReference& traj, const double r, const double g, const double b, const double a, const ros::Duration& timeout,
    +
    57  const bool filled, const unsigned long& id);
    +
    58 
    +
    59 
    +
    60 public:
    +
    61  unsigned long getID() const;
    +
    62  int getType() const;
    +
    63  bool isTimedOut() const;
    +
    64 
    +
    65  const std::vector<geometry_msgs::Point> getPoints() const;
    +
    66  const std::vector<std_msgs::ColorRGBA> getColors() const;
    +
    67 
    +
    68  bool operator<(const VisualObject& other) const {
    +
    69  return id_ < other.id_;
    +
    70  }
    +
    71 
    +
    72  bool operator>(const VisualObject& other) const {
    +
    73  return id_ > other.id_;
    +
    74  }
    +
    75 
    +
    76  bool operator==(const VisualObject& other) const {
    +
    77  return id_ == other.id_;
    +
    78  }
    +
    79 
    +
    80 private:
    +
    81  const unsigned long id_;
    +
    82  MarkerType type_;
    +
    83  std::vector<geometry_msgs::Point> points_;
    +
    84  std::vector<std_msgs::ColorRGBA> colors_;
    +
    85  ros::Time timeout_time_;
    +
    86 
    +
    87  void addRay(const mrs_lib::geometry::Ray& ray, const double r, const double g, const double b, const double a);
    +
    88 
    +
    89  void addTriangle(const mrs_lib::geometry::Triangle& triangle, const double r, const double g, const double b, const double a, const bool filled);
    +
    90 
    +
    91  void addEllipse(const mrs_lib::geometry::Ellipse& ellipse, const double r, const double g, const double b, const double a, const bool filled,
    +
    92  const int num_points);
    +
    93 
    +
    94 }; // namespace batch_visualizer
    +
    95 
    +
    96 } // namespace mrs_lib
    +
    97 
    +
    98 #endif
    +
    +
    +
    geometric representation of a ray. Instantiate it by two input Vector3. Use static methods for from-t...
    Definition: shapes.h:24
    +
    geometric representation of a cuboid
    Definition: shapes.h:317
    +
    geometric representation of an ellipse
    Definition: shapes.h:426
    +
    All mrs_lib functions, classes, variables and definitions are contained in this namespace.
    Definition: attitude_converter.h:29
    +
    geometric representation of a rectangle (can represent any quadrilateral)
    Definition: shapes.h:187
    +
    Defines various geometrical shapes and their relations.
    +
    geometric representation of a triangle. Instantiate a new triangle by providing three vertices
    Definition: shapes.h:98
    +
    geometric representation of a cylinder
    Definition: shapes.h:490
    +
    Definition: visual_object.h:28
    +
    geometric representaiton of a cone
    Definition: shapes.h:573
    + + + +