- Labornetzteil AliExpress         
RSS-Feed anzeigen

HJBB49

Nibo2 Geschwindigkeitskontrolle

Bewerten
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?

"Nibo2 Geschwindigkeitskontrolle" bei Twitter speichern "Nibo2 Geschwindigkeitskontrolle" bei Facebook speichern "Nibo2 Geschwindigkeitskontrolle" bei Mister Wong speichern "Nibo2 Geschwindigkeitskontrolle" bei YiGG.de speichern "Nibo2 Geschwindigkeitskontrolle" bei Google speichern "Nibo2 Geschwindigkeitskontrolle" bei del.icio.us speichern "Nibo2 Geschwindigkeitskontrolle" bei Webnews speichern "Nibo2 Geschwindigkeitskontrolle" bei My Yahoo speichern

Stichworte: copro_setspeed, nibo2 Stichworte bearbeiten
Kategorien
Kategorielos

Kommentare

  1. Avatar von Hero_123
    Hi

    Ich habe das selbe festgestellt -Ich denke, die Messung der copro_ticks_l und copro_ticks_r fkt nicht korrekt - ich lasse meinen NIBO2 für ca 3 sek lang mit 20 Ticks/sek vorwärts und rückwärts laufen:

    copro_setSpeed(20,20) => VORWÄRTS und copro_setSpeed(-20,-20) => RÜCKWÄRTS

    und lasse mir die Ticks und die Drehzahl anzeigen => es müssten nach den 3 sek 60 Ticks angezeigt werden bei VORWÄRTS...

    - angezeigt werden nach den 3 sek aber 120 Ticks (copro_ticks_l und copro_ticks_r)
    - der NIBO selbst fährt mit 20 Ticks (copro_speed_l und copro_speed_r)

    außerdem fährt der NIBO (wenn ich das längere Zeit mache) einen "Großkreis" wie bei Dir, nur nicht so extrem (Unterschied zwischen links/rechts bei 100Ticks ca 2 ticks, das ist nicht viel, addiert sich aber auf...)

    Ich lasse mir die Daten per XBEE auf den PC übertragen (wie Du).

    Mit den Werten, die Du da angibts, kann etwas nicht stimmen - "TicksL TicksR vLSoll vRSoll vLIst vRIst NDS3 Spannung" - das sind 8 "Werte", aber "93 44 28 5 4 0 5 92 34 9,9" - das sind doch 10 Werte, oder??

    Wie hast Du den FTDI-Treiber konfiguriert?
    Sendest Du im API oder Transparent-Modus?
    Wieviele Werte (in bytes) pro Sendezyklus überträgst Du und in welchem Zyklus sendest Du?
    Hast Du auch Datenabriss (kommt bei mir vor, wenn zuviele Bytes/Zyklus übetragen werden..)
    Hast Du den XBEE-Aufsatz von nicai oder hast Du Dir selbst was gebastelt?
    Wie hast Du die XBEE Module konfiguriert?

    mfg

    Hero_123

12V Akku bauen