00001 /* 00002 Enki - a fast 2D robot simulator 00003 Copyright (C) 1999-2005 Stephane Magnenat <nct@ysagoon.com> 00004 Copyright (C) 2004-2005 Markus Waibel <markus.waibel@epfl.ch> 00005 Copyright (C) 2005 Laboratory of Intelligent Systems, EPFL, Lausanne 00006 See AUTHORS for details 00007 00008 This program is free software; the authors of any publication 00009 arising from research using this software are asked to add the 00010 following reference: 00011 Enki - a fast 2D robot simulator part of the Teem framework 00012 http://teem.epfl.ch 00013 Stephane Magnenat <stephane.magnenat@epfl.ch>, 00014 Markus Waibel <markus.waibel@epfl.ch> 00015 Laboratory of Intelligent Systems, EPFL, Lausanne. 00016 00017 You can redistribute this program and/or modify 00018 it under the terms of the GNU General Public License as published by 00019 the Free Software Foundation; either version 2 of the License, or 00020 (at your option) any later version. 00021 00022 This program is distributed in the hope that it will be useful, 00023 but WITHOUT ANY WARRANTY; without even the implied warranty of 00024 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00025 GNU General Public License for more details. 00026 00027 You should have received a copy of the GNU General Public License 00028 along with this program; if not, write to the Free Software 00029 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00030 */ 00031 00032 #ifndef __ALICE_H 00033 #define __ALICE_H 00034 00035 #include <enki/PhysicalEngine.h> 00036 #include <enki/interactions/IRSensor.h> 00037 #include <enki/interactions/CircularCam.h> 00038 #include <enki/robots/alice/AliceCommunication.h> 00039 00044 namespace Enki 00045 { 00047 00048 class Alice : public Robot 00049 { 00050 protected: 00052 struct SensorModels 00053 { 00054 SensorResponseFunctor *left[3]; 00055 SensorResponseFunctor *normal[3]; 00056 SensorResponseFunctor *high[3]; 00057 00058 SensorModels(); 00059 ~SensorModels(); 00060 } sensorModels; 00061 00062 public: 00064 IRSensor left; 00066 IRSensor front; 00068 IRSensor right; 00070 IRSensor back; 00072 IRSensor frontHighExt; 00074 IRSensor backleft; 00076 IRSensor backright; 00078 CircularCam circcam; 00080 AliceCommunication comm; 00081 00082 00083 public: 00085 double leftSpeed, rightSpeed; 00086 00087 public: 00088 enum Capabilities 00089 { 00091 CAPABILITIY_NONE = 0, 00093 CAPABILITIY_BASIC_SENSORS = 0x1, 00095 CAPABILITIY_CAMERA = 0x2, 00097 CAPABILITIY_COMMUNICATION = 0x4, 00099 CAPABILITIY_EXT_HIGH_SENSOR = 0x8, 00101 CAPABILITIY_EXT_BACK_LR_SENSORS = 0x10, 00102 }; 00103 00104 public: 00106 Alice(unsigned capabilities = CAPABILITIY_BASIC_SENSORS); 00108 void step(double dt); 00109 }; 00110 } 00111 00112 #endif 00113