RoboterCC - Robotic Code Compiler
Forum Robot Kits NIBO 2 Programm für Linienfolge Nibo 2

Welcome

Nachrichten

Sie sind nicht eingeloggt.

Werbung

Banner

Letzte Themen

  • Keine Beiträge vorhanden

Site-Statistic

  • 7426 private projects
  • 385 public projects
  • 16180353 lines compiled
  • 58212 builds
NIBO @ facebook YouTube Twitter
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
  • Seite:
  • 1
  • 2

THEMA: Programm für Linienfolge Nibo 2

Programm für Linienfolge Nibo 2 12 Jahre 10 Monate her #495

  • Patte
  • Pattes Avatar
  • OFFLINE
  • Fresh Boarder
  • Beiträge: 2
Hallo,

ich versuche gerade ein einfaches Programm für die Linienfolge über die beiden Liniensensoren zu programmieren. Da ich komplett neu auf diesem Gebiet bin, stoße ich auf einige Probleme.

Für die Motoransteuerung hatte ich zuerst die copro_setSpeed(); verwendet. Es funktionierte teilweise, nur hat man das gefühl das sich der Nibo immer wieder selbst aus der Bahn wirft. Die Sensoren schalten rechtzeitig nur die Räder reagieren zu träge, sogar auf gerader Strecke. Kurvenfahrt funktioniert noch gar nicht??

Nun hab ich es mit einer anderen Monteransteuerung versucht, fehlt denn noch irgendein wichtiges detail, weil die Motoren nun nicht mehr ansprechen. Der Nibo soll nur einer Weißen Linie auf scharzen Untergrund folgen.

So sieht mein Program aus:

#include <nibo/niboconfig.h>
#include <nibo/display.h>
#include <nibo/gfx.h>
#include <nibo/copro.h>
#include <nibo/delay.h>
#include <nibo/iodefs.h>
#include <nibo/bot.h>
#include <avr/interrupt.h>
#include <nibo/spi.h>
#include <stdio.h>
#include <nibo/leds.h>

#include <nibo/floor.h>
#include "nibo/pwm.h"
#include "nibo/adc.h"


#include <avr/interrupt.h>
#include <stdint.h>
#include <avr/pgmspace.h>


#define sense 60

int16_t speed_l = 0;
int16_t speed_r = 0;

int main()
{
sei();
bot_init();
spi_init();
floor_init();
display_init();
gfx_init();
leds_init();
pwm_init();

gfx_move (22, 0);
gfx_set_proportional (1);
gfx_print_text ("Linie folgen");
gfx_set_proportional (0);

gfx_move (5, 10);
gfx_print_char ('R');

gfx_move (118, 10);
gfx_print_char ('L');


copro_ir_startMeasure();
delay (10);
copro_setSpeedParameters(5, 6, 7);



while (1==1)
{


floor_update();
char text [20]="-- -- -- -- --";

// Bodensensoren

floor_update();
sprintf(text, "%02x %02x %02x %02x",
(uint16_t) (floor_relative[FLOOR_RIGHT]/8),
(uint16_t) (floor_relative[FLOOR_LEFT]/8),
(uint16_t) (floor_relative[LINE_RIGHT]/8),
(uint16_t) (floor_relative[LINE_LEFT]/8));
gfx_move(22, 30);
gfx_print_text(text);




if ((floor_relative[LINE_LEFT])>sense && (floor_relative[LINE_RIGHT])>sense)
{
speed_l = 250; speed_r = 250;
leds_set_status(2, 4);
leds_set_status(2, 5);
}

if ((floor_relative[LINE_LEFT])<sense && (floor_relative[LINE_RIGHT])>sense)
{
speed_l = 350; speed_r = 0;
leds_set_status(2, 5);
leds_set_status(0, 4);
}

if ((floor_relative[LINE_LEFT])>sense && (floor_relative[LINE_RIGHT])<sense)
{
speed_l = 0; speed_r = 350;
leds_set_status(2, 4);
leds_set_status(0, 5);
}




// Spannung

bot_update();
float volt = 0.0166 * bot_supply - 1.19;
sprintf(text, "%3.1fV", (double)volt);
gfx_move(30, 10);
gfx_set_proportional (1);
gfx_print_text("supply: ");
gfx_set_proportional (0);
gfx_print_text(text);

}
return 0;
}

wäre sehr froh um eure Hilfe. :)
Gruß Patte
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Programm für Linienfolge Nibo 2 12 Jahre 10 Monate her #503

  • Egon
  • Egons Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 316
Hallo Patte

Dein Programm - da sind einige "Unschärfen" ;)
- Du willst eine speed von max 350 Ticks/sek => 40Ticks/sek (siehe Doku!!) = ca 14cm => da wären das wohl ca...cm => das schafft der kleine Kerl nie...

- Du hast zwar die Variablen speed_l und speed_r, aber Du übergibst diese Variablen nie =>ohne copro_setSpeed(speed_l, speed_r) hat der kleine Kerl überhaupt keine Chance hat, loszufahren...


=> schlage vor, Du nimmst Dir erst mal die Programme aus dem tutorial und DANN die Programme aus example2 "zur Brust" - hilfreich ist (manchmal) auch die Doku ;)

nb - die Kurvenfahrt und auch das andere Fahren funktioniert bei korrekter Parametrierung => verwende die Fkt copro_setSpeed() mit den korrekten Parametern
(z.B. speed_l = 30, speed_r =30 für VORWÄRTS, für das Drehen setzt Du den entsprechenden Wert = 0) ..

Tipp: dieses copro_setSpeed() muß bei Deinen IF-Abfragen eingebaut werden ;)

mfg

Egon
lokalisieren, eliminieren, Vollzug melden
Letzte Änderung: 12 Jahre 10 Monate her von Egon.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Programm für Linienfolge Nibo 2 12 Jahre 10 Monate her #505

  • Patte
  • Pattes Avatar
  • OFFLINE
  • Fresh Boarder
  • Beiträge: 2
hmmm... die Tutorials hab ich schon gemacht.
und die funktion copro_setspeed() hatte ich ja auch schon verwendent. Bei Kurven hab ich dann ein Motor immer auf 0 gesetzt. Nur die Zeit die der Motor braucht um Anzuhalten dauert zu lang. bis da hin is der Nibo schon drüber raus gefahren.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Programm für Linienfolge Nibo 2 12 Jahre 10 Monate her #507

  • workwind
  • workwinds Avatar
  • OFFLINE
  • Administrator
  • Beiträge: 573
Die Funktion copro_setSpeed setzt die Zielwerte für die Regelung - die Auswirkungen sind verzögert, da über die Soll/Ist Abweichung geregelt wird. Unmittelbare Reaktionen bekommt man durch den Aufruf der copro_setPWM Funktion - dann jedoch ungeregelt.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Programm für Linienfolge Nibo 2 12 Jahre 10 Monate her #509

  • Nicole259
  • Nicole259s Avatar
  • OFFLINE
  • Senior Boarder
  • Beiträge: 28
Gibt es eigentlich irgendwo eine Tabelle mit den Maximalwerten für Motorgeschwindigkeit, LEDs Helligkeit, Distanzwerte, etc?
350Ticks/sec wär schon heftig, aber wie schnell geht den eigentlich?
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Programm für Linienfolge Nibo 2 12 Jahre 10 Monate her #510

  • Egon
  • Egons Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 316
Hallo

Also, es ist immer hilfeich, die Doku zu checken ;) , denn da steht u.a:

- dass sich die Helligkeit der LEDS im Bereich von 0...1024 bewegt (wobei die nächste Frage wäre - was bedeutet 1024 - in Lumen oder Candela oder... -ich würde sagen, sie bewegt sich zwischen dunkel = 0 und sehr hell = 1024)

- dass sich die PWM Werte der beiden Motoren im Bereich -1024 bis + 1024 vorgeben lassen, die PWM Werte sind bei idealisierter Mechanik und Elektronik proportional zum Drehmoment.

- die Distanzwerte (siehe Doku),aber da kann man ja selbst Messungen machen...

- die speed - da gibt's derzeit keine Angaben, ist ja auch abhängig von Batt-spg usw - auch da gilt: ausprobieren (mit speed_l = 30, dann 40, dann 50 ..)


Egon
lokalisieren, eliminieren, Vollzug melden
Der Administrator hat öffentliche Schreibrechte deaktiviert.
  • Seite:
  • 1
  • 2
Ladezeit der Seite: 0.074 Sekunden

Werbung