doc ros v0.0.2

This commit is contained in:
acki
2025-04-01 01:29:44 -04:00
parent d8f2a606f2
commit fdf96acfad
61 changed files with 812 additions and 0 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

@@ -22,6 +22,75 @@
</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="Multiple-Serial-Listener-Node.md"/>
<toc-element topic="PCA9685-Controller-Node.md"/>
<toc-element topic="Odometry-Logic-Processor-Node.md"/>
<toc-element topic="Button-GPIO-Controller-Node.md"/>
<toc-element topic="Lidar-Controller-Node.md"/>
<toc-element topic="Move-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 topic="Arm-Controller-Node.md"/>
<toc-element topic="Game-Controller-Listener-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>
</toc-element>
</toc-element>
</toc-element>
<toc-element topic="Coupe-De-France-de-Robotique-2024.md">

View File

@@ -23,4 +23,25 @@
<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>
</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)
### 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,13 @@
# 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)

View File

@@ -0,0 +1 @@
# Arm Controller

View File

@@ -0,0 +1 @@
# Button GPIO Controller

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 @@
# Game Controller Listener

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 @@
# Lidar Controller

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 @@
# Move Controller

View File

@@ -0,0 +1,4 @@
# Multiple Serial Listener
## Objectif
Un listener pour plusieurs ports série.

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 @@
# Odometry Logic Processor

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 @@
# PCA9685 Controller

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 @@
# PCB Alim Interface

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,2 @@
# Servo
Topic liée au contrôle des servos moteurs.

View File

@@ -0,0 +1,36 @@
# ServoMode
`<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 @@
# Solenoid Controller

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 @@
# Tirette Controller

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>