From dbfb0bf9eca853826d90a7c3d4f9724c32a0933c Mon Sep 17 00:00:00 2001 From: vitrat Date: Fri, 27 Mar 2020 10:25:27 +0100 Subject: [PATCH] =?UTF-8?q?m=C3=A0s=20r=C3=A9elle=20des=20bool=C3=A9ens?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nbproject/private/private.xml | 11 +++ .../raspberry/superviseur-robot/tasks.cpp | 81 +++++++++++++++---- software/raspberry/superviseur-robot/tasks.h | 33 ++++++-- .../simulateur/nbproject/private/private.xml | 4 +- 4 files changed, 109 insertions(+), 20 deletions(-) diff --git a/software/raspberry/superviseur-robot/nbproject/private/private.xml b/software/raspberry/superviseur-robot/nbproject/private/private.xml index 39a10ef..e685a6d 100644 --- a/software/raspberry/superviseur-robot/nbproject/private/private.xml +++ b/software/raspberry/superviseur-robot/nbproject/private/private.xml @@ -7,7 +7,18 @@ + file:/home/romainv/Documents/temps_reel/dumber1/software/raspberry/superviseur-robot/lib/comrobot.cpp + file:/home/romainv/Documents/temps_reel/dumber1/software/raspberry/superviseur-robot/lib/camera.cpp + file:/home/romainv/Documents/temps_reel/dumber1/software/raspberry/superviseur-robot/lib/messages.cpp file:/home/romainv/Documents/temps_reel/dumber1/software/raspberry/superviseur-robot/tasks.h + file:/home/romainv/Documents/temps_reel/dumber1/software/raspberry/superviseur-robot/main.cpp + file:/home/romainv/Documents/temps_reel/dumber1/software/raspberry/superviseur-robot/lib/img.cpp + file:/home/romainv/Documents/temps_reel/dumber1/software/raspberry/superviseur-robot/lib/img.h + file:/home/romainv/Documents/temps_reel/dumber1/software/raspberry/superviseur-robot/tasks.cpp + file:/home/romainv/Documents/temps_reel/dumber1/software/raspberry/superviseur-robot/lib/camera.h + file:/home/romainv/Documents/temps_reel/dumber1/software/raspberry/superviseur-robot/lib/commonitor.cpp + file:/home/romainv/Documents/temps_reel/dumber1/software/raspberry/superviseur-robot/lib/messages.h + file:/home/romainv/Documents/temps_reel/dumber1/software/raspberry/superviseur-robot/lib/comrobot.h diff --git a/software/raspberry/superviseur-robot/tasks.cpp b/software/raspberry/superviseur-robot/tasks.cpp index dacb50d..8834e16 100644 --- a/software/raspberry/superviseur-robot/tasks.cpp +++ b/software/raspberry/superviseur-robot/tasks.cpp @@ -75,12 +75,11 @@ void Tasks::Init() { cerr << "Error mutex create: " << strerror(-err) << endl << flush; exit(EXIT_FAILURE); } - if (err = rt_mutex_create(&mutex_kill_battery, NULL)) { + if (err = rt_mutex_create(&mutex_killBattery, NULL)) { cerr << "Error mutex create: " << strerror(-err) << endl << flush; exit(EXIT_FAILURE); } - cout << "Mutexes created successfully" << endl << flush; /**************************************************************************************/ @@ -367,9 +366,9 @@ void Tasks::StartRobotTaskWithoutWatchdog(void *arg) { /* The task startRobot starts here */ /**************************************************************************************/ //Boolean to get the battery - rt_mutex_acquire(&mutex_kill_battery, TM_INFINITE); - killBatteryBool=0; - rt_mutex_release(&mutex_kill_battery); + rt_mutex_acquire(&mutex_killBattery, TM_INFINITE); + killBattery=0; + rt_mutex_release(&mutex_killBattery); rt_sem_p(&sem_startRobotWithoutWatchdog, TM_INFINITE); cout << "Start robot without watchdog ("; rt_mutex_acquire(&mutex_robot, TM_INFINITE); @@ -388,9 +387,9 @@ void Tasks::StartRobotTaskWithoutWatchdog(void *arg) { while (killBattery==0) { rt_task_wait_period(NULL); rt_sem_v(&sem_askBattery); - rt_mutex_acquire(&mutex_kill_battery, TM_INFINITE); - killBattery=killBatteryBool; - rt_mutex_release(&mutex_kill_battery); + rt_mutex_acquire(&mutex_killBattery, TM_INFINITE); + killBattery=killBattery; + rt_mutex_release(&mutex_killBattery); } } } @@ -414,9 +413,9 @@ void Tasks::StartRobotTaskWithWatchdog(void *arg) { /* The task startRobot starts here */ /**************************************************************************************/ //Boolean to get the battery - rt_mutex_acquire(&mutex_kill_battery, TM_INFINITE); - killBatteryBool=0; - rt_mutex_release(&mutex_kill_battery); + rt_mutex_acquire(&mutex_killBattery, TM_INFINITE); + killBattery=0; + rt_mutex_release(&mutex_killBattery); rt_sem_p(&sem_startRobotWithWatchdog, TM_INFINITE); cout << "Start robot with watchdog ("; rt_mutex_acquire(&mutex_robot, TM_INFINITE); @@ -440,9 +439,9 @@ void Tasks::StartRobotTaskWithWatchdog(void *arg) { } rt_task_wait_period(NULL); rt_sem_v(&sem_askBattery); - rt_mutex_acquire(&mutex_kill_battery, TM_INFINITE); - killBattery=killBatteryBool; - rt_mutex_release(&mutex_kill_battery); + rt_mutex_acquire(&mutex_killBattery, TM_INFINITE); + killBattery=killBattery; + rt_mutex_release(&mutex_killBattery); } } } @@ -508,6 +507,60 @@ void Tasks::AskBattery(void *arg){ } +void Tasks::Vision(void *arg){ + cout << "Start " << __PRETTY_FUNCTION__ << endl << flush; + // Synchronization barrier (waiting that all tasks are starting) + rt_sem_p(&sem_barrier, TM_INFINITE); + rt_sem_p(&sem_askBattery, TM_INFINITE); + int killVisionOk=0; + int acquireImageOk=1; + int searchArenaOk=0; + int drawArenaOk=0; + int getPositionOk=0; + Arena arena; + list positionList; + list::iterator it; + string strPos; + MessagePosition msgPos; + rt_mutex_acquire(&mutex_killVision, TM_INFINITE); + killVision=0; + rt_mutex_release(&mutex_killVision); + camera.Open(); + while(killVisionOk==0){ + while(acquireImageOk==1){ + camera.Grab(); + if(searchArenaOk==1){ + rt_mutex_acquire(&mutex_acquireImage, TM_INFINITE); + acquireImage=0; + rt_mutex_release(&mutex_acquireImage); + acquireImageOk=acquireImage; + arena=img.SearchArena(); + img.DrawArena(arena); + } + if(drawArenaOk==1){ + img.DrawArena(arena); + rt_mutex_acquire(&mutex_acquireImage, TM_INFINITE); + acquireImage=1; + rt_mutex_release(&mutex_acquireImage); + acquireImageOk=acquireImage; + } + if(getPositionOk==1){ + positionList=img.SearchRobot(arena); + it=positionList.begin(); + //it++; + //msgPos(MESSAGE_CAM_POSITION,*it); + //WriteInQueue(&q_messageToMon,msgPos);r + //img.DrawRobot(position.); + } + } + + } + +} + + + + /** * Write a message in a given queue * @param queue Queue identifier diff --git a/software/raspberry/superviseur-robot/tasks.h b/software/raspberry/superviseur-robot/tasks.h index cdcd957..ea20166 100644 --- a/software/raspberry/superviseur-robot/tasks.h +++ b/software/raspberry/superviseur-robot/tasks.h @@ -36,7 +36,7 @@ using namespace std; -class Tasks { +class Tasks{ public: /** * @brief Initializes main structures (semaphores, tasks, mutex, etc.) @@ -64,9 +64,21 @@ private: /**********************************************************************/ ComMonitor monitor; ComRobot robot; - int robotStarted = 0; - int killBatteryBool = 0; - int killRobotWithoutWd = 0; + Camera camera; + Img img; + + bool robotStarted = 0; + + //variables de fermeture batterie : + bool killBattery; + + //variables de fermeture caméra : + bool killVision; + bool acquireImage; + bool searchArena; + bool drawArena; + bool getPosition; + int move = MESSAGE_ROBOT_STOP; /**********************************************************************/ @@ -80,6 +92,7 @@ private: RT_TASK th_startRobotWithWatchdog; RT_TASK th_move; RT_TASK th_askBattery; + RT_TASK th_vision; /**********************************************************************/ /* Mutex */ @@ -88,7 +101,13 @@ private: RT_MUTEX mutex_robot; RT_MUTEX mutex_robotStarted; RT_MUTEX mutex_move; - RT_MUTEX mutex_kill_battery; + RT_MUTEX mutex_killBattery; + RT_MUTEX mutex_killVision; + RT_MUTEX mutex_acquireImage; + RT_MUTEX mutex_searchArena; + RT_MUTEX mutex_drawArena; + RT_MUTEX mutex_getPosition; + /**********************************************************************/ /* Semaphores */ @@ -99,6 +118,7 @@ private: RT_SEM sem_startRobotWithoutWatchdog; RT_SEM sem_startRobotWithWatchdog; RT_SEM sem_askBattery; + RT_SEM sem_allowStartCaptureImage; /**********************************************************************/ /* Message queues */ @@ -149,6 +169,9 @@ private: void AskBattery(void *arg); + + void Vision(void *arg); + /**********************************************************************/ /* Queue services */ /**********************************************************************/ diff --git a/software/simulateur/nbproject/private/private.xml b/software/simulateur/nbproject/private/private.xml index aef7ea3..304d47a 100755 --- a/software/simulateur/nbproject/private/private.xml +++ b/software/simulateur/nbproject/private/private.xml @@ -6,6 +6,8 @@ - + + file:/home/romainv/Documents/temps_reel/dumber1/software/simulateur/main.cpp +