PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : NiboBee Genaue Kurven (90Grad etc)



Marlon
03.01.2010, 02:17
Hi
Ich hab mir vor kurzem den NiboBee gekauft und haben nun versucht ihm beizubringen genau kurven zu fahren.
Meine Vorgehensweise:
-Programm geschrieben welches ein Rad um eine Umdrehung dreht,(mit Odometriesensoren)
-Winkel gemessen
-in Odometrieschritte umgerechnet

Dabei kam raus:
Eine radumdrehung entspricht 55° und 19 "Odometrieschritten"
Alle bisauf 45° gerundet:
45°=15.5 (15 oder 16)
90°=31
180°=62
225°=78
270°=93
315°=109
360°=124
Bei höreren Geschwindigkeiten gilt dies nicht weil die Reifen ersteinmal durchdrehen.
Mein code Dazu


#include <nibobee/motpwm.h>
#include <nibobee/delay.h>
#include <nibobee/led.h>
#include <nibobee/odometry.h>

#define right 1
#define left 2

void dreh(uint8_t side,uint8_t steps)
{
odometry_reset();

switch(side)
{
case left: for (; odometry_getLeft(0)<steps; )
{
motpwm_setLeft(300);
}
break;
case right: for (steps=steps-1; odometry_getRight(0)<steps; )
{
motpwm_setRight(300);
}
break;
}
motpwm_stop();
}



int main()
{
motpwm_init();
odometry_init();
sens_init();

while(1==1)
{
enable_interrupts();
delay(1000);
dreh(left,124);
delay(1000);
dreh(right,124);
}
return(0);
}


Ich denke der Code ist selbserklärend

Marlon

PS:Ich denke dass Kann man auch wunderbar in die Libarys einbauen, was mein ihr

m125
03.01.2010, 12:24
Hallo,

ich wollte deinen Code gerade testen, doch beim Übersetzen bekomme ich einige Fehlermeldung. Könntest du mir da helfen? Ich habe die aktuellste Library. Alle anderen Programme funktionieren fehlerfrei.



In file included from ../OdometrieKurve.c:1:
C:\Dokumente und Einstellungen\Manuel\Desktop\Manuel\NIBOBee\Projek te\OdometrieKurve\..\..\..\..\..\..\..\Programme\N IBObeeLib\include/nibobee/motpwm.h:64: error: expected ')' before 'value'
C:\Dokumente und Einstellungen\Manuel\Desktop\Manuel\NIBOBee\Projek te\OdometrieKurve\..\..\..\..\..\..\..\Programme\N IBObeeLib\include/nibobee/motpwm.h:71: error: expected ')' before 'value'
In file included from ../OdometrieKurve.c:3:
C:\Dokumente und Einstellungen\Manuel\Desktop\Manuel\NIBOBee\Projek te\OdometrieKurve\..\..\..\..\..\..\..\Programme\N IBObeeLib\include/nibobee/led.h:48: error: 'IO_LEDS_BIT_L_YE' undeclared here (not in a function)
C:\Dokumente und Einstellungen\Manuel\Desktop\Manuel\NIBOBee\Projek te\OdometrieKurve\..\..\..\..\..\..\..\Programme\N IBObeeLib\include/nibobee/led.h:49: error: 'IO_LEDS_BIT_L_RD' undeclared here (not in a function)
C:\Dokumente und Einstellungen\Manuel\Desktop\Manuel\NIBOBee\Projek te\OdometrieKurve\..\..\..\..\..\..\..\Programme\N IBObeeLib\include/nibobee/led.h:50: error: 'IO_LEDS_BIT_R_RD' undeclared here (not in a function)
C:\Dokumente und Einstellungen\Manuel\Desktop\Manuel\NIBOBee\Projek te\OdometrieKurve\..\..\..\..\..\..\..\Programme\N IBObeeLib\include/nibobee/led.h:51: error: 'IO_LEDS_BIT_R_YE' undeclared here (not in a function)


Viele Grüße,
Manuel

Skroete
03.01.2010, 16:05
Hallo,

diese Zeile fehlt

#include <nibobee/iodefs.h>

Dann klappts auch mit dem Nachbran (seinem Programm

Viele Grüsse
Skroete

m125
03.01.2010, 16:20
Hallo,

habe die Zeile hinzugefügt, es kommen jedoch immer noch genau diesselben Fehlermeldungen wie oben. Was stimmt denn hier nicht?



#include <nibobee/motpwm.h>
#include <nibobee/delay.h>
#include <nibobee/led.h>
#include <nibobee/odometry.h>
#include <nibobee/iodefs.h>


#define right 1
#define left 2

void dreh(uint8_t side,uint8_t steps)
{
odometry_reset();

switch(side)
{
case left: for (; odometry_getLeft(0)<steps; )
{
motpwm_setLeft(300);
}
break;
case right: for (steps=steps-1; odometry_getRight(0)<steps; )
{
motpwm_setRight(300);
}
break;
}
motpwm_stop();
}



int main()
{
motpwm_init();
odometry_init();
sens_init();

while(1==1)
{
enable_interrupts();
delay(1000);
dreh(left,124);
delay(1000);
dreh(right,124);
}
return(0);
}


Viele Grüße,
Manuel

radbruch
03.01.2010, 16:39
So kann ich das Programm fehlerfrei übersetzen:

// nibobee: Drehwinkel vorgeben 3.1.2010 Marlon

// aus: https://www.roboternetz.de/phpBB2/viewtopic.php?t=51895

// Eine Radumdrehung entspricht 55° und 19 "Odometrieschritten"
// Alle auf 45° gerundet:
// 45°=15.5 (15 oder 16)
// 90°=31
// 180°=62
// 225°=78
// 270°=93
// 315°=109
// 360°=124


#include <nibobee/iodefs.h>
#include <nibobee/base.h>
#include <nibobee/motpwm.h>
#include <nibobee/delay.h>
//#include <nibobee/led.h>
#include <nibobee/odometry.h>

#define right 1
#define left 2

void dreh(uint8_t side,uint8_t steps)
{
//steps*=2; // meine bee hat 8 Löcher in den Codescheiben
odometry_reset();

switch(side)
{
case left: for (; odometry_getLeft(0)<steps; )
{
motpwm_setLeft(300);
}
break;
case right: for (steps=steps-1; odometry_getRight(0)<steps; )
{
motpwm_setRight(300);
}
break;
}
motpwm_stop();
}

int main(void)
{
motpwm_init();
odometry_init();
enable_interrupts();
delay(2000); // wait4programmer

while(1)
{
delay(1000);
dreh(left,124);
delay(1000);
dreh(right,124);
}
return(0);
}Die Werte passen bei mir so ungefähr.

Gruß

mic

m125
03.01.2010, 16:42
Hallo,

danke! So funktioniert es. Keine Ahnung wo der Fehler lag.

Viele Grüße,
Manuel

Marlon
03.01.2010, 20:07
Ja kann sein das die Werte nicht ganz genau sind.

ja stimt es fehlt die iodefs.h aber bei mir geht es auch ohne...
und die led.h ist noch drin von dem vorigem Programm.