-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Programmier Tutorials für den RP6

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.12.2010
    Beiträge
    147

    Programmier Tutorials für den RP6

    Anzeige

    Hey Leute,

    Endlich hab ich meinen RP6 bekommen, allerdings habe ich keine Kenntnisse über das Programmieren. Und die Anleitung + Beispielprogramme helfen mir auch nicht so ganz weiter.

    Gibt es ein Tutorial oder einige Beispielprogramme auf Deutsch ?

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    Hallo,

    allgemein zur C Programmierung (das wird ja das eigentliche Problem sein) sind einige Tutorials in der Anleitung angegeben!
    Da steht auch dabei das die Einführung in die C Programmierung nur ein Crashkurs und kein komplettes Buch ist

    Übrigens - es kommt höchst selten vor das jemand (ohne Vorkenntnisse) die C Programmierung innherhalb von einem Tag durchschaut - wenn man kein Genie ist geht das nicht von heute auf morgen da muss Du Dir schon etwas mehr Zeit nehmen.


    MfG,
    SlyD

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.12.2010
    Beiträge
    147
    Ja aber wenn ich mir diese normalen Tutorials ansehe verstehe ich zwar das Programmieren ( mehr oder weniger ) , nur verstehe ich nicht wie ich das auf meinen RP6 übertragen soll.
    Da geht es ja darum das er z.B. gerade aus fährt.
    Gibt es eine Art Befehlsliste ? Wo z.B steht MotorSpeed = Motorgeschwindigkeit ( also keine übersetzung, sondern eine erklärung der Funktion )

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    Ab Seite 97 werden die Motorfunktionen erläutert.
    Mit ein paar simplen Beispielen.


    Erweiterte Beispiele gibts dann in den Beispielprogrammen.
    Die solltest Du in genau der Reihenfolge wie angegeben durchgehen. Da wird nach und nach alles eingeführt - aber gut desch isch allesch auf Englisch kommentiert - so wie es beim Softwareentwickeln üblich ist
    (wäre blöd zwei Versionen zu pflegen)


    Übrigens in der Library "RP6RobotBaseLib.c" stehen einige zustätzliche Kommentare. Eine "Befehlsliste" wäre dann wohl die zugehörige .h Header Datei.

    Ich meine irgendwann hier im Forum hätte auch mal jemand was gepostet - musst Du evtl. mal die Suchfunktion verwenden.

    MfG,
    SlyD

  5. #5
    RN-Premium User Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    522
    Naja, du kannst dir dazu die Beispielprogramme ansehen, da ist eigentlich alles super ausfühlrich dokumentiert.
    Ansonsten kann ich auch nur noch auf die Anleitung verweisen, nach dem Crashkurs werden doch auch die meisten Befehle erörtert.

    Einfach mal das simpelste Beispielprgramm nehmen und dann den Code dazu.
    Dann zugucken was der RP6 macht und verstehen warum.

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Um mir einen Überblick zu verschaffen hatte ich mir eine Liste mit allen Funktionen und den Querverweis zur betreffenden Stelle in der Library gemacht:

    Code:
    4.6.1. Mikrocontroller initialisieren
    void initRobotBase(void)
    void powerON(void)
    void powerOFF(void)
    
    4.6.2. UART Funktionen (serielle Schnittstelle)
    
    4.6.2.1. Senden von Daten über die serielle Schnittstelle
    void writeChar(char ch)
    void writeString(char *string)
    void writeString_P(STRING)
    void writeStringLength(char *data, uint8_t length, uint8_t offset)
    void writeInteger(int16_t number, uint8_t base)
    
    4.6.2.2. Empfangen von Daten über die serielle Schnittstelle
    void receiveBytes(uint8_t numberOfBytes)
    void waitUntilReceptionComplete(void)
    void copyReceivedBytesToBuffer(char *buffer)
    
    4.6.3. Delay Funktionen (Verzögerungen und Zeitsteuerung)
    void sleep(uint8_t time)
    void mSleep(uint16_t time)
    
    Stopwatch()-Makros
    startStopwatchX()
    stopStopwatchX()
    
    uint8_t isStopwatchXRunning()
    setStopwatchX(uint16_t preset)
    getStopwatchX()
    
    4.6.4. Status LEDs und Bumper
    void setLEDs(uint8_t leds)
    
    statusLEDs.LEDX
    updateStatusLEDs()
    
    uint8_t getBumperLeft(void)
    uint8_t getBumperRight(void)
    
    void task_Bumpers(void)
    bumper_left
    bumper_right
    void BUMPERS_setStateChangedHandler(void (*bumperHandler)(void))
    
    4.6.5. ADC auslesen (Batterie-, Motorstrom- und Lichtsensoren)
    uint16_t readADC(uint8_t channel)
    ADC_BAT --> Batteriespannungs Sensor
    ADC_MCURRENT_R --> Motorstromsensor des rechten Motors
    ADC_MCURRENT_L --> Motorstromsensor des linken Motors
    ADC_LS_L --> Linker Lichtsensor
    ADC_LS_R --> Rechter Lichtsensor
    ADC_ADC1 --> Freier ADC Kanal für eigene Sensoren
    ADC_ADC0 --> Freier ADC Kanal für eigene Sensoren
    
    void task_ADC(void)
    ADC_BAT: adcBat
    ADC_MCURRENT_L: adcMotorCurrentLeft
    ADC_MCURRENT_R: adcMotorCurrentRight
    ADC_LS_L: adcLSL
    ADC_LS_R: adcLSR
    ADC_ADC1: adc0
    ADC_ADC0: adc1
    
    4.6.6. ACS – Anti Collision System
    void setACSPwrOff(void) --> ACS IR LEDs aus
    void setACSPwrLow(void) --> Geringe Reichweite
    void setACSPwrMed(void) --> Mittlere Reichweite
    void setACSPwrHigh(void) --> Maximale Reichweite
    
    void task_ACS(void)
    obstacle_left
    obstacle_right
    void ACS_setStateChangedHandler(void (*acsHandler)(void))
    
    4.6.7. IRCOMM und RC5 Funktionen
    void IRCOMM_sendRC5(uint8_t adr, uint8_t data)
    void IRCOMM_setRC5DataReadyHandler(void (*rc5Handler)(RC5data_t))
    rc5data.device
    rc5data.toggle_bit
    rc5data.key_code
    
    4.6.8. Antriebs Funktionen
    void task_motionControl(void)
    
    void moveAtSpeed(uint8_t desired_speed_left, uint8_t desired_speed_right)
    getDesSpeedLeft()
    getDesSpeedRight()
    getLeftSpeed()
    getRightSpeed()
    
    void changeDirection(uint8_t dir)
    FWD - für Vorwärts (FWD ist eine Abkürzung für „Forwards“)
    BWD – für Rückwärts (BWD ist eine Abkürzung für „Backwards“)
    LEFT – nach links drehen
    RIGHT – nach rechts drehen
    getDirection()
    
    void move(uint8_t desired_speed, uint8_t dir, uint16_t distance,
    uint8_t blocking)
    DIST_MM(DISTANCE)
    uint8_t isMovementComplete(void)
    
    void stop(void)
    
    void rotate(uint8_t desired_speed, uint8_t dir, uint16_t angle,
    uint8_t blocking)
    
    4.6.9. task_RP6System()
    void task_RP6System(void)
    task_ADC();
    task_ACS();
    task_bumpers();
    task_motionControl();
    
    4.6.10. I²C Bus Funktionen
    
    4.6.10.1. I²C Slave
    void I2CTWI_initSlave(uint8_t address)
    I2CTWI_readRegisters
    I2CTWI_writeRegisters
    I2CTWI_genCallCMD
    I2CTWI_readBusy
    I2CTWI_writeBusy
    
    4.6.10.2. I²C Master
    void I2CTWI_transmitByte(uint8_t adr, uint8_t data)
    void I2CTWI_transmit2Bytes(uint8_t adr, uint8_t data1, uint8_t data2) 
    void I2CTWI_transmit3Bytes(uint8_t adr, uint8_t data1, uint8_t data2, uint8_t data3) 
    
    void I2CTWI_transmitBytes(uint8_t targetAdr, uint8_t *msg, uint8_t numberOfBytes)
    I2CTWI_BUFFER_SIZE
    I2CTWI_isBusy()
    
    uint8_t I2CTWI_readByte(uint8_t targetAdr)
    void I2CTWI_readBytes(uint8_t targetAdr, uint8_t * messageBuffer, uint8_t numberOfBytes);
    
    void task_I2CTWI(void)
    void I2CTWI_requestDataFromDevice(uint8_t requestAdr, uint8_t requestID, uint8_t numberOfBytes)
    void I2CTWI_getReceivedData(uint8_t *msg, uint8_t msgSize)
    void I2CTWI_setRequestedDataReadyHandler(void (*requestedDataReadyHandler)(uint8_t))
    void I2CTWI_setTransmissionErrorHandler(void(*transmissionErrorHandler)(uint8_t))
    (Liste aus http://www.roboternetz.de/phpBB2/zei...=300358#300358)

    Viel Spaß und Erfolg.

    Gruß

    mic

    [Edit]
    Eine noch viel bessere Liste gibt es hier:
    http://www.roboternetz.de/phpBB2/zei...=410780#410780

    Das PDF aus diesem Thread:
    http://www.roboternetz.de/phpBB2/download.php?id=15353

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.12.2010
    Beiträge
    147
    So ich hab mich mal etwas in das Thema eingelesen und mir aus der Befehlsliste ein Programm zusammengebastelt das folgendes machen soll :
    - Gerade aus fahren
    - Wenn ein Wiederstand kommt abbiegen und weiterfahren

    Doch der Compiler will es nicht speichern wegen folgendem Fehler:
    RP6Base_Move_01.c:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'RP6RobotBaseLib'
    RP6Base_Move_01.c:20:2: warning: no newline at end of file

    Mein Programm sieht so aus :

    include RP6RobotBaseLib.h

    int main initRobotBase{
    void powerON(void)
    void task_motionControl(void)

    void task_Bumpers(void)

    if uint8_t getBumperLeft(void)
    uint8_t getBumperRight(void)

    void moveAtSpeed(90,40)

    else
    void moveAtSpeed(100,100)


    return 0

    }

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    Also DA hilft dann aber wirklich nur das gute alte C Tutorial das hat nix mit der RP6 Funktionbibliothek zu tun.

    Da sind sehr viele Fehler drin - (Semikolon, Funktionsaufrufe, Endlosschleife nicht vorhanden, #include, ... ) - bitte arbeite mindestens den Crashkurs in der RP6 Anleitung von vorne bis hinten durch (nicht nur grob überfliegen).

    OK gut funktionieren würde es dann auch noch nicht - versuch doch erstmal die vorhandenen Beispielprogramme nur zu modifizieren das ist am Anfang erstmal einfacher weil man ein funktionierendes Grundgerüst hat.

    MfG,
    SlyD

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.12.2010
    Beiträge
    147
    Gut ich werd das morgen mal versuchen, danke.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.12.2010
    Beiträge
    147
    Hab jetzt mein erstes Programm zum laufen gebracht ( einfaches geradeaus fahren )

    Jetzt wollte ich das ganze steigern und hab das ganze so umgeschrieben das er bei einem Widerstand zurückstoßen SOLLTE und weiterfahren SOLLTE.

    Und was tut er ? Nichts.
    Er sollte eigentlich fahren, gegen etwas stoßen, zurückfahren ( 20cm) und dann wieder gerade aus fahren.

    Hier das Programm :

    Code:
     #include "RP6RobotBaseLib.h"
    
    int main(void)
    
    {
    	initRobotBase();
    	setLEDs(0b111111);
    	mSleep(1500);
    	setLEDs(0b100001);
    	powerON();
    	while(true);
    	{
    	move(90,FWD,DIST_CM(50),true);
    	}
    void bumpersStateChanged(void)
    {
    	if(bumper_left || bumper_right) 
    	{
    		moveAtSpeed(0,0);  
    		setLEDs(0b010000);
    		move(90,BWD,DIST_CM(20),true);
    		}}
    
    return 0;
    }

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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