just a test

Dependencies:   mbed

Fork of scoreLight_Advanced by Alvaro Cassinelli

Committer:
mbedalvaro
Date:
Sat Apr 28 12:35:21 2012 +0000
Revision:
18:d72935b13858
Parent:
14:0fc33a3a7b4b
Child:
19:228430f1350e
this works pretty nicely. I will change some parameters on the elastic loop, as well as compute the KINETIC ENERGY

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedalvaro 0:345b3bc7a0ea 1
mbedalvaro 0:345b3bc7a0ea 2 #include "blobConfig.h"
mbedalvaro 0:345b3bc7a0ea 3 #include "hardwareIO.h" // this is in fact only to get to know the initial position of the spots, as well as the mirror limits to set the bounding box for the blobs
mbedalvaro 0:345b3bc7a0ea 4
mbedalvaro 0:345b3bc7a0ea 5 blobConfig::blobConfig(): numBlobs(0) {
mbedalvaro 1:a4050fee11f7 6 //blobArray.clear();// there is no need to do this, the vector does not contains anything here.
mbedalvaro 1:a4050fee11f7 7
mbedalvaro 0:345b3bc7a0ea 8 }
mbedalvaro 0:345b3bc7a0ea 9
mbedalvaro 0:345b3bc7a0ea 10 blobConfig::~blobConfig() {
mbedalvaro 1:a4050fee11f7 11 clearConfig();
mbedalvaro 1:a4050fee11f7 12
mbedalvaro 0:345b3bc7a0ea 13 }
mbedalvaro 0:345b3bc7a0ea 14
mbedalvaro 0:345b3bc7a0ea 15 // =========================================== STANDARD CONFIGURATIONS =============================================================================
mbedalvaro 0:345b3bc7a0ea 16
mbedalvaro 0:345b3bc7a0ea 17 void blobConfig::computeBoundingBox() {
mbedalvaro 1:a4050fee11f7 18 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 19 blobArray[i]->computeBoundingBox();
mbedalvaro 1:a4050fee11f7 20 }
mbedalvaro 0:345b3bc7a0ea 21 }
mbedalvaro 0:345b3bc7a0ea 22
mbedalvaro 0:345b3bc7a0ea 23 void blobConfig::clearConfig() {
mbedalvaro 1:a4050fee11f7 24 for (int i=0; i<blobArray.size(); i++) delete blobArray[i]; // we must delete the pointer created with new, so the memory for the object is liberated (calls its destructor)
mbedalvaro 1:a4050fee11f7 25 blobArray.clear();
mbedalvaro 1:a4050fee11f7 26 numBlobs=0;// this is just equal to blobArray.size()
mbedalvaro 0:345b3bc7a0ea 27 }
mbedalvaro 0:345b3bc7a0ea 28
mbedalvaro 1:a4050fee11f7 29 void blobConfig::addOneElasticLoopRelax() {
mbedalvaro 1:a4050fee11f7 30 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 12:0de9cd2bced5 31 pBlob->createBlob(blobArray.size(), RELAX, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0));
mbedalvaro 1:a4050fee11f7 32 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 33 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 34
mbedalvaro 1:a4050fee11f7 35 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 36 numBlobs=blobArray.size();
mbedalvaro 1:a4050fee11f7 37
mbedalvaro 0:345b3bc7a0ea 38 }
mbedalvaro 0:345b3bc7a0ea 39
mbedalvaro 0:345b3bc7a0ea 40
mbedalvaro 1:a4050fee11f7 41 void blobConfig::addOneElasticLoopContract() {
mbedalvaro 1:a4050fee11f7 42 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 12:0de9cd2bced5 43 pBlob->createBlob(blobArray.size(), CONTRACT, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0));
mbedalvaro 1:a4050fee11f7 44 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 45 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 46
mbedalvaro 1:a4050fee11f7 47 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 48 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 49 }
mbedalvaro 0:345b3bc7a0ea 50
mbedalvaro 1:a4050fee11f7 51 void blobConfig::addOneElasticLoopContractCentral() {
mbedalvaro 1:a4050fee11f7 52 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 12:0de9cd2bced5 53 pBlob->createBlob(blobArray.size(), CONTRACT_CENTRAL, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0));
mbedalvaro 1:a4050fee11f7 54 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 55 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 56
mbedalvaro 1:a4050fee11f7 57 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 58 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 59 }
mbedalvaro 0:345b3bc7a0ea 60
mbedalvaro 1:a4050fee11f7 61 void blobConfig::addOneElasticContourFollowing() {
mbedalvaro 1:a4050fee11f7 62
mbedalvaro 1:a4050fee11f7 63 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 12:0de9cd2bced5 64 pBlob->createBlob(blobArray.size(), CONTOUR_FOLLOWING, vector2Df(CENTER_AD_MIRROR_X+100*blobArray.size(), CENTER_AD_MIRROR_Y+100*blobArray.size()), vector2Df(0,0));
mbedalvaro 1:a4050fee11f7 65 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 66 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 67
mbedalvaro 1:a4050fee11f7 68 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 69 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 70 }
mbedalvaro 0:345b3bc7a0ea 71
mbedalvaro 0:345b3bc7a0ea 72
mbedalvaro 1:a4050fee11f7 73 void blobConfig:: addOneElasticContourFollowingFAST() {
mbedalvaro 1:a4050fee11f7 74 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 12:0de9cd2bced5 75 pBlob->createBlob(blobArray.size(), CONTOUR_FOLLOWING_FAST, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0));
mbedalvaro 0:345b3bc7a0ea 76 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 77 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 78
mbedalvaro 1:a4050fee11f7 79 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 80 numBlobs=blobArray.size();
mbedalvaro 1:a4050fee11f7 81 }
mbedalvaro 1:a4050fee11f7 82
mbedalvaro 1:a4050fee11f7 83 void blobConfig::addOneElasticBouncing() {
mbedalvaro 1:a4050fee11f7 84 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 12:0de9cd2bced5 85 pBlob->createBlob(blobArray.size(), BOUNCING, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(1,1));
mbedalvaro 1:a4050fee11f7 86 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 87 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 88
mbedalvaro 1:a4050fee11f7 89 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 90 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 91 }
mbedalvaro 0:345b3bc7a0ea 92
mbedalvaro 1:a4050fee11f7 93 void blobConfig::addOneRigidLoopBouncing() {
mbedalvaro 1:a4050fee11f7 94 rigidLoop* pBlob= new rigidLoop();
mbedalvaro 12:0de9cd2bced5 95 pBlob->createBlob(blobArray.size(), SPOT_BOUNCING, vector2Df(CENTER_AD_MIRROR_X+100*blobArray.size(), CENTER_AD_MIRROR_Y+100*blobArray.size()), vector2Df(0,0));
mbedalvaro 0:345b3bc7a0ea 96 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 97 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 98
mbedalvaro 1:a4050fee11f7 99 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 100 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 101 }
mbedalvaro 0:345b3bc7a0ea 102
mbedalvaro 1:a4050fee11f7 103 void blobConfig::addOneRigidLoopFollowing() {
mbedalvaro 1:a4050fee11f7 104 rigidLoop* pBlob= new rigidLoop();
mbedalvaro 14:0fc33a3a7b4b 105 pBlob->createBlob(blobArray.size(), SPOT_FOLLOWING, vector2Df(CENTER_AD_MIRROR_X+100*blobArray.size(), CENTER_AD_MIRROR_Y+100*blobArray.size()), vector2Df(0,0));
mbedalvaro 1:a4050fee11f7 106 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 107 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 108
mbedalvaro 1:a4050fee11f7 109 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 110 numBlobs=blobArray.size();
mbedalvaro 1:a4050fee11f7 111 }
mbedalvaro 0:345b3bc7a0ea 112
mbedalvaro 5:73cd58b58f95 113 void blobConfig::addOneRigidLoopTest() {
mbedalvaro 5:73cd58b58f95 114 rigidLoop* pBlob= new rigidLoop();
mbedalvaro 12:0de9cd2bced5 115 pBlob->createBlob(blobArray.size(), SPOT_TEST, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0));
mbedalvaro 5:73cd58b58f95 116 // add this relaxing loop to the present config:
mbedalvaro 5:73cd58b58f95 117 blobArray.push_back(pBlob);
mbedalvaro 5:73cd58b58f95 118
mbedalvaro 5:73cd58b58f95 119 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 5:73cd58b58f95 120 numBlobs=blobArray.size();
mbedalvaro 5:73cd58b58f95 121 }
mbedalvaro 5:73cd58b58f95 122
mbedalvaro 0:345b3bc7a0ea 123
mbedalvaro 0:345b3bc7a0ea 124 // ==================================================================================================================================================
mbedalvaro 0:345b3bc7a0ea 125
mbedalvaro 0:345b3bc7a0ea 126
mbedalvaro 1:a4050fee11f7 127 void blobConfig::allKill() { // this put all the blobs in "dead" mode, meaning that neither rendering nor update is done (but they are not deleted).
mbedalvaro 1:a4050fee11f7 128 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 129 blobArray[i]->render = false;
mbedalvaro 1:a4050fee11f7 130 blobArray[i]->standByMode = false;
mbedalvaro 1:a4050fee11f7 131 }
mbedalvaro 1:a4050fee11f7 132 }
mbedalvaro 0:345b3bc7a0ea 133 void blobConfig::allAlive() {
mbedalvaro 1:a4050fee11f7 134 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 135 blobArray[i]->render = true;
mbedalvaro 1:a4050fee11f7 136 blobArray[i]->standByMode = true;
mbedalvaro 1:a4050fee11f7 137 }
mbedalvaro 1:a4050fee11f7 138 }
mbedalvaro 1:a4050fee11f7 139
mbedalvaro 0:345b3bc7a0ea 140 void blobConfig::allStandBy() {
mbedalvaro 1:a4050fee11f7 141 for (int i=0; i<blobArray.size(); i++) blobArray[i]->standByMode = true;
mbedalvaro 0:345b3bc7a0ea 142 }
mbedalvaro 0:345b3bc7a0ea 143
mbedalvaro 0:345b3bc7a0ea 144 void blobConfig::allResume() {
mbedalvaro 1:a4050fee11f7 145 for (int i=0; i<blobArray.size(); i++) blobArray[i]->standByMode = false;
mbedalvaro 0:345b3bc7a0ea 146 }
mbedalvaro 0:345b3bc7a0ea 147
mbedalvaro 1:a4050fee11f7 148 void blobConfig::allVisible() {
mbedalvaro 1:a4050fee11f7 149 for (int i=0; i<blobArray.size(); i++) blobArray[i]->render = true;
mbedalvaro 0:345b3bc7a0ea 150 }
mbedalvaro 0:345b3bc7a0ea 151
mbedalvaro 0:345b3bc7a0ea 152 void blobConfig::allInvisible() { // note that they may continue to evolve
mbedalvaro 1:a4050fee11f7 153 for (int i=0; i<blobArray.size(); i++) blobArray[i]->render = false;
mbedalvaro 0:345b3bc7a0ea 154 }
mbedalvaro 0:345b3bc7a0ea 155
mbedalvaro 1:a4050fee11f7 156 void blobConfig::update() { // update dynamics of the blob
mbedalvaro 1:a4050fee11f7 157 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 3:b44ff6de81bd 158 if (blobArray[i]->standByMode==false) blobArray[i]->update();
mbedalvaro 1:a4050fee11f7 159 }
mbedalvaro 0:345b3bc7a0ea 160 }
mbedalvaro 0:345b3bc7a0ea 161
mbedalvaro 1:a4050fee11f7 162 void blobConfig::draw() { // draw uses the opengl like renderer (if any), and save projected trajectory in the LaserSensingTrajectory object of each blob
mbedalvaro 1:a4050fee11f7 163 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 164 if (blobArray[i]->render==true) blobArray[i]->draw();
mbedalvaro 1:a4050fee11f7 165 }
mbedalvaro 0:345b3bc7a0ea 166 }
mbedalvaro 0:345b3bc7a0ea 167
mbedalvaro 1:a4050fee11f7 168 void blobConfig::sendConfData() {
mbedalvaro 1:a4050fee11f7 169 // For the time being, only "per blob" data sending:
mbedalvaro 1:a4050fee11f7 170 // (b) Per-spot sending of data (note: both are NOT exclusive; so if we want just packaged data, we need to make all the spot STOP sending data.
mbedalvaro 18:d72935b13858 171 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 172 if (blobArray[i]->render==true) blobArray[i]->sendData(); // a blob that is in stand-by mode may send data (good for testing with a fixed loop)
mbedalvaro 1:a4050fee11f7 173 }
mbedalvaro 0:345b3bc7a0ea 174 }
mbedalvaro 0:345b3bc7a0ea 175
mbedalvaro 0:345b3bc7a0ea 176
mbedalvaro 0:345b3bc7a0ea 177
mbedalvaro 0:345b3bc7a0ea 178