fonction terminée à vérifier

This commit is contained in:
Romain Vitrat 2020-03-28 08:43:44 +01:00
parent 796bfcc45f
commit aa79fbc9d2
2 changed files with 42 additions and 8 deletions

View file

@ -146,6 +146,10 @@ void Tasks::Init() {
cerr << "Error task create: " << strerror(-err) << endl << flush;
exit(EXIT_FAILURE);
}
if (err = rt_task_create(&th_vision, "th_vision", 0, PRIORITY_TMOVE, 0)) {
cerr << "Error task create: " << strerror(-err) << endl << flush;
exit(EXIT_FAILURE);
}
cout << "Tasks created successfully" << endl << flush;
@ -199,6 +203,10 @@ void Tasks::Run() {
cerr << "Error task start: " << strerror(-err) << endl << flush;
exit(EXIT_FAILURE);
}
if (err = rt_task_start(&th_vision, (void(*)(void*)) & Tasks::Vision, this)) {
cerr << "Error task start: " << strerror(-err) << endl << flush;
exit(EXIT_FAILURE);
}
cout << "Tasks launched" << endl << flush;
}
@ -507,6 +515,9 @@ void Tasks::AskBattery(void *arg){
}
//This task works on a difficult principle that fully make it controllable through
// monitor, accessing booleans variables to set getPosition or searchArena
void Tasks::Vision(void *arg){
cout << "Start " << __PRETTY_FUNCTION__ << endl << flush;
// Synchronization barrier (waiting that all tasks are starting)
@ -521,7 +532,12 @@ void Tasks::Vision(void *arg){
list<Position> positionList;
list<Position>::iterator it;
string strPos;
MessagePosition msgPos;
MessagePosition* msgPos;
Message* msgPosMsg;
MessageImg* msgImg;
Message* msgImgMsg;
msgPos->SetID(MESSAGE_CAM_POSITION);
msgImg->SetID(MESSAGE_CAM_IMAGE);
rt_mutex_acquire(&mutex_killVision, TM_INFINITE);
killVision=0;
rt_mutex_release(&mutex_killVision);
@ -545,17 +561,35 @@ void Tasks::Vision(void *arg){
acquireImageOk=acquireImage;
}
if(getPositionOk==1){
//On démarre la recherche du robot dans la zone définie par l'arène
positionList=img.SearchRobot(arena);
//Définitition et assignation de l'itérateur de parcrous de la liste positionList
it=positionList.begin();
//it++;
//msgPos(MESSAGE_CAM_POSITION,*it);
//WriteInQueue(&q_messageToMon,msgPos);r
//img.DrawRobot(position.);
//Définition d'un messagePosition qui va contenir l'information (x,y)
msgPos->SetPosition(*it);
//Transformation en message classique
msgPosMsg=msgPos->Copy();
//Envoi
WriteInQueue(&q_messageToMon,msgPos);
//Dessis du robot sur l'image
img.DrawRobot(*it);
}
//Définition d'un messageImg contenant l'image avec le robot et l'arène dessinés (ou pas)
msgImg->SetImage(&img);
//Transformation en message classique
msgImgMsg=msgImg->Copy();
//Envoi
WriteInQueue(&q_messageToMon,msgImg);
}
}
rt_mutex_acquire(&mutex_searchArena, TM_INFINITE);
searchArena=0;
rt_mutex_release(&mutex_searchArena);
searchArenaOk=1;
rt_mutex_acquire(&mutex_getPosition, TM_INFINITE);
getPosition=0;
rt_mutex_release(&mutex_getPosition);
getPositionOk=1;
}

View file

@ -135,7 +135,7 @@ int main(int argc, char const *argv[]) {
break;
case LABEL_ROBOT_START_WITH_WD:
s += LABEL_ROBOT_OK;
cout << ">>> I start without watchdog" << endl;
cout << ">>> I start with watchdog" << endl;
break;
case LABEL_ROBOT_MOVE:
switch (buffer[2]) {