PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zum Beispiel Example_05_Move_05



känguru
05.01.2011, 16:46
Hallo zusammen

Ich habe den RP6 nun seit Weihnachten uns bin dabei mich in die Beispiel Programme einzuarbeiten. Ich wollte jetzt beim Beispiel Programm „Example_05_Move_05“ ein Bewegungsmuster mit dem Befehl


void move(uint8_t desired_speed, uint8_t dir, uint16_t distance,
uint8_t blocking)
und


void rotate(uint8_t desired_speed, uint8_t dir, uint16_t angle,
uint8_t blocking)
Einbauen.
Nun zu meiner Frage wo muss ich diese Segmente einsetzen damit es funktioniert und muss ich die Funktion


behaviour_command_t cruise = {CRUISE_SPEED_FWD, CRUISE_SPEED_FWD, FWD, false, false, 0, MOVE_FORWARDS};verändern und welche Aufgabe hat die überhaupt (Ich weiß zwar das sie für das vorwärtsfahren verantwortlich ist aber sie sieht anders aus als void move)

Das Bewegungsmuster soll am Ende ungefähr so aussehen:
30cm nach vorne
90Grad nach links
50cm nach vorne

Geht dies überhaupt wenn er auch auf Hindernisse Reagieren soll oder muss ich dafür eine anderer Funktion verwenden?

Danke für eure antworten

Dirk
05.01.2011, 19:34
@känguru:

Das Programm „Example_05_Move_05“ ist schon ziemlich komplex. Die Steuerung des Verhaltens passiert mit dem Datentyp behaviour_command_t, der so aussieht:
typedef struct {
uint8_t speed_left; // speed left
uint8_t speed_right; // speed right
unsigned dir:2; // direction (FWD, BWD, LEFT, RIGHT)
unsigned move:1; // move flag
unsigned rotate:1; // rotate flag
uint16_t move_value; // move value
uint8_t state; // state of the behaviour
} behaviour_command_t;

Wenn man also im cruise Verhalten die Variable:
cruise = {CRUISE_SPEED_FWD, CRUISE_SPEED_FWD, FWD, false, false, 0, MOVE_FORWARDS};
... hat, dann bedeutet das, dass der RP6 mit CRUISE_SPEED_FWD vorwärts fährt.
Genau so kann er auch rotieren, indem man cruise.rotate nutzt.

Also: Die Befehle rotate und move kannst du direkt nicht in diesem Programm einsetzen, sondern must ein neues Verhalten schreiben.

Gruß Dirk

känguru
05.01.2011, 22:28
Danke für deine Antwort, sie hat mir wirklich sehr geholfen.

Das Grundprinzip glaube ich verstanden zu haben. In welche Richtung und mit welcher Geschwindigkeit er fahren soll kann ich Programiren, dafür sind ja die ersten drei Variablen zuständig.

Ich habe jetzt erst mal die vorhandene behaviour_command_t cruise Funktion etwas abgeändert.
Der Roboter soll jetzt 50 cm nach vornefahren und dann anhalten.

behaviour_command_t cruise = {CRUISE_SPEED_FWD, CRUISE_SPEED_FWD, FWD, false, false, DIST_MM(500), MOVE_FORWARDS};
Laut den Kommentaren müsste ich bei uint16_t move_value; die zu fahrende Distanz eintragen bzw. die Umdrehungen eintragen. Wenn ich das mache fährt der Roboter aber Trotzdem weiter.
Ich vermute das unsigned move:1 und unsigned rotate:1 etwas damit zu tun haben aber mit den Begriffen move flag und rotate flag kann ich nichts anfangen.

Was passiert außerdem wenn ich mehrere Befehle hintereinander ausführen will. Muss ich behaviour_command_t cruise nochmal ausführen(geht das überhaupt). Ist uint8_t state; dafür verantwortlich, also so was ähnliches wie case 1, case 2… ?

Diese Fragen klingen jetzt bestimmt etwas blöd, aber ich hoffe ihr könnt mir trotzdem helfen.

RP61900
08.01.2011, 00:54
Hey Leute hab mir vor 2 Wochen einen Rp6 zugelegt und komme beim Programieren nicht richtig weiter und werde auch mit den Beispielprogrammen nicht richtig schlau habe wenn ich ein Beispielprogramm mit AVR Studio 4 aufmache immer nur so Zahlencode wie Zum Beispiel : :100000000C9409010C9469040C9489040C94AD05BA https://www.roboternetz.de/phpBB2/images/smiles/eusa_think.gif
bei dem ist immer der selbe schritt in jeder Linie :1000...
werde daraus nicht schlau gibt es nur diese Programierung oder auch die mit Wörtern und Zahlen und wie bekomme ich die Raus wenn das nicht Möglich ist gibt es sicher eine Zahlenfolge die Für eine Vorwärtsbewegung zuständig ist. Oder könnt ihr mir ein besseres Programm anzubieten?
bitte Hilfe

radbruch
08.01.2011, 01:49
Du betrachtest eine *.hex-Datei

Der Quellcode steht in der Datei *.c

http://www.rn-wissen.de/index.php/Avr-gcc
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

RP61900
08.01.2011, 01:51
Die hexDateien sind doch die bei denen am schluss .hex steht oder und das sind auch die die ich schlussentlich in den Rp6 einspeise oder?

radbruch
08.01.2011, 01:57
In den Hex-Dateien stehen die Werte der Speicherstellen im Kontroller die dieser später als sein Programm interpretiert. Außer ihm kann das keiner lesen. Schau dir mal die .c-Dateien an und die Links, die ich in meinem letzten Beitrag oben eingefügt habe.

RP61900
08.01.2011, 01:57
so hab das Jetzt gefunden und wenn ich Jetzt ein Program in die C Datei geschrieben habe wie mache ich daraus eine Hexdatei ergibt sich das von selbst durch speichern oder wie mache ich das?

radbruch
08.01.2011, 02:00
Hast du die Anleitung schon durchgelesen?

http://arexx.com/rp6/downloads/RP6_MANUAL_DE_20071219.zip

RP61900
08.01.2011, 02:04
Ja hab aber nicht alles am Stück gelesen und wurde dadruch nich twirklich schlau und anstadt es nochmals zu lesen habe ich das übersprungen werde es nochmals machen danke für deine Hilfe werde mich wieder melden wenn ich es immer noch nicht kapiere.

RP61900
08.01.2011, 13:19
Irgentwie komme ich dem Abschnitt 3.2.3.1. Automatisches Installationsskript in der Anleitung nicht nach wie Komme ich zu dem Skript?

Mario94
08.01.2011, 14:59
Hast du Linux ? Oder hast du überlesen das da steht " WINDOWS Anwender können diesen Abschnitt überspringen" ?

Die .hex Datei wird erzeugt wenn du in Programmers Notepad auf make klickst ( steht alles in der Anleitung). Vorher musst du aber die datei als .c datei abspeichern !

RP61900
08.01.2011, 16:21
Ich bin Windows Anwender Habe aber ein Windows 7 Starter Packet. Wenn ich auf das Programm Programmers Notepad Klicke kommt eine Meldung Fehlende Verknüpfung was mache ich falsch?

Mario94
08.01.2011, 16:26
Wie schon geschrieben, wenn du Windows hast überspringst du diesen Teil.
Startet das Programm oder kommt einfach ein kleines Fenster indem die Meldung erscheint und nach einem Programm gesucht wird ?

RP61900
08.01.2011, 16:30
Fehlende Verknüpfung pn.ex wird gesucht. Klicken sie auf"Durchschen", um selbst nach der Datei zu suchen. das ist die Meldung hab es schon eine halbe stunde laufen lassen und ist nichts passiert bei durchsuchen kommt dann die meldung pn.ex existiert nicht bitte überprüfen sie ihre eingabe.

Mario94
08.01.2011, 16:33
Dann existiert der Pfad der Verknüpfung nicht ( oder nicht mehr ).
Such einfach das Verzeichnis indem das Programm installiert wurde, dann ein rechtsklick auf pn.exe, senden an => Desktop.

Dann hast du eine Verknüpfung die geht ;)

RP61900
08.01.2011, 16:45
kann es sein das ich das Programm Programmers Notepad noch zu dem winAVR instalieren muss und es nicht zusammen in einem Instaliert wurde kann das sein? weill ich habe gar keine Datei auf Meinem Rechner die pn.exe heisst.

Mario94
08.01.2011, 16:50
Das steht alles in der Anleitung ;)

Du installierst WinAVR und dann noch das Programmers Notepad.
Falls du es nicht hast musst du es runterladen z.B hier :
http://www.pnotepad.org/

RP61900
08.01.2011, 21:59
Bin jetzt ziemlich weiter jetzt habe ich eine andere Frage ich bekomme immer das beim umwandeln in eine hexdatei

> "c:\users\yannis\documents\rp6examples_20080915\rp6 base_examples\example_01_leds\\make_all.bat"

c:\users\yannis\documents\rp6examples_20080915\rp6 base_examples\example_01_leds>set LANG=C

c:\users\yannis\documents\rp6examples_20080915\rp6 base_examples\example_01_leds>make all

-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Size before:
AVR Memory Usage
----------------
Device: atmega32

Program: 6826 bytes (20.8% Full)
(.text + .data + .bootloader)

Data: 175 bytes (8.5% Full)
(.data + .bss + .noinit)




Size after:
AVR Memory Usage
----------------
Device: atmega32

Program: 6826 bytes (20.8% Full)
(.text + .data + .bootloader)

Data: 175 bytes (8.5% Full)
(.data + .bss + .noinit)



-------- end --------


> Process Exit Code: 0
> Time Taken: 00:02

ist das richtig oder mache ich da etwas falsch und wo befindet sich die Hex datei wenn es Richtig ist.
kann mit der Anleitung nicht viel anfangen. bin Jetzt bei dem Beispielprogramm Umzuwandeln.

Mario94
08.01.2011, 22:35
Da stimmt alles, die .hex datei ist dort wo das Programm gespeichert wurde.

Und bevor es zu weiteren Anfänger fehlern kommt, hier ein paar Tipps ;)
- Speichere deine Programme immer im Ordner in dem sich auch irgendwo die Lib's befinden

- Dort wo du dein Programm als .c speicherst muss dann auch die makeAll.bat, makeClean.bat und die makefile rein ( zu finden in den Beispielprogrammen)

- In der Makefile muss bei TARGET = dein Programm name stehen, z.B dein Programm heißt XY.c dann steht bei TARGET = XY .

Ich hoffe ich konnte dir helfen ;)

RP61900
08.01.2011, 22:49
Okey alles verstanden.
Wenn ich jetzt ein Neues Program schreibe wie muss ich dann das anstellen Reicht da die .C Datei um eine Hexdatei herzustellen oder brauchts da noch andere und wie schreibe ich die ?

Mario94
08.01.2011, 22:54
Die .c Datei ist dein Programm, um die Hexdatei zu erstellen brauchst du, wie oben schon beschrieben, die makeAll.bat, makeClean.bat und die makefile mit dem namen deines Programmes drin. ( Also das was vor dem .c steht )

Die Erklärung wie du ein Programm schreibst würde jetzt mehrere Seiten füllen, bzw. das Tutorial dafür.

Sieh im Buch nach, da ist ja ein Crashkurs in die Programmiersprache C enthalten.
Und ein Verweis auf diverse C Tutorials wie z.B " C von A bis Z" das ich persönlich sehr gut finde.

Hier ist C von A bis Z : http://openbook.galileocomputing.de/c_von_a_bis_z/

Die Beispielprogramme sind auch ganz gut erklärt.
Einfach mal alles von oben bis unten Durcharbeiten und verstehen ;)

Und vorallem, nicht daran verzweifeln!

Sowas lernt sich nicht in einem Tag oder einer Woche, wenn man immer nach und nach mehr macht ist es relativ einfach. Man darf sich eben nicht zuviel vornehmen^^
Also nicht nach dem Prinzip " Ich will einen Roboter bauen ! ...aber was ist eigentlich Volt und was Ampere? " ..erstmal langsam ins Thema einsteigen ;)

RP61900
08.01.2011, 22:57
Danke für deine Hilfe ich hoffe das ich auch mal so weit komme wie du mit deinem Rp6 Hab die Videos schon angeschaut.

Mario94
08.01.2011, 23:03
Danke für dein Lob :)

Das dauert auch nicht lange bis du soweit bist^^

Lies einfach die Anleitung mal genau durch, manche deiner Fragen hätten sich dadurch auch von selbst geklärt.

RP61900
08.01.2011, 23:05
Ja das werde ich Tun. jetzt habe ich noch eine andere Frage Welches Erweiterungsmodul würdest du mir Empfehlen das Mega128 oder das m32 ich will später eine Kamera und ewentuell ein greifarm machen wenn es mir gelingt`.

Mario94
08.01.2011, 23:11
Ich habe das M32 Modul, über das 128er kann ich nichts sagen;)
Die Idee mit dem Greifarm und der Kamera hatte ich anfangs auch :)

Arbeite dich einfach durch die Beispielprogramme und probier sie aus. Danach kannst du deine eigenen mal versuchen zu schreiben.

Und wenn das alles klappt würde ich die Frage hier nochmal stellen ;)
Jetzt brauchst du noch keins von beiden.

RP61900
08.01.2011, 23:15
Ja momentan muss ich erst lernen wie das Programiern Funktioniert später wenn ich einen Greifarm oder so mache habe ich dann keine Beispielprogramme mehr. wenn ich dann mit dem Programiern recht gut zurechtkomme wende ich mich hier nocheinmal.
Danke dir nochmals für deine Hilfe