just a test

Dependencies:   mbed

Fork of scoreLight_Advanced by Alvaro Cassinelli

Committer:
mbedalvaro
Date:
Wed Mar 28 14:40:01 2012 +0000
Revision:
0:345b3bc7a0ea
Child:
1:a4050fee11f7
This version (using rigid frame, base and child classes, etc) works, but the blob is strangely smaller. Need to check this.

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 0:345b3bc7a0ea 6 //blobArray.clear();// there is no need to do this, the vector does not contains anything here.
mbedalvaro 0:345b3bc7a0ea 7
mbedalvaro 0:345b3bc7a0ea 8 }
mbedalvaro 0:345b3bc7a0ea 9
mbedalvaro 0:345b3bc7a0ea 10 blobConfig::~blobConfig() {
mbedalvaro 0:345b3bc7a0ea 11 clearConfig();
mbedalvaro 0:345b3bc7a0ea 12
mbedalvaro 0:345b3bc7a0ea 13 }
mbedalvaro 0:345b3bc7a0ea 14
mbedalvaro 0:345b3bc7a0ea 15
mbedalvaro 0:345b3bc7a0ea 16
mbedalvaro 0:345b3bc7a0ea 17 // =========================================== STANDARD CONFIGURATIONS =============================================================================
mbedalvaro 0:345b3bc7a0ea 18
mbedalvaro 0:345b3bc7a0ea 19 void blobConfig::computeBoundingBox() {
mbedalvaro 0:345b3bc7a0ea 20 for(int i=0; i<blobArray.size(); i++){
mbedalvaro 0:345b3bc7a0ea 21 blobArray[i]->computeBoundingBox();
mbedalvaro 0:345b3bc7a0ea 22 }
mbedalvaro 0:345b3bc7a0ea 23 }
mbedalvaro 0:345b3bc7a0ea 24
mbedalvaro 0:345b3bc7a0ea 25 void blobConfig::clearConfig() {
mbedalvaro 0:345b3bc7a0ea 26 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 0:345b3bc7a0ea 27 blobArray.clear();
mbedalvaro 0:345b3bc7a0ea 28 numBlobs=0;// this is just equal to blobArray.size()
mbedalvaro 0:345b3bc7a0ea 29 }
mbedalvaro 0:345b3bc7a0ea 30
mbedalvaro 0:345b3bc7a0ea 31 void blobConfig::addOneElasticLoopRelax(){
mbedalvaro 0:345b3bc7a0ea 32 elasticLoop* pLoopRelax= new elasticLoop();
mbedalvaro 0:345b3bc7a0ea 33 pLoopRelax->createBlob(blobArray.size(), RELAX, vector2D(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y));
mbedalvaro 0:345b3bc7a0ea 34 // add this relaxing loop to the present config:
mbedalvaro 0:345b3bc7a0ea 35 blobArray.push_back(pLoopRelax);
mbedalvaro 0:345b3bc7a0ea 36
mbedalvaro 0:345b3bc7a0ea 37 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 0:345b3bc7a0ea 38 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 39
mbedalvaro 0:345b3bc7a0ea 40 }
mbedalvaro 0:345b3bc7a0ea 41
mbedalvaro 0:345b3bc7a0ea 42
mbedalvaro 0:345b3bc7a0ea 43 void blobConfig::addOneElasticLoopContract(){
mbedalvaro 0:345b3bc7a0ea 44 elasticLoop* pLoopRelax= new elasticLoop();
mbedalvaro 0:345b3bc7a0ea 45 pLoopRelax->createBlob(blobArray.size(), CONTRACT, vector2D(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y));
mbedalvaro 0:345b3bc7a0ea 46 // add this relaxing loop to the present config:
mbedalvaro 0:345b3bc7a0ea 47 blobArray.push_back(pLoopRelax);
mbedalvaro 0:345b3bc7a0ea 48
mbedalvaro 0:345b3bc7a0ea 49 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 0:345b3bc7a0ea 50 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 51 }
mbedalvaro 0:345b3bc7a0ea 52
mbedalvaro 0:345b3bc7a0ea 53 void blobConfig::addOneElasticLoopContractCentral(){
mbedalvaro 0:345b3bc7a0ea 54 elasticLoop* pLoopRelax= new elasticLoop();
mbedalvaro 0:345b3bc7a0ea 55 pLoopRelax->createBlob(blobArray.size(), CONTRACT_CENTRAL, vector2D(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y));
mbedalvaro 0:345b3bc7a0ea 56 // add this relaxing loop to the present config:
mbedalvaro 0:345b3bc7a0ea 57 blobArray.push_back(pLoopRelax);
mbedalvaro 0:345b3bc7a0ea 58
mbedalvaro 0:345b3bc7a0ea 59 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 0:345b3bc7a0ea 60 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 61 }
mbedalvaro 0:345b3bc7a0ea 62
mbedalvaro 0:345b3bc7a0ea 63 void blobConfig::addOneElasticContourFollowing(){
mbedalvaro 0:345b3bc7a0ea 64
mbedalvaro 0:345b3bc7a0ea 65 elasticLoop* pLoopRelax= new elasticLoop();
mbedalvaro 0:345b3bc7a0ea 66 pLoopRelax->createBlob(blobArray.size(), CONTOUR_FOLLOWING, vector2D(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y));
mbedalvaro 0:345b3bc7a0ea 67 // add this relaxing loop to the present config:
mbedalvaro 0:345b3bc7a0ea 68 blobArray.push_back(pLoopRelax);
mbedalvaro 0:345b3bc7a0ea 69
mbedalvaro 0:345b3bc7a0ea 70 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 0:345b3bc7a0ea 71 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 72 }
mbedalvaro 0:345b3bc7a0ea 73
mbedalvaro 0:345b3bc7a0ea 74
mbedalvaro 0:345b3bc7a0ea 75 void blobConfig:: addOneElasticContourFollowingFAST(){
mbedalvaro 0:345b3bc7a0ea 76 elasticLoop* pLoopRelax= new elasticLoop();
mbedalvaro 0:345b3bc7a0ea 77 pLoopRelax->createBlob(blobArray.size(), CONTOUR_FOLLOWING_FAST, vector2D(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y));
mbedalvaro 0:345b3bc7a0ea 78 // add this relaxing loop to the present config:
mbedalvaro 0:345b3bc7a0ea 79 blobArray.push_back(pLoopRelax);
mbedalvaro 0:345b3bc7a0ea 80
mbedalvaro 0:345b3bc7a0ea 81 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 0:345b3bc7a0ea 82 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 83 }
mbedalvaro 0:345b3bc7a0ea 84
mbedalvaro 0:345b3bc7a0ea 85 void blobConfig::addOneElasticBouncing(){
mbedalvaro 0:345b3bc7a0ea 86 elasticLoop* pLoopRelax= new elasticLoop();
mbedalvaro 0:345b3bc7a0ea 87 pLoopRelax->createBlob(blobArray.size(), BOUNCING, vector2D(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y));
mbedalvaro 0:345b3bc7a0ea 88 // add this relaxing loop to the present config:
mbedalvaro 0:345b3bc7a0ea 89 blobArray.push_back(pLoopRelax);
mbedalvaro 0:345b3bc7a0ea 90
mbedalvaro 0:345b3bc7a0ea 91 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 0:345b3bc7a0ea 92 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 93 }
mbedalvaro 0:345b3bc7a0ea 94
mbedalvaro 0:345b3bc7a0ea 95
mbedalvaro 0:345b3bc7a0ea 96
mbedalvaro 0:345b3bc7a0ea 97 // ==================================================================================================================================================
mbedalvaro 0:345b3bc7a0ea 98
mbedalvaro 0:345b3bc7a0ea 99
mbedalvaro 0:345b3bc7a0ea 100 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 0:345b3bc7a0ea 101 for(int i=0; i<blobArray.size(); i++){
mbedalvaro 0:345b3bc7a0ea 102 blobArray[i]->render = false;
mbedalvaro 0:345b3bc7a0ea 103 blobArray[i]->standByMode = false;
mbedalvaro 0:345b3bc7a0ea 104 }
mbedalvaro 0:345b3bc7a0ea 105 }
mbedalvaro 0:345b3bc7a0ea 106 void blobConfig::allAlive() {
mbedalvaro 0:345b3bc7a0ea 107 for(int i=0; i<blobArray.size(); i++){
mbedalvaro 0:345b3bc7a0ea 108 blobArray[i]->render = true;
mbedalvaro 0:345b3bc7a0ea 109 blobArray[i]->standByMode = true;
mbedalvaro 0:345b3bc7a0ea 110 }
mbedalvaro 0:345b3bc7a0ea 111 }
mbedalvaro 0:345b3bc7a0ea 112
mbedalvaro 0:345b3bc7a0ea 113 void blobConfig::allStandBy() {
mbedalvaro 0:345b3bc7a0ea 114 for(int i=0; i<blobArray.size(); i++) blobArray[i]->standByMode = true;
mbedalvaro 0:345b3bc7a0ea 115 }
mbedalvaro 0:345b3bc7a0ea 116
mbedalvaro 0:345b3bc7a0ea 117 void blobConfig::allResume() {
mbedalvaro 0:345b3bc7a0ea 118 for(int i=0; i<blobArray.size(); i++) blobArray[i]->standByMode = false;
mbedalvaro 0:345b3bc7a0ea 119 }
mbedalvaro 0:345b3bc7a0ea 120
mbedalvaro 0:345b3bc7a0ea 121 void blobConfig::allVisible() {
mbedalvaro 0:345b3bc7a0ea 122 for(int i=0; i<blobArray.size(); i++) blobArray[i]->render = true;
mbedalvaro 0:345b3bc7a0ea 123 }
mbedalvaro 0:345b3bc7a0ea 124
mbedalvaro 0:345b3bc7a0ea 125 void blobConfig::allInvisible() { // note that they may continue to evolve
mbedalvaro 0:345b3bc7a0ea 126 for(int i=0; i<blobArray.size(); i++) blobArray[i]->render = false;
mbedalvaro 0:345b3bc7a0ea 127 }
mbedalvaro 0:345b3bc7a0ea 128
mbedalvaro 0:345b3bc7a0ea 129 void blobConfig::update(){ // update dynamics of the blob
mbedalvaro 0:345b3bc7a0ea 130 for(int i=0; i<blobArray.size(); i++) {
mbedalvaro 0:345b3bc7a0ea 131 if ((blobArray[i]->render==true)&&(blobArray[i]->standByMode==false)) blobArray[i]->update();
mbedalvaro 0:345b3bc7a0ea 132 }
mbedalvaro 0:345b3bc7a0ea 133 }
mbedalvaro 0:345b3bc7a0ea 134
mbedalvaro 0:345b3bc7a0ea 135 void blobConfig::draw(){ // draw uses the opengl like renderer (if any), and save projected trajectory in the LaserSensingTrajectory object of each blob
mbedalvaro 0:345b3bc7a0ea 136 for(int i=0; i<blobArray.size(); i++) {
mbedalvaro 0:345b3bc7a0ea 137 if (blobArray[i]->render==true) blobArray[i]->draw();
mbedalvaro 0:345b3bc7a0ea 138 }
mbedalvaro 0:345b3bc7a0ea 139 }
mbedalvaro 0:345b3bc7a0ea 140
mbedalvaro 0:345b3bc7a0ea 141 void blobConfig::sendConfData(){
mbedalvaro 0:345b3bc7a0ea 142 // For the time being, only "per blob" data sending:
mbedalvaro 0:345b3bc7a0ea 143 // (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 0:345b3bc7a0ea 144 for(int i=0; i<blobArray.size(); i++) {
mbedalvaro 0:345b3bc7a0ea 145 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 0:345b3bc7a0ea 146 }
mbedalvaro 0:345b3bc7a0ea 147 }
mbedalvaro 0:345b3bc7a0ea 148
mbedalvaro 0:345b3bc7a0ea 149
mbedalvaro 0:345b3bc7a0ea 150
mbedalvaro 0:345b3bc7a0ea 151