PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche Hilfe bei Fernsteuerung übers USB-Interface



fretless
02.01.2012, 16:19
Schönen guten Tag,

Zur Zeit arbeite ich mit ein paar Kommilitonen an einem Autonomen Intelligenten Roboter.
Diese soll sich eine gewisse Strecke durch den Raum bewegen und mittels Kinect intelligent Hindernissen ausweichen.
Wir haben uns als Robotereinheit den RP6 ausgesucht. Auf diesem befindet sich ein mini-ITX Board (an dem die Kinect angeschlossen wird und auf dem der Objektfindung/Wegfindungsalgorithmus ausgeführt wird).

Nun soll in der Theorie das wie folgt funktionieren:
1. Kinect nimmt 3D Bild auf
2. auf dem mini - ITX werden die Objekte im Bild gefunden
3. auf dem mini - ITX wird der neue Weg berechnet
4. nun wird über das USB-Interface ein Befehl an den RP6 gesendet
5. der µController soll diesen Befehl auswerten und sich dementsprechend bewegen


Da wir noch keinerlei Erfahrung mit dem RP6 oder ähnlichen Robotersystemen haben gestaltet sich Punkt 4 und 5 etwas schwierig.
- Wie kann ich von einem Rechner auf dieses USB-Interface zugreifen (am besten in C/C++/C#) ??
- Wie kann ich dann 1byte über dieses Interface versenden ??
- Wie kann der RP6 dieses Interface dann auslesen und das gesendete Byte verwenden ???

So wie wir das verstehen simuliert das USB-Interface einen I2C-Bus und diese Funktionen sind in den Beispielen ja schon vorhanden und mehr oder weniger verständlich. Allerdings sind da nur Beispiele für den RP6 in Verbindung mit der M128 Erweiterung oder haben wir was übersehen ???

Müsste man nicht eigentlich, ein Master-Programm schreiben (welches auf dem ITX-Board läuft) und ein Slave-Modul (welches auf dem RP6 läuft) und diese kommunizieren dann über die gemeinsame Schnittstelle USB-Interface ???


Viele viele Fragen und hoffentlich ein paar Antworten.
Vielen Dank im Vorraus.

florian0
02.01.2012, 20:22
Hiho,


- Wie kann ich von einem Rechner auf dieses USB-Interface zugreifen (am besten in C/C++/C#) ??
Das USB-Interface ist eine simple serielle Schnittstelle. Bei C# (.NET) wäre das die Klasse SerialPort. C++ weis ich grade nicht (und bevor ich was falsches sage, sag ich lieber nix)


- Wie kann ich dann 1byte über dieses Interface versenden ??
Vom PC zum RP6 -> In C#: Methode Write();
Siehe auch MSDN Link (http://msdn.microsoft.com/de-de/library/system.io.ports.serialport.aspx)
Vom RP6 zum PC -> writeChar();


- Wie kann der RP6 dieses Interface dann auslesen und das gesendete Byte verwenden ???
Geht mit der RP6-Lib ganz easy.


if(getBufferLength()) // Wenn was im Buffer steckt
{
char receivedData;
receivedData = readChar();
// Empfangene Daten verarbeiten ...
}



So wie wir das verstehen simuliert das USB-Interface einen I2C-Bus und diese Funktionen sind in den Beispielen ja schon vorhanden und mehr oder weniger verständlich. Allerdings sind da nur Beispiele für den RP6 in Verbindung mit der M128 Erweiterung oder haben wir was übersehen ???
Wie oben schon geschrieben, ist es eine serielle Schnittstelle (COM-Port). In den Base-Examples sind zwei für das Interface. Example_02_UART_01 & Example_02_UART_02(Mit Empfangs-Funktion Z.152) . Da kann man gut sehen wie das Interface arbeitet.


Müsste man nicht eigentlich, ein Master-Programm schreiben (welches auf dem ITX-Board läuft) und ein Slave-Modul (welches auf dem RP6 läuft) und diese kommunizieren dann über die gemeinsame Schnittstelle USB-Interface ???
Stimmt schon. Dem RP6 überlasst ihr die Fortbewegung (Vorwärts, Rückwärts, Links, Rechts, Bremsen, etc.) und das ITX-Board übernimmt die Navigation und sagt dem RP6 wohin er fahren soll.

Gruß
florian0

fretless
03.01.2012, 13:23
Vielen Dank für die schnelle und gute Hilfe,

Hat wirklich sehr geholfen !!!!

Wir haben uns jetzt für .NET entschieden und uns an das uart02 Beispiel gehalten.
Funktioniert alles soweit ganz gut.

Sobald das Projekt beendet wird lade ich mal Bilder und Source-Code hoch für zukünftige Projekte.