knotti2010 Posted March 8, 2014 at 10:21 PM Share Posted March 8, 2014 at 10:21 PM 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 Quote Link to comment Share on other sites More sharing options...
Nemo Posted March 10, 2014 at 09:11 AM Share Posted March 10, 2014 at 09:11 AM 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 Quote Link to comment Share on other sites More sharing options...
The_Real_Black Posted March 15, 2014 at 12:11 PM Share Posted March 15, 2014 at 12:11 PM 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? Quote Link to comment Share on other sites More sharing options...
knotti2010 Posted March 15, 2014 at 02:13 PM Author Share Posted March 15, 2014 at 02:13 PM 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. Quote Link to comment Share on other sites More sharing options...
m0d Posted March 16, 2014 at 06:32 PM Share Posted March 16, 2014 at 06:32 PM 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. Quote Link to comment Share on other sites More sharing options...
knotti2010 Posted March 17, 2014 at 12:04 PM Author Share Posted March 17, 2014 at 12:04 PM 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? Quote Link to comment Share on other sites More sharing options...
The_Real_Black Posted March 20, 2014 at 10:18 PM Share Posted March 20, 2014 at 10:18 PM @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 ^^ Quote Link to comment Share on other sites More sharing options...
m0d Posted March 21, 2014 at 04:29 PM Share Posted March 21, 2014 at 04:29 PM 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 Quote Link to comment Share on other sites More sharing options...
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.