19 #ifndef SNARK_POINTS_FRAME_HEADER
20 #define SNARK_POINTS_FRAME_HEADER
26 #include <boost/optional.hpp>
28 #include <Eigen/Geometry>
29 #include <comma/base/exception.h>
30 #include <comma/csv/options.h>
31 #include <comma/csv/names.h>
32 #include <comma/csv/stream.h>
33 #include <comma/io/stream.h>
34 #include <snark/math/rotation_matrix.h>
35 #include <snark/visiting/eigen.h>
36 #include "./timestamped.h"
38 namespace snark{
namespace applications {
42 position() : coordinates( Eigen::Vector3d::Zero() ), orientation( Eigen::Vector3d::Zero() ) {}
43 position(
const Eigen::Vector3d& p ) : coordinates( p ), orientation( Eigen::Vector3d::Zero() ) {}
44 position(
const Eigen::Vector3d& p,
const Eigen::Vector3d& o ) : coordinates( p ), orientation( o ) {}
45 Eigen::Vector3d coordinates;
46 Eigen::Vector3d orientation;
51 namespace comma {
namespace visiting {
53 template <>
struct traits< snark::applications::position >
55 template <
typename Key,
class Visitor >
56 static void visit(
const Key&, snark::applications::position& p, Visitor& v )
58 v.apply(
"x", p.coordinates.x() );
59 v.apply(
"y", p.coordinates.y() );
60 v.apply(
"z", p.coordinates.z() );
61 v.apply(
"roll", p.orientation.x() );
62 v.apply(
"pitch", p.orientation.y() );
63 v.apply(
"yaw", p.orientation.z() );
66 template <
typename Key,
class Visitor >
67 static void visit(
const Key&,
const snark::applications::position& p, Visitor& v )
69 v.apply(
"x", p.coordinates.x() );
70 v.apply(
"y", p.coordinates.y() );
71 v.apply(
"z", p.coordinates.z() );
72 v.apply(
"roll", p.orientation.x() );
73 v.apply(
"pitch", p.orientation.y() );
74 v.apply(
"yaw", p.orientation.z() );
80 namespace snark{
namespace applications {
85 typedef timestamped< position, boost::posix_time::ptime > position_type;
87 typedef position_type point_type;
89 frame(
const position& p,
bool to =
false,
bool interpolate =
true,
bool rotation_present =
false );
91 frame(
const comma::csv::options& options,
bool discardOutOfOrder, boost::optional< boost::posix_time::time_duration > maxGap,
bool outputframe,
bool to =
false,
bool interpolate =
true,
bool rotation_present =
false );
95 const point_type* converted(
const point_type& rhs );
97 bool discarded()
const {
return m_discarded; }
99 const position& last()
const {
return m_position; }
101 const bool outputframe;
104 void set_position(
const position& p );
106 const point_type& convert(
const point_type& rhs );
111 ::Eigen::Vector3d m_orientation;
112 ::Eigen::Matrix3d m_rotation;
113 ::Eigen::Affine3d m_transform;
114 ::Eigen::Translation3d m_translation;
116 boost::scoped_ptr< comma::io::istream > m_istream;
117 boost::scoped_ptr< comma::csv::input_stream< position_type > > m_is;
118 std::pair< position_type, position_type > m_pair;
119 point_type m_converted;
120 bool m_discardOutOfOrder;
122 boost::optional< boost::posix_time::time_duration > m_maxGap;
123 bool rotation_present_;
128 #endif // SNARK_POINTS_FRAME_HEADER