00001 #include<assert.h>
00002 #include<iostream>
00003 #include<vector>
00004 using namespace std;
00005
00006 #include <selforg/sinecontroller.h>
00007 #include <selforg/invertmotorspace.h>
00008
00009 const int MNumber = 2;
00010 const int SNumber = 2;
00011
00012
00013
00014
00015
00016
00017
00018
00019 void myrobot(double* sensors, int sensornumber, const double* motors, int motornumber){
00020 assert(sensornumber >= 2 && motornumber >= 2);
00021
00022 sensors[0]=motors[0]+(double(rand())/RAND_MAX-0.5)*0.3;
00023 sensors[1]=motors[1]+(double(rand())/RAND_MAX-0.5)*0.3;
00024
00025 }
00026
00027
00028 int main(){
00029
00030 AbstractController* controller = new InvertMotorSpace(10);
00031 controller->init(2,2);
00032 controller->setParam("epsA",0.01);
00033 controller->print(stderr,0);
00034
00035
00036
00037 double sensors[SNumber];
00038 double motors[MNumber];
00039
00040 memset(motors,0,sizeof(double)*MNumber);
00041
00042
00043 for(int i=0; i < 1000; i++){
00044
00045 myrobot(sensors, SNumber, motors, MNumber);
00046 cout << i << " S0: " << sensors[0] << ", " <<" S1: " << sensors[1];
00047
00048
00049 list<Inspectable::iparamval> list_ = controller->getInternalParams();
00050 vector<Inspectable::iparamval> v(list_.begin(), list_.end());
00051 cout << i << " C00: " << v[4] << ", " <<" C01: " << v[5] << ", " <<
00052 " C10: " << v[6] << ", " <<" C11: " << v[7] << endl;
00053
00054
00055 controller->step(sensors, SNumber, motors, MNumber);
00056 cout << i << " Motor values: " << motors[0] << ", " << motors[1] << endl;
00057 }
00058 delete controller;
00059 return 0;
00060 }
00061
00062