diff --git a/Writerside/Writerside_libraries.tree b/Writerside/Writerside_libraries.tree new file mode 100644 index 0000000..c995b03 --- /dev/null +++ b/Writerside/Writerside_libraries.tree @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/Writerside/gu.tree b/Writerside/gu.tree index 934870e..59777c6 100644 --- a/Writerside/gu.tree +++ b/Writerside/gu.tree @@ -17,7 +17,6 @@ - @@ -25,6 +24,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Writerside/labels.list b/Writerside/labels.list new file mode 100644 index 0000000..96bd896 --- /dev/null +++ b/Writerside/labels.list @@ -0,0 +1,11 @@ + + + + + This feature is deprecated and will be removed in the future. + + + Work in progress + Beta + \ No newline at end of file diff --git a/Writerside/redirection-rules.xml b/Writerside/redirection-rules.xml index aa862cb..df8853f 100644 --- a/Writerside/redirection-rules.xml +++ b/Writerside/redirection-rules.xml @@ -23,4 +23,29 @@ Created after removal of "dev" from Documentation Robot Modelec 2024 Reseau.html + + Created after removal of "ROS2" from Documentation Robot Modelec 2024 + ROS2.html + + + Created after removal of "ArduinoData message interface" from Documentation Robot Modelec 2024 + + ArduinoData.html + + + Created after removal of "ModelecSnippet" from Documentation Robot Modelec 2024 + modelecsnippet.html + + + Created after removal of "Add Button" from Documentation Robot Modelec 2024 + Add-Button.html + + + Created after removal of "Robot Position" from Documentation Robot Modelec 2024 + Robot-Position.html + + + Created after removal of "Robot Position" from Documentation Robot Modelec 2024 + Robot-Position.html + \ No newline at end of file diff --git a/Writerside/topics/Add-Button-Service.md b/Writerside/topics/Add-Button-Service.md new file mode 100644 index 0000000..b805a00 --- /dev/null +++ b/Writerside/topics/Add-Button-Service.md @@ -0,0 +1,14 @@ +# Add Button + +## Nom du service : **add_button** +[Interface](AddButton-Service-Interface.md) + +## Objectif +Setup le contrôle d'un nouveau bouton sur les GPIO. +Le bouton peut ensuite être contrôlé via le topic [](Button-Topic.md) + +### Service +- [](Button-GPIO-Controller-Node.md) + +### Client +- \ No newline at end of file diff --git a/Writerside/topics/Add-Serial-Listener-Service.md b/Writerside/topics/Add-Serial-Listener-Service.md new file mode 100644 index 0000000..90f6283 --- /dev/null +++ b/Writerside/topics/Add-Serial-Listener-Service.md @@ -0,0 +1,18 @@ +# Add Serial Listener + +## Nom du service : **add_serial_listener** +[Interface](AddSerialListener-Service-Interface.md) + +## Objectif +Setup un listener sur un nouveau port série. +Deux topics sont ensuite créés : +- [](Raw-Data-Topic.md) : pour recevoir les données brutes du port série. +- [](Send-To-Serial-Topic.md) : pour envoyer des données vers le port série. + +### Service +- [](Multiple-Serial-Listener-Node.md) : créer un nouveau listener USB ou renvoie un listener existant (si le listener existe déjà). + +### Client +- [](PCB-Alim-Interface-Node.md) +- [](Game-Controller-Listener-Node.md) +- [](Odometry-Logic-Processor-Node.md) diff --git a/Writerside/topics/Add-Servo-Service.md b/Writerside/topics/Add-Servo-Service.md new file mode 100644 index 0000000..36c190f --- /dev/null +++ b/Writerside/topics/Add-Servo-Service.md @@ -0,0 +1,14 @@ +# Add Servo + +## Nom du service : **add-servo** +[Interface](AddServoMotor-Service-Interface.md) + +## Objectif +Setup le contrôle d'un nouveau servo moteur. + +### Service +- [](PCA9685-Controller-Node.md) + +### Client +- [](Arm-Controller-Node.md) +- [](Game-Controller-Listener-Node.md) \ No newline at end of file diff --git a/Writerside/topics/Add-Solenoid-Service.md b/Writerside/topics/Add-Solenoid-Service.md new file mode 100644 index 0000000..1f114ef --- /dev/null +++ b/Writerside/topics/Add-Solenoid-Service.md @@ -0,0 +1,13 @@ +# Add Solenoid + +## Nom du service : **add_solenoid** +[Interface](AddSolenoid-Service-Interface.md) + +## Objectif +Setup le contrôle d'un solénoïde. + +### Service +- [](Solenoid-Controller-Node.md) + +### Client +- diff --git a/Writerside/topics/AddButton-Service-Interface.md b/Writerside/topics/AddButton-Service-Interface.md new file mode 100644 index 0000000..ef11711 --- /dev/null +++ b/Writerside/topics/AddButton-Service-Interface.md @@ -0,0 +1,29 @@ +# AddButton +`` + +## Objectif +Ajouter le contrôle d'un bouton. + +## Interface +```cpp +uint8 pin +string name +--- +bool success +``` + +## Params + +| Type | Name | Description | +|--------|------|---------------| +| uint8 | pin | pin du bouton | +| string | name | nom du bouton | + +## Retour + +| Type | Name | Description | +|------|---------|------------------------| +| bool | success | requête réussie ou non | + +## Utilisé par +- [](Button-GPIO-Controller-Node.md) \ No newline at end of file diff --git a/Writerside/topics/AddSerialListener-Service-Interface.md b/Writerside/topics/AddSerialListener-Service-Interface.md new file mode 100644 index 0000000..d82b917 --- /dev/null +++ b/Writerside/topics/AddSerialListener-Service-Interface.md @@ -0,0 +1,34 @@ +# AddSerialListener +`` + +## Objectif + +## Interface +```cpp +string name +string serial_port +int64 bauds +--- +bool success +string publisher +string subscriber +``` + +## Params + +| Type | Name | Description | +|--------|-------------|-----------------------------| +| string | name | nom du listener | +| string | serial_port | port série à écouter | +| int64 | bauds | vitesse de la liaison série | + +## Retour + +| Type | Name | Description | +|------|---------|------------------------| +| bool | success | requête réussie ou non | + +## Utilisé par +- [](Game-Controller-Listener-Node.md) +- [](Multiple-Serial-Listener-Node.md) +- [](PCB-Alim-Interface-Node.md) \ No newline at end of file diff --git a/Writerside/topics/AddServoMotor-Service-Interface.md b/Writerside/topics/AddServoMotor-Service-Interface.md new file mode 100644 index 0000000..ad0fc9a --- /dev/null +++ b/Writerside/topics/AddServoMotor-Service-Interface.md @@ -0,0 +1,28 @@ +# AddServoMotor +`` + +## Objectif + +## Interface +```cpp +uint8 pin +--- +bool success +``` + +## Params + +| Type | Name | Description | +|-------|------|---------------------| +| uint8 | pin | pin du servo moteur | + +## Retour + +| Type | Name | Description | +|------|---------|------------------------| +| bool | success | requête réussie ou non | + +## Utilisé par +- [](Arm-Controller-Node.md) +- [](Game-Controller-Listener-Node.md) +- [](PCA9685-Controller-Node.md) \ No newline at end of file diff --git a/Writerside/topics/AddSolenoid-Service-Interface.md b/Writerside/topics/AddSolenoid-Service-Interface.md new file mode 100644 index 0000000..7138b03 --- /dev/null +++ b/Writerside/topics/AddSolenoid-Service-Interface.md @@ -0,0 +1,26 @@ +# AddSolenoid +`` + +## Objectif + +## Interface +```cpp +uint8 pin +--- +bool success +``` + +## Params + +| Type | Name | Description | +|-------|------|-----------------| +| uint8 | pin | pin du solenoid | + +## Retour + +| Type | Name | Description | +|------|---------|------------------------| +| bool | success | requête réussie ou non | + +## Utilisé par +- [](Solenoid-Controller-Node.md) \ No newline at end of file diff --git a/Writerside/topics/Arm-Control-Topic.md b/Writerside/topics/Arm-Control-Topic.md new file mode 100644 index 0000000..85d834f --- /dev/null +++ b/Writerside/topics/Arm-Control-Topic.md @@ -0,0 +1,14 @@ +# Arm Control + + +## Nom du topic : **arm_control** +[Interface](ServoMode-Message-Interface.md) + +## Objectif +Contrôler les actionneurs du bras de [](Serge.md) + +### Publisher +- [](Game-Controller-Listener-Node.md) + +### Subscriber +- [](Arm-Controller-Node.md) diff --git a/Writerside/topics/Arm-Controller-Node.md b/Writerside/topics/Arm-Controller-Node.md new file mode 100644 index 0000000..d1dc5c5 --- /dev/null +++ b/Writerside/topics/Arm-Controller-Node.md @@ -0,0 +1,7 @@ +# Arm Controller + + +`` + +## Objectif +Node de contrôle du bras de [](Serge.md). diff --git a/Writerside/topics/Button-GPIO-Controller-Node.md b/Writerside/topics/Button-GPIO-Controller-Node.md new file mode 100644 index 0000000..594bb32 --- /dev/null +++ b/Writerside/topics/Button-GPIO-Controller-Node.md @@ -0,0 +1,12 @@ +# Button GPIO Controller +`` + +## Objectif +Contrôler un bouton sur un GPIO. + +### Topic +- [](Button-Topic.md) : Pour chaque bouton, un topic est créé pour publier l'état du bouton. + +### Service +- [](Add-Button-Service.md) : setup le contrôle d'un bouton sur un GPIO. +- [](Button-Service.md) : vérifier l'état d'un bouton. \ No newline at end of file diff --git a/Writerside/topics/Button-Message-Interface.md b/Writerside/topics/Button-Message-Interface.md new file mode 100644 index 0000000..c1ed7b7 --- /dev/null +++ b/Writerside/topics/Button-Message-Interface.md @@ -0,0 +1,21 @@ +# Button +`` + +## Objectif +Bouton on / off. + +## Interface +```cpp +uint8 pin +bool state +``` + +## Params + +| Type | Name | Description | +|-------|-------|-----------------| +| uint8 | pin | pin du solenoid | +| bool | state | état du bouton | + +## Utilisé par +- [](Button-GPIO-Controller-Node.md) \ No newline at end of file diff --git a/Writerside/topics/Button-Service-Interface.md b/Writerside/topics/Button-Service-Interface.md new file mode 100644 index 0000000..fad297f --- /dev/null +++ b/Writerside/topics/Button-Service-Interface.md @@ -0,0 +1,29 @@ +# Button +`` + +## Objectif +Connaitre l'état d'un bouton. + +## Interface +```cpp +uint8 pin +string name +--- +bool status +``` + +## Params + +| Type | Name | Description | +|--------|------|----------------| +| uint8 | pin | pin du button | +| string | name | nom du button | + +## Retour + +| Type | Name | Description | +|------|--------|------------------| +| bool | status | statue du bouton | + +## Utilisé par +- [](Button-GPIO-Controller-Node.md) \ No newline at end of file diff --git a/Writerside/topics/Button-Service.md b/Writerside/topics/Button-Service.md new file mode 100644 index 0000000..9b070d8 --- /dev/null +++ b/Writerside/topics/Button-Service.md @@ -0,0 +1,13 @@ +# Button + +## Nom du service : **button** +[Interface](Button-Service-Interface.md) + +## Objectif +Vérifier l'état d'un bouton. + +### Service +- [](Button-GPIO-Controller-Node.md) + +### Client +- diff --git a/Writerside/topics/Button-Topic.md b/Writerside/topics/Button-Topic.md new file mode 100644 index 0000000..4422cb4 --- /dev/null +++ b/Writerside/topics/Button-Topic.md @@ -0,0 +1,14 @@ +# Button + +## Nom du topic : **button/<name>** +[Interface](Button-Message-Interface.md) + +### Objectif +Pour chaque bouton crée à partir du Service [`Add Button`](Add-Button-Service.md), un topic est crée suivant la nomenclature suivante : `button/` +Ce topic permet de recevoir continuellement l'état du bouton. + +### Publisher +- [](Button-GPIO-Controller-Node.md) + +### Subscriber +- diff --git a/Writerside/topics/Clear-PCA9685.md b/Writerside/topics/Clear-PCA9685.md new file mode 100644 index 0000000..c73c5fe --- /dev/null +++ b/Writerside/topics/Clear-PCA9685.md @@ -0,0 +1,13 @@ +# Clear PCA9685 + +## Nom du topic : **clear_pca9685** +Interface : std_msgs/msg/Empty + +## Objectif +Reset tous les PWM du PCA9685. + +### Publisher +- [](Game-Controller-Listener-Node.md) + +### Subscriber +- [](PCA9685-Controller-Node.md) diff --git a/Writerside/topics/Code-Rasp.md b/Writerside/topics/Code-Rasp.md new file mode 100644 index 0000000..a4f1ed1 --- /dev/null +++ b/Writerside/topics/Code-Rasp.md @@ -0,0 +1,8 @@ +# Code Rasp + +Vous touverez ici la documentation pour tout savoir sur notre raspberry pi et le code qui tourne dessus. + +### Dependence +- [ROS2](ROS2.md) +- [Qt6](https://www.qt.io/download) : Qt est un framework de développement d'applications multiplateformes. Il est utilisé pour créer l'interface graphique du robot. +- [WiringPi](https://github.com/WiringPi/WiringPi) : WiringPi est une bibliothèque C pour la Raspberry Pi qui permet d'accéder aux GPIO. Elle est utilisée pour contrôler les actionneurs et lire les capteurs du robot. diff --git a/Writerside/topics/Developpement.md b/Writerside/topics/Developpement.md new file mode 100644 index 0000000..f227e8e --- /dev/null +++ b/Writerside/topics/Developpement.md @@ -0,0 +1,11 @@ +# Developpement + + +### Debug +Pour recup les data de la rasp sur son pc-> +```bash +source /install/setup.bash +export RMW_IMPLEMENTATION=rmw_fastrtps_cpp +export FASTRTPS_DEFAULT_PROFILES_FILE=/fastdds_setup.xml +export ROS_DOMAIN_ID=128 +``` diff --git a/Writerside/topics/Game-Controller-Listener-Node.md b/Writerside/topics/Game-Controller-Listener-Node.md new file mode 100644 index 0000000..b3f22b6 --- /dev/null +++ b/Writerside/topics/Game-Controller-Listener-Node.md @@ -0,0 +1,12 @@ +# Game Controller Listener +`` + +## Objectif +Recevoir les données de la manette de jeu et contrôle le robot avec. + +### Topic +- [](Joy-Topic.md) : reçoit les données de la manette de jeu. +- [](Arm-Control-Topic.md) : envoie les données de contrôle du bras. + +### Service +- [](Add-Serial-Listener-Service.md) : créer un nouveau listener USB pour l'odometrie. \ No newline at end of file diff --git a/Writerside/topics/Joy-Topic.md b/Writerside/topics/Joy-Topic.md new file mode 100644 index 0000000..958ed99 --- /dev/null +++ b/Writerside/topics/Joy-Topic.md @@ -0,0 +1,13 @@ +# Joy + +## Nom du topic : **joy** +Interface : sensor_msgs/msg/Joy + +## Objectif +Transmettre les données de la manette de jeu. + +### Publisher +- Joy + +### Subscriber +- [](Game-Controller-Listener-Node.md) diff --git a/Writerside/topics/Lidar-Controller-Node.md b/Writerside/topics/Lidar-Controller-Node.md new file mode 100644 index 0000000..06360c4 --- /dev/null +++ b/Writerside/topics/Lidar-Controller-Node.md @@ -0,0 +1,10 @@ +# Lidar Controller +`` + +## Objectif +Traite les infos recu par le lidar et les envoie au systeme de navigation. + +### Topic +- [](Lidar-Topic.md) + +### Service \ No newline at end of file diff --git a/Writerside/topics/Lidar-Topic.md b/Writerside/topics/Lidar-Topic.md new file mode 100644 index 0000000..2ab8829 --- /dev/null +++ b/Writerside/topics/Lidar-Topic.md @@ -0,0 +1,13 @@ +# Lidar + +## nom du topic : **scan** +Interface : sensor_msgs/msg/LaserScan + +## Objectif +Recevoir les données de télémétrie du lidar. + +### Publisher +- Rplidar + +### Subscriber +- [](Lidar-Topic.md) diff --git a/Writerside/topics/Message.md b/Writerside/topics/Message.md new file mode 100644 index 0000000..376cbb2 --- /dev/null +++ b/Writerside/topics/Message.md @@ -0,0 +1 @@ +# Message diff --git a/Writerside/topics/Move-Controller-Node.md b/Writerside/topics/Move-Controller-Node.md new file mode 100644 index 0000000..c86c59a --- /dev/null +++ b/Writerside/topics/Move-Controller-Node.md @@ -0,0 +1,10 @@ + + +# Move Controller +`` + +## Objectif +Node de test pour déplacer le robot sans le faire bouger pour tester les autres Nodes. + +> **Warning**: Ce node est deprecated et n'est plus utilisé dans le code actuel. Il est conservé pour référence historique. +{style="warning"} diff --git a/Writerside/topics/Multiple-Serial-Listener-Node.md b/Writerside/topics/Multiple-Serial-Listener-Node.md new file mode 100644 index 0000000..18f669b --- /dev/null +++ b/Writerside/topics/Multiple-Serial-Listener-Node.md @@ -0,0 +1,16 @@ +# Multiple Serial Listener +`` + +## Objectif +Un listener pour plusieurs ports série. + +Le but de ce nœud est de permettre la communication avec plusieurs ports série en même temps. Il est configuré pour écouter les données sur plusieurs ports et les publier sur des topics ROS2 distincts. Cela permet de gérer plusieurs périphériques série simultanément sans avoir à créer un nœud séparé pour chaque port. + +### Topic +Ce nœud écoute et publie sur les topics suivants (un pour chaque port série) : +- [](Raw-Data-Topic.md) : recup les informations brutes envoyées par le port série et les transmet au travers du topic. +- [](Send-To-Serial-Topic.md) : envoie les données brutes au port série. + +### Service +Le noeud expose un service pour setup un port série : +- [](AddSerialListener-Service-Interface.md) \ No newline at end of file diff --git a/Writerside/topics/Nodes.md b/Writerside/topics/Nodes.md new file mode 100644 index 0000000..44a7b53 --- /dev/null +++ b/Writerside/topics/Nodes.md @@ -0,0 +1,3 @@ +# Nodes + +Start typing here... \ No newline at end of file diff --git a/Writerside/topics/Odometry-Data-Topic.md b/Writerside/topics/Odometry-Data-Topic.md new file mode 100644 index 0000000..9888c6c --- /dev/null +++ b/Writerside/topics/Odometry-Data-Topic.md @@ -0,0 +1,13 @@ +# Odometry Data + +### Nom du topic : **odometry_data** +[Interface](OdometryData-Message-Interface.md) + +### Objectif +Transmettre la position du robot renvoyé par l'odométrie. + +### Publisher +- [](Odometry-Logic-Processor-Node.md) + +### Subscriber +- diff --git a/Writerside/topics/Odometry-Listener-Serial-Topic.md b/Writerside/topics/Odometry-Listener-Serial-Topic.md new file mode 100644 index 0000000..46d82b3 --- /dev/null +++ b/Writerside/topics/Odometry-Listener-Serial-Topic.md @@ -0,0 +1,13 @@ +# Odometry + +Un usb listener est setup avec comme nom `odometry`, il permet d'envoyer des données à l'odométrie grace au topic [](Send-To-Serial-Topic.md) et de recevoir des données de l'odométrie grace au topic [](Raw-Data-Topic.md). +Les paramètres sont les suivants : +- **name** : `odometry` +- **baudrate** : `115200` +- **serial_port** : `/dev/pts/6` + +### Publisher +- [](Multiple-Serial-Listener-Node.md) + +### Subscriber +- [](Odometry-Logic-Processor-Node.md) diff --git a/Writerside/topics/Odometry-Logic-Processor-Node.md b/Writerside/topics/Odometry-Logic-Processor-Node.md new file mode 100644 index 0000000..40d3aba --- /dev/null +++ b/Writerside/topics/Odometry-Logic-Processor-Node.md @@ -0,0 +1,13 @@ +# Odometry Logic Processor +`` + +## Objectif +Le but de ce noeud est de traiter les données d'odométrie envoyées par le noeud de listener USB et de les publier sur le topic `odometry` pour être utilisées par d'autres noeuds. + +### Topic +**[](Odometry-Listener-Serial-Topic.md)** +- [](Raw-Data-Topic.md) : reçoit les données brutes envoyées par le port série. +- [](Send-To-Serial-Topic.md) : envoie les données brutes au port série. + +### Service +- [](Add-Serial-Listener-Service.md) : créer un nouveau listener USB pour l'odométrie. diff --git a/Writerside/topics/OdometryData-Message-Interface.md b/Writerside/topics/OdometryData-Message-Interface.md new file mode 100644 index 0000000..94c9c2c --- /dev/null +++ b/Writerside/topics/OdometryData-Message-Interface.md @@ -0,0 +1,22 @@ +# OdometryData +`` + +## Objectif +Transmission des données d'odométrie depuis le controller vers la rasp + +## Interface +```cpp +int64 x +int64 y +int64 theta +``` + +## Params +| Type | Name | Description | +|-------|-------|---------------| +| int64 | x | position en x | +| int64 | y | position en y | +| int64 | theta | angle selon z | + +## Utilisé par +- [](Odometry-Logic-Processor-Node.md) \ No newline at end of file diff --git a/Writerside/topics/PCA9685-Controller-Node.md b/Writerside/topics/PCA9685-Controller-Node.md new file mode 100644 index 0000000..4464d5b --- /dev/null +++ b/Writerside/topics/PCA9685-Controller-Node.md @@ -0,0 +1,12 @@ +# PCA9685 Controller +`` + +## Objectif +Contrôler le PCA9685 qui va lui-même contrôler des servo moteur grâce à des signaux PWM. + +### Topic +- [](Servo-Control-Topic.md) : mettre à jour la position angulaire d'un servo moteur. +- [](Clear-PCA9685.md) : reset tous les PWM du PCA9685. + +### Service +- [](Add-Servo-Service.md) : setup le contrôle d'un servo moteur. \ No newline at end of file diff --git a/Writerside/topics/PCA9685Servo-Message-Interface.md b/Writerside/topics/PCA9685Servo-Message-Interface.md new file mode 100644 index 0000000..57b3c23 --- /dev/null +++ b/Writerside/topics/PCA9685Servo-Message-Interface.md @@ -0,0 +1,23 @@ +# PCA9685Servo +`` + +## Objectif +Activer / désactiver un servo moteur. + +## Interface +```cpp +uint8 pin +int64 angle +``` + +## Params + +| Type | Name | Description | +|-------|-------|-----------------------| +| uint8 | pin | pin du solenoid | +| int64 | angle | angle du servo moteur | + +## Utilisé par +- [](PCA9685-Controller-Node.md) +- [](Arm-Controller-Node.md) +- [](Game-Controller-Listener-Node.md) \ No newline at end of file diff --git a/Writerside/topics/PCB-Alim-Interface-Node.md b/Writerside/topics/PCB-Alim-Interface-Node.md new file mode 100644 index 0000000..18de70f --- /dev/null +++ b/Writerside/topics/PCB-Alim-Interface-Node.md @@ -0,0 +1,13 @@ +# PCB Alim Interface +`` + +## Objectif +Interface entre le PCB alim et le systeme de navigation. + +### Topic +**[](PCB-Alim-Serial-Topic.md)** +- [](Raw-Data-Topic.md) : reçoit les données brutes envoyées par le port série. +- [](Send-To-Serial-Topic.md) : envoie les données brutes au port série. + +### Service +- [](Add-Serial-Listener-Service.md) : créer un nouveau listener USB pour le control du . diff --git a/Writerside/topics/PCB-Alim-Serial-Topic.md b/Writerside/topics/PCB-Alim-Serial-Topic.md new file mode 100644 index 0000000..7ddd277 --- /dev/null +++ b/Writerside/topics/PCB-Alim-Serial-Topic.md @@ -0,0 +1,13 @@ +# PCB Alim + +Un usb listener est setup avec comme nom `pcb_alim`, il permet d'envoyer des données au PCB grace au topic [](Send-To-Serial-Topic.md) et de recevoir des données du PCB grace au topic [](Raw-Data-Topic.md). +Les paramètres sont les suivants : +- **name** : `odometry` +- **baudrate** : `115200` +- **serial_port** : `/dev/serial0` + +### Publisher +- [](Multiple-Serial-Listener-Node.md) + +### Subscriber +- [](PCB-Alim-Interface-Node.md) diff --git a/Writerside/topics/ROS2-Installation.md b/Writerside/topics/ROS2-Installation.md new file mode 100644 index 0000000..a1247cf --- /dev/null +++ b/Writerside/topics/ROS2-Installation.md @@ -0,0 +1,17 @@ +# Installation + +Si vous êtes sur Windows, il est recommandé d'utiliser WSL (Windows Subsystem for Linux) pour installer ROS2. Si vous êtes sur Linux, vous pouvez suivre les instructions ci-dessous. +> Il existe tout de même une version de [ROS2 pour Windows](https://docs.ros.org/en/foxy/Installation/Windows-Install-Binary.html), mais elle est moins stable et moins bien supportée que la version Linux. +> De plus aucun test n'a été effectué sur cette version. À vos risques et périls. + +## Installation sur WSL + +### Installation ROS2 sur WSL +Installation de ROS2 sur WSL (Windows Subsystem for Linux) pour Windows. Il est recommandé d'utiliser la version 22.04 d'Ubuntu, car elle est plus stable et compatible avec ROS2. +Ensuite, suivez la documentation officielle de [ROS2 Jazzy](https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html) + +Il faut savoir que le projet ne peut pas être lancé directement depuis WSL, Modelec utilise la librairie [WiringPi](https://github.com/WiringPi/WiringPi) pour utiliser les GPIO de la Raspberry Pi. Lorsque vous lancez le projet autre part que sur une Raspberry Pi, la lib detecteras qu'elle n'est pas sur une Raspberry Pi et ne fonctionnera pas. Il faut donc lancer le projet sur la Raspberry Pi. +Tout de même, il est possible de faire tourner le projet sans les `Nodes` liés aux actionneurs et capteurs. (Vous pouvez lancer des Nodes indépendamment de ceux liés aux actionneurs et capteurs de plus WiringPi va seulement afficher des erreurs, mais ne vas pas "cassé" le projet). + +### Developpement sur WSL +Pour développer sur WSL, vous pouvez utiliser différent IDE, actuellement, nous utilisons VS-Code ainsi que CLion. Pour utiliser VS-Code, ouvrez simplement votre projet WSL, pour CLion rendez-vous [ici](ROS2-avec-JetBrain-pour-windows.md) pour savoir comment le configurer. diff --git a/Writerside/topics/ROS2-Interfaces.md b/Writerside/topics/ROS2-Interfaces.md new file mode 100644 index 0000000..fd7b81c --- /dev/null +++ b/Writerside/topics/ROS2-Interfaces.md @@ -0,0 +1,3 @@ +# Interfaces package + +Start typing here... \ No newline at end of file diff --git a/Writerside/topics/ROS2-Intro.md b/Writerside/topics/ROS2-Intro.md new file mode 100644 index 0000000..6cb36b1 --- /dev/null +++ b/Writerside/topics/ROS2-Intro.md @@ -0,0 +1,24 @@ +# Intro + +#### Intro by ChatGPT +ROS 2 (Robot Operating System 2) est un framework open-source conçu pour le développement de logiciels pour robots. C'est une évolution de ROS 1, améliorée pour mieux répondre aux exigences des systèmes robotiques modernes, notamment en matière de fiabilité, de performances et de compatibilité avec les environnements embarqués et temps réel. + +##### Caractéristiques principales de ROS 2 : +- Architecture distribuée : Les différents composants d'un robot (capteurs, actionneurs, algorithmes, etc.) communiquent via un système de messages asynchrones. +- Middleware DDS : ROS 2 repose sur DDS (Data Distribution Service), un standard permettant une communication robuste et adaptable aux réseaux variés. +- Support multi-plateforme : Compatible avec Linux, Windows, macOS et même des systèmes embarqués. +- Gestion améliorée du temps réel : Permet un meilleur contrôle des latences, essentiel pour les robots nécessitant des réactions précises. +- Modularité et scalabilité : Facilite le développement de robots complexes en permettant d'ajouter ou de modifier des composants indépendamment. + +##### Composants clés : +- Nœuds : Petits programmes qui effectuent des tâches spécifiques. +- Topics : Canaux de communication permettant aux nœuds d’échanger des messages. +- Services : Communication synchrone entre nœuds (requête/réponse). +- Actions : Permettent l’exécution de tâches longues avec des mises à jour d’état. +- Paramètres : Variables configurables qui influencent le comportement des nœuds. + +#### Exemples d'utilisation : +- Contrôle d’un bras robotique +- Navigation autonome d’un robot mobile +- Fusion de données issues de plusieurs capteurs +- Si tu veux commencer avec ROS 2, l’installation et la configuration initiale se font via Ubuntu (recommandé) et tu peux tester avec des packages comme turtlesim pour voir le fonctionnement des nœuds et topics en pratique. diff --git a/Writerside/topics/ROS2-Modelec.md b/Writerside/topics/ROS2-Modelec.md new file mode 100644 index 0000000..12207ce --- /dev/null +++ b/Writerside/topics/ROS2-Modelec.md @@ -0,0 +1,28 @@ +# Modelec package + +## Pourquoi ROS2 sur Marcel ? + +### 2024 +En 2024, le robot [Serge](Serge.md) n'utilisait pas ROS2 ni aucun framework de robotique. Il était programmé en C++, mais il n'y avait pas de structure de code particulière. Le code était divisé en plusieurs fichiers, mais il n'y avait pas de séparation claire entre les différentes parties du code. Le code était difficile à lire et à comprendre, ce qui rendait la maintenance et l'ajout de nouvelles fonctionnalités difficiles. + + +#### Avantages du vanilla c++ +- Facilité de compréhension : Le code est plus facile à comprendre pour les personnes qui ne connaissent pas ROS2. +- Pas de dépendances : Le code n'a pas besoin de dépendances externes, ce qui le rend plus léger et plus facile à déployer. +- Pas de surcoût : Le code n'a pas besoin de ressources supplémentaires pour fonctionner, ce qui le rend plus rapide et plus efficace. +- Pas de complexité : Le code est plus simple et plus facile à comprendre, ce qui le rend plus facile à maintenir et à déboguer. + +#### Inconvenients +- Pas de modularité : Le code n'est pas modulaire, ce qui rend difficile l'ajout de nouvelles fonctionnalités. +- Pas de réutilisabilité : Le code n'est pas réutilisable, ce qui rend difficile l'utilisation de bibliothèques externes. +- Pas de standardisation : Le code n'est pas standardisé, ce qui rend difficile la compréhension du code par d'autres personnes. +- Pas de documentation : Le code n'est pas documenté, ce qui rend difficile la compréhension du code par d'autres personnes. + +### Conclusion +En 2024, le robot Serge n'utilisait pas ROS2 ni aucun framework de robotique. Le code était écrit en C++ sans structure particulière, ce qui le rendait difficile à lire et à maintenir. Bien que cela ait des avantages en termes de simplicité et de légèreté, cela a également entraîné des inconvénients majeurs tels que le manque de modularité, de réutilisabilité et de documentation. En conséquence, il était difficile d'ajouter de nouvelles fonctionnalités ou de comprendre le code par d'autres personnes. +C'est pourquoi en 2025 le club Modelec a décidé de passer à ROS2 après avoir étudié son potentiel et ses avantages par rapport à la programmation en C++ sans structure particulière. Le passage à ROS2 a permis de structurer le code, de le rendre plus modulaire et réutilisable, et de faciliter la compréhension et la maintenance du code. De plus, ROS2 offre de nombreuses bibliothèques et outils qui facilitent le développement de logiciels pour robots, ce qui a permis au club Modelec de se concentrer sur l'implémentation de nouvelles fonctionnalités plutôt que sur la gestion du code. + +> À partir de maintenant, nous allons plonger à l'intérieur de l'infrastructure ROS2 et de son fonctionnement. +> Il est donc indispensable d'avoir des bases en ROS2 pour comprendre la suite. +> Si vous ne connaissez pas ROS2, il est fortement recommandé de lire la documentation officielle ou de suivre un tutoriel d'introduction avant de continuer. +{style="warning"} \ No newline at end of file diff --git a/Writerside/topics/ROS2-UI.md b/Writerside/topics/ROS2-UI.md new file mode 100644 index 0000000..b3fa909 --- /dev/null +++ b/Writerside/topics/ROS2-UI.md @@ -0,0 +1,14 @@ +# GUI packages + +Modelec utilise Qt6 pour créer l'interface graphique de son robot. +> ROS2 utilise nativement Qt5 pour l'interface graphique, mais nous avons choisi de passer à Qt6 pour des raisons de compatibilité et de fonctionnalités. + +## Installation de Qt6 +Pour installer Qt6 sur votre Raspberry Pi, suivez les instructions suivantes : +- exécutez la commande suivante : +```bash +sudo apt install qt6-base-dev qt6-base-dev-tools +``` + +## Programmation de l'interface graphique +L'interface graphique est developpée dans le package ros et tourne dans une Node (ce qui lui permet d'échanger avec les autres Nodes du projet). \ No newline at end of file diff --git a/Writerside/topics/ROS2-avec-JetBrain-pour-windows.md b/Writerside/topics/ROS2-avec-JetBrain-pour-windows.md new file mode 100644 index 0000000..53b5f81 --- /dev/null +++ b/Writerside/topics/ROS2-avec-JetBrain-pour-windows.md @@ -0,0 +1,28 @@ +# ROS2 avec JetBrain (pour windows) +Pour les personnes utilisant un IDE JetBrain sur Windows, mais avec une installation ROS2 sur WLS, voici comment load le projet sur JetBrain. +>Test Effectué avec CLion + +## Requis +- Avoir installé WSL avec une distribution Linux (Ubuntu 20.04 ou 22.04 recommandés) +- Avoir installé un editeur JetBrain (CLion préféré, car nous développons principalement en C++) +- Avoir installé ROS2 sur WSL (voir [ici](ROS2-Installation.md#installation-sur-wsl)) + +## 1. Ouvrir le projet +- Ouvrir CLion +- Si vous êtes dans un projet aller dans File > Close Project +- Ensuite aller dans Remote Development > WSL +- Connecter vous ensuite a votre distribution WSL via le menu +- Puis ouvrir le dossier de votre projet ROS2 (cela peut être un peu long, car JetBrain va installer un serveur sur WSL) +- Et pouf, vous avez votre projet ROS2 sur JetBrain + +## 2. Configurer le projet +- Dans le terminal de votre WSL, execute les commandes suivante : +```bash +source /opt/ros/jazzy/setup.bash +colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=1 +``` +- Ensuite cela devrait avoir crée un dossier `build` dans votre projet +- Dans ce dossier build devrait être présent un fichier `compile_commands.json` +- Faite clique droit sur ce fichier et selectionner `Load Compilation Database Project` +- Si tout c'est bien passé, votre projet devrais maintenant être configuré avec ROS2 sur JetBrain ! +- Pour tester, vous pouvez essayer de faire un `Ctrl + Click` sur une fonction de ROS2 et cela devrais vous amener a la déclaration de la fonction. diff --git a/Writerside/topics/ROS2.md b/Writerside/topics/ROS2.md new file mode 100644 index 0000000..76c338f --- /dev/null +++ b/Writerside/topics/ROS2.md @@ -0,0 +1,3 @@ +# ROS2 + +Documentation pour utiliser ROS2 en adéquation avec le robot Marcel 2k25. \ No newline at end of file diff --git a/Writerside/topics/Raw-Data-Topic.md b/Writerside/topics/Raw-Data-Topic.md new file mode 100644 index 0000000..b8a9275 --- /dev/null +++ b/Writerside/topics/Raw-Data-Topic.md @@ -0,0 +1,7 @@ +# Raw Data + +## Nom du topic : **raw_data/<name>** +Interface : std_msgs/msg/String + +## Objectif +Transmettre des données brutes depuis le port vers le rasp. diff --git a/Writerside/topics/Send-To-Serial-Topic.md b/Writerside/topics/Send-To-Serial-Topic.md new file mode 100644 index 0000000..b156263 --- /dev/null +++ b/Writerside/topics/Send-To-Serial-Topic.md @@ -0,0 +1,7 @@ +# Send To Serial + +## Nom du topic : **send_to_serial/<name>** +Interface : std_msgs/msg/String + +## Objectif +Transmettre des données vers le port série. \ No newline at end of file diff --git a/Writerside/topics/Serial-Listener-Topic.md b/Writerside/topics/Serial-Listener-Topic.md new file mode 100644 index 0000000..59f7fb7 --- /dev/null +++ b/Writerside/topics/Serial-Listener-Topic.md @@ -0,0 +1,5 @@ +# Serial Listener + +Pour chaque [](Serial-Listener-Topic.md), deux topics sont créés : +- [](Raw-Data-Topic.md) : recupère les données brutes envoyées par le port série et les transmet au rasp. +- [](Send-To-Serial-Topic.md) : envoie les données brutes au port série. diff --git a/Writerside/topics/Service.md b/Writerside/topics/Service.md new file mode 100644 index 0000000..d663937 --- /dev/null +++ b/Writerside/topics/Service.md @@ -0,0 +1 @@ +# Service diff --git a/Writerside/topics/Services.md b/Writerside/topics/Services.md new file mode 100644 index 0000000..15d6a89 --- /dev/null +++ b/Writerside/topics/Services.md @@ -0,0 +1 @@ +# Services diff --git a/Writerside/topics/Servo-Control-Topic.md b/Writerside/topics/Servo-Control-Topic.md new file mode 100644 index 0000000..41d52be --- /dev/null +++ b/Writerside/topics/Servo-Control-Topic.md @@ -0,0 +1,14 @@ +# Servo Control + +## Nom du topic : **servo_control** +[Interface](PCA9685Servo-Message-Interface.md) + +## Objectif +Mettre à jour la position angulaire d'un servo moteur. + +### Publisher +- [](Game-Controller-Listener-Node.md) +- [](Arm-Controller-Node.md) + +### Subscriber +- [](PCA9685-Controller-Node.md) diff --git a/Writerside/topics/Servo-Topic.md b/Writerside/topics/Servo-Topic.md new file mode 100644 index 0000000..84ab623 --- /dev/null +++ b/Writerside/topics/Servo-Topic.md @@ -0,0 +1,5 @@ +# Servo +Topic liée au contrôle des servos moteurs. + +- [](Servo-Control-Topic.md) +- [](Clear-PCA9685.md) diff --git a/Writerside/topics/ServoMode-Message-Interface.md b/Writerside/topics/ServoMode-Message-Interface.md new file mode 100644 index 0000000..b39dfb9 --- /dev/null +++ b/Writerside/topics/ServoMode-Message-Interface.md @@ -0,0 +1,38 @@ +# ServoMode + + +`` + +## Objectif +Activer / désactiver un servo moteur (dans le contexte de Serge). + +## Interface +```cpp +uint8 PINCE_CLOSED=0 +uint8 PINCE_MIDDLE=1 +uint8 PINCE_OPEN=2 +uint8 PINCE_FULLY_OPEN=3 +uint8 ARM_BOTTOM=4 +uint8 ARM_MIDDLE=5 +uint8 ARM_TOP=6 + +uint8 pin +uint8 mode +bool is_arm +``` + +> DEPECATED: Ce message était utilisé pour [Serge](Serge.md) +> Il va donc être supprimé dans une prochaine version. +{style="warning"} + +## Params + +| Type | Name | Description | +|-------|--------|----------------------| +| uint8 | pin | pin du solenoid | +| uint8 | mode | mode du servo moteur | +| bool | is_arm | si c'est un bras | + +## Utilisé par +- [](Arm-Controller-Node.md) +- [](Game-Controller-Listener-Node.md) \ No newline at end of file diff --git a/Writerside/topics/Solenoid-Controller-Node.md b/Writerside/topics/Solenoid-Controller-Node.md new file mode 100644 index 0000000..f78031c --- /dev/null +++ b/Writerside/topics/Solenoid-Controller-Node.md @@ -0,0 +1,11 @@ +# Solenoid Controller +`` + +## Objectif +Contrôler l'état d'un solénoïde. + +### Topic +- [](Solenoid-Topic.md) : Contrôle de chaque solénoïde via ce topic. + +### Service +- [](Add-Solenoid-Service.md) : Setup le contrôle d'un solénoïde sur un GPIO. \ No newline at end of file diff --git a/Writerside/topics/Solenoid-Topic.md b/Writerside/topics/Solenoid-Topic.md new file mode 100644 index 0000000..e8ae147 --- /dev/null +++ b/Writerside/topics/Solenoid-Topic.md @@ -0,0 +1,13 @@ +# Solénoïde + +## Nom du topic : **solenoid** +[Interface](Solenoide-Message-Interface.md) + +## Objectif +Contrôler l'état d'un solénoïde. + +### Publisher +- + +### Subscriber +- [](Solenoid-Controller-Node.md) diff --git a/Writerside/topics/Solenoide-Message-Interface.md b/Writerside/topics/Solenoide-Message-Interface.md new file mode 100644 index 0000000..dd56478 --- /dev/null +++ b/Writerside/topics/Solenoide-Message-Interface.md @@ -0,0 +1,21 @@ +# Solénoïde +`` + +## Objectif +Activer / désactiver un solénoïde. + +## Interface +```cpp +uint8 pin +bool state +``` + +## Params + +| Type | Name | Description | +|-------|-------|------------------| +| uint8 | pin | pin du solenoid | +| bool | state | état du solenoid | + +## Utilisé par +- [](Solenoid-Controller-Node.md) \ No newline at end of file diff --git a/Writerside/topics/Tirette-Controller-Node.md b/Writerside/topics/Tirette-Controller-Node.md new file mode 100644 index 0000000..e689fe3 --- /dev/null +++ b/Writerside/topics/Tirette-Controller-Node.md @@ -0,0 +1,11 @@ +# Tirette Controller +`` + +## Objectif +Contrôler l'état de la tirette. + +### Topic +- [](Tirette-Topic.md) : envoie en continu l'état de la tirette. + +### Service +- [](Tirette-Service.md) : permet de vérifier l'état de la tirette à la demande. diff --git a/Writerside/topics/Tirette-Service-Interface.md b/Writerside/topics/Tirette-Service-Interface.md new file mode 100644 index 0000000..82667f8 --- /dev/null +++ b/Writerside/topics/Tirette-Service-Interface.md @@ -0,0 +1,22 @@ +# Tirette +`` + +## Objectif +Connaitre l'état de la tirette. + +## Interface +```cpp +--- +bool status +``` + +## Params + +## Retour + +| Type | Name | Description | +|------|--------|----------------------| +| bool | status | statue de la tirette | + +## Utilisé par +- [Tirette](Tirette-Controller-Node.md) \ No newline at end of file diff --git a/Writerside/topics/Tirette-Service.md b/Writerside/topics/Tirette-Service.md new file mode 100644 index 0000000..141d821 --- /dev/null +++ b/Writerside/topics/Tirette-Service.md @@ -0,0 +1,13 @@ +# Tirette + +## Nom du service : **tirette** +[Interface](Tirette-Service-Interface.md) + +## Objectif +Vérifier l'état de la tirette. + +### Service +- [](Tirette-Controller-Node.md) + +### Client +- diff --git a/Writerside/topics/Tirette-Topic.md b/Writerside/topics/Tirette-Topic.md new file mode 100644 index 0000000..fa4d5db --- /dev/null +++ b/Writerside/topics/Tirette-Topic.md @@ -0,0 +1,11 @@ +# Tirette + +## nom du topic : **tirette_state** + +## Objectif +Vérifier l'état de la tirette en permanence. + +### Publishers +- [](Tirette-Controller-Node.md) + +### Subscribers diff --git a/Writerside/topics/Topics.md b/Writerside/topics/Topics.md new file mode 100644 index 0000000..e8da675 --- /dev/null +++ b/Writerside/topics/Topics.md @@ -0,0 +1,2 @@ +# Topics +pour voir en temps réel lors de l'execution les topics créer executé cette commande : `ros2 topic list` diff --git a/Writerside/topics/Utils.md b/Writerside/topics/Utils.md new file mode 100644 index 0000000..af57b41 --- /dev/null +++ b/Writerside/topics/Utils.md @@ -0,0 +1,26 @@ +# Utils + +## Objectif +Fonction utilitaire pour le développement utile pour plusieurs Nodes. + +### Variable +PI -> 3.14159265358979323846 + +### Fonctions +#### `std::vector split(const std::string &s, char delim)` +Découpe une chaîne de caractères en fonction d'un délimiteur. + +#### `std::string join(const std::vector &v, const std::string &delim)` +Joint un vecteur de chaînes de caractères en une seule chaîne, séparée par un délimiteur. + +#### `bool startsWith(const std::string &s, const std::string &prefix)` +Vérifie si une chaîne commence par un certain préfixe. + +#### `bool endsWith(const std::string &s, const std::string &suffix)` +Vérifie si une chaîne se termine par un certain suffixe. + +#### `bool contains(const std::string &s, const std::string &substring)` +Vérifie si une chaîne contient une sous-chaîne. + +#### `T mapValue(T v, T v_min, T v_max, T v_min_prime, T v_max_prime)` +Mappe une valeur d'un intervalle à un autre. \ No newline at end of file diff --git a/Writerside/writerside.cfg b/Writerside/writerside.cfg index 14cb344..98d7efd 100644 --- a/Writerside/writerside.cfg +++ b/Writerside/writerside.cfg @@ -5,4 +5,5 @@ + \ No newline at end of file