00001 /*************************************************************************** 00002 * Copyright (C) 2005 by Robot Group Leipzig * 00003 * martius@informatik.uni-leipzig.de * 00004 * fhesse@informatik.uni-leipzig.de * 00005 * der@informatik.uni-leipzig.de * 00006 * * 00007 * This program is free software; you can redistribute it and/or modify * 00008 * it under the terms of the GNU General Public License as published by * 00009 * the Free Software Foundation; either version 2 of the License, or * 00010 * (at your option) any later version. * 00011 * * 00012 * This program is distributed in the hope that it will be useful, * 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00015 * GNU General Public License for more details. * 00016 * * 00017 * You should have received a copy of the GNU General Public License * 00018 * along with this program; if not, write to the * 00019 * Free Software Foundation, Inc., * 00020 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 00021 * * 00022 * $Log: selectiveone2onewiring.cpp,v $ 00023 * Revision 1.1.2.1 2005/11/16 11:24:28 martius 00024 * moved to selforg 00025 * 00026 * Revision 1.3 2005/10/24 13:32:07 fhesse 00027 * comments adjusted and in doxygen style 00028 * 00029 * Revision 1.2 2005/08/31 11:11:37 martius 00030 * noise->noisevals 00031 * 00032 * Revision 1.1 2005/08/22 17:28:12 martius 00033 * a 1 to 1 wiring that supports the selection of some sensors only 00034 * 00035 * * 00036 ***************************************************************************/ 00037 00038 #include "selectiveone2onewiring.h" 00039 #include "assert.h" 00040 00041 bool select_all(unsigned int index, unsigned int len){ 00042 return true; 00043 } 00044 bool select_firsthalf(unsigned int index, unsigned int len){ 00045 return index < len/2; 00046 } 00047 00048 00049 /// constructor 00050 SelectiveOne2OneWiring::SelectiveOne2OneWiring(NoiseGenerator* noise, 00051 select_predicate sel_sensor) 00052 : One2OneWiring(noise){ 00053 this->sel_sensor = sel_sensor; 00054 } 00055 00056 SelectiveOne2OneWiring::~SelectiveOne2OneWiring(){ 00057 } 00058 00059 00060 /// initializes the number of sensors and motors on robot side, calculate 00061 // number of sensors and motors on controller side 00062 bool SelectiveOne2OneWiring::init(int robotsensornumber, int robotmotornumber){ 00063 One2OneWiring::init(robotsensornumber, robotmotornumber); 00064 assert(sel_sensor); 00065 int num=0; 00066 for(int i=0; i<robotsensornumber; i++){ 00067 if(sel_sensor(i,robotsensornumber)) num++; 00068 } 00069 printf("csensornumber: %i\n", num); 00070 csensornumber = num; 00071 return true; 00072 } 00073 00074 /// Realizes selective one to one wiring from robot sensors to controller sensors. 00075 // @param rsensors pointer to array of sensorvalues from robot 00076 // @param rsensornumber number of sensors from robot 00077 // @param csensors pointer to array of sensorvalues for controller 00078 // @param csensornumber number of sensors to controller 00079 // @param noise size of the noise added to the sensors 00080 bool SelectiveOne2OneWiring::wireSensors(const sensor* rsensors, int rsensornumber, 00081 sensor* csensors, int csensornumber, 00082 double noiseStrength){ 00083 memset(noisevals, 0 , sizeof(sensor) * this->rsensornumber); 00084 noiseGenerator->add(noisevals, -noiseStrength, noiseStrength); 00085 int num=0; 00086 for(int i=0; i< rsensornumber; i++){ 00087 if(sel_sensor(i,rsensornumber)){ 00088 csensors[num] = rsensors[i] + noisevals[i]; 00089 num++; 00090 } 00091 } 00092 return true; 00093 } 00094