imu_advanced_navigation_anpp
Classes | Namespaces | Typedefs | Enumerations | Functions | Variables
Protocol.hpp File Reference
#include <vector>
#include <cstdint>
#include <algorithm>
#include <stdexcept>
#include <cstring>
#include <map>
#include <type_traits>
#include <base/Timeout.hpp>
#include <iodrivers_base/Exceptions.hpp>
#include <imu_advanced_navigation_anpp/Constants.hpp>
#include <imu_advanced_navigation_anpp/DeviceInformation.hpp>
#include <imu_advanced_navigation_anpp/Exceptions.hpp>

Go to the source code of this file.

Classes

struct  imu_advanced_navigation_anpp::protocol::Header
 
struct  imu_advanced_navigation_anpp::protocol::Acknowledge
 
struct  imu_advanced_navigation_anpp::protocol::Request
 
struct  imu_advanced_navigation_anpp::protocol::BootMode
 
struct  imu_advanced_navigation_anpp::protocol::DeviceInformation
 
struct  imu_advanced_navigation_anpp::protocol::RestoreFactorySettings
 
struct  imu_advanced_navigation_anpp::protocol::HotStartReset
 
struct  imu_advanced_navigation_anpp::protocol::ColdStartReset
 
struct  imu_advanced_navigation_anpp::protocol::SystemState
 
struct  imu_advanced_navigation_anpp::protocol::UnixTime
 
struct  imu_advanced_navigation_anpp::protocol::Status
 
struct  imu_advanced_navigation_anpp::protocol::GeodeticPositionStandardDeviation
 
struct  imu_advanced_navigation_anpp::protocol::NEDVelocityStandardDeviation
 
struct  imu_advanced_navigation_anpp::protocol::EulerOrientationStandardDeviation
 
struct  imu_advanced_navigation_anpp::protocol::RawSensors
 
struct  imu_advanced_navigation_anpp::protocol::RawGNSS
 
struct  imu_advanced_navigation_anpp::protocol::Satellites
 
struct  imu_advanced_navigation_anpp::protocol::SatelliteInfo
 
struct  imu_advanced_navigation_anpp::protocol::DetailedSatellites
 
struct  imu_advanced_navigation_anpp::protocol::GeodeticPosition
 
struct  imu_advanced_navigation_anpp::protocol::NEDVelocity
 
struct  imu_advanced_navigation_anpp::protocol::BodyVelocity
 
struct  imu_advanced_navigation_anpp::protocol::Acceleration
 
struct  imu_advanced_navigation_anpp::protocol::BodyAcceleration
 
struct  imu_advanced_navigation_anpp::protocol::QuaternionOrientation
 
struct  imu_advanced_navigation_anpp::protocol::AngularVelocity
 
struct  imu_advanced_navigation_anpp::protocol::AngularAcceleration
 
struct  imu_advanced_navigation_anpp::protocol::LocalMagneticField
 
struct  imu_advanced_navigation_anpp::protocol::NorthSeekingInitializationStatus
 
struct  imu_advanced_navigation_anpp::protocol::PacketTimerPeriod
 
struct  imu_advanced_navigation_anpp::protocol::PacketPeriods
 
struct  imu_advanced_navigation_anpp::protocol::BaudRates
 
struct  imu_advanced_navigation_anpp::protocol::Alignment
 
struct  imu_advanced_navigation_anpp::protocol::FilterOptions
 
struct  imu_advanced_navigation_anpp::protocol::MagneticCalibrationValues
 
struct  imu_advanced_navigation_anpp::protocol::MagneticCalibrationConfiguration
 
struct  imu_advanced_navigation_anpp::protocol::MagneticCalibrationStatus
 

Namespaces

 imu_advanced_navigation_anpp
 
 imu_advanced_navigation_anpp::protocol
 

Typedefs

typedef std::map< uint8_t, uint32_t > Periods
 

Enumerations

enum  imu_advanced_navigation_anpp::protocol::BOOT_MODES { imu_advanced_navigation_anpp::protocol::BOOT_TO_BOOTLOADER, imu_advanced_navigation_anpp::protocol::BOOT_TO_PROGRAM }
 
enum  imu_advanced_navigation_anpp::protocol::RAW_GNSS_STATUS {
  imu_advanced_navigation_anpp::protocol::RAW_GNSS_FIX_STATUS_MASK = 0x07, imu_advanced_navigation_anpp::protocol::RAW_GNSS_NO_FIX = 0x00, imu_advanced_navigation_anpp::protocol::RAW_GNSS_2D = 0x01, imu_advanced_navigation_anpp::protocol::RAW_GNSS_3D = 0x02,
  imu_advanced_navigation_anpp::protocol::RAW_GNSS_SBAS = 0x03, imu_advanced_navigation_anpp::protocol::RAW_GNSS_DGPS = 0x04, imu_advanced_navigation_anpp::protocol::RAW_GNSS_OMNISTAR = 0x05, imu_advanced_navigation_anpp::protocol::RAW_GNSS_RTK_FLOAT = 0x06,
  imu_advanced_navigation_anpp::protocol::RAW_GNSS_RTK_FIXED = 0x07, imu_advanced_navigation_anpp::protocol::RAW_GNSS_HAS_DOPPLER_VELOCITY = 0x08, imu_advanced_navigation_anpp::protocol::RAW_GNSS_HAS_TIME = 0x10, imu_advanced_navigation_anpp::protocol::RAW_GNSS_EXTERNAL = 0x20,
  imu_advanced_navigation_anpp::protocol::RAW_GNSS_HAS_TILT = 0x40, imu_advanced_navigation_anpp::protocol::RAW_GNSS_HAS_HEADING = 0x80, imu_advanced_navigation_anpp::protocol::RAW_GNSS_HAS_FLOATING_AMBIGUITY_HEADING = 0x100
}
 
enum  imu_advanced_navigation_anpp::protocol::SATELLITE_SYSTEM {
  imu_advanced_navigation_anpp::protocol::SATELLITE_SYSTEM_UNKNOWN, imu_advanced_navigation_anpp::protocol::SATELLITE_SYSTEM_GPS, imu_advanced_navigation_anpp::protocol::SATELLITE_SYSTEM_GLONASS, imu_advanced_navigation_anpp::protocol::SATELLITE_SYSTEM_BEIDOU,
  imu_advanced_navigation_anpp::protocol::SATELLITE_SYSTEM_GALILEO, imu_advanced_navigation_anpp::protocol::SATELLITE_SYSTEM_SBAS, imu_advanced_navigation_anpp::protocol::SATELLITE_SYSTEM_QZSS, imu_advanced_navigation_anpp::protocol::SATELLITE_SYSTEM_STARFIRE,
  imu_advanced_navigation_anpp::protocol::SATELLITE_SYSTEM_OMNISTAR
}
 
enum  imu_advanced_navigation_anpp::protocol::SATELLITE_FREQUENCIES {
  imu_advanced_navigation_anpp::protocol::SATELLITE_FREQUENCY_L1CA = 0x01, imu_advanced_navigation_anpp::protocol::SATELLITE_FREQUENCY_L1C = 0x02, imu_advanced_navigation_anpp::protocol::SATELLITE_FREQUENCY_L1P = 0x04, imu_advanced_navigation_anpp::protocol::SATELLITE_FREQUENCY_L1M = 0x08,
  imu_advanced_navigation_anpp::protocol::SATELLITE_FREQUENCY_L2C = 0x10, imu_advanced_navigation_anpp::protocol::SATELLITE_FREQUENCY_L2P = 0x20, imu_advanced_navigation_anpp::protocol::SATELLITE_FREQUENCY_L2M = 0x40, imu_advanced_navigation_anpp::protocol::SATELLITE_FREQUENCY_L5 = 0x80
}
 
enum  imu_advanced_navigation_anpp::protocol::MAGNETIC_CALIBRATION_ACTIONS { imu_advanced_navigation_anpp::protocol::MAGNETIC_CALIBRATION_CANCEL, imu_advanced_navigation_anpp::protocol::MAGNETIC_CALIBRATION_START_2D, imu_advanced_navigation_anpp::protocol::MAGNETIC_CALIBRATION_START_3D, imu_advanced_navigation_anpp::protocol::MAGNETIC_CALIBRATION_RESET }
 

Functions

template<typename T , typename InputIterator >
imu_advanced_navigation_anpp::protocol::read16 (InputIterator it)
 
template<typename T , typename InputIterator >
imu_advanced_navigation_anpp::protocol::read32 (InputIterator it)
 
template<typename T , typename InputIterator >
imu_advanced_navigation_anpp::protocol::read64 (InputIterator it)
 
template<typename T , typename Out >
void imu_advanced_navigation_anpp::protocol::write16 (Out out, T sample)
 
template<typename T , typename Out >
void imu_advanced_navigation_anpp::protocol::write32 (Out out, T sample)
 
template<typename T , typename Out >
void imu_advanced_navigation_anpp::protocol::write64 (Out out, T sample)
 
struct imu_advanced_navigation_anpp::protocol::Header imu_advanced_navigation_anpp::protocol::__attribute__ ((packed))
 
 Header ()
 
 Header (uint8_t packet_id, uint8_t const *begin, uint8_t const *end)
 
size_t getPacketLength () const
 
bool isValid () const
 
bool isPacketValid (uint8_t const *begin, uint8_t const *end) const
 
uint8_t computeHeaderChecksum () const
 
uint16_t imu_advanced_navigation_anpp::protocol::crc (uint8_t const *begin, uint8_t const *end)
 
bool isMatching (Header const &header) const
 
bool isSuccess () const
 
bool isPacketValidationFailure () const
 
bool isProtocolError () const
 
bool isSystemError () const
 
bool isNotReady () const
 
template<typename OutputIterator , typename InputIterator >
OutputIterator marshal (OutputIterator out, InputIterator begin, InputIterator end) const
 
template<typename OutputIterator >
OutputIterator marshal (OutputIterator out, uint8_t packet_id) const
 
template<typename OutputIterator >
OutputIterator marshal (OutputIterator out) const
 
template<typename OutputIterator >
OutputIterator marshal (OutputIterator out, uint8_t packet_id, uint32_t period) const
 
template<typename Packet , typename Driver >
Header imu_advanced_navigation_anpp::protocol::writePacket (Driver &driver, Packet const &packet)
 
template<typename Packet , typename Driver >
Packet imu_advanced_navigation_anpp::protocol::waitForPacket (Driver &driver, base::Time const &_timeout)
 
template<typename Driver >
ACK_RESULTS imu_advanced_navigation_anpp::protocol::waitForAck (Driver &driver, Header const &header, base::Time const &_timeout)
 
template<typename Driver >
void imu_advanced_navigation_anpp::protocol::validateAck (Driver &driver, Header const &header, base::Time const &_timeout)
 
template<typename Packet , typename Driver >
Packet imu_advanced_navigation_anpp::protocol::query (Driver &driver)
 
template<typename Driver >
Header imu_advanced_navigation_anpp::protocol::writePacketPeriod (Driver &driver, uint8_t packet_id, int period, bool clear_existing)
 

Variables

uint8_t header_checksum
 
uint8_t packet_id
 
uint8_t payload_length
 
uint8_t payload_checksum_lsb
 
uint8_t payload_checksum_msb
 
uint8_t acked_packet_id
 
uint8_t acked_payload_checksum_lsb
 
uint8_t acked_payload_checksum_msb
 
uint8_t result
 
enum imu_advanced_navigation_anpp::protocol::BOOT_MODES imu_advanced_navigation_anpp::protocol::__attribute__
 
uint8_t boot_mode
 
uint8_t verification_sequence [4] = { 0x1C, 0x9E, 0x42, 0x85 }
 
uint16_t system_status
 
uint16_t filter_status
 
uint32_t unix_time_seconds
 
uint32_t unix_time_microseconds
 
double lat_lon_z [3]
 
float velocity_ned [3]
 
float body_acceleration_xyz [3]
 
float g
 
float rpy [3]
 
float angular_velocity [3]
 
float lat_lon_z_stddev [3]
 
uint32_t seconds
 
uint32_t microseconds
 
float ned [3]
 
float accelerometers_xyz [3]
 
float gyroscopes_xyz [3]
 
float magnetometers_xyz [3]
 
float imu_temperature_C
 
float pressure
 
float pressure_temperature_C
 
float pitch
 
float yaw
 
float pitch_stddev
 
float yaw_stddev
 
uint16_t status
 
float hdop
 
float vdop
 
uint8_t gps_satellite_count
 
uint8_t glonass_satellite_count
 
uint8_t beidou_satellite_count
 
uint8_t galileo_satellite_count
 
uint8_t sbas_satellite_count
 
uint8_t system
 
uint8_t prn
 
uint8_t frequencies
 
uint8_t elevation
 
uint16_t azimuth
 
uint8_t snr
 
float xyz [3]
 
float im
 
uint16_t flags
 
uint16_t reserved = 0
 
uint8_t progress [4]
 
float current_rotation_angle
 
float gyroscope_bias_solution_xyz [3]
 
float gyroscope_bias_solution_error
 
uint8_t permanent
 
uint8_t utc_synchronization
 
uint16_t period
 
uint8_t clear_existing
 
uint32_t primary_port
 
uint32_t gpio
 
uint32_t auxiliary_rs232
 
float dcm [9]
 
float gnss_antenna_offset_xyz [3]
 
float odometer_offset_xyz [3]
 
float external_data_offset_xyz [3]
 
uint8_t vehicle_type
 
uint8_t enabled_internal_gnss
 
uint8_t reserved_0 = 0
 
uint8_t enabled_atmospheric_altitude
 
uint8_t enabled_velocity_heading
 
uint8_t enabled_reversing_detection
 
uint8_t enabled_motion_analysis
 
uint8_t reserved_1 [9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }
 
float hard_iron_bias_xyz [3]
 
float soft_iron_transformation [9]
 
uint8_t action
 
uint8_t error
 

Typedef Documentation

typedef std::map<uint8_t, uint32_t> Periods

Function Documentation

uint8_t __attribute__::computeHeaderChecksum ( ) const

Compute the checksum of the header

size_t __attribute__::getPacketLength ( ) const

The length of the whole packet (header + payload)

__attribute__::Header ( )

Construct an uninitialized header

The header and payload checksums won't validate

__attribute__::Header ( uint8_t  packet_id,
uint8_t const *  begin,
uint8_t const *  end 
)

Initialize a header by filling all the fields based on data in the packet

bool __attribute__::isMatching ( Header const &  header) const

Tests whether this acknowledgment matches the given packet header

bool __attribute__::isNotReady ( ) const

True if this ack indicates that the system is not ready

bool __attribute__::isPacketValid ( uint8_t const *  begin,
uint8_t const *  end 
) const

Check if the data in the header validates the packet data

bool __attribute__::isPacketValidationFailure ( ) const

True if this acknowledge is a failure-to-validate-packet error

bool __attribute__::isProtocolError ( ) const

True if this acknowledge indicates a protocol error on the driver side

Packet validation failures are not reported as they might be a communication error as well. Check against sent packets with isMatching to make the difference

bool __attribute__::isSuccess ( ) const

True if this indicates a success

bool __attribute__::isSystemError ( ) const

True if this acknowledge indicates a system error on the IMU side

bool __attribute__::isValid ( ) const

Check if the data in the header validates the header checksum

template<typename OutputIterator , typename InputIterator >
OutputIterator marshal ( OutputIterator  out,
InputIterator  begin,
InputIterator  end 
) const
template<typename OutputIterator >
OutputIterator marshal ( OutputIterator  out) const
template<typename OutputIterator >
OutputIterator __attribute__::marshal ( OutputIterator  out,
uint8_t  packet_id 
) const
template<typename OutputIterator >
OutputIterator __attribute__::marshal ( OutputIterator  out,
uint8_t  packet_id,
uint32_t  period 
) const

Variable Documentation

float accelerometers_xyz[3]
uint8_t acked_packet_id
uint8_t acked_payload_checksum_lsb
uint8_t acked_payload_checksum_msb
uint8_t action

Action as one of MAGNETIC_CALIBRATION_ACTIONS

float angular_velocity[3]
uint32_t auxiliary_rs232
uint16_t azimuth

Azimuth in degrees

uint8_t beidou_satellite_count
float body_acceleration_xyz[3]
uint8_t boot_mode
uint8_t clear_existing
float current_rotation_angle
float dcm[9]
uint8_t elevation

Elevation in degrees

uint8_t enabled_atmospheric_altitude
uint8_t enabled_internal_gnss
uint8_t enabled_motion_analysis
uint8_t enabled_reversing_detection
uint8_t enabled_velocity_heading
uint8_t error
float external_data_offset_xyz[3]
uint16_t filter_status

Bitfield of FILTER_STATUS

uint16_t flags

Status as one of NORTH_SEEKING_INITIALIZATION_FLAGS

uint8_t frequencies

Satellite frequencies

Bitfield represented by the SATELLITE_FREQUENCIES enum

float g
uint8_t galileo_satellite_count
uint8_t glonass_satellite_count
float gnss_antenna_offset_xyz[3]
uint32_t gpio
uint8_t gps_satellite_count
float gyroscope_bias_solution_error
float gyroscope_bias_solution_xyz[3]
float gyroscopes_xyz[3]
float hard_iron_bias_xyz[3]
float hdop
uint8_t header_checksum

Longitudinal redundancy check for the header

LRC = ((packet_id + packet_length + crc[0] + crc[1])^0xFF) + 1

float im
float imu_temperature_C
double lat_lon_z
float lat_lon_z_stddev
float magnetometers_xyz[3]
uint32_t microseconds
float ned
float odometer_offset_xyz[3]
uint8_t packet_id
uint8_t payload_checksum_lsb

Least significant byte of a crc-CCITT with starting value 0xFFFF calculated over the packet data only

uint8_t payload_checksum_msb

Most significant byte of a crc-CCITT with starting value 0xFFFF calculated over the packet data only

uint8_t payload_length
uint16_t period
uint8_t permanent
float pitch
float pitch_stddev
float pressure
float pressure_temperature_C
uint32_t primary_port
uint8_t prn

The satellite ID number

uint8_t progress
uint32_t reserved = 0
uint8_t reserved_0 = 0
uint8_t reserved_1[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }
uint8_t result
float rpy
uint8_t sbas_satellite_count
uint32_t seconds
uint8_t snr

Signal to noise ratio in dB

float soft_iron_transformation[9]
uint8_t status

Bitfield described by RAW_GNSS_STATUS

Status as one of MAGNETIC_CALIBRATION_STATUS

uint8_t system

The satellite system as represented by SATELLITE_SYSTEM

uint16_t system_status

Bitfield of SYSTEM_STATUS

uint32_t unix_time_microseconds
uint32_t unix_time_seconds
uint8_t utc_synchronization
float vdop
uint8_t vehicle_type

The vehicle type to tune the filter dynamics

See VEHICLE_TYPES

float velocity_ned
uint8_t verification_sequence = { 0x1C, 0x9E, 0x42, 0x85 }
float xyz
float yaw
float yaw_stddev