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

◆ Periods

typedef std::map<uint8_t, uint32_t> Periods

Function Documentation

◆ computeHeaderChecksum()

uint8_t __attribute__::computeHeaderChecksum ( ) const

Compute the checksum of the header

◆ getPacketLength()

size_t __attribute__::getPacketLength ( ) const

The length of the whole packet (header + payload)

◆ Header() [1/2]

__attribute__::Header ( )

Construct an uninitialized header

The header and payload checksums won't validate

◆ Header() [2/2]

__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

◆ isMatching()

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

Tests whether this acknowledgment matches the given packet header

◆ isNotReady()

bool __attribute__::isNotReady ( ) const

True if this ack indicates that the system is not ready

◆ isPacketValid()

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

Check if the data in the header validates the packet data

◆ isPacketValidationFailure()

bool __attribute__::isPacketValidationFailure ( ) const

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

◆ isProtocolError()

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

◆ isSuccess()

bool __attribute__::isSuccess ( ) const

True if this indicates a success

◆ isSystemError()

bool __attribute__::isSystemError ( ) const

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

◆ isValid()

bool __attribute__::isValid ( ) const

Check if the data in the header validates the header checksum

◆ marshal() [1/4]

template<typename OutputIterator , typename InputIterator >
OutputIterator marshal ( OutputIterator  out,
InputIterator  begin,
InputIterator  end 
) const

◆ marshal() [2/4]

template<typename OutputIterator >
OutputIterator marshal ( OutputIterator  out) const

◆ marshal() [3/4]

template<typename OutputIterator >
OutputIterator __attribute__::marshal ( OutputIterator  out,
uint8_t  packet_id 
) const

◆ marshal() [4/4]

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

Variable Documentation

◆ accelerometers_xyz

float accelerometers_xyz[3]

◆ acked_packet_id

uint8_t acked_packet_id

◆ acked_payload_checksum_lsb

uint8_t acked_payload_checksum_lsb

◆ acked_payload_checksum_msb

uint8_t acked_payload_checksum_msb

◆ action

uint8_t action

Action as one of MAGNETIC_CALIBRATION_ACTIONS

◆ angular_velocity

float angular_velocity[3]

◆ auxiliary_rs232

uint32_t auxiliary_rs232

◆ azimuth

uint16_t azimuth

Azimuth in degrees

◆ beidou_satellite_count

uint8_t beidou_satellite_count

◆ body_acceleration_xyz

float body_acceleration_xyz[3]

◆ boot_mode

uint8_t boot_mode

◆ clear_existing

uint8_t clear_existing

◆ current_rotation_angle

float current_rotation_angle

◆ dcm

float dcm[9]

◆ elevation

uint8_t elevation

Elevation in degrees

◆ enabled_atmospheric_altitude

uint8_t enabled_atmospheric_altitude

◆ enabled_internal_gnss

uint8_t enabled_internal_gnss

◆ enabled_motion_analysis

uint8_t enabled_motion_analysis

◆ enabled_reversing_detection

uint8_t enabled_reversing_detection

◆ enabled_velocity_heading

uint8_t enabled_velocity_heading

◆ error

uint8_t error

◆ external_data_offset_xyz

float external_data_offset_xyz[3]

◆ filter_status

uint16_t filter_status

Bitfield of FILTER_STATUS

◆ flags

uint16_t flags

Status as one of NORTH_SEEKING_INITIALIZATION_FLAGS

◆ frequencies

uint8_t frequencies

Satellite frequencies

Bitfield represented by the SATELLITE_FREQUENCIES enum

◆ g

float g

◆ galileo_satellite_count

uint8_t galileo_satellite_count

◆ glonass_satellite_count

uint8_t glonass_satellite_count

◆ gnss_antenna_offset_xyz

float gnss_antenna_offset_xyz[3]

◆ gpio

uint32_t gpio

◆ gps_satellite_count

uint8_t gps_satellite_count

◆ gyroscope_bias_solution_error

float gyroscope_bias_solution_error

◆ gyroscope_bias_solution_xyz

float gyroscope_bias_solution_xyz[3]

◆ gyroscopes_xyz

float gyroscopes_xyz[3]

◆ hard_iron_bias_xyz

float hard_iron_bias_xyz[3]

◆ hdop

float hdop

◆ header_checksum

uint8_t header_checksum

Longitudinal redundancy check for the header

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

◆ im

float im

◆ imu_temperature_C

float imu_temperature_C

◆ lat_lon_z

double lat_lon_z

◆ lat_lon_z_stddev

float lat_lon_z_stddev

◆ magnetometers_xyz

float magnetometers_xyz[3]

◆ microseconds

uint32_t microseconds

◆ ned

float ned

◆ odometer_offset_xyz

float odometer_offset_xyz[3]

◆ packet_id

uint8_t packet_id

◆ payload_checksum_lsb

uint8_t payload_checksum_lsb

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

◆ payload_checksum_msb

uint8_t payload_checksum_msb

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

◆ payload_length

uint8_t payload_length

◆ period

uint16_t period

◆ permanent

uint8_t permanent

◆ pitch

float pitch

◆ pitch_stddev

float pitch_stddev

◆ pressure

float pressure

◆ pressure_temperature_C

float pressure_temperature_C

◆ primary_port

uint32_t primary_port

◆ prn

uint8_t prn

The satellite ID number

◆ progress

uint8_t progress

◆ reserved

uint32_t reserved = 0

◆ reserved_0

uint8_t reserved_0 = 0

◆ reserved_1

uint8_t reserved_1[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }

◆ result

uint8_t result

◆ rpy

float rpy

◆ sbas_satellite_count

uint8_t sbas_satellite_count

◆ seconds

uint32_t seconds

◆ snr

uint8_t snr

Signal to noise ratio in dB

◆ soft_iron_transformation

float soft_iron_transformation[9]

◆ status

uint8_t status

Bitfield described by RAW_GNSS_STATUS

Status as one of MAGNETIC_CALIBRATION_STATUS

◆ system

uint8_t system

The satellite system as represented by SATELLITE_SYSTEM

◆ system_status

uint16_t system_status

Bitfield of SYSTEM_STATUS

◆ unix_time_microseconds

uint32_t unix_time_microseconds

◆ unix_time_seconds

uint32_t unix_time_seconds

◆ utc_synchronization

uint8_t utc_synchronization

◆ vdop

float vdop

◆ vehicle_type

uint8_t vehicle_type

The vehicle type to tune the filter dynamics

See VEHICLE_TYPES

◆ velocity_ned

float velocity_ned

◆ verification_sequence

uint8_t verification_sequence = { 0x1C, 0x9E, 0x42, 0x85 }

◆ xyz

float xyz

◆ yaw

float yaw

◆ yaw_stddev

float yaw_stddev