PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RoboRealm, RN-MotorControl und Serielle Kommunikation



Jo20
25.02.2012, 11:27
Hallo liebes Forenteam,

ich habe einen Roboter gebaut, der mit 2 Motoren, die an einem RN-MotorControl mit RN-VN2DualMotor hängen.
Der Roboter soll mithilfe von einer Webcam und RoboRealm in Verbindung mit dem AVM-Navigator-Modul später selbstständig fahren und navigieren können. In RoboRealm möchte ich mit dem Serial-Modul die richtigen Befehle generieren (die AVM-Navigator Motor-Variablen werden vorher mit einem Script an den MotorControl-Bereich von 0 bis 255 + Drehrichtung angepasst) und diese dann an das MotorControl schicken.

Mein Problem:
Was für eine Syntax muss ich im Serial-Modul verwenden, damit die Befehle von meinem Controller angenommen werden?
Wie in der Controller-Anleitung beschrieben muss ja immer erst "##", dann Anzahl folgender Bytes, Befehlsbyte, Motorbyte, Wertebyte gesendet werden. Mit meiner in VB.NET eigens programmierten Software kann ich den Controller über die serielle Schnittstelle problemlos ansteuern, aber über eine "normale" serielle Verbindung bekomme ich es nicht hin. Ich weiß leider nicht, in welchem Format (ASCII, Dezimal, Binär,...) ich die Befehle senden muss, und wie diese Befehle dann aussehen müssen. Kann mir da vielleicht jemand helfen?

In VB.NET sieht mein Befehl um den linken Motor auf Maximalgeschwindigkeit zu beschleunigen zum Beispiel so aus:



SerialPortDrive.Write("##" & Chr(3) & Chr(2) & Chr(1) & Chr(255))

Wie kann ich jetzt den gleichen Befehl über das Serial-Modul in Roborealm oder ein einfaches Terminalprogramm an den Controller schicken?

Jo20
09.03.2012, 13:37
Hat nicht noch jemand vielleicht ein paar Erfahrungen diesbezüglich? Ich bräuchte echt Hilfe dabei, da dies für meine studentische Studienarbeit ist und als Maschinenbauer habe ich leider nicht allzuviel Erfahrungen damit...
Danke schonmal im Voraus für eure Hilfe!
MfG

Searcher
09.03.2012, 19:19
Was für eine Syntax muss ich im Serial-Modul verwenden, damit die Befehle von meinem Controller angenommen werden?
Wie in der Controller-Anleitung beschrieben muss ja immer erst "##", dann Anzahl folgender Bytes, Befehlsbyte, Motorbyte, Wertebyte gesendet werden. Mit meiner in VB.NET eigens programmierten Software kann ich den Controller über die serielle Schnittstelle problemlos ansteuern, aber über eine "normale" serielle Verbindung bekomme ich es nicht hin. Ich weiß leider nicht, in welchem Format (ASCII, Dezimal, Binär,...) ich die Befehle senden muss, und wie diese Befehle dann aussehen müssen. Kann mir da vielleicht jemand helfen?

Wär nicht schlecht, wenn Du die entsprechenden Beschreibungen zu den von mir hervorgehobenen Einheiten verlinkst. Was ist "normale" serielle Verbindung im Gegensatz zur seriellen Verbindung zum PC?

Ich selbst habe die Komponenten nicht, aber vielleicht kann man etwas in den Unterlagen erkennen.

Gruß
Searcher

Jo20
11.03.2012, 10:16
Hallo! Danke schonmal für Deine Bemühungen!
Hier die Anleitung zum RN-MotorControl, welches ich ansteuern möchte:
http://www.robotikhardware.de/download/rnmotorcontrol.pdf
Die Befehlsübersicht ist auf seite 6, die Befehlssyntax ab Seite 14 beschrieben.

Hier findest Du die Dokumentation zum Serial-Modul (Modul im Sinne von Plugin sozusagen) von Roborealm:
http://www.roborealm.com/help/Serial.php

Mit "normaler" serieller Verbindung meinte ich beispielsweise über ein Terminal-Programm. Darüber kann ich zwar eine Verbindung zum Controller herstellen, jedoch nimmt dieser nicht die Befehle an, bzw. weiß ich nicht wie ich diese dort schreiben muss.

Searcher
11.03.2012, 12:46
Hallo,




SerialPortDrive.Write("##" & Chr(3) & Chr(2) & Chr(1) & Chr(255))
Wie kann ich jetzt den gleichen Befehl über das Serial-Modul in Roborealm oder ein einfaches Terminalprogramm an den Controller schicken?

"Settings" entsprechend der Verbindung zum Motorcontrol einstellen und "Initialisation Sequenze" vermulich leer lassen.

Dann mal in das Feld vom Robo Realm Serial Interface in das Feld unter "Console" so eintragen:
\x23\x23\x03\x02\x01\xFF und mit Send zum RN-Motorcontrol schicken.

Das SerialPortDrive.Write schickt die ASCII Werte der aufgeführten Parameterwerte zum Control.
Der ASCII Wert von "#" ist x23 (Hexadezimal 23), ..., von CHR(255) ist er xFF ...

Einfache Terminalprogramme lassen die Eingabe und Senden der hex-Werte nicht zu. Beim RoboRealm Serial Interface muß man das wohl in o.g. Form machen.

Für mich ist immer fraglich, ob da nicht noch irgendwie ein CR (x0D) und/oder LF (x0A) (Carrige Return, Line Feed) mitkommt. Um zB. das zu kontrollieren könnte man versuchen einen Monitor für den Serialport im I-Net zu finden und mitlaufen zu lassen. zB sowas http://www.heise.de/download/free-serial-port-monitor.html (den hab ich selbst jedoch noch nicht ausprobiert).

Hoffe das hilft Dir erstmal weiter
Gruß
Searcher

Thoralf
13.04.2012, 18:17
vielleicht hilft dir das:

#s\x01\[servo_x]<lf><cr>#s\x02\[servo_y]<lf><cr>

x01 ............ hex Motornummer
servo_x ...... Servogeschwindigkeit

Das hab ich im Serial unter send sequence eingefügt. Du mußt natürlich deine Motordrehzahl als Variable einfügen.

Damit steuere ich einen RN-Servocontroller (den einzelnen IC, den die früher mal hatten, find den grad nicht).
Kannst ja nochmal fragen, wenns nicht ganz klar ist.