diff options
author | Alex Auvolat <alex.auvolat@ens.fr> | 2015-02-02 12:11:58 +0100 |
---|---|---|
committer | Alex Auvolat <alex.auvolat@ens.fr> | 2015-02-02 12:11:58 +0100 |
commit | 72a70d44ab6768ee9d82f13d536b4951841cc9df (patch) | |
tree | 3d579dfc04ec86070a29d6f894be6eec36e70fe0 | |
parent | cc87971a493e760b00fa9f78e985727979b95c76 (diff) | |
download | Robotique-Projet-72a70d44ab6768ee9d82f13d536b4951841cc9df.tar.gz Robotique-Projet-72a70d44ab6768ee9d82f13d536b4951841cc9df.zip |
Populate README
-rw-r--r-- | README.md | 74 | ||||
-rw-r--r-- | problem.cpp | 2 | ||||
-rw-r--r-- | ui.cpp | 4 |
3 files changed, 76 insertions, 4 deletions
@@ -1 +1,73 @@ -Projet de robotique pour le cours de JP Laumond 2014-2015. Alex Auvolat, Jean Fabre. +Projet de robotique pour le cours de JP Laumond 2014-2015. + +Alex Auvolat--Bernstein, Jean Fabre-Monplaisir. + + +## Présentation + +Pour ce projet nous avons implémenté une méthode de recherche de chemin pour le +robot Hilare composé d'une voiture qui tire une remorque simple. Notre solution +se base sur des trajectoires composées d'arcs de cercle et de lignes droites. + + +## Compilation et lancement + +Il est nécessaire d'installer la bibliothèque graphique SFML +<http://www.sfml-dev.org> avant de compiler. + +Sous Linux, taper simplement : + + make + +Sous Mac OS X, taper : + + g++ -framework sfml-window -framework sfml-graphics -framework sfml-system \ + ui.cpp problem.cpp main.cpp -o pathfind + +Ensuite, pour lancer l'application, invoquer le binaire avec : + + ./pathfind + + +## Utilisation de l'interface graphique + +Dans l'interface graphique un certain nombre de touches permettent d'accéder aux +fonctionnalités du logiciel : + +### Déplacement + +Les touches h, j, k, l servent à se déplacer respectivement à gauche, en bas, en +haut et à droite. + +Les touches i, o servent à zoomer et dézoomer. + +### Définition du problème + +Les touches s, e permettent de définir les positions de départ (start) et +d'arrivée (end) du robot. Lors de la sélection, cliquer une fois pour +positionner le robot, une fois pour l'orienter, puis une fois pour orienter la +remorque. À tout moment un clic droit annule la sélection. + +La touche a permet d'ajouter un obstacle, et la touche d permet de supprimer +l'obstacle sous la souris. + +### Résolution du problème + +La touche g permet de lancer le solveur. Les données intermédiaires (positions +aléatoires et graphe de connection) sont affichées en gris claire, et lorsqu'une +solution est trouvée, celle-ci s'affiche en vert. + +La touche f permet de faire se déplacer le robot le long de la courbe solution, +lorsque celle-ci est définie. + + +## Bugs connus + +- Ne pas redimentionner la fenêtre d'affichage +- La position de la souris est parfois mal interprétée (résolu ?) +- Pas de commande pour arêter l'algorithme de recherche de chemin (on peut + néanmoins le relancer, ce qui a pour effet d'interrompre l'exécution + précédente) + + + diff --git a/problem.cpp b/problem.cpp index c919710..bcae056 100644 --- a/problem.cpp +++ b/problem.cpp @@ -110,7 +110,7 @@ vector<solution> solution::direct_sol(const hilare_a &pos_a, const hilare_a &pos int eps[4][2] = { { 1, 1 }, { 1, -1 }, { -1, 1 }, { -1, -1 } }; double delta = cca.x * ccb.y - cca.y * ccb.x; - assert(delta != 0); + if (delta == 0) return ret; // no solution in this case, we count on direct_sol_r for (int i_eps = 0; i_eps < 4; i_eps++) { int ea = eps[i_eps][0]; @@ -199,7 +199,7 @@ void UI::handle_sel_pos(const sf::Event &ev) { void UI::render_circle(const circle &c, sf::Color border, sf::Color inside, int w) { double r = c.r * _view.zoom; - sf::CircleShape a(r); + sf::CircleShape a(r, 50); a.setPosition(to_view(c.c)); a.move(-r, -r); a.setFillColor(inside); @@ -375,7 +375,7 @@ vec UI::from_view(const sf::Vector2i &p) { } vec UI::mouse_coord() { - return from_view(sf::Mouse::getPosition() - _win.getPosition()); + return from_view(sf::Mouse::getPosition(_win)); } /* vim: set ts=4 sw=4 tw=0 noet :*/ |