MAVLink ou Micro Air Vehicle Link (Tradução literal: Comunicação de Micro Veículo Aéreo) é um protocolo de comunicação para pequenos veículos não tripulados. Ele é projetado como uma biblioteca de mensagens apenas de cabeçalho. MAVLink foi lançado pela primeira vez no início de 2009. por Lorenz Meier sob a licença LGPL.
Aplicações Ele é usado principalmente para comunicação entre uma Estação de Controle de Solo e veículo aéreo não tripulado, e na intercomunicação do subsistema do veículo. Ela pode ser usada para transmitir a orientação do veículo, sua localização GPS e velocidade.
Estrutura dos Pacotes Na versão 1.0, a estrutura do pacote é a seguinte: Field nameIndex (Bytes)PurposeStart-of-frame0Denota o início da transmissão do quadro (v1.0: 0xFE)Payload-length1tamanho do payload (n)Packet sequence2Cada componente conta sua seqüência de envio. Permitindo a detecção de perda de pacotes.System ID3Identificação do sistema de SENDING. Permite diferenciar diferentes sistemas na mesma rede.Component ID4Identificação do componente SENDING. Permite diferenciar diferentes componentes de um mesmo sistema, por exemplo, a IMU e o piloto automático.Message ID5Identificação da mensagem - o id define o que o payload "deve conter" e como ela deve ser corretamente decodificada.Payload6 to (n+6)Os dados na mensagem, dependem da identificação da mensagem.CRC(n+7) to (n+8)Verificação da soma de todo o pacote, excluindo o sinal de partida do pacote (LSB para MSB) Após a Versão 2, a estrutura do pacote foi expandida para o seguinte: Field nameIndex (Bytes)PurposeStart-of-frame0Denota o início da transmissão do quadro (v2: 0xFD)Payload-length1tamanho do payload (n)incompatibility flags2Bandeiras que devem ser interpretadas para a compatibilidade do MAVLinkcompatibility flags3Bandeiras que podem ser ignoradas se não forem interpretadasPacket sequence4Cada componente conta sua seqüência de envio. Permitindo a detecção de perda de pacotes.System ID5Identificação do sistema de SENDING. Permite diferenciar diferentes sistemas na mesma rede.Component ID6Identificação do componente SENDING. Permite diferenciar diferentes componentes de um mesmo sistema, por exemplo, a IMU e o piloto automático.Message ID7 to 9Identificação da mensagem - o id define o que o payload "deve conter" e como ela deve ser corretamente decodificada.Payload10 to (n+10)Os dados na mensagem, dependem da identificação da mensagem.CRC(n+11) to (n+12)Verificação da soma de todo o pacote, excluindo o sinal de partida do pacote (LSB para MSB)Signature(n+13) to (n+25)Assinatura para verificar se as mensagens são originadas de uma fonte confiável. (opcional)
Campo CRC Para garantir a integridade da mensagem, uma verificação de redundância cíclica (CRC) é calculada para cada mensagem nos dois últimos bytes. Outra função do campo CRC é garantir que o remetente e o receptor concordem na mensagem que está sendo transferida. Ele é calculado usando um hash ITU X.25SAE AS-4 dos bytes no pacote, excluindo o indicador de Início de Margem (assim 6+n+1 bytes são avaliados, o extra +1 é o valor da semente). A semente é gerada com cada novo conjunto de mensagens do protocolo, e é apresentada de forma semelhante aos pacotes de cada especificação de mensagem. Os sistemas que usam o protocolo MAVLink podem usar uma matriz pré-calculada para este propósito.QG Control. http://qgroundcontrol.org/mavlink/crc_extra_calculation
O algoritmo CRC do MAVLink foi implementado em muitas linguagens, como Python e Java.
Mensagens O payload dos pacotes descritos acima são mensagens do MAVLink. Cada mensagem é identificável pelo campo ID no pacote, que contém um payload com os dados da mensagem. Um documento XML no código-fonte do MAVLink possui a definição dos dados armazenados neste payload.
Abaixo está a mensagem com o ID 24 extraído do documento XML. <message id="24" name="GPS_RAW_INT"> <description>The global position, as returned by the Global Positioning System (GPS). This is NOT the global position estimate of the system, but rather a RAW sensor value. See message GLOBAL_POSITION for the global position estimate. Coordinate frame is right-handed, Z-axis up (GPS frame).</description> <field type="uint64_t" name="time_usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field> <field type="uint8_t" name="fix_type">0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.</field> <field type="int32_t" name="lat">Latitude (WGS84), in degrees * 1E7</field> <field type="int32_t" name="lon">Longitude (WGS84), in degrees * 1E7</field> <field type="int32_t" name="alt">Altitude (WGS84), in meters * 1000 (positive for up)</field> <field type="uint16_t" name="eph">GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX</field> <field type="uint16_t" name="epv">GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX</field> <field type="uint16_t" name="vel">GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX</field> <field type="uint16_t" name="cog">Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX</field> <field type="uint8_t" name="satellites_visible">Number of satellites visible. If unknown, set to 255</field> </message>
Observação: O documento XML descreve a ordenação lógica dos campos para o protocolo. O formato real do fio (e a representação típica em memória) tem os campos reordenadosQG Round Control. http://qgroundcontrol.org/mavlink/crc_extra_calculation#field_reordering afim de reduzir Alinhamento da estrutura de dados os problemas. Isto pode ser uma fonte de confusão ao ler o código gerado a partir das definições da mensagem.
Ecossistema do MAVLink MAVLink é usado como protocolo de comunicação em muitos projetos, o que pode significar que há alguma compatibilidade entre eles. Um interessante tutorial explicando os conceitos básicos do MAVLink foi escrito.
Referências
Categoria:Aviação Categoria:Robótica Categoria:Softwares multiplataformas Categoria:Tecnologias emergentes Categoria:Veículos aéreos não tripulados Categoria:Engenharia robótica