Code Monkey home page Code Monkey logo

robotique's Introduction

LES PARTICIPATIONS SONT CLOSES ! MERCI POUR VOS PROGRAMMES !

Et rendez-vous très bientot pour les résultats en vidéo

animated
Mes robots en pleine action !
Le but du jeu est de programmer les robots pour qu'ils découvrent et détruisent une cible cachée dans l'environnement.

Pour participer au tournois, vous devez avoir accès à Matlab.

Ce n'est pas idéal, je sais, mais la plateforme de programmation des robots n'est disponible que dans ce langage. Si vous n'avez pas de license, vous pouvez essayer de télécharger une version d'essai de Matlab (gratuite et valide pendant 30 jours) :

https://fr.mathworks.com/products/get-matlab.html

Une fois que vous avez un accès à Matlab, vous pouvez commencer à vous amuser et m’envoyer votre code. Je mettrai toutes les stratégies que vous m’envoyez en compétition (y compris la mienne) pour voir laquelle sera la meilleure.

Le niveau de programation est facile. Pas besoin d'être un pro en Matlab ! Il faut seulement modifier la classe Robot.m à votre convenance.


Merci de m'envoyer vos contributions avant le lundi 3 Mai

Introduction

J’ai à ma disposition un groupe de 12 petits robots. Ils peuvent se déplacer et communiquer les uns avec les autres dans un certain rayon de perception.

un robot
Voici un robot.
Il mesure environ 10 cm x 10 cm.

rayon de perception
Voici cinq robots.
Le cercle rouge correspond au rayon de perception du robot R1 : le robot R1 peut voir et communiquer avec R2 et R3, mais pas avec R4 ni R5. Le rayon de perception fait environ 30 cm.


Ces robots ne sont pas télécommandés. Ils sont autonomes. Cela signifie qu’ils doivent être programmés à l’avance avec des règles comportementales simples.

Scénario

Voici le scénario de l’exercice. Les 12 robots sont placés au milieu d’une arène de 3,2 x 2 mètres. Une cible de 5 cm est cachée quelque part dans l’arène. Les robots doivent la trouver et la détruire le plus rapidement possible.

scenario
Voici les 12 robots dans leur position de départ au milieu de l’arène. Le point rouge est la cible. Elle peut se situer n’importe où dans l’arène. Les robots ne connaissent pas son emplacement.

Comment trouver la cible ?

Un robot peut trouver la cible de deux façons différentes :

  • Soit il touche la cible en se déplaçant dessus,
  • Soit un autre robot qui connaît l’emplacement de la cible lui communique l’information (mais pour cela il doit être dans son rayon de perception).

Lorsqu'un robot decouvre l'emplacement de la cible, il allume sa diode verte.

Comment détruire la cible ?

La cible a initialement une énergie de 100 points. Si l'énergie de la cible est réduite à 0, la mission est accomplie. Pour attaquer la cible, un robot doit :

  1. connaître l’emplacement de la cible,
  2. avoir la cible dans son rayon de perception.

Si ces deux conditions sont réunies, le robot attaque la cible automatiquement. Lorsqu’un robot attaque la cible, celle-ci perd 0,3 point d'énergie par seconde. C’est peu mais les attaques des robots se cumulent. Par exemple, si 10 robots attaquent en même temps, la cible perd 10 fois 0,3 point d'énergie par seconde – soit 3 points/seconde. Une attaque groupée est donc plus efficace qu’une attaque isolée.

Lorsqu'un robot est en train d'attaquer la cible, il allume sa diode rouge.

Stratégie

Comment programmer les robots pour que la cible soit détruite le plus rapidement possible ?

Idéalement, il faudrait ramener tous les robots en même temps sur la cible pour cumuler leurs attaques. Mais pour découvrir la cible, il vaut mieux que les robots se dispersent pour optimiser l’exploration, et en s’éloignant ils ne seront plus à portée de communication. Comment faire alors ?

Il existe de nombreuses solutions pour résoudre ce problème. Voici un exemple de programme assez simple mais peu performant.

Exemple de stratégie : recherche aléatoire

(Notez que le même programme est exécuté sur chacun des 12 robots. On ne peut pas programmer les robots séparément: ils exécutent tous le même code).

Si l’emplacement de la cible n’est pas connu : 

	-> Déplacement aléatoirement

Si l’emplacement de la cible est connu :

	Envoyer l’emplacement de la cible à tous mes voisins

	-> Si la cible n’est pas à portée
		Déplacement vers la cible 

	-> Si la cible est à portée 
		Arrêter le mouvement (le robot va alors attaquer la cible)

Avec cette stratégie, les robots mettent en moyenne 142 secondes pour détruire la cible. Il y a moyen de faire beaucoup mieux !

Programmation

L’interface de programmation possède un simulateur. Cela signifie que vous pouvez tester votre code et visualiser le résultat en simulation avant de me l’envoyer.

simulateur
Le simulateur de robots sur Matlab.
Le point rouge (en haut à droite) indique l'emplacement de la cible

La programmation des robots est assez simple et intuitive. Vous devez seulement modifier le script Robot.m (les commentaires vous aideront à écrire votre code). Par ailleurs, le programme correspondant à la stratégie “Recherche aléatoire” décrite ci-dessus est fourni en exemple pour vous aider à démarrer.

Pour lancer le simulateur, il suffit de taper ‘Main’ dans Matlab.

LES PARTICIPATIONS SONT CLOSES ! NE M'ENVOYEZ PLUS DE PROGRAMMES, J'AI DÉjÀ LANCÉ LE TOURNOIS !

Amusez-vous bien !

robotique's People

Contributors

fouloscopie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

robotique's Issues

Erreur lorsque j'exécute le main

Je sais que le tournois est terminé, j'avais juste envie d'expérimenter un peu avec le code. Le souci c'est que a chaque fois que je lance le main j'ai ce problème (sachant que je suis sous matlab 2014) :

Attempt to reference field of non-structure array.

Error in ARobotarium/initialize_visualization (line 213)
ax = fig.CurrentAxes;

Error in ARobotarium (line 79)
this.initialize_visualization();

Error in Robotarium (line 46)
this = this@ARobotarium(parser.Results.NumberOfRobots, ...

Error in Main (line 26)
r=Robotarium('NumberOfRobots', N, 'ShowFigure', true, 'InitialConditions', initial_conditions);

Créer des variables

I'd really like to send you some code for this as I've got ideas I'd really like to try out. However I'm really struggling because of the fact I can't add attributes at the class level as this would require changing the main class. I'm finding it impossible to do any of my ideas because I can't have variables that keep their value every time the method is called as I have to initialise them inside the method. I've tried using global or persistent variables but those create other problems. Every time I think of a solution, it doesn't work because I need a non-global, non-persistent variable which doesn't get reset everytime the function is called. I feel like there is probably an easy solution to my problem which I am missing. Can anyone help?

J'aimerais vraiment t'envoyer mon program pour ta vidéo vu que j'ai des idées que j'ai vraiment envie d'essayer. Mais j'ai un problème qui m'en empeche. Je n'arrive pas à rajouter des nouvelles variables qui garde leur valeur à chaque fois que la fonction (update) est appelée(?). Puisque je ne peux pas initialiser au niveau de la classe entière vu que je devrais changer le main pour faire ça, il faut que j'initialise les variables a l'interieur de la fonction et du coup, à chaque fois que la fonction est rappelée, les valeurs sont réinitialisées. J'ai éssayer d'utiliser des variables globales ou persistent mais ca cause d'autres problemes. A chaque fois que je pense à une solution ca ne marche pas parce que il me faudrait une variable non-globale, non-persistente mais qui ne se réinitialise pas à chaque fois. J'imagine qu'il doit y avoir une solution simple à mon probleme mais je ne la trouve pas. Est ce que qui que se soit peut m'aider?

(Posté en français parce que c'est la langue qu'on parle mais aussi en anglais parce que j'ai appris la progra en anglais alors du coup j'utilise probablement les mauvais termes en francais et du coup c'est peut etre pas clair. Vous pouvez répondre en français ou en anglais, comme vous voulez les deux me vont :) )

Merci!!! (Thanks!!!)

Error using optimoptions

Bonsoir,
J'ai un problème lorsque je lance le fichier Main :

_Error using optimoptions (line 124)
Empty keys are not allowed in this container.

Error in create_uni_barrier_certificate_with_boundary (line _47)_
    opts = optimoptions(@quadprog,'Display', 'off', 'TolFun', 1e-5, 'TolCon', 1e-4);

Error in Main (line 56)
uni_barrier_cert = create_uni_barrier_certificate_with_boundary();_

Quelle clé est manquante ? je ne connais pas trop donc je ne me suis pas trop penché sur le problème... une idée ?``

Statistics and Machine Learning Toolbox : workaround

Salut,

Travaillant sur mon PC pro, je n'ai pas les droits pour installer une nouvelle toolbox. Or, les fonctions "pdist" et "squareform" sont dans la "Statistics and Machine Learning Toolbox".

Pour ceux qui seraient confrontés à ce problème, vous pouvez récupérer la fonction "distmat" sur le File Exchange de Matlab : https://www.mathworks.com/matlabcentral/mlc-downloads/downloads/submissions/15145/versions/3/previews/distmat.m/index.html

Après l'avoir placé dans le répertoire "utilities" (par exemple) il faut remplacer la ligne 113 dans Main.m :
dm = squareform(pdist([x(1,:)' x(2,:)']));
par
dm = distmat([x(1,:)' x(2,:)']);

Cela a fonctionné pour moi.

Optimization toolbox

Salut

En lançant Main, j'ai eu cette erreur

Main
'optimoptions' requires Optimization Toolbox.

Error in create_uni_barrier_certificate_with_boundary (line 47)
opts = optimoptions(@quadprog,'Display', 'off', 'TolFun', 1e-5, 'TolCon', 1e-4);

Error in Main (line 56)
uni_barrier_cert = create_uni_barrier_certificate_with_boundary();

--> est-ce qu'il manque un fichier dans le dossier utilities ou doit-on télécharger la toolbox en version d'évaluation ?

Merci

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.