Test RSK Blocks - Exemple d'utilisation
🤖 RSK Robot Soccer Kit - Résumé de la Documentation
� Démarrage rapide
Voici un exemple simple pour créer un client et faire taper le robot vert 1 :
import rsk
with rsk.Client() as client:
client.green1.kick()
Explication :
• import rsk importe le package Python
• with rsk.Client() assure la fermeture propre du client
• client.green1.kick() demande au robot vert 1 de taper
🔌 Configuration du Client
Vous pouvez spécifier l'hôte et la clé d'accès :
import rsk
with rsk.Client(host='127.0.0.1', key='') as client:
client.robots['green'][1].kick()
Paramètres :
• host : Adresse IP de l'ordinateur qui exécute le Game Controller
• key : Clé d'accès d'équipe (par défaut vide) définie dans le Game Controller
🤖 Accès aux robots
Plusieurs syntaxes pour accéder aux robots :
# Raccourcis pour accéder aux robots
client.green1 # Robot vert 1
client.green2 # Robot vert 2
client.blue1 # Robot bleu 1
client.blue2 # Robot bleu 2
# Syntaxe complète permettant l'accès dynamique
client.robots['green'][1]
client.robots['green'][2]
client.robots['blue'][1]
client.robots['blue'][2]
ďż˝ Informations de localisation
La localisation est accessible en continu via les variables suivantes :
# Position du robot (x [m], y [m])
client.green1.position
# Orientation du robot (theta [rad])
client.green1.orientation
# Position + orientation (x [m], y [m], theta [rad])
client.green1.pose
# Position de la balle (x [m], y [m])
client.ball
Note : Les tableaux sont des numpy arrays
📏 Constantes utiles
Le module rsk.constants fournit des constantes utiles :
from rsk import constants
# Longueur du terrain (axe x)
constants.field_length
# Largeur du terrain (axe y)
constants.field_width
# Largeur du but
constants.goal_width
# Taille de la bordure verte autour du terrain
constants.border_size
🎮 Contrôle des robots
Commandes de base pour contrĂ´ler les robots :
# Taper, avec un paramètre de puissance optionnel entre 0 et 1
robot.kick()
# Contrôle du robot dans son propre référentiel
# Arguments : vitesse x [m/s], vitesse y [m/s], vitesse de rotation [rad/s]
# Avancer Ă 0,25 m/s
robot.control(0.25, 0., 0.)
# Tourner Ă 30 deg/s dans le sens antihoraire
robot.control(0., 0., math.radians(30))
🎯 Déplacement avec goto
Envoyer un robot Ă une position arbitraire sur le terrain :
# Envoyer le robot Ă x=0.2m, y=0.5m, theta=1.2 rad
robot.goto((0.2, 0.5, 1.2))
# Goto non-bloquant (wait=False)
robot_arrived = robot.goto((0.2, 0.5, 1.2), wait=False)
Paramètre wait :
• True (défaut) : Bloque l'exécution jusqu'à l'arrivée
• False : Retourne immédiatement, retourne True si arrivé
⚠️ Gestion des erreurs
Si une commande échoue, une exception rsk.ClientError est levée :
try:
robot.kick()
robot.control(0.1, 0, 0)
except rsk.ClientError:
print('Erreur lors d\'une commande!')
🔄 Callback on_update
Exécuter du code à chaque nouvelle information reçue :
def print_the_ball(client, dt):
print(client.ball)
# Afficher la balle Ă chaque nouvelle information
client.on_update = print_the_ball
⚖️ Règles de l'arbitre
L'arbitre peut prendre le contrĂ´le des robots dans ces situations :
- Début de match : Attendre que la balle soit placée au centre (game start)
- Hors terrain : Les robots ne peuvent pas sortir de l'herbe (out-of-game-'nomrobot')
- Balle sortie : Replacer la balle sur le point neutre le plus proche (sideline-crossed)
- But marqué : Validation manuelle du but par l'arbitre (goal)
- Défense abusive : Plus d'un robot dans la zone de défense (penalty + abusive_defense)
- Attaque abusive : Robot dans la zone de défense adverse (penalty + abusive_attack)
- Abus de balle : Robot près de la balle >3s dans un rayon de 25cm (penalty + ball_abuse)
- Pénalité manuelle : L'arbitre peut pénaliser manuellement (penalty + manually penalized)
- Mi-temps : Pas de communication possible (half-time)
ďż˝ Informations de l'arbitre
Accès aux informations du match via le dictionnaire referee :
# Accès au dictionnaire de l'arbitre
client.referee
# Vérifier si le robot 1 bleu est pénalisé
client.referee["teams"]["blue"]["robots"]["1"]["penalized"]
🎮 Configuration du Game Controller
Vision :
• Sélectionner la caméra dans la liste
• Cliquer "Start" pour démarrer la capture
• Ajuster les paramètres pour atteindre ~30 FPS
Robots :
• Ajouter les ports COM dans le gestionnaire
• Vérifier que les robots répondent (bip + niveau batterie)
• Assigner les marqueurs correspondants
ContrĂ´le API :
• Cocher/décocher les cases de contrôle pour chaque équipe
• Définir une clé (mot de passe) si nécessaire
• Bouton "urgence" pour arrêter tous les robots
đź’ˇ Exemple complet avec blocs
Construction d'un programme avec l'éditeur de blocs :
import rsk
with rsk.Client(host='127.0.0.1', key='') as client:
# Déplacer le robot vert 1
client.robots['green'][1].goto((0.5, 0.3, 0), wait=True)
# Faire taper
client.robots['green'][1].kick(0.8)
# Afficher la position de la balle
print(client.ball)
Blocs utilisés :
1. 📥 Import rsk
2. ďż˝ RSK Client (host: 127.0.0.1, key: '')
3. 🎯 Va à (couleur: green, id: 1, x: 0.5, y: 0.3, angle: 0)
4. âš˝ Fonction kick (power: 0.8)
5. 🖨️ Afficher (client.ball)