- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 7 von 7

Thema: ASURO Fernsteuerung mit Linux

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.147
    Blog-Einträge
    3

    ASURO Fernsteuerung mit Linux

    Anzeige

    E-Bike
    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.
    Code:
    #!/bin/bash
    echo 4 > /dev/ttyUSB0
    Jetzt kann man den asuro aus der Kommandozeile mit ./asuro_vor steuern.

    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:
    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.                                                    *
     ***************************************************************************/
    Gruss,
    stochri

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.147
    Blog-Einträge
    3
    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

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Kann mir vielleicht jemand sagen wie das ganze mit setserial aussehen muss?
    schau Dir stty an und genau die Ausgabe von stty -a < /dev/(Dein Device)
    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

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.147
    Blog-Einträge
    3
    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
    Muss der ganze Rattenschwanz an setserial übergeben werden ?

    Gruss,
    stochri

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    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

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.147
    Blog-Einträge
    3
    Hallo Izazeba,
    jetzt habe ich einfach mal die obige Zeile von Dir
    stty -F /dev/ttyUSB0 ospeed 2400
    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.

    Vielen Dank für Deine Hilfe,
    stochri

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen