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

Algorithmes et structures de données Discussion :

[Robotique] Gérer le déplacement virtuel


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif

    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Par défaut [Robotique] Gérer le déplacement virtuel
    Bonjour,

    Je suis au centre d'une pièce (point (0,0)), et je me déplace. Je souhaite connaitre la distance que j'ai parcouru horizontalement et verticalement (en mètre) depuis ce point d'origine.
    Je code en javascript. Je suis absolument ignorant en algo, j'arrive à récupérer la position géolocalisée de mon appareil (latitude et longitude), mais je ne vois pas comment je peux faire une comparaison de distance entre 2 points. J'ai l'impression que lorsque je me déplace, les valeurs ne changent pas beaucoup.

    mon code :
    Code html : 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
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <title>Suspect Room</title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
            <meta name="apple-mobile-web-app-capable" content="yes" />
            <meta name="apple-mobile-web-app-status-bar-style" content="black" />
            <link rel="apple-touch-icon" href="apple-touch-icon.png" />
     
            <meta http-equiv="cache-control" content="max-age=0" />
            <meta http-equiv="cache-control" content="no-cache" />
            <meta http-equiv="expires" content="0" />
            <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
            <meta http-equiv="pragma" content="no-cache" />
        </head>
        <body onload="getLocation();">
            <div id="position"></div>
        </body>
        <script type="text/javascript">
            var x = document.getElementById('position');
            var startPosition = undefined;
            function getLocation() {
                if (navigator.geolocation) {
                    navigator.geolocation.getCurrentPosition(showPosition);
                } 
                else {
                    x.innerHTML="Geolocation is not supported by this browser.";
                }
            }
     
            function showPosition(position) {
                console.log('showPosition');
                if(typeof startPosition == 'undefined'){
                    startPosition = position; // Ma position de départ
                }
                x.innerHTML="Latitude: " + (startPosition.coords.latitude - position.coords.latitude) + "<br />Longitude: " + (startPosition.coords.longiatitude - position.coords.longitude);
                setTimeout(getLocation(), 1);
            }
     
            function getWatchLocation() {
                if (navigator.geolocation) {
                    navigator.geolocation.watchPosition(showWatchPosition);
                } else {
                    x.innerHTML="Geolocation is not supported by this browser.";
                }
            }
            function showWatchPosition(position) {
                x.innerHTML="Latitude: " + position.coords.latitude + "<br />Longitude: " + position.coords.longitude;  
            }        
        </script>

    L'idée finale est de pouvoir évoluer dans une pièce virtuelle (en 3D en VR). Donc, je souhaite déplacer ma caméra 3D en fonction de mon déplacement physique.

    Merci pour votre aide.

    Zecreator.

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 229
    Par défaut
    Reprenons.
    Tu dis J'ai l'impression que lorsque je me déplace, les valeurs ne changent pas beaucoup.
    Juste un point de repère : Un degré, ça correspond en gros à 100 km. Donc oui, si tu te déplaces de 1 ou 2 mètres, la latitude ou la longitude bougent peu. Juste la 5ème ou 6ème décimale.

    Par ailleurs, les capteurs sont ce qu'ils sont. Je ne suis pas du tout certain que la précision promise par ton appareil permette de mesurer des mouvements au mètre près.
    Essaie de faire quelques étalonnages. Mesurer et noter de façon précise si le même coin de la pièce mesuré plusieurs fois, plusieurs jours différents, ça te donne toujours le même chiffre. Théoriquement oui, mais en pratique ?
    Idem, noter (long,lat) pour 3 points alignés, et vérifier si les mesures sont en phase avec ce que t'attendais.
    Idem, vérifier si en avançant vers le nord, c'est bien la latitude qui augmente...

    Ensuite, les formules pour calculer distance(long1, lat1, long2, lat2) ... ça existe. Je ne les ai pas là de tête, mais ça se trouve partout. Y compris sur ce forum.

    Mais tu trouveras cela dans les outils de SIG (Système d'information Géographique) ou dans les exercices de maths ; ça n'a rien à faire en algo.

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    si c'est pour un déplacement virtuel il te faut la position de depart et la possition d'arrivé le seul soucis c'est que la precision des GPS en regle general et de l'ordre de 3 mettre

    a mon avis ton GPS seul ne sert a rien

    il est préférable de l'utiliser avec d'autre type de capteur tels que

    - les accéléromètres
    - les gyroscopes
    ceux-ci te permet de définir le mouvement,la vitesse ... et ainsi d'en déduire la direction et la distance

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Tu dis J'ai l'impression que lorsque je me déplace, les valeurs ne changent pas beaucoup.
    Juste un point de repère : Un degré, ça correspond en gros à 100 km. Donc oui, si tu te déplaces de 1 ou 2 mètres, la latitude ou la longitude bougent peu. Juste la 5ème ou 6ème décimale.
    Merci pour cette réponse.

    En ce qui concerne la qualité de précision, elle doit être suffisament bonne je pense. Lorsque j'utilise Maps, je vois bien que le point sur la carte évolue en fonction de mes déplacements, même quand je suis à pied (donc au mètre près). C'est la même technologie de géolocalisation non ?

    Voici un exemple de ce que je veux faire :

    Je prend ma position de départ :

    Par exemple :
    Latitude : 48.97562608
    Longitude : 1.9896299

    Je me déplace d'environ un mètre sur la droite :
    Latitude : 48.97563737
    Longitude : 1.98975984

    Quelles est donc le calcul (avec ces 2 positions) qui me permet de déterminer que je me suis déplace d'un mètre sur la droite ?
    De même pour 1 mètre vers l'avant, vers l'arrière et vers la gauche ?

    Merci.

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 229
    Par défaut
    Si tu tapes "Conversion latitude longitude distance" sur Google, tu vas obtenir quelques centaines de sites qui te donnent la formule de calcul.

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    En robotique, on n'utilise pas le gps. Le robot, maîtrisant son mouvement, a conscience de sa position.
    Si un événement improbable arrive, il lance une procédure pour re-scanner son environnement et comprendre où il est.

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    la formule de calcul est
    R*acos(sin(a)*sin(b)+cos(a)*cos(b)*cos(c-d))
    avec R le rayon de la terre
    a = latitude du point de départ
    b = latitude du point d'arrivé
    c = longitude du point de départ
    d = longitude du point d'arrivé

    pour les petites distance il existe une autre formule
    2 * asin( racineCarre( sin((a-b)/2)^2 + cos(a)*cos(b)* (sin((c-d)/2)^2) )
    );

    attention les valeur sont en degré les fonction en développement sont en générale en radian
    pour la direction sachant que la longitude te donne l'est ou ouest
    et la latitude Nord ou sud je suppose qu'une simple soustraction te permettra de déterminer le sense

    PS : après quelque recherche il s’avère que c'est un peut plus compliqué ^^


    Δφ = ln( tan( b / 2 + PI / 4 ) / tan( a/ 2 + PI / 4) )
    Δlon = abs( c - d )
    roulement : θ = atan2( Δlon , Δφ )
    selon le signe tu peut déterminer le sens
    ou alors faire :
    coordNames = ["N", "NE", "E", "SE", "S", "SW", "W", "NW", "N"];
    coordIndex = round(θ/ 45);
    coordNames[coordIndex]
    Note:
    1) ln = natural log
    2) if Δlon > 180° then Δlon = Δlon (mod 180).
    3) if (coordIndex < 0) then coordIndex = coordIndex + 8

Discussions similaires

  1. gérer le déplacement d'un robot
    Par roger smith dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 31/03/2015, 11h37
  2. Gérer port com virtuel en builder 5
    Par phil2fer dans le forum C++
    Réponses: 9
    Dernier message: 28/09/2012, 08h33
  3. Réponses: 6
    Dernier message: 14/09/2012, 10h18
  4. Gérer le déplacement des ennemis
    Par dré kam dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 25/03/2012, 21h58
  5. Gérer le déplacement de zones nommées
    Par doublenico dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/01/2008, 12h05

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