Hallo liebes Forum,
der Winter naht, die Projekte für den Bastelkeller rücken näher.
Dieses Jahr möchte ich mich der Robotik verschreiben. Dazu habe ich
schon ein paar Erfahrungen mit AVRs/Arduinos und der entsprechenden
Sensorik (Ultraschall, Temperaturfühler, Lichtschranken,...) sammeln
können.
Nun habe ich vor, einem kleinen dreirädrigen Roboter das Laufen
-bessergesagt Fahren- zu lernen. Die beiden Getriebe-DC-Motoren, die
ich für die Hinterachse verwende, steuere ich mit einem Arduino und
einer H-Brücke (via PWM) an, gelenkt wird durch Bremsen des einen
Rades/Drehen des Anderen, bzw. gegenläufiges Drehen beider Räder.
Das Fahren selbst klappt natürlich schon mal, was ja kein Hexenwerk ist.
Nun soll dieser Roboter aber zwei bestimmte Wege in meiner Wohnung
abfahren können. Und hier stellt sich genau meine Frage an Euch:
- Was gibt es für Möglichkeiten, um quasi einer "unsichtbaren Linie am
Boden" zu folgen, wie man es von den Robotern kennt, die einer
Markierung/Linie am Boden folgen? Der Grund, keine Linie am Boden haben
zu wollen beruht auf ästhetischer Natur. Ich (und schon garnicht meine
bessere Hälfte) möchten einen gelben Strich auf einem anthrazid-farbenen
Parkett haben.
Der Roboter muss nicht unbedingt Hindernissen aus dem Weg gehen, da
schlichtweg keine Hindernisse auf der Geraden, auf der er fahren soll,
existieren (werden).
Eine reine Steuerung wird trotzdem aufgrund gewisser Abweichungen nicht
ausreichen (a la "50 Umdrehungen linker + rechter Motor, "10 Umdrehungen
nur linker Motor, beide Motoren für 10 sec. "EIN" " usw.).
Deshalb muss da schon irgendeine Sensorik mit ins Spiel kommen.
Induktiv wird wohl genauso flach fallen, da ich auch ungern einen Draht
o.ä. auf meinem Boden befestigen möchte, damit sich der Roboter daran
orientieren könnte.
Der Roboter soll wiegesagt in einem geschlossenen Raum (keine Boden-
oder Fahrhindernisse) eine bestimmte Strecke abfahren.
Zweite Problematik ist dann die "Weiche" zur Unterscheidung der beiden
Fahrwege, die ich vor Antritt der Fahrt dem Roboter übermittle ("fahre
Route-1" oder "fahre Route-2").
Meine Idee war folgende:
Gibt es nicht einen Stift/Farbe, die für das menschliche Auge nicht
sichtbar ist, aber z.B. nur unter Schwarzlicht sichtbar wird?
So könnte ich beispielsweise "vor" dem Sensor am Unterboden des Roboters
eine Schwarzlichtlampe auf den Boden strahlen lassen, woraufhin der
dahinterliegende Sensor die kurzzeitig sichtbare Linie erkennt/nicht
erkennt?!
Ich freue mich über eure Vorschläge!
Schönen Feiertag.
Also es sollte halt alles möglichst nicht für den Menschen wahrnehmbar
oder gefährdend sein.
D.h. keine Striche auf dem Boden oder Laser, die einem das Augenlicht
rauben...
Wäre die Idee mit dem Schwarzlicht realisierbar? Gibt es ähnliche
Konzepte?
Roman Witting schrieb:> Wäre die Idee mit dem Schwarzlicht realisierbar? Gibt es ähnliche> Konzepte?
Logisch, der Strich wird halt nich lange halten, was dich aber sicher
weniger störrt.
> Nun soll dieser Roboter aber zwei bestimmte Wege in meiner> Wohnung abfahren können.
Eventuell magst du von meinem Code abgucken (fahren.h und fahren.c) auf
http://stefanfrings.de/nibobee/index.html
Bei meinen Experimenten musste ich zuerst mal erkennen, dass die beiden
Motoren unterschiedlich effizient sind und somit ein gleicher PWM Wert
an beiden Motor keineswegs zu einer geradeaus-Fahrt führt. Auch kleine
Hindernisse auf dem Bode (Krümel) führten dazu, dass der Roboter seine
Fahrtrichtung ungewollt änderte.
Nach einigen Versuchen kam ich am besten mit dem Lenkrad Modell (so
nenne ich das) in Kombination zwei PI Reglern für die beiden Motoren
zurecht. Zur Steuerung habe ich zwei Werte: Geschwindigkeit und Lenkung.
gesteuert wird im Grunde genommen so, wie es auch ein mensch tun würde.
Eine simple Formel berechnet, welche Strecke die beiden Räder
hinterlegen sollen. Nehmen wir als Beispiel die Aufgabe, 1 Meter
geradeaus zu fahren.
Ich fahre die Leistung beider Motoren (nicht zu schnell) hoch und messe
dabei fortlaufen die gefahrene Strecke. Schon Bald wird einer der beiden
Sensoren mehr Impulse melden, als der andere. Ich fahre also
offensichtlich doch nicht geradeaus. Also führe ich einen Korrekturwert
für die Lenkung ein, der so lange schrittweise erhöht oder verringert
wird, bis beide Räder die gleiche Strecke gefahren sind.
Bei einer Kurvenfahrt lässt es sich ebenso machen. Mit der Geometrie
kann ich für jede Kurve ausrechnen, welche Strecke das linke Rad und
welche Strecke das rechte Rad fahren muss. Also fahre ich mit
eingeschlagener Lenkung los und passe dann die Lenkung fortlaufend an,
bis beide Räder die zuvor berechnete Strecke hinterlegt haben.
Als nächstes muss man sich Gedanken über Beschleunigen und Bremsen
machen. Das hängt sehr stark von der Hardware ab. Wenn du zu stark
beschleunigst, rutschen die Räder durch und das Fahrzeug dreht sich weg.
Gleiches gilt auch für zu rasante Kurven. Und beim Bremsen muss man
abschätzen, wann man mit dem Bremsen beginnen muss (denke an die Formel,
die du in der Fahrschule gelernt hast). Trotzdem muss man während des
Bremsen fortlaufend nachbessern, damit man zügig exakt dort zu stehen
kommt, wo man wollte.
Beim Bremsweg stellte sich die Berechnung der Wurzel als Knackpunkt
heraus. Dafür war mein µC einfach viel zu langsam. Also habe einen
iterativen Algorithmus implementiert, der die Wurzel nur ungefähr
berechnet. Der Rest ergibt sich durch fortlaufende Korrektur der
Bremsung.
Ein solltest du bei dem ganzen Odometrie bedenken: Die Räder haben nie
perfekte Bodenhaftung. Das vorprogrammierte Muster wird also nie exakt
gefahren. Und die Abweichungen addieren sich im Laufe der Fahrt auf.
Da du keine Markierungen auf dem Boden verwenden willst, möchtest du
vielleicht optische Baken installieren, an denen sich der Roboter
orientieren kann. Ich halte das allerdings für ziemlich kompliziert.
Einfacher sind bunte Klebestreifen auf dem Boden (z.B. rot und grün),
denen der Roboter folgt. Dazu brauchst du nicht einmal diese
komplizierte PI Regelung. Beleuchte den Boden mit rotem Licht, dann wird
der rote Streifen sehr hell aussehen und der grüne sehr dunkel.
Beleuchte ihn mit grünem Licht, dann wird es umgekehrt sein.
Und noch ein Tipp: Versuche nicht, dem Streifen mittig zu folgen. Dazu
bräuchtest du mindestens zwei Sensoren und es endet oft damit, dass das
Auto ruckelig immer hin und her lenkt. Es ist viel einfacher, an der
linken oder rechten Kante des Streifens entlang zu hangeln.
Mein Boden ist sehr hell. Ich verwende einen roten Streifen und grünes
Licht. Damit erscheint der Streifen sehr dunkel. Zuerst dreht sich der
Roboter langsam nach links und rechts, um die linke Kante des Streifens
zu finden. Das ist die Stelle, wo der Lichtsensor den Wechsel zwischen
Hell und und Dunkel erfasst. Also halb-hell. Dann fahre ich ungefähr
geradeaus los. Wenn es heller wird, bin ich zu weit links, lenke also
nach rechts. Wenn es dunkler wird, bin ich zu weit rechts, also lenke
ich nach links.
Das war's schon. Es klingt allerdings einfacher, als es in der Praxis
ist.
> nicht für den Menschen wahrnehmbar
Hmm, also doch keine Streifen auf dem Boden.
Dann nimm Baken. Du könntest Infrarot-Sender aufstellen, die mit
unterschiedlichen Frequenzen pulsen und denen dann folgen. Damit hast du
an den wichtigen Punkten eine Vorgabe, wo denn "geradeaus" ist. Alles
andere machst du mit PI Regler und Odometrie Sensoren.
Also eine Mischung aus "folge dem Licht" für die längeren Teilstrecken
und freiem Fahren für die kurzen und für die Kurven.
> Wäre die Idee mit dem Schwarzlicht realisierbar?
Ich glaube nicht. Denn diese Markierungen müssen irgendwann erneuert
werden, und wer erkennt den Zeitpunkt und macht das dann praktisch? Da
will doch keiner mit einem Nachtsichtgerät durch die Halle krabbeln.
Oder lasse den Roboter in einem bestimmten Abstand zur Wand fahren. Mit
einem HC-SR04 Ultraschall-Sensor kann man im cm-Bereich genau messen.
Wenn an der Wand keine Hindernisse (z.B. Schränke) stehen, dann kannst
du parallel dazu fahren. Wenn plötzlich der Abstand zur Wand um mehrere
Meter größer wird, stehst du an einer offenen Tür....
Ganz ehrlich, all diese Vorschläge (bis auf den Laserscanner, der meines
Wissens nach aber immer noch sehr teuer ist) sind doch aus dem letzten
Jahrhundert. Zwar kann man als Bastler dank Arduino und Co. erst seit
einigen Jahren wirklich damit rumspielen, aber aktueller Stand der
Technik ist sowas nicht und wurde schon tausendfach umgesetzt.
Wenn du dich mit etwas interessantem auseinandersetzen willst, dann wie
wärs mit visueller Odometrie?
Kurz gesagt wird dabei die Eigen-Bewegung allein durch eine Stereokamera
wahrgenommen. Es gibt dafür bereits fertige Bibliotheken inkl.
Demonstrationsvideo: http://www.cvlibs.net/software/libviso/
Einmal implementiert kann man auch gleich Entfernungsmessungen und
Hindernisserkennung ohne weitere Sensoren umsetzen.
Funktionieren tut das natürlich nicht auf einem Microcontroler. Auf
einem Raspberry Pi 3 dagegen schon. Noch besser ein kleiner Intel Nuc.
Alex G. schrieb:> aber ist sowas nicht und wurde schon tausendfach umgesetzt.
Kennst du den Unterschied zwischen 'aktueller Stand der Technik' und
'Spaß an der Freude'?
Teo D. schrieb:> Alex G. schrieb:>> aber ist sowas nicht und wurde schon tausendfach umgesetzt.>> Kennst du den Unterschied zwischen 'aktueller Stand der Technik' und> 'Spaß an der Freude'?
Naaaja, ich persönlich habe den Drang beides mit einer Klappe zu
schlagen. Freude am Experimentieren und gleichzeitig was möglicherweise
neues anzustreben, was eben noch nicht so oft umgesetzt wurde.
Alex G. schrieb:> Naaaja, ich persönlich habe den Drang
!
Nachtrag:
Mach doch deine Vorschläge, Sichtweise..., ohne die simplen Projekte
anderer runter zu machen?
> Freude am Experimentieren und gleichzeitig was möglicherweise> neues anzustreben,
Was soll das sein, eine eigene VR Brille mitsamt Anwendung? Oder ein
Quantencomputer?
Die Hobbyelektronik hat gerade die Evolution vom Mittelwellenradio über
Logikgatter zum Mikrocontroller hinter sich. Man sollte schon bei Sachen
bleiben die man auch beherrschen kann, sonst macht es keinen Spaß.
Teo D. schrieb:> Alex G. schrieb:>> Naaaja, ich persönlich habe den Drang> Nachtrag:> Mach doch deine Vorschläge, Sichtweise..., ohne die simplen Projekte> anderer runter zu machen?
Jetzt übertreibst du ein wenig. Ich hab auch nicht den TE angegriffen,
sondern nur die Vorschläge komentiert!
Meine Alternative löst sein Problem ja auch und eröffnet so viel mehr
Möglichkeiten.
Stefan U. schrieb:> Die Hobbyelektronik hat gerade die Evolution vom Mittelwellenradio über> Logikgatter zum Mikrocontroller hinter sich. Man sollte schon bei Sachen> bleiben die man auch beherrschen kann, sonst macht es keinen Spaß.
Also seit der Existenz der Multi-Core Raspberries (Gen. 2) würde ich
schon sagen dass man mit vertretbarem Aufwand, über die reinen
Mikrocontroler hinaus kommen kann.
Alex G. schrieb:> über die reinen> Mikrocontroler hinaus kommen kann.
Aber nur wenn man entsprechende theoretische und Programmierkenntnisse
hat. Was ist dein Background, und was ist der Background des TOs?
Roman Witting schrieb:> ibt es nicht einen Stift/Farbe, die für das menschliche Auge nicht> sichtbar ist, aber z.B. nur unter Schwarzlicht sichtbar wird?
Meist sind das Lackstifte, wie je nach Lichteinfall doch durch
unterschiedliche Reflektionsfähigkeit auffallen.
Alex G. schrieb:> Jetzt übertreibst du ein wenig. Ich hab auch nicht den TE angegriffen,> sondern nur die Vorschläge komentiert!
Wirklich?
Alex G. schrieb:> Ganz ehrlich, all diese Vorschläge (bis auf den Laserscanner, der meines> Wissens nach aber immer noch sehr teuer ist) sind doch aus dem letzten> Jahrhundert.
Glaub mir das geht auch neutraler, ja sogar freundlich!
OK OK zugegeben, ich bin Heut etwas empfindlicher als sonnst. :/
Eigentlich hab ich das geschrieben, weil ich der Meinung war, das du das
nicht so meinst wie es rüberkommt. Dem war ja auch so.... denke ich.
Lass die Wohnung mappen, verwende AR tags dafür und man hat dann eine
präzise Mappe im IR oder US bereich. Zusammen mit einem einfachen
Kompass Sensor kann sich der Roboter zurechtfinden.
Hallo zusammen.
Vielen Dank zunächst für die vielen und interessanten Beiträge!
Da ist ja sicherlich schon einiges Brauchbares dabei, dank eurer Ideen.
Ich möchte nur kurz klarstellen, dass ich mit möglichst wenig Aufwand
viel Erfolgserlebnis haben möchte. Heißt, dass ich darin keine
Doktorarbeit schreiben möchte, es soll ja schließlich "nur" ein
Winterprojekt werden. Bis spätestens Frühjahrsanfang 2018 ;-)
Ich freue mich über weitere rege Beteiligung an meinem Beitrag.
Grüße
Roman Witting schrieb:> Hallo zusammen.>> Vielen Dank zunächst für die vielen und interessanten Beiträge!> Da ist ja sicherlich schon einiges Brauchbares dabei, dank eurer Ideen.>> Ich möchte nur kurz klarstellen, dass ich mit möglichst wenig Aufwand> viel Erfolgserlebnis haben möchte. Heißt, dass ich darin keine> Doktorarbeit schreiben möchte, es soll ja schließlich "nur" ein> Winterprojekt werden. Bis spätestens Frühjahrsanfang 2018 ;-)
Here you go: https://linorobot.org/
Ohne Erfahrung aus erster Hand zu haben: Die Teile des Systems sind
relativ gut verfügbar, wenn auch nicht spottbillig (aber insgesamt
<1k€). Wie groß der Schmerz beim Integrieren des Ganzen wird lässt sich
nicht so wirklich gut abschätzen, ohne es zu machen. Vielleicht ist es
wirklich nur Steckbrett Verdrahtung + embedded Linux + ROS Tutorial(s)
abarbeiten. Als Bonus: Am Ende wäre es auch deutlich mehr als nur ein
Linienfolger.