Mavros: Reitere as conversões de quadro entre NED e ENU

Criado em 10 fev. 2015  ·  21Comentários  ·  Fonte: mavlink/mavros

bug documentation

Comentários muito úteis

Estou olhando para isso:
http://wiki.ros.org/geometry/CoordinateFrameConventions e
http://www.ros.org/reps/rep-0103.html

Existem vários problemas com o gráfico (e se ele representar a orientação, o código):

Consequentemente, não há diferença entre o quadro do corpo e o quadro mundial em rotação zero, e a conversão entre NED e ENU é a mesma para ambos os quadros, usando referência global / local, respectivamente.

Todos 21 comentários

Talvez alguém possa comentar sobre o estado atual? Não tenho tempo para examinar o código atualmente, mas ficaria feliz em revisar as transformações.

@LorenzMeier Consulte PR # 208.

@LorenzMeier Na verdade, esta é a convenção atual que usamos:

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

image

Não posso verificar a exatidão deste diagrama, mas é o que acho que estamos fazendo agora.

Sim, esse é o meu esquema. Posso confirmar, usei e expliquei na minha tese.

Nota: Esta conversão é o que combinamos alguns meses atrás e eu pude confirmar no Rviz.

O problema não é a conversão real, mas sim quando uma determinada conversão é usada.

Estou olhando para isso:
http://wiki.ros.org/geometry/CoordinateFrameConventions e
http://www.ros.org/reps/rep-0103.html

Existem vários problemas com o gráfico (e se ele representar a orientação, o código):

Consequentemente, não há diferença entre o quadro do corpo e o quadro mundial em rotação zero, e a conversão entre NED e ENU é a mesma para ambos os quadros, usando referência global / local, respectivamente.

Eu concordo principalmente com o que @LorenzMeier disse. No entanto, a menos que eu esteja muito enganado, cada quadro de coordenadas no gráfico acima, exceto o inferior direito, é um sistema de coordenadas para canhotos. Talvez você tenha rotulado incorretamente os eixos xey na legenda dos gráficos?

Tirando isso, concordo que a conversão de ENU em NED é o mesmo, seja para a estrutura do solo ou para a estrutura da carroceria. No quadro do corpo, o nome ENU ou NED não faz muito sentido, mas ainda a conversão do quadro de coordenadas usado no ROS para FCU deve ser sempre o mesmo, eu acho.

Eu ainda não verifiquei o método de conversão que @mhkabir postou acima. Acho que precisamos acertar o gráfico antes de fazer as contas

@thedinuka Você se importaria de fazer um novo no Paint ou algo assim, de acordo com o que parece correto para você. ;)

Eu tenho o arquivo original, posso alterá-lo e enviar um novo (não há necessidade de usar o paint @mhkabir). A coisa sobre as mãos direita e esquerda parece certa. Mas ainda tenho dúvidas em relação a ter duas conversões diferentes, e quando fiz aquela imagem daquela vez, eu as estava tendo também. Então provavelmente precisamos verificar o código, porque pelo que me lembro, a maioria das implementações usa as conversões acima.

Enquanto esperava pela versão modificada do gráfico por @ TSC21 , pensei um pouco mais sobre isso e parece mais complicado do que eu pensava inicialmente. Eu meio que concordo com @ TSC21. Existem dois pares diferentes de transformações de coordenadas em que precisamos pensar.

1) Transformação da convenção ROS de estrutura fixa no corpo para a convenção Pixhawk de estrutura fixa no corpo.
2) Transforme a convenção ROS de estrutura fixa na terra para a convenção Pixhawk de estrutura fixa na terra.

Embora haja documentação tanto no lado ROS quanto no lado Pixhawk sobre a convenção usada para o quadro de coordenadas fixas no corpo, não consegui encontrar informações específicas sobre a convenção usada no lado Pixhawk sobre o quadro de coordenadas inercial (ou fixo na Terra). Se eu tivesse que adivinhar, diria que no lado do Pixhawk, na ausência de GPS, o quadro de coordenadas fixo da Terra se alinha com a orientação inicial do quadro de corpo fixo, mas não tenho 100% de certeza se este é o caso. Portanto, para evitar erros e confusões, irei, por enquanto, considerar apenas a estrutura fixa da carroceria.

Relatando a documentação [1] para ROS e [2] para Pixhawk, fiz o seguinte diagrama.
body_coordinate_frames

Uma vez que tenhamos os diagramas de quadro de coordenadas para ambos (1) e (2) acima verificados, confirmados e acordados, então a matemática para fazer as transformações reais no lado dos mavros é muito simples.

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

Consulte também # 148 (conversão de covariação).

Isso pode ajudar ros -rastructure / rep # 95

Acabamos chegando a algum lugar com isso? As conversões atuais de ENU / NED, body / world frames estão corretas? Estou perguntando por que precisamos iterar a possibilidade de que @blackcoder esteja obtendo uma rotação de guinada na FCU ao enviar os dados de visão porque estamos fazendo coisas erradas.
@vooon , @mhkabir , @tonybaltovski , @thedinuka ping!

@thedinuka parece bom para mim.

Se eu tivesse que adivinhar, diria que no lado do Pixhawk, na ausência de> GPS, o quadro de coordenadas fixo da Terra se alinha com a orientação inicial do quadro> corpo fixo

Na verdade, não precisa de GPS. Já temos uma referência global de yaw da revista. Isso deve significar EF frame girado usando por esta guinada.

Oi,
Eu remapeio o tópico de mocap_optitrack para vision_pose / pose em mavros. no entanto, o mav não pode voar corretamente, então eu mudo o seguinte código
vision_position_estimate (stamp.toNSec () / 1000,
position.y (), position.x (), -position.z (),
roll, -pitch, -yaw); // ??? por favor, verifique!
para
vision_position_estimate (stamp.toNSec () / 1000,
position.y (), position.x (), -position.z (),
roll, -pitch, -yaw + 1,57);
ou seja, mude -yaw para -yaw + 1,57.
ao conversar com o corpo do ENU para o NED, os mavros agora usam
(xyz) -> (x, -y, -z)
(w, x, y, z) -> (x, -y, -z, w), então obtemos
ENU ---> NED
roll ----> roll
pitch -----> - pitch
yaw -----> - yaw.
no entanto, acho que erramos que a guinada é baseada no eixo x na moldura do mundo (quando x na moldura do corpo está junto com x na moldura do mundo, a guinada é 0) e tem rotação de 90 graus. então devemos fazer -yaw + 1.57. ie
ENU ---> NED
roll ----> roll
pitch -----> - pitch
guinada -----> - guinada + 1,57.
depois que eu mudei, o mav pode voar corretamente. então eu acho que outro plugin também é assim.

@congleetea que parece legítimo. Você pode aplicar as mesmas transformações aos plug-ins de ponto de ajuste e ver qual é o resultado? além disso, os dados provenientes do tópico local_position vêm com a orientação correta, sem que você aplique a mesma conversão?

Consulte também # 148 (conversão de covariação).

Também devemos levar isso em consideração.

PR # 317 alterar conversões.

Eu testei essa conversa

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

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

Isso funciona bem tanto em rviz quanto em aventuras reais.

@supermice que confirma # 317, então obrigado! :)

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

jannsta1 picture jannsta1  ·  7Comentários

L4ncelot picture L4ncelot  ·  5Comentários

watakandai picture watakandai  ·  8Comentários

lucaspenna00 picture lucaspenna00  ·  7Comentários

mohand150 picture mohand150  ·  5Comentários