IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

[Robotique] Besoin d'un avis sur architecture Java robotique


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Points : 65
    Points
    65
    Par défaut [Robotique] Besoin d'un avis sur architecture Java robotique
    Bonjour à tous,

    Voila, je me suis lancé depuis peu dans un projet robotique ayant comme particularité que le robot est piloté via une application Java.

    Voici un aperçu de l'architecture simplifiée du robot pour la compréhension:

    1/ D'un coté, j'ai un micro contrôleur arduino Uno / contrôleur moteur etc... sur le robot
    2/ D'un autre coté, un UMPC viliv S5 sur lequel j'exécute mon application java.

    Le micro contrôleur arduino uno est relié à l'umpc via un câble USB, et je contrôle pour le moment le robot manuellement (avance/recule/tourne) via mon application Java (qui utilise une connexion via port série).

    Sur mon interface Swing, je clique donc sur un bouton nommé "Manuel" qui se charge de lancer un thread qui envoi toutes les x millisecondes une information contenant la direction et la vitesse (pour faire simple).

    Au départ, lorsque le thread est lancé, il envoi donc en permanence l'instruction O 0000 (qui veut dire n'avance pas à 0000). Lorsque je clique (reste appuyé) sur le bouton flèche haut de mon interface Swing, il met à jour les valeurs ex: A 0127 pour lui dire Avance à pleine vitesse. Dés que je relâche, la valeur envoyée revient à O 0000.

    Voila pour l'existant et ca marche très bien.

    J'aimerais un peu faire évoluer mon robot en le commandant via mon iphone. (Dans le but de lui demander de m'avertir de l'arrivé de mail, oui mon robot parle lol) ou lui demander de regarder la météo... Donc pour résumer afin de le diriger depuis mon iphone mais aussi activer/désactiver des fonctionnalités.

    Je pense donc déployer un petit serveur assez léger sur l'umpc afin de publier une application web qui serait accessible depuis wifi sur mon iphone.

    Je me pose donc plusieurs questions au final:
    1/ Quel langage utiliser pour la partie Web. Perso j'ai pensé à JSP/SERVLET. Quant pensez-vous?

    2/ Pourrais-je communiquer avec mon application java existante? Enfin la vrai question est comment? L'idéal étant que, par exemple, si j'appuis sur un bouton "Manuel" sur mon interface web, elle déclenche un thread similaire mais DANS mon application Java existante. Je ne sais pas s’il existe une API ou autre permettant de faire un lien direct entre une application Web sous jsp/servlet et une application SWING. J'ai pensé à des webservices ou RMI mais j'ai peur que cela soit trop lourd au final.

    3/ Serait-il possible de réaliser sur une interface web une mécanique à peu prés similaire à celle que j'ai actuellement, à savoir si je reste appuyé sur un bouton haut sur mon iphone, il envoi de manière périodique la valeur A 0127 et dés que je relâche la valeur O 0000... ? Techniquement, j'ai du mal à voir comment je peux m'en sortir. Avec du JavaScript?

    4/ Quel web serveur utiliser sachant que l'umpc viliv S5 n'est pas un foudre de guerre. Il me faudrait donc un web serveur très léger et peu gourmant en ressources.

    Merci beaucoup pour vos réponses.

    Voici l'url de mon projet si cela vous intéresse:
    http://darylrobotproject.wordpress.com/

    Cordialement,

    critok

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Un Jetty sur lequel tu déploies des services REST (bien moins lourds que du SOAP).

    http://blog.palominolabs.com/2011/08...y-and-jackson/


    Ensuite, pour l'appli en JS, c'est amplement faisable, un coup de jQuery mobile avec un plugin comme jquery-timers. Et pour la partie input, du jQuery mobile avec les events vmousedown et vmouseup.

  3. #3
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 318
    Points
    8 318
    Billets dans le blog
    52
    Par défaut
    Pour le lien entre l'application "web" et l'application "swing"
    Tu peux passer par une couche serveur, qui sera appeler par les deux applications.
    Bonne chance !

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Pour le lien entre l'application "web" et l'application "swing"
    Tu peux passer par une couche serveur, qui sera appeler par les deux applications.
    Bonne chance !
    Effectivement, je suis bien conscient que je vais devoir découper mon appli Java initiale en server + 2 clients, mais la question est surtout quelle méthode pour communiquer entre les deux.

    Un Jetty sur lequel tu déploies des services REST (bien moins lourds que du SOAP).

    http://blog.palominolabs.com/2011/08...y-and-jackson/


    Ensuite, pour l'appli en JS, c'est amplement faisable, un coup de jQuery mobile avec un plugin comme jquery-timers. Et pour la partie input, du jQuery mobile avec les events vmousedown et vmouseup.
    Bonne idée pour le serveur Jetty, je connais de nom et je n'y avais pas pensé.
    Par contre tu dis "sur lequel tu déploies des services REST" mais du coup comme c'est l'interface web qui doit mettre à jour des données cela implique que je puisse redéporter toute ma partie traitement actuelle dans le serveur Web? Or ce n'est pas si simple à priori car mon socle actuelle gére la charge batterie, la synthèse et reco vocale, ce que je ne pourrais pas inclure dans la partie serveur web si je ne me trompe?

    je voyais quelque chose de plus simple genre:
    - un socle Java ayant un rôle de serveur (plus de centrale de commande on va dire)
    - avec une interface Java swing qui apelle ce socle Java (un peu ce que j'ai actuellement mais non décorrélé) Mais avec quelle méthode d'appelle?
    - avec une interface Web déployée via un petit webserveur et appellant le socle serveur Java encore une fois. Mais avec quelle méthode d'appelle.

    Au début je pensais ne faire qu'un client web mais j'ai besoin d'un client lourd me permettant de voir les données des capteurs en temps réelle. Et l'interface ne sert qu'a activer/désactiver des fonctions donc pas besoin de temps réelle en terme d'affichage si je puis dire.

    En fait, je pense que l'archi resemble à celle évoquée plus au dessus (avec les éléments évoqué par sinok, jetty...) mais pour la communication entre le socle <-> interface lourde et le socle interface web (et donc serveur web au final) la je ne vois pas...

    Merci pour votre aide en tous les cas.

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu peux très bien intégrer ton Jetty à ton client lourd...

    Jetty propose même un API java pour son démarrage dans ce genre de cas.
    http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty


    Ou alors une File JMS alimentée par un serveur d'appli standard (qui propose une API Rest pour l'iphone). File JMS sur laquelle va piocher ton client lourd.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Bonjour Sinok!

    Merci pour tes explications!
    J'ai eu un peu de temps pour travailler sur ce point hier soir.
    Je suis parti sur ta solution du jetty intégré à mon application swing actuelle.

    Je suis parti sur la solution suivante:

    1/ Intégrer le jetty à mon application swing en mode embedded
    2/ Créer un handler request + un handler ressource (avec un index.html)
    3/ créer une interface avec JQuery Mobile avec un pad simple (bouton haut/bas/gauche droite)

    J'ai donc intégré mon jetty qui marche parfaitement (j'ai bien accés à mon index.html par defaut)

    J'ai bien réussi à créer ma page en JQuery mobile (pad)
    Sur chaque bouton, j'ai mis un id (exemple pour le bouton haut: id="UP")

    Dans ma page, j'ai rajouté un code javascript JQuery (dsl j'ai pas le code exact sur moi):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sur click du bouton portant id=UP faire un $.POST ("index.html" {direction: 'UP'})
    J'ai dupliqué ce même code pour chacun de mes boutons (ok je devrais pouvoir mutualiser mais c'est un proto).

    Ca marche super. Lorsque je tape sur mon bouton depuis mon iphone, le handler request est bien appelé, et je peux afficher mon paramêtre, à savoir UP.

    Cependant là ou je galére, c'est que je voudrais que mon $.POST soit appelé régulierement (ex: toute les 150ms) TANT QUE mon doigt est posé sur le bouton (comme lorsque l'on joue au clavier à un jeu de voiture par exemple)
    ET que lorsque mon doigt n'appuis sur aucun bouton, il lance au moins un $.POST avec null en paramêtre.

    J'ai regardé du coté des events, un truc du genre "tant que le bouton est préssé" mais rien.

    J'ai également regardé du coté du JQuery timer mais je ne vois pas trop comment l'appliquer à ma problématique

    Auriez-vous une idée?

    Merci beaucoup!

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Nobody to help me?

  8. #8
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 318
    Points
    8 318
    Billets dans le blog
    52
    Par défaut
    Mouse Press et Mouse Release ?

    Press pour débuter l'envoie régulier. (Onmousedown)
    Release pour arrêter l'envoie régulier. (Onmouseup)

    Ou via JQuery : http://stackoverflow.com/questions/6...se-click-event

    Cordialement,
    Patrick Kolodziejczyk.

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par kolodz Voir le message
    Mouse Press et Mouse Release ?

    Press pour débuter l'envoie régulier. (Onmousedown)
    Release pour arrêter l'envoie régulier. (Onmouseup)

    Ou via JQuery : http://stackoverflow.com/questions/6...se-click-event

    Cordialement,
    Patrick Kolodziejczyk.
    Merci kolodz!

    J'avoue que je n'avais pas trouvé cette solution, pourtant j'ai cherché!
    Bon j'ai commencé a implémenter cette solution pour tester, et ça marche niquel depuis mon laptop (sous chrome) mais pas sous IOS! (safari ou chrome)

    J'ai beau triturer dans tous les sens, je ne vois pas ou est le problème

    Voici le code de la page:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    <html>
     
    <header>
    <link rel="stylesheet"  href="css/themes/default/jquery.mobile-1.2.0.css" />
    <script src="js/jquery.js"></script>
    <script src="docs/_assets/js/jqm-docs.js"></script>
    <script src="js/jquery.mobile-1.2.0.js"></script>
    <script>
    	document.documentElement.style.webkitTouchCallout = 'none';
    </script>
    <script type="text/javascript">
    	$(function() {
    		var int;
    		$("a#UP").mousedown(function() {
    			int = setInterval(performWhileMouse, 100);
    		}).mouseup(function() {
    			clearInterval(int);  
    		});
    	});
     
    	function performWhileMouse() {
    		$.post("index.html", { direction: "UP"});
    		$("#output").append("<p>Mouse down</p>");
    	}
     </script>
    </header>
     
    <body>
    <!-- Home -->
    <div id="output"></div>
    <div id="page1" data-role="page">
        <div data-role="content">
            <div data-role="navbar" data-iconpos="top">
                <ul>
                    <li>
                        <a class="ui-btn-active ui-state-persist" href="#page1" data-icon="" data-theme="a"
                        data-transition="fade">
                            <h1>Manual</h1>
                        </a>
                    </li>
                    <li>
                        <a href="#page1" data-icon="" data-theme="a" data-transition="fade">
                            <h1>Automatic</h1>
                        </a>
                    </li>
                    <li>
                        <a href="#page1" data-icon="" data-theme="a" data-transition="fade">
                            <h1>Options</h1>
                        </a>
                    </li>
                </ul>
            </div>
            <div data-role="fieldcontain">
    			<br><br><br><br>
            </div>
            <div class="ui-grid-b">
                <div class="ui-block-a">
                </div>
                <div class="ui-block-b">
                    <a href="" data-role="button" data-iconpos="top" data-icon="arrow-u"
                    data-theme="a" id="UP"><br><br><br><br><br><br>
                    </a>
                </div>
                <div class="ui-block-c">
                </div>
                <div class="ui-block-a">
                    <a href="" data-role="button" data-iconpos="left" data-icon="arrow-l"
                    data-theme="a" id="LEFT"><br><br><br><br><br><br><br><br>
                    </a>
                </div>
                <div class="ui-block-b">
                </div>
                <div class="ui-block-c">
                    <a href="" data-role="button" data-iconpos="right" data-icon="arrow-r"
                    data-theme="a" id="RIGHT"><br><br><br><br><br><br><br><br>
                    </a>
                </div>
                <div class="ui-block-a">
                </div>
                <div class="ui-block-b">
                    <a href="" data-role="button" data-iconpos="bottom" data-icon="arrow-d"
                    data-theme="a" id="DOWN"><br><br><br><br><br><br>
                    </a>
                </div>
                <div class="ui-block-c">
                </div>
            </div>
        </div>
    </div>
    </body>
     
    </html>

  10. #10
    Membre confirmé
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Points : 497
    Points
    497
    Billets dans le blog
    1
    Par défaut
    Salut Critok
    compte tu partager ton projet dans un site de versionning type github si oui, il ya une url ou retrouver le code?

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Khaled.Noordin Voir le message
    Salut Critok
    compte tu partager ton projet dans un site de versionning type github si oui, il ya une url ou retrouver le code?
    Salut khaled,

    Pour l'instant non car je pense que l'architecture n'est pas forcement assez avancée et je suis plus à l'état de prototype si l'on peut dire. A terme pourquoi pas.
    En tous les cas je partage mon avancée et généralement le code (par morceau) sur mon blog: http://darylrobotproject.wordpress.com/

    C'est vrai que pour l'instant je teste diverses choses par si par la, en essayant de les intégrer, mais ce n'est pas vraiment propre

    Je partagerais le code globale quant tout cela sera un peu stabilisé.

    Cordialement,

  12. #12
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    J'ai l'impression que tu n'as absolument pas utilisé les events spécifiques à JQuery mobile. Ceux qui sont utilisés pour tout ce qui est touch input.

    http://jquerymobile.com/branches/sli...pi/events.html

    (vmousedown, vmouseup & cie)

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Arg je savais bien que j'avais déconné quelque part.

    je test ca ce soir et je vous tient au courrant. Merci

Discussions similaires

  1. [débutant] besoin d'avis sur architecture de base.
    Par Mathusalem dans le forum Oracle
    Réponses: 3
    Dernier message: 14/11/2006, 15h43
  2. Besoin d'un avis sur une solution
    Par el_quincho dans le forum Access
    Réponses: 3
    Dernier message: 19/04/2006, 13h27
  3. Réponses: 2
    Dernier message: 04/03/2006, 11h52
  4. Besoin de vos avis sur un algo
    Par vodevil dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2006, 16h40
  5. Réponses: 6
    Dernier message: 28/02/2005, 14h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo