Merge remote-tracking branch 'origin/main'

# Conflicts:
#	Writerside/gu.tree
This commit is contained in:
Allan Cueff
2025-04-01 23:47:06 +02:00
63 changed files with 959 additions and 1 deletions

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE instance-profile
SYSTEM "https://resources.jetbrains.com/writerside/1.0/product-profile.dtd">
<instance-profile id="Writerside_libraries"
name="Writerside_libraries" is-library="true">
</instance-profile>

View File

@@ -17,7 +17,6 @@
</toc-element>
<toc-element topic="Coupe-de-France-de-Robotique-2025.md">
<toc-element topic="Marcel.md">
<toc-element topic="Moteur-CC.md"/>
<toc-element topic="PCB-alimentation.md">
<toc-element topic="Pilotage-PCB-alimentation.md"/>
</toc-element>
@@ -25,6 +24,77 @@
<toc-element topic="Pilotage-PCB-odometrie.md"/>
</toc-element>
<toc-element topic="Panneau-de-commande.md"/>
<toc-element topic="Moteur-CC.md"/>
<toc-element topic="Code-Rasp.md">
<toc-element topic="ROS2.md">
<toc-element topic="ROS2-Intro.md"/>
<toc-element topic="ROS2-Installation.md">
<toc-element topic="ROS2-avec-JetBrain-pour-windows.md"/>
</toc-element>
<toc-element topic="ROS2-Modelec.md">
<toc-element topic="Nodes.md">
<toc-element topic="Arm-Controller-Node.md"/>
<toc-element topic="Button-GPIO-Controller-Node.md"/>
<toc-element topic="Game-Controller-Listener-Node.md"/>
<toc-element topic="Lidar-Controller-Node.md"/>
<toc-element topic="Move-Controller-Node.md"/>
<toc-element topic="Multiple-Serial-Listener-Node.md"/>
<toc-element topic="Odometry-Logic-Processor-Node.md"/>
<toc-element topic="PCA9685-Controller-Node.md"/>
<toc-element topic="PCB-Alim-Interface-Node.md"/>
<toc-element topic="Solenoid-Controller-Node.md"/>
<toc-element topic="Tirette-Controller-Node.md"/>
</toc-element>
<toc-element topic="Topics.md">
<toc-element topic="Arm-Control-Topic.md"/>
<toc-element topic="Button-Topic.md"/>
<toc-element topic="Lidar-Topic.md"/>
<toc-element topic="Odometry-Data-Topic.md"/>
<toc-element topic="Solenoid-Topic.md"/>
<toc-element topic="Serial-Listener-Topic.md">
<toc-element topic="Raw-Data-Topic.md"/>
<toc-element topic="Send-To-Serial-Topic.md"/>
<toc-element topic="Odometry-Listener-Serial-Topic.md"/>
<toc-element topic="PCB-Alim-Serial-Topic.md"/>
</toc-element>
<toc-element topic="Servo-Topic.md">
<toc-element topic="Servo-Control-Topic.md"/>
<toc-element topic="Clear-PCA9685.md"/>
</toc-element>
<toc-element topic="Tirette-Topic.md"/>
<toc-element topic="Joy-Topic.md"/>
</toc-element>
<toc-element topic="Services.md">
<toc-element topic="Add-Button-Service.md"/>
<toc-element topic="Add-Solenoid-Service.md"/>
<toc-element topic="Add-Serial-Listener-Service.md"/>
<toc-element topic="Add-Servo-Service.md"/>
<toc-element topic="Button-Service.md"/>
<toc-element topic="Tirette-Service.md"/>
</toc-element>
<toc-element topic="Utils.md"/>
</toc-element>
<toc-element topic="ROS2-UI.md"/>
<toc-element topic="ROS2-Interfaces.md">
<toc-element topic="Message.md">
<toc-element topic="Button-Message-Interface.md"/>
<toc-element topic="OdometryData-Message-Interface.md"/>
<toc-element topic="PCA9685Servo-Message-Interface.md"/>
<toc-element topic="Solenoide-Message-Interface.md"/>
<toc-element topic="ServoMode-Message-Interface.md"/>
</toc-element>
<toc-element topic="Service.md">
<toc-element topic="AddButton-Service-Interface.md"/>
<toc-element topic="AddSolenoid-Service-Interface.md"/>
<toc-element topic="AddSerialListener-Service-Interface.md"/>
<toc-element topic="AddServoMotor-Service-Interface.md"/>
<toc-element topic="Button-Service-Interface.md"/>
<toc-element topic="Tirette-Service-Interface.md"/>
</toc-element>
</toc-element>
<toc-element topic="Developpement.md"/>
</toc-element>
</toc-element>
</toc-element>
</toc-element>
<toc-element topic="Coupe-De-France-de-Robotique-2024.md">

11
Writerside/labels.list Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE labels SYSTEM "https://resources.jetbrains.com/writerside/1.0/labels-list.dtd">
<labels xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/labels.xsd">
<primary-label id="Deprecated" short-name="D" name="Deprecated" color="red">
This feature is deprecated and will be removed in the future.
</primary-label>
<secondary-label id="wip" name="WIP" color="purple">Work in progress</secondary-label>
<secondary-label id="beta" name="β" color="tangerine">Beta</secondary-label>
</labels>

View File

@@ -23,4 +23,29 @@
<description>Created after removal of "dev" from Documentation Robot Modelec 2024</description>
<accepts>Reseau.html</accepts>
</rule>
<rule id="2aee5e8a">
<description>Created after removal of "ROS2" from Documentation Robot Modelec 2024</description>
<accepts>ROS2.html</accepts>
</rule>
<rule id="7d1843c2">
<description>Created after removal of "ArduinoData message interface" from Documentation Robot Modelec 2024
</description>
<accepts>ArduinoData.html</accepts>
</rule>
<rule id="797a0cd5">
<description>Created after removal of "ModelecSnippet" from Documentation Robot Modelec 2024</description>
<accepts>modelecsnippet.html</accepts>
</rule>
<rule id="19d7dbd0">
<description>Created after removal of "Add Button" from Documentation Robot Modelec 2024</description>
<accepts>Add-Button.html</accepts>
</rule>
<rule id="2aaa44a4">
<description>Created after removal of "Robot Position" from Documentation Robot Modelec 2024</description>
<accepts>Robot-Position.html</accepts>
</rule>
<rule id="35783336">
<description>Created after removal of "Robot Position" from Documentation Robot Modelec 2024</description>
<accepts>Robot-Position.html</accepts>
</rule>
</rules>

View File

@@ -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
-

View File

@@ -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)

View File

@@ -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)

View File

@@ -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
-

View File

@@ -0,0 +1,29 @@
# AddButton
`<modelec_interface/srv/add_button.hpp>`
## 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)

View File

@@ -0,0 +1,34 @@
# AddSerialListener
`<modelec_interface/srv/add_serial_listener.hpp>`
## 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)

View File

@@ -0,0 +1,28 @@
# AddServoMotor
`<modelec_interface/srv/add_servo_motor.hpp>`
## 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)

View File

@@ -0,0 +1,26 @@
# AddSolenoid
`<modelec_interface/srv/add_solenoid.hpp>`
## 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)

View File

@@ -0,0 +1,14 @@
# Arm Control
<primary-label ref="Deprecated"/>
## 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)

View File

@@ -0,0 +1,7 @@
# Arm Controller
<primary-label ref="Deprecated"/>
`<modelec/arm_controller.hpp>`
## Objectif
Node de contrôle du bras de [](Serge.md).

View File

@@ -0,0 +1,12 @@
# Button GPIO Controller
`<modelec/button_gpio_controller.hpp>`
## 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.

View File

@@ -0,0 +1,21 @@
# Button
`<modelec_interface/msg/button.hpp>`
## 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)

View File

@@ -0,0 +1,29 @@
# Button
`<modelec_interface/srv/button.hpp>`
## 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)

View File

@@ -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
-

View File

@@ -0,0 +1,14 @@
# Button
## Nom du topic : **button/&lt;name&gt;**
[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/<name>`
Ce topic permet de recevoir continuellement l'état du bouton.
### Publisher
- [](Button-GPIO-Controller-Node.md)
### Subscriber
-

View File

@@ -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)

View File

@@ -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.

View File

@@ -0,0 +1,11 @@
# Developpement
### Debug
Pour recup les data de la rasp sur son pc->
```bash
source <modelec-serge-ROS install>/install/setup.bash
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export FASTRTPS_DEFAULT_PROFILES_FILE=<modelec-serge-ROS install>/fastdds_setup.xml
export ROS_DOMAIN_ID=128
```

View File

@@ -0,0 +1,12 @@
# Game Controller Listener
`<modelec/gamecontroller_listener.hpp>`
## 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.

View File

@@ -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)

View File

@@ -0,0 +1,10 @@
# Lidar Controller
`<modelec/lidar_controller.hpp>`
## Objectif
Traite les infos recu par le lidar et les envoie au systeme de navigation.
### Topic
- [](Lidar-Topic.md)
### Service

View File

@@ -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)

View File

@@ -0,0 +1 @@
# Message

View File

@@ -0,0 +1,10 @@
<primary-label ref="Deprecated"/>
# Move Controller
`<modelec/move_controller.hpp>`
## 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"}

View File

@@ -0,0 +1,16 @@
# Multiple Serial Listener
`<modelec/multiple_serial_listener.hpp>`
## 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)

View File

@@ -0,0 +1,3 @@
# Nodes
Start typing here...

View File

@@ -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
-

View File

@@ -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)

View File

@@ -0,0 +1,13 @@
# Odometry Logic Processor
`<modelec/odometry_logic_processor.hpp>`
## 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.

View File

@@ -0,0 +1,22 @@
# OdometryData
`<modelec_interface/msg/odometry_data.hpp>`
## 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)

View File

@@ -0,0 +1,12 @@
# PCA9685 Controller
`<modelec/pca9685_controller.hpp>`
## 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.

View File

@@ -0,0 +1,23 @@
# PCA9685Servo
`<modelec_interface/msg/pca9685_servo.hpp>`
## 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)

View File

@@ -0,0 +1,13 @@
# PCB Alim Interface
`<modelec/pcb_alim_interface.hpp>`
## 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 .

View File

@@ -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)

View File

@@ -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.

View File

@@ -0,0 +1,3 @@
# Interfaces package
Start typing here...

View File

@@ -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 lexé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 dun bras robotique
- Navigation autonome dun robot mobile
- Fusion de données issues de plusieurs capteurs
- Si tu veux commencer avec ROS 2, linstallation 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.

View File

@@ -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"}

View File

@@ -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 <modelec_gui> et tourne dans une Node (ce qui lui permet d'échanger avec les autres Nodes du projet).

View File

@@ -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.

View File

@@ -0,0 +1,3 @@
# ROS2
Documentation pour utiliser ROS2 en adéquation avec le robot Marcel 2k25.

View File

@@ -0,0 +1,7 @@
# Raw Data
## Nom du topic : **raw_data/&lt;name&gt;**
Interface : std_msgs/msg/String
## Objectif
Transmettre des données brutes depuis le port vers le rasp.

View File

@@ -0,0 +1,7 @@
# Send To Serial
## Nom du topic : **send_to_serial/&lt;name&gt;**
Interface : std_msgs/msg/String
## Objectif
Transmettre des données vers le port série.

View File

@@ -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.

View File

@@ -0,0 +1 @@
# Service

View File

@@ -0,0 +1 @@
# Services

View File

@@ -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)

View File

@@ -0,0 +1,5 @@
# Servo
Topic liée au contrôle des servos moteurs.
- [](Servo-Control-Topic.md)
- [](Clear-PCA9685.md)

View File

@@ -0,0 +1,38 @@
# ServoMode
<primary-label ref="Deprecated"/>
`<modelec_interface/msg/servo_mode.hpp>`
## 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)

View File

@@ -0,0 +1,11 @@
# Solenoid Controller
`<modelec/solenoid_controller.hpp>`
## 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.

View File

@@ -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)

View File

@@ -0,0 +1,21 @@
# Solénoïde
`<modelec_interface/msg/solenoid.hpp>`
## 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)

View File

@@ -0,0 +1,11 @@
# Tirette Controller
`<modelec/tirette_controller.hpp>`
## 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.

View File

@@ -0,0 +1,22 @@
# Tirette
`<modelec_interface/srv/tirette.hpp>`
## 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)

View File

@@ -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
-

View File

@@ -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

View File

@@ -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`

View File

@@ -0,0 +1,26 @@
# Utils
## Objectif
Fonction utilitaire pour le développement utile pour plusieurs Nodes.
### Variable
PI -> 3.14159265358979323846
### Fonctions
#### `std::vector<std::string> 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<std::string> &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.

View File

@@ -5,4 +5,5 @@
<topics dir="topics" web-path="topics"/>
<images dir="images" web-path="images"/>
<instance src="gu.tree" web-path="/gu/" version="1.0"/>
<instance src="Writerside_libraries.tree"/>
</ihp>