Main Page   Class Hierarchy   Compound List   Compound Members  

ArRangeBuffer Class Reference

This class is a buffer that holds ranging information. More...

#include <ArRangeBuffer.h>

List of all members.

Public Methods

 ArRangeBuffer (int size)
 Constructor. More...

virtual ~ArRangeBuffer (void)
 Destructor.

size_t getSize (void)
 Gets the size of the buffer.

void setSize (size_t size)
 Sets the size of the buffer. More...

ArPose getPoseTaken ()
 Gets the pose of the robot when readings were taken.

void setPoseTaken (ArPose p)
 Sets the pose of the robot when readings were taken.

void addReading (double x, double y)
 Adds a new reading to the buffer. More...

void beginInvalidationSweep (void)
 Begins a walk through the getBuffer list of readings. More...

void invalidateReading (std::list< ArPose *>::iterator readingIt)
 While doing an invalidation sweep a reading to the list to be invalidated. More...

void endInvalidationSweep (void)
 Ends the invalidation sweep. More...

std::list< ArPose *> * getBuffer (void)
 Gets a pointer to a list of readings. More...

double getClosestPolar (double startAngle, double endAngle, ArPose position, unsigned int maxRange, double *angle=NULL)
 Gets the closest reading, on a polar system. More...

double getClosestBox (double x1, double y1, double x2, double y2, ArPose position, unsigned int maxRange, ArPose *readingPos=NULL)
 Gets the closest reading, from a rectangular box, in robot LOCAL coords. More...

void applyTransform (ArTransform trans)
 Applies a transform to the buffer. More...

void reset (void)
 Resets the range buffer to empty (invalidates all readings).

void beginRedoBuffer (void)
 This begins a redoing of the buffer. More...

void redoReading (double x, double y)
 Add a reading to the redoing of the buffer. More...

void endRedoBuffer (void)
 End redoing the buffer. More...


Detailed Description

This class is a buffer that holds ranging information.


Constructor & Destructor Documentation

ArRangeBuffer::ArRangeBuffer int    size
 

Constructor.

Parameters:
size  The size of the buffer, in number of readings


Member Function Documentation

void ArRangeBuffer::addReading double    x,
double    y
 

Adds a new reading to the buffer.

Parameters:
x  the x position of the reading
y  the y position of the reading

void ArRangeBuffer::applyTransform ArTransform    trans
 

Applies a transform to the buffer.

Applies a transform to the buffers.. this is mostly useful for translating to/from local/global coords, but may have other uses

Parameters:
trans  the transform to apply to the data

void ArRangeBuffer::beginInvalidationSweep void   
 

Begins a walk through the getBuffer list of readings.

This is a set of funkiness used to invalid readings in the buffer. It is fairly complicated. But what you need to do, is set up the invalid sweeping with beginInvalidationSweep, then walk through the list of readings, and pass the iterator to a reading you want to invalidate to invalidateReading, then after you are all through walking the list call endInvalidationSweep. Look at the description of getBuffer for additional warnings.

See also:
invalidateReading , endInvalidationSweep

void ArRangeBuffer::beginRedoBuffer void   
 

This begins a redoing of the buffer.

To redo the buffer means that you're going to want to replace all of the readings in the buffer, and get rid of the ones that you don't replace (invalidate them). The three functions beginRedoBuffer, redoReading, and endRedoBuffer are all made to enable you to do this. What you do, is call beginRedoBuffer(); then for each reading you want to be in the buffer, call redoReading(double x, double y), then when you are done, call endRedoBuffer();

void ArRangeBuffer::endInvalidationSweep void   
 

Ends the invalidation sweep.

See the description of beginInvalidationSweep, it describes how to use this function.

See also:
beginInvalidationSweep , invalidateReading

void ArRangeBuffer::endRedoBuffer void   
 

End redoing the buffer.

For a description of how to use this, see beginRedoBuffer

std::list< ArPose *> * ArRangeBuffer::getBuffer void   
 

Gets a pointer to a list of readings.

This function returns a pointer to a list that has all of the readings in it. This list is mostly for reference, ie for finding some particular value or for using the readings to draw them. Don't do any modification at all to the list unless you really know what you're doing... and if you do you'd better lock the rangeDevice this came from so nothing messes with the list while you are doing so.

Returns:
the list of positions this range buffer has

double ArRangeBuffer::getClosestBox double    x1,
double    y1,
double    x2,
double    y2,
ArPose    startPos,
unsigned int    maxRange,
ArPose   readingPos = NULL
 

Gets the closest reading, from a rectangular box, in robot LOCAL coords.

Gets the closest reading in a region defined by two points (opposeite points of a rectangle).

Parameters:
x1  the x coordinate of one of the rectangle points
y1  the y coordinate of one of the rectangle points
x2  the x coordinate of the other rectangle point
y2  the y coordinate of the other rectangle point
startPos  the position to find the closest reading to (usually the robots position)
maxRange  the maximum range to return (and what to return if nothing found)
readingPos  a pointer to a position in which to store the location of the closest position
position  the origin of the local coords for the definition of the coordinates, normally just ArRobot::getPosition
Returns:
if the return is >= 0 and <= maxRange then this is the distance to the closest reading, if it is >= maxRange, then there was no reading in the given section

double ArRangeBuffer::getClosestPolar double    startAngle,
double    endAngle,
ArPose    startPos,
unsigned int    maxRange,
double *    angle = NULL
 

Gets the closest reading, on a polar system.

Gets the closest reading in a region defined by startAngle going to endAngle... going counterclockwise (neg degrees to poseitive... with how the robot is set up, thats counterclockwise)... from -180 to 180... this means if you want the slice between 0 and 10 degrees, you must enter it as 0, 10, if you do 10, 0 you'll get the 350 degrees between 10 and 0... be especially careful with negative... for example -30 to -60 is everything from -30, around through 0, 90, and 180 back to -60... since -60 is actually to clockwise of -30

Parameters:
startAngle  where to start the slice
endAngle  where to end the slice, going clockwise from startAngle
startPos  the position to find the closest reading to (usually the robots position)
maxRange  the maximum range to return (and what to return if nothing found)
angle  a pointer return of the angle to the found reading
position  the origin of the local coords for the definition of the coordinates, normally just ArRobot::getPosition
Returns:
if the return is >= 0 and <= maxRange then this is the distance to the closest reading, if it is >= maxRange, then there was no reading in the given section

void ArRangeBuffer::invalidateReading std::list< ArPose *>::iterator    readingIt
 

While doing an invalidation sweep a reading to the list to be invalidated.

See the description of beginInvalidationSweep, it describes how to use this function.

Parameters:
readingIt  the ITERATOR to the reading you want to get rid of
See also:
beginInvaladationSweep , endInvalidationSweep

void ArRangeBuffer::redoReading double    x,
double    y
 

Add a reading to the redoing of the buffer.

For a description of how to use this, see beginRedoBuffer

Parameters:
x  the x param of the coord to add to the buffer
y  the x param of the coord to add to the buffer

void ArRangeBuffer::setSize size_t    size
 

Sets the size of the buffer.

If the new size is smaller than the current buffer it chops off the readings that are excess from the oldest readings... if the new size is larger then it just leaves room for the buffer to grow

Parameters:
size  number of readings to set the buffer to


The documentation for this class was generated from the following files:
Generated on Tue Nov 12 17:44:00 2002 for Aria by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001