Mavros: Réitérer les conversions de trames entre NED et ENU

CrĂ©Ă© le 10 fĂ©vr. 2015  Â·  21Commentaires  Â·  Source: mavlink/mavros

bug documentation

Commentaire le plus utile

je regarde ça :
http://wiki.ros.org/geometry/CoordinateFrameConventions et
http://www.ros.org/reps/rep-0103.html

Il y a un certain nombre de problÚmes avec le graphique (et s'il représente l'orientation, le code) :

Par consĂ©quent, il n'y a pas de diffĂ©rence entre la trame corporelle et la trame mondiale Ă  rotation zĂ©ro, et la conversion entre NED et ENU est la mĂȘme pour les deux trames, en utilisant respectivement la rĂ©fĂ©rence globale/locale.

Tous les 21 commentaires

Peut-ĂȘtre que quelqu'un peut commenter l'Ă©tat actuel ? Je manque de temps pour passer au crible le code actuellement, mais je serais heureux de revoir les transformations.

@LorenzMeier Voir PR # 208.

@LorenzMeier En fait, c'est la convention actuelle que nous utilisons :

NED fixe → ROS ENU : (xyz)→(x -y -z) ou (wxyz)→(x -y -zw)
local NED → ROS ENU : (xyz)→(yx -z) ou (wxyz)→(yx -zw)

image

Je ne peux pas vérifier l'exactitude de ce diagramme, mais c'est ce que je pense que nous faisons maintenant.

Oui c'est mon schéma. Je peux le confirmer, et je l'ai utilisé et expliqué sur ma thÚse.

Note : Cette conversion est ce que nous avons convenu il y a quelques mois et j'ai pu la confirmer sur Rviz.

Le problÚme n'est pas la conversion réelle, mais plutÎt l'utilisation d'une certaine conversion.

je regarde ça :
http://wiki.ros.org/geometry/CoordinateFrameConventions et
http://www.ros.org/reps/rep-0103.html

Il y a un certain nombre de problÚmes avec le graphique (et s'il représente l'orientation, le code) :

Par consĂ©quent, il n'y a pas de diffĂ©rence entre la trame corporelle et la trame mondiale Ă  rotation zĂ©ro, et la conversion entre NED et ENU est la mĂȘme pour les deux trames, en utilisant respectivement la rĂ©fĂ©rence globale/locale.

Je suis principalement d'accord avec ce que @LorenzMeier a dit. Cependant, Ă  moins que je ne me trompe, chaque cadre de coordonnĂ©es dans le graphique ci-dessus, Ă  l'exception de celui en bas Ă  droite, est un systĂšme de coordonnĂ©es gaucher. Peut-ĂȘtre avez-vous mal Ă©tiquetĂ© les axes x et y dans la lĂ©gende des graphiques ?

En dehors de cela, je suis d'accord pour dire que la conversion de ENU en NED est la mĂȘme, que ce soit pour le chĂąssis au sol ou le chĂąssis. Sur le cadre du corps, le nom ENU ou NED n'a pas beaucoup de sens, mais la conversion du cadre de coordonnĂ©es utilisĂ© dans ROS en FCU devrait toujours ĂȘtre le mĂȘme, je pense.

Je n'ai pas encore vérifié la méthode de conversion que @mhkabir a publiée ci-dessus. Je pense que nous devons d'abord obtenir le bon graphique avant de faire le calcul

@thedinuka Cela vous genre , selon ce qui vous semble correct. ;)

J'ai le fichier d'origine, je peux le modifier puis en envoyer un nouveau (pas besoin d'utiliser de la peinture @mhkabir). La chose à propos de la main droite et de la main gauche semble juste. Mais j'ai encore des doutes par rapport au fait d'avoir deux conversions différentes, et quand j'ai fait cette image cette fois-là, je les avais aussi. Nous devons donc probablement vérifier le code, car d'aprÚs mes souvenirs, la plupart des implémentations utilisent les conversions ci-dessus.

En attendant la version modifiée du graphique par @TSC21 , j'y ai réfléchi un peu plus et cela semble plus compliqué que je ne le pensais au départ. Je suis plutÎt d'accord avec @TSC21. Il y a deux paires différentes de transformations de coordonnées auxquelles nous devons penser.

1) Transformation de la convention ROS du cadre fixe du corps Ă  la convention Pixhawk du cadre fixe du corps.
2) Passer de la convention ROS du cadre fixe Ă  la Terre Ă  la convention Pixhawk du cadre fixe Ă  la terre.

Bien qu'il existe de la documentation à la fois du cÎté ROS et du cÎté Pixhawk sur la convention utilisée pour le cadre de coordonnées fixé au corps, je n'ai pas pu trouver d'informations spécifiques sur la convention utilisée du cÎté Pixhawk sur le cadre de coordonnées inertielle (ou fixe terrestre). Si je devais faire une supposition, je dirais que du cÎté de Pixhawk, en l'absence de GPS, le cadre de coordonnées Earth Fixed s'aligne sur l'orientation initiale du cadre fixe du corps, mais je ne suis pas sûr à 100% si c'est le cas. Donc, pour éviter toute erreur et confusion, je vais, pour l'instant, ne considérer que le chùssis fixe du corps.

En m'appuyant sur la documentation [1] pour ROS et [2] pour Pixhawk, j'ai réalisé le schéma suivant.
body_coordinate_frames

Une fois que nous avons vérifié, confirmé et accepté les diagrammes du cadre de coordonnées pour (1) et (2) ci-dessus, les calculs pour effectuer les transformations réelles du cÎté mavros sont trÚs simples.

[1] http://www.ros.org/reps/rep-0103.html
[2] https://pixhawk.org/dev/know-how/frames_of_reference

Veuillez Ă©galement consulter #148 (conversion de covariation).

Cela peut aider ros-infrastructure/rep#95

Avons-nous fini par arriver quelque part avec ça? Les conversions actuelles des cadres ENU/NED, corps/monde sont-elles correctes ? Je pose cette question car nous devons répéter la possibilité que
@vooon , @mhkabir , @tonybaltovski , @thedinuka ping !

@thedinuka Ça me va bien.

Si je devais faire une supposition, je dirais que du cÎté de Pixhawk, en l'absence de > GPS, le cadre de coordonnées Earth Fixed s'aligne sur l'orientation initiale du > cadre fixe du corps

En fait, pas besoin de GPS. Nous avons déjà une référence mondiale en lacet du mag. Cela devrait signifier une rotation du cadre EF à l'aide de ce lacet.

Salut,
Je remapper le sujet de mocap_optitrack Ă  vision_pose/pose dans mavros. cependant le mav ne peut pas voler correctement, donc je change le code suivant
vision_position_estimate(stamp.toNSec() / 1000,
position.y(), position.x(), -position.z(),
roulis, -tangage, -lacet); // ??? VĂ©rifiez s'il vous plaĂźt!
Ă 
vision_position_estimate(stamp.toNSec() / 1000,
position.y(), position.x(), -position.z(),
roulis, -tangage, -lacet + 1,57) );
c'est-Ă -dire changer -yaw en -yaw + 1,57.
lors de la conversion du cadre du corps de ENU à NED, mavros utilise désormais
(xyz)-->(x,-y,-z)
(w,x,y,z)-->(x,-y,-z,w), donc on obtient
ENU ---> NED
rouler ----> rouler
pas ----->-pas
lacet ----->-lacet.
Cependant, je pense que nous nous trompons sur le fait que le lacet est basé sur l'axe x dans le cadre du monde (lorsque x dans le cadre du corps est avec x dans le cadre du monde, le lacet est égal à 0) et a une rotation de 90 degrés. nous devrions donc faire -yaw + 1,57. c'est à dire
ENU ---> NED
rouler ----> rouler
pas ----->-pas
lacet ----->-lacet+1,57.
aprÚs l'avoir changé, le mav peut voler correctement. donc je pense que d'autres plugins sont aussi comme ça.

@congleetea qui semble lĂ©gitime. Pouvez-vous s'il vous plaĂźt appliquer les mĂȘmes transformations aux plugins de point de consigne et voir quel est le rĂ©sultat ? De plus, les donnĂ©es provenant du sujet local_position sont-elles correctement orientĂ©es sans que vous appliquiez la mĂȘme conversion ?

Veuillez Ă©galement consulter #148 (conversion de covariation).

Nous devons Ă©galement en tenir compte.

Le PR n°317 modifie les conversions.

j'ai testé cette conversation

NED(Pixhawk)->ENU(ROS)
(X,Y,Z)->(X,-Y,-Z)

ENU(ROS)->NED(Pixhawk)
(X,Y,Z)->(X,-Y,-Z)

Cela fonctionne bien Ă  la fois en rviz et en vraie aventure.

@supermice qui confirme #317 alors merci ! :)

Cette page vous a été utile?
0 / 5 - 0 notes