Eu tento implementar um observador de estado (Luenberg Observer) para estimar a velocidade do meu motor. Somente a posição absoluta do motor pode ser medida e eu quero levar em conta também a velocidade alvo como entrada.
Então, meu modelo de espaço de estados derivado se parece com isso:
Os estados são posição, velocidade e aceleração $$ x = \ begin {pmatrix} p \\ v \\ uma \ end {pmatrix} $$
A entrada é o alvo da velocidade vi menos o estado estimado da velocidade:
$$ u = (v_i-v) $$
As matrizes do sistema são assim (T é o tempo de amostragem): $$ A = \ begin {pmatrix} 1 & amp; T & amp; \ frac {T ^ 2} {2} \\ 0 & amp; 1 & amp; T \\ 0 & amp; 0 & amp; 0 \ end {pmatrix} $$
$$ B = \ begin {pmatrix} T \\ 1 \\ \ frac {1} {T} \ end {pmatrix} $$
$$ C = \ begin {pmatrix} 1 & amp; 0 & amp; 0 \ end {pmatrix} $$
$$ D = 0 $$
Quando eu movo a entrada -v para a matriz A, é assim:
$$ x_ {k + 1} = \ begin {pmatrix} 1 & amp; 0 & amp; \ frac {T ^ 2} {2} \\ 0 & amp; 0 & amp; T \\ 0 & amp; - \ frac {1} {T} & amp; 0 \ end {pmatrix} x_k + \ begin {pmatrix} T \\ 1 \\ \ frac {1} {T} \ end {pmatrix} v_i $$
$$ y_k = \ begin {pmatrix} 1 & amp; 0 & amp; 0 \ end {pmatrix} x_k $$
Então eu tentei colocar os pólos da dinâmica de erro com um observador de Luenberger escolhendo L para:
$$ A-LC = \ begin {pmatrix} 1-L_1 & amp; 0 & amp; \ frac {T ^ 2} {2} \\ -L2 & amp; 0 & amp; T \\ -L3 & amp; - \ frac {1} {T} & amp; 0 \ end {pmatrix} $$
Coloquei os pólos no matlab da seguinte forma: $$ | \ lambda_i | & lt; 1 $$ em [-0,5, -0,55, -0,6]
Que me deu por L:
$$ L = \ begin {pmatrix} 2,65 \\ 2.92 \ times 10 ^ 3 \\ -1,9 \ vezes 10 ^ 5 \ end {pmatrix} $$
Então eu embuti esse observador no sistema real, mas os resultados são realmente muito ruins. Então eu acho que fiz algo errado com o modelo de espaço de estado, especialmente a entrada não parece ser uma boa idéia. Alguém tem uma idéia de como mais eu posso modelar este sistema, especialmente sobre a entrada u estou muito inseguro. Devo usar a corrente real como entrada para u, pois isso é proporcional ao torque e, portanto, à aceleração?
Editar: O que vejo ainda é que o estado a não é observável (a matriz de Observabilidade tem determinante diferente de zero), mas como não quero observar a aceleração (eu dou isso diretamente como uma entrada), acho que isso não deveria ser problema, certo?
Editar 2 Bem, meus ganhos de Luenberger são bem altos, então acho que isso pode ser um problema. Eu atualizo o estado da seguinte maneira:
$$ x_ {k + 1} = (A-LC) x_k + B v_i + Ly_k $$
y é a minha posição medida na instância k, então digamos que seja 4000 (resolução de codificação de 12 bits). Inicialmente meus estados são zero. Então a aceleração será diretamente 4000 * (- 1.9 * 10 ^ 5), enorme! Então eu acho que realmente estraguei alguma coisa aqui.
fonte
Respostas:
A aceleração não deve fazer parte do estado, a menos que você seja sua opinião. E rastrear uma velocidade-alvo parece mais um trabalho para o controlador usando feedback. Assim, a entrada do seu sistema é mais provavelmente uma força, que induz uma aceleração, e a posição e velocidade dos estados.
Para que um observador funcione bem, é necessário fornecer um bom modelo para o seu sistema. Ou seja, o motor provavelmente terá algum atrito e talvez até algum atraso. Para obter um modelo, você poderia, por exemplo, tentar encaixar um ARIMA modelo em dados medidos ou uso ERA . A representação do espaço de estados de um sistema LTI (mínimo) não é única, ou seja, eles são equivalentes sob um transformação de similaridade . Portanto, se desejar ter um vetor de estado com posição e velocidade, você poderá obter isso usando uma transformação de similaridade.
fonte