knotti2010 Geschrieben March 8, 2014 at 22:21 Geschrieben March 8, 2014 at 22:21 Hallo Tinkerforge-Gemeinde! wollte euch mal kurz mein anstehendes Projekt für meine Seminarfacharbeit zeigen. Thema ist: "Planung, Bau und Programmierung eines C# gesteuerten autonomen Roboters mit Hilfe von Tinkerforge" Ich bin bis jetzt auch gut vorangekommen, hätte nun aber ein paar Fragen zur Linienerkennung. Habe (wie man hoffentlich auf den Bildern erkennen kann) 3 Line-Sensors auf der Unterseite des Fahrgestells montiert, und lasse diese jetzt mit Hilfe des Threshold-Callbacks auslesen.. Nun habe ich aber nur eine einfach if Abfrage programmiert. Bei der, der Rover ziemlich "unflüssig" die Linie entlangfährt (leider per WLAN auch nur mit halber Geschwindigkeit, da sonst die Befehle nicht sofort verarbeitet werden, Besserung erhoffe ich dann durch den RED-Brick! ). Und nun währe die erste Frage ob ihr eine Formel kennt, welche die Differenz oä. von den Line-Sensors auswertet und eine "flüssige" Erkennung der Linie liefert. Verbaut sind bisher: 1 Step-Down-Power-Supply 2 Master-Bricks 2 DC-Bricks 1 WIFI-Extension 3 Line-Sensors Hier mein bisheriger Code: public static void Linie() { short zahl = ipcon.GetConnectionState(); if (zahl !=1) ipcon.Connect(HOST, PORT); line_left.SetDebouncePeriod(100); line_middle.SetDebouncePeriod(100); line_right.SetDebouncePeriod(100); line_left.ReflectivityReached +=line_left_ReflectivityReached; line_middle.ReflectivityReached += line_middle_ReflectivityReached; line_right.ReflectivityReached += line_right_ReflectivityReached; line_left.SetReflectivityCallbackThreshold('<', 1300, 0); line_middle.SetReflectivityCallbackThreshold('<', 1300, 0); line_right.SetReflectivityCallbackThreshold('<', 1300, 0); } private static void line_middle_ReflectivityReached(BrickletLine sender, int reflectivity) { if (reflectivity < 100) { movement.stop(); return; } movement.forward(25000, 0, 3000); } private static void line_right_ReflectivityReached(BrickletLine sender, int reflectivity) { if (reflectivity < 100) { movement.stop(); return; } movement.left(25000, 0, 3000); } private static void line_left_ReflectivityReached(BrickletLine sender, int reflectivity) { if (reflectivity < 100) { movement.stop(); return; } movement.right(25000, 0, 3000); } Später soll dann auch noch die Umgebung per IR-Sensorik abgetastet werden, vllt. gibt es dafür ja eine ähnliche Lösung. Vielen Dank schonmal im Vorraus Zitieren
Nemo Geschrieben March 10, 2014 at 09:11 Geschrieben March 10, 2014 at 09:11 Hallo knotti2010, ich kann dir glaube ich jetzt nicht weiterhelfen, aber ich habe ein paar Fragen: - Wo hast du das "Grundteil" also den Unterbau mit den Ketten her und was kostet der? - Warum packst du nicht einfache ein Raspberry Pi mit auf das Gerät? Dann musst du es nicht mehr mit WLAN ansprechen und hast so einen Ausfallfaktor weniger. Wegen der Umgebungsabtastung mit IR-Sensorik schau mal hier nach. Gruß, Nemo Zitieren
The_Real_Black Geschrieben March 15, 2014 at 12:11 Geschrieben March 15, 2014 at 12:11 http://www.conrad.de/ce/de/product/191152/Arexx-Fahrgestell-Robby-RP5RP6-Roboter?ref=searchDetail Sieht mir sehr nach diesen unterbau aus. Ich verwende auch diesen Unterbau und mir ist leider der Raspi auf dem Roboter zu "schwer", da ich dann größere Akkus darauf Packen müsste und dass gestell sich nicht mehr bewegen wollte. @knotti2010 Welche Akkus verwendest du außer die Normalen AAA zum Motorberieb? Zitieren
knotti2010 Geschrieben March 15, 2014 at 14:13 Autor Geschrieben March 15, 2014 at 14:13 Den Unterbau habt ihr ja schon gefunden. Kostet ca. 30-40 Euro. Das einzigste was mich vom Pi abhält ist eigentlich die Tatsache das ich mich damit nur sehr gering auskenne und auch nur die Programmiersprache C# kann. Ein nächstes Problem damit wäre dann wohl die Windows Anwendung welche ja den Roboter steuern soll und die Daten der Sensoren (zB Temperatur o. Umgebungshelligkeit) auslesen soll. Zu der Problematik Akku hab ich mir auch schon einen Kopf gemacht ich schwanke noch zwischen 6 AA Akkus mit ca. 2600 mAh oder einen Akku Pack wie es auch im Modellbau eingesetzt wird. Zitieren
m0d Geschrieben March 16, 2014 at 18:32 Geschrieben March 16, 2014 at 18:32 kleiner Hinweis, du kannst C# auch auf dem Pi mittels Mono (http://www.mono-project.com/) verwenden. Mono ist als Debian-Paket verfügbar und kann mit apt-get installiert werden. Bei mir läuft z.B. die Erfassung von Wetterdaten auch mit C# auf dem Pi. Probleme hatte ich anfangs mit der Hard Float Version von Raspbian. Mit der Soft-Float Installation läuft jedoch alles problemlos. Zitieren
knotti2010 Geschrieben March 17, 2014 at 12:04 Autor Geschrieben March 17, 2014 at 12:04 Danke m0d, Nach sowas habe ich schon lange gesucht Werde ich nachher mal ausprobieren. Mal schauen ob ich das zum laufen bekomme. Stellt sich dann nur noch die Frage wie ich dann die Oberfläche auf einem normalen PC auswerte usw. Da muss doch der Pi dann als Server konfiguriert werden, oder? Zitieren
The_Real_Black Geschrieben March 20, 2014 at 22:18 Geschrieben March 20, 2014 at 22:18 @m0d Achtung aktuell ist mono auf dem Pi irgendwie nicht frunktionsfähig zumindest bei Oberflächen wirft Mono Fehler. Als Tipp wird immer wieder gesagt man sollte Arch Mono (?) verwenden dass hat den Bug nicht. Ich hab dann nicht viel weitergeforscht, falls jemand das Arch benützt oder mono zum laufen bekommt würde ich mich über eine Info wie er es geschafft hat freuen ^^ Zitieren
m0d Geschrieben March 21, 2014 at 16:29 Geschrieben March 21, 2014 at 16:29 Wie bereits erwähnt gibt es Probleme mit Hard Float, bzw. der HF-Version von Mono. Diese äussern sich auf dem Pi z.B. durch die Ausgabe eines falschen Datums und können wie folgt reproduziert werden: csharp> Console.WriteLine(DateTime.Now); 0/735308/0001 8:18:48 PM csharp> Bei der Soft Float Version von Raspbian konnte ich bisher keine Probleme feststellen. Mittlerweile gibt es jedoch auch eine funktionsfähige HF-Version von Mono http://www.raspberrypi.org/phpBB3/viewtopic.php?f=34&t=62496 --m0d Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.