Qual é a abordagem correta para escrever o controlador de rotação de um robô de futebol?


14

Imagine programar um robô de futebol de 3 rodas. Que tipo de controlador você usaria para girá-lo? P? PID?

O objetivo deste controlador é fazer com que o robô fique em um ângulo definido (0 grau) e volte se girado à mão ou outro robô.

Eu uso motores de passo para o meu robô e não servos, por isso preciso implementar isso no meu software!

Já escrevi um exemplo de controlador de tipo P e o movimento é bastante bom. Mas eu gostaria de melhorar, se possível. O código é o seguinte:

void spinSpeed(int devidedValue, int addedValue, int correction) {

    if(degree<correction && degree>-correction) {
        motorSpeed = 0;
    } else {
        if(degree > 0) {
            motorSpeed = ((degree)/(devidedValue) + (addedValue));
        } else {
            motorSpeed = ((degree)/(devidedValue) - (addedValue));  
        }
    }
}

correctioné um intervalo em que o robô não tem movimento. degreeé um número entre -127 e 128 que é retornado da bússola. motorSpeedé um número entre 0 e 255 que é aplicado ao PWM.


Presumivelmente, essa rotina é executada toda vez que a compas gera um novo valor para degree?
Mark Booth

@ MarkBooth Eu tenho meu código há algum tempo (1), então, a cada ciclo, ele obtém o valor da bússola, o atribui à função e aplica o resultado aos motores.
Miro Markaravanes

Eu investigaria o tipo de controlador que um servo usa, já que você está tentando duplicar o comportamento do servo no software.
22612 Chris Laplante

Eu não uso servos. Eu uso motores de passo para que ainda não exista esse comportamento no motor.
Miro Markaravanes

2
Olá Miro, na troca de pilhas é melhor editar sua pergunta em resposta a perguntas nos comentários, para que os comentários possam ser arrumados (excluídos) para que eles não se distraiam da própria pergunta.
Mark Booth

Respostas:


7

O importante a lembrar sobre um loop de controle PID é que cada termo se destina a dominar o controle em momentos diferentes durante uma movimentação.

O termo proporcional pretende dominar e fornecer um torque maior (ou, no seu caso, velocidade) quanto mais você estiver longe da sua posição de destino.

O termo derivado pretende dominar durante a fase de "cruzeiro" do seu movimento trapezoidal típico. Isso ajuda a recuperar um termo proporcional muito alto e limita a aceleração descontrolada quando você está longe do seu destino, mas também pode ajudar a aumentar a velocidade com a qual você converge no seu destino quando você se aproxima e o termo proporcional contribui muito menos .

Se você estiver usando um controlador de velocidade, em vez de um controlador de torque, o termo derivado pode realmente estar oculto no seu controlador de velocidade e não estar diretamente acessível ao seu loop PID. Isso pode simplificar o controle (normalmente, ele apenas acelera o mais rápido possível até a velocidade desejada ou a velocidade máxima, o que for menor), mas também pode torná-lo menos previsível. Freqüentemente, um termo D (ou P) excessivamente agressivo pode resultar em um ciclo limite (geralmente chamado incorretamente de ressonância ou oscilação devido ao som dos motores zumbindo ou mesmo gritando nesse estado, embora o ciclo limite seja uma descrição muito mais precisa )

O termo integral existe para corrigir o erro residual no estado estacionário , é aí que existe uma diferença persistente e de longo prazo entre onde você está sendo solicitado a ir e onde realmente está. Seu valor atual correction(realmente apenas tolerância) funciona como o oposto de um termo integral; ele corta o motor completamente quando você está dentro de uma faixa morta em torno da posição desejada.

Devido a esses fatores, você ganhará pouco com a implementação de um loop PID completo, a menos que também planeje um perfil de velocidade com fases distintas de aceleração, cruzeiro e desaceleração.

Também tenha em mente que a faixa morta e a falta do termo I significarão que a posição final sempre será um pouco aleatória e provavelmente diferirá dependendo da direção em que você se aproxima da posição desejada. Como tal, sua repetibilidade bidirecional pode ser muito pior do que sua repetibilidade padrão.

Para obter mais informações sobre a diferença entre precisão, repetibilidade e resolução, consulte esta excelente descrição . No seu caso, sua resolução é o sensor da bússola, enquanto a precisão e a repetibilidade provavelmente são limitadas pelo seu correctionvalor, pois se o correctionvalor for maior que a resolução da bússola, você estará jogando fora sua precisão posicional em troca de poder desligue o motor quando estiver perto.


8

Um controlador PID seria o melhor. Usando uma bússola, é uma tarefa relativamente simples obter o rolamento do robô e compará-lo com o rolamento que você deseja obter, e usar algumas técnicas de ajuste do PID para obter um movimento de rotação suave para seu cabeçalho desejado. Essa abordagem também pode ser aplicada à rotação de uma determinada quantidade com precisão.

Já fiz algumas robótica neste campo, isso é o que nós usamos em nosso robô, fazendo uma tarefa não muito diferente a seu ...


1
Obrigado pela sua resposta. Queria aceitar a resposta, mas gostaria de ver mais respostas, por isso aceitarei quando houver mais respostas;)
Miro Markaravanes
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.