| | --- |
| | license: other |
| | language: |
| | - fr |
| | pipeline_tag: robotics |
| | tags: |
| | - Chiot robot |
| | - Simulation de décisions |
| | - cerveau d'animaux de compagnie (IA) |
| | --- |
| | |
| | ## 📄 Documentation du Modèle MiRobot |
| |
|
| |  |
| |
|
| | ### 🤖 Présentation du Modèle MiRobot : Simulation de Chiot Robot |
| |
|
| | **MiRobot** est un modèle de robotique basé sur l'**Apprentissage par Renforcement (RL)**, conçu pour simuler le comportement primaire et les interactions d'un chiot robot. Développé par Clemylia, ce modèle vise à démontrer comment un agent d'Intelligence Artificielle peut apprendre à répondre à des commandes externes tout en gérant ses besoins internes. |
| |
|
| | Ce modèle est idéal pour l'étude et l'expérimentation dans les domaines de la robotique simulée et des systèmes d'agents autonomes. |
| |
|
| | ----- |
| |
|
| | ### 🚀 Démarrage Rapide |
| |
|
| | Pour utiliser MiRobot, vous devez disposer d'un environnement Python avec les bibliothèques **Gymnasium** et **Stable Baselines3** installées. |
| |
|
| | #### 1\. Installation des Dépendances |
| |
|
| | ```bash |
| | pip install gymnasium stable-baselines3 huggingface_hub |
| | ``` |
| |
|
| | #### 2\. Chargement et Exécution du Modèle |
| |
|
| | Le script suivant télécharge automatiquement l'environnement personnalisé et le modèle entraîné depuis Hugging Face, puis exécute une courte simulation. |
| |
|
| | ```python |
| | import gymnasium as gym |
| | from stable_baselines3 import PPO |
| | from gymnasium import register |
| | from huggingface_hub import hf_hub_download |
| | import os |
| | |
| | # --- PARAMÈTRES DU DÉPÔT --- |
| | REPO_ID = "Clemylia/MiRobot" |
| | MODEL_FILE = "mirobot_final_model.zip" |
| | ENV_SCRIPT_FILE = "MiRobotEnv.py" |
| | ENV_ID = 'MiRobot-v0' |
| | |
| | # 1. Téléchargement des Fichiers |
| | env_path = hf_hub_download(repo_id=REPO_ID, filename=ENV_SCRIPT_FILE) |
| | model_path = hf_hub_download(repo_id=REPO_ID, filename=MODEL_FILE) |
| | |
| | # 2. Chargement de la Classe d'Environnement (MiRobotEnv) |
| | try: |
| | with open(env_path, 'r') as f: |
| | exec(f.read()) |
| | except Exception as e: |
| | print(f"Erreur lors du chargement de l'environnement: {e}") |
| | exit() |
| | |
| | # 3. Enregistrement de l'Environnement Custom |
| | try: |
| | register( |
| | id=ENV_ID, |
| | entry_point='MiRobotEnv:MiRobotEnv', |
| | ) |
| | except gym.error.UnregisteredEnv: |
| | pass # Déjà enregistré |
| | |
| | # 4. Chargement du Modèle Entraîné (PPO) |
| | model = PPO.load(model_path) |
| | print("✅ Modèle MiRobot chargé et prêt pour l'inférence.") |
| | |
| | # 5. Simulation (Inférence) |
| | env = gym.make(ENV_ID) |
| | obs, info = env.reset() |
| | action_map = {0: "S'Arrêter", 1: "Avancer", 2: "Tourner G", 3: "Tourner D"} |
| | |
| | print("\n--- Démarrage de la Simulation MiRobot ---") |
| | for i in range(20): |
| | action, _states = model.predict(obs, deterministic=True) |
| | obs, reward, terminated, truncated, info = env.step(action) |
| | |
| | print(f"[Pas {i+1}] Action Choisie: {action_map[action]}") |
| | env.render() # Affiche l'état interne de MiRobot |
| | |
| | if terminated or truncated: |
| | obs, info = env.reset() |
| | |
| | env.close() |
| | print("\nSimulation terminée.") |
| | ``` |
| |
|
| | ----- |
| |
|
| | ### 🧠 Détails du Modèle et de l'Environnement |
| |
|
| | Le modèle **MiRobot** prend ses décisions en interprétant un vecteur d'état (Observation) et choisit une action parmi quatre options (Action). |
| |
|
| | #### A. Espace d'Observation (L'état du Chiot) |
| |
|
| | L'observation est un vecteur de 5 nombres décimaux (`float`) que l'agent d'IA utilise pour prendre une décision. |
| |
|
| | | Index | Nom de la Variable | Plage de Valeurs | Rôle | |
| | | :---: | :--------------- | :-------------- | :--- | |
| | | **0** | `Commande_Avancer` | $0.0$ ou $1.0$ | Commande binaire du maître (1 si demande d'avancer). | |
| | | **1** | `Commande_Tourner` | $0.0$ ou $1.0$ | Commande binaire du maître (1 si demande de tourner). | |
| | | **2** | `Faim` | $0.0$ (Pleine) à $1.0$ (Affamée) | Niveau de faim interne (augmente avec le temps). | |
| | | **3** | `Sommeil` | $0.0$ (Éveillé) à $1.0$ (Fatigué) | Niveau de fatigue interne (augmente avec le temps). | |
| | | **4** | `Humeur` | $-1.0$ (Mauvaise) à $1.0$ (Joyeuse) | État émotionnel du chiot (influencé par la faim/sommeil). | |
| |
|
| | #### B. Espace d'Action (Ce que MiRobot peut faire) |
| |
|
| | Le modèle sélectionne une action discrète à chaque pas de temps. |
| |
|
| | | ID d'Action | Action du Robot | |
| | | :---------: | :------------- | |
| | | **0** | **S'arrêter** (ou ne rien faire) | |
| | | **1** | **Avancer** | |
| | | **2** | **Tourner à gauche** | |
| | | **3** | **Tourner à droite** | |
| |
|
| | ----- |
| |
|
| | ### 🏅 Fonction de Récompense (Ce que MiRobot apprend) |
| |
|
| | Le modèle PPO a été entraîné pour maximiser la récompense cumulée, ce qui signifie qu'il a appris à : |
| |
|
| | * **Obéir (Récompense Positive 🏆) :** Choisir l'action demandée par le maître (`Commande_Avancer` ou `Commande_Tourner`). |
| | * **Maintenir le bien-être (Récompense/Pénalité) :** L'agent est pénalisé proportionnellement à ses niveaux de **Faim** et de **Sommeil**, encourageant implicitement l'intégration future d'actions de bien-être (dormir, manger) si le modèle est étendu. |
| |
|
| | ----- |
| |
|
| | ### 🛠️ Contribution et Extension |
| |
|
| | Ce projet est une preuve de concept. Nous encourageons les développeurs à étendre **MiRobot** en ajoutant : |
| |
|
| | 1. **Actions Supplémentaires :** Ajouter des actions comme "Manger" ou "Dormir" pour que l'agent puisse activement réduire ses états de `Faim` et `Sommeil`. |
| | 2. **Simulation 2D/3D :** Intégrer un rendu visuel (avec Pygame ou Unity) à la méthode `render()` pour visualiser le chiot se déplaçant dans un espace physique. |
| |
|
| | N'hésitez pas à forker le dépôt sur Hugging Face pour proposer des améliorations \! |
| |
|
| | code exemple d'utilisation |
| |
|
| | ``` |
| | import gymnasium as gym |
| | from stable_baselines3 import PPO |
| | from gymnasium import register |
| | from huggingface_hub import hf_hub_download |
| | import os |
| | import sys # Import sys |
| | |
| | # --- PARAMÈTRES DU DÉPÔT --- |
| | REPO_ID = "Clemylia/MiRobot" |
| | MODEL_FILE = "mirobot_final_model.zip" |
| | ENV_SCRIPT_FILE = "MiRobotEnv.py" |
| | ENV_ID = 'MiRobot-v0' |
| | |
| | # 1. Téléchargement des Fichiers |
| | env_path = hf_hub_download(repo_id=REPO_ID, filename=ENV_SCRIPT_FILE) |
| | model_path = hf_hub_download(repo_id=REPO_ID, filename=MODEL_FILE) |
| | |
| | # 2. Chargement de la Classe d'Environnement (MiRobotEnv) |
| | # Extract the directory of the downloaded environment script |
| | env_dir = os.path.dirname(env_path) |
| | # Add this directory to sys.path so Python can find it as a module |
| | if env_dir not in sys.path: |
| | sys.path.insert(0, env_dir) # Add to the beginning of sys.path |
| | |
| | try: |
| | # No need for exec(f.read()) anymore, as gymnasium.make will handle the import |
| | pass |
| | except Exception as e: |
| | print(f"Erreur lors du chargement de l'environnement: {e}") |
| | exit() |
| | |
| | # 3. Enregistrement de l'Environnement Custom |
| | try: |
| | register( |
| | id=ENV_ID, |
| | entry_point='MiRobotEnv:MiRobotEnv', # This will now try to import MiRobotEnv module |
| | ) |
| | except gym.error.UnregisteredEnv: |
| | pass # Déjà enregistré |
| | |
| | # 4. Chargement du Modèle Entraîné (PPO) |
| | model = PPO.load(model_path) |
| | print("✅ Modèle MiRobot chargé et prêt pour l'inférence.") |
| | |
| | # 5. Simulation (Inférence) |
| | env = gym.make(ENV_ID) |
| | obs, info = env.reset() |
| | action_map = {0: "S'Arrêter", 1: "Avancer", 2: "Tourner G", 3: "Tourner D"} |
| | |
| | print("\n--- Démarrage de la Simulation MiRobot ---") |
| | for i in range(20): |
| | action, _states = model.predict(obs, deterministic=True) |
| | obs, reward, terminated, truncated, info = env.step(action) |
| | |
| | print(f"[Pas {i+1}] Action Choisie: {action_map[action.item()]}") # Fixed: Use .item() to get scalar from numpy array |
| | env.render() # Affiche l'état interne de MiRobot |
| | |
| | if terminated or truncated: |
| | obs, info = env.reset() |
| | |
| | env.close() |
| | print("\nSimulation terminée.") |
| | ``` |