Die ganze Aktion dient folgendem Zweck:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=15731
Der Asuro soll über eine Kamera ferngesteuert werden.
Gruss,
stochri
Hallo Miteinander
Für die Fernstuerung des Asuro schien mir folgender Weg am einfachsten:
echo 1 > /dev/ttyUSB0
Damit wird eine 1 an den Asuro via USB-Adapter gesendet und der Asuro bewegt sich einen Schritt vorwärts.
Als Kommandos habe ich einfach die Zahlen von 1 bis 4 für alle Richtungen verwendet.
Das ganze läßt sich in ein Script verpacken.
Jetzt kann man den asuro aus der Kommandozeile mit ./asuro_vor steuern.Code:#!/bin/bash echo 4 > /dev/ttyUSB0
Bis jetzt muss ich allerdings immer noch mindesten einmal minicom aufrufen, damit es mir die richtigen Schnittstellenparameter einstellt. Kann mir vielleicht jemand sagen wie das ganze mit setserial aussehen muss?
Hier noch das ASURO-Programm, falls noch jemand den Roboter über Linux steuern will:
Gruss,Code:#include "asuro.h" /************************************************************************* Asuro Remote Control by Linux To controll the robot you can use minicom. The following keys are defined: '1': vorward '2': backward '3': turn left '4': turn right You may also send a comand by the linux shell: (e.g. go vorward ) echo 1 > /dev/ttyUSB0 make shure that the tty-parameters are set to 24008N1 no handshake Vers.: 1.0 5.1.2006 stochri **************************************************************************/ typedef unsigned char byte; #define aus MotorDir(BREAK,BREAK) byte chgetchar() { UCSRB = 0x10; // enable receiver while(!(UCSRA & 0x80)); // wait for received byte return UDR; } void main() { byte command,n; Init(); SerWrite("\n\r-- ASURO-Linux-Com --\n\r",25); MotorSpeed(160,160); aus; while(1) { /* Warten auf ein Kommando der seriellen Schnittstelle */ command = chgetchar(); switch(command) { case '1': { MotorDir(FWD,FWD); Msleep(100); aus; } break; case '2': { MotorDir(RWD,RWD); Msleep(100); aus; } break; case '3': { MotorDir(RWD,FWD); Msleep(50); aus; } break; case '4': { MotorDir(FWD,RWD); Msleep(50); aus; } break; default: { }break; } } return 0; } /*************************************************************************** * * (c) 2006 stochri * *************************************************************************** * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * any later version. * ***************************************************************************/
stochri
Die ganze Aktion dient folgendem Zweck:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=15731
Der Asuro soll über eine Kamera ferngesteuert werden.
Gruss,
stochri
schau Dir stty an und genau die Ausgabe von stty -a < /dev/(Dein Device)Kann mir vielleicht jemand sagen wie das ganze mit setserial aussehen muss?
bevor, und nachdem Du minicom ausgeführt hast.
Das wichtigste ist speed:
was kommt nach setserial -g /dev/(Dein Device)
UART: 16550A bzw. 16550 ?
wenn nicht so setzen.
schau Dir das auch mal an : Modem-Howto
Gruß Sebastian
Muss der ganze Rattenschwanz an setserial übergeben werden ?Code:ww@Bigtower:~> stty -a </dev/ttyUSB0 speed 2400 baud; rows 0; columns 0; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 5; -parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8 -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke
Gruss,
stochri
1. nicht an setserial sondern an stty
stty -F /dev/ttyUSB0 ospeed 2400 setzt Du Baudrate auf 2400
2. Das meiste brauchst Du eher nicht Baudrate würde ev. reichen schaumal stty --help | more um alle Parameter anzuzeigen.
Ich hoffe das es damit klappt.
Gruß Sebastian
Hallo Izazeba,
jetzt habe ich einfach mal die obige Zeile von Dir
in ein Scriptfile gepackt und lasse es von SCILAB bei der Initialisierung ausführen. Die Kommunikation klappt dann. Ist zwar ein bischen "murksig" falls ein anderes Programm vorher noch ein paar andere Parameter verdreht hätte, aber solange es funktioniert, kann es ja mal so bleiben.stty -F /dev/ttyUSB0 ospeed 2400
Vielen Dank für Deine Hilfe,
stochri
Hallo Stochri,
es freut mich, daß es klappt.
Es ist eher unwahrscheinlich, daß ein anderes Programm noch was "verdreht",
die Baudrate ist der Parameter, der am wichtigsten ist und am meisten vom Programm zu Programm variert.
Das einzigste Programm, daß mir noch die Serielle veränderte, ist lirc es braucht den Parameter UART = none, ich muß Sie anschließend mit setserial auf 16550A einstellen.Das ist aber nicht weiter schlimm, wozu gibt es ja die Scripte ...
Eine Andere Lösung ist, ein kleines C Programm zu schreiben, wo man die Serielle mit allen Parametern öffnet und wieder schließt.
Wenn es aber mit stty klappt, ist es wohl nicht notwendig.
Viel Spaß mit Deinem Projekt, es interessiert mich wirlich, was daraus wird.
Gruß Sebastian
Lesezeichen