27 de jul de 2018

Um quadricóptero pelos ares: como funciona esse controle tridimensional?

Alexandre Nogueira

A tecnologia de navegação nos drones já é parte do dia a dia de entusiastas. Existem diversos drones programáveis no mercado – alguns deles muito famosos, como a linha DJI Phantom – que permitem que você programe e execute seus próprios waypoints. Em outros modelos, que também são muito interessantes, os drones podem automaticamente te seguir ou retornar ao ponto de origem do voo.

Tudo isso depende muito de um sistema embarcado – como são chamados módulos de computação que funcionam de maneira independente de outros sistemas – chamado autopilot, o famoso "piloto automático". Os drones com autopilot permitem que você defina o que o drone deve fazer e pronto: ele executa.

Além do autopilot, os drones programáveis já têm uma estrutura padronizada, motores certos para cada caso e todo o peso e balanceamento alinhados, o que faz com que o software esteja calibrado para facilitar a vida de programadores.

Mas não é bem isso que queremos se quisermos projetar um quadricóptero (também conhecido como quadrotor) que transporte pesos e pessoas, já que cada um tem um peso. Às vezes nem vamos querer que um quadrotor seja assim, com quatro rotadores: talvez um hexacopter (com seis) ou octocopter (com oito) seja mais indicado para criar uma redundância.

Isso porque, quando alteramos qualquer das dimensões do drone, toda a física muda. E todo o software e parametrização do autopilot muda também.

Em um quadrotor, o autopilot distribui a energia em cada motor para que a atitude (formada pelo trio "pitch, roll, yaw"), altitude e velocidade sejam controladas corretamente. Se mudarmos a quantidade de motores, ou qualquer outra dimensão do drone, o autopilot não vai aplicar a força correta nos motores.

Será preciso adaptá-lo, e a variedade de veículos voadores autônomos que está prestes a chegar no mercado (conheça exemplos que incluem Uber, NASA e Kitty Hawk aqui) mostra que reprojetar o autopilot é possível – e mais fácil do que imaginamos, com o emprego de física, matemática e programação.

Para tanto, basta seguir os 5 passos abaixo, que são explicados em detalhes nas próximas seções:

  • Passo 1: Entender quais são as necessidades do drone (tempo de voo, peso da carga, etc.)
  • Passo 2: Definir os parâmetros físicos (como medidas e potência dos motores)
  • Passo 3: Definir que informações virão dos sensores a bordo (acelerômetro, GPS, giroscópios e unidade de medição inercial, a IMU)
  • Passo 4: Definir a lógica de controle PID
  • Passo 5: Estimar a posição do drone e realimentar a lógica PID

Super simples, certo? E não é rocket science: é drone science! Vamos ver tudo em mais detalhes e tenho certeza que você vai se surpreender com a simplicidade do processo.

Baixe o ebook: Carreira em inteligência artificial: desafios e oportunidades

O que é essencial para reprogramar um drone?

Vamos começar avaliando a dinâmica do quadrotor, que tem quatro motores que giram em direções diferentes. Isso acontece porque dois motores girando em uma direção afetarão o torque provocado pelos outros dois motores, que giram em direção contrária. O diagrama abaixo esclarece essa parte, que já foi explicada em mais detalhes em outro post:

O tamanho do drone também afeta a sua dinâmica. Usando o conceito de momento, sabemos que a força a ser usada pelo motor muda dependendo de sua distância para o centro de gravidade do drone. Assim, também temos que considerar o tamanho das hastes que seguram os motores na nossa conta.

O torque (ou momento físico, e não o momento de inércia) a que nos referimos agora é aquele conceito que usamos desde crianças, na gangorra, de que quanto mais longe do ponto de referência, menor a força necessária. A figura abaixo ajuda bastante a relembrá-lo:

Esse conceito, para o drone, faz toda a diferença do mundo quando estamos tentando definir que força será aplicada ao motor para executar um certo movimento. É sí transpor o pensamento da figura acima para a figura abaixo. O L é o tamanho da haste do motor e, quanto maior for, mais eficiente será o uso desse motor.

O cálculo do torque (T) do motor representado aqui é simplesmente a multiplicação da distância L pela força do motor, ou T = L x F.

Mas os drones voam em espaços tridimensionais, fazem curvas, se inclinam e mudam sua atitude constantemente. Isso é parte do voo e precisa ser controlado. Neste momento, os senos e cossenos entram em ação.

Quando o drone está parado, dizemos que está em equilíbrio e, neste caso, as forças se compensam e o drone fica parado. Mas tudo muda quando ele está em movimento ou inclinado.

Na figura acima, a relação entre peso e potência: o motor de um drone precisa fazer mais força que o peso para subir

Isso quer dizer que o drone, quando estiver fora da posição horizontal, precisa saber como ajustar a sua inclinação. Assim, precisa saber qual é sua inclinação atual – baseando-se na leitura do acelerômetro –, calcular a força que precisa ser exercida na correção e aplicar a força correta nos motores corretos. É aí que entra a interpretação das leis da física e a transformação dessas regras em linhas de código.

Isto também se aplica para a direção do drone e, consequentemente, no cálculo dos torques quando a representação do drone não está alinhada com os eixos de representação.

Um exemplo: existe uma manobra que os drones fazem chamada giro horizontal, que é quando o drone está parado, girando devagar sem se inclinar. Este movimento é conseguido simplesmente ao alterarmos o torque nos motores diagonalmente.

Aí os senos e cosenos aparecem novamente:

Nesse estágio, já dá para entender de que a rotação das hélices nas pontas dos eixos geram as forças necessárias para o controle total do drone, e assim já podemos imaginar com que tipo de informações trabalharemos para ajustar o voo do quadricóptero.

Em um mundo perfeito, ao aplicar as forças certas nos motores fica muito fácil prever a inclinação do drone. Por exemplo: você aplica uma força igual nos quatro motores e o drone decola. Você aplica uma força igual nos dois motores de trás e o drone se inclina para frente. Para corrigir a inclinação, basta aplicar a força contrária nos dois motores dianteiros. E o acelerômetro? Nem precisa utilizá-lo para estimar posição.

No mundo real, não é bem assim. Vento, pequenas diferenças na atuação dos motores e hélices levemente tortas, entre outros fatores, podem representar incertezas no modelo. E estas incertezas acabam com todos os planos que tínhamos até agora. O que fazer nesses casos?

Quer saber mais sobre drones autônomos?

Introdução aos controles

Os controles, em robótica, são um tema fundamental. Imagine que você está programando o comando de um braço robótico: ele está em uma posição X e você quer que se movimente até a posição Y em um movimento contínuo. Aí entram os controladores, ou lógica de controle.

Se seu braço robótico se movimentar devagar demais, a atuação do comando pode ser ineficiente. Se for muito rápido, pode passar do ponto. Um equilíbrio entre os dois é atingido com um controlador PID.

  • P de proporcional: quanto mais longe você estiver, mais rápido vai se aproximar
  • I de integral: amortize as oscilações causadas pelo controlador P
  • D de diferencial: desacelere a aproximação

Controladores PID são muito utilizados em inteligência artificial e – na inteligência natural também. Quer um exemplo? Quando estamos aprendendo a dirigir, estamos na verdade fazendo o tuning do nosso controlador PID mental.

No início, todos dirigimos em zigue-zague, pois não sabemos aplicar a força exata e nem tirar a força na hora exata, então dirigimos como o controlador P no gráfico abaixo. Um perigo.

Matematicamente, o controlador P é representado de uma maneira super simples:

Aos poucos, vamos aprendendo a desfazer o comando de virar antes do ponto e é quando aprendemos a usar o diferencial (P) do controlador e amortizar as oscilações. E aí nosso caminho no volante fica assim:

Matematicamente, a representação do controlador PD é a seguinte:

Muito melhor, mas ainda não ficou perfeito. Imagine que estamos dirigindo em uma curva, e precisamos ajustar a trajetória, sem ficar oscilando. Então, na nossa analogia da direção do carro, precisamos fazer uma força maior para dentro da curva do que para fora.

Esse ajuste no controlador, dependendo da trajetória, é um fator de correção de erros chamado de feed-forward). Esta técnica nos permite incluir um novo parâmetro: a força desejada na direção certa.

Ainda assim, nosso controlador – um programa de inteligência artificial, vale ressaltar – oscila um pouco, mesmo no fim da curva. Isso é facilmente resolvido pelo controlador PID. O controlador completo, com o termo I, usa a integração dos erros anteriores, o que quer dizer que acumula os erros anteriores e amortiza ainda mais o resultado.

E finalmente nossa curva ficou perfeita:

Matematicamente, o controlador PID fica assim:

O primeiro termo é o fator de feed-forward, mencionado anteriormente, e os outros termos são P, I e D, respectivamente. Podemos ver que o controlador tem parâmetros para cada um dos fatores: Kp, Ki e Kd.

Voltando aos quadricópteros, isso quer dizer que para cada aplicação diferente ou alteração nos parâmetros do drone, como dimensões, tamanho das hastes e pesos, o ajuste destes fatores deve ser refeito.

E voilà: aprendemos a dirigir! Voar, porém, é um pouco mais complicado.

Como estamos em mais de duas dimensões, mais de um controlador é necessário. Na verdade, é necessário fazer um controlador para cada uma das orientações do drone (yaw, pitch e roll). E cada controlador vai influenciar na ação do outro, ou seja, tudo faz parte da mesma conta.

Quando isso acontece, aplicamos os controladores em cascata, algo conhecido em inglês como cascading controls. Para termos uma idéia, o controlador em cascata para 2D é o que vemos abaixo:

E o controlador em cascata para 3D é este que vemos abaixo:

Bem mais complicado, certo? Claramente. Este controlador leva em consideração a localização atual do drone, seus ângulos de rotação atuais, a aceleração lateral e todos os itens anteriores derivados, ou seja, as velocidades e acelerações – quando há uma letra acima com um ponto no diagrama, trata-se de velocidade; quando são dois pontos, é aceleração – que funcionam como entrada para outros controladores. Cada caixinha no desenho acima é um controlador PID, que recebe informações externas representadas pelas linhas cor de rosa.

Drone autônomo: um projeto prático

Reprogramar um drone dessa maneira é o objetivo do terceiro projeto do Nanodegree Voo Autônomo, que terminei recentemente. Na prática, isso significa construir os controladores e fazer o tuning dos parâmetros de cada um deles.

Posso dizer que esse foi o projeto mais desafiador que eu já fiz até agora em meus estudos na Udacity (e entreguei com quase um mês de atraso!). Mas o aprendizado foi sensacional e recomendo a todos que tiverem um bom grau de resiliência e queiram se por à prova.

Construir tudo é um pouco complicado, mas também entusiasmante, já que é o que temos embarcado nos autopilots de drones atuais. Todos têm o controlador em cascata implementado, uma parametrização a ser feita, além dos filtros de Kalman que também já mencionamos brevemente antes – e os detalhes ficam para um próximo post.

Um exemplo bacana de parametrização real está no Mission Planner do ArduPilot, um software de código aberto que permite calibrar o quadricóptero com a APM (um autopilot próprio do software) embarcada. Nesse caso já existe todo o código carregado no autopilot e podemos ver a leitura que ele emite na tela abaixo:

No caso do meu quadrotor, o tuning dos controladores em cascata estão de acordo com a tela abaixo:

É isso mesmo: temos todos os parâmetros que usamos no controlador em cascata! Se você se empolgou, ótimo. Mas por favor, não use estes valores em seu aparelho: eles são específicos para meu drone e, como expliquei, cada um tem seus próprios parâmetros corretos.

Um peso diferente pode vir de diversas coisas, como uma nova hélice ou bateria – e isso exige ajustes. E outra dica de segurança que poderia parecer inusitada há uma década, quando não havia tantos drones por aí: tire sempre as hélices para fazer o tuning para evitar acidentes pelos ares.

Um conselho final? Aproveite o voo!

Leia também:

Sobre o autor
Alexandre Nogueira

Alexandre Nogueira é engenheiro de computadores e trabalha com desenvolvimento de novos negócios na Ericsson, em São Paulo. Interessado em tecnologias emergentes e novas oportunidades, retomou os estudos na Udacity com o Nanodegree Engenheiro de Carro Autônomo e o Nanodegree Voo Autônomo.