PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Womit am besten GUI zur Roboter Steuerung programmieren?



Sebas
17.01.2012, 19:54
Schönen Abend allerseits,
Ich möchte für mein nächstes größeres Projekt ein Programm schreiben mit dem ich den Roboter fernsteuern kann. Aber womit mache ich das am besten? Habe schon ein wenig mit Visual C++ gespielt( Fenster mit Buttons um Lichter am Arduino an- und auszuschalten). Das ging soweit auch einfach.
Allerdings möchte ich mehr machen als die Standard Formen sondern unter anderem Google Maps einbinden, und eigene Anzeigen. Da wären z.B.: Ein Kompass, und eine Art Radar (Sharp auf Servo). Kommunikation zwischen PC und Bot soll über einen COM-Port laufen.
Da wird es schon schwieriger.
Womit sollte ich sowas Programmieren? Ich würde mich eigentlich in fast jede (gängige) Sprache einarbeiten.
Hier wird einem ja ziemlich davon abgeraten sowas mit Visual C++ (in Verbindung mit Windows Forms) zu machen:
http://www.c-plusplus.de/forum/263084-full
Allerdings nennt er auch schon einige Libs mit denen das wohl ganz gut gehen soll und zwar wxWidgets, GTK und QT.
Womit habt ihr schon gute Erfahrungen gemacht?
Wichtig wäre halt die Möglichkeit (relativ) einfach eigene Formen zu erstellen zu können, ausserdem soll die Kommunikation zwischen PC und Bot über einen COM-Port laufen.
Ich freue mich auf eure Anregungen.

mfg Sebastian

arnoa
18.01.2012, 08:53
Hallo Sebastian!

Ich hab auch mit C++ begonnen bin aber vor einiger Zeit auf C# umgestiegen und bereue den Schritt nicht. Die Kommunikation zwischen Bot und Rechner ist aber weder in C++ noch in C# ein Problem. Ich hab am Bot ein Arduino Mega Board - dieses gibt mir eigentlich nur die Sensordaten zum Notebook und kümmert sich um die Motoren (welche aber auch vom Notebook angestossen werden).

Meine Oberfläche sieht derzeit so aus:21241

Die Map bzw. das dahinterliegende Routing mache ich mit einer Java-App (osm2po) - d.h. Einbindung von Web oder anderen Applikationen ist überhaupt kein Problem. Grundsätzlich denke ich ist die Wahl der Sprache nicht unbedingt so ausschlaggebende. Die Probleme die zu lösen sind (zumindest bei mir) müssen so oder so umgesetzt werden. Ob z.B. jetzt ein Routing in C++, C#, VB oder was weiß ich, umgesetzt wird ist (fast) egal. Die meisten Sachen laufen eh im Hintergrund, eine Oberfläche ist zwar nett fürs Auge, aber eigentlich für die Funktionalität nicht wirklich notwendig.

LG, Arno

Sebas
18.01.2012, 15:45
Hi,
C# wird ja auch in dem verlinkten Forum empfohlen. Ich denke dass werde ich mir mal runter laden.
Dass das mit den Karten kein Problem ist ist gut zu wissen. Ich will nämlich erstmal fernsteuern und da ist es gut zu wissen wo der Bot ist.
Darum will ich eben auch eine schöne Oberfläche da das Programm ja erstmal nicht wirklich selber arbeitet, sondern einfach nur ein Steuerinterface ist. Wollte damit vll später auch mal einen Modellflieger steuern und dann sind halt so sachen wie ein künstlicher Horizont ganz nett.
Später soll natürlich mehr Autonomität dazukommen,(nicht unbedingt beim flieger) aber auch da will ich wissen was passiert.
mfg Sebastian

radbruch
18.01.2012, 17:11
Hallo

Ich habe mich erst kürzlich auch für C# entschieden. Vielleicht habe ich mich ungeschickt angestellt, aber diesen Link habe ich nur mit Mühe gefunden:

// Microsoft Visual C# 2008 Express Edition inkl. SP1 Webinstaller deutsch:
// http://download.microsoft.com/download/C/C/7/CC7BA01C-C017-44E8-96FE-3443889F80A0/vcssetup.exe
(Kostenlos, mit Registrierung)

Als Einstieg in die serielle Kommunikation unter C# verwende ich das:
http://msmvps.com/blogs/coad/archive/2005/03/23/SerialPort-_2800_RS_2D00_232-Serial-COM-Port_2900_-in-C_2300_-.NET.aspx

Gruß

mic

arnoa
18.01.2012, 17:40
... nur eine Kleinigkeit - Visual Studio Express 2010 ist aktuell.
Das Beispiel für die serielle würde ich um ein Mindestmaß an Error-Handling erweitern ;)

radbruch
18.01.2012, 19:11
2010? Ich bin hierrüber dazu gekommen:
http://openbook.galileocomputing.de/visual_csharp/

Und da fast alle im Netz gefundenen Beispiele für 2008 waren, habe ich mir diese Version geholt.

arnoa
18.01.2012, 19:37
http://www.microsoft.com/germany/express/products/windows.aspx lt. MS ... Die Visual Studio 2010 Express Produkte sind eine Suite von kostenfreien Programmen ....

Sebas
19.01.2012, 14:04
Wie siehts eigentlich mit Java aus? Kann man da andere Programme(osm, google maps) einbinden? Wie siehts mit dem erstellen eigener Anzeigen aus?
Hat ne bessere Portierbarkeit, und da ich jetzt auch stolzer besitzer einen Android handys bin ist das schon recht Interressant.
mfg Sebastian

arnoa
19.01.2012, 16:46
Hi Sebastian!
In Java ist das Einbinden auch kein Problem - jede Sprache hat seine Vor- und Nachteile.
Ob es Dir gelingt eine "herkömmliche" Java Anwendung so einfach auf einem Android Teil laufen zu lassen bezweifle ich aber - bin aber bei weitem kein Java-Spezialist.

TheDarkRose
19.01.2012, 17:52
Java ist von der Portierbarkeit nice, wenn man Windows und Linuxsysteme verwendet. Aber für Android muss man trotzdem eine neue App schreiben, je nachdem kannst du aber Bibliotheken wieder verwenden.

lokirobotics
19.01.2012, 20:22
Also zu Java und Android: Auf Android läuft keine JVM, sondern die Dalvik-VM diese unterstützt nicht alle Java Standardbibliotheken. Wenn man sich mit den Gemeinsamkeiten vertraut macht und nur gegen diese Komponenten implementiert (bzw. weitere Abstraktionsschichten einführt), kann man seinen Code sowohl für java, als auch für Android verwenden. Java ist von der Plattformunabhängigkeit natürlich nett, serielle Schnittstelle ist aber ein Problem. Besser ist es, das ganze über Bluetooth zu lösen, dann hat man auch gleich eine einheitliche Anbindung für PC, Smartphone, Mac etc.

Das Visual Studio ist natürlich der heilige Grahl der IDEs, es gibt einfach keine bessere (ja, ich trau mich, das so diktatorisch zu sagen ;D). Zusammen mit der tollen Klassenbibliothek von C# ist das natürlich eine wunderbare Programmierumgebung.
Wenn die Software allerdings ordentlich modelliert worden ist, ist die Sprache nebensächlich, weil du dir dann eh den Großteil des Codes generieren lassen wirst.

OSM, Gmaps etc: Kannst du in jeder Sprache einbinden, musst halt nur die Webservices einbinden. Ich persönlich würde zu OSM raten. Die Kartendaten sind frei verfügbar und es gibt Server, von denen du fertige MapTiles runterladen kannst (falls du nicht selber rendern möchtest). Gmaps ist problematisch: du darfst die Karten nur verwenden, wenn du sie auf einer frei zugänglichen Website anzeigst. Ich glaube nicht, dass du deinen Roboter über ein öffentliches Webinterface steuern möchtest. ;D

Je nachdem, wie viel du selber machen möchtest, wäre das Paparazzi Projekt (http://paparazzi.enac.fr/wiki/Main_Page) vielleicht für dich interessant.

TheDarkRose
20.01.2012, 10:55
Visual Studio ist für C# gut geeignet für den Rest Schrott. Fehlende Unterstützung für Versionsverwaltungssysteme. Keine Integration von CI Systemen möglich. Keine Einbindung von Task und Issuesystemen. Hoch lebe Eclipse und seine große Pluginlandschaft.

lokirobotics
20.01.2012, 11:56
Fehlende Unterstützung für Versionsverwaltungssysteme.
Falsch! Es gibt Git Extensions, Visual Source Safe, Team Foundation Server,...

Keine Integration von CI Systemen möglich.
Wieder Falsch! Team Foundation Build macht das z.B., genauso wie TeamCity von Jetbrains. Glaubst du ernsthaft, die Microsoftler schreiben ihre Software ohne CI?

Keine Einbindung von Task und Issuesystemen.
Falsch die dritte! Um nur ein Tool zu nennen: FogBugz.
Das alles kann man aber auch mit dem Team Foundation Server abdecken.

Am Microsoft SQL-Server haben mehr als 5000 Leute entwickelt. Da können sie es sich nicht leisten, eine "schrottige" IDE zu verwenden. Im übrigen kannst du nicht nur C# im VS benutzen du kannst nach Herzenslust andere Compiler einbinden und in allem möglichen Sprachen programmieren.

Ich find Eclipse auch sehr gut und nutze es viel für die Entwicklung unter Java und Android. Aber was du über das VS gesagt hast korreliert leider nicht mit der wirklichen Welt.

TheDarkRose
20.01.2012, 12:11
Jaja, Team Foundation Server. Aber schon mal versucht OpenSource Tools an VS anzubinden. Außer bei Git Extensions was leider nicht mal bei der Express Version geht zum kotzen.

Sebas
20.01.2012, 14:33
@loki: wie meinst du das mit bluetooth? wäre doch auch erstmal eine Art serielle verbindung.

Also ich erklär mehr was ich machen will. Also ich hab eine schönes funktransceiver-set bei dem ich einfach über UART kommunizieren kann. Ein Modul will ich mit einem FTDI Adapter am Computer anschliessen, das andere eben an einen im zu steuernden Objekt(Flugzeug, Auto, etc.) verbauten Microcontroller anschliessen. Heisst das Ding taucht am Computer als virtueller ComPort auf.
Die andere Steuermöglichkeit soll eben über das Android Handy funktionieren. Ich hab ein Arduino-Board mit Usb-Host-Shield. Daran wird eben Antenne und Handy angeschlossen. Android Handys haben ja ab Version 2.3.4 ein vereinfachtes Protokoll mit dem man mit ihnen über einen Usb Port kommunizieren kann. Hier sollen dann eben einfach die Daten über das ArduinoBoard geschickt werden.

Letzendlich will ich etwas ähnliches wie die Paparazzi Ground Station machen
aber eben am Liebsten selbstgemacht, und nicht als autonome Steuerung sondern einfach als Unterstützung bei der Fernsteuerung, erstmal zumindest.
Mit welcher IDE kann ich am besten Code für Android schreiben?

mfg Sebastian

TheDarkRose
20.01.2012, 16:00
Ja mit Bluetooth halt eine serielle Verbindung aufbauen. Ist für Steuerung von einem Android Handy die funklose und einfache Variante und geht dann auch mit allen PC's und Laptops mit eingebauten Bluetooth ohne ein extra Modul zu benötigen.

Für Android Programmierung definitiv Eclipse mit ADT Plugin. http://dev.android.com

lokirobotics
20.01.2012, 16:49
Ich würde für Androide auch zu Eclipse+ADT greifen.

Bluetooth hat das sogenannte Serial Port Protocol, also die Implementierung eines seriellen Ports. Der Vorteil gegenüber dem Hardware Serial Port und auch Virtual COM posts ist, dass die BT Implementierungen auf jedem gängigen Betriebssystem vorhanden sind und auch von Java direkt unterstützt werden. Für den Zugriff auf die Hardware Ports brauchst du immer OS spezifische Bibliotheken.

Die Kommunikation über das Android Open Accessory Toolkit zu machen halte ich für übertrieben. Da musst du sehr viel low level USB Kommunikation machen. Da ist BT wesentlich einfacher.

TheDarkRose
20.01.2012, 16:51
Und will man bei Java mit wirklichen Com Ports verwende RXTX. Ist eine gute Com Library

Sebas
20.01.2012, 19:10
Soo habe jetzt die Android SDK runtergeladen, jetzt ist Eclipse dran.
Was haltet ihr von Netbeans?
Also die DarvikVM hat nicht alle Java Elemente oder? Aber wenn ich jetzt Anzeigen fürs Android bastle dann laufen die auch am Pc oder?

mfg Sebastian

TheDarkRose
20.01.2012, 20:05
Mag Netbeans nicht, ist aber Geschmackssache. Finde Eclipse hat die größere Pluginlandschaft und wird auch für Android von Google offiziell unterstützt. Vergiss das ADT Plugin nicht.

Und Nein, Android Apps kannst du nicht einfach so am PC anzeigen, da Android Apps ganz anderes programmiert werden (actvities, intents, etc). http://dev.android.com (http://dev.android.com/) ist deine Seite.

Sebas
20.01.2012, 20:29
Okay dann arbeite ich mal ein bisschen mit Eclipse :-)

Ich meinte nicht ob das ganze Programm auf dem PC läuft, ich wollte Teile des Codes in ein Java Programm am Computer einbinden. Und auch wirklich nur Code für Anzeige-Elemente(Kompass, Künstlicher-Horizont, Akkustand,etc.)

mfg Sebastian

TheDarkRose
20.01.2012, 22:39
Ja, aber auch nur bestimmte Teile, die du gegen nicht spezifische Android Libs programmiert hast und in der normalen JRE auch vorhanden sind. Grafische oberflächen nicht.

lokirobotics
21.01.2012, 00:06
Kommt wieder drauf an, wie du deine Oberflächen gestaltest. Wenn du selber renderst, kannst du deinen Grafik Core auf beiden Plattformen benutzen. Nur die Routinen, die die Grafik-Primitiven zeichnen brauchst du Plattformspezifisch.

Netbeans find ich auch nicht so toll. Nervt oft mit viel unnützen Sachen und ist auch ressourcenhungriger als Eclipse.