DUNE: Uniform Navigational Environment
2.6.0-rc1
|
Microstrain3DMGX3 software driver.
Public Member Functions | |
Task (const std::string &name, Tasks::Context &ctx) | |
void | onUpdateParameters (void) |
void | onResourceRelease (void) |
void | onResourceAcquisition (void) |
void | onResourceInitialization (void) |
void | consume (const IMC::MagneticField *msg) |
bool | poll (Commands cmd, Sizes cmd_size, uint16_t addr, uint16_t value) |
bool | listen (Commands cmd, Sizes cmd_size) |
bool | validateChecksum (const uint8_t *bfr, unsigned bfr_len) |
void | runCalibration (void) |
bool | isCalibrated (void) |
void | resetDevice (void) |
void | requestCalibration (uint16_t addr) |
bool | setHardIron (void) |
void | calibrate (uint16_t addr, uint16_t value) |
void | rotateData (void) |
void | task (void) |
Public Member Functions inherited from DUNE::Tasks::Periodic | |
Periodic (const std::string &name, Context &ctx) | |
virtual | ~Periodic (void) |
void | setFrequency (double freq) |
double | getFrequency (void) const |
double | getRunTime (void) const |
unsigned | getRunCount (void) const |
Public Member Functions inherited from DUNE::Tasks::Task | |
Task (const std::string &name, Context &context) | |
virtual | ~Task (void) |
const char * | getName (void) const |
const char * | getSystemName (void) const |
unsigned int | getSystemId (void) const |
unsigned int | getEntityId (void) const |
unsigned int | resolveEntity (const std::string &label) const |
std::string | resolveEntity (unsigned int id) const |
uint16_t | getActivationTime (void) const |
uint16_t | getDeactivationTime (void) const |
unsigned int | resolveSystemName (const std::string &name) const |
const char * | resolveSystemId (unsigned int id) const |
void | loadConfig (void) |
void | setPriority (unsigned int value) |
unsigned int | getPriority (void) const |
void | inf (const char *format,...) DUNE_PRINTF_FORMAT(2 |
void void | war (const char *format,...) DUNE_PRINTF_FORMAT(2 |
void void void | err (const char *format,...) DUNE_PRINTF_FORMAT(2 |
void void void void | cri (const char *format,...) DUNE_PRINTF_FORMAT(2 |
void void void void void | debug (const char *format,...) DUNE_PRINTF_FORMAT(2 |
void void void void void void | trace (const char *format,...) DUNE_PRINTF_FORMAT(2 |
void void void void void void void | spew (const char *format,...) DUNE_PRINTF_FORMAT(2 |
void void void void void void void void | dispatch (IMC::Message *msg, unsigned int flags=0) |
void | dispatch (IMC::Message &msg, unsigned int flags=0) |
void | dispatchReply (const IMC::Message &original, IMC::Message &msg, unsigned int flags=0) |
void | receive (const IMC::Message *msg) |
void | reserveEntities (void) |
void | resolveEntities (void) |
void | acquireResources (void) |
void | releaseResources (void) |
void | initializeResources (void) |
void | updateParameters (bool act_deact=true) |
void | writeParamsXML (std::ostream &os) const |
Public Member Functions inherited from DUNE::Tasks::AbstractTask | |
AbstractTask (void) | |
virtual | ~AbstractTask (void) |
Public Member Functions inherited from DUNE::Concurrency::Thread | |
Thread (void) | |
virtual | ~Thread (void) |
int | getProcessorUsage (void) |
Public Member Functions inherited from DUNE::Concurrency::Runnable | |
Runnable (void) | |
virtual | ~Runnable (void) |
void | start (void) |
void | stop (void) |
void | join (void) |
void | stopAndJoin (void) |
void | setPriority (Scheduler::Policy policy, unsigned priority) |
State | getState (void) |
bool | isCreated (void) |
bool | isStopping (void) |
bool | isRunning (void) |
bool | isStarting (void) |
bool | isDead (void) |
Public Attributes | |
Math::Matrix | m_rotation |
float | m_hard_iron [3] |
SerialPort * | m_uart |
IMC::EulerAngles | m_euler |
IMC::Acceleration | m_accel |
IMC::AngularVelocity | m_agvel |
IMC::MagneticField | m_magfield |
Time::Counter< float > | m_timer |
uint8_t | m_bfr [c_bfr_size] |
uint16_t | m_addr [c_num_addr] |
double | m_tstamp |
Counter< double > | m_wdog |
Arguments | m_args |
Static Public Attributes | |
static const unsigned | c_bfr_size |
static const unsigned | c_num_addr |
static const uint16_t | c_mag_addr |
Additional Inherited Members | |
Public Types inherited from DUNE::Concurrency::Runnable | |
enum | State { StateStarting, StateRunning, StateStopping, StateDead, StateUnknown } |
Protected Member Functions inherited from DUNE::Tasks::Task | |
const char * | getEntityLabel (void) const |
void | setEntityLabel (const std::string &label) |
void | setEntityState (IMC::EntityState::StateEnum state, Status::Code code) |
void | setEntityState (IMC::EntityState::StateEnum state, const std::string &description) |
IMC::EntityState::StateEnum | getEntityState (void) const |
unsigned int | reserveEntity (const std::string &label) |
bool | stopping (void) |
bool | isActive (void) const |
bool | isActivating (void) const |
bool | isDeactivating (void) const |
void | waitForMessages (double timeout) |
void | consumeMessages (void) |
template<typename T > | |
Parameter & | param (const std::string &name, T &var) |
template<typename Y , typename T > | |
Parameter & | param (const std::string &name, T &var) |
template<typename T > | |
bool | paramChanged (T &var) |
void | paramActive (Parameter::Scope def_scope, Parameter::Visibility def_visibility, bool def_value=false) |
void | setParamSectionEditor (const std::string &name) |
template<typename M , typename T > | |
void | bind (T *task_obj, void(T::*consumer)(const M *)=&T::consume) |
template<typename T > | |
void | bind (T *task_obj, const std::vector< uint32_t > &list) |
template<typename T , typename M > | |
void | bind (T *task_obj, const std::vector< uint32_t > &list, void(T::*consumer)(const M *)=&T::consume) |
template<typename T > | |
void | bind (T *task_obj, const std::vector< std::string > &list) |
void | requestActivation (void) |
void | requestDeactivation (void) |
void | activate (void) |
void | activationFailed (const std::string &reason) |
void | deactivate (void) |
void | deactivationFailed (const std::string &reason) |
virtual void | onEntityReservation (void) |
virtual void | onEntityResolution (void) |
virtual void | onReportEntityState (void) |
virtual void | onRequestActivation (void) |
virtual void | onRequestDeactivation (void) |
virtual void | onActivation (void) |
virtual void | onDeactivation (void) |
Protected Member Functions inherited from DUNE::Concurrency::Thread | |
void | startImpl (void) |
void | stopImpl (void) |
void | joinImpl (void) |
void | setPriorityImpl (Scheduler::Policy policy, unsigned priority) |
Protected Attributes inherited from DUNE::Tasks::Task | |
Context & | m_ctx |
|
inline |
References c_mag_addr, c_num_addr, Sensors::Microstrain3DMGX3::Arguments::calib_threshold, Sensors::Microstrain3DMGX3::Arguments::data_tout, DUNE::Tasks::Parameter::defaultValue(), Sensors::Microstrain3DMGX3::Arguments::hard_iron, m_addr, m_args, m_timer, DUNE::Tasks::Task::param(), Sensors::Microstrain3DMGX3::Arguments::rotation_mx, Sensors::Microstrain3DMGX3::Arguments::uart_baud, Sensors::Microstrain3DMGX3::Arguments::uart_dev, and DUNE::Tasks::Parameter::units().
|
inline |
Send calibration frame to the device.
[in] | addr | EEPROM address. |
[in] | value | new calibration value. |
References Sensors::Microstrain3DMGX3::CMD_WRITE_EEPROM, and m_uart.
Referenced by poll().
|
inline |
|
inline |
Check if sensor has the same hard iron calibration parameters.
References c_num_addr, Sensors::Microstrain3DMGX3::CMD_READ_EEPROM, Sensors::Microstrain3DMGX3::CMD_READ_EEPROM_SIZE, m_addr, m_bfr, m_hard_iron, m_uart, poll(), and DUNE::Tasks::Task::war().
Referenced by runCalibration().
Listen for responses.
[in] | cmd | command char. |
[in] | cmd_size | expected frame response size. |
References c_bfr_size, Sensors::Microstrain3DMGX3::Arguments::data_tout, m_args, m_bfr, m_tstamp, m_uart, and validateChecksum().
Referenced by poll().
|
inlinevirtual |
Acquire resources.
Reimplemented from DUNE::Tasks::Task.
References m_args, m_uart, DUNE::Tasks::Task::setEntityState(), Sensors::Microstrain3DMGX3::Arguments::uart_baud, and Sensors::Microstrain3DMGX3::Arguments::uart_dev.
|
inlinevirtual |
Initialize resources.
Reimplemented from DUNE::Tasks::Task.
References Sensors::Microstrain3DMGX3::CMD_DATA_SIZE, Sensors::Microstrain3DMGX3::CMD_FWARE_VERSION, Sensors::Microstrain3DMGX3::CMD_FWARE_VERSION_SIZE, m_uart, m_wdog, poll(), runCalibration(), DUNE::Tasks::Task::setEntityState(), DUNE::Time::Counter< T >::setTop(), and DUNE::Tasks::Task::stopping().
|
inlinevirtual |
|
inlinevirtual |
Update parameters.
Reimplemented from DUNE::Tasks::Task.
References Sensors::Microstrain3DMGX3::Arguments::hard_iron, DUNE::Math::inverse(), m_args, m_hard_iron, m_rotation, m_uart, DUNE::Tasks::Task::paramChanged(), Sensors::Microstrain3DMGX3::Arguments::rotation_mx, and runCalibration().
|
inline |
Send commands to the device.
[in] | cmd | command char. |
[in] | cmd_size | expected frame response size. |
[in] | addr | address. |
[in] | value | value to be assigned. |
References calibrate(), Sensors::Microstrain3DMGX3::CMD_DATA, Sensors::Microstrain3DMGX3::CMD_DEVICE_RESET, Sensors::Microstrain3DMGX3::CMD_FWARE_VERSION, Sensors::Microstrain3DMGX3::CMD_READ_EEPROM, Sensors::Microstrain3DMGX3::CMD_WRITE_EEPROM, listen(), m_uart, requestCalibration(), and resetDevice().
Referenced by isCalibrated(), onResourceInitialization(), runCalibration(), setHardIron(), and task().
|
inline |
Request calibration parameters from device.
[in] | addr | address. |
References Sensors::Microstrain3DMGX3::CMD_READ_EEPROM, and m_uart.
Referenced by poll().
|
inline |
Soft-reset device.
References Sensors::Microstrain3DMGX3::CMD_DEVICE_RESET, and m_uart.
Referenced by poll().
|
inline |
Correct data according with mounting position.
References m_accel, m_agvel, m_magfield, and m_rotation.
Referenced by task().
|
inline |
Routine to run calibration proceedings.
References Sensors::Microstrain3DMGX3::CMD_DEVICE_RESET, Sensors::Microstrain3DMGX3::CMD_DEVICE_RESET_SIZE, DUNE::Tasks::Task::inf(), isCalibrated(), m_timer, m_uart, poll(), DUNE::Tasks::Task::setEntityState(), and setHardIron().
Referenced by onResourceInitialization(), and onUpdateParameters().
|
inline |
Set new hard iron calibration parameters.
References c_num_addr, Sensors::Microstrain3DMGX3::CMD_WRITE_EEPROM, Sensors::Microstrain3DMGX3::CMD_WRITE_EEPROM_SIZE, Sensors::Microstrain3DMGX3::Arguments::hard_iron, DUNE::Tasks::Task::inf(), m_addr, m_args, m_hard_iron, m_uart, and poll().
Referenced by runCalibration().
|
inlinevirtual |
Main task.
Implements DUNE::Tasks::Periodic.
References Sensors::Microstrain3DMGX3::CMD_DATA, Sensors::Microstrain3DMGX3::CMD_DATA_SIZE, DUNE::Tasks::Task::consumeMessages(), DUNE::Tasks::Task::dispatch(), m_accel, m_agvel, m_bfr, m_euler, m_magfield, m_rotation, m_timer, m_tstamp, m_wdog, DUNE::Time::Counter< T >::overflow(), poll(), DUNE::Time::Counter< T >::reset(), rotateData(), DUNE::Tasks::Task::setEntityState(), and DUNE::Math::transpose().
|
inline |
Validate response checksum.
[in] | bfr | buffer to be validated. |
[in] | bfr_len | length of the buffer. |
Referenced by listen().
|
static |
Internal read buffer.
Referenced by listen().
|
static |
Magnetic calibration initial address.
Referenced by Task().
|
static |
Number of addresses for magnetic calibration.
Referenced by isCalibrated(), setHardIron(), and Task().
IMC::Acceleration Sensors::Microstrain3DMGX3::Task::m_accel |
Acceleration message.
Referenced by rotateData(), and task().
uint16_t Sensors::Microstrain3DMGX3::Task::m_addr[c_num_addr] |
Magnetic Calibration addresses.
Referenced by isCalibrated(), setHardIron(), and Task().
IMC::AngularVelocity Sensors::Microstrain3DMGX3::Task::m_agvel |
Angular velocity message.
Referenced by rotateData(), and task().
Arguments Sensors::Microstrain3DMGX3::Task::m_args |
Task arguments.
Referenced by consume(), listen(), onResourceAcquisition(), onUpdateParameters(), setHardIron(), and Task().
uint8_t Sensors::Microstrain3DMGX3::Task::m_bfr[c_bfr_size] |
Internal read buffer.
Referenced by isCalibrated(), listen(), and task().
IMC::EulerAngles Sensors::Microstrain3DMGX3::Task::m_euler |
Euler angles message.
Referenced by task().
float Sensors::Microstrain3DMGX3::Task::m_hard_iron[3] |
Rotated calibration parameters.
Referenced by isCalibrated(), onUpdateParameters(), and setHardIron().
IMC::MagneticField Sensors::Microstrain3DMGX3::Task::m_magfield |
Magnetometer Vector message.
Referenced by rotateData(), and task().
Math::Matrix Sensors::Microstrain3DMGX3::Task::m_rotation |
Rotation Matrix to correct mounting position.
Referenced by onUpdateParameters(), rotateData(), and task().
Time::Counter<float> Sensors::Microstrain3DMGX3::Task::m_timer |
Timer to wait for soft-reset without issuing error.
Referenced by runCalibration(), Task(), and task().
double Sensors::Microstrain3DMGX3::Task::m_tstamp |
SerialPort* Sensors::Microstrain3DMGX3::Task::m_uart |
Serial port.
Referenced by calibrate(), isCalibrated(), listen(), onResourceAcquisition(), onResourceInitialization(), onResourceRelease(), onUpdateParameters(), poll(), requestCalibration(), resetDevice(), runCalibration(), and setHardIron().
Counter<double> Sensors::Microstrain3DMGX3::Task::m_wdog |
Watchdog.
Referenced by onResourceInitialization(), and task().