Nibo2 Geschwindigkeitskontrolle
von
am 20.09.2011 um 17:48 (3801 Hits)
Projekt Nibo2_Explorer
Ausstattung:
Nibo2 NiboLib: nibolib-20110603
Grafik Display
NDS3
XBee Pro (UART1)
Zusatz : RS232 Kamera LinkSprite oberhalb NDS3 Sensor
Nach vielem Frust den Nibo2 als autonomen Roboter durch einen Parcour zu steuern (mit Hilfe der Seitensensoren),
hatte ich mich entschlossen den Nibo2 mit Hilfe einer Analog/Digital Steuereinheit (ADSE) zu steuern.
Diese besteht aus 6 Analog Kanälen und 6 Digital Kanälen.
Die Analog Kanäle / Digital Kanäle werden mit Hilfe eines ATMega8 per 10Bit ADC-Wandlung in entsprechende Werte umgewandelt
und mit einem XBee Pro auf Anforderung gesendet.
Zunächst einige Probleme, die sich im Laufe der Zeit ergaben:
- 1 Die Traktion der mitgelieferten Räder auf unterschiedlichen Böden ist mangelhaft.
Ich habe auf die 3mm Wellen Messinghülsen mit 4mm außen und 3mm innen geklebt
und Fischertechnik Räder montiert (unterschiedliche Größen sind möglich).
Die Räder werden mittels Spannzangen angebracht.
- 2 Die Ansteuerung der Räder über vl, vr, bzw TicksL, TicksR funktioniert nicht einwandfrei.
Die beiden Räder werden über 2 Regelkreise angesteuert.
Die Regelparameter können jedoch nur über einen Parametersatz eingestellt werden.
copro_setSpeedParameters (kp,ki,kd)
--------------
Beschreibung aus Nibo-Lib:
uint8_t copro_setSpeed (int16_t left, int16_t right )
Geschwindigkeit für die beiden Motoren setzen.
Die Werte werden in Ticks/Sekunde angegeben.
40 Ticks entsprechen einer Radumdrehung. Beispiel:
mit 29 Ticks/s (=10cm/s) vorwärts fahren
copro_setSpeed(29, 29);
--------------
Dieses Beispiel ist schlichtweg falsch, da hier nicht Ticks angegeben werden,
sondern nur die Geschwindigkeit für beide Räder.
Ohne copro_setSpeed(0, 0) würde Nibo2 weiterfahren, bis Speed 0,0.
Ticks je Rad für eine Umdrehung sind (bei mir) unterschiedlich,
wahrscheinlich unterschiedliche Reibung, Justage der Radsensoren.
(TicksL: 41, TicksR: 31).
Daraus ergibt sich ein Korrekturfaktor von ca 1,3: vl = vl * 1,3.
Da ich meinen Nibo2 (zunächst) per FunkFernsteuerung (XBee Pro) steuere,
sende ich auch Telemetrie Daten an meinen PC.
Hier kann man dann sehen, das die Geschwindigkeits Istwerte sehr stark von den Sollwerten abweichen:
TicksL TicksR vLSoll vRSoll vLIst vRIst NDS3 Spannung
92 42 27 5 4 0 3 92 34 9,9
93 44 28 5 4 0 5 92 34 9,9
94 47 31 5 4 3 4 92 34 9,9
95 49 32 5 4 4 0 92 34 9,9
96 52 35 5 4 5 5 92 34 9,9
97 54 37 5 4 6 3 92 34 9,9
98 57 38 5 4 4 0 92 34 9,9
99 59 42 5 4 3 5 92 34 9,9
.....
Die Daten werden alle 50 msec vom Sender abgerufen und in vl, vr Werte umgerechnet.
...
copro_setSpeedParameters(6, 5, 7);
...
if ((nds3_dist < 9) && (vl > 0) && (vr > 0))
{
copro_setSpeed (0, 0);
}
else
{
copro_setSpeed (vl, vr);
}
copro_update ();
ticksL = copro_ticks_l;
ticksR = copro_ticks_r;
nvl = copro_speed_l;
nvr = copro_speed_r;
...
Die Ansteuerung der Räder erfolgt nicht synchron, dh. erst linkes Rad, dann rechtes Rad, bzw umgekehrt!
Hat jemand ähnliche Probleme, bzw weiß wie man sie beheben kann?