-         
RSS-Feed anzeigen

Frischling

Nibo 2 Linienfolgen

Bewerten
Hallo zusammen,

Ich will meinen Nibo 2 Roboter so Programmieren, dass er einer schwarzen Linie folgen kann
Allerdings macht er dies manchmal noch recht ruckartig und es kann
passieren das er von der Linie abkommt und er soll eine strecke abfahren
und am ende im Ziel stehen bleiben aber aufgrund der ruckartigen
Bewegungen bleibt er stehen sobald keiner der beiden Sensoren die
Schwarzen Linie noch erfassen kann.
kann mir jemand sagen, wie ich es schaffe dass er Sauberer und ohne von
der Linie zu kommen fährt?

Hier ist mein Quellcode:

#include <niboconfig.h>
#include <display.h>
#include <gfx.h>
#include <copro.h>
#include <delay.h>
#include <iodefs.h>
#include <bot.h>
#include <avr/interrupt.h>
#include <spi.h>
#include <stdio.h>
#include <leds.h>
#include <floor.h>
#include "pwm.h"
#include "adc.h"
#include <avr/interrupt.h>
#include <stdint.h>
#include <avr/pgmspace.h>


#define sense 19

define sense gibt den Vergleichswert der Helligkeit an


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();
copro_update();
char text [20]="-- -- -- -- --";

// Bodensensoren
hier nimmt der Bodensensor die werte auf

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


Hier kommen nun mehrer If schleifen welche dafür sorgen,
dass 1. der Roboter gerade ausfährt sollte der gemessen Wert links und
rechts kleiner als 19 sein

if ((floor_relative[LINE_LEFT])<sense &&
(floor_relative[LINE_RIGHT])<sense)
{

copro_setSpeed(20,20);

}
2. sollte der Wert links größer sein als 19 macht er einen Korrekturzug
nach rechts in dem das rechte Rad stehen bleibt und das linke dreht

if ((floor_relative[LINE_LEFT])>sense &&
(floor_relative[LINE_RIGHT])<sense)
{

copro_setSpeed(15,0);

}
3. sollte der wert rechts größer sein als 19 macht er einen Korrekturzug
nach links in dem das linke Rad stehen bleibt und das rechte dreht.

if ((floor_relative[LINE_LEFT])<sense &&
(floor_relative[LINE_RIGHT])>sense)
{

copro_setSpeed(0,15);

}
if ((floor_relative[LINE_LEFT])>sense &&
(floor_relative[LINE_RIGHT])>sense)
und 4. sollten Beide werte größer sein als 19 solle der Roboter stehen
bleiben.
{

copro_setSpeed(0,0);

}
// 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;
}

"Nibo 2 Linienfolgen" bei Twitter speichern "Nibo 2 Linienfolgen" bei Facebook speichern "Nibo 2 Linienfolgen" bei Mister Wong speichern "Nibo 2 Linienfolgen" bei YiGG.de speichern "Nibo 2 Linienfolgen" bei Google speichern "Nibo 2 Linienfolgen" bei del.icio.us speichern "Nibo 2 Linienfolgen" bei Webnews speichern "Nibo 2 Linienfolgen" bei My Yahoo speichern

Kommentare