Aria  2.8.0
ArLaser Class Referenceabstract

Range device interface specialized for laser rangefinder sensors. More...

#include <ArLaser.h>

Inherits ArRangeDeviceThreaded.

Inherited by ArLaserFilter, ArLMS1XX, ArLMS2xx, ArS3Series, ArSimulatedLaser, ArSZSeries, ArUrg, and ArUrg_2_0.

Public Member Functions

void addConnectCB (ArFunctor *functor, int position=50)
 Adds a connect callback.
 
void addDisconnectNormallyCB (ArFunctor *functor, int position=50)
 Adds a callback for when disconnect is called while connected.
 
void addDisconnectOnErrorCB (ArFunctor *functor, int position=50)
 Adds a callback for when disconnection happens because of an error.
 
void addFailedConnectCB (ArFunctor *functor, int position=50)
 Adds a callback for when a connection to the robot is failed.
 
void addIgnoreReading (double ignoreReading)
 Adds a degree at which to ignore readings (within 1 degree of nearest integer)
 
bool addIgnoreReadings (const char *ignoreReadings)
 Adds a series of degree at which to ignore readings (within 1 degree of nearest integer)
 
void addReadingCB (ArFunctor *functor, int position=50)
 Adds a callback that is called whenever a laser reading is processed.
 
virtual void applyTransform (ArTransform trans, bool doCumulative=true)
 Applies a transform to the buffers. More...
 
 ArLaser (int laserNumber, const char *name, unsigned int absoluteMaxRange, bool locationDependent=false, bool appendLaserNumberToName=true)
 Constructor.
 
virtual bool asyncConnect (void)=0
 Connect to the laser without blocking.
 
virtual bool blockingConnect (void)=0
 Connect to the laser and block for the result.
 
bool canChooseAutoBaud (void)
 Gets if you can choose autoBaud for the laser. More...
 
bool canChooseDegrees (void)
 Gets if you can choose the number of degrees. More...
 
bool canChooseIncrement (void)
 Gets if you can choose an increment. More...
 
bool canChooseReflectorBits (void)
 Gets if you can choose reflectorBits for the laser. More...
 
bool canChooseStartingBaud (void)
 Gets if you can choose startingBaud for the laser. More...
 
bool canChooseUnits (void)
 Gets if you can choose units for the laser. More...
 
bool canSetDegrees (void)
 Sees if this class can set the degrees with doubles or not. More...
 
bool canSetIncrement (void)
 Gets if you can set an increment. More...
 
bool canSetPowerControlled (void)
 Gets if you can set powerControlled for the laser. More...
 
bool chooseAutoBaud (const char *reflectorBits)
 Sets the reflectorBits to one of the choices from getAutoBaudChoices. More...
 
bool chooseDegrees (const char *range)
 Sets the range to one of the choices from getDegreesChoices. More...
 
bool chooseIncrement (const char *increment)
 Sets the increment to one of the choices from getIncrementChoices. More...
 
bool chooseReflectorBits (const char *reflectorBits)
 Sets the reflectorBits to one of the choices from getReflectorBitsChoices. More...
 
bool chooseStartingBaud (const char *reflectorBits)
 Sets the reflectorBits to one of the choices from getStartingBaudChoices. More...
 
bool chooseUnits (const char *units)
 Sets the units to one of the choices from getUnitsChoices. More...
 
void clearIgnoreReadings (void)
 Clears the degrees we ignore readings at.
 
void copyReadingCount (const ArLaser *laser)
 Copies the reading count stuff from another laser (for the laser filter)
 
virtual bool disconnect (void)=0
 Disconnect from the laser.
 
unsigned int getAbsoluteMaxRange (void)
 Gets the absolute maximum range on the sensor.
 
const char * getAutoBaudChoice (void)
 Gets the reflectorBits that was chosen. More...
 
std::list< std::string > getAutoBaudChoices (void)
 Gets the list of reflectorBits choices. More...
 
const char * getAutoBaudChoicesString (void)
 Gets a string with the list of reflectorBits choices seperated by |s. More...
 
virtual double getConnectionTimeoutSeconds (void)
 Gets the number of seconds without a response until connection assumed lost. More...
 
double getCumulativeCleanDist (void)
 Cumulative readings that are this close to current beams are discarded.
 
int getCumulativeCleanInterval (void)
 Cumulative readings are cleaned every this number of milliseconds.
 
int getCumulativeCleanOffset (void)
 Gets the offset for cumulative cleaning.
 
const char * getDefaultPortType (void)
 Gets the default port type for the laser.
 
int getDefaultTcpPort (void)
 Gets the default TCP port for the laser.
 
const char * getDegreesChoice (void)
 Gets the range that was chosen. More...
 
double getDegreesChoiceDouble (void)
 Gets the range that was chosen as a double. More...
 
std::list< std::string > getDegreesChoices (void)
 Gets the list of range choices. More...
 
std::map< std::string, double > getDegreesChoicesMap (void)
 Gets the map of degrees choices to what they mean. More...
 
const char * getDegreesChoicesString (void)
 Gets a string with the list of degrees choices seperated by |s. More...
 
virtual ArDeviceConnectiongetDeviceConnection (void)
 Gets the device connection.
 
double getEndDegrees (void)
 Gets the end angle. More...
 
double getEndDegreesMax (void)
 Gets the maximum value for the end angle. More...
 
double getEndDegreesMin (void)
 Gets the minimum value for the end angle. More...
 
bool getFlipped (void)
 Gets if the laser is flipped or not.
 
const std::set< int > * getIgnoreReadings (void) const
 Gets the list of readings that we ignore.
 
double getIncrement (void)
 Gets the increment. More...
 
const char * getIncrementChoice (void)
 Gets the increment that was chosen. More...
 
double getIncrementChoiceDouble (void)
 Gets the increment that was chosen as a double. More...
 
std::list< std::string > getIncrementChoices (void)
 Gets the list of increment choices. More...
 
std::map< std::string, double > getIncrementChoicesMap (void)
 Gets the map of increment choices to what they mean. More...
 
const char * getIncrementChoicesString (void)
 Gets a string with the list of increment choices seperated by |s. More...
 
double getIncrementMax (void)
 Gets the increment maximum. More...
 
double getIncrementMin (void)
 Gets the increment minimum. More...
 
ArLog::LogLevel getInfoLogLevel (void)
 Gets the log level that informational things are logged at.
 
int getLaserNumber (void)
 Gets the number of the laser this is.
 
ArTime getLastReadingTime (void)
 Gets the time data was last receieved.
 
bool getPowerControlled (void)
 Gets if the power is controlled. More...
 
int getReadingCount (void)
 Gets the number of laser readings received in the last second.
 
const char * getReflectorBitsChoice (void)
 Gets the reflectorBits that was chosen. More...
 
std::list< std::string > getReflectorBitsChoices (void)
 Gets the list of reflectorBits choices. More...
 
const char * getReflectorBitsChoicesString (void)
 Gets a string with the list of reflectorBits choices seperated by |s. More...
 
ArPose getSensorPosition (void)
 Gets the position of the sensor on the robot.
 
double getSensorPositionTh (void)
 Gets the heading of the sensor on the robot.
 
double getSensorPositionX (void)
 Gets the X position of the sensor on the robot.
 
double getSensorPositionY (void)
 Gets the Y position of the sensor on the robot.
 
double getSensorPositionZ (void)
 Gets the Z position of the sensor on the robot (0 is unknown)
 
double getStartDegrees (void)
 Gets the start angle. More...
 
double getStartDegreesMax (void)
 Gets the maximum value for the start angle. More...
 
double getStartDegreesMin (void)
 Gets the minimum value for the start angle. More...
 
const char * getStartingBaudChoice (void)
 Gets the reflectorBits that was chosen. More...
 
std::list< std::string > getStartingBaudChoices (void)
 Gets the list of reflectorBits choices. More...
 
const char * getStartingBaudChoicesString (void)
 Gets a string with the list of reflectorBits choices seperated by |s. More...
 
const char * getUnitsChoice (void)
 Gets the units that was chosen. More...
 
std::list< std::string > getUnitsChoices (void)
 Gets the list of units choices. More...
 
const char * getUnitsChoicesString (void)
 Gets a string with the list of units choices seperated by |s. More...
 
bool hasSensorPosition (void)
 Gets if the sensor pose has been set.
 
virtual bool isConnected (void)=0
 See if the laser is connected.
 
virtual bool isTryingToConnect (void)=0
 See if the laser is trying to connect.
 
virtual bool laserCheckParams (void)
 Call the laser can implement to make sure the parameters are all okay or set the maximum range (based on the params) More...
 
void remConnectCB (ArFunctor *functor)
 Adds a disconnect callback.
 
void remDisconnectNormallyCB (ArFunctor *functor)
 Removes a callback for when disconnect is called while connected.
 
void remDisconnectOnErrorCB (ArFunctor *functor)
 Removes a callback for when disconnection happens because of an error.
 
void remFailedConnectCB (ArFunctor *functor)
 Removes a callback for when a connection to the robot is failed.
 
void remReadingCB (ArFunctor *functor)
 Removes a callback that is called whenever a laser reading is processed.
 
void resetLastCumulativeCleanTime (void)
 Resets when the cumulative cleaning happened (so offset can help)
 
virtual void setConnectionTimeoutSeconds (double seconds)
 Sets the numter of seconds without a response until connection assumed lost. More...
 
virtual void setCumulativeBufferSize (size_t size)
 override the default to keep track of its been set or not
 
void setCumulativeCleanDist (double dist)
 Cumulative readings that are this close to current beams are discarded.
 
void setCumulativeCleanInterval (int milliSeconds)
 Cumulative readings are cleaned every this number of milliseconds.
 
void setCumulativeCleanOffset (int milliSeconds)
 Offset for cumulative cleaning.
 
virtual void setDeviceConnection (ArDeviceConnection *conn)
 Sets the device connection.
 
bool setEndDegrees (double endDegrees)
 Sets the end angle, it must be between getEndDegreesMin and getEndDegreesMax. More...
 
bool setFlipped (bool flipped)
 Sets if the laser is flipped or not.
 
bool setIncrement (double increment)
 Sets the increment. More...
 
void setInfoLogLevel (ArLog::LogLevel infoLogLevel)
 Sets the log level that informational things are logged at.
 
virtual void setMaxRange (unsigned int maxRange)
 override the default to bound the maxrange by the absolute max range
 
bool setPowerControlled (bool powerControlled)
 Sets if the power is controlled. More...
 
void setSensorPosition (double x, double y, double th, double z=0)
 Sets the position of the sensor on the robot.
 
void setSensorPosition (ArPose pose, double z=0)
 Sets the position of the sensor on the robot.
 
bool setStartDegrees (double startDegrees)
 Sets the start angle, it must be between getStartDegreesMin and getStartDegreesMax. More...
 
virtual ~ArLaser ()
 Destructor.
 
- Public Member Functions inherited from ArRangeDeviceThreaded
 ArRangeDeviceThreaded (size_t currentBufferSize, size_t cumulativeBufferSize, const char *name, unsigned int maxRange, int maxSecondsTokeepCurrent=0, int maxSecondsToKeepCumulative=0, double maxDistToKeepCumulative=0, bool locationDependent=false)
 Constructor.
 
virtual bool getRunning (void)
 Get the running status of the thread.
 
virtual bool getRunningWithLock (void)
 Get the running status of the thread, locking around the variable.
 
virtual int lockDevice (void)
 
virtual void run (void)
 Run in this thread.
 
virtual void runAsync (void)
 Run in its own thread.
 
virtual void * runThread (void *arg)=0
 The functor you need to implement that will be the one executed by the thread.
 
virtual void stopRunning (void)
 Stop the thread.
 
virtual int tryLockDevice (void)
 
virtual int unlockDevice (void)
 
virtual ~ArRangeDeviceThreaded ()
 Destructor.
 
- Public Member Functions inherited from ArRangeDevice
virtual void addReading (double x, double y, bool *wasAdded=NULL)
 Adds a reading to the buffer.
 
 ArRangeDevice (size_t currentBufferSize, size_t cumulativeBufferSize, const char *name, unsigned int maxRange, int maxSecondsToKeepCurrent=0, int maxSecondsToKeepCumulative=0, double maxDistToKeepCumulative=0, bool locationDependent=false)
 Constructor. More...
 
virtual void clearCumulativeOlderThan (int milliSeconds)
 Clears all the cumulative readings older than this number of milliseconds.
 
virtual void clearCumulativeOlderThanSeconds (int seconds)
 Clears all the cumulative readings older than this number of seconds.
 
virtual void clearCumulativeReadings (void)
 Clears all the cumulative readings.
 
virtual void clearCurrentReadings (void)
 Clears all the current readings.
 
virtual double cumulativeReadingBox (double x1, double y1, double x2, double y2, ArPose *readingPos=NULL) const
 Gets the closest current reading from the given box region. More...
 
virtual double cumulativeReadingPolar (double startAngle, double endAngle, double *angle=NULL) const
 Gets the closest cumulative reading in the given polar region. More...
 
virtual double currentReadingBox (double x1, double y1, double x2, double y2, ArPose *readingPos=NULL) const
 Gets the closest current reading from the given box region. More...
 
virtual double currentReadingPolar (double startAngle, double endAngle, double *angle=NULL) const
 Gets the closest current reading in the given polar region. More...
 
void filterCallback (void)
 Internal function to filter the readings based on age and distance.
 
virtual const std::list< ArSensorReading * > * getAdjustedRawReadings (void) const
 Gets the raw unfiltered readings from the device (but pose takens are corrected) More...
 
virtual std::vector< ArSensorReading > * getAdjustedRawReadingsAsVector (void)
 Gets the raw adjusted readings from the device into a vector. More...
 
virtual const std::list< ArPoseWithTime * > * getCumulativeBuffer (void) const
 Gets the current buffer of readings. More...
 
virtual std::list< ArPoseWithTime * > * getCumulativeBuffer (void)
 Gets the current buffer of readings.
 
virtual std::vector< ArPoseWithTime > * getCumulativeBufferAsVector (void)
 Gets the cumulative buffer of readings as a vector. More...
 
virtual size_t getCumulativeBufferSize (void) const
 Sets the maximum size of the buffer for cumulative readings.
 
virtual ArDrawingDatagetCumulativeDrawingData (void)
 Gets data used for visualizing the cumulative buffer (see ArNetworking)
 
virtual const ArRangeBuffergetCumulativeRangeBuffer (void) const
 Gets the cumulative range buffer. More...
 
virtual ArRangeBuffergetCumulativeRangeBuffer (void)
 Gets the cumulative range buffer.
 
virtual const std::list< ArPoseWithTime * > * getCurrentBuffer (void) const
 Gets the current buffer of readings. More...
 
virtual std::list< ArPoseWithTime * > * getCurrentBuffer (void)
 Gets the current buffer of readings.
 
virtual std::vector< ArPoseWithTime > * getCurrentBufferAsVector (void)
 Gets the current buffer of readings as a vector. More...
 
virtual size_t getCurrentBufferSize (void) const
 Gets the maximum size of the buffer for current readings.
 
virtual ArDrawingDatagetCurrentDrawingData (void)
 Gets data used for visualizing the current buffer (see ArNetworking)
 
virtual const ArRangeBuffergetCurrentRangeBuffer (void) const
 Gets the current range buffer. More...
 
virtual ArRangeBuffergetCurrentRangeBuffer (void)
 Gets the current range buffer.
 
double getMaxDistToKeepCumulative (void)
 sets the maximum distance cumulative readings can be from current pose More...
 
double getMaxInsertDistCumulative (void)
 Gets the maximum distance a cumulative reading can be from the robot and still be inserted. More...
 
virtual unsigned int getMaxRange (void) const
 Gets the maximum range for this device.
 
int getMaxSecondsToKeepCumulative (void)
 gets the maximum seconds to keep current readings around More...
 
int getMaxSecondsToKeepCurrent (void)
 gets the maximum seconds to keep current readings around More...
 
double getMinDistBetweenCumulative (void)
 Gets the minimum distance between cumulative readings. More...
 
double getMinDistBetweenCurrent (void)
 Gets the minimum distance between current readings. More...
 
virtual const char * getName (void) const
 Gets the name of the device.
 
virtual const std::list< ArSensorReading * > * getRawReadings (void) const
 Gets the raw unfiltered readings from the device. More...
 
virtual std::vector< ArSensorReading > * getRawReadingsAsVector (void)
 Gets the raw unfiltered readings from the device into a vector. More...
 
virtual ArRobotgetRobot (void)
 Gets the robot this device is attached to.
 
bool isLocationDependent (void)
 Gets if this device is location dependent or not.
 
virtual void setCumulativeDrawingData (ArDrawingData *data, bool takeOwnershipOfData)
 Sets data for visualizing the cumulative buffer (and if we own it)
 
virtual void setCurrentBufferSize (size_t size)
 Sets the maximum size of the buffer for current readings. More...
 
virtual void setCurrentDrawingData (ArDrawingData *data, bool takeOwnershipOfData)
 Sets data for visualizing the current buffer (and if we own it)
 
void setMaxDistToKeepCumulative (double maxDistToKeepCumulative)
 sets the maximum distance cumulative readings can be from current pose More...
 
void setMaxInsertDistCumulative (double maxInsertDistCumulative)
 Sets the maximum distance a cumulative reading can be from the robot and still be inserted. More...
 
void setMaxSecondsToKeepCumulative (int maxSecondsToKeepCumulative)
 gets the maximum seconds to keep cumulative readings around More...
 
void setMaxSecondsToKeepCurrent (int maxSecondsToKeepCurrent)
 Sets the maximum seconds to keep current readings around. More...
 
void setMinDistBetweenCumulative (double minDistBetweenCumulative)
 Sets the minimum distance between cumulative readings. More...
 
void setMinDistBetweenCurrent (double minDistBetweenCurrent)
 Sets the minimum distance between current readings. More...
 
virtual void setRobot (ArRobot *robot)
 Sets the robot this device is attached to.
 
virtual ~ArRangeDevice ()
 Destructor.
 

Static Public Member Functions

static void useSimpleNamingForAllLasers (void)
 Makes it so we'll apply simple naming to all the lasers.
 

Protected Member Functions

void internalBuildChoices (std::map< std::string, double > *choices, std::string *str, std::list< std::string > *choicesList)
 
void internalBuildChoicesString (std::list< std::string > *choices, std::string *str)
 
bool internalCheckChoice (const char *check, const char *choice, std::list< std::string > *choices, const char *choicesStr)
 
bool internalCheckChoice (const char *check, const char *choice, std::map< std::string, double > *choices, const char *choicesStr, double *choiceDouble)
 
virtual void internalGotReading (void)
 
void internalProcessReading (double x, double y, unsigned int range, bool clean, bool onlyClean)
 
void laserAllowAutoBaudChoices (const char *defaultAutoBaudChoice, std::list< std::string > autoBaudChoices)
 Allows setting the auto baud speed to one of a number of choices. More...
 
void laserAllowDegreesChoices (const char *defaultDegreesChoice, std::map< std::string, double > degreesChoices)
 Allows setting the degrees the laser uses to one of a number of choices. More...
 
void laserAllowIncrementChoices (const char *defaultIncrementChoice, std::map< std::string, double > incrementChoices)
 Allows setting the increment to one of a number of choices. More...
 
void laserAllowReflectorBitsChoices (const char *defaultReflectorBitsChoice, std::list< std::string > reflectorBitsChoices)
 Allows setting the reflector bits the laser will use to one of a number of choices. More...
 
void laserAllowSetDegrees (double defaultStartDegrees, double startDegreesMin, double startDegreesMax, double defaultEndDegrees, double endDegreesMin, double endDegreesMax)
 Allows setting the degrees the laser uses to anything in a range. More...
 
void laserAllowSetIncrement (double defaultIncrement, double incrementMin, double incrementMax)
 Allows setting the increment the laser uses to anything in a range. More...
 
void laserAllowSetPowerControlled (bool defaultPowerControlled)
 Allows setting if the power is controlled or not. More...
 
void laserAllowStartingBaudChoices (const char *defaultStartingBaudChoice, std::list< std::string > startingBaudChoices)
 Allows setting the starting baud to one of a number of choices. More...
 
void laserAllowUnitsChoices (const char *defaultUnitsChoice, std::list< std::string > unitsChoices)
 Allows setting the units the laser will use to one of a number of choices. More...
 
bool laserCheckLostConnection (void)
 Returns if the laser has lost connection so that the subclass can do something appropriate. More...
 
virtual void laserConnect (void)
 Function for a laser to call when it connects.
 
virtual void laserDisconnectNormally (void)
 Function for a laser to call when it disconnects normally.
 
virtual void laserDisconnectOnError (void)
 Function for a laser to call when it loses connection.
 
virtual void laserFailedConnect (void)
 Function for a laser to call when it fails to connects.
 
void laserProcessReadings (void)
 Converts the raw readings into the buffers (needs to be called by subclasses) More...
 
bool laserPullUnsetParamsFromRobot (void)
 Pulls the unset params from the robot parameter file.
 
void laserSetAbsoluteMaxRange (unsigned int absoluteMaxRange)
 Sets the absolute maximum range on the sensor.
 
void laserSetDefaultPortType (const char *defaultPortType)
 Sets the laser's default connection port type.
 
void laserSetDefaultTcpPort (int defaultLaserTcpPort)
 Sets the laser's default TCP port.
 
virtual void laserSetName (const char *name)
 Called when the lasers name is set. More...
 
- Protected Member Functions inherited from ArRangeDevice
void adjustRawReadings (bool interlaced)
 This call should be called by the range device every robot cycle before the range device makes new readings (and even if it isn't adding any that cycle)... More...
 

Protected Attributes

unsigned int myAbsoluteMaxRange
 
std::string myAutoBaudChoice
 
std::list< std::string > myAutoBaudChoices
 
bool myAutoBaudChoiceSet
 
std::string myAutoBaudChoicesString
 
bool myCanChooseAutoBaud
 
bool myCanChooseDegrees
 
bool myCanChooseIncrement
 
bool myCanChooseReflectorBits
 
bool myCanChooseStartingBaud
 
bool myCanChooseUnits
 
bool myCanSetDegrees
 
bool myCanSetIncrement
 
bool myCanSetPowerControlled
 
ArDeviceConnectionmyConn
 
ArCallbackList myConnectCBList
 
ArMutex myConnMutex
 
bool myCumulativeBufferSizeSet
 
double myCumulativeCleanDist
 
double myCumulativeCleanDistSquared
 
int myCumulativeCleanInterval
 
int myCumulativeCleanOffset
 
ArTime myCumulativeLastClean
 
ArCallbackList myDataCBList
 
std::string myDefaultPortType
 
int myDefaultTcpPort
 
std::string myDegreesChoice
 
double myDegreesChoiceDouble
 
std::map< std::string, double > myDegreesChoices
 
bool myDegreesChoiceSet
 
std::list< std::string > myDegreesChoicesList
 
std::string myDegreesChoicesString
 
ArCallbackList myDisconnectNormallyCBList
 
ArCallbackList myDisconnectOnErrorCBList
 
double myEndDegrees
 
double myEndDegreesMax
 
double myEndDegreesMin
 
bool myEndDegreesSet
 
ArCallbackList myFailedConnectCBList
 
bool myFlipped
 
bool myFlippedSet
 
bool myHaveSensorPose
 
std::set< int > myIgnoreReadings
 
double myIncrement
 
std::string myIncrementChoice
 
double myIncrementChoiceDouble
 
std::map< std::string, double > myIncrementChoices
 
bool myIncrementChoiceSet
 
std::list< std::string > myIncrementChoicesList
 
std::string myIncrementChoicesString
 
double myIncrementMax
 
double myIncrementMin
 
bool myIncrementSet
 
ArLog::LogLevel myInfoLogLevel
 
int myLaserNumber
 
ArTime myLastReading
 
bool myMaxRangeSet
 
bool myPowerControlled
 
bool myPowerControlledSet
 
int myReadingCount
 
int myReadingCurrentCount
 
std::string myReflectorBitsChoice
 
std::list< std::string > myReflectorBitsChoices
 
bool myReflectorBitsChoiceSet
 
std::string myReflectorBitsChoicesString
 
bool myRobotRunningAndConnected
 
ArPose mySensorPose
 
double mySensorZ
 
double myStartDegrees
 
double myStartDegreesMax
 
double myStartDegreesMin
 
bool myStartDegreesSet
 
std::string myStartingBaudChoice
 
std::list< std::string > myStartingBaudChoices
 
bool myStartingBaudChoiceSet
 
std::string myStartingBaudChoicesString
 
time_t myTimeLastReading
 
double myTimeoutSeconds
 
std::string myUnitsChoice
 
std::list< std::string > myUnitsChoices
 
bool myUnitsChoiceSet
 
std::string myUnitsChoicesString
 
- Protected Attributes inherited from ArRangeDeviceThreaded
ArRetFunctor1C< void *, ArRangeDeviceThreaded, void * > myRunThreadCB
 
ArFunctorASyncTask myTask
 
- Protected Attributes inherited from ArRangeDevice
std::list< ArSensorReading * > * myAdjustedRawReadings
 
std::vector< ArSensorReadingmyAdjustedRawReadingsVector
 
ArRangeBuffer myCumulativeBuffer
 
ArDrawingDatamyCumulativeDrawingData
 
ArRangeBuffer myCurrentBuffer
 
ArDrawingDatamyCurrentDrawingData
 
ArMutex myDeviceMutex
 
ArFunctorC< ArRangeDevicemyFilterCB
 
bool myIsLocationDependent
 
double myMaxDistToKeepCumulative
 
double myMaxDistToKeepCumulativeSquared
 
double myMaxInsertDistCumulative
 
ArPose myMaxInsertDistCumulativePose
 
double myMaxInsertDistCumulativeSquared
 
unsigned int myMaxRange
 
int myMaxSecondsToKeepCumulative
 
int myMaxSecondsToKeepCurrent
 
double myMinDistBetweenCumulative
 
double myMinDistBetweenCumulativeSquared
 
double myMinDistBetweenCurrent
 
double myMinDistBetweenCurrentSquared
 
std::string myName
 
bool myOwnCumulativeDrawingData
 
bool myOwnCurrentDrawingData
 
std::list< ArSensorReading * > * myRawReadings
 
std::vector< ArSensorReadingmyRawReadingsVector
 
ArRobotmyRobot
 

Static Protected Attributes

static bool ourUseSimpleNaming = false
 

Detailed Description

Range device interface specialized for laser rangefinder sensors.

This class is a subclass of ArRangeDeviceThreaded meant for any planar scanning lasers, like the SICK lasers, Hokoyo URG series lasers, etc. Unlike other base classes this contains the superset of everything that may need to be configured on any of the sensors, even though some subclasses may only provide some of those parameters and features. (This allows the configuration interfaces and parameter files to work for any laser type.)

Normally, a program does not define or create any ArLaser objects directly. Instead, objects (device-specific subclasses of ArLaser) are created by ArLaserConnector::connectLasers() based on the robot parameter file and command line arguments, and the resulting ArLaser objects are stored in the ArRobot object Use ArRobot::getLaserMap() or ArRobot::findLaser() to access the ArLaser objects after calling ArLaserConnector::connectLasers().

The canSetDegrees(), canChooseRange(), canSetIncrement(), canChooseIncrement(), canChooseUnits(), canChooseReflectorBits(), canSetPowerControlled(), canChooseStartBaud(), and canChooseAutoBaud() and other similar functions are used by ArLaserConnector to test if a parameter is relevant to a specific laser type.

Creating New ArLaser Subclasses
If you want to create your own new class to implement a sensor not in ARIA, create a subclass of this class. ArUrg is the best current example of this. Call the laserAllow* functions in its constructor depending on what features that laser sensor has (use the laserAllowSet* functions if it is possible to set any value in a range, or use the laserAllow*Choices functions if it is only possible to set specific values). You may also want to use the override the laserSetName call so that your own mutexes will get named appropriately. You can use laserSetDefaultTcpPort to set the default TCP port (which you should do if the laser normally is connected to over TCP). You can use laserSetDefaultPortType to the type of port normally used (so that if a port is passed in we can make a reasonable guess as to what type, so that people don't always have to pass in a type). Before you connect you should call laserPullUnsetParams to fill in the parameters that weren't set explicitly with the default ones in the .p files. If the maximum range of the laser changes depending on settings (like on the LMS2xx) you should call laserSetAbsoluteMaxRange (after you call laserPullUnsetParamsFromRobot). Implement the blockingConnect, asyncConnect, disconnect, isConnected, and isTryingToConnect calls... while calling laserConnect, laserFailedConnect, laserDisconnectNormally, and laserDisconnectOnError calls to let the laser base class call the appropriate callbacks. You should use the laserCheckLostConnection in your runThread to see if the laser has lost connection (see its documentation for details). Then after you get your readings call laserProcessReadings to fill them from the raw buffer into the current and cumulative buffer (and call the reading callbacks). The internal* calls are all internal to the base class and shouldn't have to be used by inheriting classes. After you have created a new laser type you can add it to Aria by using the Aria::laserAddCreator call and then it will work like any of the built in laser types (see the documentation for that function for what the creator needs to do, and an example is ArLaserCreatorHelper in the ariaUtil.h/cpp files). Similiarly if you need a new connection type (ie not serial or tcp) you implement them and then use Aria::deviceConnectionAddCreator call to add new types so they too will then be treated the same as the built in Aria ones (ArDeviceConnectionCreatorHelper in ariaUtil.h/cpp file is the example for that one).
Since
2.7.0
Examples:
laserConnect.cpp, and lasers.cpp.

Member Function Documentation

◆ applyTransform()

void ArLaser::applyTransform ( ArTransform  trans,
bool  doCumulative = true 
)
virtual

Applies a transform to the buffers.

this is mostly useful for translating to/from local/global coordinates, but may have other uses. This is different from the class because it also transforms the raw readings.

Parameters
transthe transform to apply to the data
doCumulativewhether to transform the cumulative buffer or not

Reimplemented from ArRangeDevice.

◆ canChooseAutoBaud()

bool ArLaser::canChooseAutoBaud ( void  )
inline

Gets if you can choose autoBaud for the laser.

If so, call chooseAutoBaud with one of the choices in getAutoBaudChoices, and see what the choice was with getAutoBaudChoice.

◆ canChooseDegrees()

bool ArLaser::canChooseDegrees ( void  )
inline

Gets if you can choose the number of degrees.

If so, you can call chooseDegrees with one of the strings from getDegreesChoices, and get the degrees chosen as a string with getDegreesChoice or get the degrees chosen as a double with getDegreesChoiceDouble.

◆ canChooseIncrement()

bool ArLaser::canChooseIncrement ( void  )
inline

Gets if you can choose an increment.

If so, call chooseIncrement with one of the choices in getIncrementChoices, and get the choice as a string with getIncrementChoice or the choice as a string with getIncrementChoiceDouble.

◆ canChooseReflectorBits()

bool ArLaser::canChooseReflectorBits ( void  )
inline

Gets if you can choose reflectorBits for the laser.

If so, call chooseReflectorBits with one of the choices in getReflectorBitsChoices, and see what the choice was with getReflectorBitsChoice.

◆ canChooseStartingBaud()

bool ArLaser::canChooseStartingBaud ( void  )
inline

Gets if you can choose startingBaud for the laser.

If so, call chooseStartingBaud with one of the choices in getStartingBaudChoices, and see what the choice was with getStartingBaudChoice.

◆ canChooseUnits()

bool ArLaser::canChooseUnits ( void  )
inline

Gets if you can choose units for the laser.

If so, call chooseUnits with one of the choices in getUnitsChoices, and see what the choice was with getUnitsChoice.

◆ canSetDegrees()

bool ArLaser::canSetDegrees ( void  )
inline

Sees if this class can set the degrees with doubles or not.

Gets if this class can set the start and end degrees with doubles.

If so, you can use getStartDegreesMin and getStartDegreesMax to see the valid values that you can use with setStartDegrees (and see what was set with getStartDegrees), and getEndDegreesMin and getEndDegreesMax to see the valid values that you can use with setEndDegrees (and see what was set with getEndDegrees).

◆ canSetIncrement()

bool ArLaser::canSetIncrement ( void  )
inline

Gets if you can set an increment.

◆ canSetPowerControlled()

bool ArLaser::canSetPowerControlled ( void  )
inline

Gets if you can set powerControlled for the laser.

If so, call setPowerControlled to set if the power is being controlled or not, and see what the setting is with getPowerControlled.

◆ chooseAutoBaud()

bool ArLaser::chooseAutoBaud ( const char *  reflectorBits)

Sets the reflectorBits to one of the choices from getAutoBaudChoices.

See also
canChooseAutoBaud

◆ chooseDegrees()

bool ArLaser::chooseDegrees ( const char *  range)

Sets the range to one of the choices from getDegreesChoices.

See also
canChooseDegrees

◆ chooseIncrement()

bool ArLaser::chooseIncrement ( const char *  increment)

Sets the increment to one of the choices from getIncrementChoices.

See also
canChooseIncrement

◆ chooseReflectorBits()

bool ArLaser::chooseReflectorBits ( const char *  reflectorBits)

Sets the reflectorBits to one of the choices from getReflectorBitsChoices.

See also
canChooseReflectorBits

◆ chooseStartingBaud()

bool ArLaser::chooseStartingBaud ( const char *  reflectorBits)

Sets the reflectorBits to one of the choices from getStartingBaudChoices.

See also
canChooseStartingBaud

◆ chooseUnits()

bool ArLaser::chooseUnits ( const char *  units)

Sets the units to one of the choices from getUnitsChoices.

See also
canChooseUnits

◆ getAutoBaudChoice()

const char* ArLaser::getAutoBaudChoice ( void  )
inline

Gets the reflectorBits that was chosen.

See also
canChooseAutoBaud

◆ getAutoBaudChoices()

std::list<std::string> ArLaser::getAutoBaudChoices ( void  )
inline

Gets the list of reflectorBits choices.

See also
canChooseAutoBaud

◆ getAutoBaudChoicesString()

const char* ArLaser::getAutoBaudChoicesString ( void  )
inline

Gets a string with the list of reflectorBits choices seperated by |s.

See also
canChooseAutoBaud

◆ getConnectionTimeoutSeconds()

double ArLaser::getConnectionTimeoutSeconds ( void  )
virtual

Gets the number of seconds without a response until connection assumed lost.

Gets the time (miliseconds) to go without response from the laser until it is assumed that the connection with the laser has been broken and the disconnect on error events will happen.

If 0, then the timeout is disabled.

If there is no robot then there is a straightforward check of last reading time against this value. If there is a robot then it will not start the check until the laser is running and connected.

◆ getDegreesChoice()

const char* ArLaser::getDegreesChoice ( void  )
inline

Gets the range that was chosen.

See also
canChooseDegrees

◆ getDegreesChoiceDouble()

double ArLaser::getDegreesChoiceDouble ( void  )
inline

Gets the range that was chosen as a double.

See also
canChooseDegrees

◆ getDegreesChoices()

std::list<std::string> ArLaser::getDegreesChoices ( void  )
inline

Gets the list of range choices.

See also
canChooseDegrees

◆ getDegreesChoicesMap()

std::map<std::string, double> ArLaser::getDegreesChoicesMap ( void  )
inline

Gets the map of degrees choices to what they mean.

This is mostly for the simulated laser

See also
canChooseDegrees

◆ getDegreesChoicesString()

const char* ArLaser::getDegreesChoicesString ( void  )
inline

Gets a string with the list of degrees choices seperated by |s.

See also
canChooseDegrees

◆ getEndDegrees()

double ArLaser::getEndDegrees ( void  )
inline

Gets the end angle.

See also
canSetDegrees
Examples:
laserConnect.cpp, and lasers.cpp.

◆ getEndDegreesMax()

double ArLaser::getEndDegreesMax ( void  )
inline

Gets the maximum value for the end angle.

See also
canSetDegrees

◆ getEndDegreesMin()

double ArLaser::getEndDegreesMin ( void  )
inline

Gets the minimum value for the end angle.

See also
canSetDegrees

◆ getIncrement()

double ArLaser::getIncrement ( void  )
inline

Gets the increment.

See also
canSetIncrement

◆ getIncrementChoice()

const char* ArLaser::getIncrementChoice ( void  )
inline

Gets the increment that was chosen.

See also
canChooseIncrement

◆ getIncrementChoiceDouble()

double ArLaser::getIncrementChoiceDouble ( void  )
inline

Gets the increment that was chosen as a double.

See also
canChooseIncrement

◆ getIncrementChoices()

std::list<std::string> ArLaser::getIncrementChoices ( void  )
inline

Gets the list of increment choices.

See also
canChooseIncrement

◆ getIncrementChoicesMap()

std::map<std::string, double> ArLaser::getIncrementChoicesMap ( void  )
inline

Gets the map of increment choices to what they mean.

This is mostly for the simulated laser

See also
canChooseIncrement

◆ getIncrementChoicesString()

const char* ArLaser::getIncrementChoicesString ( void  )
inline

Gets a string with the list of increment choices seperated by |s.

See also
canChooseIncrement

◆ getIncrementMax()

double ArLaser::getIncrementMax ( void  )
inline

Gets the increment maximum.

See also
canSetIncrement

◆ getIncrementMin()

double ArLaser::getIncrementMin ( void  )
inline

Gets the increment minimum.

See also
canSetIncrement

◆ getPowerControlled()

bool ArLaser::getPowerControlled ( void  )
inline

Gets if the power is controlled.

See also
canChoosePowerControlled

◆ getReflectorBitsChoice()

const char* ArLaser::getReflectorBitsChoice ( void  )
inline

Gets the reflectorBits that was chosen.

See also
canChooseReflectorBits

◆ getReflectorBitsChoices()

std::list<std::string> ArLaser::getReflectorBitsChoices ( void  )
inline

Gets the list of reflectorBits choices.

See also
canChooseReflectorBits

◆ getReflectorBitsChoicesString()

const char* ArLaser::getReflectorBitsChoicesString ( void  )
inline

Gets a string with the list of reflectorBits choices seperated by |s.

See also
canChooseReflectorBits

◆ getStartDegrees()

double ArLaser::getStartDegrees ( void  )
inline

Gets the start angle.

See also
canSetDegrees
Examples:
laserConnect.cpp, and lasers.cpp.

◆ getStartDegreesMax()

double ArLaser::getStartDegreesMax ( void  )
inline

Gets the maximum value for the start angle.

See also
canSetDegrees

◆ getStartDegreesMin()

double ArLaser::getStartDegreesMin ( void  )
inline

Gets the minimum value for the start angle.

See also
canSetDegrees

◆ getStartingBaudChoice()

const char* ArLaser::getStartingBaudChoice ( void  )
inline

Gets the reflectorBits that was chosen.

See also
canChooseStartingBaud

◆ getStartingBaudChoices()

std::list<std::string> ArLaser::getStartingBaudChoices ( void  )
inline

Gets the list of reflectorBits choices.

See also
canChooseStartingBaud

◆ getStartingBaudChoicesString()

const char* ArLaser::getStartingBaudChoicesString ( void  )
inline

Gets a string with the list of reflectorBits choices seperated by |s.

See also
canChooseStartingBaud

◆ getUnitsChoice()

const char* ArLaser::getUnitsChoice ( void  )
inline

Gets the units that was chosen.

See also
canChooseUnits

◆ getUnitsChoices()

std::list<std::string> ArLaser::getUnitsChoices ( void  )
inline

Gets the list of units choices.

See also
canChooseUnits

◆ getUnitsChoicesString()

const char* ArLaser::getUnitsChoicesString ( void  )
inline

Gets a string with the list of units choices seperated by |s.

See also
canChooseUnits

◆ laserAllowAutoBaudChoices()

void ArLaser::laserAllowAutoBaudChoices ( const char *  defaultAutoBaudChoice,
std::list< std::string >  autoBaudChoices 
)
protected

Allows setting the auto baud speed to one of a number of choices.

Parameters
defaultAutoBaudChoiceDefault auto baud choice. This should probably be the maximum reasonable reliable robust rate that the laser supports. The laser should autobaud up to this choice after it connects.
autoBaudChoicesThe available choices for auto baud

◆ laserAllowDegreesChoices()

void ArLaser::laserAllowDegreesChoices ( const char *  defaultDegreesChoice,
std::map< std::string, double >  degreesChoices 
)
protected

Allows setting the degrees the laser uses to one of a number of choices.

Allows the choice of the laser degrees from one of a number of choices, only one of this and laserAllowSetDegrees should be used.

Parameters
defaultDegreesChoiceThe default degrees, this should be the largest value.
degreesChoicesthis is a mapping of std::strings to doubles, the strings should be the actual available choices, and the doubles should be the numerical representation... this is so the simulated laser can behave more easily like the real lasers... and because the original sick driver used words typed out (to make problems more obvious).

◆ laserAllowIncrementChoices()

void ArLaser::laserAllowIncrementChoices ( const char *  defaultIncrementChoice,
std::map< std::string, double >  incrementChoices 
)
protected

Allows setting the increment to one of a number of choices.

Allows the choice of increment from a limited set of values, only one of this and laserAllowSetIncrement should be used.

Parameters
defaultIncrementChoiceThe default increment, this should be a reasonable value.
incrementChoicesthis is a mapping of std::strings to doubles, the strings should be the actual available choices, and the doubles should be the numerical representation... this is so the simulated laser can behave more easily like the real lasers... and because the original sick driver used words typed out (to make problems more obvious).

◆ laserAllowReflectorBitsChoices()

void ArLaser::laserAllowReflectorBitsChoices ( const char *  defaultReflectorBitsChoice,
std::list< std::string >  reflectorBitsChoices 
)
protected

Allows setting the reflector bits the laser will use to one of a number of choices.

Parameters
defaultReflectorBitsChoiceThe default choice for reflector bits, should be a reasonable value.
reflectorBitsChoicesThe possible choices for reflector bits

◆ laserAllowSetDegrees()

void ArLaser::laserAllowSetDegrees ( double  defaultStartDegrees,
double  startDegreesMin,
double  startDegreesMax,
double  defaultEndDegrees,
double  endDegreesMin,
double  endDegreesMax 
)
protected

Allows setting the degrees the laser uses to anything in a range.

This allows the setting of the degrees the laser will use from a range for both starting and ending degrees.

Only one of this and laserAllowDegreesChoices should be used.

Parameters
defaultStartDegreesThe default start degrees to use, this default should probably be for the max range.
startDegreesMinThe minimum value for start degrees
startDegreesMaxThe maximum value for start degrees
defaultEndDegreesThe default end degrees to use, this default should probably be for the max range.
endDegreesMinThe minimum value for end degrees
endDegreesMaxThe maximum value for end degrees

◆ laserAllowSetIncrement()

void ArLaser::laserAllowSetIncrement ( double  defaultIncrement,
double  incrementMin,
double  incrementMax 
)
protected

Allows setting the increment the laser uses to anything in a range.

Allows the choice of increment from a range, only one of this and laserAllowIncrementChoices should be used.

Parameters
defaultIncrementThe default increment to use, this default should be a reasonable value.
incrementMinThe minimum value for the increment
incrementMaxThe maximum value for the increment

◆ laserAllowSetPowerControlled()

void ArLaser::laserAllowSetPowerControlled ( bool  defaultPowerControlled)
protected

Allows setting if the power is controlled or not.

Allows settings of whether the power can be controlled or not.

This is mostly for devices that respond differently at power up than they do if they are already on (ie the lms2xx where it doesn't respond at all while powering up). If the communication is the same either way, you can just not set this.

Parameters
defaultPowerControlledThe default value for power controlled.

◆ laserAllowStartingBaudChoices()

void ArLaser::laserAllowStartingBaudChoices ( const char *  defaultStartingBaudChoice,
std::list< std::string >  startingBaudChoices 
)
protected

Allows setting the starting baud to one of a number of choices.

Parameters
defaultStartingBaudChoiceDefault starting baud choice. This should probably stay the same as what the sensor ships with.
startingBaudChoicesThe available choices for starting baud

◆ laserAllowUnitsChoices()

void ArLaser::laserAllowUnitsChoices ( const char *  defaultUnitsChoice,
std::list< std::string >  unitsChoices 
)
protected

Allows setting the units the laser will use to one of a number of choices.

Parameters
defaultUnitsChoiceThis is the default units choice, it should be a reasonable value.
unitsChoicesThe possible choices for units.

◆ laserCheckLostConnection()

bool ArLaser::laserCheckLostConnection ( void  )
protected

Returns if the laser has lost connection so that the subclass can do something appropriate.

This will check if the laser has lost connection.

If there is no robot it is a straightforward check of last reading time against getConnectionTimeoutSeconds. If there is a robot then it will not start the check until the laser is running and connected.

◆ laserCheckParams()

virtual bool ArLaser::laserCheckParams ( void  )
inlinevirtual

Call the laser can implement to make sure the parameters are all okay or set the maximum range (based on the params)

The base laser should make sure all the parameters make sense according to what was set up as allowed.

This is here for two purposes. The first is to check for parameters that aren't valid because of something the base class can't check for. The second is to recalculate whatever the maximum range of the sensor is based on those settings, and call setAbsoluteMaxRange if the maximum range has changed based on the settings.

This is strictly an internal call, mostly for the simulated laser so that it can more closely match the real laser on complicated things like the LMS2xx where the settings for the units and bits affect what the maximum range is.

◆ laserProcessReadings()

void ArLaser::laserProcessReadings ( void  )
protected

Converts the raw readings into the buffers (needs to be called by subclasses)

Filter readings, moving them from the raw current buffer to filtered current buffer (see ArRangeDevice), and then also to the cumulative buffer.

This must be called for the laser subclass to work right.

This also calls the reading callbacks.

◆ laserSetName()

void ArLaser::laserSetName ( const char *  name)
protectedvirtual

Called when the lasers name is set.

This can be used to set the name on mutexes and such to match the laser's new name.

◆ setConnectionTimeoutSeconds()

void ArLaser::setConnectionTimeoutSeconds ( double  seconds)
virtual

Sets the numter of seconds without a response until connection assumed lost.

Sets the time to go without a response from the laser until it is assumed that the connection with the laser has been broken and the disconnect on error events will happen.

If there is no robot then there is a straightforward check of last reading time against this value. If there is a robot then it will not start the check until the laser is running and connected.

Parameters
secondsif 0 or less then the connection timeout feature will be disabled, otherwise disconnect on error will be triggered after this number of miliseconds...

◆ setEndDegrees()

bool ArLaser::setEndDegrees ( double  endDegrees)

Sets the end angle, it must be between getEndDegreesMin and getEndDegreesMax.

See also
canSetDegrees

◆ setIncrement()

bool ArLaser::setIncrement ( double  increment)

Sets the increment.

See also
canSetIncrement

◆ setPowerControlled()

bool ArLaser::setPowerControlled ( bool  powerControlled)

Sets if the power is controlled.

See also
canChoosePowerControlled

◆ setStartDegrees()

bool ArLaser::setStartDegrees ( double  startDegrees)

Sets the start angle, it must be between getStartDegreesMin and getStartDegreesMax.

See also
canSetDegrees

The documentation for this class was generated from the following files: