Atualmente, estou implementando um quadcopter autônomo, que recentemente voei e que era estável, mas não é capaz de se corrigir na presença de distúrbios externos significativos. Suponho que isso se deva a ganhos insuficientemente ajustados do PID que precisam ser aprimorados a bordo.
Progresso atual:
- Eu descartei um barômetro, uma vez que o escopo de minha pesquisa é apenas vôo interno e o barômetro tem um desvio de + -5 metros, de acordo com meu colega.
- Atualmente, estou usando um sensor ultrassônico (HC-SR04) para a estimativa de altitude com resolução de 0,3 cm. No entanto, descobri que a taxa de atualização do sensor ultrassônico de 20Hz é muito lenta para obter uma resposta rápida o suficiente para a correção da altitude.
- Tentei usar as acelerações no eixo Z do acelerômetro para obter dados de altura, integrando a aceleração para obter a velocidade a ser usada para a taxa PID em um esquema de controlador de pid em cascata. A implementação atual para o controlador PID de altitude é um controlador PID de loop único usando um controlador P com a entrada de posição do sensor ultrassônico.
- Eu tinha levado em consideração as medições de aceleração negativa devido à gravidade, mas não importa o quanto eu calcule o deslocamento, ainda existe a existência de uma aceleração negativa (por exemplo, -0,0034). Eu calculei o deslocamento gravitacional ajustando o quadcopter para ainda estar em uma superfície plana e coletando 20.000 amostras do eixo z do acelerômetro para calcular a média para obter o "deslocamento" que é armazenado como uma variável constante. Essa variável é subtraída da saída do eixo z do acelerômetro para remover o deslocamento e levá-lo a "zero" se não estiver acelerando. Como dito na pergunta, ainda existe a aceleração negativa (por exemplo, -0,0034). Meu quad passa a subir constantemente em altitude. Com apenas o controlador P do sensor ultrassônico, meu quadrilátero oscila 50 cm.
Como essa leitura de aceleração negativa consistente pode ser efetivamente tratada?
Solução possível : Estou planejando fazer um contoller PID em cascata para a retenção de altitude com o loop interno (controlador PID) usando o acelerômetro e o loop externo (controlador P) usando o sensor de sonar. Meu consultor disse que mesmo um único controlador P de loop é suficiente para fazer o quadcopter manter sua altitude, mesmo com um sensor lento. Isso é suficiente? Notei que apenas com o ganho P, o quadcopter ultrapassaria sua altitude.
Integrador com vazamento: encontrei este artigo explicando como ele lidava com as acelerações negativas usando um integrador com vazamento. No entanto, tenho um pouco de dificuldade para entender por que isso funcionaria, pois acho que o erro negativo passaria a um erro positivo, sem resolver o problema. Eu não tenho tanta certeza. http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it
Controlador PD de loop único apenas com sensor ultrassônico: isso é possível usando feedback de um sensor lento?
Fontes:
Folha de dados do LSM303DLHC: http://www.st.com/web/en/resource/technical/document/datasheet/DM00027543.pdf
Integrador com vazamento: http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it
Loop PID do ArduPilot: http://copter.ardupilot.com/wp-content/uploads/sites/2/2012/12/Alt-Hold-PID-version-3.0.1.jpg