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
fonte
Respostas:
O barômetro carregado no pixhawk tem uma resolução de altitude de 10 cm. Se isso não for suficiente, você pode escrever um filtro kalman que use os dados do acelerômetro na etapa de previsão e o sensor ultrassônico e / ou o barômetro na etapa de correção.
Mas não vejo isso resolvendo seu problema. Uma medição precisa da altitude a 20hz deve ser suficiente se tudo o que você está tentando fazer é manter a altitude.
Qual é a constante de tempo / frequência natural e amortecimento no seu controlador?
Acho que não tinha terminado de ler sua pergunta esta manhã (foi antes do meu café). A aceleração do imu é a medida da aceleração mais a gravidade. Para obter a aceleração inercial do imu, subtraia o vetor de gravidade da medição. Você nunca poderá controlar medições de aceleração integradas. As medidas estão corrompidas pelo ruído e você não tem como corrigir isso.
--- resposta para controlar parte da pergunta
Vamos supor que tudo o que você está tentando fazer é manter uma altitude e não está preocupado em manter uma posição por enquanto (embora essa abordagem funcione para isso também). E assumindo que você pode comandar qualquer impulso que desejar (dentro da razão), isso se torna um problema fácil.
Uma primeira passagem na dinâmica do sistema parece
onde positivo está ativo. Vamos adicionar um componente flutuante ao acelerador que lida com a gravidade. assimz
Nossa nova dinâmica parece
Legal! Agora, projetamos uma lei de controle para podermos alcançar a altitude desejada.
Nosso sistema de controle será uma mola virtual e um amortecedor entre nosso quad e a altitude desejada (este é um controlador pd).
O sistema agora deve se comportar como um sistema de segunda ordem. e podem ser escolhidos para atingir a taxa de amortecimento e a frequência natural que você está procurando.kp kd
Neste ponto, gostaria de reiterar que a integração de dados do acelerômetro não é uma maneira correta de gerar estimativas de estado. Se você realmente deseja cortar algo rapidamente, alimente as medidas do sonar através de um filtro passa-baixo com uma frequência de queda apropriada. Seu veículo não estará oscilando a 20hz; portanto, controlar apenas os dados do sonar será bom.
fonte