Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

ArSensorReading.cpp

00001 /*
00002 ActivMedia Robotics Interface for Applications (ARIA)
00003 Copyright (C) 2004,2005 ActivMedia Robotics, LLC
00004 
00005 
00006      This program is free software; you can redistribute it and/or modify
00007      it under the terms of the GNU General Public License as published by
00008      the Free Software Foundation; either version 2 of the License, or
00009      (at your option) any later version.
00010 
00011      This program is distributed in the hope that it will be useful,
00012      but WITHOUT ANY WARRANTY; without even the implied warranty of
00013      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014      GNU General Public License for more details.
00015 
00016      You should have received a copy of the GNU General Public License
00017      along with this program; if not, write to the Free Software
00018      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019 
00020 If you wish to redistribute ARIA under different terms, contact 
00021 ActivMedia Robotics for information about a commercial version of ARIA at 
00022 robots@activmedia.com or 
00023 ActivMedia Robotics, 19 Columbia Drive, Amherst, NH 03031; 800-639-9481
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   // TODO calculate the x and y position of the sensor
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   // TODO calculate the x and y position of the sensor
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   // if its the same position and we're not forcing, just bail
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   //printf("xpose %d ypose %d thpose %d disttoC %.1f angletoC %.1f\n",
00171   //xPos, yPos, thPos, myDistToCenter, myAngleToCenter);
00172 }
00173 
00177 void ArSensorReading::applyTransform(ArTransform trans)
00178 {
00179   myReading = trans.doTransform(myReading);
00180   myReadingTaken = trans.doTransform(myReadingTaken);
00181 }

Generated on Wed Oct 19 12:56:36 2005 for Aria by  doxygen 1.4.0