Camera bancale
This commit is contained in:
parent
670fff6a0a
commit
fa2322f0bd
4 changed files with 102 additions and 62 deletions
|
@ -14,6 +14,7 @@
|
||||||
<file>file:/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/messages.cpp</file>
|
<file>file:/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/messages.cpp</file>
|
||||||
<file>file:/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/camera.cpp</file>
|
<file>file:/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/camera.cpp</file>
|
||||||
<file>file:/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/main.cpp</file>
|
<file>file:/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/main.cpp</file>
|
||||||
|
<file>file:/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/img.h</file>
|
||||||
<file>file:/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/messages.h</file>
|
<file>file:/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/messages.h</file>
|
||||||
</group>
|
</group>
|
||||||
</open-files>
|
</open-files>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#Fri Apr 07 11:52:43 CEST 2023
|
#Tue Apr 11 12:37:03 CEST 2023
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/nbproject/Package-Debug__RPI_.bash=c1679401432930
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/nbproject/Package-Debug__RPI_.bash=c1679401432930
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/messages.cpp=c1680248859421
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/messages.cpp=c1680248859421
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp=c1679401432864
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp=c1679401432864
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/gdbsudo.sh=c1679401432813
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/gdbsudo.sh=c1679401432813
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/base64/LICENSE=c1679401432832
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/base64/LICENSE=c1679401432832
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp=c1679401457314
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp=c1679401457314
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/tasks.cpp=c1680861150700
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/tasks.cpp=c1681209407979
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/.dep.inc=c1679401432701
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/.dep.inc=c1679401432701
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/nbproject/Makefile-variables.mk=c1679401432922
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/nbproject/Makefile-variables.mk=c1679401432922
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/img.cpp=c1679401457320
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/img.cpp=c1679401457320
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/Makefile=c1679401432709
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/Makefile=c1679401432709
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/.gitignore=c1679401432820
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/.gitignore=c1679401432820
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/wrapper.c=c1679401457381
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/wrapper.c=c1679401457381
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/tasks.h=c1680860665596
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/tasks.h=c1681208571544
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/main.cpp=c1679404095224
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/main.cpp=c1679404095224
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/nbproject/project.properties=c1679401432983
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/nbproject/project.properties=c1679401432983
|
||||||
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/camera.cpp=c1679401457304
|
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/camera.cpp=c1679401457304
|
||||||
|
|
|
@ -104,6 +104,14 @@ void Tasks::Init() {
|
||||||
cerr << "Error mutex create: " << strerror(-err) << endl << flush;
|
cerr << "Error mutex create: " << strerror(-err) << endl << flush;
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
if (err = rt_mutex_create(&mutex_battery, NULL)) {
|
||||||
|
cerr << "Error mutex create: " << strerror(-err) << endl << flush;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
if (err = rt_mutex_create(&mutex_image, NULL)) {
|
||||||
|
cerr << "Error mutex create: " << strerror(-err) << endl << flush;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
cout << "Mutexes created successfully" << endl << flush;
|
cout << "Mutexes created successfully" << endl << flush;
|
||||||
|
|
||||||
/**************************************************************************************/
|
/**************************************************************************************/
|
||||||
|
@ -347,9 +355,13 @@ void Tasks::ReceiveFromMonTask(void *arg) {
|
||||||
rt_mutex_release(&mutex_answer_arena);
|
rt_mutex_release(&mutex_answer_arena);
|
||||||
rt_sem_v(&sem_answerSync);
|
rt_sem_v(&sem_answerSync);
|
||||||
}else if(msgRcv->CompareID(MESSAGE_CAM_ASK_ARENA)){
|
}else if(msgRcv->CompareID(MESSAGE_CAM_ASK_ARENA)){
|
||||||
|
cout << "Enabling search arena" << endl << flush;
|
||||||
rt_mutex_acquire(&mutex_search_arena, TM_INFINITE);
|
rt_mutex_acquire(&mutex_search_arena, TM_INFINITE);
|
||||||
searchArena = 1;
|
searchArena = 1;
|
||||||
rt_mutex_release(&mutex_search_arena);
|
rt_mutex_release(&mutex_search_arena);
|
||||||
|
rt_mutex_acquire(&mutex_image, TM_INFINITE);
|
||||||
|
getImage = 0;
|
||||||
|
rt_mutex_release(&mutex_image);
|
||||||
cout << "Search arena true " << endl << flush;
|
cout << "Search arena true " << endl << flush;
|
||||||
}else if(msgRcv->CompareID(MESSAGE_CAM_POSITION_COMPUTE_START)){
|
}else if(msgRcv->CompareID(MESSAGE_CAM_POSITION_COMPUTE_START)){
|
||||||
rt_mutex_acquire(&mutex_robot_pos, TM_INFINITE);
|
rt_mutex_acquire(&mutex_robot_pos, TM_INFINITE);
|
||||||
|
@ -361,6 +373,11 @@ void Tasks::ReceiveFromMonTask(void *arg) {
|
||||||
robotPos = 0;
|
robotPos = 0;
|
||||||
rt_mutex_release(&mutex_robot_pos);
|
rt_mutex_release(&mutex_robot_pos);
|
||||||
cout << "Robot Pos false" << endl << flush;
|
cout << "Robot Pos false" << endl << flush;
|
||||||
|
}else if(msgRcv->CompareID(MESSAGE_CAM_POSITION_COMPUTE_STOP)){
|
||||||
|
rt_mutex_acquire(&mutex_robot_pos, TM_INFINITE);
|
||||||
|
robotPos = 0;
|
||||||
|
rt_mutex_release(&mutex_robot_pos);
|
||||||
|
cout << "Robot Pos false" << endl << flush;
|
||||||
}
|
}
|
||||||
|
|
||||||
delete(msgRcv); // must be deleted manually, no consumer
|
delete(msgRcv); // must be deleted manually, no consumer
|
||||||
|
@ -454,10 +471,16 @@ void Tasks::StartCameraTask(void *arg) {
|
||||||
rt_mutex_acquire(&mutex_camera, TM_INFINITE);
|
rt_mutex_acquire(&mutex_camera, TM_INFINITE);
|
||||||
if(!cameraStarted){
|
if(!cameraStarted){
|
||||||
status = camera->Open();
|
status = camera->Open();
|
||||||
cout << "Camera Opened" << endl << flush;
|
cout << "Camera Opened" << endl << flush; // Toggle a modifier ?
|
||||||
|
rt_mutex_acquire(&mutex_image, TM_INFINITE);
|
||||||
|
getImage = 1;
|
||||||
|
rt_mutex_release(&mutex_image);
|
||||||
}else{
|
}else{
|
||||||
camera->Close();
|
camera->Close();
|
||||||
status = true;
|
status = true;
|
||||||
|
rt_mutex_acquire(&mutex_image, TM_INFINITE);
|
||||||
|
getImage = 0;
|
||||||
|
rt_mutex_release(&mutex_image);
|
||||||
cout << "Camera Closed" << endl << flush;
|
cout << "Camera Closed" << endl << flush;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -476,6 +499,7 @@ void Tasks::StartCameraTask(void *arg) {
|
||||||
rt_mutex_release(&mutex_camera);
|
rt_mutex_release(&mutex_camera);
|
||||||
rt_mutex_release(&mutex_cameraStarted);
|
rt_mutex_release(&mutex_cameraStarted);
|
||||||
|
|
||||||
|
|
||||||
cout << "Cam success! " << endl <<flush;
|
cout << "Cam success! " << endl <<flush;
|
||||||
cout << "Fin de start cam" << endl << flush;
|
cout << "Fin de start cam" << endl << flush;
|
||||||
}
|
}
|
||||||
|
@ -507,7 +531,7 @@ void Tasks::MoveTask(void *arg) {
|
||||||
cpMove = move;
|
cpMove = move;
|
||||||
rt_mutex_release(&mutex_move);
|
rt_mutex_release(&mutex_move);
|
||||||
|
|
||||||
cout << " move: " << cpMove;
|
cout << " move: " << cpMove << endl << flush;
|
||||||
|
|
||||||
rt_mutex_acquire(&mutex_robot, TM_INFINITE);
|
rt_mutex_acquire(&mutex_robot, TM_INFINITE);
|
||||||
robot.Write(new Message((MessageID)cpMove));
|
robot.Write(new Message((MessageID)cpMove));
|
||||||
|
@ -534,21 +558,19 @@ void Tasks::BatteryTask(void *arg) {
|
||||||
/**************************************************************************************/
|
/**************************************************************************************/
|
||||||
rt_task_set_periodic(NULL, TM_NOW, 500*1000*1000);
|
rt_task_set_periodic(NULL, TM_NOW, 500*1000*1000);
|
||||||
|
|
||||||
/*while (1) {
|
while (1) {
|
||||||
rt_task_wait_period(NULL);
|
rt_task_wait_period(NULL);
|
||||||
rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE);
|
rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE);
|
||||||
rs = robotStarted;
|
rs = robotStarted;
|
||||||
if (rs == 1) {
|
if (rs == 1) {
|
||||||
rt_mutex_acquire(&mutex_robot, TM_INFINITE);
|
rt_mutex_acquire(&mutex_robot, TM_INFINITE);
|
||||||
Message* batteryReply = robot.Write(robot.GetBattery());
|
MessageBattery* batteryReply = (MessageBattery*)robot.Write(new Message(MESSAGE_ROBOT_BATTERY_GET));
|
||||||
string batteryLevel = batteryReply->ToString();
|
|
||||||
rt_mutex_release(&mutex_robot);
|
rt_mutex_release(&mutex_robot);
|
||||||
WriteInQueue(&q_messageToMon, batteryReply);
|
WriteInQueue(&q_messageToMon, batteryReply);
|
||||||
|
|
||||||
}
|
}
|
||||||
rt_mutex_release(&mutex_robotStarted);
|
rt_mutex_release(&mutex_robotStarted);
|
||||||
|
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -556,8 +578,9 @@ void Tasks::BatteryTask(void *arg) {
|
||||||
*/
|
*/
|
||||||
void Tasks::CameraTask(void *arg){
|
void Tasks::CameraTask(void *arg){
|
||||||
int cam;
|
int cam;
|
||||||
|
int grab;
|
||||||
Img* image;
|
Img* image;
|
||||||
Arena arenaSaved ;
|
Arena arenaSaved,arena ;
|
||||||
std::list<Position> robotPosition;
|
std::list<Position> robotPosition;
|
||||||
MessageImg* imgToSend;
|
MessageImg* imgToSend;
|
||||||
|
|
||||||
|
@ -575,6 +598,7 @@ void Tasks::CameraTask(void *arg){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(getImage){
|
||||||
cout << "Traitement de l'image" << endl << flush ;
|
cout << "Traitement de l'image" << endl << flush ;
|
||||||
rt_mutex_acquire(&mutex_camera, TM_INFINITE);
|
rt_mutex_acquire(&mutex_camera, TM_INFINITE);
|
||||||
// Lancer le traitement périodique
|
// Lancer le traitement périodique
|
||||||
|
@ -583,8 +607,11 @@ void Tasks::CameraTask(void *arg){
|
||||||
image = img.Copy();
|
image = img.Copy();
|
||||||
rt_mutex_release(&mutex_camera);
|
rt_mutex_release(&mutex_camera);
|
||||||
rt_mutex_acquire(&mutex_search_arena, TM_INFINITE);
|
rt_mutex_acquire(&mutex_search_arena, TM_INFINITE);
|
||||||
Arena arena = image->SearchArena(); // Mise a jour de l'arene tout le temps pour la position du robot mais draw si search arena = true
|
arena = image->SearchArena(); // Mise a jour de l'arene tout le temps pour la position du robot mais draw si search arena = true
|
||||||
if(searchArena){
|
if(searchArena){
|
||||||
|
rt_mutex_acquire(&mutex_image, TM_INFINITE);
|
||||||
|
getImage = 0;
|
||||||
|
rt_mutex_release(&mutex_image);
|
||||||
// chopper l'arene
|
// chopper l'arene
|
||||||
if(arena.IsEmpty()){
|
if(arena.IsEmpty()){
|
||||||
cout << "Arena empty" << endl << flush;
|
cout << "Arena empty" << endl << flush;
|
||||||
|
@ -602,7 +629,7 @@ void Tasks::CameraTask(void *arg){
|
||||||
rt_mutex_acquire(&mutex_robot_pos, TM_INFINITE);
|
rt_mutex_acquire(&mutex_robot_pos, TM_INFINITE);
|
||||||
if(robotPos){
|
if(robotPos){
|
||||||
// chopper le robot
|
// chopper le robot
|
||||||
cout << "Pos du robot pls !" ;
|
cout << "Searching robot positions" << endl << flush ;
|
||||||
robotPosition = image->SearchRobot(arena);
|
robotPosition = image->SearchRobot(arena);
|
||||||
|
|
||||||
//Traitement du robot
|
//Traitement du robot
|
||||||
|
@ -613,7 +640,6 @@ void Tasks::CameraTask(void *arg){
|
||||||
{
|
{
|
||||||
WriteInQueue(&q_messageToMon, new MessagePosition(MESSAGE_CAM_POSITION,position)); // Envoi de toutes les positions
|
WriteInQueue(&q_messageToMon, new MessagePosition(MESSAGE_CAM_POSITION,position)); // Envoi de toutes les positions
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
rt_mutex_release(&mutex_robot_pos);
|
rt_mutex_release(&mutex_robot_pos);
|
||||||
// Envoi de l'image
|
// Envoi de l'image
|
||||||
|
@ -621,17 +647,26 @@ void Tasks::CameraTask(void *arg){
|
||||||
imgToSend = new MessageImg(MESSAGE_CAM_IMAGE,image);
|
imgToSend = new MessageImg(MESSAGE_CAM_IMAGE,image);
|
||||||
WriteInQueue(&q_messageToMon, imgToSend);
|
WriteInQueue(&q_messageToMon, imgToSend);
|
||||||
|
|
||||||
rt_sem_p(&sem_answerSync, TM_INFINITE);
|
}
|
||||||
rt_mutex_acquire(&mutex_answer_arena, TM_INFINITE);
|
|
||||||
|
|
||||||
|
|
||||||
|
rt_mutex_acquire(&mutex_answer_arena, TM_INFINITE);
|
||||||
|
if(searchArena){
|
||||||
|
rt_sem_p(&sem_answerSync, TM_INFINITE);
|
||||||
if(arenaConfirm){
|
if(arenaConfirm){
|
||||||
// Arena OK
|
// Arena OK
|
||||||
|
cout << "Arena Saved" << endl << flush;
|
||||||
arenaSaved = arena;
|
arenaSaved = arena;
|
||||||
searchArena = 0;
|
|
||||||
}else{
|
}else{
|
||||||
// Arena not OK
|
// Arena not OK
|
||||||
|
cout << "Arena Dumped" << endl << flush;
|
||||||
// Rien ?
|
// Rien ?
|
||||||
}
|
}
|
||||||
|
rt_mutex_acquire(&mutex_image, TM_INFINITE);
|
||||||
|
getImage = 1; // changer en booleen pour synchroniser plutot que ça
|
||||||
|
rt_mutex_release(&mutex_image);
|
||||||
|
searchArena = 0;
|
||||||
|
}
|
||||||
rt_mutex_release(&mutex_answer_arena);
|
rt_mutex_release(&mutex_answer_arena);
|
||||||
rt_mutex_release(&mutex_search_arena);
|
rt_mutex_release(&mutex_search_arena);
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,6 +70,7 @@ private:
|
||||||
int cameraStarted = 0;
|
int cameraStarted = 0;
|
||||||
int arenaConfirm = 0;
|
int arenaConfirm = 0;
|
||||||
int searchArena = 0;
|
int searchArena = 0;
|
||||||
|
int getImage = 0;
|
||||||
int move = MESSAGE_ROBOT_STOP;
|
int move = MESSAGE_ROBOT_STOP;
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
|
@ -96,6 +97,9 @@ private:
|
||||||
RT_MUTEX mutex_search_arena;
|
RT_MUTEX mutex_search_arena;
|
||||||
RT_MUTEX mutex_answer_arena;
|
RT_MUTEX mutex_answer_arena;
|
||||||
RT_MUTEX mutex_robot_pos;
|
RT_MUTEX mutex_robot_pos;
|
||||||
|
RT_MUTEX mutex_battery;
|
||||||
|
RT_MUTEX mutex_image;
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
/* Semaphores */
|
/* Semaphores */
|
||||||
|
|
Loading…
Reference in a new issue