Skip to content

Conventions d'axes (NED et ENU)

Antonio Sanniravong edited this page Apr 3, 2015 · 1 revision

Le quad fonctionne sur un référentiel NED (North = X, East = Y, Down = Z), alors que la convention ROS est le référentiel ENU (East = X, North = Y, Up = Z). La conversion est faite automatiquement lors de la publication des coordonnées locales reçues par MAVROS et, ensuite, avant l'envoi des coordonnées vers le contrôleur de vol. Donc, si on travaille uniquement dans ROS, on n'aura pas nécessairement à faire de conversions car on travaillera presque exclusivement en ENU. Ceci étant dit, il est crucial d'être conscient que cette conversion a lieu! L'image suivante illustre cette conversion. On se concentre ici sur le cas ground-frame seulement.

NED & ENU

Exemple, qui (espérons-le) clarifie ce concept: Vous avez deux caméras qui filment notre quad qui pointe vers le Nord (ça aurait pu être vers n'importe quelle direction, c'est seulement pour l'exemple). Une est placée pour faire en sorte que vous perceviez le quad selon le référentiel NED et l'autre selon le référentiel ENU. Supposons que les axes de notre perception individuelle (nos yeux) sont:

  • X -> pointe vers nous
  • Y -> pointe vers notre droite
  • Z -> pointe vers le haut

(comme en Calcul II)

Pour avoir la perception désirée vous devez placer et orienter les caméras de cette façon:

	NED -> La caméra est au Nord du quad (face a face avec le quad) et elle est à l'envers (sur sa tête).
	ENU -> La caméra est à l'Est du quad (filme le côté droit du quad) et elle est à l'endroit.

Le setup étant fait, regardons trois cas de translation à travers ces deux caméras:

Cas 1: Le quad avance de 1 mètre vers le Nord, alors selon le référentiel:

	NED -> Le quad a avancé de 1m vers vous, donc +1m sur l'axe des X
	ENU -> Le quad a avancé de 1m vers votre droite, donc +1m sur l'axe des Y

Cas 2: Le quad avance de 4 mètres vers l'Ouest, alors selon le référentiel:

	NED -> Le quad a avancé de 4m vers votre droite, donc +4m sur l'axe des Y
	ENU -> Le quad s'est éloigné de 4m de vous, donc -4m sur l'axe des X

Cas 3: Le quad gagne 2 mètres en altitude, alors selon le référentiel:

	NED -> Le quad est descendu de 2m vers le bas (qui est en fait le ciel), donc -2m sur l'axe des Z
	ENU -> Le quad est monté de 2m vers le haut, donc +2m sur l'axe des Z

Attention!!! : Cette conversion est bonne pour les coordonnées sur des référentiels relatifs au monde (ground-frame), que ce soit des coordonnées locales (par rapport à un point de départ) ou globales (coordonnées GPS). Cependant, cette conversion n'est pas valable pour des coordonnées relatives au corps du quad (body-frame) où les axes X, Y et Z suivent le quad. Ceci implique que les référentiels NED et ENU ne tiennent pas compte de l'orientation du quad, seulement de sa position relative ou absolue par rapport à la terre.

Si vous voulez faire référence à des positions qui sont relatives au quad, par exemple, à partir d'une caméra montée sur le quad, vous devrez prendre en compte son orientation (sa rotation) par rapport au référentiel dans lequel vous travaillez et faire la conversion avant de donner une consigne au quad.

Exemple concret: Le quad est présentement à la coordonnée (5, -6, 2) en ENU. Il se dirige vers le Sud et perçoit, à l'aide d'une caméra montée en dessous, un objet déposé par terre à 1m à sa droite. Selon l'image, cet objet se trouve donc à +1m sur l'axe des X et à -2m sur l'axe des Z. Cependant, selon le référentiel ENU, cet objet se trouve à -1m du quad sur l'axe des X et -2m sur l'axe Z. L'objet serait donc à la position (4,-6, 0) et non pas à (6, -6, 0).

Le package ROS tf peut vous aider à faire ce genre de rotation qui ne sont pas toujours des multiples de 90 degrés dans la vrai vie.

Clone this wiki locally