Hi Waste,
Achso ist das.
Danke!
Gruß Michi
Druckbare Version
Hi Waste,
Achso ist das.
Danke!
Gruß Michi
Hi locked,
warum benutzt du nicht einen ADXL Beschleunigungssensor der wäre vom untergrund unabhängig!
Hast du die Stromversorgung des Sharp mal direkt am Sensor mir einen 47µ Kondensator versehen und den Ausgang mit 10n ?
Danach sieht das Signal wesentlich sauberer aus als wie nur direkt angeschlossen. Zudem würde ich eine als zuführung zum Sensor ein Mikrofonkabel verwenden wo der Schirm auf Masse liegt, da das links rechts schalten ziemlich hohe Spannungsspitzen hervorrufen kann und sich das bei nidrigen PWM sehr auf die Stromversorgung auswirken kann!
Kannst du mal Messen mit deinen Oszi:--->
1. Oszi auf AC 5V/Div stellen
2. Messpitze an AD Eingang des Mikrokontroller
3. sharp festen abstand geben damit sich das nicht auf die Messung auswirkt.
4. Motor regelung laufen links / rechts lassen (Simulator programmieren)
5. V/DIV runter schalten bis das Rauschen sichtbar ist
Dann siehst du was dein Sonsorsignal alles unerwünschtes drauf hat.
Bye Ulli
Hallo Ulli,
Also wegen dem ADXL: Das hab ich bereits zur genze ausprobiert, jedoch ohne jeden hauch von erfolg, da der ADXL die Ausgleichbewegung ja auch als Beschleunigung misst. Klar würde es in Kombination mit einem Gyro funktionieren, aber die Digitale Filterung ist mir irgendwie zu komplex und der Preis des Gyro ebenfalls 8-[ https://www.roboternetz.de/phpBB2/vi...=asc&start=198 (weiter unten).
Das mit der Stromversorgung gefällt mir gut, danke.
Also den 47u direkt auf die Platine des Sharp Sensors anbringen? Und den 10n ebenfalls? oder den 10n direkt am Prozessor Eingang?
Ob ein Mirkofonkabel ebenfalls eine Verbesserung bringt glaub ich eher nicht, da die Platine auf einem Lochraster aufgelötet ist und die Leitungen sowieso quer auf der Platine verlaufen.
Mit freundlichen Grüßen Roland
Hi Roland,
den 47µ direkt auf die Platine des Sharps und die 10n am Eingang des Mikrocontrollers müsste den besten Erfolg bringen.
Am besten du siehst dir die Spannung dabei mit den Oszi mal an, kann sein das du etwas mit den Werten spielen musst!
Eine Parallelkombination aus kleinen C´s mit unterschiedlichen Werten kann auch zur besseren Filterung beitragen 100p || 1n || 10n
Berichte mal über deine Ergebnisse.
Bye Ulli
@locked
Gerade deswegen könnte ein abgeschirmtes Kabel (Mikrofonkabel) für das Signal eine Verbesserung bringen.Zitat:
Ob ein Mirkofonkabel ebenfalls eine Verbesserung bringt glaub ich eher nicht, da die Platine auf einem Lochraster aufgelötet ist und die Leitungen sowieso quer auf der Platine verlaufen.
Zwischen Ausgang des Sensor und Eingangs-Pin des µC brauchts du ja keine Bauteile, deswegen sollte es eigentlich möglich sein die beiden Anschlüsse mit einem abgeschirmten Kabel zu verbinden.
Falls du das Signal noch durch Kndensatoren glätten willst, werden die parallel und möglichst direkt an den Eingang des µC geschaltet. Das hindert also auch nicht dran Sensor und µC direkt über abgeschirmtes Kabel zu verbinden.
Dünne abgeschirmte Leitung findet man öfter mal in alten Computern zwischen Soundkarte und CD-Laufwerk.
Wenn du ein Oszi hast, würde ich aber erst mal messen ob Störungen da sind und wie die Aussehen.
Hallo,
ich habe nun die Kondensatoren dazugelötet, er steht IHMO etwas stabiler, jedoch sich solche "Ausreißer" immer noch vorhanden. Mit dem Oszi habe ich nichts davon bemerkt (liegt wahrscheinlich an meinem Oszi, welches ich an dieser stelle nicht weiter beschreiben möchte :-& )
Aber es ist immer so ein Spiel mit dem Sollwert, je nach Untergrund anders, ich werde auf alle fälle einen 2ten Sensor bestellen und dann die Differenz bilden.
Mit freundlichen Grüßen Roland
Wenn man einen Besen auf der Hand balanciert sind diese kleineren Ausrutscher ja auch vorhanden.Zitat:
ich habe nun die Kondensatoren dazugelötet, er steht IHMO etwas stabiler, jedoch sich solche "Ausreißer" immer noch vorhanden.
Bist du denn sicher, dass die überhaupt am Sensor liegen und sich nicht eventuell durch die Regelung oder Progrmmierung oder andere Störfaktoren ergeben?
Hallo,
Also der Bot fliegt eigentlich nicht mehr um, nur eben zuckt er ab und zu schon recht heftig, schafft es aber noch gegen zu regeln. In der Regelung (siehe C File) sehe ich kein Problem, und wie gesagt wenn man die Sensorspannung AD Wandelt und über die Serielle ausgibt, ist ab und zu ein Ausreißer mit bis zu +10 Digits dabei.
Mit freundlichen Grüßen Roland
Vielleicht hilft eine Softwarelösung, Ausreisser einfach per Software ignorieren.
Waste
Nunja, aber wie soll ich das realisieren?
Ich muss ja jeden Istwert sofort verwerten, da der Sensor von Haus aus langsam ist. Und große Änderungen des Istwertes wird es immer geben.
Mit freundlichen Grüßen
Gerade weil der Sensor ziemlich langsam ist, ist es wichtig, dass du die Messwerte bestmöglichst aufbereitest.Zitat:
Nunja, aber wie soll ich das realisieren?
Ich muss ja jeden Istwert sofort verwerten, da der Sensor von Haus aus langsam ist. Und große Änderungen des Istwertes wird es immer geben.
Wenn der Roboter einen falschen Wert bekommt, dauert es ja entsprechend lange, bis der nächste richtige Wert kommt.
Wenn er den Wert um ein paar Rechenzyklen verspätet bekommt, macht das vermutlich weniger aus, als wenn er zwischendurch falsche Werte bekommt.
Wieviel Grad der Roboter sich tatsächlich zwischen 2 Messwerten neigen kann lässt sich (wenn auch mühsam) berechnen oder messen.
Wenn die Differenz zwischen zwei Messwerten grösser ist, kann also nur ein Messfehler vorliegen.
Ein paar Berechnungen oder Vergleiche mit vorherigen Messwerten sind im Verhältnis zum Messintervall des Sensors schnell gemacht.
10 Digits müssten nach deiner Aussage weiter oben ungefähr 2 Grad entsprechen.
In deinem VideoClip sieht es so aus, als würden die kurzzeitigen Ausreißer mehr als 2 Grad betragen.
Bin eben mehr oder weniger zufällig über die folgende URL gestolpert:http://wiki.atrox.at/index.php/GP2D120
Da wird als Vorteil der Sharp-Sensoren genannt, dass sie relativ farbunabhängig messen und als Nachteil, dass es mitunter einige Ausreisser in den Messergebnissen gibt.
Eventuell ist es dann doch hilfreicher die Ausreisser rauszurechnen, als über einen 2. Sensor weitere einzubringen.
Andererseits ist es bei mehreren Sensoren natürlich auch wieder leichter die Ausrutscher zu erkennen.
Aber eigentlich sind die kurzzeitien Ausreisser ja auch ganz nützlich. Dadurch sieht man wenigstens um was es bei dem balancierenden Roboter geht und wie geschickt dein Roboter die Balance hält. Das macht doch optisch richtig was her.
Stell dir vor die Ausreisser wären nicht da. Dann stellst du jemandem deinen Roboter vor die Nase, der steht ganz ruhig auf dem Tisch und die "jemand" fragt: "Na und, was soll das jetzt"? ;-)
Hallo locked,
welche Referenz verwendest Du für AD-Wandlung ? Intern oder extern ?
Ich habe einen Versuchsaufbau mit einem Atmega8 mit dem man Servos über Potis steuern kann. Es gab ziemlich heftige Srörungen und der ganze Aufbau hat angefangen zu zittern. Dicke Elkos an der Versorgungsleitung und Dämpfungselkos an den ADC Eingängen haben nichts gebracht. Erst als ich die Referenz von intern auf extern umgestellt habe, hat sich das Ganze beruhigt. Zu Sicherheit habe ich noch eine Mittelung von 10 Werten drangehängt.
Jetzt stehen die Werte absolut stabil, die Störungen sind vollständig elimniert.
Gruss,
stochri
Hallo locked,
eine Softwarefilterung der Ausreißer ist nicht ganz so einfach, wie es vielleicht aus meinem Beitrag klingt, aber wenn alles andere schon versucht wurde, dann bleibt nur noch diese Möglichkeit.
Zur Filterung der Ausreißer darfst Du nur die Änderungsgeschwindigkeit, also die Änderung der Änderung des Winkels, auswerten. Bei voller Beschleunigung kann es durchaus vorkommen, dass sich der Winkel innerhalb von 40ms um z.B. +5 Grad ändert. Aber es ist unwahrscheinlich, dass sich in den darauf folgenden 40ms der Winkel dann entgegengesetzt um -5 Grad ändert. Die Änderungsgeschwindigkeit wird vermutlich nur in 1Grad Schritten auftreten können, z.B. +5 auf +4 auf +3 usw. Wie das dynamische Verhalten deines Bots ist, müsstest Du ausmessen und danach die Grenzwerte für die Filterung bestimmen. Ganz ignorieren oder weglassen würde ich die Ausreißer nicht, aber auf den theoretischen Wert begrenzen.
Es gibt so Filter, die das dynamische Verhalten berücksichten, z.B. das Kalman-Filter. Aber das ist etwas kompliziert, da ist man auch gleich beim Zustandsregler.
Gruß Waste
Hallo,
@stochri: Ja das stimmt, das habe ich bereits gemerkt. Die interne Ref. ist wahrscheinlich nur für grobe Messungen gedacht, schade eigentlich. Ich verwende die Externe Ref. Jedoch nur mittels einfachen Spannungsteiler, eine ZDiode währe sicher besser.
@Waste: Das würde wahrscheinlich helfen, ich muss mir das Thema Software Filterung einmal näher anschauen. Wobei man, wie du gesagt hast, die maximal Werte der Änderung erst einmal kennen muss um ein dementsprechendes Filter zu Programmieren.
Mit freundlichen Grüßen Roland
Hallo locked,
das Herausfinden der Extremwerte ist gar nicht so schlimm. Du lässt den Bot einen künstlichen Schlenker machen, den der Bot gerade noch stehen kann und speicherst die Werte ab. Danach liest Du die Werte über UART aus. Der künstliche Schlenker könnte ungefähr so aussehen. Nach dem Ausbalancieren für etwa 400ms voll nach links beschleunigen und dann etwa 500ms voll nach rechts. Die Zeit müsste noch angepasst werden, so dass er den Schlenker nach links gerade übersteht. Nach dem rechts beschleunigen darf er umfallen. Wenn Du den Schlenker und einige Takte vorher ausgelesen hast, die Werte dann auf einem Papier oder in Excel aufzeichnen und von Hand eine schön geschwungene Kurve ausmitteln und daraus die Extremwerte finden.
Gruß Waste
Ich bin mir nicht ganz sicher, ob eine Z-Diode besser wäre. Am besten ist es wahrscheinlich, wenn der Referenzpin direkt an die Versorgung des Sharp-Sensors gekoppelt ist. Dann hat man nämlich die optimale Gleichtaktunterdrückung, soll heißen, falls auf der Versorgung eine Störung liegt, wird der Sharp-Ausgang höchstwahrscheinlich mitgezogen und wenn jetzt die Referenzspannung des AD-Wandlers mitwandert, fällt die Störung beim Wandlungsergebnis heraus.Zitat:
Die interne Ref. ist wahrscheinlich nur für grobe Messungen gedacht, schade eigentlich. Ich verwende die Externe Ref. Jedoch nur mittels einfachen Spannungsteiler, eine ZDiode währe sicher besser.
Das könnte mitunter der Grund sein, warum bei Verwendung der internen Referenz das Ergebnis so schlecht ist. In diesem Fall ist die Referenzspannung des AD-Wandlers ja unabhängig von der Versorgung des Sensors.
Was die Filterung anbelangt:
Wenn Deine Regelschleife mit 500us läuft, der Sensor aber nur eine Reaktionszeit von 40ms hat, könntest Du ja ein paar Werte mitteln oder einen 1 aus 2 Filter basteln.
Dieses Verfahren würde helfen, falls die Störungen nicht vom eigentlichen Sensorelement erzeugt werden. Und das halte ich für durchaus realistisch.
Ich habe vor einiger Zeit mal einige Versuche mit dem Sharp-Sensor angestellt. Es hat sich gezeigt, dass das Sensorergebnis davon abhähgt, aus welcher Richtung ein Objekt an den Sensor angenährt wird ( horizontal oder vertikal, sieh chris.lugr.de unten ). Dieses Verhalten könnte einige dazu veranlasst haben, zu glauben, dass der Sensor störanfällig sei.
Eventuell könnte es helfen, wenn Du den Sensor um 90° versetzt montierst.
Gruss,
stochri
Ich glaube, das würde so nur hinkommen, wenn sich der Messwert des Sharps auch proportional zur Versorgungsspannung verhält.Zitat:
Ich bin mir nicht ganz sicher, ob eine Z-Diode besser wäre. Am besten ist es wahrscheinlich, wenn der Referenzpin direkt an die Versorgung des Sharp-Sensors gekoppelt ist. Dann hat man nämlich die optimale Gleichtaktunterdrückung, soll heißen, falls auf der Versorgung eine Störung liegt, wird der Sharp-Ausgang höchstwahrscheinlich mitgezogen und wenn jetzt die Referenzspannung des AD-Wandlers mitwandert, fällt die Störung beim Wandlungsergebnis heraus.
Wenn die Versorgungsspannung um zb. 10% einbricht, müsste auch der Messwert um genau 10% einbrechen, sonst dürfte es nicht viel nutzen die Referenzspannung mit der Versorungsspannung des Sharp zu koppeln.
Da die maximale Ausgangsspannung des Sharps nur bis ca. 3V und nicht bis zur Versorgungsspannung geht und der Sensor keine lineare Kennlinie hat, glaube ich nicht, dass Versorgungsspannung und Ausgangsspannung proportional sind und die Kopplung mit der Referenzspannung Spannungsschwankungen automatisch kompensiert.
Hallo,
Ich werde diese Kurve probieren aufzunehmen. Damit weis ich sozusagen um wie viel sich die Werte maximal ändern dürfen, und wenn sie sich noch mehr ändern kann es sich praktisch nur einen fehlwert handeln oder?
Jedoch wenn sich die Werte (zwei aufeinander folgende) nicht so sehr ändern aber es trotzdem eine Fehlmessung ist weis ich wider nicht, dass es sich um eine solche handelt?
Weiters werde ich, wie mir Manf schon gesagt hat, ein Diagramm (Spannung, Neigungswinkel) aufnehmen, um zu sehen wie "linear" dieses Verhältnis ist. Zurzeit verwende ich die Sensorwerte "roh". Also ich gehe davon aus das im Bereich 6-7cm die spannungs- Änderung linear ist (ist sie auch lt. Datenblatt). Jedoch misst in einer Schieflage der Sensor in einem andern Winkel zum Boden, was bestimmt der linarität entgegenwirkt.
Mit freundlichen Grüßen Roland
Theoretisch lässt sich der Messwert auch dann noch auf Plausibilität überprüfen.Zitat:
Jedoch wenn sich die Werte (zwei aufeinander folgende) nicht so sehr ändern aber es trotzdem eine Fehlmessung ist weis ich wider nicht, dass es sich um eine solche handelt?
Wenn der Roboter z.B. nach vorne kippt, du nicht gegensteuerst und der Messwert ergibt trotzdem eine kleinere Neigung als der vorherige, kann da irgendwas was nicht stimmen.
Bei den verhältnismässig langsamen Sharp-Sensoren, kannst du aber vermutlich nicht leisten mehrere Messungen zu machen, ohne gleichzeitig gegenzusteuern.
Wenn du die Radbewegungen z.B. über Incrementalgeber gezielt steuern, bzw. messen könntest und die Massenträgheit deines Fahrgestells kennen würdest, müsstest du den nächsten Messwert eigentlich sogar vorausberechnen können.
Das dürfte aber mathematisch und programmiertechnisch reichlich kompliziert sein. Ob es viel nutzt weiss ich auch nicht, denn wenn man alles vorherberechnen könnte, bräuchte man ja keine Sensoren ;-)
Ich glaube es hilft schon, wenn du einfach erst mal nur die Messwerte die viel zu klein oder viel zu gross sind "behandelst". Da macht der Robby ja jedesmal einen Satz den er dann durch entsprechend heftiges gegensteuern wieder auffangen muss.
Dabei fällt mir allerdings noch was ein. Was ist bei Unebenheiten im Boden oder wenn jemand mal vor den Robby stösst?
Dann könnten Messwerte die normalerweise zu gross oder zu klein wären richtig sein.
Ich glaube das würde ich mir für später aufheben und erst mal auf der glatten Tischplatte weitermachen.
@locked
Was für Getriebe verwendest du eigentlich für deinen Roboter?
Ist das selbstgebaut oder kann man das igrendwo fertig bekommen?
Ich habe vor längerer Zeit auch mal versucht ein kleines Fahrgestell mit starrer Achse ans Balancieren zu bekommen.
Ich habe dafür ein billiges Kombi-Getriebe von Conrad verwendet.
Das ist komplett mit Motor und das Getriebe kann man mit verschiedenen Übersetzungen zusammensetzen.
Die Variationen reichen aber nur von zu schwach bis zu langsam, so schnelle Bewegungen wie auf deinem Video sind da bei weitem nicht drin.
Dewegen habe ich es damals recht schnell aufgegeben.
Das Fahrgestell mit Controller usw. steht seit Monaten rum und staubt zu, mit einem stärkeren Motor/Getriebe könnte ich es aber irgendwann nochmal probieren.
Bild hier
Hallo recycle,Zitat:
Ich glaube, das würde so nur hinkommen, wenn sich der Messwert des Sharps auch proportional zur Versorgungsspannung verhält.
Du hattest recht, ich habe mal nachgemessen:
UV=4.85V ==> Ua=0.945V
UV=5.45V==> Ua=0.945V
( UV=Versorgung, Ua=Ausgangsspannung bei ca. 15cm )
Der GP2D120 scheint seine Ausgangsspannung als auf eine stabile interne Referenz zu beziehen.
Gruss,
stochri
Hallo recycle,
Also das Getriebe habe ich selbst zusammengestellt. Es besteht im Wesentlichen aus einer Aluwelle (6mm) (Messing habe ich nicht bekommen) auf welcher einen Zahnrad mit 50 Zähnen angebracht ist, auf dem Motor eines mit 8 Zähnen (modul 0,5). Diese Übersetzung sorgt für sehr schnelle Bewegungen. Leider ist der Motor für höhere Spannungen gedacht, wodurch ich diesen nicht mit den 7,2V Akku verwenden kann.
Mit freundlichen Grüßen Roland