Compare commits

...

87 commits

Author SHA1 Message Date
Robin Marin-Muller
0121dc5707 Fixed timing issue with battery 2024-05-15 20:15:47 +02:00
Robin Marin-Muller
d89d36d040 Fully working positions with multiple robots 2024-05-15 19:37:20 +02:00
Robin Marin-Muller
ce68e09679 Added basic position management. 2024-05-15 18:39:08 +02:00
Robin Marin-Muller
5b9656c67a Fixed mutex issues with arena. Fully working arena. 2024-05-15 17:32:53 +02:00
fc2a05ab13 Added comments. *maybe* fixed issue with overlay not showing when choosing arena. 2024-05-14 21:44:18 +02:00
0792fc301d Added semaphore for ManageCamera Task. Added some comments. 2024-05-14 20:49:26 +02:00
9df1899580 Added semaphore for Arena 2024-05-14 13:55:27 +02:00
Robin Marin-Muller
8b39e4e099 Fixed issues with Arena, but not displaying overlay yet 2024-05-14 10:56:58 +02:00
866412162b Renamed Tasks to respect requirements 2024-05-11 22:14:08 +02:00
61b7855f3c Fixed issue with cam opening/closing. Changing how Camera behaves and Arena 2024-05-11 14:35:51 +02:00
e018b5d0f4 Storing into a vector the choosen Arena 2024-05-11 12:11:24 +02:00
5904a21007 Added Mutex and Thread management for arenaChoice. 2024-05-11 11:20:44 +02:00
Robin Marin-Muller
8f84e6d42e Arena detection working without Mutexes 2024-05-07 20:03:15 +02:00
Robin Marin-Muller
80fa2240f8 Fixed battery error 2024-04-04 18:13:03 +02:00
Robin Marin-Muller
c67814a39b Added acknowledge, created SendToRobot() 2024-04-04 17:55:02 +02:00
Robin Marin-Muller
b7fae99df4 Fully working Camera closing 2024-04-04 17:27:28 +02:00
Marin-Muller Robin
b75a775775 Fully working Camera opening 2024-04-04 17:07:38 +02:00
8d8dc0586f Camera: Added boilerplate for camera opening and image gathering (to test). Battery: Sending data to monitor. 2024-03-26 23:17:38 +01:00
Marin-Muller Robin
7d8d4456aa Battery is now fully working. 2024-03-26 16:52:41 +01:00
Marin-Muller Robin
9a88a66cc1 Added battery monitoring task 2024-03-26 15:27:20 +01:00
dimercur
ae59f19ecc Documentation finie, reprise potentielle a prevoir pour retirer des balises inutiles 2024-01-11 15:36:58 +01:00
dimercur
d21c4b2ea3 Debut de documentation doxygen + renommage de module 2024-01-09 16:59:52 +01:00
dimercur
4d4882b09d Mise a jour de la documentation technique du robot v3 2023-12-18 15:38:17 +01:00
dimercur
a6d5dfa98a mise à jour de la doc technique du robot 2023-11-22 12:07:26 +01:00
dimercur
2a8686a100 Debut de la doc dumber v3 2023-10-20 15:30:02 +02:00
dimercur
18c5cb2eb0 Preparation de la version dumber3 2.1 et creation de la cible 'Release' 2023-10-12 14:33:37 +02:00
dimercur
beefcb3ca8 Premiere version entirement debuggée et fonctionelle 2023-10-12 14:14:23 +02:00
dimercur
1d27411326 Ajout d'un systeme de panic pour tracer des erreurs irrecuperables 2023-10-11 18:01:04 +02:00
dimercur
64b8f9fe08 creation des niveau de battery, a regler sur banc 2023-10-11 16:04:45 +02:00
dimercur
c5250eb3f4 Rationalisation des messages batterie, la tension n'est plus envoyé que pour test 2023-10-10 17:31:35 +02:00
dimercur
7d9e38f3ef Fonction moteur marche a peu pres correctement. Asservissement a revoir cependant 2023-10-10 16:03:25 +02:00
dimercur
149a56fbac Ajout de la commande stop (M=0) dasn la liste des commande X-ctu 2023-10-10 11:32:15 +02:00
dimercur
a426931ad5 Resolution du probleme de demarrage des moteurs + correction du modele de puce dans le projet STM32cubeIDE 2023-10-09 17:21:19 +02:00
dimercur
aa2c734535 les commandes marchent, mais les moteurs non: probleme de puce selectionnée dasn l'IDE 2023-10-09 16:46:28 +02:00
dimercur
067fbef0fb remarche mais probleme probable de fragmentation memoire 2023-10-06 17:21:15 +02:00
dimercur
f8f7ab84ef Gros jardinage 2023-10-06 15:17:04 +02:00
vezde
aae905f551 PCB V2.2 avec une self sur AVDD 2023-04-14 17:21:54 +02:00
vezde
134ff079fe Batterie OK 2023-04-14 16:30:05 +02:00
vezde
23eac89c23 asservissement moteur de base OK 2023-04-13 15:28:53 +02:00
vezde
aa83f00d28 Driver XBEE semble enfin marcher correctement 2023-04-11 17:14:18 +02:00
vezde
c6ad9b7094 Driver moteurs a finir, le reste est a peu pres en place. Grosse seance de test en prevision (moteurs, xbee, application, commandes, batterie) 2023-03-31 15:17:01 +02:00
vezde
f319857e0d remaniement des drivers xbee et commands 2023-03-24 18:18:43 +01:00
vezde
85bf7179df Reorganisation des fichiers du firmware 2023-03-22 12:02:07 +01:00
vezde
7297bcc92d Mise a jour sur les pcbs de dumber v3 2023-02-17 16:40:09 +01:00
vezde
f0b4ab2957 Mise a jour PCB et coque. Des fichiers STEP ne sont pas encore remontés car trop gros 2022-11-30 11:06:55 +01:00
vezde
c51360920c Dernier correctif pour renforcer l'affichage des images 2022-10-20 15:26:39 +02:00
vezde
2cd8e1d798 suppression des moniteurs en C# et en python-text 2022-10-20 14:27:22 +02:00
vezde
1944ee80d1 Ajout de l'affichage de la position dans le moniteur + nettoyage dans le code des superviseurs 2022-10-20 14:25:45 +02:00
vezde
e33b24b0fd Ajout d'un projet en pthread + ajout support des images sur moniteur 2022-10-19 18:33:42 +02:00
vezde
b687bc01ef Projet netbeans converti vers cobalt. Raspicam non necessaire desormais 2022-10-18 16:31:54 +02:00
vezde
5cf34b3e9d oubli de .cproject .mxproject 2022-10-18 10:35:27 +02:00
vezde
030b0d1bd4 sauvegarde avant basculement de branche 2022-10-18 10:33:48 +02:00
vezde
840748461a Modification du PCB suite au passage au MCU STM32L071CBT6 2022-09-23 14:36:19 +02:00
vezde
c76938b079 changement de puce vers STM32L071CBT6 2022-09-23 10:12:32 +02:00
vezde
4e10472c33 premiers modules du firwmare dumber 3 2022-09-15 15:44:21 +02:00
vezde
83f7e67c7b Correction de plusieurs erreurs sur la PCB, passé en version 1.1 2022-08-31 14:28:52 +02:00
vezde
44454a8dcf modification mineur du pcb 2022-08-22 16:42:36 +02:00
vezde
8036b27460 rajout de fichiers .gitignore 2022-07-08 09:45:59 +02:00
vezde
a9416d70bb nouvelle version pcb dumber + nouvelle version monietur en QT 2022-07-07 17:08:45 +02:00
vezde
fea60b1cc0 PCB fini 2022-06-14 14:47:54 +02:00
vezde
cdebd8ac4e Schema complet, projet logiciel demarré 2022-06-10 16:48:57 +02:00
vezde
7fdbb9e399 Debut réalisation PCB 2022-06-08 17:29:59 +02:00
Sebastien DI MERCURIO
a624f8794e nouvelle version de dumber 2022-05-30 16:14:19 +02:00
vezde
2ddb454c38 conversion du project cubeide du robot pour cubeide 1.7 2022-03-18 15:15:30 +01:00
vezde
4cdb3c0a56 Recuperation du projet chargeur depuis la branche dev 2022-03-18 14:40:48 +01:00
vezde
736c55164b Recuperation du projet CubeIDe des robots depuis la branche jpo2019 2022-03-18 14:35:02 +01:00
vezde
fda59fc14d ajout de commentaire dans monitor-python.py 2022-02-07 11:02:42 +01:00
vezde
5e6f579007 ajout d'un moniteur en python et ligne de commande 2022-02-04 15:41:17 +01:00
PE Hladik
a3fc2d8815 ajout configuration plugin c/c++ netbeans 2020-02-23 17:57:57 +01:00
pehladik
d18b368266
Merge pull request #3 from d-a-v/conception_typo
conception_robot: typos
2019-05-20 10:48:33 +02:00
pehladik
39501c4c63
Merge pull request #4 from d-a-v/guidecompilation
guide compilation: typos
2019-05-20 10:48:06 +02:00
david gauchard
9a4c4917e0 typos 2019-05-07 16:51:10 +02:00
david gauchard
181d03c553 typos 2019-05-07 16:42:14 +02:00
Sébastien DI MERCURIO
6d3307f1f3 merge de la branche dev du repertoire software/monitor/monitor 2019-04-11 13:03:05 +02:00
Sébastien DI MERCURIO
e44af5cddc Re-merge depuis la branche dev du repertoire software/raspberry/superviseur-robot qui n'etait pas à jour 2019-04-11 12:29:21 +02:00
Sébastien DI MERCURIO
491fae55d5 Merge superviseur/robot depuis la branche dev 2019-04-11 12:25:35 +02:00
Sébastien DI MERCURIO
34be2bb151 Merge branch 'master' of https://github.com/INSA-GEI/dumber 2019-04-11 11:13:48 +02:00
Sébastien DI MERCURIO
0ac343ee95 Merge branch 'dev' of https://github.com/INSA-GEI/dumber 2019-04-11 11:13:24 +02:00
PE Hladik
b6c6143584 correction sujets 2019-04-11 10:22:51 +02:00
pehladik
ac01c1f50a
Merge pull request #1 from Terae/patch-1
Typo
2019-04-11 10:01:04 +02:00
pehladik
cc84086479 update lib 2019-04-11 08:46:48 +02:00
Benjamin BIGEY
ebc25adc63
Typo 2019-04-01 13:56:53 +02:00
Sébastien DI MERCURIO
ea3b47cdac Merge branch 'dev' of https://github.com/INSA-GEI/dumber 2019-03-17 21:21:25 +01:00
pehladik
4934190959
Delete .DS_Store 2019-03-05 15:44:47 +01:00
pehladik
2f0706a689
Delete .DS_Store 2019-03-05 15:44:30 +01:00
pehladik
51f345c952
Delete .DS_Store 2019-03-05 15:44:16 +01:00
PE Hladik
6db2a525a2 ajout rapport étudiant 2019-03-05 15:39:56 +01:00
561 changed files with 1104421 additions and 64541 deletions

8
.gitignore vendored
View file

@ -64,4 +64,10 @@ GUI
/software/raspberry/superviseur-robot/superviseur/dist/ /software/raspberry/superviseur-robot/superviseur/dist/
/software/raspberry/testeur/testeur/build/ /software/raspberry/testeur/testeur/build/
/software/raspberry/testeur/testeur/dist/ /software/raspberry/testeur/testeur/dist/
/software/dumber3/Release/
/software/dumber3/Debug/
/software/dumber3/Tests/
/software/dumber3/workspace/
/doc/Doc\ robot/doxygen/

18
.vscode/c_cpp_properties.json vendored Normal file
View file

@ -0,0 +1,18 @@
{
"configurations": [
{
"name": "linux-gcc-x64",
"includePath": [
"${workspaceFolder}/**"
],
"compilerPath": "/usr/bin/gcc",
"cStandard": "${default}",
"cppStandard": "${default}",
"intelliSenseMode": "linux-gcc-x64",
"compilerArgs": [
""
]
}
],
"version": 4
}

16
.vscode/launch.json vendored Normal file
View file

@ -0,0 +1,16 @@
{
// Utilisez IntelliSense pour en savoir plus sur les attributs possibles.
// Pointez pour afficher la description des attributs existants.
// Pour plus d'informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python : fichier actif",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": false
}
]
}

59
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,59 @@
{
"C_Cpp_Runner.cCompilerPath": "gcc",
"C_Cpp_Runner.cppCompilerPath": "g++",
"C_Cpp_Runner.debuggerPath": "gdb",
"C_Cpp_Runner.cStandard": "",
"C_Cpp_Runner.cppStandard": "",
"C_Cpp_Runner.msvcBatchPath": "",
"C_Cpp_Runner.useMsvc": false,
"C_Cpp_Runner.warnings": [
"-Wall",
"-Wextra",
"-Wpedantic",
"-Wshadow",
"-Wformat=2",
"-Wcast-align",
"-Wconversion",
"-Wsign-conversion",
"-Wnull-dereference"
],
"C_Cpp_Runner.msvcWarnings": [
"/W4",
"/permissive-",
"/w14242",
"/w14287",
"/w14296",
"/w14311",
"/w14826",
"/w44062",
"/w44242",
"/w14905",
"/w14906",
"/w14263",
"/w44265",
"/w14928"
],
"C_Cpp_Runner.enableWarnings": true,
"C_Cpp_Runner.warningsAsError": false,
"C_Cpp_Runner.compilerArgs": [],
"C_Cpp_Runner.linkerArgs": [],
"C_Cpp_Runner.includePaths": [],
"C_Cpp_Runner.includeSearch": [
"*",
"**/*"
],
"C_Cpp_Runner.excludeSearch": [
"**/build",
"**/build/**",
"**/.*",
"**/.*/**",
"**/.vscode",
"**/.vscode/**"
],
"C_Cpp_Runner.useAddressSanitizer": false,
"C_Cpp_Runner.useUndefinedSanitizer": false,
"C_Cpp_Runner.useLeakSanitizer": false,
"C_Cpp_Runner.showCompilationTime": false,
"C_Cpp_Runner.useLinkTimeOptimization": false,
"C_Cpp_Runner.msvcSecureNoWarnings": false
}

View file

@ -8,3 +8,6 @@ Depot du projet de temps reel 4eme année au departement GEI de l'INSA Toulouse.
- doc: contient les sujets de TD et TP - doc: contient les sujets de TD et TP
- aruco_markers: Script de generation des tags (aruco) utilisés sur les robots - aruco_markers: Script de generation des tags (aruco) utilisés sur les robots
/home/xenomai/.netbeans/remote/10.105.0.144/insa-10577-Linux-x86_64/home/marin-muller/Documents/4A/Robot/dumber/software/raspberry/superviseur-robot/dist/Debug__RPI_/GNU-Linux

View file

@ -0,0 +1,53 @@
<mxfile host="app.diagrams.net" modified="2023-11-21T12:48:07.142Z" agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/119.0" etag="H5Q9Ykphl-WS1KJXH4T_" version="22.1.3" type="device">
<diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">
<mxGraphModel dx="1244" dy="911" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="7baba1c4bc27f4b0-2" value="Robot" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="480" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-10" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-2" vertex="1">
<mxGeometry x="45" y="100" width="10" height="120" as="geometry" />
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-1" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=1.279;entryY=0.784;entryDx=0;entryDy=0;entryPerimeter=0;" parent="7baba1c4bc27f4b0-2" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="55" y="130" as="sourcePoint" />
<mxPoint x="100" y="200" as="targetPoint" />
<Array as="points">
<mxPoint x="105" y="130" />
<mxPoint x="130" y="140" />
<mxPoint x="130" y="200" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-2" value="val = 2 si batterie chargée&lt;br&gt;val = 1 si batterie faible&lt;br&gt;val = 0 si batterie vide" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="HzyZGsg6_ylir2WwqlqJ-1" vertex="1" connectable="0">
<mxGeometry x="-0.1338" y="1" relative="1" as="geometry">
<mxPoint x="-1" y="11" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-8" value="Ordinateur" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="290" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-9" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-8" vertex="1">
<mxGeometry x="45" y="100" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-30" value="val" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.119;exitY=0.988;exitDx=0;exitDy=0;exitPerimeter=0;" parent="7baba1c4bc27f4b0-8" source="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="55" y="220" as="targetPoint" />
<Array as="points">
<mxPoint x="495.5" y="220" />
</Array>
<mxPoint x="795.5" y="220" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-11" value="GET_BATTERY" style="html=1;verticalAlign=bottom;endArrow=block;entryX=0;entryY=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;" parent="1" source="7baba1c4bc27f4b0-9" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="410" y="370" as="sourcePoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View file

@ -0,0 +1,52 @@
<mxfile host="app.diagrams.net" modified="2023-11-21T12:44:54.545Z" agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/119.0" etag="J3T64XuEu5BhQiDO6xH4" version="22.1.3" type="device">
<diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">
<mxGraphModel dx="1244" dy="911" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="7baba1c4bc27f4b0-2" value="Robot" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="480" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-10" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-2" vertex="1">
<mxGeometry x="45" y="100" width="10" height="120" as="geometry" />
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-1" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=1.279;entryY=0.784;entryDx=0;entryDy=0;entryPerimeter=0;" parent="7baba1c4bc27f4b0-2" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="55" y="130" as="sourcePoint" />
<mxPoint x="100" y="200" as="targetPoint" />
<Array as="points">
<mxPoint x="105" y="130" />
<mxPoint x="130" y="140" />
<mxPoint x="130" y="200" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-2" value="&lt;div&gt;Si état == MOTOR_ON, retourne 1&lt;/div&gt;&lt;div&gt;sinon 0&lt;br&gt;&lt;/div&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="HzyZGsg6_ylir2WwqlqJ-1" vertex="1" connectable="0">
<mxGeometry x="-0.1338" y="1" relative="1" as="geometry">
<mxPoint x="29" y="6" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-8" value="Ordinateur" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="290" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-9" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-8" vertex="1">
<mxGeometry x="45" y="100" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-30" value="status" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.119;exitY=0.988;exitDx=0;exitDy=0;exitPerimeter=0;" parent="7baba1c4bc27f4b0-8" source="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="55" y="220" as="targetPoint" />
<Array as="points">
<mxPoint x="495.5" y="220" />
</Array>
<mxPoint x="795.5" y="220" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-11" value="GET_STATUS" style="html=1;verticalAlign=bottom;endArrow=block;entryX=0;entryY=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;" parent="1" source="7baba1c4bc27f4b0-9" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="410" y="370" as="sourcePoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View file

@ -0,0 +1,52 @@
<mxfile host="app.diagrams.net" modified="2023-11-21T12:45:38.079Z" agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/119.0" etag="SAXS6E1cj-U9-1OtTARd" version="22.1.3" type="device">
<diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">
<mxGraphModel dx="1244" dy="911" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="7baba1c4bc27f4b0-2" value="Robot" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="480" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-10" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-2" vertex="1">
<mxGeometry x="45" y="100" width="10" height="120" as="geometry" />
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-1" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=1.279;entryY=0.784;entryDx=0;entryDy=0;entryPerimeter=0;" parent="7baba1c4bc27f4b0-2" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="55" y="130" as="sourcePoint" />
<mxPoint x="100" y="200" as="targetPoint" />
<Array as="points">
<mxPoint x="105" y="130" />
<mxPoint x="130" y="140" />
<mxPoint x="130" y="200" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-2" value="Récupération de la version" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="HzyZGsg6_ylir2WwqlqJ-1" vertex="1" connectable="0">
<mxGeometry x="-0.1338" y="1" relative="1" as="geometry">
<mxPoint x="-1" y="11" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-8" value="Ordinateur" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="290" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-9" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-8" vertex="1">
<mxGeometry x="45" y="100" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-30" value="version" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.119;exitY=0.988;exitDx=0;exitDy=0;exitPerimeter=0;" parent="7baba1c4bc27f4b0-8" source="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="55" y="220" as="targetPoint" />
<Array as="points">
<mxPoint x="495.5" y="220" />
</Array>
<mxPoint x="795.5" y="220" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-11" value="GET_VERSION" style="html=1;verticalAlign=bottom;endArrow=block;entryX=0;entryY=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;" parent="1" source="7baba1c4bc27f4b0-9" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="410" y="370" as="sourcePoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View file

@ -0,0 +1,52 @@
<mxfile host="Electron" modified="2023-10-19T14:42:15.159Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.0.3 Chrome/114.0.5735.289 Electron/25.8.4 Safari/537.36" etag="BJ6CX-0tTJ_Yu_ODM2h3" version="22.0.3" type="device">
<diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">
<mxGraphModel dx="1122" dy="852" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="7baba1c4bc27f4b0-2" value="Robot" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="480" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-10" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-2" vertex="1">
<mxGeometry x="45" y="100" width="10" height="120" as="geometry" />
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-1" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=1.279;entryY=0.784;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="7baba1c4bc27f4b0-2" target="7baba1c4bc27f4b0-10">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="55" y="130" as="sourcePoint" />
<mxPoint x="100" y="200" as="targetPoint" />
<Array as="points">
<mxPoint x="105" y="130" />
<mxPoint x="130" y="140" />
<mxPoint x="130" y="200" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-2" value="RUN -&amp;gt; MOTORS ON&lt;br&gt;Deplacement de xxxx cm" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="HzyZGsg6_ylir2WwqlqJ-1">
<mxGeometry x="-0.1338" y="1" relative="1" as="geometry">
<mxPoint x="-1" y="11" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-8" value="Ordinateur" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="290" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-9" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-8" vertex="1">
<mxGeometry x="45" y="100" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-30" value="OK" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.119;exitY=0.988;exitDx=0;exitDy=0;exitPerimeter=0;" parent="7baba1c4bc27f4b0-8" source="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="55" y="220" as="targetPoint" />
<Array as="points">
<mxPoint x="495.5" y="220" />
</Array>
<mxPoint x="795.5" y="220" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-11" value="MOVE=xxxx" style="html=1;verticalAlign=bottom;endArrow=block;entryX=0;entryY=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;" parent="1" source="7baba1c4bc27f4b0-9" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="410" y="370" as="sourcePoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View file

@ -0,0 +1,36 @@
<mxfile host="Electron" modified="2023-10-19T14:02:39.901Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.0.3 Chrome/114.0.5735.289 Electron/25.8.4 Safari/537.36" etag="w496wtbRllVrjJP-o5cl" version="22.0.3" type="device">
<diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">
<mxGraphModel dx="1122" dy="852" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="7baba1c4bc27f4b0-2" value="Robot" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="430" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-10" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-2" vertex="1">
<mxGeometry x="45" y="100" width="10" height="120" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-8" value="Ordinateur" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="290" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-9" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-8" vertex="1">
<mxGeometry x="45" y="100" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-30" value="OK" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.119;exitY=0.988;exitDx=0;exitDy=0;exitPerimeter=0;" parent="7baba1c4bc27f4b0-8" source="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="55" y="220" as="targetPoint" />
<Array as="points">
<mxPoint x="495.5" y="220" />
</Array>
<mxPoint x="795.5" y="220" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-11" value="PING" style="html=1;verticalAlign=bottom;endArrow=block;entryX=0;entryY=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;" parent="1" source="7baba1c4bc27f4b0-9" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="410" y="370" as="sourcePoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View file

@ -0,0 +1,52 @@
<mxfile host="app.diagrams.net" modified="2023-11-21T12:49:54.137Z" agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/119.0" etag="hZ7n7WkkaXjE-WsCi2cN" version="22.1.3" type="device">
<diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">
<mxGraphModel dx="1244" dy="911" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="7baba1c4bc27f4b0-2" value="Robot" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="480" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-10" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-2" vertex="1">
<mxGeometry x="45" y="100" width="10" height="120" as="geometry" />
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-1" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=1.279;entryY=0.784;entryDx=0;entryDy=0;entryPerimeter=0;" parent="7baba1c4bc27f4b0-2" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="55" y="130" as="sourcePoint" />
<mxPoint x="100" y="200" as="targetPoint" />
<Array as="points">
<mxPoint x="105" y="130" />
<mxPoint x="130" y="140" />
<mxPoint x="130" y="200" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-2" value="Lance la procedure d&#39;extinction " style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="HzyZGsg6_ylir2WwqlqJ-1" vertex="1" connectable="0">
<mxGeometry x="-0.1338" y="1" relative="1" as="geometry">
<mxPoint x="-1" y="11" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-8" value="Ordinateur" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="290" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-9" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-8" vertex="1">
<mxGeometry x="45" y="100" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-30" value="OK" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.119;exitY=0.988;exitDx=0;exitDy=0;exitPerimeter=0;" parent="7baba1c4bc27f4b0-8" source="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="55" y="220" as="targetPoint" />
<Array as="points">
<mxPoint x="495.5" y="220" />
</Array>
<mxPoint x="795.5" y="220" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-11" value="POWEROFF" style="html=1;verticalAlign=bottom;endArrow=block;entryX=0;entryY=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;" parent="1" source="7baba1c4bc27f4b0-9" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="410" y="370" as="sourcePoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View file

@ -0,0 +1,58 @@
<mxfile host="Electron" modified="2023-10-19T14:08:29.206Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.0.3 Chrome/114.0.5735.289 Electron/25.8.4 Safari/537.36" etag="4zu-3zHQbISUwasoLV-3" version="22.0.3" type="device">
<diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">
<mxGraphModel dx="1122" dy="852" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="7baba1c4bc27f4b0-2" value="Robot" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="480" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-10" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-2" vertex="1">
<mxGeometry x="45" y="100" width="10" height="120" as="geometry" />
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-1" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=1.279;entryY=0.784;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="7baba1c4bc27f4b0-2" target="7baba1c4bc27f4b0-10">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="55" y="130" as="sourcePoint" />
<mxPoint x="100" y="200" as="targetPoint" />
<Array as="points">
<mxPoint x="105" y="130" />
<mxPoint x="130" y="140" />
<mxPoint x="130" y="200" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-2" value="IDLE-&amp;gt; RUN" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="HzyZGsg6_ylir2WwqlqJ-1">
<mxGeometry x="-0.1338" y="1" relative="1" as="geometry">
<mxPoint x="-1" y="11" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-8" value="Ordinateur" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="290" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-9" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-8" vertex="1">
<mxGeometry x="45" y="100" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-30" value="OK" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.119;exitY=0.988;exitDx=0;exitDy=0;exitPerimeter=0;" parent="7baba1c4bc27f4b0-8" source="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="55" y="220" as="targetPoint" />
<Array as="points">
<mxPoint x="495.5" y="220" />
</Array>
<mxPoint x="795.5" y="220" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-3" value="START_WITHOUT_WATCHDOG" style="html=1;verticalAlign=bottom;endArrow=block;entryX=0;entryY=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;" edge="1" parent="7baba1c4bc27f4b0-8">
<mxGeometry relative="1" as="geometry">
<mxPoint x="55" y="120" as="sourcePoint" />
<mxPoint x="235" y="120" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-11" value="START_WITH_WATCHDOG" style="html=1;verticalAlign=bottom;endArrow=block;entryX=0;entryY=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;" parent="1" source="7baba1c4bc27f4b0-9" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="410" y="370" as="sourcePoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View file

@ -0,0 +1,65 @@
<mxfile host="app.diagrams.net" modified="2023-11-21T11:58:33.981Z" agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/119.0" etag="eJqPFFLypjJ9nA5gPQRz" version="22.1.3" type="device">
<diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">
<mxGraphModel dx="1244" dy="911" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="7baba1c4bc27f4b0-2" value="Robot" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;size=40;" parent="1" vertex="1">
<mxGeometry x="540" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-10" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-2" vertex="1">
<mxGeometry x="45" y="100" width="10" height="140" as="geometry" />
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-1" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=1.279;entryY=0.784;entryDx=0;entryDy=0;entryPerimeter=0;" parent="7baba1c4bc27f4b0-2" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="55" y="130" as="sourcePoint" />
<mxPoint x="100" y="200" as="targetPoint" />
<Array as="points">
<mxPoint x="105" y="130" />
<mxPoint x="130" y="140" />
<mxPoint x="130" y="200" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-2" value="Reinitialisation watchdog" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="HzyZGsg6_ylir2WwqlqJ-1" vertex="1" connectable="0">
<mxGeometry x="-0.1338" y="1" relative="1" as="geometry">
<mxPoint x="-1" y="11" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-8" value="Ordinateur" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="290" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-9" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-8" vertex="1">
<mxGeometry x="45" y="100" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-30" value="OK (si entre 0.9s et 1.1s)" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.1;exitY=0.786;exitDx=0;exitDy=0;exitPerimeter=0;" parent="7baba1c4bc27f4b0-8" source="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry y="-10" relative="1" as="geometry">
<mxPoint x="55" y="210" as="targetPoint" />
<Array as="points">
<mxPoint x="146" y="210" />
</Array>
<mxPoint x="230" y="210" as="sourcePoint" />
<mxPoint x="1" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-11" value="RESET_WATCHDOG" style="html=1;verticalAlign=bottom;endArrow=block;entryX=0;entryY=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;" parent="1" source="7baba1c4bc27f4b0-9" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="410" y="370" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="3dzF_IovML2ldSXeqPZC-5" value="" style="endArrow=open;html=1;rounded=1;dashed=1;endFill=0;edgeStyle=elbowEdgeStyle;elbow=vertical;entryX=0.9;entryY=0.705;entryDx=0;entryDy=0;entryPerimeter=0;endSize=8;" edge="1" parent="1" source="7baba1c4bc27f4b0-2" target="7baba1c4bc27f4b0-9">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="520" y="500" as="sourcePoint" />
<mxPoint x="350" y="500" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="3dzF_IovML2ldSXeqPZC-7" value="&lt;font face=&quot;Verdana&quot; style=&quot;font-size: 12px;&quot;&gt;ERR (si trop tôt ou trop tard)&lt;br&gt;&lt;/font&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3dzF_IovML2ldSXeqPZC-5">
<mxGeometry x="0.6158" y="-2" relative="1" as="geometry">
<mxPoint x="79" y="-9" as="offset" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View file

@ -0,0 +1,58 @@
<mxfile host="Electron" modified="2023-10-19T14:08:50.889Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.0.3 Chrome/114.0.5735.289 Electron/25.8.4 Safari/537.36" etag="5e21WgYeRU5zKfirCkVZ" version="22.0.3" type="device">
<diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">
<mxGraphModel dx="1122" dy="852" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="7baba1c4bc27f4b0-2" value="Robot" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="480" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-10" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-2" vertex="1">
<mxGeometry x="45" y="100" width="10" height="120" as="geometry" />
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-1" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=1.279;entryY=0.784;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="7baba1c4bc27f4b0-2" target="7baba1c4bc27f4b0-10">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="55" y="130" as="sourcePoint" />
<mxPoint x="100" y="200" as="targetPoint" />
<Array as="points">
<mxPoint x="105" y="130" />
<mxPoint x="130" y="140" />
<mxPoint x="130" y="200" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-2" value="IDLE-&amp;gt; RUN" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="HzyZGsg6_ylir2WwqlqJ-1">
<mxGeometry x="-0.1338" y="1" relative="1" as="geometry">
<mxPoint x="-1" y="11" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-8" value="Ordinateur" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="290" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-9" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-8" vertex="1">
<mxGeometry x="45" y="100" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-30" value="OK" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.119;exitY=0.988;exitDx=0;exitDy=0;exitPerimeter=0;" parent="7baba1c4bc27f4b0-8" source="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="55" y="220" as="targetPoint" />
<Array as="points">
<mxPoint x="495.5" y="220" />
</Array>
<mxPoint x="795.5" y="220" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-3" value="START_WITHOUT_WATCHDOG" style="html=1;verticalAlign=bottom;endArrow=block;entryX=0;entryY=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;" edge="1" parent="7baba1c4bc27f4b0-8">
<mxGeometry relative="1" as="geometry">
<mxPoint x="55" y="120" as="sourcePoint" />
<mxPoint x="235" y="120" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-11" value="START_WITH_WATCHDOG" style="html=1;verticalAlign=bottom;endArrow=block;entryX=0;entryY=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;" parent="1" source="7baba1c4bc27f4b0-9" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="410" y="370" as="sourcePoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View file

@ -0,0 +1,52 @@
<mxfile host="Electron" modified="2023-10-19T15:06:14.960Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.0.3 Chrome/114.0.5735.289 Electron/25.8.4 Safari/537.36" etag="TFiLTTUfpOkRn3xQ6uxh" version="22.0.3" type="device">
<diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">
<mxGraphModel dx="1122" dy="852" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="7baba1c4bc27f4b0-2" value="Robot" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="480" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-10" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-2" vertex="1">
<mxGeometry x="45" y="100" width="10" height="120" as="geometry" />
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-1" value="" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=1.279;entryY=0.784;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="7baba1c4bc27f4b0-2" target="7baba1c4bc27f4b0-10">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="55" y="130" as="sourcePoint" />
<mxPoint x="100" y="200" as="targetPoint" />
<Array as="points">
<mxPoint x="105" y="130" />
<mxPoint x="130" y="140" />
<mxPoint x="130" y="200" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HzyZGsg6_ylir2WwqlqJ-2" value="RUN -&amp;gt; MOTORS ON&lt;br&gt;Rotation de xxxx degrés" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="HzyZGsg6_ylir2WwqlqJ-1">
<mxGeometry x="-0.1338" y="1" relative="1" as="geometry">
<mxPoint x="-1" y="11" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-8" value="Ordinateur" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="290" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-9" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-8" vertex="1">
<mxGeometry x="45" y="100" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-30" value="OK" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.119;exitY=0.988;exitDx=0;exitDy=0;exitPerimeter=0;" parent="7baba1c4bc27f4b0-8" source="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="55" y="220" as="targetPoint" />
<Array as="points">
<mxPoint x="495.5" y="220" />
</Array>
<mxPoint x="795.5" y="220" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-11" value="TURN=xxxx" style="html=1;verticalAlign=bottom;endArrow=block;entryX=0;entryY=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;" parent="1" source="7baba1c4bc27f4b0-9" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="410" y="370" as="sourcePoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View file

@ -0,0 +1,36 @@
<mxfile host="Electron" modified="2023-10-18T14:02:34.606Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.0.2 Chrome/114.0.5735.289 Electron/25.8.4 Safari/537.36" etag="7CYwIgy7QJl9Bf2-hre1" version="22.0.2" type="device">
<diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">
<mxGraphModel dx="1116" dy="849" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="7baba1c4bc27f4b0-2" value="Robot" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="430" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-10" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-2" vertex="1">
<mxGeometry x="45" y="100" width="10" height="120" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-8" value="Ordinateur" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;collapsible=0;recursiveResize=0;outlineConnect=0;rounded=1;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="1" vertex="1">
<mxGeometry x="290" y="260" width="100" height="360" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-9" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;align=center;" parent="7baba1c4bc27f4b0-8" vertex="1">
<mxGeometry x="45" y="100" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="7baba1c4bc27f4b0-30" value="OK" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.119;exitY=0.988;exitDx=0;exitDy=0;exitPerimeter=0;" parent="7baba1c4bc27f4b0-8" source="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="55" y="220" as="targetPoint" />
<Array as="points">
<mxPoint x="495.5" y="220" />
</Array>
<mxPoint x="795.5" y="220" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="7baba1c4bc27f4b0-11" value="PING" style="html=1;verticalAlign=bottom;endArrow=block;entryX=0;entryY=0;labelBackgroundColor=none;fontFamily=Verdana;fontSize=12;edgeStyle=elbowEdgeStyle;elbow=vertical;" parent="1" source="7baba1c4bc27f4b0-9" target="7baba1c4bc27f4b0-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="410" y="370" as="sourcePoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,99 @@
<mxfile host="Electron" modified="2023-10-18T12:56:23.491Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.0.2 Chrome/114.0.5735.289 Electron/25.8.4 Safari/537.36" etag="u2Q0An3SG5VA8hU9XdA-" version="22.0.2" type="device">
<diagram name="Page-1" id="s1iIJNLQm_feeAUxPTrX">
<mxGraphModel dx="1118" dy="979" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="gdbxGBDsbOmqj8yGOonJ-1" value="" style="ellipse;fillColor=strokeColor;html=1;" vertex="1" parent="1">
<mxGeometry x="399" y="90" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-2" value="IDLE" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="354" y="180" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-3" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="gdbxGBDsbOmqj8yGOonJ-1" target="gdbxGBDsbOmqj8yGOonJ-2">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="390" y="530" as="sourcePoint" />
<mxPoint x="440" y="480" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-5" value="Demarrage" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="gdbxGBDsbOmqj8yGOonJ-3">
<mxGeometry x="-0.279" y="5" relative="1" as="geometry">
<mxPoint x="-5" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-4" value="RUN" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="354" y="320" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-25" value="Commande&lt;br&gt;de sureté &lt;br&gt;de fonctionnement" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.patternFillRect;fillStyle=diagGrid;step=5;fillStrokeWidth=0.2;fillStrokeColor=#dddddd;rotation=0;dashed=1;" vertex="1" parent="1">
<mxGeometry x="500" y="285" width="150" height="115" as="geometry" />
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-6" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="gdbxGBDsbOmqj8yGOonJ-2" target="gdbxGBDsbOmqj8yGOonJ-4">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="390" y="530" as="sourcePoint" />
<mxPoint x="440" y="480" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-7" value="Start with watchdog&lt;br&gt;ou&lt;br&gt;Start without watchdog" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];rotation=0;" vertex="1" connectable="0" parent="gdbxGBDsbOmqj8yGOonJ-6">
<mxGeometry x="-0.1336" y="1" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-11" value="" style="curved=1;endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;" edge="1" parent="1" source="gdbxGBDsbOmqj8yGOonJ-4" target="gdbxGBDsbOmqj8yGOonJ-4">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="480" y="340" as="sourcePoint" />
<mxPoint x="540" y="370" as="targetPoint" />
<Array as="points">
<mxPoint x="540" y="320" />
<mxPoint x="560" y="330" />
<mxPoint x="570" y="350" />
<mxPoint x="550" y="380" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-12" value="Reset watchdog&amp;nbsp;&lt;br&gt;(si le watchdog est actif)" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="gdbxGBDsbOmqj8yGOonJ-11">
<mxGeometry x="-0.0635" y="1" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-20" value="Commandes&lt;br&gt;de mouvement" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.patternFillRect;fillStyle=diagGrid;step=5;fillStrokeWidth=0.2;fillStrokeColor=#dddddd;rotation=0;dashed=1;" vertex="1" parent="1">
<mxGeometry x="200" y="285" width="130" height="115" as="geometry" />
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-13" value="" style="curved=1;endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;" edge="1" parent="1" source="gdbxGBDsbOmqj8yGOonJ-4" target="gdbxGBDsbOmqj8yGOonJ-4">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="260" y="330" as="sourcePoint" />
<mxPoint x="310" y="280" as="targetPoint" />
<Array as="points">
<mxPoint x="320" y="320" />
<mxPoint x="310" y="320" />
<mxPoint x="250" y="320" />
<mxPoint x="260" y="380" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-14" value="Move&amp;nbsp;&lt;br&gt;ou&lt;br&gt;Turn" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="gdbxGBDsbOmqj8yGOonJ-13">
<mxGeometry x="-0.0409" y="1" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-27" value="Commandes&lt;br&gt;de surveillance" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.patternFillRect;fillStyle=diagGrid;step=5;fillStrokeWidth=0.2;fillStrokeColor=#dddddd;rotation=0;dashed=1;" vertex="1" parent="1">
<mxGeometry x="349" y="400" width="130" height="115" as="geometry" />
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-26" value="" style="curved=1;endArrow=classic;html=1;rounded=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="gdbxGBDsbOmqj8yGOonJ-4" target="gdbxGBDsbOmqj8yGOonJ-4">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="399" y="470" as="sourcePoint" />
<mxPoint x="449" y="420" as="targetPoint" />
<Array as="points">
<mxPoint x="380" y="460" />
<mxPoint x="450" y="460" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="gdbxGBDsbOmqj8yGOonJ-28" value="Get battery&lt;br&gt;Get status" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="gdbxGBDsbOmqj8yGOonJ-26">
<mxGeometry x="-0.0101" y="-2" relative="1" as="geometry">
<mxPoint y="8" as="offset" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View file

@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2022-10-11T12:40:49.574Z" agent="5.0 (X11)" etag="YNnbMm92YCTksZ5bMFh4" version="20.4.0" type="device"><diagram name="Page-1" id="c7558073-3199-34d8-9f00-42111426c3f3">7V1hc6I4GP41fnQHCKB8rNrd25n2zmlnbm8/7VCJyhwSD7Da/fWXSBBIsKKSBGw7s10IIcCb93ny5H0D7YHxavctctfLR+TBoGdo3q4HJj3D0DXLwf+Rkre0ZODYacEi8j1aKS949n/D7ExauvE9GJcqJggFib8uF85QGMJZUipzowhty9XmKChfde0uIFfwPHMDvvSH7yXLtHRo2Hn5H9BfLLMr6zZ94Bd39u8iQpuQXi9EIUyPrNysGfqM8dL10LZQBO57YBwhlKRbq90YBsSsmcXS874eOXq45QiGSZ0TprE/fRkZ3//2np7A/Z/OaDw1+1k/vbrBhtriOXGjZLOmN528ZTbaPyUkjek9MNou/QQ+r90ZObrFXoHLlskqoIdpqzBK4O7o/eoHK2DHgmgFk+gNV6EnAJMajvqUbtH9bd5DembcZaF3bFrmUqdYHJrOrYM3qIHOMdaAM1bPsAN82ZHnv+LNBdmcoi2McK2/wuwgvljheMUpWdFLxJa041TGE7CpMDDhaS9w43WK1rm/I54zmvtBMEYBivYNAW3/05C7OGV3Aby3VDmLIcxZhpyzfPewBamJ47Ublqxq/7chTJCatB+nNr0jJohg2jW0QqGzsAmdcrelzR7pN9UIBhV9IhnBDtcpT5uwdYayDNWG0jWNd1/isOOlGy2gcosN2zY26JpeZ3D44SazpYcWuOLEj92XANusHunKtrDN+KRhqjexwZn4AW1HblKyZrs80x6qNxs4S7bM5+0SHx2XPE1AkZE2w4rhQaq20TV+HOVNFnp3ZGqG92aBG8f+rGypHJhEAcKdn/xDtr9YdO8nrUe2J7tCtclbthPihymcRHZ/Fo/lp+33svPSW4UeNydkOgQ/DtpEM1hjSpCQUTE5OdHiuziCgZv4r+U7qeoweuoU+WFSUA4G4xpMl6cPQE8qTg6ZdswT7aTPx7Wz957D01zhUDovNyrgm4qPEyzFuiHu5gf3BQbE5WDs/ybDBHWEIm4DfxESV8UugK8ARgSx/swN7uiBle8R+Z5dgUYiaGO9A9ZOAP09OF3hHNehWa+SLs2guYDlHNndRzOVx43D2bCagTPbjl4Tz7iL3bdCtTWpEB+/X50RiWYpBIU30gYb5gpeBr7PFUcDMR2kCv2IVLjS8UzGP9B8HkNBVF8lRz+kdrDraoehGO3gOPjZS3M8/UK+4ZsCbFPCFYTJudUE24fYCcTdhDpQqwoscTg1LgKqoQypw7pIvVbI1YaX0xhSTbaphrQBGDDaYChFHPAJrQpxsM9x4Vo/yL/JN/x7FZOYHLm7urGEQhtfy82oERsRSrCPIVLWdzRBlGQJ8e8+G6kQKT/4JN4jSlAUU6WoOHzIpgJaED/U+UzWhx0InJoDAXWz5kcCmyHVSxWbeaoh4XqtKoTIkWwKzV/jlfcByFWMzO+zPSuQXI2qMF4jVKH3LookKWOKQwJV2exONVOcrRe16piVWL1oVMU+P0zgubAQrVHKsc1SV/aBRAqqig4KoCDjfQ5qXHS0lyAGDHAtYMmVEgYfUSyss4C7tR9VLAzoBD4NIV3P9Hyf6S+R6BQXVLpEIOgldZBHgmXog2yds6rMsWp90JxP8SGfJ7h34HTG0EXcXxtnuW7Gb1QtdJY/hh7L0egSYarXTwmLycwpx+m5Op6VA7ZjMR4pRMfzQapb0QBiIkl9xh0GQJ4IELh6bFAMKGp16WWgil9qBxRvNUrQmFOBqtATN5HPhMHjbYcSDTFTRomRRCBuTVrXOKK+Bml7pEA9SVQFh44lHfahvgsSw/chFhoa2p/8ukpumWeAGM0rMR0MWpfcbP1yNPoejniaYRclXkwzbEOCVr8CKctfQa3E6QN2V0Pbvxt1M9kKIEYDs92Yr3iQwD+mpLX3A3npCjkzFUu7kB041A4kpyvMWiLkFgFsCgqRyZMLprjF62fkL5pEq5wpQ2NotSzJUwaTX1degGYXQXjtsnL1IPxMIp6fnZCj2S/GOavZuYaE45zPInYc52pziKawHOJlr3mpA2n22YoaIBVEzapBeu3EeghkTKxNPhSUvUFmdvMNMlNQ6vAw2B8WEEkc/GUlD2sSSxeWEH0SS7Y2AagglgwdpW9puTNseD956yaxqP1ghSUsaHbOawYNQrntMTPLrsZN0/hkr5M9gGB81grIFSF7Vj5w/2WtXyjPJt5MPM8SE8/rM18v6eu2vBXKlrAIn/5F04YlfrEBeF9k4J0pjHz8UKRvP1rsj2UDy2LyMqJjAhYf+/skhlrE0LDepA6QQVEGDQiLMWIa0AdtogFZ7yo3xgMDNj8rnAdqfVTikweOoKjTPCAujFniADA8nwNa8H5E7S/jiPpinvK1idfGNg0przlbfGyz/IE80eRSWI0oaC2iJWYUyyaH2VvpDcxE8G7+Zz/S6vmfVQH3/wM=</diagram></mxfile>

BIN
doc/l6924u-1849483.pdf Normal file

Binary file not shown.

View file

@ -212,7 +212,7 @@ La dernière fonctionnalité qui sera traitée dans cette conception introduit d
%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Identification des threads} \subsection{Identification des threads}
Après avoir identifier les fonctions de l'application, le concepteur doit préciser quand l'exécution des fonctions se produit. La première étape consiste à considérer chaque fonction comme un thread. Deux questions se posent alors : Après avoir identifié les fonctions de l'application, le concepteur doit préciser quand l'exécution des fonctions se produit. La première étape consiste à considérer chaque fonction comme un thread. Deux questions se posent alors :
\begin{itemize} \begin{itemize}
\item Quel est le type du thread ? Un thread apériodique (noté par un A dans un rond) est un thread dont l'exécution est contrôlé par des événements alors qu'un thread périodique (noté par la valeur de la période dans un rond) aura une exécution qui revient périodiquement. \item Quel est le type du thread ? Un thread apériodique (noté par un A dans un rond) est un thread dont l'exécution est contrôlé par des événements alors qu'un thread périodique (noté par la valeur de la période dans un rond) aura une exécution qui revient périodiquement.
\item Quel est la priorité du thread ? Une règle simple pour les threads périodiques est d'attribuer les priorités par ordre décroissant des périodes, c'est-à-dire qu'un thread sera d'autant plus prioritaire que sa période sera petite. Pour les threads apériodiques, le niveau de priorité va dépendre de la criticité des fonctions.\\ \item Quel est la priorité du thread ? Une règle simple pour les threads périodiques est d'attribuer les priorités par ordre décroissant des périodes, c'est-à-dire qu'un thread sera d'autant plus prioritaire que sa période sera petite. Pour les threads apériodiques, le niveau de priorité va dépendre de la criticité des fonctions.\\
@ -229,7 +229,7 @@ Après avoir identifier les fonctions de l'application, le concepteur doit préc
Une seconde étape consiste à avoir un regard critique sur sa conception, par exemple en se demandant s'il est possible de réunir des threads ensembles. Ici, le thread {\tt Etablissement de la communication avec le moniteur} ne peut être appelé qu'après {\tt démarrer serveur}, il est donc possible de les réunir en un seul thread. Une seconde étape consiste à avoir un regard critique sur sa conception, par exemple en se demandant s'il est possible de réunir des threads ensembles. Ici, le thread {\tt Etablissement de la communication avec le moniteur} ne peut être appelé qu'après {\tt démarrer serveur}, il est donc possible de les réunir en un seul thread.
C'est aussi le moment de se demande si toutes les fonctionnalités sont couvertes. Pour cela on reprend chaque fonctionnalité et on vérifie qu'elles sont bien traitées. Ici tout semble correct, bien qu'un doute subsiste pour la gestion des déplacements du robot... C'est aussi le moment de se demander si toutes les fonctionnalités sont couvertes. Pour cela on reprend chaque fonctionnalité et on vérifie qu'elles sont bien traitées. Ici tout semble correct, bien qu'un doute subsiste pour la gestion des déplacements du robot...
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Formalisation} \subsection{Formalisation}
@ -328,7 +328,7 @@ Elle ne se veut pas exhaustive, mais simplement présenter les éléments néces
Le diagramme d'activité est un diagramme comportemental d'UML, permettant de représenter le déclenchement d'événements en fonction des états du système et de modéliser des comportements parallélisables (multi-threads ou multi-processus). Le diagramme d'activité est un diagramme comportemental d'UML, permettant de représenter le déclenchement d'événements en fonction des états du système et de modéliser des comportements parallélisables (multi-threads ou multi-processus).
Les diagrammes d'activités permettent de spécifier des traitements a priori séquentiels et offrent une vision très proche de celle des langages de programmation impératifs comme C++ ou Java. Il serait utilisé ici dans ce but. Les diagrammes d'activité permettent de spécifier des traitements à priori séquentiels et offrent une vision très proche de celle des langages de programmation impératifs comme C++ ou Java. Il serait utilisé ici dans ce but.
\subsection{N{\oe}uds d'activité} \subsection{N{\oe}uds d'activité}
@ -442,7 +442,7 @@ Chaque composant appartient à une {\bf catégorie}. Ces catégories sont préd
Chaque composant comprend deux parties. La première, \textbf{le type}, correspond à son interface fonctionnelle, c'est-à-dire ce qui est visible pour les autres composants. La seconde, \textbf{l'implémentation}, décrit son contenu : sous-composants, propriétés, connexions, etc. Chaque composant comprend deux parties. La première, \textbf{le type}, correspond à son interface fonctionnelle, c'est-à-dire ce qui est visible pour les autres composants. La seconde, \textbf{l'implémentation}, décrit son contenu : sous-composants, propriétés, connexions, etc.
Chaque implémentation est associée à un type. ¿ chaque type est associé aucune, une ou plusieurs implémentations. La figure~\ref{fig:type_implementation} donne un exemple de deux types de composants dont le premier est associé à deux implémentations de composants (component implementations). Textuellement, le type est introduit par le mot décrivant le type du composant, alors que l'implémentation est décrite par le type suivi du mot {\em implementation}. Chaque implémentation est associée à un type. À chaque type est associé aucune, une ou plusieurs implémentations. La figure~\ref{fig:type_implementation} donne un exemple de deux types de composants dont le premier est associé à deux implémentations de composants (component implementations). Textuellement, le type est introduit par le mot décrivant le type du composant, alors que l'implémentation est décrite par le type suivi du mot {\em implementation}.
\begin{figure}[htbp] \begin{figure}[htbp]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

View file

@ -115,6 +115,20 @@ Guide des outils de développement \\
\maketitle \maketitle
%%%%%%%%%%%%%%%%%%%%
\section{Configurer Netbeans pour C/C++}
\label{sec:git}
%%%%%%%%%%%%%%%%%%%%
Depuis la version 11 de Netbeans, il est nécessaire que chaque utilisateur configure son environnement avec le plugin C/CC++. Pour cela, il faut :
\begin{itemize}
\item ouvrir le menu \og Tools > Plugins \fg
\item aller dans l'onglet \og Settings \fg,
\item cocher \og Netbeans 8.2 plugins Portal \fg,
\item aller dans l'onglet \og Available \fg et rafraichir,
\item puis choisir C/C++ et suivre le guide...
\end{itemize}
%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%
\section{Code initial du projet} \section{Code initial du projet}
\label{sec:git} \label{sec:git}
@ -132,7 +146,7 @@ Le répertoire {\tt superviseur-robot} est constitué des fichiers suivants :
\begin{itemize} \begin{itemize}
\item {\tt /destijl\_init/main.cpp} qui contient le main de l'application et lance la création des objets et leur exécution, \item {\tt /destijl\_init/main.cpp} qui contient le main de l'application et lance la création des objets et leur exécution,
\item {\tt /destijl\_init/src/tasks.h} qui contient l'entête des différentes fonctions, \item {\tt /destijl\_init/src/tasks.h} qui contient l'entête des différentes fonctions,
\item {\tt /destijl\_init/src/tasks.cpp} qui contient l'implémentation des fonctions de création des objets (tâches, sémaphores, mutex, etc.) ainsi que les fonction de traitement. \item {\tt /destijl\_init/src/tasks.cpp} qui contient l'implémentation des fonctions de création des objets (tâches, sémaphores, mutex, etc.) ainsi que les fonctions de traitement.
\end{itemize} \end{itemize}
@ -142,9 +156,9 @@ Le répertoire {\tt superviseur-robot} est constitué des fichiers suivants :
\section{Compilation d'une application distante} \section{Compilation d'une application distante}
%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%
L'application étant sur une \raspi, il vous faut compiler le programme pour cette architecture. Nous vous proposons d'utiliser Netbeans pour écrire votre code et faire la compilation distante. Cela signifie que votre code est stocké sur votre compte INSA, que vous éditer le code sur la machine de TP, que ce code est ensuite automatiquement chargé sur la \raspi puis compilé (Netbeans permet de faire tout cela). L'application étant sur une \raspi, il vous faut compiler le programme pour cette architecture. Nous vous proposons d'utiliser Netbeans pour écrire votre code et faire la compilation distante. Cela signifie que votre code est stocké sur votre compte INSA, que vous éditez le code sur la machine de TP, que ce code est ensuite automatiquement chargé sur la \raspi puis compilé (Netbeans permet de faire tout cela).
Pour commencer lancer Netbeans et ouvrez le projet {\tt superviseur-robot}. Pour commencer, lancez Netbeans et ouvrez le projet {\tt superviseur-robot}.
Avant de compiler, il vous faut configurer la cible sur laquelle la compilation va se faire: Avant de compiler, il vous faut configurer la cible sur laquelle la compilation va se faire:
\begin{enumerate} \begin{enumerate}
@ -165,7 +179,7 @@ Avant de compiler, il vous faut configurer la cible sur laquelle la compilation
\item Cliquez {\tt OK}. \item Cliquez {\tt OK}.
\end{enumerate} \end{enumerate}
Pour compiler, il suffit ensuite de cliquer sur l'icône en forme de marteau. Vous pourrez voir dans le terminal les étapes de compilation qui commence par le transfert des fichiers suivi de la compilation proprement dite. Pour compiler, il suffit ensuite de cliquer sur l'icône en forme de marteau. Vous pourrez voir dans le terminal les étapes de compilation qui commencent par le transfert des fichiers suivi de la compilation proprement dite.
{\bf Remarque} : la première compilation est un peu longue, mais devrait ensuite se fluidifier avec la compilation incrémentale. {\bf Remarque} : la première compilation est un peu longue, mais devrait ensuite se fluidifier avec la compilation incrémentale.
@ -175,7 +189,7 @@ Pour compiler, il suffit ensuite de cliquer sur l'icône en forme de marteau. Vo
\label{sec:utilisation} \label{sec:utilisation}
%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%
Pour exécuter l'application sur le superviseur, il faut après avoir mis en place un terminal distant (voir ci-dessous) puis démarrer l'exécution avec la commande {\tt sudo ./path/app}{\tt path} est le chemin du répertoire où se trouve l'application et {\tt app} est le nom de votre application. Attention les droits {\tt sudo} sont nécessaires pour des questions d'accès à certains services Xenomai de gestion de la mémoire. Pour exécuter l'application sur le superviseur, il faut avoir mis en place un terminal distant (voir ci-dessous) puis démarrer l'exécution avec la commande {\tt sudo ./path/app}{\tt path} est le chemin du répertoire où se trouve l'application et {\tt app} est le nom de votre application. Attention les droits {\tt sudo} sont nécessaires pour des questions d'accès à certains services Xenomai de gestion de la mémoire.
Si vous utilisez Netbeans, le répertoire dans lequel est compilée l'application se trouve dans l'arboressence commençant par {\tt .netbeans} (attention au "." au début). Il faut descendre dans cette arboressence jusqu'à une bifurcation, puis choisir le répertoire {\tt dist} et aller jusqu'au bout. L'application se trouve au bout de cette branche. Si vous utilisez Netbeans, le répertoire dans lequel est compilée l'application se trouve dans l'arboressence commençant par {\tt .netbeans} (attention au "." au début). Il faut descendre dans cette arboressence jusqu'à une bifurcation, puis choisir le répertoire {\tt dist} et aller jusqu'au bout. L'application se trouve au bout de cette branche.
@ -209,7 +223,7 @@ Pour exécuter le moniteur, il suffit depuis votre PC de travail de se placer da
Les seuls fichiers que vous allez avoir à modifier sont les fichiers {\tt tasks.h} et {\tt tasks.cpp}. La classe {\tt Tasks} a pour attributs privés l'ensemble des structures constituant l'application (tâches, mutex, sémarphores, ressources, etc.). Les fonctions de traitement associées aux tâches sont déclarées comme des méthodes privées de {\tt Tasks}. Les seuls fichiers que vous allez avoir à modifier sont les fichiers {\tt tasks.h} et {\tt tasks.cpp}. La classe {\tt Tasks} a pour attributs privés l'ensemble des structures constituant l'application (tâches, mutex, sémarphores, ressources, etc.). Les fonctions de traitement associées aux tâches sont déclarées comme des méthodes privées de {\tt Tasks}.
La classe {\tt Tasks} propose quatre méthodes publics : La classe {\tt Tasks} propose quatre méthodes publiques :
\begin{itemize} \begin{itemize}
\item {\tt Init()} qui crée les structures de l'application, \item {\tt Init()} qui crée les structures de l'application,
\item {\tt Run()} qui lance les tâches, \item {\tt Run()} qui lance les tâches,
@ -217,7 +231,7 @@ Pour exécuter le moniteur, il suffit depuis votre PC de travail de se placer da
\item {\tt Join()} qui suspend l'exécution du {\tt main}.\\ \item {\tt Join()} qui suspend l'exécution du {\tt main}.\\
\end{itemize} \end{itemize}
Pour ajoutez des structures à l'application, il suffit de les déclarer dans le fichier {\tt tasks.h} puis de s'assurer qu'elles sont bien instanciées dans les méthodes adéquates de {\tt tasks.cpp}. Pour une tâche, il faut en plus déclarer une nouvelle méthode privée dans {tasks.h} et fournir son implémentation dans {tasks.cpp}. Cette nouvelle méthode sera le point d'entrée de la tâche. Pour ajouter des structures à l'application, il suffit de les déclarer dans le fichier {\tt tasks.h} puis de s'assurer qu'elles sont bien instanciées dans les méthodes adéquates de {\tt tasks.cpp}. Pour une tâche, il faut en plus déclarer une nouvelle méthode privée dans {tasks.h} et fournir son implémentation dans {tasks.cpp}. Cette nouvelle méthode sera le point d'entrée de la tâche.
Toute la documentation de Xenomai se trouve en ligne (attention c'est Xenomai 3) et nous utilisons l'\href{https://xenomai.org/documentation/xenomai-3/html/xeno3prm/group__alchemy.html}{API alchemy}. Toute la documentation de Xenomai se trouve en ligne (attention c'est Xenomai 3) et nous utilisons l'\href{https://xenomai.org/documentation/xenomai-3/html/xeno3prm/group__alchemy.html}{API alchemy}.

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View file

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,512 @@
% Description du contenu du rapport à rendre pour l'UF temps réel en 4AE et 4IR
% Auteur : P.-E. Hladik
% Institut : INSA de Toulouse
\documentclass[11pt, a4paper]{paper}
\usepackage{a4wide,color}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}
\usepackage{graphicx}
\usepackage{amssymb}
\usepackage{hyperref}
\usepackage{amstext}
\usepackage{amsmath}
\usepackage[dvipsnames]{xcolor}
\usepackage{placeins}
\newcounter{cptreq}
\usepackage{framed}
\title{{\Huge Rapport de projet De Stijl 2.0}\\
{\large version \today}\\
---\\
}
\author{\color{blue}{Mettez ici vos noms et les parties sur lesquelles vous avez travaillées :}\\
\color{blue}{conception, robot, vidéo, mission, intégration, rédaction du compte-rendu}\\
\color{blue}{Exemple : P.-E. Hladik (conception, robot, rédaction du compte-rendu)}
}
\begin{document}
%%%%%%%%%%%%%%
% PAGE DE GARDE
\maketitle
{\color{red}
\begin{framed}
\begin{center}{\bf\Large --- Ce qu'il faut faire --- } \end{center}
{\bf Remplacez tous les textes en bleu et supprimer les textes en rouge}\\
{\bf Le rapport est à rendre en pdf et à déposer sur moodle avant le 31 mars 2019 23h59:
\url{https://moodle.insa-toulouse.fr/mod/assign/view.php?id=33071}}\\
{\bf Vous devez \underline{aussi} rendre les fichiers {\tt tasks.h} et {\tt tasks.cpp}.}\\
Vous pouvez utiliser word ou un autre logiciel d'édition pour rédiger ce rapport, par contre vous devez {\bf impérativement respecter la structure ci-après et le rendre au format pdf}.\\
Critères d'évaluation :
\begin{itemize}
\item Qualité rédactionnelle,
\item Exhaustivité et justesse des règles de codage,
\item Qualité de la conception (clarté, respect de la syntaxe, exhaustivité, justesse),
\item Qualité des explications,
\item Respect des règles dans la production du code.\\
\end{itemize}
Compétences évaluées :
\begin{itemize}
\item rédaction et communication sur un dossier de conception,
\item concevoir une application concurrente temps réel,
\item analyser une conception,
\item passer d'un modèle de conception à une implémentation,
\item écriture de code et utilisation de primitives au niveau système.
\end{itemize}
\end{framed}
}
%%%%%%%%%%%%%%
% DEBUT DU RAPPORT
\newpage
%%%%%%%%%%%%%%
% CONCEPTION
\section{Conception}
{\color{red} Mettez dans cette partie tous les éléments de votre conception en particulier vos diagrammes AADL (vue globale du système) et les diagrammes d'activité (détails des threads). Cette partie doit être auto-suffisante pour comprendre votre application.
Pour faciliter la lecture des schémas, vous allez présenter votre conception en trois parties, l'une focalisée sur la communication entre le moniteur et le superviseur, la seconde consacrée au traitement vidéo et la troisième au contrôle du robot.
Si vous le souhaitez, au lieu de dessiner vos diagrammes sous un éditeur, vous pouvez joindre un scan de vos schémas — ils doivent être lisibles et propres.}
% VUE GENERAL DU SYSTEME
\subsection{Diagramme fonctionnel général}
{\color{red} Mettez ici un diagramme fonctionnel qui présente les principaux blocs de votre conception. Pour cela, inspirez vous du diagramme ci-dessous (fig.~\ref{fig:diag_fonc_gen}) en indiquant pour chaque groupe de threads les données et ports partagés. La figure~\ref{fig:diag_fonc_gen} a été réalisée à partir du document de conception. {\bf Vous devez absolument conserver le découpage en trois groupes de threads ({\tt th\_group\_gestion\_moniteur}, {\tt th\_group\_vision}, {\tt th\_group\_gestion\_robot}).}}
\begin{figure}[htbp]
\begin{center}
{\includegraphics[scale=.5]{./figures-pdf/diag_fonc_gen}}
{\caption{Diagramme fonctionnel du système}}
\end{center}
\label{fig:diag_fonc_gen}
\end{figure}
\FloatBarrier
% DIAGRAMME FONCTIONNEL GT MONITEUR
\subsection{Groupe de threads gestion du moniteur}
{\color{red}Placez ici :
\begin{itemize}
\item le diagramme fonctionnel en AADL décrivant le groupe de threads de gestion du moniteur (voir exemple de la figure~\ref{fig:diag_fonc_moniteur} réalisée à partir du dossier de conception),
\item remplir le tableau~\ref{tab:gt_moniteur} pour expliquer le rôle de chacun des threads,
\item les diagrammes d'activité de chaque thread de ce groupe.
\end{itemize}
Décrivez tous les éléments (paramètres, variables, etc.) qui vous semblent pertinents pour comprendre les diagrammes.}
% DIAGRAMME FONCTIONNEL GT MONITEUR
\subsubsection{Diagramme fonctionnel du groupe gestion du moniteur}
{\color{red} Exemple de diagramme fonctionnel pour le groupe de thread de gestion du moniteur. Mettez à jour ce diagramme avec votre conception.}
\begin{figure}[htbp]
\label{fig:diag_fonc_moniteur}
\begin{center}
{\includegraphics[scale=.5]{./figures-pdf/diag_fonc_moniteur}}
{\caption{Diagramme fonctionnel du groupe de threads gestion du moniteur}}
\end{center}
\end{figure}
\FloatBarrier
% DESCRIPTION THREADS GT MONITEUR
\subsubsection{Description des threads du groupe gestion du moniteur}
{\color{red} Remplissez le tableau ci-dessous pour expliquer le rôle de chaque thread et donner son niveau de priorité.}
\begin{table}[htp]
\caption{Description des threads du groupe {\tt th\_group\_gestion\_moniteur}}
\begin{center}
\begin{tabular}{|p{3cm}|p{8.5cm}|p{2cm}|}
\hline
\bf Nom du thread & \bf Rôle & \bf Priorité \\
\hline
\hline
\color{blue}tCommuniquer & \color{blue}Prend en charge les messages entrants depuis le moniteur & \color{blue}25\\
\hline
\color{blue}tEnvoyer & \color{blue}Envoi l'ensemble des messages du superviseur au moniteur & \color{blue}30\\
\hline
\color{blue}... & \color{blue}... & \color{blue}...\\
\hline
\end{tabular}
\end{center}
\label{tab:gt_moniteur}
\end{table}%
% DIAGRAMMES D'ACTIVITE GT MONITEUR
\subsubsection{Diagrammes d'activité du groupe gestion du moniteur}
{\color{red}Décrivez le comportement de chacun de vos threads avec des diagrammes d'activité. Apportez les explications qui vous semblent nécessaires pour comprendre votre conception. A titre d'exemple les diagrammes fonctionnels tirés du document de conception sont remis.}
\begin{figure}[htbp]
\label{fig:act_communiquer}
\begin{center}
{\includegraphics[scale=.3]{./figures-pdf/th_receiveFromMon.png}}
{\caption{Diagramme d'activité du thread {\tt th\_receiveFromMon}}}
\end{center}
\end{figure}
\begin{figure}[htbp]
\label{fig:act_envoyer}
\begin{center}
{\includegraphics[scale=.3]{./figures-pdf/th_sendToMon}}
{\caption{Diagramme d'activité du thread {\tt th\_sendToMon}}}
\end{center}
\end{figure}
\begin{figure}[htbp]
\label{fig:act_envoyer}
\begin{center}
{\includegraphics[scale=.3]{./figures-pdf/th_server}}
{\caption{Diagramme d'activité du thread {\tt th\_server}}}
\end{center}
\end{figure}
\FloatBarrier
% DIAGRAMME FONCTIONNEL GT VISION
\subsection{Groupe de threads vision}
% DIAGRAMME FONCTIONNEL GT VISION
\subsubsection{Diagramme fonctionnel du groupe vision}
{\color{blue} Ajoutez le diagramme fonctionnel du groupe de threads de vision.}
% DESCRIPTION THREADS GT VISION
\subsubsection{Description des threads du groupe vision}
{\color{red} Remplissez le tableau ci-dessous pour expliquer le rôle de chaque thread et donner son niveau de priorité.}
\begin{table}[htp]
\caption{Description des threads du groupe {\tt th\_group\_vision}}
\begin{center}
\begin{tabular}{|p{3cm}|p{8.5cm}|p{2cm}|}
\hline
\bf Nom du thread & \bf Rôle & \bf Priorité \\
\hline
\hline
\color{blue}... & \color{blue}... & \color{blue}...\\
\hline
\end{tabular}
\end{center}
\label{tab:gt_moniteur}
\end{table}%
\FloatBarrier
% DIAGRAMMES D'ACTIVITE GT VISION
\subsubsection{Diagrammes d'activité du groupe vision}
{\color{blue}Décrivez le comportement de chacun de vos threads avec des diagrammes d'activité. Apportez les explications qui vous semblent nécessaires pour comprendre votre conception.}
% DIAGRAMME FONCTIONNEL GT ROBOT
\subsection{Groupe de threads gestion du robot}
% DIAGRAMME FONCTIONNEL GT ROBOT
\subsubsection{Diagramme fonctionnel du groupe gestion robot}
{\color{blue} Ajoutez le diagramme fonctionnel du groupe de threads de gestion du robot.}
% DESCRIPTION THREADS GT ROBOT
\subsubsection{Description des threads du groupe gestion robot}
{\color{red} Remplissez le tableau ci-dessous pour expliquer le rôle de chaque thread et donner son niveau de priorité.}
\begin{table}[htp]
\caption{Description des threads du groupe {\tt th\_group\_gestion\_robot}}
\begin{center}
\begin{tabular}{|p{3cm}|p{8.5cm}|p{2cm}|}
\hline
\bf Nom du thread & \bf Rôle & \bf Priorité \\
\hline
\hline
\color{blue}... & \color{blue}... & \color{blue}...\\
\hline
\end{tabular}
\end{center}
\label{tab:gt_moniteur}
\end{table}%
\FloatBarrier
% DIAGRAMMES D'ACTIVITE GT ROBOT
\subsubsection{Diagrammes d'activité du groupe robot}
{\color{blue}Décrivez le comportement de chacun de vos threads avec des diagrammes d'activité. Apportez les explications qui vous semblent nécessaires pour comprendre votre conception.}
%%%%%%%%%%%%%%%
% ANALYSE ET VALIDATION
\section{Analyse et validation de la conception}
{\color{red}Pour chacune des fonctionnalités attendues, indiquez si elle a été réalisée. Ajoutez d'éventuelles remarques de conception si le fonctionnement n'est pas exactement celui attendu et justifiez le respect des propriétés temporelles. Vous n'êtes pas obligé de répondre à ces éléments pour les fonctionnalités réalisées dans la conception préliminaire (ces fonctionnalités sont indiquées dans la suite par un astérisque). Si vous ne souhaitez pas apporter de détails supplémentaires pour ces fonctionnalités, supprimez les de la liste ci-dessous.}
{\color{gray}
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq *}
\paragraph{Description :} Le lancement du serveur doit être réalisé au démarrage du superviseur. En cas d'échec du démarrage du serveur, un message textuel doit être affiché sur la console de lancement de l'application. Ce message doit signaler le problème et le superviseur doit s'arrêter.
\paragraph{\color{black}Réalisation :} {\color{blue} Fait en partie. La fonctionnalité est impléméntée sauf pour l'arrêt suite à l'échec de démarrage du serveur. L'implémentation actuelle stoppe la tâche en charge du démarrage du serveur, mais pas l'ensemble de l'application. Après discussion avec le client, la version actuelle est suffisante.}
}
%%%
{\color{gray}
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq *}
\paragraph{Description :} La connexion entre le moniteur et le superviseur (via le socket) doit être établie suite à la demande de connexion de l'utilisateur.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
}
%%%
{\color{gray}
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq *}
\paragraph{Description :} Tous les messages envoyés depuis le moniteur doivent être réceptionnés par le superviseur.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
%%%
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq *}
\paragraph{Description :} L'application superviseur doit être capable d'envoyer les messages au moniteur (via le serveur) avec un délai d'au plus 10~ms.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
}
%%%
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq}
\paragraph{Description :} Le superviseur doit détecter la perte de communication avec le moniteur. En cas de perte de la communication un message doit être affiché sur la console de lancement du superviseur.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
%%%
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq}
\paragraph{Description :} En cas de perte de communication entre le superviseur et moniteur, il faut stopper le robot, la communication avec le robot, fermer le serveur et déconnecter la caméra afin de revenir dans le même état qu'au démarrage du superviseur.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
%%%
{\color{gray}
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq *}
\paragraph{Description :} Dès que la communication avec le moniteur est en place, la communication entre le superviseur et le robot doit être ouverte. Si la communication est active, il faut envoyer un message d'acquittement au moniteur. En cas d'échec, un message le signalant est renvoyé au moniteur.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
}
%%%
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq}
\paragraph{Description :} La communication entre le robot et le superviseur doit être surveillée par un mécanisme de compteur afin de détecter une perte du médium de communication.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
%%%
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq}
\paragraph{Description :} Lorsque la communication entre le robot et le superviseur est perdue, un message spécifique doit être envoyé au moniteur. Le système doit fermer la communication entre le robot et le superviseur et se remettre dans un état initial permettant de relancer la communication.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
%%%
{\color{gray}
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq *}
\paragraph{Description :} Lorsque l'utilisateur demande, via le moniteur, le démarrage sans watchdog, le robot doit démarrer dans ce mode. En cas de succès, un message d'acquittement est retourné au moniteur. En cas d'échec, un message indiquant l'échec est transmis au moniteur.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
}
%%%
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq}
\paragraph{Description :} Lorsque l'utilisateur demande, via le moniteur, le démarrage avec watchdog, le robot doit démarrer dans ce mode. Un message d'acquittement est retourné au moniteur. En cas d'échec, un message indiquant l'échec est transmis au moniteur.
Une fois le démarrage effectué, le robot doit rester vivant en envoyant régulièrement le message de rechargement du watchdog.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
%%%
{\color{gray}
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq *}
\paragraph{Description :} Lorsque qu'un ordre de mouvement est reçu par le superviseur, le robot doit réaliser ce déplacement en moins de 100~ms.
\paragraph{\color{black}Réalisation :} {\color{blue} Cette fonctionnalité a été implémentée à l'aide d'une tâche qui envoie toutes les 100~ms un ordre de mouvement au robot une fois que celui-ci est démarré (tâche th\_move). Cette implémentation ne garantit pas que le temps soit inférieur à 100~ms entre la réception du message et sa prise en compte par le robot. En effet, le temps de traitement de la réception par la tâche th\_receiveFromMon, le temps de traitement de la tâche th\_move et celui de l'envoi de l'ordre via le Xbee ne sont pas considérés. Afin de réduire ces délais, les priorités de th\_receiveFromMon et de th\_move sont élevés mais ne permettent pas de garantir l'exigence de temps. Augmenter la fréquence de la tâche th\_move permettrait de tenir cette contrainte, mais risque de surcharger la communication avec le robot (une version avec l'envoi de l'ordre que s'il a changé serait souhaitable). Finalement, une version asynchrone (attente d'un événement-donnée entre th\_receiveFromMon et de th\_move) aurait été préférable. Cependant, après discussion avec le client, la version périodique à 100~ms est cependant validée.}
}
%%%
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq}
\paragraph{Description :} Le niveau de la batterie du robot doit être mis à jour toutes les 500~ms sur le moniteur.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
%%%
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq}
\paragraph{Description :} La caméra doit être démarrée suite à une demande provenant du moniteur. Si l'ouverture de la caméra a échoué, il faut envoyer un message au moniteur.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
%%%
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq}
\paragraph{Description :} Dès que la caméra est ouverte, une image doit être envoyée au moniteur toutes les 100 ms.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
%%%
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq}
\paragraph{Description :} La caméra doit être fermée suite à une demande provenant du moniteur. Un message doit être envoyé au moniteur pour signifier l'acquittement de la demande. L'envoi périodique des images doit alors être stoppé.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
%%%
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq}
\paragraph{Description :} Suite à une demande de recherche de l'arène, le superviseur doit stopper l'envoi périodique des images, faire la recherche de l'arène et renvoyer une image sur laquelle est dessinée cette arène. Si aucune arène n'est trouvée un message d'échec est envoyé.\\
L'utilisateur doit ensuite valider visuellement via le moniteur si l'arène a bien été trouvée. L'utilisateur peut :
\begin{itemize}
\item valider l'arène : dans ce cas, le superviseur doit sauvegarder l'arène trouvée (pour l'utiliser ultérieurement) puis retourner dans son mode d'envoi périodique des images en ajoutant à l'image l'arène dessinée.
\item annuler la recherche : dans ce cas, le superviseur doit simplement retourner dans son mode d'envoi périodique des images et invalider la recherche.
\end{itemize}
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
%%%
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq}
\paragraph{Description :} Suite à une demande de l'utilisateur de calculer la position du robot, le superviseur doit calculer cette position, dessiner sur l'image le résultat et envoyer un message au moniteur avec la position toutes les 100~ms. Si le robot n'a pas été trouvé, un message de position est envoyé avec une position (-1,-1).
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
\stepcounter{cptreq}
\subsection{Fonctionnalité \thecptreq}
\paragraph{Description :} Suite à une demande de l'utilisateur de stopper le calcul de la position du robot, le superviseur doit rebasculer dans un mode d'envoi de l'image sans le calcul de la position.
\paragraph{\color{black}Réalisation :} {\color{red} indiquez si la fonctionnalité est traitée et s'il y a des remarques particulières.}
%%%%%%%%%%%%%%%%%%%
% TRANSFORMATION AADL2XENO
\section{Transformation AADL vers Xenomai}
{\color{red} Cette section est consacrée à la méthode pour passer d'un modèle AADL à un code sous Xenomai. Pour chacun des éléments AADL, vous expliquerez {\bf comment vous l'avez traduit en code} et quels {\bf services de Xenomai} vous avez utilisés {\bf en expliquant ce qu'ils font}. Chaque élément devra être illustré avec des {\bf extraits de code de votre projet}.}
% THREAD
\subsection{Thread}
% INSTANCIATION THREAD
\subsubsection{Instanciation et démarrage}
{\color{blue} Expliquer comment vous implémentez sous Xenomai l'instanciation et le démarrage d'un thread AADL.}
{\color{blue} {\bf Exemple de réponse} : Chaque thread a été implémenté par un {\tt RT\_TASK} déclarés dans le fichier {\tt tasks.h}. La création de la tâche se fait à l'aide du service {\tt rt\_task\_create} et son démarrage à l'aide de {\tt rt\_task\_start}. Toutes les tâches sont crées dans la méthode {\tt init} de {\tt tasks.cpp} et démarrées dans la méthode {\tt run}.
Par exemple, pour la tâche {\tt th\_server}, sa déclaration est faite ligne 73 dans le fichier {\tt tasks.h}
\begin{verbatim}
RT_TASK th_server;
\end{verbatim}
sa création ligne 102 de {\tt tasks.cpp} lors de l'appel de
\begin{verbatim}
rt_task_create(&th_server, "th_server", 0, PRIORITY_TSERVER, 0)
\end{verbatim}
et son démarrage ligne 146 avec
\begin{verbatim}
rt_task_start(&th_server, (void(*)(void*)) & Tasks::ServerTask, this)
\end{verbatim}
}
% CODE THREAD
\subsubsection{Code à exécuter}
{\color{blue} Comment se fait le lien sous Xenomai entre le thread et le traitement à exécuter.}
% PRIORITE THREAD
\subsubsection{Niveau de priorités}
{\color{blue} Expliquer comment vous fixez sous Xenomai le niveau de priorité d'un thread AADL.}
% PERIODICITE THREAD
\subsubsection{Activation périodique}
{\color{blue} Expliquer comment vous rendez périodique l'activation d'un thread AADL sous Xenomai.}
% THREAD EVENEMENTIEL
\subsubsection{Activation événementielle}
{\color{blue} Expliquer les moyens mis en {\oe}uvre dans l'implémentation sous Xenomai pour gérer les activations événementielles d'un thread AADL.}
% PORT D'EVENEMENT
\subsection{Port dévénement}
% INSTANCIATION PORT D'EVENEMENT
\subsubsection{Instanciation}
{\color{blue} Comment avez-vous instancié un port d'événement ?}\\
% ENVOI PORT D'EVENEMENT
\subsubsection{Envoi dun événement}
{\color{blue} Quels services ont été employés pour signaler un événement ?}
% RECEPTION PORT D'EVENEMENT
\subsubsection{Réception dun événement}
{\color{blue} Comment se fait l'attente d'un événement ?}
% DONNEE PARTAGEE
\subsection{Donnée partagée}
% INSTANCIATION DONNEE PARTAGEE
\subsubsection{Instanciation}
{\color{blue} Quelle structure instancie une donnée partagée ?}
% LECTURE/ECRITURE DONNEE PARTAGEE
\subsubsection{Accès en lecture et écriture}
{\color{blue} Comment garantissez-vous sous Xenomai l'accès à une donnée partagée ?}
% PORT D'EVENEMENT-DONNEES
\subsection{Ports dévénement-données}
% INSTANCIATION PORT D'EVENEMENT-DONNEES
\subsubsection{Instanciation}
{\color{blue} Donnez la solution retenue pour implémenter un port d'événement-données avec Xenomai.}
% ENVOI PORT D'EVENEMENT-DONNEES
\subsubsection{Envoi dune donnée}
{\color{blue} Quels services avez-vous employés pour envoyer des données ?}
% RECEPTION PORT D'EVENEMENT-DONNEES
\subsubsection{Réception dune donnée}
{\color{blue} Quels services avez-vous employés pour recevoir des données ?}
\end{document}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 40 KiB

View file

@ -84,7 +84,7 @@ Les figures~\ref{fig:diag1_2} et~\ref{fig:diag3_6} illustrent le mode de foncti
%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Etablissement du socket.} La connexion entre le moniteur et le superviseur est réalisée site à la demande de l'utilisateur via l'interface graphique. Lorsque la demande est faite, un socket est créé, il faut donc que le serveur soit en attente d'une demande de connexion, c'est-à-dire que la méthode {\tt AcceptClient} de la classe {\tt ComMonitor} soit en cours d'exécution. Cette méthode est bloquante.\\ \paragraph{Etablissement du socket.} La connexion entre le moniteur et le superviseur est réalisée suite à la demande de l'utilisateur via l'interface graphique. Lorsque la demande est faite, un socket est créé, il faut donc que le serveur soit en attente d'une demande de connexion, c'est-à-dire que la méthode {\tt AcceptClient} de la classe {\tt ComMonitor} soit en cours d'exécution. Cette méthode est bloquante.\\
\req{La connexion entre le moniteur et le superviseur (via le socket) doit être établie suite à la demande de connexion de l'utilisateur.} \req{La connexion entre le moniteur et le superviseur (via le socket) doit être établie suite à la demande de connexion de l'utilisateur.}
@ -245,7 +245,7 @@ Le principe est simple : au démarrage du robot (c.-à-d. quand le robot traite
\req{Lorsque l'utilisateur demande, via le moniteur, le démarrage avec watchdog, le robot doit démarrer dans ce mode. Un message d'acquittement est retourné au moniteur. En cas d'échec, un message indiquant l'échec est transmis au moniteur. \req{Lorsque l'utilisateur demande, via le moniteur, le démarrage avec watchdog, le robot doit démarrer dans ce mode. Un message d'acquittement est retourné au moniteur. En cas d'échec, un message indiquant l'échec est transmis au moniteur.
Une fois le démarrage effectué, le robot doit rester vivant en envoyant régulièrement le message de rechargement du watchdog.} Une fois le démarrage effectué, le robot doit rester vivant. Pour cela, il faut que le moniteur envoie régulièrement le message de rechargement du watchdog.}
%alt %alt
%note right of Monitor %note right of Monitor
@ -339,7 +339,7 @@ Les fonctions permettant la manipulation des images sont fournies dans les libra
\req{La caméra doit être démarrée suite à une demande provenant du moniteur. Si l'ouverture de la caméra a échoué, il faut envoyer un message au moniteur.} \req{La caméra doit être démarrée suite à une demande provenant du moniteur. Si l'ouverture de la caméra a échoué, il faut envoyer un message au moniteur.}
%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Capture d'une image (mode nominal).} La méthode {\tt Grab} de {\tt Camera} permet de capturer une image. La compression de l'image se fait à l'aide de la fonction {\tt ToJpg} de {\tt Img}. L'envoi de l'image au moniteur s'effectue normalement par l'envoi d'un message. La fréquence de capture d'une image est fixée par un paramètre lors de l'instanciation d'un objet {\tt Camera}.\\ \paragraph{Capture d'une image (mode nominal).} La méthode {\tt Grab} de {\tt Camera} permet de capturer une image. L'envoi de l'image au moniteur s'effectue normalement par l'envoi d'un message\footnote{L'image est compressée lors de l'envoi du message.}. La fréquence de capture d'une image est fixée par un paramètre lors de l'instanciation d'un objet {\tt Camera}.\\
\req{Dès que la caméra est ouverte, une image doit être envoyée au moniteur toutes les 100 ms.} \req{Dès que la caméra est ouverte, une image doit être envoyée au moniteur toutes les 100 ms.}

2
hardware/meca/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
Dumber_2022_Freecad/

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more