54 #ifndef _GAMS_POSE_REFERENCE_FRAME_FWD_H_ 55 #define _GAMS_POSE_REFERENCE_FRAME_FWD_H_ 59 #include "madara/knowledge/KnowledgeBase.h" 63 namespace gams {
namespace pose {
65 class ReferenceFrameIdentity;
66 class ReferenceFrameVersion;
67 struct ReferenceFrameType;
74 (x.transform_to(std::declval<ReferenceFrame>())));
87 using Base = madara::knowledge::EvalSettings;
94 :
Base(std::move(base)),
95 prefix_(std::make_shared<std::string>(std::move(prefix))) {}
104 return default_prefix_;
111 return default_prefix();
116 prefix_ = std::make_shared<std::string>(std::move(prefix));
165 std::shared_ptr<ReferenceFrameVersion>
impl_;
186 impl_(
std::move(impl)) {}
198 typename std::enable_if<
199 supports_transform_to<P>::value,
void*>::type =
nullptr>
202 uint64_t timestamp = -1)
204 std::forward<P>(origin), timestamp)) {}
218 typename std::enable_if<
219 supports_transform_to<P>::value,
void*>::type =
nullptr>
223 uint64_t timestamp = -1)
225 type,
std::forward<P>(origin), timestamp)) {}
238 typename std::enable_if<
239 supports_transform_to<P>::value,
void*>::type =
nullptr>
243 uint64_t timestamp = -1)
245 id,
std::forward<P>(origin), timestamp)) {}
259 typename std::enable_if<
260 supports_transform_to<P>::value,
void*>::type =
nullptr>
265 uint64_t timestamp = -1)
267 type, id,
std::forward<P>(origin), timestamp)) {}
275 bool valid()
const {
return (
bool)impl_; }
284 const Pose &origin()
const;
363 return impl_ < other.
impl_;
368 return impl_ <= other.
impl_;
373 return impl_ > other.
impl_;
378 return impl_ >= other.
impl_;
386 std::string name()
const;
392 const std::string &id()
const;
408 uint64_t timestamp()
const;
433 uint64_t expiry(uint64_t age = -1)
const;
436 uint64_t expiry()
const;
455 static uint64_t default_expiry(uint64_t age);
458 static uint64_t default_expiry();
462 static const std::string &default_prefix();
470 bool interpolated()
const;
480 void save(madara::knowledge::KnowledgeBase &kb,
492 void save(madara::knowledge::KnowledgeBase &kb,
508 madara::knowledge::KnowledgeBase &kb,
509 const std::string &
id,
510 uint64_t timestamp = -1,
529 template<
typename InputIterator>
530 static std::vector<ReferenceFrame> load_tree(
531 madara::knowledge::KnowledgeBase &kb,
534 uint64_t timestamp = -1,
553 template<
typename Container>
554 static std::vector<ReferenceFrame> load_tree(
555 madara::knowledge::KnowledgeBase &kb,
556 const Container &ids,
557 uint64_t timestamp = -1,
568 madara::knowledge::KnowledgeBase &kb,
569 const std::string &key,
580 void save_as(madara::knowledge::KnowledgeBase &kb,
581 const std::string &key, uint64_t expiry,
619 void (*transform_linear_to_origin)(
622 double ox,
double oy,
double oz,
623 double orx,
double ory,
double orz,
624 double &x,
double &y,
double &z,
627 void (*transform_linear_from_origin)(
628 const ReferenceFrameType *origin,
629 const ReferenceFrameType *
self,
630 double ox,
double oy,
double oz,
631 double orx,
double ory,
double orz,
632 double &x,
double &y,
double &z,
635 void (*normalize_linear)(
636 const ReferenceFrameType *
self,
637 double &x,
double &y,
double &z);
639 double (*calc_distance)(
640 const ReferenceFrameType *
self,
641 double x1,
double y1,
double z1,
642 double x2,
double y2,
double z2);
645 const ReferenceFrameType *origin,
646 const ReferenceFrameType *
self,
647 double orx,
double ory,
double orz,
648 double &rx,
double &ry,
double &rz);
651 const ReferenceFrameType *origin,
652 const ReferenceFrameType *
self,
653 double orx,
double ory,
double orz,
654 double &rx,
double &ry,
double &rz);
656 void (*normalize_angular)(
657 const ReferenceFrameType *
self,
658 double &rx,
double &ry,
double &rz);
661 const ReferenceFrameType *
self,
662 double rx1,
double ry1,
double rz1,
663 double rx2,
double ry2,
double rz2);
666 const ReferenceFrameType *origin,
667 const ReferenceFrameType *
self,
668 double ox,
double oy,
double oz,
669 double orx,
double ory,
double orz,
670 double &x,
double &y,
double &z,
671 double &rx,
double &ry,
double &rz,
675 const ReferenceFrameType *origin,
676 const ReferenceFrameType *
self,
677 double ox,
double oy,
double oz,
678 double orx,
double ory,
double orz,
679 double &x,
double &y,
double &z,
680 double &rx,
double &ry,
double &rz,
683 void (*normalize_pose)(
684 const ReferenceFrameType *
self,
685 double &x,
double &y,
double &z,
686 double &rx,
double &ry,
double &rz);
void prefix(std::string prefix)
bool operator<(const ReferenceFrame &other) const
std::shared_ptr< ReferenceFrameVersion > impl_
static const FrameEvalSettings DEFAULT
bool operator<=(const ReferenceFrame &other) const
bool operator>=(const ReferenceFrame &other) const
Settings class for saving/loading reference frames.
MADARA_MAKE_VAL_SUPPORT_TEST(nano_timestamp, x,(x.nanos(), x.nanos(0UL)))
Type trait to detect stamped types.
ReferenceFrame(P &&origin, uint64_t timestamp=-1)
Constructor from an origin, and optional timestamp.
ReferenceFrame(const ReferenceFrameType *type, P &&origin, uint64_t timestamp=-1)
Constructor from a type, an origin, and optional timestamp.
madara::knowledge::EvalSettings Base
int type_id
The type's ID.
FrameEvalSettings(const char *prefix, Base base=Base{true})
void transform_pose_from_origin(const ReferenceFrameType *origin, const ReferenceFrameType *self, double ox, double oy, double oz, double orx, double ory, double orz, double &x, double &y, double &z, double &rx, double &ry, double &rz, bool fixed)
Transform pose in-place from its origin frame Simply applies linear and angular transforms independan...
Contains all GAMS-related tools, classes and code.
gams::pose::Orientation Orientation
Represents a orientation or orientation within a reference frame.
static const std::string default_prefix_
GAMS_EXPORT const ReferenceFrame & default_frame(void)
Default frame.
bool operator>(const ReferenceFrame &other) const
FrameEvalSettings(std::nullptr_t, Base base=Base{true})
std::shared_ptr< std::string > prefix_
void transform_pose_to_origin(const ReferenceFrameType *origin, const ReferenceFrameType *self, double ox, double oy, double oz, double orx, double ory, double orz, double &x, double &y, double &z, double &rx, double &ry, double &rz, bool fixed)
Transform pose in-place into its origin frame from this frame.
ReferenceFrame(std::string id, P &&origin, uint64_t timestamp=-1)
Constructor from a id, an origin, and optional timestamp.
ReferenceFrame(const ReferenceFrameType *type, std::string id, P &&origin, uint64_t timestamp=-1)
Constructor from a type, id, an origin, and optional timestamp.
bool operator!=(const BasicVector< LDerived, Units > &lhs, const BasicVector< RDerived, Units > &rhs)
gams::pose::ReferenceFrame ReferenceFrame
Base class for Reference Frames.
gams::pose::Pose Pose
Represents a combination of Location and Orientation within a single reference frame.
void transform_angular_from_origin(const ReferenceFrameType *origin, const ReferenceFrameType *self, double orx, double ory, double orz, double &rx, double &ry, double &rz)
Transform AngularVector in-place from its origin frame.
Provides Reference Frame (i.e., coordinate systemm) transforms.
ReferenceFrame(std::shared_ptr< ReferenceFrameVersion > impl)
Construct from an existing ReferenceFrameVersion object.
double calc_angle(const ReferenceFrameType *self, double rx1, double ry1, double rz1, double rx2, double ry2, double rz2)
Calculates smallest angle between two AngularVectors.
bool valid() const
Test whether this frame is valid.
const std::string & prefix() const
const char * name
A human-readable name for reference frame types.
FrameEvalSettings(Base base=Base{true})
void transform_angular_to_origin(const ReferenceFrameType *origin, const ReferenceFrameType *self, double orx, double ory, double orz, double &rx, double &ry, double &rz)
Transform AngularVector in-place into its origin frame from this frame.
ReferenceFrame()
Default constructor.
bool operator==(const BasicVector< LDerived, Units > &lhs, const BasicVector< RDerived, Units > &rhs)
FrameEvalSettings(std::string prefix, Base base=Base{true})
static const std::string & default_prefix()