The_Real_Black Geschrieben June 16, 2012 at 16:55 Geschrieben June 16, 2012 at 16:55 zu deiner ersten Frage: ja... Meine Enumerationen sollen in die Datenbank gespeichert werden. Ebenso sollen alle Einstellungen wie "welche UID der DCBricks ist welche Kette" auch in der DB Landen -> wenn keine DB vorhanden ist soll eine Eingabeform erscheinen in welcher man die Bricks den Motoren zu ordnen kann. Damit kann man den Code verwenden egal welchen Brick man gerade verwendet. Zitieren
The_Real_Black Geschrieben June 17, 2012 at 19:17 Geschrieben June 17, 2012 at 19:17 http://www.therealblack.net/TFUploads/TRB_Bot.7z http://www.therealblack.net/TFUploads/Optionen.png Update Time! Heute Icon Pack: Die 100x100, 200x200 und 500x500 Icons dürfen auch gerne als Avatare verwendet werden ;-P Pfad: TRB_TF_RoboterProjekt\Utils\Dokumente\Icons_100 Die Liste im Bild erstellt sich über meine Enumerations Utils bereits. ansonsten haben die Dinger noch keine Funktion... Ich werde die Brickverwaltung etwas nach hinten schieben und am Bot weiter Coden. Zwar wäre es schöner die Optionen sehr Variabel zu halten, aber es braucht doch etwas Zeit alles implementiert zu bekommen. Auf Option soll sich eine Eingabe maske für jeden Typ einzeln öffnen. Speichern und Laden soll die Einstellungen in die DB schreiben. Die Punkte zeigen in verschiedenen Farben an ob die daten bereits in der DB waren oder ob ein benötiger Brick(Typ) nicht gefunden wurde. Die DB wird nun auch mit Initial Daten geschrieben: Anwendungsstellen Antieb links\rechts, Sensor vorne usw und auch die Bricktypen Master, DC usw werden aus meinen Enum in die DB geschrieben. @TF: könnte man die Brick\Bricklets und Extention Typen im Generator in ein Enum generieren? So würde jeder die gleichen IDs verwenden können wenn ein Bricktyp abgefragt wird... nur so eine Idee. @all: bei den Verwendungen (Antrieb links\rechts, Sensor vorne usw) kann man noch einiges erweitern wenn es noch wünsche dort gibt. Zitieren
AuronX Geschrieben June 17, 2012 at 21:34 Geschrieben June 17, 2012 at 21:34 Icons dürfen auch gerne als Avatare verwendet werden ;-P Glaube ich nehm mir einfach mal nen Servo ^^ Is ja quasi mein aktuelles Hauptbrick @TF: könnte man die Brick\Bricklets und Extention Typen im Generator in ein Enum generieren? So würde jeder die gleichen IDs verwenden können wenn ein Bricktyp abgefragt wird... nur so eine Idee. Ich bin zwar nicht TF, aber ich versuche mich trotzdem mal: Dein Wunsch wäre ja quasi etwas wie enum Brick {Master, Servo, DC, ...} Das lässt sich denke ich mit den vorhandenen Generator-Daten nicht umsetzen. Bisher hat man eine Liste von Python-Dateien (pro Brick/Bricklet eine) aus denen die Bindings generiert werden. Damit ließe sich zwar ein enum generieren, aber das wäre nicht kompatibel erweiterbar. Das heißt sobald ein neues Brick dazukommt rutscht es alphabetisch (auch das ist genaugenommen nur zufall ^^) dazwischen und würde damit andere IDs generieren. Lange Erklärung kurz zusammengefasst: Man müsste die IDs explizit festlegen, weil es ansonsten bei der Einführung neuer Bricks durcheinander wuselt. @all: bei den Verwendungen (Antrieb links\rechts, Sensor vorne usw) kann man noch einiges erweitern wenn es noch wünsche dort gibt. Habe noch nicht reingeschaut, aber woran ich schonmal ein oder zwei halbe Gedanken verschwendet habe: Es gibt z.B. mindestens drei Bricks die die Aufgabe "Antrieb links" übernehmen können. DC, Servo, Stepper. Der Servo kann sogar Antrieb links, Antrieb rechts, "Kameraneigung" und "Toaster-Auswurf" gleichzeitig wahrnehmen. Das sollte irgendwie modellierbar sein ^^ Zitieren
FabianB Geschrieben June 17, 2012 at 22:26 Geschrieben June 17, 2012 at 22:26 Na da bediene ich mich doch gleich mal <- Tolle Sache!!! Zitieren
The_Real_Black Geschrieben June 18, 2012 at 16:19 Geschrieben June 18, 2012 at 16:19 *ich freu mich* Ja die IDs könnte man fest vergeben irgendwo im Code ID = 1; // (Master) schreiben und im Generator dann C++: BRICK_TYP_MASTER = 1; C# : enum BrickTyp { Master = 1, ... } erzeugen. Bitte einen None\Unknown bedenken -1 als Beispiel. Zitieren
AuronX Geschrieben June 18, 2012 at 16:24 Geschrieben June 18, 2012 at 16:24 Bedenke: C#-Konvention für None ist 0 Zitieren
The_Real_Black Geschrieben June 24, 2012 at 12:49 Geschrieben June 24, 2012 at 12:49 UPDATE! http://www.therealblack.net/TFUploads/TRB_Bot.7z http://www.therealblack.net/TFUploads/Bot1_20120624.png Changelog: ... - Test Projekt mit manueller Steuerung hinzugefügt. - Projekt Bot 1 begonnen: -- Flow Layout Buttons anstelle der fixen Buttons verwendet -- Code Optimeirungen. -- Bot Klasse -> Fasst alle Bricks zusammen. -- Distanz halten Modus hinzugefügt. --- Bot speichert die Entfernung --- und hält diese Entfernung auf +-5 cm -- IO16 Eingang 1 und 7 sind Kollisionsmelder --- Bot fährt zurück und bleibt stehen. -- neue Flow Layout Elemente (Led und Text) --- Verallgemernerung der Elemente von der Brickübersicht. Dieser Stand kann nun einen "Bot" auf einer definierten Distanz halten (+-5cm). Es werden verschiedene Bricks benötigt sonst führt es zu einer Exception! 2 x DC ist im Hauptprojekt fest hinterlegt welche UID welche Kette steuert. Leider hängt eine Kette immer wieder beim drehen... entweder es blockt irgendwas die Mittelung oder die Spannung ist zu gering! Am IO16 ist Port B Pin 0 und 7 für die Kollisionserkennung gedacht. Beim Beenden der Hauptform wird dank der Utils (FormClosed Utils) ein angeschlossener LCD ausgeschaltet und die Leds des IMU wird deaktiviert. Zitieren
The_Real_Black Geschrieben July 1, 2012 at 13:10 Geschrieben July 1, 2012 at 13:10 http://www.tinkerunity.org/wiki/index.php/The_Real_Blacks_Wetterstation Es ist kein Mond, es ist eine Wetterstation! *uh?* Wie auch immer... Es gibt eine neue Klasse welche ich hier einzeln veröfentliche: Wetterstation für die Bricklets - Umgebungstemperatur - Lichtstärke - Luftfeuchte alle Bricklets sind Optional und können im Konstruktor als null übergeben werden. Das erzeugte HTML\XML ist als HTML5 aufgebaut und kann mit einen in der Klasse hinterlegten und änderbaren CSS formatiert werden. Spalten der Tabelle haben identische IDs Zeilen der Tabelle haben abwechselnd lineA und lineB als Klasse. So sollten alle Formatierungswünsche erfüllt sein ^^ Es kann ein Speicher-Pfad angegeben werden damit sollte es auch möglich sein, dass ihr das XML in einen Webroot legt und dann aus dem Netz darauf zugreift (lokal klappt es gut). Zitieren
The_Real_Black Geschrieben October 2, 2012 at 14:57 Geschrieben October 2, 2012 at 14:57 http://www.therealblack.net/TFUploads/TRB_Bot.7z Update Time: neues Projekt eine Fernbedienung für meinen Bot. - neue Klassen zur Verwaltung der Fernbedienung - neue Anzeigecontrols für die Fernbedienung - und ein Test Projekt dafür Außen: http://www.therealblack.net/TFUploads/FB_Box_A.jpg Innen: Programm: Zitieren
The_Real_Black Geschrieben October 2, 2012 at 18:22 Geschrieben October 2, 2012 at 18:22 Leider steht mein Source vor einen Problem... die Connections und alle anderen Utils sind auf Singeltons ausgelegt, da muss ich die nächste Zeit alles auf "Doubletons" umstellen oder was besseres überlegen... -> Next Target: Neufassung der Utils Klassen! -> Ziel: Dynamische Anzahl von Verbindungen zulassen! -> Connections zum Bot, zur Fernbedienung und zu einer Wetterstation sollte möglich sein... Zitieren
Dommar92 Geschrieben October 11, 2012 at 18:04 Geschrieben October 11, 2012 at 18:04 Hallo! Ich habe soeben euren Thread gelesen und bin von Blacks bisheriger Arbeit sehr begeistert! Ich darf mich mal kurz vorstellen: Ich bin Domme, 20, Informatikstudent und möchte meinen softwarebeschränkten Horizont auch in Richtung Hardware erweitern Habe dazu ein wenig investiert und mir einen Raspberry Pi zugelegt (Versandzeit wahrscheinlich noch 6-8 Wochen -.-) plus Master-, Servobrick und 4 IRs von hier. Ich hab mir schon einige Gedanken zum Thema Robotik gemacht und bin zu dem Schluss gekommen, dass ein laufender, sprechender und vor allem *zuhörender* Roboter im Pandakostüm nicht gerade etwas ist, was ich als *Neuling* erreichen kann. Nach diesem Rückschlag hat mich der Thread richtig aufgebaut Nun gut ich werde mich, sobald meine Teile ankommen, daran versuchen die sehr gute Idee des Radars nachzubauen, wobei ich leider nur die IRs bis 30cm bestellt habe. Sollte für eine Navigation durch ebenes Gelände aber ausreichen So ich will ja nicht nur labern, ich habe auch eine Frage bezüglich der Servos. Ich habe noch keine bestellt, weil ich mir sicher sein will welche ich hole. Beim durchstöbern diverser Shops zu Modellbau, etc. ist mir vor allem der hohe Preis der Servos aufgefallen und ich brauche zunächst drei: zwei für den Antrieb der Räder (Ketten von LEGO ) und einen für das Radar, an dem zwei entgegengesetzte IRs angebracht werden, um beide Richtungen gleichzeitig zu mappen. Über Vorschläge freue ich mich Ich würde mich auch gerne im Forum beteiligen, um meine Erfahrungen und Fortschritte zu dokumentieren LG, Domme Zitieren
The_Real_Black Geschrieben October 13, 2012 at 11:14 Geschrieben October 13, 2012 at 11:14 Hallo erst mal und noch viel Spaß und Erfolg mit Tinkerforge. Schön, dass dich mein Thread wieder aufgabaut hat. In welcher Sprache wirst du entwickeln? Ich habe mir 3 Servos bei Conrad gekauft die beiden RS-2 von Modelcraft sind jetzt nicht zu teuer, dafür aber etwas groß auf meinen kleinen Roboter. Einen kleineren Servo habe ich mir auch gekauft, aber die Flügel dafür sind zu klein, dass ich den IR Sensor daran anschrauben konnte. Zitieren
Dommar92 Geschrieben October 15, 2012 at 15:17 Geschrieben October 15, 2012 at 15:17 Meine Bricks sind vorgestern angekommen, habe dann gleich noch ein paar IRs zum austauschen mit höherer Reichweite nachbestellt, müsste auch bald kommen (Irgendwie war mir 4-30 cm doch zu wenig). Hab mir überlegt das Gerüst mit Lego aufzubauen, hab ich noch Kistenweise im Keller Ist irgendwie optimal, besonders weil ich noch einige 9V Motoren habe, die krame ich grade raus. Als Stromversorgung hab ich mir noch einen 10000mAh Akku geleistet, läuft auf 9/12V, hat 2 USB-Anschlüsse und sollte für die Bricks und den PI reichen. Ansonsten kommen noch ein paar 9V Blöcke dran, Hauptsache das Ding ist mobil. (Hier: http://www.amazon.de/gp/product/B0067XRL56 ) Einen Servo habe ich bestellt, Robotbase RB-65PG Servo Motor, bei EXP-Tech für 10,50€. Sollte der nichts taugen egal, war ja nicht allzu teuer Solange das mit dem PI noch dauert, starte ich einfach mal die Programmierung per Laptop, würde mich zu Java hingezogen fühlen, die API ist umgänglich und ich hab Erfahrung damit. Zitieren
Dommar92 Geschrieben October 16, 2012 at 18:18 Geschrieben October 16, 2012 at 18:18 Mein Servo ist angekommen Doof bin ich, dass ich nicht schaue, welchen maximalen Rotationswinkel das Ding hat -.- nämlich nur in Summe 45°. Also hab ichs versucht zu modden, hab de Stopper entfernt, aber den Poti drin gelassen, da ich keine Wiederstände im Haus habe... Wäre auche igentlich schön die 90° einfach auf 180 zu stretchen, aber dazu bräucht ich dann wieder ein extra Gerät für schlappe 20€... ne danke :/ Der läuft jetzt erstmal noch so wie vorher, allerdings dreht der etwas höher wenn ich die Periodität etwas erhöhe... dann scheint das aber unkontrollierbar zu sein und der Motor stottert wie sonst was :/ Habe mal zwei nachbestellt, die angeblich bis 180° drehen, ist aber aus den USA, dementsprechend dauerts dann mit der Lieferung. Aber was erfreuliches: Habe erfahren, dass der Pi jetzt mit 512mb RAM ausgeliefert wird, und das in drei Wochen Wäre cool auch mal von euren Projekten wieder was zu hören! Wie läufts? Zitieren
The_Real_Black Geschrieben February 16, 2013 at 13:41 Geschrieben February 16, 2013 at 13:41 private void butDebug_Click(object sender, EventArgs e) { LogClear(); Type[] typelist = Assembly.GetAssembly((new IPConnection()).GetType()) .GetTypes().Where(t => String.Equals(t.Namespace, "Tinkerforge", StringComparison.Ordinal)).ToArray(); SortedList<int, String> list = new SortedList<int, string>(); for(int i = 0; i < typelist.Length; i++) { //Log(typelist[i].Name); FieldInfo info = typelist[i].GetField("DEVICE_IDENTIFIER", BindingFlags.Public | BindingFlags.Static); if(info != null) { object value = info.GetValue(null); //Log(typelist[i].Name + "\t" + value.ToString()); list.Add((int)value, typelist[i].Name); } } foreach(KeyValuePair<int, string> kvp in list) { Log(kvp.Key + "\t" + kvp.Value); } } Was macht es: 11 BrickDC 13 BrickMaster 14 BrickServo 15 BrickStepper 16 BrickIMU 21 BrickletAmbientLight 23 BrickletCurrent12 24 BrickletCurrent25 25 BrickletDistanceIR 26 BrickletDualRelay 27 BrickletHumidity 28 BrickletIO16 29 BrickletIO4 210 BrickletJoystick 211 BrickletLCD16x2 212 BrickletLCD20x4 213 BrickletLinearPoti 214 BrickletPiezoBuzzer 215 BrickletRotaryPoti 216 BrickletTemperature 217 BrickletTemperatureIR 218 BrickletVoltage 219 BrickletAnalogIn 220 BrickletAnalogOut 221 BrickletBarometer 222 BrickletGPS 223 BrickletIndustrialDigitalIn4 224 BrickletIndustrialDigitalOut4 225 BrickletIndustrialQuadRelay 227 BrickletVoltageCurrent Hier bekommt man einfach und sauber alle Namen und IDs der Bricks bzw. Bricklets raus. Dann verfeinern wir noch die Ausgabe: string tmp = kvp.Value; if(tmp.StartsWith("Bricklet")) { tmp = tmp.Replace("Bricklet", "Bricklet "); }else { tmp = tmp.Replace("Brick", "Brick "); } Log(kvp.Key + "\t" + tmp); Dann sieht die Ausgabe noch besser aus: 16 Brick IMU 21 Bricklet AmbientLight Dass ganze packt man dann in eine Utilsklasse als Dictonary<int, String> oder als Infoklasse welche angibt ob es Brick oder Bricklet ist und kann sich so die Namen der angeschlossenen Bricks ausgeben lassen. Vorteil ist, dass egal was TF nun an neuen Bricks liefert man immer alle Bricknamen geliefert bekommt. Zitieren
AuronX Geschrieben February 20, 2013 at 09:43 Geschrieben February 20, 2013 at 09:43 Und es wäre einfach nur geil wenn es dieses Dictionary direkt aus den Bindings gäbe, man also keine Reflection dafür einsetzen müsste. Aber sehr gute Arbeit! Zitieren
The_Real_Black Geschrieben February 20, 2013 at 20:32 Geschrieben February 20, 2013 at 20:32 Danke Ja es wäre schon nützlich, aber man kann, wenn man es selbst macht, auch hier eine Übersetzung einbauen. @Topic: Ich werde die nächste Zeit noch etwas weniger hier schreiben, da ich meine Implementierungen überarbeiten werde mit dem 2.0 Bindings. Im Moment überlege ich wie ich mir die Bricks Speichere: - Liste mit allen Bricks und Bricklets - Liste mit Bricks \ je Stack * Liste ist hier ein Dic<String(UID), Brick> Dann werden die Bricks und Bricklets Objekte miteinander verknüpft. Brick_Info{ Dic<String, Brick> Stack; Dic<String(Port), Bricklet> Angeschlossen; Brick brick; // Dieser Brick // + Infos } Zitieren
AuronX Geschrieben March 7, 2013 at 18:23 Geschrieben March 7, 2013 at 18:23 Für alle die es interessiert: https://github.com/Tinkerforge/generators/pull/37 Habe mal einen Vorschlag gemacht wie man die Sache mit den DeviceIds elegant in die C#-Bindings (und in der Form auch für Java und Co) einbringen könnte. Zitieren
The_Real_Black Geschrieben March 7, 2013 at 18:51 Geschrieben March 7, 2013 at 18:51 Würde so gut aussehen ^^ Zitieren
The_Real_Black Geschrieben March 9, 2013 at 18:00 Geschrieben March 9, 2013 at 18:00 Ich habe mir in C# gerade ein Tool geschrieben (dass oben gezeigte angepasst) welches mir für jeden Brick(let) Typ die Folgende Zeile ausgegeben hat: case BrickDC.DEVICE_IDENTIFIER: inf.dev = new BrickDC(uid,conn); break; dieses dabe ich dann in ein switch in meinen Java Source gepackt... Sinn dieser Zeilen ist es auf Unterscheidung des DEVICE_IDENTIFIER sofort die korrekten Konstruktor zu erhalten. Und später alle Bricks einzeln abzufragen und auf meine JSP Seite zu packen. Zitieren
The_Real_Black Geschrieben March 9, 2013 at 20:56 Geschrieben March 9, 2013 at 20:56 Updates: - Source Files (JSP und Java) - Jetzt noch ein Bild: Diese Seite läuft "gerade" auf meinen RaspPi\Tomcat7\Webserver. Zwar muss die Seite 2 mal aufgerufen werden, da die Enumeration ein paar Sekunden benötigt um die Bricks zu erfassen und ich keine Wartezeitem beim ersten Laden eingebaut habe ^^ Die Anzeige erfolgt nach bekannten Prinzip wie bei meinen C# Projekten bei jeden Enumerations-Callback wird ein Objekt der BrickInfo Klasse angelegt und in einer Liste verwaltet. Zusätzlich wird sofort das passende Objekt erzeugt. Eine Methode in der BrickInfo Klasse beinhaltet die Liste der Bricknamen (erzeugt per C# Tool von oben) und eine Methode welche mit einen kurzen Text je Brick Typ ausgibt (siehe Wert Spalte in der Tabelle). Info: In der heutigen Version sind nur wenige der Bricks implementiert. Auch lässt sich über die Infos beim LCD streiten ^^ Hinweise: In der de.TheRealBlack.Utils Klasse gibt es eine Methode welche Entwicklungssystem vom PI unterscheidet. Dies geschieht anhand des Hostnamens hier müsst ihr bei identischen Aufbau euren Hostnamen eintragen. BrickWrapper ist ein Singelton welches die Connection von TF zwischenspeichert, dass nicht mehrere Connections angelegt werden. Hier wird hier Port und Host IP angegeben und die gefundenen Bricks verwaltet. Roadmap: Java Skripte erstellen damit man die Bricks Steuern kann. Edit: onclick="SendReq('/AJAX/BrickletLCD20x4.jsp', '7ZG', 'SwitchLight', caller)" Ich kann nun über meine Seite das Licht des BrickletLCD20x4 an und ausschalten *hip hip!* Zitieren
The_Real_Black Geschrieben March 10, 2013 at 20:22 Geschrieben March 10, 2013 at 20:22 Download Jeder Brick und Bicklet benötigt im Moment eine eigene JSP Seite um die AJAX Requests zu verarbeiten. Einige sind bereits Implementiert (siehe Bild) andere Benötigen etwas mehr Zeit. ^^ Im Moment gibt es 2 Handler der eine gibt Statusinformationen zurück ob Aktion erfolgreich war oder nicht die andere schreibt wie im Bild gezeigt die Werte hinaus. Was im Bild nicht gezeigt ist ist eine Eingabemaske für LCD Bicklets hier können Texte frei plaziert werden, das Licht geschalten oder das Display gelöscht werden. So könnte man auch kleine Nachrichten übermitteln. Ich denke darüber nach, dass ich auch Lichtstärke als Bild ausgeben könnte... oder die IO Bricklets per kleine Symbole... bei Temperatur oder Poti könnte man auch Balken oä ausgeben... viel viel ist noch zu tun.. Zitieren
The_Real_Black Geschrieben July 4, 2013 at 19:00 Geschrieben July 4, 2013 at 19:00 Code gibt es keinen, aber ein kleines Video. Zitieren
AuronX Geschrieben July 5, 2013 at 07:37 Geschrieben July 5, 2013 at 07:37 Warum bewegt er sich in die eine Richtung immer so fix und in die andere zittert er so langsam? War das absicht (zwei Geschwindigkeiten probiert) oder ist das ein ungeklärtes Phänomen? Sieht auf jeden Fall ziemlich cool aus Im eigenen Drucker gedruckt oder online drucken lassen? Zitieren
The_Real_Black Geschrieben July 5, 2013 at 17:51 Geschrieben July 5, 2013 at 17:51 @AuronX: Diese Frage muss ich leider an das TF Team weiter geben, da ich nur am Anfang einmal -90 , -45 , 0 , 45 , 90 angesteuert habe und dann der Servo Test vom BrickV gelaufen ist. ^^ Dies habe ich im eigenen Drucker gemacht hat ein paar Anläufe gedauert bis alles sauber gedruckt wurde und die Servo-Arme stabil waren. Ein paar Versuche brachen bei der ersten Drehung ab. 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.