RoboterCC - Robotic Code Compiler
Forum Robot Kits NIBObee Weg abfahren und Hindernisse erkennen

Welcome

Nachrichten

Sie sind nicht eingeloggt.

Werbung

Letzte Themen

  • Keine Beiträge vorhanden

Site-Statistic

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

THEMA: Weg abfahren und Hindernisse erkennen

Weg abfahren und Hindernisse erkennen 9 Jahre 3 Wochen her #3187

  • gchiffi
  • gchiffis Avatar
  • OFFLINE
  • Fresh Boarder
  • Beiträge: 2
Hallo zusammen.

Ich habe ein kleines Problem und vielleicht hat jemand eine gute Idee.
Ich will für den Nibobee ein Programm schreiben (in Java) mit welchen er ein Weg verfolgen kann und gleichzeitig die Sensoren aktiv sind, dass er ein Hinderniss erkennen kann.

Ich habe lediglich die Grundausstattung des Nibobee, weswegen er zu komplexe Programme auch nicht verarbeiten kann.

Falls jemand eine gute Idee hat wäre das super.
Weiter unten findet ihr den Code mit welchem wir es versucht haben, der aber nicht funktioniert hat.

Falls nur schon jemand weiss ob es für den Nibobee überhaupt möglich ist zwei Sachen aufs Mal zu machen wäre es super wenn mir da jemand ein Tipp geben könnte

Freundliche Grüsse


**************************************************************************************************************
CODE:

mport nanovm.nibobee.drivers.*;

public class Mainclass{

public static void main(String[] args) {

warte(2000);

while(true)
{
warte(2000);
gerade();
warte(2000);
links();
warte(2000);
gerade();
warte(2000);
rechts();
warte(2000);
gerade();
warte(2000);
links();
warte(2000);
gerade();
warte(2000);
rechts();
warte(2000);


}

}
static void warte(int ms){
if(Sensor.getRight() != 0)
{
Motor.setPWM(-600, -600);
Motor.setSpeed(-600, -600);
Leds.setStatus(0, true);
Leds.setStatus(1, false);
Leds.setStatus(2, false);
Leds.setStatus(3, false);
warte(1500);
Motor.stop();
Leds.setStatus(0, false);
Leds.setStatus(1, false);
Leds.setStatus(2, false);
Leds.setStatus(3, false);
warte(500);
}

if(Sensor.getLeft() != 0)
{
Motor.setPWM(-400, -600);
Motor.setSpeed(-400, -600);
Leds.setStatus(0, false);
Leds.setStatus(1, false);
Leds.setStatus(2, false);
Leds.setStatus(3, true);
warte(1500);
Motor.stop();
Leds.setStatus(0, false);
Leds.setStatus(1, false);
Leds.setStatus(2, false);
Leds.setStatus(3, false);
warte(500);}

if(Sensor.getLeft() != 0 && Sensor.getRight() !=0)
{
Motor.setPWM(-400, -500);
Motor.setSpeed(-200, -300);
Leds.setStatus(0, true);
Leds.setStatus(1, false);
Leds.setStatus(2, false);
Leds.setStatus(3, true);
warte(1500);
Motor.setPWM(0,0);
Motor.setSpeed(0, 0);
Leds.setStatus(0, true);
Leds.setStatus(1, true);
Leds.setStatus(2, true);
Leds.setStatus(3, true);
warte(500);
}

Clock.delayMilliseconds(ms);
if(Sensor.getRight() != 0)
{
Motor.setPWM(-600, -600);
Motor.setSpeed(-600, -600);
Leds.setStatus(0, true);
Leds.setStatus(1, false);
Leds.setStatus(2, false);
Leds.setStatus(3, false);
warte(1500);
Motor.stop();
Leds.setStatus(0, false);
Leds.setStatus(1, false);
Leds.setStatus(2, false);
Leds.setStatus(3, false);
warte(500);
}

if(Sensor.getLeft() != 0)
{
Motor.setPWM(-400, -600);
Motor.setSpeed(-400, -600);
Leds.setStatus(0, false);
Leds.setStatus(1, false);
Leds.setStatus(2, false);
Leds.setStatus(3, true);
warte(1500);
Motor.stop();
Leds.setStatus(0, false);
Leds.setStatus(1, false);
Leds.setStatus(2, false);
Leds.setStatus(3, false);
warte(500);}

if(Sensor.getLeft() != 0 && Sensor.getRight() !=0)
{
Motor.setPWM(-400, -500);
Motor.setSpeed(-200, -300);
Leds.setStatus(0, true);
Leds.setStatus(1, false);
Leds.setStatus(2, false);
Leds.setStatus(3, true);
warte(1500);
Motor.setPWM(0,0);
Motor.setSpeed(0, 0);
Leds.setStatus(0, true);
Leds.setStatus(1, true);
Leds.setStatus(2, true);
Leds.setStatus(3, true);
warte(500);
}

}

static void rechts(){
Motor.setPWM(400,200);
Motor.setSpeed(400,200);
Leds.setStatus(3, true);
Leds.setStatus(2,true);
Leds.setStatus(0, false);
Leds.setStatus(1, false);


}
static void links(){
Motor.setPWM(200,500);
Motor.setSpeed(200,400);
Leds.setStatus(0, true);
Leds.setStatus(1,true);
Leds.setStatus(3, false);
Leds.setStatus(2, false);

}
static void gerade(){
Motor.setPWM(500,635);
Motor.setSpeed(500,635);
Leds.setStatus(1, true);
Leds.setStatus(2, true);
Leds.setStatus(3, false);
Leds.setStatus(0, false);
Clock.delayMilliseconds(2000);


}
}
Letzte Änderung: 9 Jahre 3 Wochen her von gchiffi.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Weg abfahren und Hindernisse erkennen 9 Jahre 3 Wochen her #3188

  • BirgerT
  • BirgerTs Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 325
Hi gchiffi,

habe zwar nicht die Ahnung von Java und nanovm - aber Dein Programm verstehe ich soweit, dass der/die Nibobee die Fühler nicht mitbekommt, weil der Controller in einer Warteschleife für das Fahrmanöver festhängt.
Du solltest Dir mal überlegen, was Du in so einer Situation im real Life machen würdest..
Du sollst 5 Minuten geradeaus gehen, dann links abbiegen und wieder 5 Minuten gerade ausgehen usw.
Also Du brauchst in Deinem Programm eine Uhr, die quasi Automatisch läuft (Funktion get_ms() vorhanden?)
Während Du gehst musst Du Hindernissen ausweichen (auf Deinem Weg geparkte Autos, oder Bäumen).
Aber wenn Du beim Gehen immer nur auf Deine Uhr schauen würdest, Boing - Laterne gerammt..

Also
zerlege Deinen Weg in Etappen (Manöver, Richtung und Zeit)
// Hierfür würden sich Arrays anbieten, mit einem Zeiger auf den gerade aktiven Eintrag
// Manöver = Weg verfolgen, Hindernis links ausweichen, Hindernis rechts ausweichen
// Richtungen = Geradeaus, links, rechts, rückwärts
// Zeit = Dauer des Manövers
aktiviere Weg verfolgen
merke Dir das erste Etappenziel (Richtung und Zeit)
Schau auf die Uhr und merke Dir die Zeit
 
Loop: 
  Schau auf die Uhr und vergleiche mit gemerkter Zeit
  Hast Du das Etappenziel erreicht (Zeit abgelaufen)?
  dann
     ist Ausweichmanöver aktiv?
     dann
       liegt noch eine Etappe vor Dir?
       dann
         Merke Dir das nächste Etappenziel
         Schau auf die Uhr und merke Dir die Zeit
       sonst
         aktiviere Weg verfolgen
 
     sonst
       liegt noch eine Etappe vor Dir?
       dann
         Merke Dir das nächste Etappenziel
         Schau auf die Uhr und merke Dir die Zeit
       sonst
         Feuerwerk, Siegesfeier, angekommen..
 
  Ist der Weg frei (kein Fühler betätigt) 
  dann 
     gehe Richtung Etappenziel (Manöver ausführen), 
  sonst
     aktiviere Ausweichmanöver (Etappen für links/rechts ausweichen)
 
goto Loop

Schau auch mal, ob Du damit etwas anfangen kannst..
www.mikrocontroller.net/articles/Statemachine

Prinzip hierbei: Die Ampeln wären Deine Fahrmanöver, und die Induktionsschleifen die Fühler.
Der Administrator hat öffentliche Schreibrechte deaktiviert.
  • Seite:
  • 1
Ladezeit der Seite: 0.089 Sekunden

Werbung