00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include "ArExport.h"
00028 #include "ariaOSDef.h"
00029 #include "ArSensorReading.h"
00030 #include "ariaUtil.h"
00031
00037 ArSensorReading::ArSensorReading(double xPos, double yPos, double thPos)
00038 {
00039 myRange = 5000;
00040 myCounterTaken = 0;
00041 myReading.setPose(-1, -1);
00042 myReadingTaken.setPose(-1, -1, -1);
00043 resetSensorPosition(xPos, yPos, thPos, true);
00044 }
00045
00046 ArSensorReading::ArSensorReading(const ArSensorReading & reading)
00047 {
00048 myCounterTaken = reading.myCounterTaken;
00049 myReading = reading.myReading;
00050 myLocalReading = reading.myLocalReading;
00051 myReadingTaken = reading.myReadingTaken;
00052 myEncoderPoseTaken = reading.myEncoderPoseTaken;
00053 mySensorPos = reading.mySensorPos;
00054 mySensorCos = reading.mySensorCos;
00055 mySensorSin = reading.mySensorSin;
00056 myDistToCenter = reading.myDistToCenter;
00057 myAngleToCenter = reading.myAngleToCenter;
00058 myRange = reading.myRange;
00059 myTimeTaken = reading.myTimeTaken;
00060 myIgnoreThisReading = reading.myIgnoreThisReading;
00061 }
00062
00063 ArSensorReading &ArSensorReading::operator=(
00064 const ArSensorReading &reading)
00065 {
00066 if (this != &reading)
00067 {
00068 myCounterTaken = reading.myCounterTaken;
00069 myReading = reading.myReading;
00070 myLocalReading = reading.myLocalReading;
00071 myReadingTaken = reading.myReadingTaken;
00072 myEncoderPoseTaken = reading.myEncoderPoseTaken;
00073 mySensorPos = reading.mySensorPos;
00074 mySensorCos = reading.mySensorCos;
00075 mySensorSin = reading.mySensorSin;
00076 myDistToCenter = reading.myDistToCenter;
00077 myAngleToCenter = reading.myAngleToCenter;
00078 myRange = reading.myRange;
00079 myTimeTaken = reading.myTimeTaken;
00080 myIgnoreThisReading = reading.myIgnoreThisReading;
00081 }
00082 return *this;
00083 }
00084
00085
00086
00087 ArSensorReading::~ArSensorReading()
00088 {
00089 }
00090
00091
00101 void ArSensorReading::newData(int range, ArPose robotPose,
00102 ArPose encoderPose, ArTransform trans,
00103 unsigned int counter,
00104 ArTime timeTaken,
00105 bool ignoreThisReading)
00106 {
00107
00108 double rx, ry;
00109 myRange = range;
00110 myCounterTaken = counter;
00111 myReadingTaken = robotPose;
00112 myEncoderPoseTaken = encoderPose;
00113 rx = getSensorX() + myRange * mySensorCos;
00114 ry = getSensorY() + myRange * mySensorSin;
00115 myLocalReading.setPose(rx, ry);
00116 myReading = trans.doTransform(myLocalReading);
00117 myTimeTaken = timeTaken;
00118 myIgnoreThisReading = ignoreThisReading;
00119 }
00120
00131 void ArSensorReading::newData(int sx, int sy, ArPose robotPose,
00132 ArPose encoderPose, ArTransform trans,
00133 unsigned int counter, ArTime timeTaken,
00134 bool ignoreThisReading)
00135 {
00136
00137 double rx, ry;
00138 myRange = (int)sqrt((double)(sx*sx + sy*sy));
00139 myCounterTaken = counter;
00140 myReadingTaken = robotPose;
00141 myEncoderPoseTaken = encoderPose;
00142 rx = getSensorX() + sx;
00143 ry = getSensorY() + sy;
00144 myLocalReading.setPose(rx, ry);
00145 myReading = trans.doTransform(myLocalReading);
00146 myTimeTaken = timeTaken;
00147 myIgnoreThisReading = ignoreThisReading;
00148 }
00149
00150
00156 void ArSensorReading::resetSensorPosition(double xPos, double yPos,
00157 double thPos,
00158 bool forceComputation)
00159 {
00160
00161 if (!forceComputation && fabs(thPos - mySensorPos.getTh()) < .00001 &&
00162 xPos == mySensorPos.getX() && yPos == mySensorPos.getY())
00163 return;
00164
00165 mySensorPos.setPose(xPos, yPos, thPos);
00166 myDistToCenter = sqrt(xPos * xPos + yPos * yPos);
00167 myAngleToCenter = ArMath::atan2(yPos, xPos);
00168 mySensorCos = ArMath::cos(thPos);
00169 mySensorSin = ArMath::sin(thPos);
00170
00171
00172 }
00173
00177 void ArSensorReading::applyTransform(ArTransform trans)
00178 {
00179 myReading = trans.doTransform(myReading);
00180 myReadingTaken = trans.doTransform(myReadingTaken);
00181 }