Nostalgie-Archiv · Stand 09.01.2017 · nur zum Lesen

Projekt Selbstfahrendes Auto

[DM]Origin04.08.2015 00:46
Puh, war schon eine weile nimmer online hier im Forum. War aber die Zeit über nicht ganz untätig. Arbeiten, Grillen, auf der Liege liegen, zocken und ein neues Projekt starten. Als Vorbereitung für ein weiteres Projekt, das noch einiges an Vorbereitungen und Zeit in Anspruch nehmen wird.

Ich habe mir mal ein Arduino Board gegönnt und damit ein wenig experimentiert. Da ja in letzter Zeit alle Automobilfirmen mit selbst fahrenden Fahrzeugen experimentieren, dachte ich mir... mach es mal in klein. Ich habe von ganz früher noch zwei Modelle in ganz einfacher Ausführung mit Käfer Verdeck. Die liegen hier schon seit weit über 10 Jahren in der Ecke. Hab mir nun eines davon geschnappt und rüste es derzeit mit allerlei Hardware aus.

Derzeit habe ich noch kein GPS Empfänger. Das muss ich mir demnächst mal eines bestellen. Genau so wie ein 3 Achsen Gyroskop und einen Kompass. Als erstes hab ich mir angesehen wie man mit dem Arduino Board die RC Signale verarbeiten kann. Das ist einfacher als gedacht. Selbst wenn man nicht die fertigen Libs nimmt, die bereit stehen. Dazu gibt es dann noch 4 Ultraschall Sensoren für die Distanzmessung. Deren Ansteuerung ebenfalls sehr simpel ist. Verbaut werden 3 Sensoren für vorne und einen für hinten. Die Software ist simple. Das Fahrzeug soll einen zufälligen Kurs abfahren und dabei Hindernissen ausweichen. Dabei soll das Fahrzeug möglichst in einer Kurvenfahrt ausweichen. Gibt es keine Möglichkeit, soll es zurück setzen und wenden.

Die Software wurde bereits vollständig implementiert. Dies habe ich immer mal wieder zwischen durch gemacht. Nun geht es daran das ganze Zeug ins Fahrzeug zu bringen und die Elektronik zusammen zu löten. Als erstes wurde letzten Sonntag das Arduino Board auf eine biegsame Polymerplatte untergebracht und an 3 Punkten mit Gummipuffern auf dieser befestigt. Der Fahrtenregler wurde mit Heißkleber auf der Unterseite befestigt. Ein Servo für die Lenkung ist nun ebenfalls an seinem Platz.

https://drive.google.com/open?id=0B_Wbx591IjkjazFHeDBiNmJQWTA
https://drive.google.com/open?id=0B_Wbx591IjkjejUzTkc3VGpaQnc
https://drive.google.com/open?id=0B_Wbx591IjkjMUx2UG5KSUZUaE0

Was die Spannungsversorgung angeht ist das Arduino sehr umgänglich. So kann ein Std. 7.2V Akku als Energiequelle dienen, ohne Spannungsteiler verbauen zu müssen. Die nötigen 5V und 3,3V Spannung liefert das Board dann selbst.

https://drive.google.com/open?id=0B_Wbx591IjkjeVA5VFgweW9YTzQ

Heute Abend wurden die ersten Komponenten verlötet. Dazu wurden gestern einige Vorbereitungen getroffen. Da habe ich die Stecker für das Arduino Board vorbereitet. Eine ganz schöne fummelei. Aber noch mehr gefummel war die restliche Lötarbeit. Das sind eine Menge Kabel. Es wurden erst einmal die 5V und 3,3V sowie einige Masse Pins auf die Platine gebracht. Dann diverse Kabel für insgesamt 7 LED's, 2x 3 Polige Stecker für Servo und Fahrtenregler, 7 Wiederstände (für die LED's), ein Ultraschallsensor und ein 5V Kabel für die vorderen 3 Sensoren. Welche ich demnächst montieren werden.

https://drive.google.com/open?id=0B_Wbx591IjkjNEJfX0NGVnR5Vlk
https://drive.google.com/open?id=0B_Wbx591Ijkjb1BIR2pBbWFPSEU
https://drive.google.com/open?id=0B_Wbx591IjkjT0VkLU5WU1g1QUE

Die LED Reihe gibt mir Auskunft über den Zustand der Software. Ob die Initialisierung durchlief, Statuswechsel zwischen Vorwärts/Rückwärts sowie Range im Allgemeinen. Zusätzlich bekommt jeder Ultraschallsensor eine eigene LED die mit der Blinkfrequenz angibt wie nahe ein Objekt ist. Je schneller sie blinkt, desto näher ist ein Objekt diesem Sensor. Wie auf den Bildern zu sehen ist, wird die Platine am Heck auf einer Polymerplatte befestigt. Da sich die Lötstellen auf der Unterseite befinden, werden sie so schön isoliert. Nur mit dem Empfänger bin ich noch unsicher, wo ich ihn verstauen soll.

Als nächstes müssen noch die 3 vorderen Sensoren angebracht werden. Das gibt noch einmal Löt aktion und wohl eine weitere Brandblase :arghs: Dann noch die Sofware aufs Board hochladen und hoffen das alles funktioniert.
5th Scaler04.08.2015 01:14
Oha, da haste dir aber was vorgenommen, bin gespannt wie sich das entwickelt! Also berichte gerne weiter :thumbsup:
MaRRkus04.08.2015 09:00
Sehr interessanter Thread! Bin auf die ersten Tests gespannt.
Karsten05.08.2015 06:18
Moien,

ich will auch mal was fragen.

Um erstmal fest zu stellen du kennst dich mit der Materie aus ?

Ein Arduino Board kann man doch nur programmieren ?

Gut sicher kann man mit Naza ansetzen.

Du willst bestimmt nicht nur im Kreis fahren oder legst du Wert auf Blinker die blinken, Scheibenwischer die wischen
und Licht was an und aus geht.
Timmi19005.08.2015 18:11
Uiuiui das hört sich nach jeder Menge Arbeit, nach komplizierter Arbeit an :ugly:

Aber ich bin mal gespannt was da am Ende rauskommt, ich wünsche gutes Gelingen :thumbsup: :thumbsup: :thumbsup: ===
[DM]Origin05.08.2015 23:30
Und weiter geht es. Habe heute die 3 Sensoren für vorne auf eine kleine Platine gelötet, welche ich dann vorn noch anbringen werde. Zudem habe ich einen ersten Testlauf gestartet um zu sehen wo es elektrische Probleme gibt. Natürlich nur mit einem Testprogramm. Die gute Nachricht. Alle elektrischen Verbindungen funktionieren :)

https://drive.google.com/open?id=0B_Wbx591IjkjVkxQWjBJMXhrWUk

Die schlechte Nachricht. Bei einem Sensor haben sich am Stecker die Pins verschoben, so das hier kein Kontakt zustande kommt. Werde also den Stecker für die Sensoren neu machen müssen. Das passiert allerdings nimmer heute. Dann zu den fragen:

> Um erstmal fest zu stellen du kennst dich mit der Materie aus ?
Jap. Möchtest du da auf etwas bestimmtes hinaus? Elektrotechnisch oder Softwaretechnisch? Gut, ich muss gestehen das ich den ATMega2560 welcher auch meinem Board werkelt noch nicht bis runter zu den Registern kenne. So das einige Softwarekomponenten noch Potential zur Optimierung haben.

> Ein Arduino Board kann man doch nur programmieren ?
Ja, man kann es nur programmieren. Der Chip führt aber auch einige Pins raus. In diesem Fall sind es 52 digitale und 16 Analoge. Die Pins können über die Software entsprechend angesprochen werden. Sie fungieren entweder als Eingang oder als Ausgang (kann man selbst bestimmen). Elektrisch ist die Sache höchst simpel. Um z.B. eine LED ein oder aus zu schalten, klemmt man sie an einen der digitalen Pins an, noch ein Widerstand dazu, Pin als Ausgang konfigurieren und dann die CPU den Pin entweder mit einer 1 (5V) oder 0 (0V) füttern und schon geht sie an oder aus. Ein Knopf funktioniert im Grunde genau so. Nur das der Pin hier als Eingang konfiguriert wird. Liest man ihn dann aus hat man entweder eine 1 (Knopf gedrückt) oder eine 0 (Knopf nicht gedrückt).

Ähnlich funktioniert das auch mit den Sensoren und den Servos. Die Sensoren fangen an zu messen, wenn man sie am Trigger einen 10us Impuls gibt. Dann liefert der Sensor am Echo Pin (Eingang) einen Impuls gewisser Zeit. Anhand dieser kann man dann die Impulsdauer in eine Metrische Einheit umrechnen. RC Servos funktionieren ähnlich. Anhand der Impulsdauer kann man den Servo dazu bringen sich zu drehen. Mittels Interrupt kann man so die Impulsdauer eines RC Empfängers auch ganz primitiv auslesen.

> Gut sicher kann man mit Naza ansetzen.
Ich denke du denkst zu kompliziert. Natürlich kann man zusätzliche Module anbringen und entsprechende Protokolle implementieren. Es gibt da auch bereits fertige Libs für bestimmte Protokolle. Die einfachste Methode entsprechende Komponenten an zu binden ist allerdings der I2C Bus. Darüber kann man SDCard Controller, WLAN, Ethernet und andere Komponenten ansprechen. Für GPS ist das allerdings alles nicht nötig. Dafür reicht eine Seriele Anbindung völlig aus :) Gleiches gilt für Gyroskop und Kompass.

> Du willst bestimmt nicht nur im Kreis fahren oder legst du Wert auf Blinker die blinken, Scheibenwischer die wischen und Licht was an und aus geht.
Ich möchte natürlich schon mehr. Aber ein Schritt nach dem anderen :) Als erstes muss die Kiste Bremsen, Lenken und Gas geben können. Dann muss es in der Lage sein Hindernissen ausweichen zu können. Das ist der schwerste Akt. Ich bin nicht Sicher ob die Anordnung und der Typ der Sensoren die beste Wahl ist. Eine Laser Messung wäre natürlich präziser. Allerdings hab ich nur einen kleinen 7,2V Akku :) Daher auch ein Arduino und kein Raspberry PI. Radar ginge auch. Aber die Messdaten zu verarbeiten ist keine triviale Angelegenheit und dürfte die Rechenleistung des ATMega sprengen.
Karsten07.08.2015 18:58
Klasse kommentiert :thumbsup:

Ich sehe du steckst da voll drinnen.

Also stelle ich mir die optische Erfassung mittels Sensor vor ?

Aber er muss ja einen Anhaltspunkt haben wie z.B. eine Linie.
Oder ist es dann eher so wie diese freilaufenden Rasenmäher, die wenn sie irgendwo anstoßen umdrehen und weiter fahren.

Bin auch gespannt wie es weiter geht, tolles Projekt übrigens. :thumbup:
[DM]Origin09.08.2015 16:05
> Also stelle ich mir die optische Erfassung mittels Sensor vor ?
Ist eigentlich sehr einfach. Ich nutze den HC-SR04 Ultraschallsensor. Bzw. 4 Stk davon. Drei sind nach vorn gerichtet und einer nach hinten. Die Sensoren haben eine Genauigkeit von wenigen Millimetern. Leider hört die Zuverlässigkeit der Sensoren ab 2m Distanz auf. Anders wie beschrieben mit bis zu 5m. Das reduziert leider die Höchstgeschwindigkeit. Aber das soll mich nicht weiter stören. Im folgenden mal zwei Bilder mit montierten Sensoren.

https://drive.google.com/open?id=0B_Wbx591IjkjM193eFg4YXlrLVU
https://drive.google.com/open?id=0B_Wbx591IjkjVDVhSEJERlV4RmM

Die Sache ist einfach. Das Fahrzeug wird irgendwo abgesetzt und beginnt zu fahren. Dabei wählt das Fahrzeug sich seinen Kurs zufällig selbst aus. Die Sensoren sind dazu da um zu schauen wo eine Kollision droht. Wenn z.B. der vordere linke Sensor einen Schwellwert unterschreitet soll das Fahrzeug nach rechts ausweichen. Stehen bleiben und zurück setzen soll es nur, wenn es keinen Weg zum ausweichen findet. Das ist auch der schwerste Teil an der ganzen Software. Die Daten so zu verarbeiten das es möglichst intelligent ausschaut :whistling:


Mittlerweile wurden alle elektrischen Komponenten auf Funktionstüchtigkeit geprüft. Also auch Motor und Fahrtenregler. Beide sind doch sehr alt. Auch ein erster Testlauf, im "Trockendock", mit der eigentlichen Software lief. Allerdings wie zu erwarten mit einigen Fehlern. Viele davon habe ich gestern gefixt. Am meisten Probleme macht der Fahrtenregler. Der ist doch etwas zickig und bedarf einer gesonderten Behandlung. Aus irgend einem Grund ist sein Ruhepunkt 95 Grad und nicht 90 Grad wie bei jedem anderen Servo :cursing: Auch der Wechsel zwischen vorwärts und rückwärts bedarf einer Sonderbehandlung. Das hat mich dazu gebracht einige Änderungen an der State Machine vor zu nehmen, die ich eigentlich erst später machen wollte. Auch die Servo Lib bedarf deswegen einer Überarbeitung. Dann fehlt noch die Implementation der geänderten Abfolge, damit auch der Fahrtenregler zufrieden ist.


Zu guter letzt. Hab noch das alte Verdeck im gefunden und es mal lose drauf gesetzt :)

https://drive.google.com/open?id=0B_Wbx591IjkjSFNoNDVULVhCMnc

Mit ein paar Modifikationen könnte es tatsächlich passen.


PS:
Kennt jemand einen guten Sensor mit dem man die Umdrehungen einer Achse messen kann? Ganz primitiv, ohne großartiges Protokoll oder sowas.
[DM]Origin09.08.2015 21:22
So, noch einmal ein kleines Update. Der zickige Fahrtenregler läuft nun ebenfalls. Die einzelnen Zustände laufen ebenfalls nun so wie sie sollen. Fertig ist es natürlich noch nicht. Es fehlt noch der Totmannschalter über die Fernbedienung. Auch ist die Logik zum Ausweichen noch nicht so wie ich sie gerne hätte. Da muss noch etwas Hirnschmalz rein :) Dennoch. Für ein erstes Video mit der laufenden Software hat es dennoch gereicht.

https://youtu.be/w7CdekrvSYw
Karsten11.08.2015 19:54
Gut aber :thumbsup: du darfst dann nur noch -0.00.001 fahren.
Kannst du die Reaktionszeit verkürzen ?
Wie weit reicht der Sensor oder streut der ?
Weißt was ich mein ?
[DM]Origin11.08.2015 23:25
Du meinst die Zeit die die Sensoren brauchen um die Distanz zu messen? Bzw. der Abstand zwischen 2 Messungen? Die Messzeit kann ich nicht verkürzen, erfolgt in Schallgeschwindigkeit :) Aber die Zeit zwischen 2 Messungen kann ich noch drastisch verkürzen. Die Timings sind einfach ein Ding, die man ausprobieren muss und können erst optimiert werden, wenn die Kiste an sich fährt. Achte aber nicht auf die Anzeige der LED's :) Das läuft separat in einem Intervall und dient nur der visuellen Anzeige. Zwischen den Wechseln der Zustände gibt es ebenfalls Pausen. Sind Absicht, damit der Fahrtenregler nicht zickt ^^
[DM]Origin25.08.2015 19:19
So, weiter geht es. Leider mit 2 unerwarteten Problemen.

1) Die Ultraschallsensoren scheinen Probleme mit Holz zu haben. Wie es scheint schluckt das Holz den Schall oder zu einem zu großen Teil, so das die Sensoren keine Messung vornehmen können oder es für sie so aussieht als wenn da nichts stehen würde 8|

2) Scheint der Fahrtenregler dem Arduino Board die Energie zu klauen. In Trockentests funktioniert der Wechsel zwischen den jeweiligen Zuständen. Aber sobald das System ohne alleine fahren soll, wird das System immer in den Init-Zustand zurück gesetzt sobald das Fahrzeug los fahren will. Was Softwaretechnisch eigentlich gar nicht sein kann, da es keine Stelle im Code gibt die einen solchen Wechsel vollzieht. Hab es heute mit Laptop und USB-Port probiert. Schon tritt der Fehler nicht mehr auf.

Wie es scheint sackt die Spannung zu stark ab. Da durch den USB-Port ebenfalls Strom abgenommen wird, kann dies dann kompensiert werden. D.h. ich brauche entweder einen kleinen Stabilisator, oder einen zusätzlichen Akku. Mal sehen was ich da machen werde.


Ein weiteres Problem ist die Beschleunigung, bzw. die Wahl der richtigen Grad Werte, damit das Fahrzeug überhaupt los rollt. Das Problem dabei ist vor allem der Ladezustand des Akkus. Ist er voll, wird das Fahrzeug zu schnell, ist er bereits entladen, fährt das Fahrzeug nicht mehr los. Daher wird es wohl darauf hinaus laufen einen Beschleunigungssensor zu bestellen und ihn zu montieren und anhand diesem die Grad Zahl fest zu legen. Der muss allerdings erst noch bestellt werden. Bin mir noch nicht sicher welcher hier der gescheiteste ist.
Karsten25.08.2015 20:12
Hallo,

zu zweitens würde ich zu einem zweiten Akku greifen.

Klar hast du damit erstmal Gewicht, optimieren kann man immer noch.

Ich will damit sagen das Ardino ist ein eigener Kreislauf der Strom braucht, alle anderen Bauteile

wie Servos bzw. Regler müssten separat von Strom versorgt werden. Oder ? (ha ha das klingt iw. so unwissend)


Zu erstens,

ich kann mir schon vorstellen das unterschiedliche Untergründe den Schall oder das Signal unterschiedlich auf nehmen.

Desto glatter, desto schneller findet das Signal zurück ?
Anders rum verschlucken raue Oberflächen das Signal evtl. bzw. verstreuen es.
[DM]Origin08.09.2015 14:02
So,

geht ein kleines Stückchen weiter :) Ich habe mich dazu entschieden einen externen Akku für das Arduino zu verwenden. Ich habe ja noch das original Hump Pack von HPI :) Wird wohl irgendwo hinten drauf kommen. Die Alternative wäre ein Spannungsverstärker. Welcher den Stromausstoß massiv erhöht wenn die Eingangsspannung der Schaltung absinkt. Dies wäre definitiv die leichtere (im Sinne von Gewicht) Lösung. Und ja, das Arduino ist ein eigener Stromkreislauf. Allerdings ist der einzige Servo für die Lenkung zuständig, für ein Modell mit sehr kleinen Reifen und geringem Gewicht. Daher hängt es derzeit an der 5V Schiene des Arduino.

Für einen besseren Aufbau müsste ich die Platinen selber herstellen. Das hab ich noch vor. Aber noch nie gemacht. Da muss ich mich erst einmal schlau machen :)

Heute ist aber erst einmal mein Beschleunigungssensor eingetroffen.
https://drive.google.com/open?id=0B_Wbx591Ijkjb2x4bEFQMnBfOTA

Ist auch gleichzeitig ein Gyroskop. Damit kann ich nicht nur checken ob das Fahrzeug auf dem Kopf liegt, sondern auch wann es sich bewegt. Das macht die Dosierung besser und die Geschwindigkeit ist nicht mehr abhängig von der Akku Leistung. Denn Anhand der Dauer und der Stärke der Beschleunigung kann man ableiten wie schnell sich das Objekt bewegt. Jetzt geht es erst einmal darum wieder Code zu schreiben. Denn der Sensor will angesprochen werden :) Und es wird wieder etwas Lötaktion geben und ein Besuch beim großen C. Denn ich werde den Sensor nicht fest verlöten, sondern ihn nur aufstecken. Hätte die Steckleiste gleich mit bestellen sollen :patsch: