Costruire un robot di bilanciamento con azionamento differenziale


8

Ho già costruito un robot di bilanciamento a due ruote usando alcuni servi a rotazione continua e un accelerometro / giroscopio. Ho aggiornato i servi ad alcuni motoriduttori DC con encoder a 8 bit con l'obiettivo di far muovere il robot mentre si fa il bilanciamento.

Sono un po 'bloccato su come programmarlo per guidare mentre si è ancora in equilibrio. Penso che un modo sarebbe quello di fare in modo che l'ingresso di controllo dei motori si comporti come se lo spingesse. Quindi il robot sarebbe momentaneamente sbilanciato nella direzione in cui voglio che viaggi. Mi sembra un po 'goffo per me. Ci deve essere un modo migliore di fare? Penso di dover combinare il modello dinamico per il bilanciatore con il differenziale ma questo è un po 'oltre la teoria del controllo che conosco.

Aggiornamento Dalla risposta di Anorton Ora ho una bella matrice di stato.

Ora sul posizionamento dei poli: la matrice A dovrà essere 4x4 in base al nuovo vettore di stato. E B dovrà quindi essere una matrice 4x2 poiché posso controllare solo la coppia della ruota sinistra / destra (u = vettore 2x1).

Potrei aver bisogno di leggere di più al riguardo, ma esiste un modo sistematico per determinare la matrice A in base al posizionamento dei poli? Mi sembra per questo esempio e per esempi ancora più complicati, determinare A per ipotesi e controllo sarebbe molto difficile.

Aggiornamento n. 2 Dopo un po 'di lettura, penso di averlo capito ora. Ho ancora bisogno della dinamica del robot per determinare la matrice A. Una volta che ho che posso fare il posizionamento del palo usando matlab o ottava.


1
Che tipo di approccio stai usando / quale teoria del controllo conosci? Posso scrivere un approccio, ma potrebbe essere super-base o super-avanzato, a seconda del tuo background ... :)
apnorton

Grazie! per il vecchio design con i servi stavo calcolando l'angolo di inclinazione usando i dati del giroscopio / accelerometro. Inviandolo a un filtro Kalman e quindi a un PID per la posizione del servo. Sto bene con le equazioni differenziali e va bene con l'algebra lineare. Sono ancora abbastanza nuovo nei controlli, quindi forse quello di base? O entrambi se lo desideri. Sono sempre interessato a saperne di più :)
JDD

1
Ho solo un approccio, quindi il mio commento precedente diceva davvero che poteva essere preso in entrambi i modi (o super avanzato se stavi appena iniziando con i robot, o super basic se hai qualche conoscenza dei controlli) ... Basato sul tuo precedente commento, ho la sensazione di essere superato. :) Le mie conoscenze sui controlli sono molto limitate, ma ho
intenzione di buttare

Benvenuto in Robotics JDD, è meglio modificare ulteriori informazioni nella tua domanda piuttosto che aggiungerle come commento, in questo modo i commenti possono essere riordinati (eliminati) in seguito e smetteranno di distrarre i lettori dalla domanda stessa.
Mark Booth

Risposte:


8

Disclaimer: non l'ho mai fatto da solo, ma ho visto solo una sua descrizione tramite il "Controllo della robotica mobile" di Georgia Tech su Coursera. Anche la mia conoscenza dei controlli è imprevedibile. Quindi ... prendilo con un granello di sale.:)

Per mantenere il robot in posizione verticale (e immobile), stai cercando di stabilizzare (invia a 0) lo stato x, dove:

x=[leftVelocityrightVelocityangle from vertical]

Tuttavia, quando questo sistema è stabile, saranno le velocità della ruota sinistra e destra 0. Quindi, vogliamo un offset per la velocità target:

xnew=[leftVelocityδLrightVelocityδRangle from vertical]
Dove δ è la velocità target per entrambi i lati.

Quando questo sistema è stabilizzato, il robot sarà in posizione verticale e farà ruotare ciascuna ruota alla velocità desiderata.

Questo è l'approccio / schema di base. Lo modificherò con qualche dettaglio in più domani (e matematica attuale, ecc.), Ma volevo almeno pubblicare l'idea generale ora. (È tardi nel mio fuso orario e ho una lezione in anticipo da raggiungere.)

EDITED: Oh Dio. Quindi, ho appena guardato indietro alle diapositive relative a questo nel corso di Coursera (Sezione 4, diapositiva 29). Potresti voler andare e iscriverti a quella classe solo per scaricare quel set di diapositive ...:)

La parte difficile è calcolare il A e Bmatrici (è un grande casino di linearizzazione). Ad ogni modo, vuoi creare la tua matrice di stato come segue (non come sopra - la mia memoria non era esattamente corretta):

x=[vωϕϕ˙]

Dove v è la velocità del segway, ω è la velocità di rotazione (la velocità di rotazione del robot) e ϕ è l'angolo dalla verticale.

Vogliamo avere una velocità desiderata, quindi definiamo un nuovo vettore di stato:

x~=x[vdωd00]=xδ

Dove δ è la velocità e la quantità di rotazione desiderate (come visto sopra).

differenziare:

x~˙=x˙δ˙=δ is constantx˙

Quindi, abbiamo

x~˙=Ax+Bu

Dove A è la matrice standard di coeff B è la matrice di input e uè il vettore di controllo. Possiamo quindi dire:

x~˙=A(xδ)+Bu+Aδ
Ma, basato sulla soluzione per A (di Coursera), Aδ=0. Così:
x~˙=Ax~+Bu

Ora puoi utilizzare il posizionamento dei poli per determinare gli autovalori corretti, ecc.


Fantastico grazie! Ho fatto anche quella stessa lezione di Coursera, probabilmente non siamo troppo lontani nella conoscenza dei controlli. Questo si sta rivelando un progetto molto più difficile di quanto pensassi. Finora mi piace la tua matrice di stato.
JDD

Eek! Sembra che non stia rispondendo a questa sera! Sono stato in vacanza la scorsa primavera e ho dimenticato qualcosa che era dovuto, quindi mi ha tenuto occupato oggi. Lo modificherò domani ...
apnorton,

Nessun problema. Ieri ho fatto saltare in aria il mio ultimo ponte h, cercando di metterlo insieme, quindi dovrò aspettare una sostituzione.
JDD,

Grazie mille Anorton per l'aiuto. Penso di capire come fare molto di più ora. Ho aggiornato la mia domanda originale. Tuttavia, come determinare le matrici A e B mi confonde ancora.
JDD
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.