RoboterCC - Robotic Code Compiler
Forum Robot Kits NIBObee NiboBee Odometrie

Welcome

Nachrichten

Sie sind nicht eingeloggt.

Werbung

Letzte Themen

Site-Statistic

  • 6524 private projects
  • 367 public projects
  • 11364027 lines compiled
  • 49390 builds
NIBO @ facebook YouTube Twitter
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:

THEMA: NiboBee Odometrie

NiboBee Odometrie 1 Jahr 9 Monate her #4306

  • Xagoo
  • Xagoos Avatar
  • OFFLINE
  • Junior Boarder
  • Beiträge: 11
Thankk youuu
Der Administrator hat öffentliche Schreibrechte deaktiviert.

NiboBee Odometrie 1 Jahr 9 Monate her #4307

  • Xagoo
  • Xagoos Avatar
  • OFFLINE
  • Junior Boarder
  • Beiträge: 11
Hey, ich bekomm das irgendwie immer noch nicht gebacken.
Ich hab das mal mit deiner Formel ausprobiert am anfang hab ich das gefühl korriegiert er dannach driftet er ab oder macht wilde drehungen.
Ich hab jetzt einfach mal wärend der Motor an war das eine Rad fest gehalten dann müsste das andere doch in der Theorie stehen bleiben tuht es aber nicht es dreht normal weiter.
Dann hab ich mal aus den Tutorial für c die Odometry rauf geladen.
Deren funktion soll sein ist odometrieLeft>10 led(0, 1) bei der anderen Seite genauso. Dabei konnte ich bei meiner Beobachtung sehen das die rechte Odometry nicht genau ist und mal nach einer umdrehung an geht oder nach 3 oder mehr.
Ich denke mal ich hab eine kalte Lötstelle oder wie man das nennt.
Wenn ich mit der Funktion arbeite: motpid_init () sollte ja eig meine räder ja schon von Haus aus gleich schnell drehen wenn ich left und right die gleichen werte haben das tuhen sie dort auch nicht.. :D
Sorry will dich eig nicht so zu spammen ^^

Hier nochmal mein neuer Quellcode:

#include <nibobee/robomain.h>



int power_l;
int power_r;

void setup() {

odometry_init ();
motpwm_init ();
power_l = 600;
power_r = 600;
}



void loop() {

int pwm;
int ticksl;
int ticksr;
int faktor;
//int ticksd;



odometry_reset ();
motpwm_setLeft(power_l);
motpwm_setRight(power_r);
delay(1000);

ticksl=odometry_getLeft(0);
ticksr=odometry_getRight(0);

//motpwm_stop ();

if( ticksl > ticksr )

{


faktor = ( 10000 / ticksl ) * ( ticksl - ticksr );

power_l = power_l - (int)( ( power_l * faktor ) / 10000 );

motpwm_setLeft(power_l);

}
if( ticksr > ticksl )
{

faktor = ( 10000 / ticksr ) * ( ticksr - ticksl );

power_r = power_r - (int)( ( power_r * faktor ) / 10000 );

motpwm_setRight(power_r);

}
delay(2000);

ticksl=odometry_getLeft(1);
ticksr=odometry_getRight(1);
}
Der Administrator hat öffentliche Schreibrechte deaktiviert.

NiboBee Odometrie 1 Jahr 9 Monate her #4308

ticksl=odometry_getLeft(0);
ticksr=odometry_getRight(0);

Schrieb ich da etwas von 1 statt 0? Warum schrieb ich das? Bitte mal nachlesen ...

Oh - das Programm schaue ich mir morgen mal an - heute nicht mehr :-)
Letzte Änderung: 1 Jahr 9 Monate her von jim_quakenbush.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

NiboBee Odometrie 1 Jahr 9 Monate her #4309

  • Xagoo
  • Xagoos Avatar
  • OFFLINE
  • Junior Boarder
  • Beiträge: 11
Okay kein stress dankeschön das du dir Zeit nimmst :-).
Der Administrator hat öffentliche Schreibrechte deaktiviert.

NiboBee Odometrie 1 Jahr 9 Monate her #4310

Du solltest nicht auf beiden Rädern korrigieren - das schaukelt sich dann runter und irgendwann bleibt das Teil stehen :-(

Nimm Dir ein "Bezugsrad" (ich habe das rechte Rad genommen) und passe die Geschwindigkeit des anderen Rads (des Linken) daran an.
Den Cast brauchst Du nicht (wenn, dann hätte ich "long" genommen) - aber Du hast recht, es kann einen Überlauf geben. Daher habe ich die "Teiler-Basis" variabel gemacht. Ich weiß jetzt gar nicht, ob die Ticks bei Rückwärts-Fahrt auch negativ werden können - da musst Du halt mal schauen :-)
int power_l;
int power_r;
 
int pwm;
int ticksl;
int ticksr;
int faktor;
int basis;
 
void setup() 
{
  odometry_init ();
  motpwm_init ();
 
  power_l = 600;
  power_r = 600;
 
  motpwm_setLeft(power_l);
  motpwm_setRight(power_r);
}
 
void loop() 
{
  delay(1000);
 
  ticksl=odometry_getLeft(1);
  ticksr=odometry_getRight(1);
 
  if( ticksr      < 40  )
  { 	
    basis = 100;
  }
  elseif( ticksr  < 400 )
  {
    basis = 1000;
  }
  else
  {
    basis = 10000;
  }
 
  if( ticksl > ticksr )
  {
    faktor = ( basis / ticksr ) * ( ticksl - ticksr );
    power_l = power_l - (int)( ( power_l * faktor ) / basis );
    motpwm_setLeft(power_l);
  }
  elseif( ticksl < ticksr )
  {
    faktor = ( basis / ticksr ) * ( ticksr - ticksl );
    power_l = power_l + (int)( ( power_l * faktor ) / basis );
    motpwm_setLeft(power_l);
  }
} 

Und formatiere Deinen Quellcode vernünftig, so dass man die Struktur / den Ablauf erkennen kann :-)
(In setup() gehört alles rein, was einmalig zum Programmstart passieren soll ...)

Statt des delay() kannst Du natürlich alles mögliche machen, wie LED's blinken lassen etc.
Letzte Änderung: 1 Jahr 9 Monate her von jim_quakenbush.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

NiboBee Odometrie 1 Jahr 9 Monate her #4311

  • Xagoo
  • Xagoos Avatar
  • OFFLINE
  • Junior Boarder
  • Beiträge: 11
Dankeschön,
Habe das jetzt einfach mal das so übernommen und er fährt immer noch schief denke mal das meine rechte Odometrie spinnt.
Habe mir mal das LCD Display bestellt und mal schauen was er mir das für Odometrie werte ausgibt.. :)
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Ladezeit der Seite: 0.066 Sekunden

Werbung