Aria  2.8.0
Device Interface Classes

These classes provide interfaces to hardware devices such as sensors. More...

Classes

class  ArBumpers
 A class that treats the robot's bumpers as a range device. More...
 
class  ArGPS
 GPS Device Interface. More...
 
class  ArGPSConnector
 Factory for creating GPS interface object (for any kind of GPS supported by ARIA) based on robot parameter file and command-line arguments. More...
 
class  ArGripper
 Provides an interface to the Pioneer gripper device. More...
 
class  ArIRs
 A class that treats a robot's infrared sensors as a range device. More...
 
class  ArLaser
 Range device interface specialized for laser rangefinder sensors. More...
 
class  ArLaserConnector
 Create laser interface objects (for any kind of laser supported by ARIA) and connect to lasers based on parameters from robot parameter file and command-line arguments. More...
 
class  ArMTXIO
 Interface to digital and analog I/O and switched power outputs on MTX core (used in Pioneer LX and other MTX-based robots). More...
 
class  ArP2Arm
 ArP2Arm is the interface to the AROS/P2OS-based Pioneer 2 Arm servers, by means of which the robot microcontroller firmware can control the original 5-DOF Pioneer 2 Arm manipulator. More...
 
class  ArPTZ
 Base class which handles the PTZ cameras. More...
 
class  ArPTZConnector
 Factory for creating and configuring interfaces for pan/tilt units or camera pan/tilt/zoom control based on robot parameter file and command-line arguments. More...
 
class  ArRobot
 Central class for communicating with and operating the robot. More...
 
class  ArRobotConnector
 Connect to robot or simulator based on program command line parameters. More...
 
class  ArSerialConnection
 Utility for connecting to and communicating with devices through a serial port. More...
 
class  ArSonarDevice
 Keep track of recent sonar readings from a robot as an ArRangeDevice. More...
 
class  ArTCM2
 Interface to the PNI TCM 2, TCM 2.5, and TCM 2.6 3-axis compass (magnetometer) that can sense absolute heading, as well as pitch, roll, and includes a temperature sensor. More...
 
class  ArVersalogicIO
 Interface to integrated digital and analog I/O interfaces on Versalogic VSBC8 and EBX-12 Cobra computers (digital IO on 2nd * gen. More...
 
class  ArLaserConnector::LaserData
 Class that holds information about the laser data. More...
 

Enumerations

enum  { ReadFinished = ArNMEAParser::ParseFinished, ReadError = ArNMEAParser::ParseError, ReadData = ArNMEAParser::ParseData, ReadUpdated = ArNMEAParser::ParseUpdated }
 Flags to indicates what the read() method did. More...
 
enum  ChargeState {
  CHARGING_UNKNOWN = -1, CHARGING_NOT = 0, CHARGING_BULK = 1, CHARGING_OVERCHARGE = 2,
  CHARGING_FLOAT = 3, CHARGING_BALANCE = 4
}
 
enum  Direction { DIGITAL_INPUT, DIGITAL_OUTPUT }
 
enum  ArGPSConnector::GPSType {
  ArGPSConnector::Standard, ArGPSConnector::Novatel, ArGPSConnector::Trimble, ArGPSConnector::Invalid,
  ArGPSConnector::NovatelSPAN, ArGPSConnector::Simulator
}
 Device type identifiers. More...
 
enum  LatDesired { LAT_NONE, LAT_IGNORE, LAT_VEL }
 
enum  ArSerialConnection::Open {
  ArSerialConnection::OPEN_COULD_NOT_OPEN_PORT = 1, ArSerialConnection::OPEN_COULD_NOT_SET_UP_PORT, ArSerialConnection::OPEN_INVALID_BAUD_RATE, ArSerialConnection::OPEN_COULD_NOT_SET_BAUD,
  ArSerialConnection::OPEN_ALREADY_OPEN
}
 
enum  RotDesired { ROT_NONE, ROT_IGNORE, ROT_HEADING, ROT_VEL }
 
enum  TransDesired {
  TRANS_NONE, TRANS_IGNORE, TRANS_VEL, TRANS_VEL2,
  TRANS_DIST, TRANS_DIST_NEW
}
 
enum  ArGripper::Type {
  ArGripper::QUERYTYPE, ArGripper::GENIO, ArGripper::USERIO, ArGripper::GRIPPAC,
  ArGripper::NOGRIPPER
}
 These are the types for the gripper. More...
 
enum  ArRobot::WaitState {
  ArRobot::WAIT_CONNECTED, ArRobot::WAIT_FAILED_CONN, ArRobot::WAIT_RUN_EXIT, ArRobot::WAIT_TIMEDOUT,
  ArRobot::WAIT_INTR, ArRobot::WAIT_FAIL
}
 
enum  ArGPS::FixType {
  NoFix, BadFix, GPSFix, DGPSFix,
  PPSFix, RTKinFix, FloatRTKinFix, DeadReckFix,
  ManualFix, SimulatedFix, UnknownFixType, OmnistarConverging = FloatRTKinFix,
  OmnistarConverged = RTKinFix
}
 Data accessors. More...
 
Data ArGPS::myData
 
ArMutex ArGPS::myMutex
 
ArDeviceConnectionArGPS::myDevice
 
bool ArGPS::myCreatedOwnDeviceCon
 
ArRetFunctorC< bool, ArGPSArGPS::myParseArgsCallback
 
ArArgumentParserArGPS::myArgParser
 
ArNMEAParser ArGPS::myNMEAParser
 
ArFunctor1C< ArGPS, ArNMEAParser::MessageArGPS::myGPRMCHandler
 
ArFunctor1C< ArGPS, ArNMEAParser::MessageArGPS::myGPGGAHandler
 
ArFunctor1C< ArGPS, ArNMEAParser::MessageArGPS::myPGRMEHandler
 
ArFunctor1C< ArGPS, ArNMEAParser::MessageArGPS::myPGRMZHandler
 
ArFunctor1C< ArGPS, ArNMEAParser::MessageArGPS::myHCHDxHandler
 
ArFunctor1C< ArGPS, ArNMEAParser::MessageArGPS::myGPGSAHandler
 
ArFunctor1C< ArGPS, ArNMEAParser::MessageArGPS::myGPGSVHandler
 
unsigned int ArGPS::mySNRSum
 
unsigned short ArGPS::mySNRNum
 
ArFunctor1C< ArGPS, ArNMEAParser::MessageArGPS::myGPMSSHandler
 
ArFunctor1C< ArGPS, ArNMEAParser::MessageArGPS::myGPGSTHandler
 
const ArGPS::Data & ArGPS::getCurrentDataRef () const
 Access all of the internally stored data directly. More...
 
FixType ArGPS::getFixType () const
 (from NMEA GPGGA)
 
const char * ArGPS::getFixTypeName () const
 (from NMEA GPGGA)
 
bool ArGPS::havePosition () const
 (from NMEA GPRMC)
 
bool ArGPS::haveLatitude () const
 (from NMEA GPRMC)
 
bool ArGPS::haveLongitude () const
 (from NMEA GPRMC)
 
double ArGPS::getLatitude () const
 
double ArGPS::getLongitude () const
 
ArTime ArGPS::getTimeReceivedPosition () const
 
bool ArGPS::haveSpeed () const
 (from NMEA GPRMC)
 
double ArGPS::getSpeed () const
 
ArTime ArGPS::getGPSPositionTimestamp () const
 Timestamp provided by GPS device along with position. More...
 
int ArGPS::getNumSatellitesTracked () const
 
bool ArGPS::haveDGPSStation () const
 (from NMEA GPGGA)
 
unsigned short ArGPS::getDGPSStationID () const
 (from NMEA GPGGA)
 
bool ArGPS::haveGarminPositionError () const
 
double ArGPS::getGarminPositionError () const
 GPS device's error estimation in meters (from a Garmin-specific message PGRME, most GPS receivers will not provide this)
 
bool ArGPS::haveGarminVerticalPositionError () const
 
double ArGPS::getGarminVerticalPositionError () const
 
bool ArGPS::haveCompassHeadingMag () const
 Have a compass heading value relative to magnetic north. More...
 
bool ArGPS::haveCompassHeadingTrue () const
 Have a compass heading value relative to true north (using GPS/compass device's configured declination). More...
 
double ArGPS::getCompassHeadingMag () const
 Heading from magnetic north. More...
 
double ArGPS::getCompassHeadingTrue () const
 Heading from true north. More...
 
void ArGPS::setCompassHeadingMag (double val)
 Manually set compass value. More...
 
void ArGPS::setCompassHeadingTrue (double val)
 Manually set compass value. More...
 
void ArGPS::setCompassHeadingMagWithLock (double val)
 Manually set compass value. More...
 
void ArGPS::setCompassHeadingTrueWithLock (double val)
 Manually set compass value. More...
 
bool ArGPS::haveAltitude () const
 Altitude above sea level calculated from satellite positions (see also haveAltimiter()) (from NMEA GPGGA, if provided)
 
double ArGPS::getAltitude () const
 Altitude above sea level (meters), calculated from satellite positions (see also getAltimiter()) (from NMEA GPGGA, if provided)
 
bool ArGPS::haveAltimeter () const
 Some receivers may have an additional altitude from an altimiter (meters above sea level) (from PGRMZ, if receiver provides it)
 
double ArGPS::getAltimeter () const
 Some receivers may have an additional altitude from an altimiter (meters above sea level) (from PGRMZ, if receiver provides it)
 
bool ArGPS::haveHDOP () const
 (from NMEA GPGGA)
 
double ArGPS::getHDOP () const
 (from NMEA GPGGA)
 
bool ArGPS::haveVDOP () const
 (from NMEA GPGGA)
 
double ArGPS::getVDOP () const
 (from NMEA GPGGA)
 
bool ArGPS::havePDOP () const
 (from NMEA GPGGA)
 
double ArGPS::getPDOP () const
 (from NMEA GPGGA)
 
bool ArGPS::haveSNR () const
 (from NMEA GPGSV)
 
double ArGPS::getMeanSNR () const
 dB (from NMEA GPGSV)
 
bool ArGPS::haveBeaconInfo () const
 Whether we have any DGPS stationary beacon info (from NMEA GPMSS)
 
double ArGPS::getBeaconSignalStrength () const
 DGPS stationary beacon signal strength (dB) (from NMEA GPMSS)
 
double ArGPS::getBeaconSNR () const
 DGPS stationary beacon signal to noise (dB) (from NMEA GPMSS)
 
double ArGPS::getBeaconFreq () const
 DGPS stationary beacon frequency (kHz) (from NMEA GPMSS)
 
unsigned short ArGPS::getBecaonBPS () const
 DGPS stationary beacon bitrate (bits per second) (from NMEA GPMSS)
 
unsigned short ArGPS::getBeaconChannel () const
 DGPS stationary beacon channel (from NMEA GPMSS)
 
bool ArGPS::haveErrorEllipse () const
 Whether we have a position error estimate (as standard deviations in latitude and longitude) (from NMEA GPGST)
 
ArPose ArGPS::getErrorEllipse () const
 Standard deviation of position error (latitude and longitude), meters. More...
 
bool ArGPS::haveLatLonError () const
 Whether we have latitude or longitude error estimates (from NMEA GPGST)
 
ArPose ArGPS::getLatLonError () const
 Standard deviation of latitude and longitude error, meters. More...
 
double ArGPS::getLatitudeError () const
 Standard deviation of latitude and longitude error, meters. More...
 
double ArGPS::getLongitudeError () const
 Standard deviation of latitude and longitude error, meters. More...
 
bool ArGPS::haveAltitudeError () const
 
double ArGPS::getAltitudeError () const
 Standard deviation of altitude error, meters. (from NMEA GPGST, if provided)
 
bool ArGPS::haveInputsRMS () const
 (from NMEA GPGST)
 
double ArGPS::getInputsRMS () const
 (from NMEA GPGST)
 
void ArGPS::addNMEAHandler (const char *message, ArNMEAParser::Handler *handler)
 Set a handler for an NMEA message. More...
 
void ArGPS::removeNMEAHandler (const char *message)
 
void ArGPS::replaceNMEAHandler (const char *message, ArNMEAParser::Handler *handler)
 
bool ArGPS::readFloatFromString (const std::string &str, double *target, double(*convf)(double)=NULL) const
 
bool ArGPS::readUShortFromString (const std::string &str, unsigned short *target, unsigned short(*convf)(unsigned short)=NULL) const
 
bool ArGPS::readFloatFromStringVec (const std::vector< std::string > *vec, size_t i, double *target, double(*convf)(double)=NULL) const
 
bool ArGPS::readUShortFromStringVec (const std::vector< std::string > *vec, size_t i, unsigned short *target, unsigned short(*convf)(unsigned short)=NULL) const
 
void ArGPS::handleGPRMC (ArNMEAParser::Message msg)
 
void ArGPS::handleGPGGA (ArNMEAParser::Message msg)
 
void ArGPS::handlePGRME (ArNMEAParser::Message msg)
 
void ArGPS::handlePGRMZ (ArNMEAParser::Message msg)
 
void ArGPS::handleHCHDx (ArNMEAParser::Message msg)
 
void ArGPS::handleGPGSA (ArNMEAParser::Message msg)
 
void ArGPS::handleGPGSV (ArNMEAParser::Message msg)
 
void ArGPS::handleGPMSS (ArNMEAParser::Message msg)
 
void ArGPS::handleGPGST (ArNMEAParser::Message msg)
 
bool ArGPS::readTimeFromString (const std::string &s, ArTime *time) const
 
void ArGPS::parseGPRMC (const ArNMEAParser::Message &msg, double &latitudeResult, double &longitudeResult, bool &qualityFlagResult, bool &gotPosition, ArTime &timeGotPositionResult, ArTime &gpsTimestampResult, bool &gotSpeedResult, double &speedResult)
 Parse a GPRMC message (in msg) and place results in provided variables. More...
 
static const char * ArGPS::getFixTypeName (FixType type)
 
static double ArGPS::gpsDegminToDegrees (double degmin)
 
static double ArGPS::knotsToMPS (double knots)
 
static double ArGPS::mpsToMph (const double mps)
 Convert meters per second to miles per hour.
 
static double ArGPS::metersToFeet (double m)
 
static double ArGPS::feetToMeters (double f)
 

Detailed Description

These classes provide interfaces to hardware devices such as sensors.

Some use "connector" objects for configure, connection and sometimes to create the interface objects. Read documentation fro details.

Enumeration Type Documentation

anonymous enum

Flags to indicates what the read() method did.

i.e. If nothing was done, then the result will be 0. To check a read() return result result to see if data was updated, use (result & ReadUpdated). To check if there was an error, use (result & ReadError).

These happen to match the flags in ArNMEAParser.

Data accessors.

Access the last received data from the GPS

Device type identifiers.

Enumerator
Standard 

For a standard NMEA GPS device (no extra initialization or interpretation needed) accessible using ArGPS.

Novatel 

For a Novatel device accessible using ArNovatelGPS.

Trimble 

For a Trimble device accessible using ArTrimbleGPS.

Invalid 

Not set or invalid.

NovatelSPAN 

Novatel SPAN.

Since
Aria 2.7.2
Simulator 

Simulated (program must set dummy positions)

Since
Aria 2.7.6
Enumerator
OPEN_COULD_NOT_OPEN_PORT 

Could not open the port.

OPEN_COULD_NOT_SET_UP_PORT 

Could not set up the port.

OPEN_INVALID_BAUD_RATE 

Baud rate is not valid.

OPEN_COULD_NOT_SET_BAUD 

Baud rate valid, but could not set it.

OPEN_ALREADY_OPEN 

Connection was already open.

These are the types for the gripper.

Enumerator
QUERYTYPE 

Finds out what type from the robot, default.

GENIO 

Uses general IO.

USERIO 

Uses the user IO.

GRIPPAC 

Uses a packet requested from the robot.

NOGRIPPER 

There isn't a gripper.

Enumerator
WAIT_CONNECTED 

The robot has connected.

WAIT_FAILED_CONN 

The robot failed to connect.

WAIT_RUN_EXIT 

The run loop has exited.

WAIT_TIMEDOUT 

The wait reached the timeout specified.

WAIT_INTR 

The wait was interupted by a signal.

WAIT_FAIL 

The wait failed due to an error.

Function Documentation

void ArGPS::addNMEAHandler ( const char *  message,
ArNMEAParser::Handler handler 
)
inline

Set a handler for an NMEA message.

Mostly for internal use or to be used by related classes, but you could use for ususual or custom messages emitted by a device that you wish to be handled outside of the ArGPS class.

double ArGPS::getCompassHeadingMag ( ) const
inline

Heading from magnetic north.

Note
The GPS or compass device must be configured to send HCHDM messages to receive compass data. Only some GPS receivers support this.
double ArGPS::getCompassHeadingTrue ( ) const
inline

Heading from true north.

Note
The GPS or compass device must be configured to send HCHDT messages to receive compass data. Only some GPS receivers support this.
const ArGPS::Data& ArGPS::getCurrentDataRef ( ) const
inline

Access all of the internally stored data directly.

See also
ArGPS::Data
ArPose ArGPS::getErrorEllipse ( ) const
inline

Standard deviation of position error (latitude and longitude), meters.

Theta in ArPose is orientation of ellipse from true north, Y is the length of the major axis on that orientation, X the minor. (from NMEA GPGST)

Note
Values may be inf or NaN (if GPS supplies "Inf" or "NAN")
double ArGPS::getGarminVerticalPositionError ( ) const
inline
Returns
An altitude error estimation (from a Garmin-specific message PGRME, most GPS receivers will not provide this)
ArTime ArGPS::getGPSPositionTimestamp ( ) const
inline

Timestamp provided by GPS device along with position.

(from NMEA GPRMC)

double ArGPS::getLatitude ( ) const
inline
Returns
latitude in decimal degrees. (from NMEA GPRMC)
double ArGPS::getLatitudeError ( ) const
inline

Standard deviation of latitude and longitude error, meters.

Theta value in ArPose is unused.

Note
May only be provided by GPS in certain fix modes (e.g. Trimble AgGPS provides it in Omnistar and RTK modes, but not in GPS or DGPS modes).
Values may be inf or NaN (if GPS supplies "Inf" or "NAN") (from NMEA GPGST)
ArPose ArGPS::getLatLonError ( ) const
inline

Standard deviation of latitude and longitude error, meters.

Theta value in ArPose is unused.

Note
May only be provided by GPS in certain fix modes (e.g. Trimble AgGPS provides it in Omnistar and RTK modes, but not in GPS or DGPS modes).
Values may be inf or NaN (if GPS supplies "Inf" or "NAN") (from NMEA GPGST)
double ArGPS::getLongitude ( ) const
inline
Returns
longitude in decimal degrees. (from NMEA GPRMC)
double ArGPS::getLongitudeError ( ) const
inline

Standard deviation of latitude and longitude error, meters.

Theta value in ArPose is unused.

Note
May only be provided by GPS in certain fix modes (e.g. Trimble AgGPS provides it in Omnistar and RTK modes, but not in GPS or DGPS modes).
Values may be inf or NaN (if GPS supplies "Inf" or "NAN") (from NMEA GPGST)
double ArGPS::getSpeed ( ) const
inline
Returns
GPS' measured speed converted to meters per second, if provided (from NMEA GPRMC, if provided)
ArTime ArGPS::getTimeReceivedPosition ( ) const
inline
Returns
copy of an ArTime object set to the time that ArGPS read and received latitude and longitude data from the GPS. (from NMEA GPRMC)
bool ArGPS::haveCompassHeadingMag ( ) const
inline

Have a compass heading value relative to magnetic north.

Note
The GPS or compass device must be configured to send HCHDM messages to receive compass data. Only some GPS receivers support this.
bool ArGPS::haveCompassHeadingTrue ( ) const
inline

Have a compass heading value relative to true north (using GPS/compass device's configured declination).

Note
The GPS or compass device must be configured to send HCHDT messages to receive compass data. Only some GPS receivers support this.
bool ArGPS::haveGarminPositionError ( ) const
inline
Returns
whether GPS provided a distance error estimation (from a Garmin-specific message PGRME, most GPS receivers will not provide this)
bool ArGPS::haveGarminVerticalPositionError ( ) const
inline
Returns
whether GPS provided an altitude error estimation (from a Garmin-specific message PGRME, most GPS receivers will not provide this)
void ArGPS::parseGPRMC ( const ArNMEAParser::Message msg,
double &  latitudeResult,
double &  longitudeResult,
bool &  qualityFlagResult,
bool &  gotPosition,
ArTime timeGotPositionResult,
ArTime gpsTimestampResult,
bool &  gotSpeedResult,
double &  speedResult 
)
protected

Parse a GPRMC message (in msg) and place results in provided variables.

(Can be used by subclasses to store results of GPRMC differently than normal.)

Since
Aria 2.7.2
void ArGPS::setCompassHeadingMag ( double  val)
inline

Manually set compass value.

void ArGPS::setCompassHeadingMagWithLock ( double  val)
inline

Manually set compass value.

void ArGPS::setCompassHeadingTrue ( double  val)
inline

Manually set compass value.

void ArGPS::setCompassHeadingTrueWithLock ( double  val)
inline

Manually set compass value.