PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : FPGA basierter Saugroboter



FPGAfan
04.07.2020, 12:35
Hallo!
In diesem Beitrag möchte ich kurz meinen Eigenbau-Saugroboter vorstellen. Ich arbeite seit circa 6-7 Monate an diesem Projekt. Die Version aus diesem Beitrag basiert auf drei Prototypen. Mit der Saugleistung bin ich soweit ganz zu frieden.

Der Saugroboter besteht aus 3D-gedrucktem Kunststoff (PLA) und wird aus mehreren Teilen zusammengesetzt. Dadurch ist es auch möglich defekte Teile einfach auszutauschen. Die Profile der Räder bestehen aus dem flexiblen Kunststoff TPU. Die Mechanik bzw. die Konstruktion des Roboters habe ich in Fusion 360 erstellt und anschließend mit einem Prusa i3 mk3s ausgedruckt.

Der Roboter besitzt zwei Ultraschallsensoren vom Typ HC-SR04, die frontal am Fahrzeug befestigt sind. Mit diesen Sensoren soll das Fahrzeug einen Großteil der Hindernisse erkennen.
Falls Hindernisse nicht in den Messbereich der Ultraschallsensoren fallen, kann durch zwei selbstgebaute Drehzahlmesser, an den Antriebssträngen der Motoren, ein Stillstand der Räder erkannt werden. Auf den Antriebsachsen befindet sich jeweils eine Platte mit Neodym-Magneten. Die positiven Magnetfelder werden von einem omnipolaren Hallsensor erkannt woraufhin ein elektrisches Signal an das FPGA weitergegeben wird.

Um Treppenstufen oder Abgründe zu erkennen habe ich zwei Abgrundsensoren gebaut. Diese bestehen aus einer Infrarot-Leuchtdiode und einem Fototransistor, welcher die ausgesendeten Infrarotstrahlen wieder empfängt. Ragt der Roboter 2-3cm über eine Kante wird durch die fehlenden Infrarotstrahlen am Fototransistor das Ausgangssignal in einen leitenden Zustand versetzt. Ein BC337-Bipolartransistor formt das lineare Signal des Fototransistors dann in ein Rechtecksignal um. Da das von mir verwendete FPGA Eingangsspannungen mit maximal 3.7V verarbeiten kann, musste ein Spannungsteiler an den Ausgang der Schaltung eingesetzt werden.

Das Herz des Saugroboters bildet ein Cyclone 10 FPGA von Intel, welches sich auf einem TEI0003-Board von der Firma Trenz Electronic befindet. Das FPGA bzw. die in dieses IC geladene Schaltung steuert alle Prozesse im Roboter. Die Schaltung habe ich mit der Hardwarebeschreibungssprache VHDL entworfen. Das FPGA wertet die Sensoren aus und kann auf dieser Grundlage das Verhalten des Roboters an die äußeren Umstände (wie Hindernisse) anpassen.


Damit der Roboter nicht bei jedem erkanntem Hindernis das gleiche Manöver mit einem konstanten Drehwinkel ausführt, werden Daten von einer Zustandsmaschine aus einem Array geladen, indem mehrere mögliche Manöver gespeichert wurden. Die Zustandsmaschine des Navigationsalgorithmus beinhaltet einen Counter, der nach jedem Manöver die Adresse des Arrays um 1 erhöht, sodass unterschiedliche Rotationswinkel zum Ausweichen eines Hindernisses genutzt werden können.

Um Schmutz- und Staubpartikel einzusaugen wird ein Radialgebläse verwendet, welches durch Pulsweitenmodulation vom FPGA angesteuert wird.
Dabei werden Staub- und Schutzpartikel im vorderen Bereich des Roboters durch eine Öffnung angesaugt und gelangen in einen Behälter. Am Auffangbehälter befindet sich ein kleiner zweilagiger Filter, welcher die Staubpartikel von der Luft trennt. Die Luft wird vom Radialgebläse weiterhin angesaugt und anschließend am Heck des Roboters durch Lüftungsschlitze ausgestoßen. Die Staubpartikel bleiben im Auffangbehälter und können vom Nutzer entsorgt werden.

Die Platinen für den Bordcomputer, Abgrundsensoren, und Stromversorgung habe ich in Autodesk Eagle erstellt und dann herstellen lassen.

Die Steuerung des Roboters kann manuell über einen Taster am Roboter oder über eine Webapp erfolgen. Um die letztere Idee umzusetzen habe ich eine JavaScript basierte Webanwendung konzipiert, die über ein Bluetooth-low-energy-Modul und einer UART-Schnittstelle direkt mit dem FPGA kommuniziert.

Folgende Funktionen sind noch in der Entwicklung:
• Mapping Algorithmus
• Eigenes Ladegerät (ggf. auch als Ladestation)


Ich freue mich über Fragen oder Anmerkungen!:)

piggituX
04.07.2020, 14:19
hi, schönes Project.

besonders die Lösung mit den Ansaugen des Schmutzes ist interessant, ich will mit meinem Sohn aus Pappe auch was nachbauen, eine Idee zum Ansaugen fehlte mir bisher ;-) die meisten haben ja Bürsten. Von daher kam dein Bericht gerade recht.

inka
05.07.2020, 09:00
hi, gefält mir...

frage: macht sich der unterschied zwischen glattem boden und teppich durch die fehlende bürste bemerkbar?

FPGAfan
05.07.2020, 18:33
hi, gefält mir...

frage: macht sich der unterschied zwischen glattem boden und teppich durch die fehlende bürste bemerkbar?


Überraschender Weise funktioniert die Konstruktion auf glattem Boden sowie Teppich relativ gut. Der Vorteil ist natürlich, dass sich lange Teppichflusen nicht in einer Bürste verfangen können.

Ein Problem an dem ich noch arbeite ist allerdings das Fahrverhalten auf unterschiedlichen Böden.
Da bei mir zuhause größtenteils dünner Teppich als Bodenbelag vorhanden ist, habe ich die Fahrgeschwindigkeit auf diesen Untergrund angepasst.
Wenn ich nun aber in der Küche (also auf Fliesen) fahre, ist der Roboter etwas zu schnell.
Dadurch kommt es vor, dass er manchmal gegen Schränke prallt, obwohl die Sensoren das Hindernis erkennen, aber kein genügend langer Bremsweg vorhanden ist.

- - - Aktualisiert - - -


hi, schönes Project.

besonders die Lösung mit den Ansaugen des Schmutzes ist interessant, ich will mit meinem Sohn aus Pappe auch was nachbauen, eine Idee zum Ansaugen fehlte mir bisher ;-) die meisten haben ja Bürsten. Von daher kam dein Bericht gerade recht.

Das freut mich
Die Saugeinheit habe ich in einem Stück gedruckt, sodass weniger Luftschlitze entstehen welche die Ansaugkraft verringern könnten.
Das Gebläse habe ich bei Digikey bestellt. Der Hersteller hat momentan allerdings Lieferschwieriegkeiten(ich erwarte auch noch welche).

Hier der Link:

https://www.digikey.de/product-detail/en/sanyo-denki-america-inc/9BMB12P2K01/1688-1378-ND/6192094

Gruß

piggituX
06.07.2020, 21:05
ich habe aus alten Servern noch von denen https://www.infinity-electronic.hk/product/Delta-Electronics_BFB1012HH.aspx einige, der Staubflusentest / Salzkörner Test war damit auch schon mal erfolgreich, ich muss das nun alles mal zusammenfrickeln.

Mir würde es reichen, er saugt den Staub ein vom Parkett.

Robzilla
18.09.2020, 14:25
Sehr cooles Projekt. Auch beeindruckend dass du mit 17 schon so weit bist.

FPGAfan
22.10.2020, 19:45
Danke für euer Lob und die Anregungen.
Ich bin bereits an einem neuen Prototypen, der einige Verbesserungen bekommen soll. Natürlich soll alles weiterhin auf einem FPGA+VHDL basieren.
Außerdem soll das neue Fahrzeug einen 2d-Lidar Scanner fürs Mapping sowie neue Abgrundsensoren bekommen, um auch schwarzen Bodenbelag von Treppenstufen unterscheiden zu können.
Für letztere Anwendung habe ich schon etwas interessantes gefunden:

https://www.elektronikpraxis.vogel.de/optische-sensoren-erkennen-schwarze-und-transparente-oberflaechen-a-875509/

Den gibts bei Mouser und Digikey, mal schauen ob sich damit was anfangen lässt. Hat jemand schon Erfahrung mit dem Sensor?

Moppi
22.10.2020, 20:08
Erfahrung nicht, aber schau Dir die Daten an:

B5W-LB2101

Erfassungsabstand: 10 bis 55mm
Analogausgang mit Spannung von 3.3V bei 5.5cm
Spannungsversorgung: 21,6V bis 26,4V


MfG

morob
13.01.2021, 15:30
gefällt mir sehr, mich würde mal die ungefähren größe interessieren.

FPGAfan
13.01.2021, 21:41
Hi, der Durchmesser liegt bei 31cm, die Höhe beträgt 7cm.

morob
14.01.2021, 07:40
ok, also eigentlich standardmass :)
ich bin auch gerade am überlegen, kaufen oder bauen :)

FPGAfan
23.01.2021, 08:20
Ich habe beim Bauen viel gelernt, allerdings hat es natürlich auch wesentlich länger gedauert, als einfach einen fertigen zu bestellen.
Und mit einem Saugroboter der Bürsten nutzt kann meiner noch nicht mithalten ;).

morob
23.01.2021, 10:04
ich brauche auch nur einen der leichten schmutz, hundehaare+staub und sand aufsaugt.
zeit habe ich, solange werde ich mit einem kärcher durch die wohnung gehen :D

FPGAfan
31.01.2021, 17:18
Dann sollte das ja kein großes Problem darstellen. Falls du noch Fragen zu meinem Roboter hast, immer her damit :)

NRicola
03.02.2021, 07:25
Hi,

das Projekt ist sehr gut! Vor allem finde ich gut, dass du auf einen FPGA zurückgegriffen hast. Mittlerweile mag ich die auch sehr - einfach aufgrund der Parallelität und Unabhängigkeit der einzelnen Prozesse.
Ich hatte eine Weile mit einem Spartan3 und Spartan 6 gearbeitet. Jetzt bin ich voll auf der Microsemi-Schiene. Vor allem, weil die FPGAs sich instant selbst flashen - binnen weniger ms. Das macht dann gar keinen Unterschied mehr zu normalen Mikrocontrollern. Außerdem gefällt mir, dass Libero als alternative zum klassischen Coding in VHDL und Verilog auch "Smart Designs" hat. Da kann man seine eigenen FPGA-Sub-Komponenten grafisch einbinden und miteinander vernetzen. Auch die ganzen Softcores sind dann drag & drop. Das lässt sich nach Belieben auch hin und her wandeln => von Smart Design zu HDL-Code und wieder zurück - wie auch immer man will. Im Gegenzug ist das Modelsim bei Libero ekliger zu bedienen, als das iSim beim ISE Webpack von Xilinx.

Wie ist das bei Intel? Kamst du mit der IDE gut zurecht? Nutzt du dort auch Softcores?
Was würdest du sagen, war das kniffligste bei der Programmierung?
Auf wieviele Hierarchieebenen hast du alles aufgeteilt?
Ich ringe immermal wieder mit mir, ob ich alle Module direkt unter dem top-Modul einbinden sollte oder doch nach Funktionen immer tiefer gestapelt, sodass man dann 3-5 Verschachtelungen untereinander hat.

Grüß, NRicola

morob
03.02.2021, 10:23
Mal eine ganz andere Frage, hast Du das FPGA in C oder VHDL programmiert?

FPGAfan
04.02.2021, 14:06
Hallo, danke für dein Feedback.
ich werde mir Libero mal anschauen, hört sich interessant an.


Wie ist das bei Intel? Kamst du mit der IDE gut zurecht?

bei Intel verwende ich die Quartus Prime Design Suite, mit welcher ich gut zurechtgekommen bin. Allerdings gefällt mir Vivado etwas besser, da die Simulationstools direkt mit in die Software eingebunden sind und der Designflow(Flow manager) aus meiner Sicht etwas strukturierter ist.
Zur Simulation bei Intel nutze ich Modelsim.


Nutzt du dort auch Softcores?

Nein, nur reinen VHDL-Code


Was würdest du sagen, war das kniffligste bei der Programmierung?

Ich würde sagen, bei der Fehlersuche wirklich am Ball bleiben, auch wenn es lange dauert und mühselig ist


Auf wieviele Hierarchieebenen hast du alles aufgeteilt?

Also abgesehen von der Toplevel gab es Anfangs keine weitere Ebene, ich habe aber nachträglich noch eine erstellt, für Sensorschnittstellen, Aktoren, etc.
Insgesamt also 2

Ich ringe immermal wieder mit mir, ob ich alle Module direkt unter dem top-Modul einbinden sollte oder doch nach Funktionen immer tiefer gestapelt, sodass man dann 3-5 Verschachtelungen untereinander hat.
Stimmt. Ich bin eigentlich kein großer Fan von vielen Modulen im Strukturstil, deswegen verwende ich sie nur wenn sonst wirklich die Übersichtlichkeit darunter leiden würde. Für den Nachfolger habe ich bereits eine Lidar-Schnittstelle entworfen und bin jetzt an dem IMU. Da die Kommunikation komplexer wird, fange ich momentan an mehrere Ebenen zu nutzen, der Schreibaufwand ist natürlich größer

- - - Aktualisiert - - -



hast Du das FPGA in C oder VHDL programmiert?

Die Schaltung habe ich nur in VHDL beschrieben

grafikkarteXY
19.04.2021, 11:26
Ich fände eine Erfindung gut, bei dem der Staubsaugerroboter auch die Ecken richtig sauber machen könnte. Es wäre doch denkbar, dass ein Roboterstaubsauger, wie bei einem "normalen" Staubsauger, selbstständig die Aufsätze wechselt. Wenn er dann an eine Ecke kommt, dann wird ein kleinerer Aufsatz ausgewählt. Ist sowas bereits möglich?