Archiv verlassen und diese Seite im Standarddesign anzeigen : Sensor für balancierenden 2-Rad Roboter
Hallo UlliC,
hab gleich einen Test gemacht. Fahren und drehen geht schon. Aber da ist ein Problem mit dem Abstandssensor, der reagiert auf unterschiedliche Unterlagen. Also wenn sich der Untergrund ändert, dann ist es aus mit dem Fahren. Das war mir aber schon bewusst. Ich wollte nur einmal selbst einen Regler fürs Balancieren bauen, damit mein "gescheit daherreden" auch einen Background hat. :)
Gruß Waste
Hallo Waste,
toll das es schon so gut funktioniert.
Das "Untergrundproblem" hat man leider auch mit den PSDs und vermutlich auch mit nahezu jedem anderen Abstandssensor.
Es wird etwas besser, wenn man zwei Sensoren (vorne/hinten) verwendet.
Deutlich besser wird es aber erst mit Sensoren, die nicht den Abstand messen, sondern den Neigungswinkel (und dessen Änderung).
Leider sind diese Sensoren (Beschleunigungssensor und Drehratensensor) noch etwas teuer.
Aber möglicherweise kann man bei AD Muster ergattern ?
Hallo Waste,
herzlichen Glückwunsch auch von mir!
Welchen Sensor verwendest du jetzt?
Hast schon einen PID Regler probiert?
Mit freundlichen Grüßen Roland
Welchen Sensor verwendest du jetzt?
Das ist der normale Liniensensor vom Asuro, nur aufgepäppelt mit einer helleren LED, da bei der größeren Entfernung sonst die Spannung zu gering war. Die Sensoren sind Fototransistoren SFH300. Für einen balancierenden Bot schlecht geeignet, da die Reflektionseigenschaften des Untergrunds voll eingehen. Ich habe sie nur deshalb genommen, weil sie bereits vorhanden sind und ich möglichst wenig ändern wollte. Der einzige Vorteil ist die Schnelligkeit, die Taktrate bei mir ist 2ms.
Hast schon einen PID Regler probiert?
In der Simulation habe ich auch einen PID-Regler probiert, der hatte aber keinen Vorteil zu einem PD-Regler.
Für die Winkelregelung wird also bei mir ein PD-Regler verwendet. Zusätzlich gibt es noch einen P-Regler (Geschwindigkeit) und einen I-Regler zum Ausgleich eines möglichen Offsets des Abstandsensor (Winkel). Ohne die zusätzlichen Regler würde der Asuro weglaufen. Mit der Zusatzregelung kann ich den Asuro auch auf einer Platte balancieren, die ich an einer Seite anhebe. Der Asuro läuft dann beim Anheben nur ein Stück die Rampe runter und stabilisiert sich wieder. Wird die Platte wieder waagerecht gelegt, dann fährt der Asuro wieder an den Ursprungsort zurück.
Ich denke mal, du wirst das gleiche Problem haben wenn nur ein PID-Regler für den Winkel vorhanden ist. Da wird dein Bot ohne die Nabelschnur nur stehen bleiben, wenn du ihn beim Start sehr genau ausrichtest.
Gruß Waste
Hallo Waste,
Also bei mir ist es auch so, dass der I Anteil fast keine Änderung bringt.
Wegen dem Sensor, wie ist es wenn sich das Umgebungslicht ändert? Der Sollwert entspricht ja dem Digitalisierten Wert des Fototransistors oder?
Wenn sich jetzt das Umgebungslicht ändert müsste das doch den Sollwert ändern.
Also der eine Regler verwendet als Regelgröße den Wert des Abstandsensors (Fototransistor für Winkelerkennung) und als Stellgröße die Motorspannung (PWM inkl. Richtung)
Jedoch welche Größen verwendet der zweite Regler, den man benötigt um der Bot am gleichen Platz zu lassen?
Wenn du die Platte an einer Seite anhebst, steht der Bot doch nicht mehr Senkrecht zu Erdanziehungskraft? Der Sollwert bezieht sich doch auf die Senkrechte Position des Bots auf den Untergrund, und wenn dieser Schief ist kann er doch nicht mehr Balancieren oder?
Mit freundlichen Grüßen Roland
Wegen dem Sensor, wie ist es wenn sich das Umgebungslicht ändert? Der Sollwert entspricht ja dem Digitalisierten Wert des Fototransistors oder?
Wenn sich jetzt das Umgebungslicht ändert müsste das doch den Sollwert ändern.
Ich kompensier das Umgebungslicht, so weit das möglich ist, indem ich einmal bei ausgeschalteter LED nur das Umgebungslicht messe und dann mit eingeschalteter LED Reflektion und Umgebungslicht messe. Davon ziehe ich den Wert der ersten Messung ab und erhalte praktisch nur den Reflektionswert. Das ist nichts anderes als bei den IR-Detektoren die bei 36kHz arbeiten. Aber irgendwo hat die Methode auch ihre Grenzen, deshalb musste ich auch eine stärkere LED einbauen.
Also der eine Regler verwendet als Regelgröße den Wert des Abstandsensors (Fototransistor für Winkelerkennung) und als Stellgröße die Motorspannung (PWM inkl. Richtung)richtig
Jedoch welche Größen verwendet der zweite Regler, den man benötigt um der Bot am gleichen Platz zu lassen?
Das ist die Geschwindigkeit. Da ich keinen Geschwindigkeitssensor habe, rechne ich mir die Geschwindigkeit aus der Ansteuerspannung aus, es wird sozusagen ein Geschwindigkeitssensor simuliert. Bei Stand wird auf Geschwindigkeit 0 geregelt, zum Fahren kann man eine Geschwindigkeit als Führungswert vorgeben.
Wenn du die Platte an einer Seite anhebst, steht der Bot doch nicht mehr Senkrecht zu Erdanziehungskraft? Der Sollwert bezieht sich doch auf die Senkrechte Position des Bots auf den Untergrund, und wenn dieser Schief ist kann er doch nicht mehr Balancieren oder?
Ja, am Anfang denkt die Regelung auch er steht schief, deshalb fährt er etwas die Rampe runter. Aber er will gleichzeitig die Geschwindigkeit auf 0 halten, also dreht er solange am Offset des Winkels, bis er wieder steht. Das mit der Schräge war zwar nicht geplant, hat sich einfach so ergeben. Ich wollte eigentlich nur den Offsetabgleich für unterschiedliche Böden, daraus ergab sich automatisch auch der für die Schräge. Mit meiner virtuellen Geschwindigkeitsregelung funktioniert es nicht ganz genau, weil er zum Halten an der Schräge eine Geschwindigkeit vortäuscht und nach einer Weile gibt er nach. Mit einem richtigen Geschwindigkeitssensor sollte das aber genau funktionieren.
Gruß Waste
Hallo waste,
ist wirklich eine gute Idee einen Fototransistor als Sensor zu verwenden. Wann misst du das Umgebungslicht? Bei jedem Regelzyklus? Oder einmal beim einschalten.
Okay du verwendest die Geschwindigkeit als Regelgröße und was ist in diesem Fall die Stellgröße? Wirkt die Stellgröße des Geschwindigkeitsreglers zusammen mit der Winkelinformation auf den Ersten Regler (Winkel) als Regelgröße?
Wie errechnest du dir die Geschwindigkeit? Du sagtest über die Motorspannung, aber die hast du ja im Grunde schon digital (also Motorspannung =^ PWM - also der Stellgröße des Ersten Reglers). Oder misst du die Motorspannung am Motor? (was ja widersprüchlich ist bei einer PWM, entweder ein oder aus)
Danke in Vorhinein
Mit freundlichen Grüßen
Roland
Was macht eigentlich ausgerechnet diesen Thread so interessant für die dusseligen Viagra-Spammer?
Sieht ziemlich nach einem Spam-Script aus. Ich könnte mir vorstellen, dass es hilft dem Thread irgendwie eine andere URL zu verpassen.
Ich habe dem Spam entfernt, auf den sich diese Bemerkung bezieht, nicht dass sich sonst jemand angesprochen fühlt. O:)
Das ist einer der vielgelesenen Threads der auch für Gäste offen ist. Bis jetzt werden die Spams die alle 2-3 Tage auftreten entfernt.
Manfred
Hallo locked,
das Umgebungslicht wird bei jedem Zyklus mit gemessen.
Okay du verwendest die Geschwindigkeit als Regelgröße und was ist in diesem Fall die Stellgröße? Wirkt die Stellgröße des Geschwindigkeitsreglers zusammen mit der Winkelinformation auf den Ersten Regler (Winkel) als Regelgröße?
Ich habe nur eine Stellgröße und das ist die Steuerspannung für den Motor, also die PWM. Der Ausgang des Balancierreglers (PD) und des Geschwindigkeitsreglers werden zusammenaddiert und bilden die Stellgröße PWM.
Wie errechnest du dir die Geschwindigkeit?Der Antrieb wird als PT1-Glied (Verzögerungsglied 1.Ordnung) angenommen und rechnerisch nachgebildet. Ich habe im Code eine Variable u, die der Spannung am Motor entspricht. Mit der folgenden Formel wird daraus die Geschwindigkeit v berechnet:
v = 0.987*v + 0.00189*u;
Das ist ein Algorithmus, wie er auch bei digitalen Filtern für ein RC-Glied verwendet wird. Die berechnete Geschwindigkeit ist natürlich nur so genau wie die zugrunde gelegten Konstanten mit den wirklichen Werten übereinstimmen. Bei geänderten Umgebungsbedingungen (Reibung etc.) gibt es Fehler.
Ich werde morgen meinen Code als Anschauungsbeispiel hier rein stellen. Ich muss ihn nur etwas aufräumen, damit er leserlich wird. Deshalb dauert es noch bis morgen.
Gruß Waste
Hier der Code:
/************************************************** *****************************
* Description: Asuro balanciert
*
* Der Asuro balanciert auf den Hinterrädern.
* Der Liniensensor wird zur Winkelmessung verwendet.
* Damit der Asuro balancieren kann, wurden folgende Umbauten vorgenommen:
* Der Akkupack wurde höher gelegt, damit beim Balancieren die Liniensensoren
* nicht zu weit vom Untergrund entfernt sind.
* Die Spannungsversorgung für den Liniensensor musste zusätzlich abgeblockt werden,
* ein 220µF Elko wurde parallel zu C5 gelötet.
* Für eine höhere Empfindlichkeit wurde eine hellere LED (D11) eingebaut.
*
* Autor: Waste 1.12.05
************************************************** ***************************/
#include "asuro.h"
#include <stdlib.h>
int main(void)
{
int phi, phialt, y, yd, speed, ukorr, drest;
int x, x1, x2, x3, x4, don, doff, v0;
float v, u, w;
unsigned char dir;
unsigned int lineData[2];
Init();
phialt = 0;
u=0; v=0, v0=0;
x2=x3=x4=0;
drest=0;
w=40;
MotorDir(RWD,RWD);
MotorSpeed(255,255); // beschleunigt kurz rückwärts
Msleep(80); // um den Asuro aufzurichten
while(1)
{
FrontLED(OFF);
LineData(lineData); // Messung mit LED OFF
doff = (lineData[0] + lineData[1]); // zur Kompensation des Umgebungslicht
FrontLED(ON);
LineData(lineData); // Messung mit LED ON
don = (lineData[0] + lineData[1]);
x1 = don - doff; // Istwert
x = (x1+x2+x3+x4)/2; // Filterung
phi = w - 14800/(x+100); // Linearisierung und Vergleich
x4=x3; x3=x2; x2=x1;
yd = 500*(phi-phialt); // D-Anteil berechnen und mit
yd += drest; // nicht berücksichtigtem Rest addieren
if (yd > 350) drest = yd - 350; // merke Rest
else if (yd < -350) drest = yd + 350;
else drest = 0;
y = 40*phi + yd; // Ausgang PD-Regler (Winkel)
v = 0.987*v + 0.00189*u; // simuliert Antrieb (Geschwindigkeit)
ukorr = 20*v + v0; // P-Regler Geschwindigkeit
if (ukorr > 300) ukorr = 300; // Begrenzung P-Regler
if (ukorr < -300) ukorr = -300;
u = y + ukorr; // Berechnung Stellgröße
if (u < 0) {dir = RWD;}
else {dir = FWD;}
speed = abs(u)/2 + 80; // 80 kompensiert Reibung
if (speed > 255) speed = 255;
MotorDir(dir,dir);
MotorSpeed(speed,speed); // Ausgabe PWM
w = w + v*0.001; // Integralregler für Winkeloffset
if (w > 80) w = 80; // Begrenzung
if (w < 20) w = 20;
phialt = phi;
if (u > 350) u = 350; // Begrenzung entsprechend PWM
if (u < -350) u = -350;
}
return 0;
}
Gruß Waste
Hallo Waste,
Also deinen Code kann ich soweit nachvollziehen. :)
Aber wozu ist die variable v0? Kann man damit die Fahrtgeschwindigkeit angeben?
Noch eine Verständnisfrage:
Wirkt der zweite Regler dem Ersten nicht entgegen? Also der Winkelregler versucht den Bot zu beschleunigen (um in im Gleichgewicht zu halten) und gleichzeitig versucht der Geschw. Regler den Bot zu bremsen, um auf dem Gleichen Fleck stehen zu bleiben. Also wenn man nur einen Winkelregler verwendet, bleibt er doch auch auf dem gleichen Fleck stehen, er fährt ja nur wenn er auf dem Gleichgewicht kommt.
Wegen der Filterung:
Du addierst die letzten 4 Winkelwerte. Aber wieso dividierst du dann nur 2 und nicht durch 4?
Mit freundlichen Grüßen
Roland
Aber wozu ist die variable v0? Kann man damit die Fahrtgeschwindigkeit angeben?Ja, genau.
Wirkt der zweite Regler dem Ersten nicht entgegen?Den P-Regler für die Geschwindigkeit darf man nicht als alleinstehenden Regler betrachten, der ist ein Teil der gesamten Regelung. Alleine würde er nicht funktionieren, da er mitkoppelt. Er ist nicht gegengekoppelt wie normal eine Regelung ist. Und jetzt wird es schwierig für mich, das zu erklären. Ich versuch es mal so: Angenommen der Bot wurde im Winkel ausgeregelt aber er fährt noch mit konstanter Geschwindigkeit, dann muss, um ihn zum Stehen zu bringen, die Geschwindigkeit zuerst einmal erhöht werden, damit er sich nach hinten neigt und dann kann erst abgebremst werden. Kurz vor dem Stillstand dann der umgekehrte Vorgang damit er sich wieder aufrichtet. Auch beim Losfahren aus dem Stillstand muss man zuerst in die Gegenrichtung starten. So ein Verhalten bewirkt die Zusammenschaltung. Damit es nicht ausartet, wird der P-Regler begrenzt. Der Winkelregler soll die Oberhand behalten.
Also wenn man nur einen Winkelregler verwendet, bleibt er doch auch auf dem gleichen Fleck stehen, er fährt ja nur wenn er auf dem Gleichgewicht kommt.Wenn man mal den Luftwiderstand außer Acht läßt, dann steht ein ausbalancierter Bot auch bei einer konstanten Geschwindigkeit aufrecht. Eine Winkeländerung kann nur durch eine Beschleunigung verursacht werden. Das bedeutet, wenn ein stillstehender balancierender Bot eine Störung durch antippen erfährt, dann wird er nur mit einem Winkel-Regler ausgestattet, zwar wieder in die aufrechte Position regeln aber durch den Regelvorgang beschleunigt haben und so mit konstanter Geschwindigkeit weiterfahren. Umgekehrt kann man so einen Bot durch festhalten zum Stehen bringen. Ob die Reibung dabei das Verhalten in der Wirklichkeit verbessert oder verschlechtert hat, kann ich gar nicht mehr sagen. Das müsste ich erst wieder ausprobieren. Aber so ähnlich hat sich mein Asuro nur mit Winkelregler verhalten.
Wegen der Filterung:
Du addierst die letzten 4 Winkelwerte. Aber wieso dividierst du dann nur 2 und nicht durch 4? Das hat sich so ergeben. Ich hatte früher nur 2 Messungen addiert und die Regelung so ausgelegt. Die Werte sind auch um den Faktor 100 hochskaliert, um möglichst mit Integer rechnen zu können. Mit der Filterung von 4 Messungen wollte ich das nicht mehr umstellen. Ist jetzt etwas schlecht als Anschauungsbeispiel, man möge mir das verzeihen.
Gruß Waste
Hallo Waste,
Also der Geschwindigkeitsregler beschleunigt sozusagen den Bot um ihn dann mit Hilfe des Winkelreglers auf die Geschwindigkeit 0 zu bringen. Daher ukorr = 20*v + v0;
und keine Regelabweichungsberechnung. Wobei aber, wenn der Bot fährt, der Winkel nicht genau z.B. 90° beträgt, und der PD Regler sowieso versucht auf 90° hin zu regeln.
Diese Zeile habe ich zuerst übersehne:
w = w + v*0.001;
Dies ist wahrscheinlich verantwortlich, um den Bot ua. auf einer Schiefen platte balancieren zu lass. Das müsste aber bedeuten, dass er den Soll Winkel so lange beeinflusst, bis die Geschwindigkeit wider 0 ist. Ist ja im Grunde auch dasselbe, was der Geschwindigkeitsregler versucht oder?
Wobei ich aber anmerken muss, das mein Bot nach einem Antippen sich zwar um einige dm bewegt hat, aber im Grunde wider zum Stillstand gekommen ist. (Nicht diese Version im Video! Da diese noch viel zu unruhig war) Oder wirkt der Geschwindigkeitsregler in diesem fall, das er überhaupt nur ganz minimal fährt?
Mit freundlichen Grüßen Roland
Mein Glückwunsch an waste !!!
Ich habe angeregt durch das Video des balancierenden Asuro von waste
auch meinen Asuro, der schon im Schrank verstaubte, mal wieder herausgeholt.
Das Programm von waste draufgeflasht, den Akku hochgesetzt - und er
balanciert wie eine eins !!!
Klasse, ich hätte nicht gedacht das der Asuro das kann.
Und dann noch mit so einfachen Mitteln.
Ich hatte es mit einem ADXL202 versucht und aufgegeben.
Wahrscheinlich habe ich zuwenig Ahnung von Regelungstechnik.
Jetzt muss ich mir erstmal das Programm genauer ansehen...
Schöne Grüße
Jan
Hallo JanB,
mit dem ADXL bin ich auch gescheiter. Siehe:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=14741
Weil er auch die Ausgleichbewegung wertet.
mfg
Hallo Roland,
die Sache mit dem Geschwindigkeitsregler ist wirklich kompliziert. Ich muss auch immer wieder in der Simulation nachsehen, um es dann erklären zu können. Man kann es vielleicht auch so erklären: Da der mitgekoppelte P-Regler die Wirkung des Winkelreglers verstärkt, sozusagen zuviel des Guten macht, muss der Winkelregler solange zusätzlich eingreifen wie der Geschwindigkeitsregler mitmischt. Erst wenn keine Geschwindigkeit mehr vorhanden ist, dann kann auch der Winkelregler ruhig bleiben. Es wird also automatisch auf Geschwindigkeit 0 bzw. v0 geregelt.
Wenn du das übernehmen willst, musst du insbesondere die Zeile
v = 0.987*v + 0.00189*u;
die den Antrieb simuliert an deine Gegebenheiten anpassen. Die Koeffizienten sind auch abhängig von der Taktrate. Deshalb wird die Formel bei dir nicht funktionieren, auch wenn dein Bot in der Beschleunigung dem Asuro ähnlich wäre. Wenn du die Möglichkeit hast, die Beschleunigung zu messen, dann kann ich dir die Koeffizienten ausrechnen.
Diese Zeile habe ich zuerst übersehne:
w = w + v*0.001; Das ist der Integralregler für den Winkeloffset. Da schon geringe Farbunterschiede des Untergrunds bei dem Sensor zu kleinen Fehlern führt, ist der Teil eigentlich sehr wichtig beim Asuro. Falls der Bot längere Zeit in eine Richtung fährt, wird mit der Zeile
w = w + v*0.001;
der Führungswert solange verändert, bis er stehen bleibt. Mit diesem Teil wird sogar die Position geregelt. Denn wenn durch eine Störung eine Geschwindigkeit auftritt, wird auch ein Offset aufgebaut. Der Offset muss durch entgegengesetztes Fahren wieder abgebaut werden. Sieht man auch auf dem Video. Wenn man den Asuro anstößt, kehrt auch auch wieder zurück. Automatisch ergab sich dadurch auch die Regelung auf der schiefen Ebene.
Wobei ich aber anmerken muss, das mein Bot nach einem Antippen sich zwar um einige dm bewegt hat, aber im Grunde wider zum Stillstand gekommen ist.Es kann sein, dass sich die Reibung hier günstig auswirkt. So weit habe ich es nicht mehr untersucht. Nachdem es bei mir funktionierte, habe ich mich zufrieden gegeben. Die Erklärungen beziehen sich in der Hinsicht auf fast ideale Bedingungen mit vielen Vereinfachungen, z.B. Vernachlässigung der Haftreibung.
@JanB
Freut mich, dass es gleich funktioniert hat.
Ich hätte nicht gedacht, dass es so leicht nachzuvollziehen ist, da ich doch einige Änderungen bei mir durchführen musste.
Gruß Waste
Hallo waste,
Superding!!!!! Werde gleich 'mal meine ASURO rauskramen und schauen, ob er es auch kann. Leider verstehe ich nicht genug von Regelungstechnik um so etwas selbst bauen zu können. Aber was nicht ist ....
Zum "einfachen" Teil deines Programms. Dort steht:
---------------------------------
MotorDir(RWD,RWD);
MotorSpeed(255,255); // beschleunigt kurz rückwärts
Msleep(80); // um den Asuro aufzurichten
---------------------------------
Bist du sicher, dass das eine Effekt hat? Bei Rückwärtsbeschleunigung sollte die "Nase" des Asuro heruntergedrückt werden. Ich hätte
"MotorDir(FWD,FWD);" erwartet.
Gruß RedBaron
Hallo waste,
Freut mich, dass es gleich funktioniert hat..., da ich doch einige Änderungen bei mir durchführen musste.
Die superhelle LED hatte ich sowieso schon drin von früheren Linienverfolgungsexperimenten,
und der von dir beschriebene Stützkondensator parallel C5 ist bei mir anscheinend nicht nötig.
Meine Stromversorgung ist ein 7.2V Li-Ion-Akku und 5V-Spannungsregler.
Ich habe den Akku so hochgelegt, das der Bot wie in deinem Video zu sehen
bei etwa 30 Grad ausbalaciert ist.
Und dann klappte es auf Anhieb.
Ich habe ein wenig herumexperimentiert mit verschiedenen Zusatzgewichten,
Akku-"höhen" und Balancewinkeln, und es zeigt sich, das dein Regelalgorithmus
über einen weiten Bereich stabil ist.
Wirklich Klasse.
Ich würde mich freuen, wenn du dein Programm und insbesondere
die darin verwendeten Konstanten hier etwas näher erläutern würdest,
obwohl du es schon ganz ordentlich kommentiert hast.
Du schreibst öfters von einer Simulation. Was ist das konkret ?
Eine Simulationssoftware ? Ein mathem. Modell ?
Gruß Jan
@RedBaron
Das Aufrichten des Asuro geschieht erst mit Vorwärtsbeschleunigen durch die Regelung und ohne den Rückwärtsimpuls kommt der Asuro nicht richtig hoch. Mit dem kurzen Rückwärtsimpuls geht das wunderbar.
@JanB
Ja, die Simulation basiert auf math. Modellen. Dazu verwende ich das Programm Scicos. Das ist ähnlich dem Simulink, aber Freeware. Ich hab das Blockschaltbild angehängt, damit man sich darunter auch was vorstellen kann. Wenn Interesse besteht, kann ich auch das File hochladen. Wer Scicos installiert hat, kann dann damit spielen.
Gruß Waste
Hallo waste,
Also der Integralregler, wie der Name eigentlich schon sagt, wirkt langsam auf den Offset, weil würde er schnell reagieren, würde er dem Winkelregler gegen wirken, da der Winkelregler den Winkel ja über die Beschleunigung des Bots ausgleicht, und der Offsetregler die Geschwindigkeit(entspricht der Ausgleichsbewegung) über die Änderung des Soll-Winkels. oder?
Wirkt der Geschwindigkeitsregler nicht gleich wie der P- Anteil des Winkelreglers? Da der Geschwindigkeitsregler abhängig von der Stellgröße des Winkelreglers (PWM) ist, und wider in diese Stellgröße mitwirkt. Ist ja IHMO das gleiche, was der P- Anteil im Winkelregler tut?
Mit freundlichen Grüßen Roland
Also der Integralregler, wie der Name eigentlich schon sagt, wirkt langsam auf den Offset, weil würde er schnell reagieren, würde er dem Winkelregler gegen wirken, da der Winkelregler den Winkel ja über die Beschleunigung des Bots ausgleicht, und der Offsetregler die Geschwindigkeit(entspricht der Ausgleichsbewegung) über die Änderung des Soll-Winkels. oder? Ja, kann man so sagen.
Wirkt der Geschwindigkeitsregler nicht gleich wie der P- Anteil des Winkelreglers? Da der Geschwindigkeitsregler abhängig von der Stellgröße des Winkelreglers (PWM) ist, und wider in diese Stellgröße mitwirkt. Ist ja IHMO das gleiche, was der P- Anteil im Winkelregler tut? Die Regler sind zwar gleich, aber die Strecken sind unterschiedlich, das ergibt eine ganz andere Wirkung.
Gruß Waste
Hallo waste,
sehr gute Arbeit ! Ich bin erst vor kurzem auf diesen Thread gestoßen und habe es gleich mal an meinem ASRUO ausprobiert.
Hättest Du was dagegen, einen Thread im
RoboterNetz.de Foren-Übersicht » Roboter-Foren » Roboterbausätze und Modelle
aufzumachen ? Da sehen es sicherlich noch mehrere ASURO-Besitzer. Und es ist ja wirklich faszinierend, dass man mit dem ASURO ( und mit dem Sensor ! ) so was hinkriegen kann.
Bei mir funktiniert es bis jetzt leider noch nicht. Nachdem ich mit verschiedenen Abstandshaltern herum probiert habe, balanciert er immer nur "fast".
Könnte es sein das es an der asuro.c liegt ?
Bei Deinem Regler ist die Zykluszeit ja durch die Programmabarbeitungsgeschwindigkeit definiert, falls ich das richtig gesehen habe. Wenn man jetzt eine asuro.c verwendet, die etwas mehr Rechenpower in Interruptroutinern verbräht, ändert sich das Reglerverhalten. Könnte das der Grund sein ? Könntest Du Deine asuro.c noch mal posten ?
Gruss,
stochri
Hier gehts mit dem balancierenden ASURO weiter:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=15307
Hallo stochri,
ich habe hier (https://www.roboternetz.de/phpBB2/viewtopic.php?t=15307)einen neuen Thread eröffnet. Dort ist auch das gesamte Programmpaket angehängt incl. Hex-File. Probier das aus. Wenn es dann geht, liegt es an der Zykluszeit.
Waste
Ups, Manfred war schneller.
Also ich arbeite auch an einem selbst-balancierenden Roboter.
Mein Problem dabei ist, daß der Roboter selbständig "aufstehen" können soll.
Klar ist es mit Gyro und Beschleunigungsmesser leicht die waagerechte Ebene zu erkennen und zu halten, aber aus einer "Schrägruhelage" in die labile - balancierte Waagerechte zu kommen, da fehlt mir noch der richtige Tipp.
Ich dachte jetzt als Qucksilberschalter, die prinzipiell Links-gekippt oder Rechts-gekippt erkennen und wenn beide Kontakt liefern = grobe Waagerechte erreicht. Allerdings weiß ich nicht, ob beim freien "Aufschwung", wo ja auch die Beschleunigungskräfte auf die beiden Schalter wirken wieder ausgehebelt sind (Siehe Parabelflug, da würde auch kein Quecksilberschalter dieser Welt "parallel zur Erdbeschleunigung" erkennen)..
Ich grüble darüber schon länger und bin auch ziemlich wirre Sachen, wie Magnetometer, oder auch Abstandssensoren zum Boden gekommen, aber idealerweise "startet" der Robbi ja auch von einer Rampe aus, da sind die Abstände zum Boden auch relativ unbrauchbar.
Evtl. ist der Schlüssel ja doch einfach der Vergleich zwischen Beschleunigung (also ob der Robbi sich seitlich bewegt, bzw. fährt) oder seine Position behält und nur um die Antriebsachse dreht (Gyro-Info)...
Für jeglich Tipps dankbar.
Wenn ich mit dem Teil mal weiter bin, poste ich auch gerne mal Bilder.
Das Teil wird ziemlich wild!
Gruß, Kurt :shock:
Christoph2
17.09.2008, 20:28
Hi!
ich habe nur die erste seite gelesen, aber mir ist dazu etwas eingefallen.
Man könnte ja einen Magneten an eine schnur hängen als pendel und mit hallsensoren die position des pendels bestimmen.
soo groß wäre das dann garnicht.
ich habe keine erfahrung mit hallsensoren, aber mich würde interessieren ob das funktioniert.
lg christoph
Das geht auch ohne Magnet oder hall,
indem du einfach ein gewicht, an einem stab, an eine potiachse hängst.
3 potis, 3 achsen, 3 gewichte.. nur ein doppelter salto vorwärst wird da schwer ;-)
die z-achse würde ich weg lassen da im waagerechten nichtssagend, und dafür als diagonale zwischen x und y ausführen.
so hat man immer einen abgleichswert.
Das vom technischen/mechanischen, die messung und umsetzung :-({|=
Man könnte auch eine kugel, golfball oder ähnliches in silikonöl in einem plexiglasrohr lagern, und von mehreren seiten per kamera/ir sensor anschauen. an einer stelle wird der ball angebohrt und mit blei gefüllt. dass ist der tiefpunkt/schwerpunkt,
anschließend werden horizontal farbige linien aufgetragen (oder schwarze striche mit unterschiedlicher breite=lichtdämpfung)
über die linien und die kameras kann die lage des balles relativ zu den kameras gemessen werden.
Man kennt das von so Gruselartikeln wie "glasaugen" die beim rollen immer nach oben starren, oder von sonem minikompass fürs auto.
Die sind auch schnell genug um beschleunigungen auszugleichen.
Ach immer diese blöden ideen ;-)
hoi,
die ideen sind beie nix, weil sie auch auf beschleunigungen reagieren. dann kann man gleich beschleunigungssensoren verwenden. die gibt´s fertig zu kaufen, und funktionieren ohne großen aufwand.
mfg jeffrey
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.