0% ont trouvé ce document utile (0 vote)
179 vues10 pages

CR TP Ros 2

Transféré par

Abdelkrim IDIR
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
179 vues10 pages

CR TP Ros 2

Transféré par

Abdelkrim IDIR
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Département : Génie Electrique

Filières : Cycle Ingénieur en Génie Electrique et énergie renouvelables (GEER)

Intitulé du module : Robotique

Compte rendu TP
Résolution du Problème de Déplacement de la
Tortue dans ROS 2

Réalisé Par : Encadré Par :


AZMAMI Halima Pr. Abderazzak Ammar
GOUZAOUIA Oussama
IDIR Abdelkrim

Année Universitaire : 2023-2024

1
Introduction générale

Ce rapport présente en détail la résolution d'un problème de déplacement pour une tortue simulée dans
l'environnement Turtlesim en utilisant le système ROS 2. Le problème se pose lorsque la tortue dépasse les
limites de la zone autorisée, nécessitant des mécanismes de correction pour maintenir son mouvement à
l'intérieur de cette zone.

Pour aborder ce problème, nous avons développé et testé deux solutions distinctes. La première solution
consiste à implémenter un système de vérification des limites. Ce système surveille continuellement la position
de la tortue et, dès que celle-ci s'approche des bords de la zone autorisée, ajuste sa trajectoire pour la ramener
vers le centre. Cela est réalisé en calculant la distance de la tortue par rapport aux bords et en appliquant des
corrections de direction proportionnelles à cette distance, assurant ainsi un retour progressif vers une position
sûre.

La deuxième solution se base sur un ensemble de comportements prédéfinis que la tortue adopte en fonction de
sa position. Par exemple, si la tortue atteint une certaine proximité des bords de la zone, elle peut ralentir et
effectuer un virage spécifique pour éviter de sortir des limites. Ces comportements sont programmés en
utilisant des algorithmes de machine learning ou des règles heuristiques, permettant à la tortue de réagir de
manière intelligente et adaptable à diverses situations.

Les deux solutions ont été testées rigoureusement dans des scénarios simulés pour évaluer leur efficacité et leur
robustesse. Les résultats montrent que chacune des approches a ses avantages : la première solution est simple
et efficace pour des déplacements basiques, tandis que la seconde offre une flexibilité accrue et des
comportements plus naturels et complexes pour la tortue.

En conclusion, ce rapport détaille non seulement les méthodes employées pour résoudre le problème de
déplacement de la tortue simulée, mais également les avantages et les inconvénients de chaque solution,
fournissant ainsi une base solide pour des améliorations futures et des applications dans des systèmes
robotiques réels utilisant ROS 2.

2
Problématique
• La tortue a une plage de déplacement autorisée de 0 à 11 en x et de 0 à 11 en y.
• Initialement placée à environ 5.5 en x et 5.5 en y.
• Si la tortue est dans la zone [3,8] en x et [3,8] en y, le mouvement doit être linéaire en x.
• Si la tortue est en dehors de cette zone mais toujours dans la plage autorisée [0, 11] en x et [0, 11] en
y, elle doit dévier pour rester dans la plage autorisée.
• Proposer également une solution alternative où, à la sortie de la plage autorisée, la tortue effectue
une rotation sans mouvement linéaire jusqu'à un alignement avec l'axe x ou y en fonction de la
position.

3
Etapes de la solution
Étape 1 : Création d'un Package ROS 2

Tout d'abord, nous devons créer un package ROS 2. Cela se fait en utilisant la
commande suivante dans le répertoire source de votre workspace :

cd /home/ws/src
ros2 pkg create --build-type ament_python turtle_control --dependencies rclpy ge

Cette commande crée un package appelé turtle_control avec les dépendances


nécessaires, à savoir rclpy, geometry_msgs et turtlesim.

Étape 2 : Ajout de Scripts de Noeud Python

Ensuite, nous devons ajouter les scripts Python nécessaires pour notre noeud de
contrôle. Créez un fichier nommé noeud_control.py dans le répertoire
turtle_control/ turtle_control :

4
import rclpy
from rclpy.node import Node
from geometry_msgs.msg.Twist
from turtlesim.msg import Pose
import math

class NoeudControl(Node):
def init (self):
super(). init ('noeud_control') self.abonnement_pose =
self.create_subscription(
Pose, '/turtle1/pose', self.pose_callback, 10) self.publication_vitesse =
self.create_publisher(
Twist, '/turtle1/cmd_vel', 10)

self.zone_securite_min = 3.0
self.zone_securite_max = 8.0
self.limite_min = 0.0
self.limite_max = 11.0
self.centre_x = (self.zone_securite_min + self.zone_securite_max) /2
self.centre_y = (self.zone_securite_min + self.zone_securite_max) /2

def pose_callback(self, pose: Pose):


twist = Twist()

if self.est_dans_zone_securite(pose): twist.linear.x =
1.0
twist.angular.z = 0.0
elif self.est_dans_plage_autorisee(pose):
twist = self.ajuster_position_orientation(pose) else:
twist = self.effectuer_rotation_seule(pose)

self.publication_vitesse.publish(twist)

def est_dans_zone_securite(self, pose: Pose):


return (self.zone_securite_min <= pose.x <= self.zone_securite_max and
self.zone_securite_min <= pose.y <= self.zone_securite_max)

def est_dans_plage_autorisee(self, pose: Pose):


return (self.limite_min <= pose.x <= self.limite_max and self.limite_min <=
pose.y <= self.limite_max)

def ajuster_position_orientation(self, pose: Pose): twist =


Twist()
target_angle = math.atan2(self.centre_y - pose.y, self.centre_x - pose.x
angle_difference = self.normaliser_angle(target_angle - pose.theta)

twist.angular.z = 1.0 * angle_difference


twist.linear.x = max(0.2, 0.5 * math.cos(angle_difference)) return

twist

def effectuer_rotation_seule(self, pose: Pose):

5
twist = Twist()
target_angle = math.atan2(self.centre_y - pose.y, self.centre_x - pose.x
angle_difference = self.normaliser_angle(target_angle - pose.theta)

twist.angular.z = 1.0 * angle_difference twist.linear.x =


0.0

return twist

def normaliser_angle(self, angle):


while angle > math.pi:
angle -= 2 * math.pi while
angle < -math.pi:
angle += 2 * math.pi
return angle

def main(args=None):
rclpy.init(args=args)
noeud = NoeudControl()
rclpy.spin(noeud)
noeud.destroy_node()
rclpy.shutdown()

if name == ' main ': main()

Ce script définit un noeud ROS 2 nommé noeud_control qui contrôle le mouvement


de la tortue en fonction de sa position.

6
Étape 3 : Création d'un Fichier de Lancement

Créez un fichier de lancement nommé turtle_control.launch.py dans le répertoire


launch

du package turtle_control :

from launch import LaunchDescription


from launch_ros.actions import Node

def generate_launch_description():
return LaunchDescription([
Node(
package='turtlesim',
executable='turtlesim_node',
name='turtlesim'
),
Node(
package='turtle_control',
executable='noeud_control',
name='noeud_control',
output='screen'
)
])

7
Ce fichier de lancement démarre le noeud turtlesim et le noeud noeud_control en
même temps.

Étape 4 : Mise à Jour de setup.py

Assurez-vous que votre fichier setup.py inclut les nouveaux noeuds :

from setuptools import setup

package_name = 'turtle_control' setup(


name=package_name,
version='0.0.1',
packages=[package_name],
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
('share/' + package_name, ['package.xml']),
('share/' + package_name + '/launch', ['launch/turtle_control.launch.py'
],
install_requires=['setuptools'],
zip_safe=True, maintainer='nada_dadi',
maintainer_email='[email protected]',
description='ROS 2 package for controlling turtle movement', license='License
declaration',
tests_require=['pytest'],
entry_points={
'console_scripts': [
'noeud_control = turtle_control.noeud_control:main',
],
},
)

Étape 5 : Construction du Package

Pour construire votre workspace, utilisez les commandes suivantes :

cd /home/ws
colcon build
source install/setup.bash

Étape 6 : Exécution du Fichier de Lancement

Pour démarrer tous les noeuds, exécutez le fichier de lancement :


8
ros2 launch turtle_control turtle_control.launch.py

9
CONCLUSION GÉNERALE

Ce rapport présente une solution détaillée pour contrôler le mouvement d'une tortue
simulée en respectant des contraintes spécifiques de position. La solution garantit que la
tortue reste dans une plage autorisée et adopte un comportement approprié lorsqu'elle en
sort.
Nous avons également expliqué comment configurer le workspace et créer le package ROS
2, en incluant les étapes pour la création des scripts Python nécessaires, le fichier de
lancement et la mise à jour de setup.py. Cette approche garantit que toutes les
dépendances sont correctement installées et que les noeuds peuvent être démarrés sans
problème.

10

Vous aimerez peut-être aussi