-
        

Ergebnis 1 bis 8 von 8

Thema: Hilfe zum Thema: Sensoren Programmieren

  1. #1

    Hilfe zum Thema: Sensoren Programmieren

    Anzeige

    Hi

    Ich habe mir gestern einen Robby RP5 gekauft und schon etwas herumprobiert.
    Jetzt wollte ich das der Roboter richtung Licht fährt aber auch hindernissen ausweichen kann.
    Dummerweise behindern sich die beiden Sensoren gegenseitig. Der Lichtsensor will geradeaus und der ACS ausweichen.

    [schild=1 fontcolor=FF0000 shadowcolor=C0C0C0 shieldshadow=1]HELP![/schild]Könnte mir bitte jemand helfen!!![schild=1 fontcolor=FF0000 shadowcolor=C0C0C0 shieldshadow=1]HELP![/schild]

    Gruß
    Peter Pan

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von oratus sum
    Registriert seit
    25.12.2006
    Ort
    Wien
    Alter
    26
    Beiträge
    1.079
    Blog-Einträge
    1
    Wie meinst du, dasss sie sich behindern? Es kann sein, dass die Lichtsensoren die Infrarot strahlen irgendwie erkennen aber bei dir ist es ja umgekehrt das die Lichtsensoren weiter fahren wollen und ACS nicht!

    Versucht mal die ACS auf LOW zu setzen:

    SYS ACS_LO

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Hallo Peter Pan,

    Dummerweise behindern sich die beiden Sensoren gegenseitig. Der Lichtsensor will geradeaus und der ACS ausweichen.
    Wenn das so ist, dann ist das kein Problem der Hardware, sondern ein Problem deiner Programmierung.

    Also müßtest du dein Prog hier posten und beschreiben, was du genau machen willst.

    Gruß Dirk

  4. #4
    Hi

    Also ich wollte das der bot auf eine Lichtquelle zufährt, aber trotzdem hindernissen ausweichen kann.

    Code:
    '--------------------------------------------------------
    '----                   I/O PORTS                    ----
    '--------------------------------------------------------
    '
    '---------------- INTERFACE LCD/EXTPORT -----------------
    define sdio         port[1]
    define sclio        port[3]
    define strobe       port[4]
    '
    '------------------- INTERFACE COM/NAV ------------------
    define DATALINE     port[1]
    define CLOCKLINE    port[2]
    '
    '--------------------------------------------------------
    '----                    SENSORS                     ----
    '--------------------------------------------------------
    define LIGHT_L      ad[7]
    define LIGHT_R      ad[6]
    define SYS_VOLTS    ad[3]
    define CHRG_CURRENT ad[2]
    define SYS_CURRENT  ad[1]
    define MIC          ad[4]
    define TOUCH        ad[5]
    '
    '--------------------------------------------------------
    '----                    DRIVE                       ----
    '--------------------------------------------------------
    define SPEED_L        da[1]
    define SPEED_R        da[2]
    define REV_L        port[6]
    define REV_R        port[5]
    '
    '--------------------------------------------------------
    '----                 SYSTEM MEMORY                  ----
    '--------------------------------------------------------
    '
    '------------------ INTERFACE BUFFER --------------------
    define LBYTE         byte[1]
    define HBYTE         byte[2]
    define SUBCMD        byte[3]
    '
    '------------------- OPERATION DATA ---------------------
    define EXTPORT       byte[4]
    define LED1_F        bit[29]
    define LED2_F        bit[30]
    define LED3_F        bit[31]
    define LED4_F        bit[32]
    define SYSTEM_STATUS byte[5]
    define ACSL_F        bit[33]
    define ACSR_F        bit[34]
    define IR_F          bit[35]
    '
    '--------------------------------------------------------
    '----                 USER MEMORY                 -------
    '--------------------------------------------------------
    define GP            byte[6]
    define MAXLIGHT      byte[7]
    define GP1           byte[8]
    '
    '-------------------- SYSTEMROUTINEN --------------------
    define PLM_SLOW      &H01C4
    define SYSTEM        &H01C9
    define COMNAV        &H0154
    '
    '-------------- ERWEITERTE SYSTEM ROUTINEN --------------
    define REVR          &H0101   'ANTRIEB RECHTS RÜCKWÄRTS
    define REVL          &H0106   'ANTRIEB LINKS RÜCKWÄRTS
    define FWDR          &H010B   'ANTRIEG RECHTS VORWÄRTS
    define FWDL          &H0110   'ANTRIEB LINKS VORWÄRTS
    define ROTR          &H0115   'RECHTS DREHEN
    define ROTL          &H0119   'LINKS DREHEN
    define REV           &H011D   'RÜCKWÄRTS
    define FWD           &H0121   'VORWÄRTS
    define COMNAV_STATUS &H0125   'UPDATED ALLE FLAGS IM STATUS-REGISTER
    define ACS_LO        &H01E1   'ACS POWER LO
    define ACS_HI        &H01E9   '
    define ACS_MAX       &H01F1   '
    define SEND_TLM      &H014A   'SENDET TELEMETRIE (CH=HBYTE,DATEN=LBYTE)
    define SEND_SPEEDR   &H0134   'SENDET TLM KANAL 8,PLM RECHTS
    define SEND_SPEEDL   &H013A   'SENDET TLM KANAL 7,PLM LINKS
    define SEND_SYSSTAT  &H0144   'SENDET TLM KANAL 0,SYSTEM STATUS
    '                             '(FLAGS für ACS,FWD/REV, ACS_LO/HI/MAX)
    '
    '
    '------------------------ INIT --------------------------
    gosub SUBSYS_PWR_ON
    beep 368,10,0:pause 50
    '
    '--------- SYSTEM OPERATION MODE (NO INTERRUPT) ---------
    gosub NO_ACS_INT:beep 368,10,0:SYS ACS_LO
    '
    '--------------------- ANTRIEB --------------------------
    REV_L=on:REV_R=on:SYS PLM_SLOW
    '
    '
    '
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    'III                      Programm                     III
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    '
    
    #loop
    pause 5:SYS COMNAV_STATUS
    if ACSL_F=on then gosub LED4ON else gosub LED4OFF
    if ACSR_F=on then gosub LED1ON else gosub LED1OFF
    if (ACSL_F and ACSR_F)=on then goto rotate
    if ACSL_F=on then goto move_right
    if ACSR_F=on then goto move_left
    '
    if (LIGHT_L-LIGHT_R) >10 then goto rotleft_fast
    if (LIGHT_R-LIGHT_L)>10 then goto rotright_fast
    if (LIGHT_L-LIGHT_R) >2 then goto rotleft
    if (LIGHT_R-LIGHT_L)>2 then goto rotright
    SYS FWDR:SYS FWDL:SPEED_L=100:SPEED_R=100:goto loop
    '
    #rotleft
    SYS ROTL:SPEED_L=100:SPEED_R=100:goto loop
    #rotleft_fast
    SYS ROTL:SPEED_L=150:SPEED_R=150:goto loop
    #rotright
    SYS ROTR:SPEED_L=100:SPEED_R=100:goto loop
    #rotright_fast
    SYS ROTR:SPEED_L=150:SPEED_R=150:goto loop
    '
    #move_right
    SPEED_R=100:SPEED_L=255:goto loop
    #move_left
    SPEED_L=100:SPEED_R=255:goto loop
    #rotate
    SPEED_L=150:SPEED_R=150:SYS ROTR:goto loop
    '
    '
    '
    '---------------------------------------------------------
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    '---------------------------------------------------------
    '
    'IIIIIIIIIIIIIIIIIIIIII LED DRIVER IIIIIIIIIIIIIIIIIIIIIII
    '
    #LED1ON
    LED1_F=on:goto EXTPORT_WRITE
    #LED1OFF
    LED1_F=off :goto EXTPORT_WRITE
    #LED2ON
    LED2_F=on:goto EXTPORT_WRITE
    #LED2OFF
    LED2_F=off:goto EXTPORT_WRITE
    #LED3ON
    LED3_F=on:goto EXTPORT_WRITE
    #LED3OFF
    LED3_F=off:goto EXTPORT_WRITE
    #LED4ON
    LED4_F=on:goto EXTPORT_WRITE
    #LED4OFF
    LED4_F=off:goto EXTPORT_WRITE
    #LEDSOFF
    EXTPORT=EXTPORT and &H0F:goto EXTPORT_WRITE
    #EXTPORT_WRITE
    SYS SYSTEM:pulse STROBE:RETURN
    '
    'IIIIIIIIIII SYSTEMROUTINEN COMM/NAV SYSTEM  IIIIIIIIIIII
    
    #GET_IRDATA
    SUBCMD=1:sys COMNAV:return
    #SEND_IRDATA
    SUBCMD=0:sys COMNAV:return
    #RC5
    SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFC
    HBYTE=00:SUBCMD=2:sys COMNAV:return
    #RC5_INT
    SUBCMD=4:sys COMNAV:LBYTE= (HBYTE and &HFE)or 2
    HBYTE=00:SUBCMD=2:sys COMNAV:return
    #REC80
    SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H01)and&HFD
    HBYTE=00:SUBCMD=2:sys COMNAV:return
    #REC80_INT
    SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H03)
    HBYTE=00:SUBCMD=2:sys COMNAV:return
    '
    'IIIIIIIIIIIIIII SYSTEMROUTINEN SYSTEM  IIIIIIIIIIIIIIIII
    
    #NO_ACS_INT
    SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFB
    HBYTE=00:SUBCMD=2:sys COMNAV:return
    #ACS_INT_200
    SUBCMD=4:sys COMNAV:LBYTE= HBYTE or &H04
    HBYTE=50:SUBCMD=2:sys COMNAV:return
    #SUBSYS_PWR_ON
    sdio=on:sclio=on:strobe=off:EXTPORT=(EXTPORT and &HFE)or 8
    sys SYSTEM:return
    #SUBSYS_PWR_OFF
    EXTPORT=(EXTPORT and &HF7)or 1:sys SYSTEM
    deact sdio:deact sclio:return
    #CLR_DISTANCE
    SUBCMD=3:sys COMNAV:return
    #L_DISTANCE
    SUBCMD=6:sys COMNAV:return
    #R_DISTANCE
    SUBCMD=7:sys COMNAV:return
    
    '----------------COM/NAV GERÄTEREIBER --------------------
    'syscode "p5driv.s19"
    Und noch mal danke für die schnellen antworten!!!
    Gruß Peter Pan

  5. #5
    Hallo

    Ich will ja nicht unhöflich sein aber könnte mir bitte jemand weiter helefn...
    Das wäre sehr nett!!!
    Gruß Peter Pan

  6. #6
    hallo,

    also ich habe dein listing nur kurz durchgeschaut... sorry für die flüchtigkeit

    ich glaube der fehler liegt bei deiner lichtberechnung...

    die beiden helligkeitssensoren liefern werte zwischen 0 und 255...


    die formel müsste etwa so aussehen:

    if light(r)>light(l) then goto rotate left
    if light(l)>light(r) then goto rotate right

    also wenn der rechte sensor mehr licht sieht soll er nach links drehen
    und wenn der linke mehr licht sieht soll er nach rechts drehen...

    viel glück weiterhin - nur briefe gibt man auf

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Zitat Zitat von sidvicious
    if light(r)>light(l) then goto rotate left
    if light(l)>light(r) then goto rotate right

    also wenn der rechte sensor mehr licht sieht soll er nach links drehen
    und wenn der linke mehr licht sieht soll er nach rechts drehen...
    Genau andersrum.
    Peter Pan will, dass der Bot zum hellsten Punkt fährt.
    Aber sonst sollte es so stimmen. Es fehlt hat die Rotationsgeschwindigkeit, rotierst du aber zu schnell, so ist die Ausrichtung relativ ungenau. Deswegen würde ich mir eher mehr Zeit lassen, als ungenau zu fahren.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  8. #8
    ja ja die flüchtigkeit....

    du hast recht... asche auf mein haupt...

    der interessante teil der geschichte sollte halt sein das die sensorwerte nicht abgezogen werden sollten like this:

    if (LIGHT_L-LIGHT_R) >10 then goto rotleft_fast
    if (LIGHT_R-LIGHT_L)>10 then goto rotright_fast
    if (LIGHT_L-LIGHT_R) >2 then goto rotleft
    if (LIGHT_R-LIGHT_L)>2 then goto rotright

    sondern einfach nur verglichen werden sollten.
    deine anregung mit der rotationsgeschwindigkeit ist natürlich auch sehr interessant.

Berechtigungen

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