imu_advanced_navigation_anpp
Driver.hpp
Go to the documentation of this file.
1 #ifndef ADVANCED_NAVIGATION_ANPP_DRIVER_HPP
2 #define ADVANCED_NAVIGATION_ANPP_DRIVER_HPP
3 
4 #include <imu_advanced_navigation_anpp/DeviceInformation.hpp>
5 #include <imu_advanced_navigation_anpp/Status.hpp>
6 #include <imu_advanced_navigation_anpp/Configuration.hpp>
7 #include <imu_advanced_navigation_anpp/CurrentConfiguration.hpp>
8 #include <iodrivers_base/Driver.hpp>
9 #include <base/samples/RigidBodyState.hpp>
10 #include <base/samples/RigidBodyAcceleration.hpp>
11 #include <base/samples/IMUSensors.hpp>
12 #include <gps_base/BaseTypes.hpp>
13 #include <gps_base/UTMConverter.hpp>
14 
16 {
18  {
22  };
23 
24  namespace protocol
25  {
26  struct Header;
27  }
28 
29  namespace protocol
30  {
31  struct UnixTime;
32  struct Status;
34  struct GeodeticPosition;
35  struct QuaternionOrientation;
37  struct NEDVelocity;
39  struct BodyAcceleration;
40  struct BodyVelocity;
41  struct AngularVelocity;
42  struct AngularAcceleration;
43  struct RawSensors;
44  struct RawGNSS;
45  struct Satellites;
47  }
48 
49  class Driver : public iodrivers_base::Driver
50  {
51  private:
52  static constexpr int PACKET_ID_COUNT = 256;
53 
54  bool mUseDeviceTime = false;
55  uint8_t mLastPacketID = 0;
56  base::Time mCurrentTimestamp;
57  Eigen::Quaterniond const ned2nwu;
58 
59  gps_base::UTMConverter mUTMConverter;
60  std::vector<uint32_t> mLastPackets;
61  std::vector<std::pair<uint32_t, uint8_t>> mPacketPeriods;
62 
63  base::samples::RigidBodyState mWorld;
64  base::samples::RigidBodyState mBody;
65  base::samples::RigidBodyAcceleration mAcceleration;
66  base::samples::IMUSensors mIMUSensors;
67  gps_base::Solution mGeodeticPosition;
68  gps_base::Solution mGNSSSolution;
69  gps_base::SolutionQuality mGNSSSolutionQuality;
70  gps_base::SatelliteInfo mGNSSSatelliteInfo;
71  Status mStatus;
72 
73  void updateWorldFromGeodetic();
74 
75  int extractPacket(uint8_t const* buffer, size_t buffer_size) const;
76  void setPacketPeriod(uint8_t packet_id, uint32_t period, bool clear_existing = false);
77 
78  template<typename Packet>
79  void dispatch(uint8_t const* packet, uint8_t const* packet_end);
80  void process(protocol::UnixTime const& payload);
81  void process(protocol::Status const& payload);
82  void process(protocol::GeodeticPositionStandardDeviation const& payload);
83  void process(protocol::QuaternionOrientation const& payload);
84  void process(protocol::EulerOrientationStandardDeviation const& payload);
85  void process(protocol::NEDVelocity const& payload);
86  void process(protocol::NEDVelocityStandardDeviation const& payload);
87  void process(protocol::BodyAcceleration const& payload);
88  void process(protocol::BodyVelocity const& payload);
89  void process(protocol::AngularVelocity const& payload);
90  void process(protocol::AngularAcceleration const& payload);
91  void process(protocol::RawSensors const& payload);
92  void process(protocol::RawGNSS const& payload);
93  void process(protocol::Satellites const& payload);
94  void process(protocol::GeodeticPosition const& payload);
95  void process(protocol::NorthSeekingInitializationStatus const& payload);
96  void processDetailedSatellites(uint8_t const* packet, uint8_t const* packet_end);
97 
98  public:
99  Driver();
100 
101  void openURI(std::string const& uri);
102 
108  void setDeviceBaudrate(uint32_t rate);
109 
118  bool getUseDeviceTime() const;
119 
128  void setUseDeviceTime(bool enable);
129 
131  void clearPeriodicPackets();
132 
135  void reset(RESET_MODE mode);
136 
141  DeviceInformation readDeviceInformation();
142 
144  base::Time readTime();
145 
147  Status readStatus();
148 
150  CurrentConfiguration readConfiguration();
151 
153  void setConfiguration(Configuration const& conf);
154 
156  Status getIMUStatus() const;
157 
160  base::samples::RigidBodyState getWorldRigidBodyState() const;
161 
166  base::samples::RigidBodyState getBodyRigidBodyState() const;
167 
169  base::samples::RigidBodyAcceleration getAcceleration() const;
170 
172  base::samples::IMUSensors getIMUSensors() const;
173 
175  gps_base::Solution getGNSSSolution() const;
176 
178  gps_base::SolutionQuality getGNSSSolutionQuality() const;
179 
181  gps_base::SatelliteInfo getGNSSSatelliteInfo() const;
182 
191  void setStatusPeriod(int period);
192 
196  void setUTM(int zone, bool north,
197  Eigen::Vector3d const& local_origin = Eigen::Vector3d::Zero());
198 
212  void setPositionPeriod(int period, bool with_errors = true);
213 
225  void setOrientationPeriod(int period, bool with_errors = true);
226 
237  void setNEDVelocityPeriod(int period, bool with_errors = true);
238 
250  void setAccelerationPeriod(int period);
251 
262  void setBodyVelocityPeriod(int period);
263 
274  void setAngularVelocityPeriod(int period);
275 
286  void setAngularAccelerationPeriod(int period);
287 
297  void setRawSensorsPeriod(int period);
298 
307  void setGNSSPeriod(int period);
308 
317  void setGNSSSatelliteSummaryPeriod(int period);
318 
327  void setGNSSSatelliteDetailsPeriod(int period);
328 
333  void setNorthSeekingInitializationStatusPeriod(int period);
334 
341  void setCurrentTimestamp(base::Time const& time);
342 
345  base::Time getCurrentTimestamp() const;
346 
370  int poll();
371 
374  void resetPollSynchronization();
375  };
376 }
377 
378 #endif
379 
Definition: Driver.hpp:49
Definition: CurrentConfiguration.hpp:8
Definition: DeviceInformation.hpp:8
uint8_t packet_id
Definition: Protocol.hpp:121
uint16_t period
Definition: Protocol.hpp:178
RESET_MODE
Definition: Driver.hpp:17
uint8_t clear_existing
Definition: Protocol.hpp:180
Definition: Configuration.hpp:10
Definition: Configuration.hpp:8
Definition: Status.hpp:11