Question

J'ai actuellement un robot avec quelques capteurs, comme un GPS, un accéléromètre et une boussole.Ce que j'aimerais faire, c'est que mon robot atteigne une coordonnée GPS que j'entre.Je me demandais s'il existait déjà un algorithme permettant de faire cela.Je ne veux pas d'un code source, qui n'aurait aucun sens, juste la procédure à suivre pour que mon robot le fasse, pour que je puisse comprendre ce que je fais...Pour le moment, imaginons que je puisse accéder aux coordonnées GPS à tout moment, donc pas besoin de filtre de Kalman.Je sais que c'est irréaliste, mais j'aimerais le programmer étape par étape, et Kalman est la prochaine étape.

Si quelqu'un a une idée...

Était-ce utile?

La solution

Pour obtenir un relèvement (angle positif à l'est du nord) entre deux points lat-long, utilisez :

bearing=mod(atan2(sin(lon2-lon1)*cos(lat2),(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon2-lon1)),2*pi)

Note - les angles doivent probablement être en radians en fonction de votre programme mathématique.

Mais pour les petites distances, vous pouvez simplement calculer le nombre de mètres dans un degré de latitude et de longueur à votre position, puis les traiter comme des coordonnées plates X, Y.

Pour des latitudes typiques de 45 degrés, c'est environ 111,132 km/deg de latitude, 78,847 km/deg de longitude.

Autres conseils

1) Orientez votre robot vers sa destination.

2) avancez jusqu'à ce que la distance entre vous et votre destination augmente où vous devriez revenir à 1)

3) Mais ... si vous êtes assez proche (sous un seuil), considérons que vous êtes arrivé à la destination.

Vous pouvez utiliser le Location classe.C'est BearingTo La fonction calcule le relèvement que vous devez suivre pour atteindre un autre emplacement.

Il y a une très belle page expliquant les formules entre la distance basée sur le GPS, le relèvement, etc.calcul, que j'ai utilisé:

http://www.movable-type.co.uk/scripts/latlong.html

J'essaie actuellement de faire ces calculs moi-même et je viens de découvrir que dans la réponse de Martin Becket, il y a une erreur.Si vous comparez aux informations de cette page Web, vous verrez que la partie au milieu :

(lat1)*sin(lat2)

devrait en fait être :

cos(lat1)*sin(lat2)

J'aurais laissé un commentaire, mais je n'ai pas encore la réputation...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top