- LiFePO4 Speicher Test         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 27

Thema: Frage zu Programmierung Nibobee

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    15.12.2009
    Beiträge
    28

    Frage zu Programmierung Nibobee

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    bin neu hier und habe mir vor kurzem einen Nibobee gekauft. Habe ihn zusammengelötet und es funktioniert auch alles. Habe jedoch zwei Fragen:

    Wie kann man die Motoren mithilfe der Odometriesensoren ansteuern? Ich möchte zum Beispiel das der Roboter geradeaus fährt (beide Motoren mit gleicher Drehzahl) und Abweichungen in der Drehzahl korrigiert.

    Wie kann man die Motoren für eine bestimmte Zeit einschalten? Also zum Beispiel für 10s beide Motoren mit der gleichen Geschwindigkeit (ohne Odometriekorrektur), dann für 5s nur der linke Motor usw.

    Wäre nett wenn ihr mir Beispiele zeigen könnten! Habe im Anhang mal den Programmtext für die zweite Frage.

    Viele Grüße,
    Manuel




    #include <nibobee/iodefs.h>
    #include <nibobee/motpwm.h>

    int main()
    {
    motpwm_init();

    while(1==1) {

    enable_interrupts();

    int16_t speed_l=0;
    int16_t speed_r=0;

    speed_l = 500;
    speed_r = 500;


    motpwm_setLeft(speed_l);
    motpwm_setRight(speed_r);

    }

    return 0;
    }

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    15.12.2009
    Beiträge
    28
    Weiß denn keiner eine Antwort auf meine Fragen?

    Viele Grüße,
    Manuel

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    31.03.2009
    Beiträge
    44
    Mein Nibobee sollte anfang nächste Woche kommen, dann kann ich mir das ganze einmal anschauen. Falls mir dann eine Lösung für deine Frage einfällt, poste ich es hier

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    15.12.2009
    Beiträge
    28
    Das wäre nett!

    Manuel

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    57
    Beiträge
    847
    Hallo,

    mit dem Befehl "delay" wartet die Bee mit der Ausführung des nächsten Befehls.

    z. B.:
    Code:
    _delay_ms(1000);

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    15.12.2009
    Beiträge
    28
    Danke, habe es gerade ausprobiert.
    Ich kann bei diesem Befehl aber nicht die Dauer einstellen, wie lange der Motor laufen soll, oder? Außerdem führt er dann nur den letzten Befehl aus (hier: speed_l = 400; speed_r = 400 . Was mache ich falsch?

    Manuel

    Code:
    #include <nibobee/iodefs.h>
    #include <nibobee/motpwm.h>
    #include <nibobee/delay.h>
    
    int main() 
    {
    motpwm_init();
    
    while(1==1) {
    
    enable_interrupts();
    
    int16_t speed_l=0;
    int16_t speed_r=0;
    
    speed_l = 400;
    speed_r = 400;
    _delay_ms(1000);
    speed_l = 0;
    speed_r = 400;
    _delay_ms(1000);
    speed_l = 700;
    speed_r = 700;
    
    
    motpwm_setLeft(speed_l);
    motpwm_setRight(speed_r);
    
    }
    
    return 0;
    }

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Bei meiner bee dauert delay(1) eine ms:
    Code:
    #include <nibobee/iodefs.h>
    #include <nibobee/base.h>
    #include <nibobee/led.h>
    #include <nibobee/motpwm.h>
    #include <nibobee/delay.h>
    
    int main(void)
    {
    	int16_t speed_l=0;
    	int16_t speed_r=0;
    
    	led_init();
    	motpwm_init();
    	enable_interrupts();
    	
    	led_set(0,1);
    	delay(3000);
    	led_set(0,0);
    	led_set(1,1);
    
    	while(1==1) {
    
    		speed_l = 400;
    		speed_r = 400;
    		motpwm_setLeft(speed_l);
    		motpwm_setRight(speed_r);
    		delay(1000);
    
    		speed_l = 0;
    		speed_r = 400;
    		motpwm_setLeft(speed_l);
    		motpwm_setRight(speed_r);
    		delay(1000);
    
    		speed_l = 700;
    		speed_r = 700;
    		motpwm_setLeft(speed_l);
    		motpwm_setRight(speed_r);
    		delay(1000);
    
    	}
    	return 0;
    }
    Die Motoransteuerung finde ich ziemlich zickig, ich weiß noch nicht, ob mir das so gefällt. Ich stehe mehr auf eigenverantwortliche Ansteuerung mit MotorDir()/MotorPWM(). Leider haben die Codescheiben nur 4 Löcher, 8 wären deutlich besser. Bei einer Drehzahlregelung dürften die unterschiedlichen Abstände zwischen High und Low Probleme bereiten.

    Gruß

    mic

    [Edit]
    Noch 'ne Anmerkung zu delay(): In meiner Datei delay.c ist das so definiert:

    Code:
    void delay(uint16_t ms){
        while(ms--)
          delay_ms(1);
    }
    Zum einen fehlt hier irgendwie der Unterstrich vor delay_ms() und zudem wär ein schlichtes delay_ms(ms) einfacher und vermutlich genauer weil ohne Overhead durch die Aufrufe von delay_ms(1)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    15.12.2009
    Beiträge
    28
    Vielen Dank!

    Jetzt funktioniert es so, wie ich es mir vorgestellt habe!

    Jetzt nur noch die Frage wegen der Odometrie. Wäre nett wenn dazu auch noch wer was weiß! Bis jetzt kann ich nur LEDs bei Radbewegung blinken lassen.

    Manuel

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Vielleicht reicht dir das schon zum Einstieg in die Odometry:
    Code:
    #include <nibobee/iodefs.h>
    #include <nibobee/base.h>
    #include <nibobee/led.h>
    #include <nibobee/motpwm.h>
    #include <nibobee/odometry.h>
    #include <nibobee/delay.h>
    
    int main(void)
    {
    	int16_t speed_l=0;
    	int16_t speed_r=0;
    
    	led_init();
    	motpwm_init();
    	odometry_init();
    	enable_interrupts();
    	
    	led_set(0,1);
    	delay(3000);
    	led_set(0,0);
    	led_set(1,1);
    
    	speed_l = 400;
    	speed_r = 400;
    
    	while(1==1)
    	{
    		odometry_reset();
    		motpwm_setLeft(speed_l);
    		motpwm_setRight(speed_r);
    		while(odometry_getLeft(0)+odometry_getRight(0) < 200); // auslesen ohne reset
    		motpwm_setLeft(0);
    		motpwm_setRight(0);
    		delay(1000);
    
    		odometry_reset();
    		motpwm_setLeft(-speed_l);
    		motpwm_setRight(-speed_r);
    		while(odometry_getLeft(0)+odometry_getRight(0) > -200); // würgs
    		motpwm_setLeft(0);
    		motpwm_setRight(0);
    		delay(1000);
    	}
    	return 0;
    }
    Gruß

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

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    18.12.2009
    Ort
    Halle (Saale)
    Alter
    67
    Beiträge
    30
    Liebe NIBObee-Gemeinde!
    Bin leicht am verzweifeln, aber vielleicht kann mir ja hier jemand helfen.
    Der NIBObee ist aufgebaut und hat alle Tests bestanden. Aufbau war bis auf ein paar kleine "Hakeligkeiten" bei den Getrieben ganz einfach. Einer der Fühler hakt auch noch gelegentlich - diese Konstruktion sollte noch mal überdacht werden.
    Da ich alle Programmiererei unter Linux (SuSE 11.2) mache, verwende ich als Entwicklungsumgebung Eclipse (CDT) mit dem AVR-Plugin. Dort kann man auch sämtliche Einstellungen vornehmen, wie im Tutorial für AVR-Studio beschrieben. Die ersten Test-Beispiele haben sofort funktioniert - Hochladen auf den NIBObee klappt auch problemlos - ergo dürfte grundsätzlich alles richtig konfiguriert sein.
    Die Probleme beginnen mit dem Testen der Liniensensoren. Bei diesem rudimentären Code krachts schon - kommentiere ich die beiden Zeilen mit "line" aus, so klappts:
    Code:
    #include <nibobee/iodefs.h>
    #include <nibobee/led.h>
    #include <nibobee/line.h>
    
    int main()
    {
    	led_init();
    	line_init();
    
    	return(0);
    }
    Das ergibt folgende Fehlermeldung (nur der Anfang):
    Code:
    **** Build of configuration Release for project NIBO_Line_Test ****
    
    make all 
    Building file: ../main.c
    Invoking: AVR Compiler
    avr-gcc -I/home/wolf/Software/NIBObeeLib/include/ -Wall -Os -fpack-struct -fshort-enums -funsigned-char -funsigned-bitfields -D_NIBOBEE_ -mmcu=atmega16 -DF_CPU=15000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o"main.o" "../main.c"
    Finished building: ../main.c
     
    Building target: NIBO_Line_Test.elf
    Invoking: AVR C Linker
    avr-gcc -Wl,-Map,NIBO_Line_Test.map -L/home/wolf/Software/NIBObeeLib/lib -mmcu=atmega16 -o"NIBO_Line_Test.elf"  ./main.o   -lnibobee_base -lnibobee_utils -lnibobee_line
    /home/wolf/Software/NIBObeeLib/lib/libnibobee_line.a(line.o): In function `do_calibrateBlack':
    line.c:(.text.do_calibrateBlack+0x12): undefined reference to `analog_getValue'
    line.c:(.text.do_calibrateBlack+0x1c): undefined reference to `analog_getValue'
    /home/wolf/Software/NIBObeeLib/lib/libnibobee_line.a(line.o): In function `line_calibrateBlack':
    line.c:(.text.line_calibrateBlack+0x4): undefined reference to `delay'
    
    *** und so weiter und so fort ***
    Hat jemand eine Idee, was da fehlt oder schief läuft? Wie gesagt: Alle Bespiele und eigenen Progrämmchen OHNE "line" funktionieren problemlos.
    Danke schon mal und viele Grüße!

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress