PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sensoempfehlung



efkalasap
29.11.2016, 10:34
Hallo liebe Com,

ich bin neu hier und freue mich unter euch mich einzumischen. Ich studiere Maschinenbau und bin momentan in einem Projekt im Bereich Robotik mitverwickelt. Und zwar möchten wir einen kleinen Krabbelroboter der nach dem Jansen-Prinzip läuft bauen und benötigen dafür Sensoren wie z. B. einen Abstandssensor, Kantensensor. Da ich noch ganz neu bin im Robotik-Bereich, habe ich nicht eine große Ahnung von Abkürzungen und Fachbegriffen. Wir werden auf jeden Fall den Roboter mit einem Arduino DUE verbauen, 2 Servomotoren per Motor shield mit dem Arduino verbinden. Dazu möchten wir noch einen Positionssensor einbauen, der das Computer-Maus Prinzip nutzt, also so ein Laser unter dem Roboter der die Position misst und feststellt und einspeichert. Theoretisch soll also nach benutzen des Roboters auf dem PC der zurückgelegte weg angezeigt werden.
Ich hoffe ich habe euch nicht mit Anforderungen zerschlagen und es ist nicht zu kompliziert was ich da von meinem Projekt verlange, ich bin für jegliche Tipps, Vorgehensweisen, Erfahrungen und Empfehlungen oder Sonstiges offen.

http://previews.123rf.com/images/pnphoto/pnphoto0906/pnphoto090600001/4959525-Kabellose-Computer-Maus-mit-roten-Laser-in-einem-Tech-Hintergrund-Lizenzfreie-Bilder.jpg

Hier ein Beispiel : https://www.youtube.com/watch?v=HLHGyRVOEss

Der Sensor bringt den Roboter an einer Tischkante dazu zu stoppen und sich umzudrehen. Kann mir jemand solch einen Sensor der einfach und leicht ist empfehlen?

witkatz
29.11.2016, 11:14
Die Krabbelmechanik ist sehr schön und beeindruckend. Wenn du dein Krabbeltier fertig hast, poste uns bitte ein Video.

Die Tischkanten-Sensoren in dem Video sehen mir nach Sharp Distanzsensoren, z.B. so was hier (https://www.reichelt.de/Naeherungsschalter-Distanzsensoren/GP2-0215/3/index.html?ACTION=3&GROUPID=6679&ARTICLE=114320&OFFSET=16&)
Die Auswertung der Sensoren kann man recht einfach realisieren - für diese Art von Kantenerkennung wie in dem Video reicht schon ein einfacher Vergleich des ADC Rohwertes mit einem Festwert.

i_make_it
29.11.2016, 11:55
Man sieht im Video drei Ausleger mit Sensoren.
Das sieht stark nach Sharp GP2 Infrarot Range Sensoren aus.
Da es dort die unterschiedlichsten minimal und maximal Reichweiten gibt, hängt die Auswahl also stark von der Größe und der Position der Sensoren am Roboter ab.
http://webbot.org.uk/WebbotLibDocs2/44839.html
Da bei den Sharp Sensoren die Kennlinie nicht Linear ist, muß man sich dann beim Code auch noch mit Lookup Tabellen befassen um die Kurve in lineare Abstandswerte umzurechnen.
Je nachdem wie Robust (zuverlässig) die Sensorwerte sein sollen, kann man auch noch zusätzlich Ultraschall Sensoren wie den HC-SR04 nehmen.
Damit kann man dann Materialien die für IR durchsichtig sind per US erfassen und US durchlässige (z.B. Bespannung eines Lautsprechers) Stoffe per IR erfassen.
Also das Fehlerrisiko minimieren.

Man kann auch überlegen, ob man die Sensoren beweglich macht.
Der Mensch hat auch 2 Augen die nach vorne ausgerichtet sind, kann aber den Kopf in zwei Achsen drehen und so sein gesichtsfeld deutlich vergrößern.

Ist halt eine Frage der Aufgabenstellung sowie Zeit und Geld das man zur verfügung hat.

Das Prinzip hinter der optischen Maussensoren nennt sich übrigens "optisch Fluß".
https://en.wikipedia.org/wiki/Visual_odometry
http://ri.cmu.edu/pub_files/2011/9/Seegmiller_IROS-2011_Optical_Flow_Odometry.pdf

HaWe
29.11.2016, 13:31
für die Sharp-Sensoren gibt es noch andere Möglichkeiten als Lookup-Tabellen, gerade auf dem Due lassen sich die Entfernungen gut per Formel ausrechnen:

Dcm = ( c * (1/ADv) * (1023/Vref) ) - k;
Dcm == Distanz in cm
ADv == AD-value (0...1023)
Vref (bei Due) == 3.3
k_GP2D120=0.42;
k_GP2D12=4;
k_GP2Y0A21=2;
optional:
c = 1,0 (meist 1 +/- 0,3) (kann man nacheichen)

Die Sharp-Sensoren sind echt klasse, haben einen recht scharfen Erkennungswinkel, nur bei Glasscheiben als Hindernis funktionieren sie erwartungsgemäß nicht.
http://www.mindstormsforum.de/viewtopic.php?f=78&t=8491&start=45#p68970

Ultraschallsensoren (USS) haben einen größeren Detektionswinkel, versagen eher bei "flauschigen" Hindernissen,, aber die Messungen sind störanfälliger, insb. bei Reflex-Echos von mehreren gleichzeitig verwendeten USS. ich empfehle hier eher i2c-Sensoren als rein digitale, die man selber triggern muss. Auch muss man aufpassen, da viele (z.B. HC-SR04) nur 5V-kompatibel sind, und nicht ohne weiteres mit den 3,3V vom Due laufen.
http://www.mindstormsforum.de/viewtopic.php?f=78&t=8491&p=69272#p69272
http://www.mindstormsforum.de/viewtopic.php?f=78&t=8491&p=69272#p69273



An einem Lasersensor, der die Bewegung über mehrere cm misst (und nicht nur im mm-Bereich wie bei einer Maus) wäre ich selber auch äußerst interessiert.

oberallgeier
29.11.2016, 13:49
.. Da bei den Sharp Sensoren die Kennlinie nicht Linear ist, muß man .. um die Kurve in lineare Abstandswerte umzurechnen ..Bei mathematischen Fragen neige ich sehr zu Einfachheit, Vereinfachung und (Stellen-)Abstrichen. Wer nicht immer (unsinnigerweise) bis vier oder fünf Stellen hinterm Komma rechnen will (ist Buxtehude nun 433,23 km weg oder nur 433,18 - ist doch wirklich Kappes) der kann sich vielerlei Aufwand sparen. Hoher (rechnerischer) Aufwand zeigt ja eher das Gegenteil von guten Mathekenntnissen.

Beim Sharp - besser: bei den von mir benutzen GP2D120ern - rechne ich entsprechend vereinfacht, siehe hier (https://www.roboternetz.de/community/threads/36884-Basic%28-Billig-Baby%29-Mono-Wheel?p=352718&viewfull=1#post352718). Dabei berücksichtige ich natürlich die Gültigkeitsgrenzen des Sharps.

Mit dem Ergebnis kann man jetzt ein Fenster abstecken, Nah- und Ferngrenze, sodass man sowohl Hindernisse als auch Abgründe erkennt. Dieses System läuft beim Dottie (https://www.roboternetz.de/community/threads/36121-Autonom-in-kleinen-Dosen-R2_D03-Nachfolger-R3D01?p=358306&viewfull=1#post358306) - aber auch beim MiniD0 (https://www.youtube.com/watch?v=jgm9DhS7vS4), da aber mit deutlich einfacheren+günstigeren Entfernungssensoren.

Nachtrag: Da fällt mir Team Iwan ein und dessen sauber-ausführliche Darstellung (http://www.team-iwan.de/technik/sharp1.php) von Messfunktion und Funktionsgrenzen eines Sharps.

HaWe
29.11.2016, 15:04
einer der vielen Vorteile vom Due ist doch u.a., dass er mit floats sehr schnell rechnet, und man muss sich bei floats auch überhaupt keine Gedanken um die Stellen machen - es sei denn, man wollte mit double rechnen.

ein Einzeiler für einen Due-Sketch berechnet die Entfernung direkt aus dem ADC-Wert, und das ist doch nun überhaupt kein Hexenwerk:


if(analogRead(A0)) !=0) {float Dcm = ( 1.0 * (1/ (float)analogRead(A0) ) * (1023.0/3.3) ) - 4.0;}

Werte für den Sensorport (A0), c (1.0) und k (4.0) können variiert und explizit oder über Konstanten eingebunden werden.

Anm.:
Sinnvollerweise deklariert man
float Dcm;
auch bereits im Funktions-Kopf oder global, nicht erst lokal innerhalb der if-Klammer {...}.

und natürlich kann man Gültigkeitsgrenzen der Sharp-Sensorbereiche noch gesondert behandeln.
Ansonsten erfolgt die Auswertung ganz normal über

if( Dcm > Grenzwert ) { ... }
else { ... }

efkalasap
06.12.2016, 10:01
Vielen Dank für die hilfreichen Antworten bin ein ganzes Stück schon weitergekommen, könnte mir einer kurz erklären was ADC und Lookup Tabellen bedeutet?
Und noch eine Frage wäre: Wie finde ich eine passende Kombination von einem passendem Elektromotor (für Modellbau, wie beim Rennauto) und einem Motorshield zum Arduino? Also mein Krabbelroboter soll ja 2 Elektromotoren als Antrieb haben, aber da gibt es ja Komplikationen was die Stromversorgung, Voltanzahl etc. betrifft und man einen Motorshield benutzen muss.

Sisor
06.12.2016, 10:51
Vielen Dank für die hilfreichen Antworten bin ein ganzes Stück schon weitergekommen, könnte mir einer kurz erklären was ADC und Lookup Tabellen bedeutet?
ADC: Analog Digital Converter [Analog-Digital-Umsetzer] (https://de.wikipedia.org/wiki/Analog-Digital-Umsetzer)

Lookup-Tablelle: Statt Werte im Betrieb zu berechnen, werden die Ergebnisse vorberechnet und im Speicher abgelegt. Das funktioniert, wenn die Anzahl an möglichen Eingabewerten nicht zu groß ist. Die ADCs des Arduino sind 10-Bit Umsetzer -> 2^10 = 1024 mögliche Werte -> Lookup-Tabelle mit 1024 Werten nötig.

021aet04
06.12.2016, 10:53
Sollte man mit einer kurzen Suche finden.
ADC = Analog Digital Converter => Wandelt ein Analoges Signal in ein Digitales um, damit man es mit einem Controller verarbeiten kann, die Bit-Angabe gibt die Auflösung an. Die Spannung am Eingang darf max. die Referenzspannung betragen, welcher Spannungsbereich erlaubt ist, ist vom Typ abhängig. Bei Atmegas gibt es verschiedene, entweder 0-VCC, 0V bis interne Referenz (häufig 1,1V oder 2,56V) oder eine Spannung die man am Ref Anschluss anlegt, diese darf aber die Vcc Spannung nicht überschreiten.
Als Beispiel du hast einen 8bit ADC mit 0-5V Messbereich. Legst du eine Spannung von 0V an hast du als digitales Signal ebenfalls 0, legst du 5V an, hast du ein digitales Signal von 255, bei einem 10bit ADC wäre es 1023.

Eine Lookup Tabelle ist einfach eine Tabelle in der man nachschaut um Werte anzupassen. Als Beispiel, du hast einen Temparatursensor, der nichtlinear ist, du willst aber ein lineares Signal haben. Du legst eine Tabelle an mit den Messwerten an und den entsprechenden Temparaturen. Z.B. ADC Wert 100 entspricht 20°C, ADC Wert 120 entspricht 23°C, ADC Wert 140 entspricht 30°C. Eine Lookup Tabelle wird auch zum Kalibrieren von Sensoren u.Ä. genutzt.

Wie du eine passende Kombination findest ist relativ leicht. Du musst zuerst wissen was du willst, Beschleunigung, welche Kräfte benötige ich, Endgeschwindigkeit,... das ist das schwierigste. Mit diesen Parametern kannst du den passenden Motor wählen, muss man Positionieren nimmt man eher einen Schrittmotor (zumindest im Hobbybereich), benötigt man nur eine Drehzahl (nicht positionieren) nimmt man eher einen DC oder BLDC Motor. Ein DC Motor ist leicht anzusteuern, dieser hat nur 2 Anschlüsse, Nachteil ist aber der Verschleiß der Bürsten, Bürstenfeuer (=Störung),... Der BLDC hat keine Bürsten, dadurch ist dieser schwieriger anzusteuern (man hat 3 Wicklungen, die man zum richtigen Zeitpunkt schalten muss). Wenn man den passenden Motor gewählt hat muss man den passenden Treiber wählen, der die nötige Spannung und den nötigen Strom verkraftet.

MfG Hannes

oberallgeier
06.12.2016, 13:37
.. Krabbelroboter der nach dem Jansen-Prinzip .. einen Positionssensor einbauen, der das Computer-Maus Prinzip nutzt ..Wie groß schätzt Du denn bei dem Jansen-Krabbeltier den Schlupf - sprich: die tatsächlich bewegte Länge wenn eine vorgegebene Länge für einen bestimmten Lauf zugrundegelegt wird ? Die Computermaus als Positionssensor ist ja nicht unbekannt und nicht unpraktsich, bringt aber keine genau reproduzierbaren Werte. Die Navigation mit der Maus ist einerseits nicht absolut sondern (nur) relativ und andererseits mit etwas Fehler behaftet. Aber ich hoffe, dass Dir das ja schon bekannt ist. Das Auslesen eines "Computermaus-Sensors" wird also eher nicht als absolute Postion zu verstehen sein sondern als Ergebnis einer mehr oder weniger genau nutzbaren Koppelnavigation relativ zum Ausgangspunkt.

Ziemlich schön ist die Zusammenstellung über den Sensor "Computermaus" und seine Auswirkung von mausi_mic (https://www.roboternetz.de/community/attachment.php?attachmentid=29436&d=1417633719). Weitere gute Beschreibungen zur Navigation mit Mäusen bringt durch einfache Suche zahlreiche Ergebnisse.

Crazy Harry
06.12.2016, 22:02
Falls es jemand interessiert: Die Mechanik wurde (ich meine) letztes Jahr in einer Ausgabe von c't Make (ehemals Hacks) erklärt.

efkalasap
12.12.2016, 12:19
Ich habe gemerkt, dass mein Arduino Due nicht kompatibel zu meinem Motor shield (Adafruit Motor shield v2) ist undda evtl. ein Umbau mit 3,3V logic Jumper erforderlich ist, und da ich den erforderlichen Speicher von meiner Bewegung nicht einschätzen kann bi nicht in der Lage einen Mikrocontroller auszuwählen, hätte mir evtl. jemand einen KombinationsVorschlag was diesen E-Motor + Arduino Board + Motor Shield + Distanzsensor (Ultraschall/infrarot)
E-Motor: https://www.conrad.de/de/micro-getriebe-g-1000-sol-expert-g1000-metallzahnraeder-11000-1-bis-15-umin-1289388.html