PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Roboterbausatz Nibo



workwind
28.06.2007, 15:28
Hallo,

Wir haben einen neuen Roboterbausatz entwickelt O:)

http://nibo.editthis.info/images/nibo/thumb/7/78/NiboAtNight.jpg/180px-NiboAtNight.jpg

Der Roboter Nibo hat drei Mikrocontroller: Einen ATmega128 und zwei ATtiny44.
Fünf IR Sensoren dienen zur Hindernisvermeidung.
Auf der Unterseite der Hauptplatine befinden sich vier Reflexlichtschranken um Linien zu folgen und Abgründen auszuweichen.

Weitere Informationen gibt es unter
http://nibo.nicai-systems.de

Viel Spaß!

stochri
28.06.2007, 15:37
Erinnert mich ein wenig an den ASURO.

Besonders das Fahrwerk ist sehr ähnlich. Ok, der Prozessor ist natürlich etwas größer.

steveLB
28.06.2007, 16:14
Dacht auch das es der Asuro wäre , nur mit den Batterien als Dach, zumindest sieht so das Bild aus

Florian
28.06.2007, 16:45
Hallo workwind,
interessanter Roboter, aber wohl eher etwas für bereits erfahrenere Bastler (Mega128 löten, verstehen etc.), sprich eine ganz andere Zielgruppe, als die des Asuros, an den er mich auch zuerst erinnerte ... ;o)
Aber 99€ ist doch noch recht günstig, wenn man sich mal einigermaßen vergleichbare Bausätze anschaut.
Im Vergleich mit der Anleitung des Asuros ist mir die Anleitung des Nibo noch etwas unanschaulich, da hat Arexx ausführlichere Arbeit geleistet, aber das läst sich ja noch ohne Probleme nachholen!

Insegsamt gefällt mir das Modell gut!

Viele Grüße
Florian

workwind
28.06.2007, 17:12
Hallo Florian!

Der ATmega128 und die beiden ATtiny44 Controller sind im Bausatz schon eingelötet, nur die übrigen bedrahteten Bauteile müssen bestückt werden. An der Dokumentation und am Wiki wird noch gearbeitet.

Gruß,
Nils

Jon
28.06.2007, 17:12
Mega128 löten,

Durch die vorbestückten SMD Bauteile können auch unerfahrene Bastler die übrigen Bauteile auf die Platine löten.

Mir ist noch [url=http://www.nicai-systems.de/nibo_daten.html]hier[/urll] aufgefallen, dass du Aktorik geschrieben hast. Heißt das nicht Auktorik?

jon

Florian
28.06.2007, 17:21
Hallo Jon,
der Begriff der Aktorik leitet sich von Aktor (engl. actuator | to actuate = in Gang bringen, auslösen, betätigen), einer aktiven, ausführenden Komponente, ab.

"Auktorik" sagt mir nichts und auch ein bekanntes Hilfsmittel* spuckt nichts aus ... was soll das sein?

Viele Grüße
Florian



*Wiki hilft mal wieder ;o)
http://de.wikipedia.org/wiki/Aktorik
http://de.wikipedia.org/wiki/Aktor

Bart W.
28.06.2007, 17:32
Hallo

Und auf was gleitet er? Direkt auf dem Messing-Profil?

bart

radbruch
28.06.2007, 19:13
Hallo,

falls ein Tester gesucht wird, stelle ich mich gerne zur Verfügung.

Ich habe nur bis "Der kurzgeschlossene Betrieb dient zur besseren Energieausnutzung bei der PWM-Ansteuerung." gelesen, das reichte mir dann schon für's Erste. Ich würde mal eine Rechtschreibprüfung über die Betriebsanleitung laufen lassen und einige Stellen manuell umformulieren. Denn Rest lese ich dann, wenn ich mehr Zeit habe.

Preis/Leistung scheint mir auf den ersten Blick ok, dass der eigentlich schon schnelle Kontroller noch zwei Knechte an seiner Seite hat, ist sicher gut. Aber ob das "jungen Leuten technische Sachverhalte vermittelt" wage ich zu bezweifeln. Viele quälen sich schon mit dem asuro sehr, und der ist wirklich nicht sehr komplex.

Gruß

mic

[Edit]
Ich habe fairerweise mal weitergelesen:


2.1 Erforderliches Werkzeug
Für die Montage des Nibo werden folgende Werkzeuge benötigt:
• Lötkolben
• Elektroniklötzinn
• Entlötlitze
• Multimeter (mit Durchgangsprüfer)
• Seitenschneider
• Spitzzange
• Biegehilfe für Widerstände
• kleiner Schlitzschraubendreher
• kleiner Kreuzschraubendreher
• 2 mm Innensechskantschlüssel (Inbus)
• Messer


und dann weiter unten, bei der Montage der Ritzel:



Das geht am einfachsten indem man die Achse in die Seite mit dem kleinen Ritzel steckt, und sie danach vorsichtig mit einem kleinen Hammer durch die Bohrung treibt.


Welcher Hammer? Ich vermute mal, dass wird so weitergehen. (Leider hab' ich heute 'nen bissigen Tag, weil ich meine Werkstatt aufräumen muss.)

Ziel der Entwicklung war es einen für Schüler und Studenten erschwinglichen Bausatz anbieten
Die tun mir jetzt schon leid...

[Edit2]

falls ein Tester gesucht wird, stelle ich mich gerne zur Verfügung.
Ich ziehe mein vorschnelles Angebot hiermit zurück :-#

workwind
28.06.2007, 19:28
Hallo radbruch,

Was hast Du an der Vierquadrantenansteuerung bei der Pulsweitenmodulation zwecks hohem Wirkungsgrads auszusetzen?

Die jungen Leute haben es einfacher, da die Programme für die beiden Knechte schon vorgefertigt mitgeliefert werden, und sie somit nicht damit beginnen müssen die Geheimnisse eines PID Reglers zu erforschen. Wer das will darf die Knechte natürlich auch mit eigenem Code füttern... ;-)

In Kombination mit der freien NanoVM (http://www.harbaum.org/till/nanovm/index.shtml) ist es sogar möglich den Roboter mit Java zu programmieren; die Klassen zur Anbindung der Hardware sind momentan in Arbeit.

Gruß,
Nils

crazy-josef
28.06.2007, 20:00
also ich bin 14 und hab bis jetzt noch 0 erfahrung mit bots gemacht (außer meinem asuro den ich beim selftest iwie geschrottet bekommen hab und meinem myavr board http://www.myavr.de/myForum/viewtopic.php?t=1838&sid=15753d32dfd43f1f948abf2d2a916533
(ich blick nich ganz ob die 0 ahnung von vista64 hamn oder ich den falschen treiber nachgelesen hab^^)
ich wäre doch der perfekte tester (für nen kostenlosen bot versteht sich^^)

radbruch
28.06.2007, 20:26
Hallo


Was hast Du an der Vierquadrantenansteuerung bei der Pulsweitenmodulation zwecks hohem Wirkungsgrads auszusetzen?

Jetzt wird's absurd. Der Wirkungsgrad hat hiermit doch gar nichts zu tun. 4-Quadranten bedeutet regeln mit Bremsen. Und das gegebenenfalls auch aktiv mit umgepoltem Motor, wenn Kurzschließen und Reibung zum Verzögern nicht ausreicht. Wenn das Umpolen als schlechte Energieausnutzung interpretiert wird, dann stimmt kurzschließen "dient zur besseren Energieausnutzung " natürlich. Oder kann das Teil rückspeisen? Dann sollte man aber besser nicht kurzschließen. Ich lasse mich aber gerne belehren, denn das ist nicht wirklich mein Fachgebiet.

Ich befürchte, viele nibos werden im Müll landen, weil ihre neuen Herrchen sie nicht in den Griff bekommen. Das ist kein Einsteigermodell und kein Spielzeug, auch wenn die Anleitung und der recht geringe Preis das so darstellen. Wer sich darüber im Klaren ist und die entsprechenden Kenntnisse und Fähigkeiten besitzt, erwirbt viel Roboter für wenig Geld und hat sicher seinen Spass mit dem nibo.

Gruß

mic

ehenkes
02.07.2007, 23:10
Wie seht ihr den NIBO (ich bevorzuge Großschreibung) im Vergleich zum RP6, vor allem bezüglich der C-Programmierung und der angekündigten Erweiterungsmöglichkeiten?

radbruch
02.07.2007, 23:18
Ich bin es eben gewohnt, dass man die Herrn groß und die Diener klein schreibt. Aber das ist eines meiner anderen Hobbies und gehört hier nicht her.

ehenkes
11.07.2007, 22:28
Ich befürchte, viele nibos werden im Müll landen, weil ihre neuen Herrchen sie nicht in den Griff bekommen. Das ist kein Einsteigermodell und kein Spielzeug, auch wenn die Anleitung und der recht geringe Preis das so darstellen. Wer sich darüber im Klaren ist und die entsprechenden Kenntnisse und Fähigkeiten besitzt, erwirbt viel Roboter für wenig Geld und hat sicher seinen Spass mit dem nibo.
Die Beschreibung ist noch nicht ausreichend anfängertauglich, d.h. verbesserungsfähig. Daran kann man arbeiten. Das Konzept ist gut durchdacht! Ich kann mir den NIBO momentan als Upgrade vom ASURO auf ein leistungsfähiges System vorstellen. Was mir richtig gut gefällt, ist das stabile Aluminium-Grundgerüst. Keine Motoren, die in schlapprigen Kabelbindern hin und her rutschen, und keine gequälten Getriebe, sondern ein professionelles Konzept mit gut konzipierter Mechanik. Aluminium und richtige Schrauben! Kein Tischtennisball, der langsam durchscheuert, sondern ein verschraubtes und haltbares System. Ich könnte NIBO-Fan werden, wenn mit der Programmierung alles klappt und eine richtig gute C-Bibliothek zur Verfügung steht. Daran wird z.Z. noch entwickelt.

Siehe: http://www.henkessoft.de/Roboter/Roboter.htm#NIBO

ehenkes
14.07.2007, 14:52
Erinnert mich ein wenig an den ASURO.
NIBO kann für einen bisherigen ASURO-Nutzer ein interessantes Upgrade werden (ATmega128, OOP, erweiterte Sensorik, ISP, Grafik-Display mit 64*128 Pixel)

Besonders das Fahrwerk ist sehr ähnlich.
Ja, das ist richtig. Der Antrieb des NIBO erfolgt mit zwei Motoren vom Typ 2025-02 (IGARASHI) mit 3-12 Volt Gleichspannung, 1 Nmm max. Drehmoment und einer Getriebeuntersetzung von 1:25 (analog ASURO).
http://www.henkessoft.de/Roboter/Roboter.htm#NIBO

Ok, der Prozessor ist natürlich etwas größer.
Der ATmega128 mit seinen beiden Assistenten ATtiny44 ist wohl einsame Spitze in dieser Preisklasse und bietet vor allem die Möglichkeit, interessante Software, z.B. im Bereich autonome KI, zu erzeugen.

Und auf was gleitet er? Direkt auf dem Messing-Profil?verschraubter runder Holzstein (wie Dame/Mühle) mit angeklebtem (also austauschbarem) Teflon-Gleiter. Nicht übel die Idee,
sozusagen ASURO deluxe, was ich schon länger suchte.

Das ist kein Einsteigermodell und kein Spielzeug, auch wenn die Anleitung und der recht geringe Preis das so darstellen. Stimmt! Aber genau das ist doch toll. Wir brauchen keinen ASURO 2, sondern ein ASURO Upgrade. Das könnte NIBO werden, wenn er eine ausreichend umfangreiche und aktive Community findet.

radbruch
14.07.2007, 15:46
Hallo ehenkes

Du schreibst:

Wir brauchen keinen ASURO 2, sondern ein ASURO Upgrade
Da hast du recht, aber das wird sicher der RP6 werden. O:)

Das schreibe ich nicht, weil ich einen RP6 umsonst bekommen habe, sondern weil ich seit einem halben Jahr einen asuro besitze. Und ich kann wohl sagen, den habe ich ziemlich ausgereizt. Alle meine (kostengünstigen!) Umbauten kann man einfach nachbauen und mit wenigen Handgriffen wieder entfernen, selbst meine Servoansteuerung war nur optisch gekoppelt. Was mir allerdings immer fehlte, war die Möglichkeit, eine Erweiterung ohne Löten oder Wegfall der anderen Funktionen einfach nur einzustecken.

Der Umstieg auf den RP6 beschränkte sich bei mir als asuro-Besitzer auf die Installation des RP6-Ladeprogramms (und der benötigten Java-Engine) und das Kopieren der Library und der Dokumentation. Nun habe ich beide Roboter im selben Verzeichniss und kann wahlweise den asuro oder den RP6 programmieren. Einziger Unterschied: einmal ein Mega8 und einmal ein Mega32.

Und das alles mit den RP6-Labraries, die ich als optimal einstufe, denn sie verwenden ein Task-System, das ich so ähnlich bei meinen asuro-Programmen schon immer umgesetzt hatte. Ich brauche keine Interrupts, keine erweiterten Libraries und keine gettime()/Zykluszählertricks mehr, um meine Ideen umzusetzten. Deshalb ist der RP6 für mich der optimale asuro-Upgrade.

Wenn ich den nibo mit dem RP6 (den schreibe ich groß, denn das ist kein Robotername, sondern eindeutig die Typbezeichnung einer Maschine, etwa so wie R2D2 oder 3PO) vergleiche, siegt der RP6 in allen Punkten, die ich beim nibo bisher getestet habe. Das beginnt bei der Doku und endet beim Support hier im RN-Forum (an dem ich mich wohl selbst beteiligen werde *lol*).

Warum kaufst du dir nicht einfach einen nibo und testest ihn für uns? Ich weis, daß du hier im Forum auch recht aktiv bist, aber ich kann mich an keinen eigenen Thread von dir erinnern, in dem du uns etwas von deiner Robotertätigkeit zeigst. Ich lese von dir nur immer Hinweise auf deine Hp, Hinweise auf Roboter-KI, Hinweise auf AVR-Kentnisse, Hinweise auf den tollen nibo, aber von deinem eigenen Schaffen lese ich nichts. Zeig uns und vor allem mir mal was, dass würde dich und deine Beiträge bestimmt glaubwürdiger machen.

Ich hoffe übrigens, dass diesmal dein Beitrag (Verfasst am: 14.07.2007, 14:52), auf den ich hier Bezug nehme, nicht wieder kommentarlos verschwindet.

Gruß

mic

ehenkes
14.07.2007, 18:32
@Radbruch: Ja, hast Du denn Deine Werkstatt immer noch nicht aufgeräumt, dass Du hier weiter so bissig bist? ;-) ](*,)

Ich weis, daß ...(Aktuell korrekt: Ich weiß, dass ...)
Du willst andere über deutsche Rechtschreibung belehren? Dass ich nicht lache ... Bezüglich der Groß-/Kleinschreibweisen mag es jeder halten, wie er möchte. Du schreibst "weis" ja auch mit einem "s" anstelle eines "ß" obwohl es von "wissen" herrührt. Dafür schreibst Du "daß" anstelle "dass". Du bist wohl innovationsfeindlich? ;-)

In diesem Thread geht es um den NIBO. An ein paar Punkten hast Du Recht:
1) Der NIBO (Bausatz, ein ATmega128 und zwei ATtiny44 bereits eingelötet) steht als ASURO-Nachfolger momentan in Konkurrenz zum RP6 (fertig aufgebaut).
2) NIBO ist kein einfaches System. Die Anfängertauglichkeit sollte daher noch bewiesen werden.

Ich persönlich sehe den NIBO und den RP6 als mögliche Nachfolger für den ASURO, der ein wirkliches Einsteigermodell ist. Die Platine des NIBO ist dagegen signifikant komplexer. An diesem Modell sollte man m.E. das Löten nicht lernen.


Wenn ich den nibo mit dem RP6 ... vergleiche, siegt der RP6 in allen Punkten, die ich beim nibo bisher getestet habe.Was genau hast Du bisher beim NIBO getestet außer einem flüchtigen Anlesen der Dokumentation? Nenne hier bitte die exakten Fakten, damit wir diese sauber gegeneinander stellen können.

In einem Punkt siegt der NIBO m.E. ganz klar vor dem RP6, nämlich im Design, siehe http://nibo.editthis.info/images/nibo/e/e5/NiboLight.jpg obwohl man dabei die Truck-Reifen immer noch sieht, aber die kann man ja leicht gegen andere Reifen austauschen. ;-) Design ist allerdings kein entscheidender Punkt. Was zählt ist die Technik, der Preis und die Möglichkeiten.

Über die Programmierung des NIBO kann ich noch nichts sagen. Da hat der RP6 - bei den Testern - zeitlich noch die Nase vorn. Programmierst Du den RP6 auch in Java und in C++?

Das stabile Aluminiumfahrwerk des NIBO hat mich - nach dem Kabelbinder-Geschlappere des ASURO - übrigens bereits überzeugt.
http://www.henkessoft.de/Roboter/Bilder/NIBO_Antrieb.jpg
Ich denke, da steht der RP6 auch gut da. Wetterfest sind beide nicht.


... und endet beim Support hier im RN-Forum
Ich hoffe doch ernsthaft, das Roboternetz wird - zumindest in der Anfangsphase - beide Roboter, den RP6 und den NIBO, unterstützen. Dieser Thread ist ja schon mal ein Anfang.


Warum kaufst du dir nicht einfach einen nibo und testest ihn für uns?... Akzeptiert, eigene praktische Erfahrungen sind durch nichts zu ersetzen. Kaufen finde ich gut, denn dann bleibt man in der Meinung frei! "Tester" hat immer ein gewisses "Geschmäckle". Ich werde meinen Erfahrungen hier und auf meiner Homepage zu gegebener Zeit freien Lauf lassen.

Ich bin übrigens bezüglich RP6 und NIBO noch weitgehend ergebnisoffen. Was aus diesen Basis-Modellen wird, hängt auch nicht zuletzt von uns ab. Vielleicht gewinnen bei mir und bei anderen Roboter-Fans alle beide. Die Zeit ist reif für Robotics, das hat sogar schon Microsoft begriffen. :)

radbruch
14.07.2007, 19:06
Hallo ehenkes,

leider hatte ich schon als Kind ich eine Rechtsschreibschäche (http://de.wikipedia.org/wiki/Rechtschreibschw%C3%A4che), die nie erkannt wurde. Bis vor ein paar Jahren habe ich deshalb fast gar nichts geschrieben, weil mir das peinlich war. Durch meinen Chat und einige Foren bin ich inzwischen, und darauf bin ich echt stolz, in der Lage, mich für andere halbwegs leserlich schriftlich auszudrücken. Blöderweise ist aber mein rechtes Bein kürzer als mein Linkes, deshalb hinke ich etwas. Da du das nun auch weist, kannst du nun auch darauf rumhacken. Und ich habe nie (soweit ich mich erinnern kann) irgend jemanden hier wegen seiner Rechtsschreibung angemacht (außer unserem Youngster, und das habe ich inwzischen mit ihm persönlich geklärt).

Das asuro-Upgrade war übrigens dein Offtopic, das habe ich nur aufgenommen und kommentiert. Ich weiß (wieder was gelernt) natürlich, dass dies hier ein nibo-Thread ist.

Ich mag mich hier nicht mit dir rumzoffen, ich wollte mir nur mal meine Gedanken von der Seele schreiben. Und das habe ich ja nun getan. Die Kernfrage meines Beitrags hast du allerdings immer noch nicht beantwortet:


Zeig uns und vor allem mir mal was, dass würde dich und deine Beiträge bestimmt glaubwürdiger machen.


Gruß

mic

[Edit]
Ich hatte ja schon fertig, aber das finde ich wirklich klasse:

In einem Punkt siegt der NIBO m.E. ganz klar vor dem RP6, nämlich im Design
Deshalb wollen meine Kids auch genau diesen Pudding, weil dessen Verpackung so cool aussieht. *lol*

ehenkes
14.07.2007, 19:29
@radbruch: In der Sache sind wir doch garnicht weit entfernt. Wieso machst Du hier einen auf Mitleid? Du hast doch hier im NIBO-Thread gerade auch bezüglich der Rechtschreibung vom Hocker gezogen, oder ist dies hier etwa nicht von Dir?

Ich habe nur bis ... gelesen, das reichte mir dann schon für's Erste. Ich würde mal eine Rechtschreibprüfung über die Betriebsanleitung laufen lassen und einige Stellen manuell umformulieren. Denn Rest lese ich dann, wenn ich mehr Zeit habe. Die Dokumentation des NIBO ist noch nicht rund. Daran wird übrigens gearbeitet. Die aktuelle Version http://download.nicai-systems.com/nibo/DokuNibo_20070712.pdf wurde vom Verfasser inzwischen deutlich verbessert. Auch dein "Hammer" ist inzwischen in der Werkzeugliste aufgeführt, etc. ;-)


Zeig uns und vor allem mir mal was ...Ich habe doch geschrieben, dass ich den Nibo (mal die Groß-/Klein-Schreibweise seines Erfinders) bauen und testen werde. Den RP6 schauen sich momentan ja schon genügend meinungsbildende Personen hier an. Übrigens bin ich an Deiner Meinung sehr interessiert, da ich Deine Beiträge schätze.

Antworte bitte zur Sache: Was genau hast Du bisher beim NIBO getestet außer einem flüchtigen Anlesen der Dokumentation? Nenne hier bitte die exakten Fakten, damit wir diese sauber gegeneinander stellen können.

radbruch
14.07.2007, 20:10
Hallo

Oje, jetzt hast du mich ertappt. Ich hatte das mit der Rechtsschreibbelehrung auf andere Forumsmitglieder bezogen. Dass ich das in diesem Thread weiter oben zu der Anleitung anmerkte war mir gar nicht mehr im Gedächtniss. Naja, niemand ist perfekt.


Antworte bitte zur Sache
Nichts, wirklich gar nichts habe ich getestet, außer eben den ersten Kapiteln der Anleitung. Und das war für mich, der ich zu diesem Zeitpunkt ja gar keinen Roboter kaufen wollte und trotzdem die Anleitung mal angelesen habe, weil ich darum gebeten wurde, ausreichend. Wer ein Produkt anpreist und so eine Anleitung zum Testen anbietet hat es nicht verdient, dass ich meine Zeit dafür opfere. Und wenn dann nicht ein weiterer Beitrag mit dem Hinweis auf die verbesserte Anleitung folgt, gehe ich davon aus, dass der Anbieter kein Interesse an meiner Meinung hat. Zudem kann ich energiesparendes Blendgeschwafel überhaupt nicht leiden. (Inzwischen habe ich den Thread mal wieder überflogen. Ich habe die Anleitung ja nicht nur wegen der Rechtschreibung kritisiert.)

Wenn du nicht laufend darauf hinweisen würdest, hätte ich den nibo schon längst vergessen und begraben. Und weil du das tust, würde ich gerne wissen, was du sonst noch so treibst, damit ich deine Begeisterung für den nibo für mich einordnen kann.


In der Sache sind wir doch garnicht weit entferntHä?

Gruß

mic

ehenkes
14.07.2007, 20:18
Nichts, wirklich gar nichts habe ich getestet, außer eben den ersten Kapiteln der Anleitung.Danke! Eine ehrliche und anständige Antwort weiß ich zu schätzen.
Anmerkung: 'radbruch' ist RP6-Tester!

radbruch
14.07.2007, 20:31
Hallo ehenkes

Ich versuche immer ehrlich zu sein und erwarte das auch von anderen. Das ist vielleicht eine meiner Schwächen:


Zeig uns und vor allem mir mal was, dass würde dich und deine Beiträge bestimmt glaubwürdiger machen.

mic

izaseba
14.07.2007, 20:38
Hallo,
Ihr seid wirklich lustig zu lesen, ich hab mir schon Popcorn geholt und Bier kaltgestellt, mal sehen was noch kommt ;-)

Zur Sache,
Den Nibo find ich allgemein garnicht so schlecht, sieht vielleicht etwas komisch aus mir den "Lego" Rädern, das ist aber Geschmacksache.
Ich muß aber Radbruch recht geben, für Anfänger ist er nichts, die brechen sich schon die Ohren bei den einfachsten Sachen...
Aber für Fortgeschrittene ist der sehr gut, schon alleine die Komunikation zwischen 3 µC ist sehr interessant !
Ich habe irgendwie Lust den zu holen, glaub aber, meine Frau macht da nicht mit :-( naja mal schauen...

@ehenkes,
ich verstehe Deine Begeisterung nicht,
warst Du nicht der jenige der am meisten geheult hat, daß man den Asuro löten muß ?
Hallo, der Nibo ist auch ein Bausatz zum löten

Gruß Sebastian

radbruch
14.07.2007, 20:46
Hihi, ich bin ja eigentlich ein Chatter *vonizasebaPopcornklaut*
O:)

Ein guter Trick um Threads lahmzulegen ist sie unnötig in die Länge zu ziehen und mit Offtopic vollzumüllen.*lol*


ich verstehe Deine Begeisterung nicht
Genau das ist der Punkt, das verstehe ich auch nicht.

@izaseba:
Du hast auch recht, dieser Thread ist nicht mehr informativ, sondern nur noch unterhaltsam. Deshalb verabschiede ich mich hiermit. Meine Meinung über nibo und RP6 habe ich mitgeteilt und begründet. Mehr gibt es meinerseits hier dazu nicht mehr zu sagen.

Doch, eins noch: 600, ich komme. *lol*

Gruß

mic

ehenkes
14.07.2007, 21:19
warst Du nicht der jenige der am meisten geheult hat, daß man den Asuro löten muß ?Das hast Du Dir falsch gemerkt. Ich fand es nur nicht allzu wichtig, dass man das Zusammenlöten beim ASURO so betont, da ich selbst eher an der Programmierung interessiert bin als am Löten. Das Löten ist nur Mittel zum Zweck. Ich war auch der Meinung, dass man beim Zusammenlöten nicht wirklich etwas lernt über den ASURO. Inzwischen sehe ich das etwas modifiziert, denn an den ASURO kann man sich auch mit weniger löterfahrenen Personen heran wagen, z.B. einer kleinen Gruppe von Schülern. So wurde er ja auch konzipiert.

Dass man den Nibo löten muss, ist eine notwendige Hürde, übrigens für Anfänger schwer einnehmbar. Daher ist es ein klarer Vorteil des derzeitigen Rivalen RP6, dass er bereits als Fertiggerät verkauft wird.
Das ist aber alles auch eine Frage des Könnens, des Werkzeuges und des Interesses. Wenn jemand von der Elektronikseite an das Thema Roboter heran geht, interessieren ihn auch die einzelnen Bauelemente mehr als jemand, der sich dem Thema z.B. von der C/C++-Programmierung nähert. Ich gehöre zur letzteren Spezies, obwohl ich über eine gute Elektronik-Austattung wie Oszilloskop, Funktionsgenerator, Frequenzzähler, selbst gefertigtes Netzteil usw. verfüge. Die Programmierung geht mir eben deutlich leichter von der Hand.

Mich interessieren sowohl der Nibo als auch der RP6 als auch andere interessante Modelle, z.B. Hexapoden, aber vor allem mit dem Blick auf die Theorie (da findet man im Roboternetz interessante Beiträge, gerade zum Thema Regelung) und auf mögliche KI (da findet man wenig bis nichts).

Ich meine, wir sollten uns beim Vergleich RP6 und Nibo auf die Fakten konzentrieren. Ein großer Unterschied ist z.B. Bausatz vs. Fertiggerät oder ATmege128 und 2*ATtiny44 vs. ATmega32. Gerade das Zusammenspiel der drei µC finde ich auch interessanter als ein einsamer ATmega32. Bei beiden Systemen gibt es allerdings zusätzlich die Möglichkeit, Erweiterungen anzudocken.

Die "Promotionshow" für den RP6, die hier von den Testern abgezogen wird, ist IMHO deutlich unsachlicher als dieser Thread hier zum Nibo. Mir ging es vor allem darum, die unsachliche Abwertung des Nibo durch den von mir ansonsten sehr geschätzten RP6-Tester 'Radbruch' klar zu stellen. Das hat er selbst eindeutig getan. Damit ist der Fall für mich erledigt.

Ansonsten hat er mich zu Recht aufgefordert, für die Community den Nibo von nicai-systems zu testen, was ich hier öffentlich zugesagt habe, denn ich halte diesen Roboter und seine zukünftigen Möglichkeiten für wirklich interessant, und ich habe bisher mehr getan, als nur die Anleitung angelesen.

Ich werde mir später auch den RP6 besorgen, sobald er käuflich angeboten wird, um mir selbst ein Bild zu machen.

Auf meiner Homepage werde ich über beide Systeme berichten.

ehenkes
14.07.2007, 21:29
Doch, eins noch: 600, ich komme. *lol*
Dieses Ranking halte ich für lächerliches Gehabe. ;-) Experte, Genie, ...
Ich ernenne Dich jetzt schon zum "Roboter-Superman"! *looool*

radbruch
15.07.2007, 00:39
Auch wenn nicht alle meine bisherigen Beiträge "erste Sahne" waren, ich stehe zu jedem einzelnen. Ich schreibe ehrlich und offen was ich denke. Und ich hasse Fakes! In meinem eigenen Forum kann ich die kicken, aber hier bin ich leider nur User und Roboterfan.

mic

ehenkes
15.07.2007, 22:02
Ich wollte das Roboternetz darüber informieren, dass mein erster von mir aufgebauter Nibo bestens funktioniert. Besonders gefällt mir dabei die robuste Bauweise, der Teflongleiter, das Grafikdisplay (64*128), die fünffache IR-Abstandsmessung, die sechs Status-LEDs (grün, orange, rot), die "Scheinwerfer" (zwei parallele weiße LEDs vorne) und die kraftvollen Motoren (man traut sich kaum, ihn mit der Hand aufzuhalten).


Weniger amüsant ist die Lautstärke des Antriebes, leider ein Höllenlärm. ;-)
EDIT: Zu dem Zeitpunkt funktionierte die Odometrie nicht richtig. Nibo versuchte dabei irgendwie ständig Vollgas zu fahren. Inzwischen surrt er ganz nett. Da habe ich ihm etwas unrecht getan.

ehenkes
15.07.2007, 22:34
http://www.henkessoft.de/Roboter/Bilder/DSCF1894.JPG
http://www.henkessoft.de/Roboter/Bilder/DSCF1906.JPG
http://www.henkessoft.de/Roboter/Bilder/DSCF1913.JPG
http://www.henkessoft.de/Roboter/Bilder/DSCF1911.JPG


Bilder sind zu gross um Sie hier zu posten, ich habe es in Link geändert.
Admin

izaseba
15.07.2007, 22:50
Super,
ich habe gestern die Anleitung durchgeblättert, und hatte das Gefühl die Zahnräder vom Getriebe schon irgendwo gesehen zu haben.
Jetzt wo Du vom Lärm sprichst, fällt mir ein, genausolche Zahnräder gibt es bei Conrad im "Vario" Getriebe irgendwo hab ich die noch, die sind wirklich sehr laut. Ein Tröpfchen Maschinenöl sorgt aber für etwas Ruhe ;-)

Was liegt alles an Software bei ?
Gibt es irgendwelche Bibliotheken ?
Wie komunizieren die µC miteinander? I2C ?

Glückwunsch von mir

Gruß Sebastian

ehenkes
15.07.2007, 23:04
Bilder sind zu gross um Sie hier zu posten, ich habe es in Link geändert. AdminIch wollte, dass man auch Details erkennt. :)


Was liegt alles an Software bei ?Momentan noch nichts. EDIT: Seit dem 20.07.2007 gibt es die C/C++-Bibliothek zum Download.

Gibt es irgendwelche Bibliotheken ?C-Bibliothek wird demnächst fertig. Es wird auch eine Java-Bibliothek geben.

Wie komunizieren die µC miteinander? I2C ?Ja. Siehe: http://nibo.editthis.info/wiki/Hardware#Blockschaltbild
Die Programmierung der beiden ATtiny44 erfolgt vom ATmega128 aus durch verschiedene Jumperstellungen beim Start. Die Programmierung des ATmega128 erfolgt momentan über einen 6-Pin-ISP-Wannenstecker. IR-USB-Programmieradapter wird spätestens im September erhältlich sein.

Glückwunsch von mirDanke! Ich muss Anfänger allerdings warnen. Momentan kann noch einiges schief gehen. Die Dokumentation wird noch laufend verbessert und ist quasi im Entstehen. Aufbau und Platine sind deutlich herausfordernder als beim ASURO. Aber es lohnt sich! Ein toller Roboter für engagierte Bastler und vor allem Programmierer.

Schaltpläne findet man in der Beschreibung: http://download.nicai-systems.com/nibo/DokuNibo_20070712.pdf

Nibo im Vergleich mit seinen kleinen Vorbildern:
http://www.henkessoft.de/Roboter/Bilder/DSCF1915.JPG

izaseba
15.07.2007, 23:17
Die Programmierung des ATmega128 erfolgt momentan über einen 6-Pin-ISP-Wannenstecker

Also ganz normale ISP Schnittstelle von Atmel ?

Das ist gut, es gibt zumindest keine Probleme, wie bei Asuro mit der IR Schnittstelle(wobei ich bei meinem Asuro keine Probleme hatte)
Ich persönlich finde es auch besser als diesen Bootloader Quatsch.
Fertige Bibliotheken find ich auch nicht so wichtig(Java schon garnicht)
beim Asuro habe ich die auch nicht verwendet, wenn man das meiste zur Fuß macht lernt man auch mehr über die Hardware.
Naja, dann berichte mal schön über Deine Fortschritte, vielleicht bekommen noch ein paar Leute Lust den zu holen (vielleicht lenkt meine Frau mal ein =P~ )

Gruß Sebastian

ehenkes
15.07.2007, 23:43
Hier gibt es ein süßes Video von nicai-systems:
http://www.nicai-systems.de/nibo_video.html

ehenkes
15.07.2007, 23:46
Also ganz normale ISP Schnittstelle von Atmel ?
Hier sieht man die Schnittstelle gut:
http://nibo.editthis.info/images/nibo/f/fc/Platine_fertig.jpg
(6-Pin-Wannenstecker rechts oben auf Platine)

... und hier findet man die exakten Steckerbelegungen:
http://nibo.editthis.info/wiki/Steckerbelegungen

ehenkes
16.07.2007, 18:39
Ein Tröpfchen Maschinenöl sorgt aber für etwas Ruhe.Leider nein. Nibo ist ein quirliges Kraftpaket und ein optischer Leckerbissen, aber akustisch eine "Kreissäge". Ersteindruck: Für Anfänger und Mietwohnungen kritisch. ;-)
EDIT: Das mit dem Höllenlärm hat sich als kalte Lötstelle entpuppt (Odometrie-MOTCO funktionierte nicht korrekt.) Also bei niedriger Geschwindigkeit doch für Mietwohnungen geeignet, allerdings noch nicht für Anfänger.

Xtreme
16.07.2007, 20:06
Und was unterscheidet deine "Promotionshow" nun von unserer?
Ich persönlich finde die drei Controller des Nibo etwas "oversized". Ich kenne das System jetzt nicht im Detail, aber dier Mega128 würde doch sicher leicht mit Aktoren und Sensoren fertig. Das Argument der besseren Erweiterbarkeit gilt nur bedingt, denn wenn ich eine Erweiterungsplatine aufbaue, möchte ich den Controller auch mit auf dieser Platine haben und nicht auf dem Mainboard, so dass ich jeden Pin einzeln zur Platine führen muss.

izaseba
16.07.2007, 20:20
Ersteindruck: Für Anfänger und Mietwohnungen kritisch.

Wie gesagt, ich kenne diese Zahnräder,
Ich habe mein Solarladegerät mit diesem "Vario" Getriebe gebaut,
So weiß ich immer, wenn die Sonne ihren Standort wechselt ;-)
Geholfen hat da wirklich etwas Öl auf die Räder, und das ganze Getriebe mit dünnem Gummi von der Konstruktion zu "entkoppeln".
Die Motoren werden bei dem Nibo direkt auf die L Profile montiert, oder ?
So sieht das zumindest in der Beschreibung aus.
Viellecht soll man da irgendwas dünnes aus Gummi zwischen machen :-k

Gruß Sebastian

P.S.
@Xtreme,
was soll das jetzt werden ?
Reicht nicht Bascom gegen C,Windows gegen Linux,VW gegen Opel,
Blond gegen Brünet, meiner ist länger als Deiner ?
Laß ihn doch, er hat gesagt, daß er den Nibo für uns testet und das tut er auch ziemlich objektiv, oder ?

Xtreme
16.07.2007, 20:57
und das tut er auch ziemlich objektiv, oder ?

ja, das tun wir auch, und werden trotzdem ständig von ihm als "Promotionshow" abgewertet.

ehenkes
16.07.2007, 21:11
Die Motoren werden bei dem Nibo direkt auf die L Profile montiert, oder ?Den Fahrwerkaufbau kannst Du in diesem Foto (ohne Odometriesensorplatinen) am besten erkennen:
http://www.henkessoft.de/Roboter/Bilder/NIBO_Antrieb.jpg

Nochmailge Erinnerung vom Admin, Bilde rmit mehr als 600 Pixel breite dürfen nicht direkt in Beitrag eingebaut werden, siehe Forumregeln!
Admin


... er hat gesagt, daß er den Nibo für uns testet und das tut er auch ziemlich objektiv, oder ?Da ich momentan offenbar der einzige bin, der einen selbst aufgebauten Nibo in Händen hat, werde ich mir Mühe geben, die verschiedenen Aspekte möglichst objektiv aufzuzeigen. Mit dem RP6 kann ich ihn erst dann objektiv vergleichen, wenn ich diesen ebenfalls in Händen halte.


Und was unterscheidet deine "Promotionshow" nun von unserer? Ich mache zumindest keine Fotos von eintreffenden Paketen usw. 8-[ Ich finde, dass es für die Robotergemeinde ein Vorteil ist, dass es momentan zwei vergleichbare Systeme gibt, nämlich den RP6 und den Nibo. Konkurrenz fördert hoffentlich die Kreativität und den Entwicklergeist beider Lager. :)

Xtreme
17.07.2007, 06:26
Ich mache zumindest keine Fotos von eintreffenden Paketen usw.
Zugegeben, das fand ich selbst etwas übertrieben. Vergleichbar sind die beiden Systeme nur bedingt, was aber der Kreativität keinen Abbruch tut :-)

Sommer
17.07.2007, 08:59
Hi Leute!

Also der Thread ist wirklich "interessant", es zeugt wieder einmal wo unser Roboternetz hingelangt ist und wo es irgendwann mal enden wird. Bitte Leute, hört auf zu "lästern" das ist nicht Sinn und Zweck vom Roboternetz. Es gab Zeiten hier im Forum, da haben sich Neulinge über die nette und Informative Hilfe hier im Netz bedankt! Sie hatten darum soviel Freuden im Roboternetz weil die Leute nicht so waren wie in anderen Foren, dort wo man nur noch blöde Antworten bekommt. Das ist vielleicht auch der Grund das nur noch Anfänger Ihre Projekte vorstellen und die wirklich guten Roboterbauer Ihre Bots lieber nicht einstellen da nur noch rumgenörgelt und gemeckert wird, anstatt konstruktive Beiträge abzuliefern. Baut doch erst mal selber einen eigenen Roboter ohne Bausatz, steckt viel Arbeit rein und dann werdet Ihr wo ihr gerade voller Stolz euren Roboter hier vorstellt nur noch schwach angeredet! Dieses Verhalten ist mir mittlerweile sehr oft aufgefallen, vor allem bei recht gut Konstruierten Robotern!

Nibo ist zwar wirklich nix für den Einsteiger, wobei Einsteiger nicht immer die Altersklasse 12 sein muss! Einsteiger sind auch die Leute die nebenbei ein Studium oder eine Ausbildung machen und sich zuvor mehr mit Elektronik oder Mechanik beschäftigt haben. Wer grundsätzlich null Ahnung hat und evtl. nur zwei linke Hände mit lauter Daumen dran besitzt, sollte eher die Finger davon lassen bevor er sich, oder andere verletzt!

Die Robotik ist ein Zusammenspiel von Mechanik, Elektronik und Programmierarbeit. Wer sich nur mit einer der oben genannten Sache beschäftigen will sollte lieber erst gar nicht damit anfangen! Oder zumindest nicht auf anderen rum hacken weil sie Rechtschreibfehler oder evtl. einen Hammer in der Anleitung vergessen haben. (Keine Anspielung auf eine bestimmte Person!)

An euere Stelle würde ich lieber schreiben was euch beim Bausatz noch alles wichtig wäre und was die C Bibliothek enthalten sollte und welche Beispiele euch Interessieren.

Das Video ist auf jedenfall schon mal gut gemacht und Nibo fährt sauber durch die Wohnung, nicht schlecht!

Lasst euch diese Zeilen mal durch den Kopf gehen ohne gleich auf meiner Aussage rumzuhacken!

PS: Wer Rechtschreibfehler findet kann sie gerne behalten!

Gruß Ulli

Frank
17.07.2007, 09:34
Trotz aller Sachlichkeit aber Thread nicht aus Promotiongründen "nach oben posten", so herausragend ist dann das ganze auch wieder nicht. Der Preis und Leistung ist aber schon ok denke ich, nur die Zielgruppe scheint mir etwas verfehlt. Für Anfänger weniger geeignet und für Profis nicht so richtig reizvoll. Also den Thread werde ich wegen dem versteckten "Promotionansatz" beobachten ;-) Also nicht übertreiben!

Vielleicht sollten die engagierten Bastler im Roboternetz mal einen Thread öffnen und ihren virtuellen Wunschroboter konstruieren. So könnte dann was richtig interessantes entstehen, wobei man alle natürlich nie wirklich zufriedenstellen kann.

Frank
admin

Sommer
17.07.2007, 09:41
Genau Frank!

für Quereinsteiger aus der Elektronik oder Mechanik bestens geeignet aber nicht für nen Schüler oder kompletten Anfänger der noch gar keine Erfahrung besitzt.

Ich kenne Nibo zwar nicht, aber ich denke das man in Zusammenarbeit noch viel verbessern kann, das geht natürlich nur mit sachlichen Beiträgen und guter Umgangsform unter den Usern!

radbruch
17.07.2007, 14:40
Hallo


Oder zumindest nicht auf anderen rum hacken weil sie Rechtschreibfehler oder evtl. einen Hammer in der Anleitung vergessen haben. (Keine Anspielung auf eine bestimmte Person!)
Wenn sich mal jemand die Mühe machen würde und meinen ersten Beitrag (https://www.roboternetz.de/phpBB2/viewtopic.php?p=294837#294837) mal lesen würde, dann könnte er dort einige Aussagen finden, die später im Thread von anderen bestätigt wurden. Mich störte die Summe des Unsinns und Floskeln wie "Einsteigergeeigenet" und "Schüler und Studenten technische Inhalte vermitteln". Zusammen mit den für eine Anleitung in dieser Preisklasse zu vielen Rechtschreibfehlern war dies eben der Grund, warum ich den Roboter für mich ablehnte. Aber inzwischen seid ihr ja auch meiner Meinung:


.... Wer sich darüber im Klaren ist und die entsprechenden Kenntnisse und Fähigkeiten besitzt, erwirbt viel Roboter für wenig Geld und hat sicher seinen Spass mit dem nibo.

Na also, das lese ich eindeutig als Lob. Warum eine 4-Quatrantenregelung in Verbindung mit PWM energiesparend ist, weis ich zwar immer noch nicht, aber der Anbieter scheint darauf ja auch keinen Wert zu legen. Aber ich glaube, dass will ich inzwischen auch gar nicht mehr wissen. O:)

Gruß

mic

Sommer
17.07.2007, 14:47
Beim energiesparren wird er nur den PWM meinen, anstatt die Energie über einen Widerstand zu verbraten. PWM ist zwar gängig aber so extrem falsch finde ich den Satz jetzt nicht!

Sommer
17.07.2007, 15:07
Naja so unrecht hat er dabei ja auch nicht!
Früher hat man so einen Antrieb über Transistoren, Relais oder Lastwiderstände gemacht. Heute macht man das über eine MOSFET H-Brücke die schon energiesparrend im gegensatz du den alten Schaltungen ist. Setzt man noch die passenden MOSFETS ein, mit geringen Innenwiderstand bei Ugs = Ub kann man von energiesparrend sprechen da "fast" keine Leistung in der H-Brücke verbraten wird! PWM statt Widerstand oder Strombegrenzung zur Drehzahlanpassung über Transistoren ist dagegen "verlustfrei".

Ich hoffe ich konnte seinen Gedankengang bissl ausdeutschen...

Man sollte nicht jedes Wort auf die Goldwage legen!

Gruß Ulli

steveLB
17.07.2007, 15:45
Ich lese das auch eine weile mit , und finds schade das sich hier die RN-User ein Kopf darüber machen muss wie das der Nibo-Macher wohl meint.
Das -Workwind- dazu nichts mehr sagt ist echt schade für ihn.
Und zur Rechtschreibung, eine Doku macht mehr her wenn keine Fehler drinn sind , das muss ich auch bei meinen Berichten für die Hochschule machen, da sollte es für ein Produkt was man verkaufen möchte Pflich sein.
Was würdest du machen wenn, die ein Gerät von nem deutschen Markenhersteller kaufst und die Gebrauchsanleitung voller Fehler wäre ?
Es wirkt sich schon aufs Image aus.
Gruß

Sommer
17.07.2007, 15:53
Da gebe ich dir schon recht, aber ich glaube eher das er mit den Thread Verbesserung in seiner Arbeit wollte als nur Kritisiert zu werden, oder?

Da kann man halt auch anders antworten...

Über Gebrauchanleitungen brauchen wir nicht diskutieren, da hab ich wahrscheinlich schon mehr gelesen als du glaubst und zu den Fehlern sag ich da lieber nix! Vor alle ist es in einer Anleitung vorrangig wichtig dass der Technische Inhalt stimmt!

workwind
17.07.2007, 16:18
Hallo zusammen!

Zu meinem langen Schweigen muss ich sagen, dass ich von dem Ton in diesem Forum ein bischen irritiert bin....

Aber nun zur Sache:

Die PWM Ansteuerung bei einer Motorbrücke läßt sich auf zwei Arten durchführen:

Möglichkeit A:
- Während der High-Phase schalten zwei diagonal angeordnete Transistoren
- Während der Low-Phase schaltet kein Transistor, der Induktionsstrom fliesst durch die Dioden ab.

Möglichkeit B:
- Während der High-Phase schalten zwei diagonal angeordnete Transistoren
- Während der Low-Phase schaltet zwei Transistoren nach Masse (oder V+) der Motor ist kurzgeschlossen, der Induktionsstrom fliesst durch die beiden Transistoren im Kreis.

Die Möglichkeit A hat folgende Nachteile:
- Die Magnetische Feldenergie pendelt zwischen Ankerinduktivität und Batterie mit der Frequenz der PWM-Ansteuerung und gegen die Versorgungsspannung hin und her.
- Bei hohen PWM Frequenzen bricht das Drehmoment ein, insbesondere bei kleinen "High-Anteilen". Dadurch ist die Regelbarkeit des Motors erschwert.

Die Möglichkeit B hat folgende Vorteile:
- Der Strom pendelt nicht hin und her, sondern fliesst im Kreis, daher ist der Wirkungsgrad (es geht mir hierbei nicht um die Umwelt) höher
- Die PWM-Frequenz kann über dem hörbaren Bereich liegen, dadurch zwitschert der Motor nicht
- Der Motor läßt sich einfacher mit einem PID Regler regeln, da die mittlere Motorspannung proportional zum PWM Anteil ist.

Natürlich interessieren mich auch die Nachteile von Version B und die Vorteile von Version A, ich kenne sie aber nicht...

Für den Nibo habe ich Version B gewählt (und die Benutzung im Motor-Controller implementiert), auch der Asuro kann mit der Version B angesteuert werden.
In vielen Schaltungen die den L293D verwenden, wird der Motor jedoch nach Möglichkeit A angesteuert, da sie sich diese leichter implementieren läßt.
Die Vorteile der Möglichkeit B werden auch in vielen Artikeln über den L293D nicht erwähnt. Ich wollte mit meinem Hinweis auf eine bessere Energieausnutzung einen (leicht zu verstehenden) Vorteil der Ansteuerung nach Möglichkeit B hervorheben - anscheinlich ist mir das jedoch nicht gelungen... :-(

Ansonsten würde ich sagen:
Der RP6 ist auch ein guter Roboter, Konkurenz belebt das Geschäft und fördert insbesondere die Innovation... . Sich hier im Forum gegenseitig mit Worten anzugreifen bringt die Robotik nicht weiter - und das wollen wir doch alle!

Schönen Gruß,
Nils Springob

ehenkes
17.07.2007, 17:01
Bilder mit mehr als 600 Pixel Breite ...Das Bild vom Antrieb hat übrigens nur 594 Pixel Breite.


für Quereinsteiger aus der Elektronik oder Mechanik bestens geeignet aber nicht für nen Schüler oder kompletten Anfänger der noch gar keine Erfahrung besitzt.Dem kann ich weitgehend zustimmen. Das Interessante am Nibo ist der große Speicher des ATmega128 und die Unterstützung durch die beiden ATtiny44 (Motorcontroller, IR-Controller). Das könnte - vom ASURO kommend - interessante Perspektiven eröffnen.

Frank
17.07.2007, 17:20
Bilder mit mehr als 600 Pixel Breite ...Das Bild vom Antrieb hat übrigens nur 594 Pixel Breite.


Das eine ja, andere waren fast 800 Pixel breit. Angenehmer sind Bilder bis 500 Pixel, einfach mal nach dem Posting den Thread anschaun und gesunden Menschenverstand zum beurteilen einsetzen - dann brauchen wir nicht über Pixel zu diskutieren ;-)

ehenkes
17.07.2007, 17:35
Testsoftware und über den ATmega128 programmierte Firmware für die beiden ATtiny44 steht nun incl. Beschreibung zur Verfügung:
http://nibo.editthis.info/wiki/Software
Das von mir getestete System funktionierte wie beschrieben.

Passende C-Bibliothek wird von nicai-systems zur Verfügung gestellt: http://sourceforge.net/projects/nibo/
Die Bibliothek ist logisch und klar aufgebaut, also ein brauchbares Fundament.

Beim Verbinden des Atmel STK500 Starter Kit mit dem 6-Pin-ISP-Stecker des Nibo muss man auf die korrekte Ausrichtung des Steckers achten, da man diesen drehsymmetrisch falsch einstecken kann. Hier die korrekte Verbindung, falls das jemand machen will:
http://www.henkessoft.de/Roboter/Bilder/Nibo_mit_STK500_flashen_Ausschnitt.jpg

Frank
17.07.2007, 19:26
@steveLB: Ich stimme dir ja in vielen zu nur bei folgendem Punkt nicht:


Und zur Rechtschreibung, eine Doku macht mehr her wenn keine Fehler drinn sind , das muss ich auch bei meinen Berichten für die Hochschule machen, da sollte es für ein Produkt was man verkaufen möchte Pflich sein.

Es gibt genügend Institutionen bei der perfekte Rechtschreibung, Gramatik und Form gefordert werden aber ich finde man kann auch mal drüberweg sehen wenn der Macher eines guten Produktes hier nicht soviel Wert drauf legt als auf das Produkt selbst. Mir wäre es Schnurz wieviel Rechtschreibfehler in einer Produktbeschreibung sind solange die gut verständlich und sachlich ok ist. Letzteres kann ich hier nicht beurteilen da ich diese nicht gelesen habe. Aber ich finde es unangemessen eine aufwenige Arbeit wegen ein paar Schreibfehlern nieder zu reden. In meinen Dokus sind garantiert auch genug drin, einfach weil in erster Linie das basteln das Hobby und die Stärke ist und nicht das geschreibe. Ich weiss das jetzt innerlich einige aufschrein - aber wir sollten diesen Thread nicht noch weiter mit Grundsatzdiskussionen zerstören. Jedenfalls sehe ich es nicht gerne wenn im Roboternetz wegen Schreibfehlern gelästert wird - so nörgelig soll es hier nun doch ncht werden, das sollen andere Foren übernehmen. Was nicht heißt das ich es nicht schön finde wenn zumindest die Betreffs fehlerfrei im Forum stehen ;-)

Gruß Frank

robo.fr
17.07.2007, 20:02
Und zur Rechtschreibung, eine Doku macht mehr her wenn keine Fehler drinn sind ,...
... da sollte es für ein Produkt was man verkaufen möchte Pflich sein.

steveLB
18.07.2007, 18:08
das ich auch fehler mache ist klar , danke robo.fr :D

@ Frank
ist meine meinung , ich mach da keinen nieder weger der rechtschreibung, wollt damit nur sagen das man da achten soll, und das rechtschreibprogramm von Word kann man ja mal drüber lassen.
ich hab seine anleitung auch noch nicht gelesen, hatte keine zeit, da ich bis heute prüfungen hatte :)
und *JUHU* sie sind rum *freu*
<-- macht Ferien

EDIT : ich weiß auch das Basteler wie wir lieber ihr Wunderwerk schnell und mit vielen Details und vor allem Inhalt presentieren , da bleibt die Rechtschreibung mal auf der Strecke, ich mach das auch so , nur wenn ich etwas abgeben muss ( für eine Note, oder um es zu Verkaufen) dann wird die Rechtschreibung mal eingeschaltet.

Gruß

ehenkes
18.07.2007, 18:18
Jetzt hört doch endlich mit der Rechtschreibung auf. ;) Diese Diskussionen existieren in jedem Forum bis zum Erbrechen.
... und was die Programmierung angeht, da sieht das bestens aus. Die C-Bibliothek ist klasse!

steveLB
18.07.2007, 18:27
extra für ehenkes : Rechtschreibung *gg*

habs jetzt die Doku überflogen, sieht sauber aus , denk ich könnt den auch Aufbauen *fg*

Gruß

ehenkes
18.07.2007, 19:14
Die Dokumentation ist noch im Fluss. Meine Erfahrungen und Probleme beim Aufbau und Testen - und meine Rechtschreibkünste - lasse ich dem Entwickler selbstverständlich zukommen, was sich in einer weiteren Verbesserung der Dokumentation nieder schlagen wird. Wichtig ist auch das wiki zum Nibo, das ständig wächst und gedeiht. Wenn man mit dem ASURO beginnt und sich damit einige Erfahrung aneignet, kann man sich auch an den Nibo heran trauen. Die Struktur der Programmbibliothek in C wird euch sicher gefallen, ist sehr ordentlich.

Allerdings kämpfe ich momentan noch mit zwei Punkten in der Elektronik. Die Odometrie und die Abgrundsensoren funktionieren nicht wie erwartet. Nun ist die Frage, ob es an der Elektronik oder dem Testprogramm liegt. Da fehlen einfach noch die Erfahrungen. Momentan muss man Anfängern daher vom Nibo abraten, bis genügend Erfahrungen mit Problemfällen und/oder Abweichungen vorliegen. Das System ist komplex.

EDIT1:
Thema Odometrie ist gelöst. Es war eine schlechte Lötstelle am 10-Pin-Wannenstecker. Darauf kommt man allerdings nicht so schnell, weil das 10-Pin->2*5-Pin-Kabelsystem kompliziert ist und man den Fehler eher dort vermutet.

Man sollte nun 20 (= 4 Löcher * 5-fach Untersetzung) Zählimpulse pro Radumdrehung beobachten können. Bei den mitgelieferten Gummirädern mit 37 mm Durchmesser entspricht dies 3,1416 * 37 mm / 20 Zähler = 5,8 mm / Zähler (c't-Bot: 3 mm/Zähler, RP6: 0.25 mm/Zähler ).

EDIT2:
Thema Abgrundsensoren (CNY70) vorne rechts/links ist hoffentlich auch gelöst. Problem war offensichtlich ein Kurzschluss der Beinchen der Liniensensoren (unter der Platine, Beinchen oben eingelötet und abgezwickt) gegen die Rückseite des darüber platzierten Spannungsreglers 7805. Da fehlt noch eine professionelle elektrische Isolierung! Ich hatte vorsichtshalber Isolierband aufgeklebt, aber das wird sicher leicht durchstoßen von abgezwickten Beinchen. Wäre z.B. Nachlöten notwendig geworden, hätte ich Nibo wieder mühsam "zerpflücken" müssen. Das ist beim Aufbau/Testen ein konstruktiver Schwachpunkt des Nibo, weil man nicht mehr an die Lötpunkte der Liniensensoren heran kommt. Dieses Thema muss in der Dokumentation ausführlicher besprochen werden und eine passende mechanisch stabile Isolation sollte mitgeliefert werden.

ehenkes
20.07.2007, 02:30
Seit heute morgen steht die erste offizielle Bibliothek (C/C++) für den Roboterbausatz Nibo zum Download bereit:
https://sourceforge.net/project/showfiles.php?group_id=201102&package_id=239101

Zur Beachtung: Mit AVR Studio (kostenlos bei Atmel) Version 4.12 unbedingt das Service Pack verwenden (ansonsten hängt sich der Compiler/Linker aus unerklärlichen Gründen auf), noch besser ist es, die aktuelle Version 4.13 einzusetzen. Diese zeigt zusätzlich den durch das Programm belegten Speicherplatz im ATmega128 an.

Zum Eingewöhnen eine erste Firmware für den Nibo:


#include <avr/interrupt.h>

#include "nibo/niboconfig.h"

#include "nibo/delay.h"
#include "nibo/pwm.h"
#include "nibo/display.h"

#include "nibo/bot.h"
#include "nibo/gfx.h"
#include "nibo/bot.h"
#include "nibo/gfx.h"
#include "nibo/leds.h"

int main()
{
sei(); // enable interrupts
bot_init();
leds_init();
pwm_init();
display_init();
gfx_init();

leds_set_displaylight(600);

gfx_move(10,10);
gfx_print_text("Nibo sagt:", 0);

gfx_move(10,30);
gfx_print_text("Hallo Welt!", 0);

int i,j;
for(i=0;i<10;++i)
{
for(j=0;j<6;++j)
{
leds_set_status(LEDS_RED,j);
delay(500);
}

leds_set_headlights(256);

for(j=0;j<6;++j)
{
leds_set_status(LEDS_ORANGE,j);
delay(500);
}

leds_set_headlights(512);

for(j=0;j<6;++j)
{
leds_set_status(LEDS_GREEN,j);
delay(500);
}

leds_set_headlights(1024);
}

while(1);
return 0;
}


Die sechs Status-LEDs sind von 0 bis 5 nummeriert, wie man es analog einem C-Array erwartet. Solche Feinheiten finde ich z.B. wichtig, damit die Programmierung intuitiv auf Anhieb gelingt. Das helle vorne sind die beiden "Scheinwerfer" ( vgl. http://www.nicai-systems.de/images/niboAtNight_320.jpg ), die die daneben liegenden Status-LEDs im Dunkeln überstrahlen.
http://www.henkessoft.de/Roboter/Bilder/Nibo%20-%20Hallo%20Welt%20mittel.jpg

Ich kann den Nibo nur mit Grafikdisplay empfehlen. Gerade die Initializer-Software, die die beiden ATtiny44 mit Firmware und den ATmega128 mit Testsoftware versorgt, visualisiert für erste Prüfungen nach dem Aufbauen wichtige Messdaten zu Odometrie, Abgrund- und Liniensensoren, fünffache IR-Abstandsmessung (nach vorne und zur Seite) und RC5-Codes.
Für wenige Daten ist dies einfach bequemer und autonomer als die IR-Kopplung an einen PC mit Terminal-Software.

Was mir gut gefällt, ist die einfache Textausgabe auf dem internen "Terminal". Das ist anfängergerecht. :)

Man kann die Funktionen gfx_move(...) und gfx_print_text(...) auch in eine WinAPI-analoge Funktion umbauen:



void textout(int x, int y, char* str, int ft)
{
gfx_move(x,y);
gfx_print_text(str,ft);
}

Das erleichtert bei mehrzeiligen Ausgaben die Übersicht im Programm.

Eine detaillierte Untersuchung der Programmiermöglichkeiten werde ich hier beschreiben: http://www.henkessoft.de/Roboter/Nibo.htm

Hier noch ein Beispiel zur Ausgabe der Batteriespannung:


#include <avr/interrupt.h>

#include "nibo/niboconfig.h"

#include "nibo/delay.h"
#include "nibo/pwm.h"
#include "nibo/display.h"

#include "nibo/leds.h"
#include "nibo/bot.h"
#include "nibo/gfx.h"
#include "nibo/bot.h"

/*
float round(float zahl, int stellen)
{
float v[] = { 1, 10, 1e2, 1e3, 1e4 };
return floor(zahl * v[stellen] + 0.5) / v[stellen];
}
*/

void float2string(float value, int decimal, char* valuestring)
{
int neg = 0; char tempstr[20];
int i = 0; int j = 0; int c; long int val1, val2;
char* tempstring;
tempstring = valuestring;
if (value < 0){ neg = 1; value = -value; }
for (j=0; j < decimal; j++) {value = value * 10;}
val1 = (value * 2);
val2 = (val1 / 2) + (val1 % 2);
while (val2 !=0){
if ((decimal > 0) && (i == decimal)){
tempstr[i] = (char)(0x2E);
i++;
}
else{
c = (val2 % 10);
tempstr[i] = (char) (c + 0x30);
val2 = val2 / 10;
i++;
}
}
if (neg){
*tempstring = '-';
tempstring++;
}
i--;
for (;i > -1;i--){
*tempstring = tempstr[i];
tempstring++;
}
*tempstring = '\0';
}

float SupplyVoltage(void)
{
bot_update();
return(0.0166 * bot_supply - 1.19);
}

void textout(int x, int y, char* str, int ft)
{
gfx_move(x,y);
gfx_print_text(str,ft);
}

void Init(void)
{
sei(); // enable interrupts
bot_init();
leds_init();
pwm_init();
display_init();
gfx_init();
}

int main()
{
Init();

leds_set_displaylight(1000);

float Ubatt = SupplyVoltage();
char text[6];
float2string(Ubatt,2,text);

textout(4,10,"Versorgungsspannung:",0);
textout(4,24,text,0);
textout(60,24,"Volt",0);

while(1);
return 0;
}

Beim Flashen mit dem STK500 sieht man mit diesem Programm die von diesem Board anliegende Spannung, da das Programm nach dem Flashen sofort startet: 4,70 Volt

Die Spannung des Nibo liegt mit geladenen Akkus über 10 Volt. [/code]

ehenkes
20.07.2007, 13:52
... hab jetzt die Doku überflogen, sieht sauber aus, denk' ich könnt' den auch aufbauen. *fg*Würde mich wirklich freuen, wenn mehr Nibo-Besitzer sich hier einfinden würden. Sowohl die Hardware als auch bereits die allererste C/C++-Bibliothek ist eine hervorragende Basis für eigene Entwicklungen, und der ATmega128 bietet ausreichend Platz und I/O-Ports. Die "Dreckarbeit" (Motor steuern, Kollision vermeiden) erledigen ja bereits die beiden ATtiny44, mit denen der Hauptprozessor über I²C kommuniziert. :)

Als kleines Beispiel (noch nicht perfekt) für die Motorsteuerung:



#include <avr/interrupt.h>

#include "nibo/niboconfig.h"

#include "nibo/delay.h"
#include "nibo/pwm.h"
#include "nibo/display.h"

#include "nibo/bot.h"
#include "nibo/gfx.h"
#include "nibo/bot.h"
#include "nibo/gfx.h"
#include "nibo/leds.h"
#include "nibo/motco.h"

void textout(int x, int y, char* str, int ft)
{
gfx_move(x,y);
gfx_print_text(str,ft);
}

void Go(int dist, int cm_pro_sec)
{
const float TICKS_PER_CM = 1.75f;

motco_resetOdometry(0,0);
motco_update();

int limit = dist * TICKS_PER_CM;


int pwm = cm_pro_sec * 80;
if (pwm > 1024) pwm = 1024;
if (pwm < -1024) pwm = -1024;

motco_setPWM(pwm,pwm);
motco_setSpeed(cm_pro_sec * TICKS_PER_CM , cm_pro_sec * TICKS_PER_CM);
motco_update();

delay(3000); //TODO: Verzögerung muss noch weg

do
{
motco_update(); /* fährt brav geradeaus */
}
while(motco_ticks_l < limit);
}

int main()
{
sei(); // enable interrupts
bot_init();
leds_init();
pwm_init();
display_init();
gfx_init();

leds_set_displaylight(800);

textout(10,10,"Nibo meldet:",0);
textout(10,24,"Motor an!",0);
textout(10,38,"Licht an!",0);

leds_set_headlights(512);

int i,j;
for(i=1;i<=6;++i)
{
for(j=0;j<i;++j)
leds_set_status(LEDS_GREEN,j);

Go(50,10*i);
}

leds_set_headlights(0);

motco_stop();
motco_update();

for(j=0;j<6;++j)
leds_set_status(LEDS_OFF,j);

textout(10,24,"Motor aus!",0);
textout(10,38,"Licht aus!",0);

while(1);
return 0;
}


Im Gegensatz zu seinem kleinen Bruder fällt Nibo das Geradeausfahren leicht. Der MOTCO nimmt dem Hauptprozessor delegierbare Regelungs-Arbeit (Geschwindigkeit, Richtung) gerne ab.
Hier der Video-Link (2,7 MB) zum Programm: http://www.henkessoft.de/Roboter/Bilder/Nibo.wmv

Die Abstandsmessung mittels IR-Sensoren wird prinzipiell in diesem Programm gezeigt:


#include <stdlib.h>
#include <avr/interrupt.h>

#include "nibo/niboconfig.h"

#include "nibo/delay.h"
#include "nibo/pwm.h"
#include "nibo/display.h"

#include "nibo/leds.h"
#include "nibo/bot.h"
#include "nibo/gfx.h"
#include "nibo/irco.h"

void float2string(float value, int decimal, char* valuestring)
{
//... siehe oben!
}

float SupplyVoltage(void)
{
bot_update();
return(0.0166 * bot_supply - 1.19);
}

void textout(int x, int y, char* str, int ft)
{
gfx_move(x,y);
gfx_print_text(str,ft);
}

void Init(void)
{
sei(); // enable interrupts
bot_init();
leds_init();
pwm_init();
display_init();
gfx_init();
}

int main()
{
Init();

leds_set_displaylight(1000);

while(1)
{
float Ubatt = SupplyVoltage();
char text[6];
float2string(Ubatt,2,text);

textout( 0,0,text, 0);
textout(35,0,"Volt",0);

irco_update();
irco_startMeasure();
irco_update();

char irco_string[5][5];
int i;

for(i=0; i<5; ++i)
{
textout(i*21,8," ",0); //löschen
}

for(i=0; i<5; ++i)
{
itoa(irco_distance[i],irco_string[i],10);
textout(i*21,8,irco_string[i],0);
}
delay(200);
}

while(1);
return 0;
}

Allerdings nimmt Nibo bei mir selbst den Boden noch als Hindernis wahr. Das leuchtet mir konstruktiv noch nicht richtig ein.

Das Prinzip ist hier beschrieben: http://nibo.editthis.info/wiki/IR-Controller
Hat jemand eine Idee, wie man die Messung optimieren kann? Das "Raumgefühl" durch Messungen in fünf Richtungen (rechts, vorne rechts, vorne mitte, vorne links, links) soll einer der Vorzüge des Nibo sein. Später können über den Erweiterungsport z.B. weitere Abstandsmessungen nach hinten oder für die berühmten Bürostühle hinzu kommen.

ehenkes
22.07.2007, 01:57
Mit diesem Programm kann man die gesamte Sensorik des Nibo in Ruhe analysieren (Batteriespannung, IR-Abstand, Abgrundsensoren, Liniensensoren)


#include <stdlib.h>
#include <avr/interrupt.h>

#include "nibo/niboconfig.h"
#include "nibo/iodefs.h"

#include "nibo/delay.h"
#include "nibo/adc.h"
#include "nibo/pwm.h"
#include "nibo/i2cmaster.h"
#include "nibo/display.h"

#include "nibo/bot.h"
#include "nibo/leds.h"
#include "nibo/gfx.h"
#include "nibo/irco.h"
#include "nibo/motco.h"
#include "nibo/floor.h"

void Init(void)
{
sei(); // enable interrupts

i2c_init();
pwm_init();
display_init();

bot_init();
leds_init();
floor_init();
gfx_init();
}

void float2string(float value, int decimal, char* valuestring)
{
int neg = 0; char tempstr[20];
int i = 0; int j = 0; int c; long int val1, val2;
char* tempstring;
tempstring = valuestring;
if (value < 0){ neg = 1; value = -value; }
for (j=0; j < decimal; j++) {value = value * 10;}
val1 = (value * 2);
val2 = (val1 / 2) + (val1 % 2);
while (val2 !=0){
if ((decimal > 0) && (i == decimal)){
tempstr[i] = (char)(0x2E);
i++;
}
else{
c = (val2 % 10);
tempstr[i] = (char) (c + 0x30);
val2 = val2 / 10;
i++;
}
}
if (neg){
*tempstring = '-';
tempstring++;
}
i--;
for (;i > -1;i--){
*tempstring = tempstr[i];
tempstring++;
}
*tempstring = '\0';
}

float SupplyVoltage(void)
{
bot_update();
return(0.0166 * bot_supply - 1.19);
}

void textout(int x, int y, char* str, int ft)
{
gfx_move(x,y);
gfx_print_text(str,ft);
}



int main()
{
Init();

leds_set_displaylight(1000);
floor_enable_ir();

while(1)
{
float Ubatt = SupplyVoltage();
char text[6];
float2string(Ubatt,2,text);

textout( 0,0,text, 0);
textout(35,0,"Volt",0);

textout(0,8,"distance:",0);
textout(0,24,"floor:",0);
textout(0,40,"line:",0);


irco_update();
irco_startMeasure();
irco_update();


uint16_t floor_distance[2];
uint16_t line_distance[2];

floor_update();

floor_distance[0] = floor_l;
floor_distance[1] = floor_r;

line_distance[0] = line_l;
line_distance[1] = line_r;

//Strings für Display
char irco_string[5][5];
char floor_string[2][5];
char line_string[2][5];

int i;

/*
IR-Abstandssensoren
*/

for(i=0; i<5; ++i)
{
textout(i*21,16," ",0); //löschen
}

for(i=0; i<5; ++i)
{
itoa(irco_distance[i],irco_string[i],10);
textout(i*21,16,irco_string[i],0);
}

/*
IR-Floorsensoren (Abgrunderkennung)
*/

for(i=0; i<2; ++i)
{
textout(i*28,32," ",0); //löschen
}

for(i=0; i<2; ++i)
{
itoa(floor_distance[i],floor_string[i],10);
textout(i*28,32,floor_string[i],0);
}

/*
IR-Liniensensoren
*/

for(i=0; i<2; ++i)
{
textout(i*28,48," ",0); //löschen
}

for(i=0; i<2; ++i)
{
itoa(line_distance[i],line_string[i],10);
textout(i*28,48,line_string[i],0);
}

delay(100);
}

while(1);
return 0;
}



Damit bewegt er sich so, dass er Hindernissen ausweicht:


#include <stdlib.h>
#include <avr/interrupt.h>

#include "nibo/niboconfig.h"
#include "nibo/iodefs.h"

#include "nibo/delay.h"
#include "nibo/adc.h"
#include "nibo/pwm.h"
#include "nibo/i2cmaster.h"
#include "nibo/display.h"

#include "nibo/bot.h"
#include "nibo/leds.h"
#include "nibo/gfx.h"
#include "nibo/irco.h"
#include "nibo/motco.h"
#include "nibo/floor.h"

#define LINKS 0
#define VORNE_LINKS 1
#define VORNE 2
#define VORNE_RECHTS 3
#define RECHTS 4

void Init()
{
sei(); // enable interrupts

i2c_init();
pwm_init();
display_init();

bot_init();
leds_init();
floor_init();
gfx_init();
}

void float2string(float value, int decimal, char* valuestring);

float SupplyVoltage(void)
{
bot_update();
return(0.0166 * bot_supply - 1.19);
}

void textout(int x, int y, char* str, int ft)
{
gfx_move(x,y);
gfx_print_text(str,ft);
}


int main()
{
Init();

// Kollisionsvermeidung vorbereiten
uint16_t Vektor[5][2]; // Einheitsvektoren (*10) [0] ist x- und [1] ist y-Wert
Vektor[0][0] = -10; // LINKS x
Vektor[0][1] = 0; // LINKS y
Vektor[1][0] = -7; // VORNE_LINKS x
Vektor[1][1] = 7; // VORNE_LINKS y
Vektor[2][0] = 0; // VORNE x
Vektor[2][1] = 10; // VORNE y
Vektor[3][0] = 7; // VORNE_RECHTS x
Vektor[3][1] = 7; // VORNE_RECHTS y
Vektor[4][0] = 10; // RECHTS x
Vektor[4][1] = 0; // RECHTS y

uint16_t VektorMalSensor[5][2]; // Sensorwert * Einheitsvektor (*10)
uint16_t VektorMalSensorSumme[2]; // Sensorschwerpunkt (x,y) für Auswertung

// Vorbereitungen
leds_set_displaylight(1000);
leds_set_headlights(512);
floor_enable_ir();
motco_setPWM(600,600);
motco_setSpeed(25,25);

// fixe Display-Anzeigen
textout(35,0,"Volt", 0);
textout(0, 8,"distance:", 0);
textout(0,24,"floor:", 0);
textout(0,40,"line:", 0);

// Hauptschleife
while(1)
{
// Akkuspannung anzeigen
float Ubatt = SupplyVoltage();
char text[6];
float2string(Ubatt,2,text);
textout(0,0," ",0); // 5 Zeichen löschen
textout(0,0,text, 0);

// Abstandsmessung Raumgefühl
irco_update();
irco_startMeasure();
irco_update();

// Floor
uint16_t floor_distance[2];
uint16_t line_distance[2];

// Abstandsmessung Floor
floor_update();
floor_distance[0] = floor_l;
floor_distance[1] = floor_r;
line_distance[0] = line_l;
line_distance[1] = line_r;

//Strings für Display
char irco_string[5][5];
char floor_string[2][5];
char line_string[2][5];

// Laufvariablen
int i,j;

/*
IR-Abstandssensoren
*/

for(i=0; i<5; ++i)
textout(i*21,16," ",0); //löschen

for(i=0; i<5; ++i)
{
itoa(irco_distance[i],irco_string[i],10);
textout(i*21,16,irco_string[i],0);
}

/*
IR-Floorsensoren (Abgrunderkennung)
*/

for(i=0; i<2; ++i)
textout(i*28,32," ",0); //löschen

for(i=0; i<2; ++i)
{
itoa(floor_distance[i],floor_string[i],10);
textout(i*28,32,floor_string[i],0);
}

/*
IR-Liniensensoren
*/

for(i=0; i<2; ++i)
textout(i*28,48," ",0); //löschen

for(i=0; i<2; ++i)
{
itoa(line_distance[i],line_string[i],10);
textout(i*28,48,line_string[i],0);
}

/*
MOTCO

Mathematische Methode "x/y-Schwerpunkt der Sensorvektoren bilden":
(Einheitsvektoren * 10) * Sensorwert (0-255), davon Summe bilden

VektorMalSensorSumme[...] 0 ist x-Wert und 1 ist y-Wert
Blockade: y kann maximal 6120 groß werden (vl, v, vr 255)
Richtung: x kann maximal -4335 (Hindernis links) bzw. +4335 (H. rechts) werden (l, vl 255 bzw. r, vr 255)
*/

VektorMalSensorSumme[0] = 0; // x-Wert
VektorMalSensorSumme[1] = 0; // y-Wert

for (i=0; i<5; ++i)
{
for (j=0; j<2; ++j)
{
VektorMalSensor[i][j] = Vektor[i][j] * irco_distance[i];
VektorMalSensorSumme[j] += VektorMalSensor[i][j];
}
}

// Reaktion auf VektorMalSensorSumme[...] (x- und y-Wert)
if(VektorMalSensorSumme[1] >= 4590)
{
motco_setSpeed(-25,-25); //rückwärts fahren
}
else if( (VektorMalSensorSumme[1] < 4900) && (VektorMalSensorSumme[1] >= 3060) )
{
if(VektorMalSensorSumme[0] < -2500) // Hindernis links
motco_setSpeed(25,-25);
else if ( (VektorMalSensorSumme[0] >= -2500) && (VektorMalSensorSumme[0] <= 2500) ) // kein Hindernis
motco_setSpeed(25,25);
else // Hindernis rechts
motco_setSpeed(-25,25);
}
else
{
motco_setSpeed(30,30);
}

motco_update();
}

while(1);
return 0;
}


// Hilfsfunktionen

void float2string(float value, int decimal, char* valuestring)
{
int neg = 0; char tempstr[20];
int i = 0; int j = 0; int c; long int val1, val2;
char* tempstring;
tempstring = valuestring;
if (value < 0){ neg = 1; value = -value; }
for (j=0; j < decimal; j++) {value = value * 10;}
val1 = (value * 2);
val2 = (val1 / 2) + (val1 % 2);
while (val2 !=0){
if ((decimal > 0) && (i == decimal)){
tempstr[i] = (char)(0x2E);
i++;
}
else{
c = (val2 % 10);
tempstr[i] = (char) (c + 0x30);
val2 = val2 / 10;
i++;
}
}
if (neg){
*tempstring = '-';
tempstring++;
}
i--;
for (;i > -1;i--){
*tempstring = tempstr[i];
tempstring++;
}
*tempstring = '\0';
}

Lisbeth
28.07.2007, 14:06
Hallo, ich habe mir auch einen Nibo gekauft und muss ihn nun erstmal zusammenlöten....
In einem anderen Faden
https://www.roboternetz.de/phpBB2/viewtopic.php?p=302266#302266
wird das MSRS diskutiert. Wäre es nicht gut, den Nibo als Hardwarebasis zu verwenden?
Gruß
Lisbeth

ehenkes
28.07.2007, 16:11
Wenn Du Fragen zum Zusammenbau hast, die versuche ich gerne zu beantworten. Kritisch ist das 10->2*5-Kabel der Odometrie und die Rückseite des 7805 muss man gut isolieren (2 Lagen Isolierband, Kurzschlussgefahr mit CNY70-Beinchen). Es gibt da schon einige Punkte zu beachten. Die Platine ist nicht ganz einfach gestrickt, also kein ASURO.

Bezüglich des MSRS bin ich mir noch nicht sicher. Es ist für den Nibo noch zu früh, da die Firmware/Software des Nibo noch in der Entwicklungsphase ist. Wenn hier Stabilität hergestellt ist, könnte man das Thema mal angehen. Auf jeden Fall können wir dann endlich Programme tauschen, etc. :)

Lisbeth
28.07.2007, 17:03
Ich dachte, gerade wenn die Plattform noch frisch ist und an der Firmware gearbeitet wird, ist MSRS ein Thema (parallel und nicht sequentiell arbeiten!).
Nibo ist mit 128k doch auch ein guter Kandidat für AI, oder?
Ansonsten verlief der Tag durchaus schlecht: Die Bestückung haben wir nach 10 eingelöteten Kondensatoren gefrustet abgebrochen, da der Lötzinn regelrecht abgestossen wurde!! :cry:
Keine Ahnung, warum. Mit dem gleichen Equipment haben wir den Asuro problemlos zusammengelötet!
Gruß
Lisbeth

ehenkes
28.07.2007, 17:20
Zu MSRS:
Stellungnahme des Entwicklers zu diesem Thema am 04.07.2007:
"In das Robotics Studio bin ich leider momentan nicht eingearbeitet, aber
ich würde es auch nicht ausschließen dafür eine Portierung zu
entwickeln. Ansonsten werden alle Quelltexte von mir unter Open-Source
Lizenzen bereit gestellt, sodass eine Anbindung an das Robotics Studio
auch durch andere erfolgen kann."

Zur Lötausrüstung:
Nibo ist kein ASURO. Die Platine ist deutlich filigraner und kann nur mit feiner Spitze und richtiger Temperatur mit gutem Lot gelötet werden. Ohne Löterfahrung geht da nichts! Ich habe ihn unter einer Leuchtlupe gelötet und war froh, als es geschafft war. Nur eine kalte Lötstelle am 10-Pin-Wannenstecker und ein Kurzschluss zwischen 7805 und CNY70.
Der ASURO ist ein Kinderspiel dagegen. Damit steht jetzt fest: Nibo ist definitiv kein Roboterbausatz für Anfänger! Ich dachte allerdings, dass er vom ASURO kommend als Upgrade tauglich sei. Ich habe allerdings recht viel Löterfahrung aus Serienfertigungen in den letzten Jahren.

Lisbeth
28.07.2007, 17:36
Leuchtlupe, feine Spitze und richtige Temperatur:
Nix davon steht in der Anleitung zum Zusammenbau!
Die (Löt-)Anleitung beim Asuro war dagegen gut!
Für Gelegenheitslöter wie uns (nach 20 Jahren mal wieder nach dem NDR-Computer (kennt den noch wer?)) ist Nibo wohl nicht zu stemmen? Oder?
Gruß
Lisbeth

ehenkes
28.07.2007, 17:51
Die ASURO-Platine ist grob gegen die des Nibo, das habe ich schon mehrfach hier geschrieben, also nichts für Lötanfänger!

Die Leuchtlupe brauche ich persönlich, weil ich 51 bin, trotz Brille, sonst sehe ich die feinen Bahnen der Nibo-Platine nicht und schmelze alles zusammen, also mein Problem. Die richtige Temperatur (regelbare Lötstation) und das richtige Lötzinn (fein) ist wichtig. Man sollte auch Entlötlitze greifbar haben.

Bitte nicht aufgeben! Das ist zu schaffen. :)

Lisbeth
28.07.2007, 17:58
Weller Lötstation WS50 ist regelbar
Lötzinn: Was ist "fein"? Ich habe HS10 mit Durchmesser 1,0mm von der Firma STANNOL.
Alles falsch?
Gruß
Lisbeth

ehenkes
28.07.2007, 18:10
1,0 mm ist meines Erachtens o.k. (Doku empfiehlt 0,5 mm). Daran liegt es sicher nicht, denn das habe ich auch verwendet (privat verwende ich noch bleihaltiges Lötzinn, Sn 60 Pb 38 Cu 2). Temperatur hatte ich eher hoch (350-370°C, bei Steckern 400°C) eingestellt, schnell mit wenig Lot gelötet. Weller ist doch auch ein Qualitätsname. Nur Mut! Das wird schon.


Der Schmelzpunkt von bleifreiem Lot ist 20 °C bis 45 °C höher als der Schmelzpunkt von bleihaltigen Lot , konsequenterweise muß die Temperatur der Lötspitze höher eingestellt werden. Es ist allgemein üblich und auch akzeptabel, daß die Temperatur der Lötspitzen um ca. 50 °C höher als der Schmelzpunkt des Lotes eingestellt wird. Allerdings werden vielfach Lötspitzentemperaturen gewählt, die 100 °C höher sind als die Schmelztemperatur, diese Unterschiede sind von der Wärmekapazität des zu lötenden Werkstückes , der Lötstellengröße, und der Masse der Lötspitze abhängig.
Die Lötspitzentemperaturen werden bei bleihaltigem Lötzinn Sn – Pb mit ca. 340 °C gewählt und bei bleifreiem Lötzinn Sn – 0.7Cu auf ca. 370 °C eingestellt.
Löttemperaturen über 350 °C stoßen an die Grenzen für Lötstationen. Der Verschleiß von Lötspitzen steigt rapide und der Arbeitsbereich der Flußmittel wird überschritten. Oberhalb dieser Temperaturen verkohlt das Flußmittel, die Aktivität des Flußmittels verringert sich und es kommt zur Trennung von Lot und Flußmittel.
Quelle: http://www.cologne-hardware.de/grundlagen/loeten/bleifrei.htm

ehenkes
28.07.2007, 20:01
Im Nibo wiki findet man folgenden Beitrag zum Thema Löten:
http://nibo.editthis.info/wiki/L%C3%B6ten

Die Dokumenation wurde heute aktualisiert:
http://download.nicai-systems.com/nibo/DokuNibo_20070728.pdf

ehenkes
29.07.2007, 01:11
Ich habe das Antikollisionsprogramm mit dem geometrischen Sensorschwerpunkt um Gewichtungsfaktoren ergänzt, einen Speedfactor zugefügt, mit den Grenzen etwas gespielt und versucht, Schwingungen vorzubeugen. Diese Grenzen hängen auch noch von der Tageszeit (Lichteinfluss IR), evtl. auch von der Akkuspannung (Messwerte IR) ab. Nibo bewegt sich damit schon, ohne sich zu verletzen. ;-)
Er bleibt manchmal noch unter Bürostuhlbeinen hängen. Da könnte man etwas mit der Odometrie machen. Da die Räder bei glatten Böden durchdrehen, geht aber kein einfacher Vergleich, ob sich das Rad überhaupt noch dreht. Gebogene schwarze Hindernisse, die IR schlucken und nach oben reflektieren, sind logischerweise auch ein physikalisches Problem. Gute Tipps?


/********************************************
* *
* N I B O - A N T I K O L L I S I O N *
* *
********************************************/

// Stand: 31.07.2007, 01:00h
// Erhard Henkes
// www.henkessoft.de

// Geometrischer Sensorschwerpunkt
// Gewichtung der Sensoren
// Einfaches Ausweichen nach Grenzwerten

// TODO: unter Bürostuhlbein einklemmen
// fährt im Kreis, weil er z.B. immer links ausweicht

#include <stdlib.h>
#include <avr/interrupt.h>

#include "nibo/niboconfig.h"
#include "nibo/iodefs.h"

#include "nibo/delay.h"
#include "nibo/adc.h"
#include "nibo/pwm.h"
#include "nibo/i2cmaster.h"
#include "nibo/display.h"

#include "nibo/bot.h"
#include "nibo/leds.h"
#include "nibo/gfx.h"
#include "nibo/irco.h"
#include "nibo/motco.h"
#include "nibo/floor.h"

#define LINKS 0
#define VORNE_LINKS 1
#define VORNE 2
#define VORNE_RECHTS 3
#define RECHTS 4

#define SPEEDFACTOR 30

// Zustände
#define BLOCKIERT 1
#define AUSWEICHEN 2
#define FREI 0
#define HINDERNISLINKS 3
#define HINDERNISRECHTS 4
#define GERADEAUS 5


// Deklarationen von Hilfsfunktionen
void Init();
void float2string(float value, int decimal, char* valuestring);
void leds_set_status_all(uint8_t col0, uint8_t col1, uint8_t col2, uint8_t col3, uint8_t col4, uint8_t col5);
float SupplyVoltage(void);
void textout(int x, int y, char* str, int ft);


int main()
{
Init();

// Kollisionsvermeidung vorbereiten
uint16_t Vektor[5][2]; // Einheitsvektoren (*10) [0] ist x- und [1] ist y-Wert
Vektor[0][0] = -10; // LINKS x
Vektor[0][1] = 0; // LINKS y
Vektor[1][0] = -7; // VORNE_LINKS x
Vektor[1][1] = 7; // VORNE_LINKS y
Vektor[2][0] = 0; // VORNE x
Vektor[2][1] = 10; // VORNE y
Vektor[3][0] = 7; // VORNE_RECHTS x
Vektor[3][1] = 7; // VORNE_RECHTS y
Vektor[4][0] = 10; // RECHTS x
Vektor[4][1] = 0; // RECHTS y

uint8_t weightfactor[5]; // Gewichtungsfaktor
weightfactor[LINKS] = 1;
weightfactor[VORNE_LINKS] = 2;
weightfactor[VORNE] = 3;
weightfactor[VORNE_RECHTS] = 2;
weightfactor[RECHTS] = 1;

uint16_t VektorMalSensor[5][2]; // Sensorwert * Einheitsvektor (*10)
uint16_t VektorMalSensorSumme[2]; // Sensorschwerpunkt (x,y) für Auswertung

// Vorbereitungen
leds_set_displaylight(1000);
leds_set_headlights(256);
floor_enable_ir();
motco_setPWM(512,512);
motco_setSpeed(3,3);

// fixe Display-Anzeigen
textout(35,0,"Volt", 0);
textout(0, 8,"distance:", 0);
textout(0,24,"floor:", 0);
textout(0,40,"line:", 0);

// Hauptschleife
while(1)
{
// Akkuspannung anzeigen
float Ubatt = SupplyVoltage();
char text[6];
float2string(Ubatt,2,text);
textout(0,0," ",0); // 5 Zeichen löschen
textout(0,0,text, 0);

// Abstandsmessung Raumgefühl
irco_startMeasure();
irco_update();

// Floor
uint16_t floor_distance[2];
uint16_t line_distance[2];

// Abstandsmessung Floor
floor_update();
floor_distance[0] = floor_l;
floor_distance[1] = floor_r;
line_distance[0] = line_l;
line_distance[1] = line_r;

//Strings für Display
char irco_string[5][5];
char floor_string[2][5];
char line_string[2][5];

// Laufvariablen
int i,j;

/*
IR-Abstandssensoren
*/

for(i=0; i<5; ++i)
textout(i*21,16," ",0); //löschen

for(i=0; i<5; ++i) // z.Z. noch rechts 0 und links 4 !!!!!!!!!!!!!
{
itoa(irco_distance[i],irco_string[i],10);
textout(i*21,16,irco_string[i],0);
}

/*
IR-Floorsensoren (Abgrunderkennung)
*/

for(i=0; i<2; ++i)
textout(i*28,32," ",0); //löschen

for(i=0; i<2; ++i)
{
itoa(floor_distance[i],floor_string[i],10);
textout(i*28,32,floor_string[i],0);
}

/*
IR-Liniensensoren
*/

for(i=0; i<2; ++i)
textout(i*28,48," ",0); //löschen

for(i=0; i<2; ++i)
{
itoa(line_distance[i],line_string[i],10);
textout(i*28,48,line_string[i],0);
}

/*
MOTCO

Mathematische Methode "x/y-Schwerpunkt der Sensorvektoren bilden":
(Einheitsvektoren * 10) * Sensorwert (0-255) * weightfactor, davon Summe bilden

VektorMalSensorSumme[...] 0 ist x-Wert und 1 ist y-Wert
Blockade: y kann maximal 14790 groß werden (vl, v, vr 255)
Richtung: x kann maximal -6120 (Hindernis links) bzw. +6120 (H. rechts) werden (l, vl 255 bzw. r, vr 255)
*/

// Ermittlung von VektorMalSensorSumme[...] (gewichteter x- und y-Wert)
VektorMalSensorSumme[0] = 0; // x-Wert
VektorMalSensorSumme[1] = 0; // y-Wert

// i entspricht links, vornelinks, vorne, vornerechts, rechts
// j entspricht x und y

for (i=0; i<5; ++i)
{
for (j=0; j<2; ++j)
{
VektorMalSensor[i][j] = Vektor[i][j] * irco_distance[i] * weightfactor[i]; // 4-i wegen IRCo?????
VektorMalSensorSumme[j] += VektorMalSensor[i][j];
}
}

// Reaktion auf VektorMalSensorSumme[...] (x- und y-Wert)

// GrenzenY
uint16_t GrenzeY1 = 12000; // Zustandsgrenze: BLOCKIERT / AUSWEICHEN
uint16_t GrenzeY2 = 6000; // Zustandsgrenze: AUSWEICHEN / FREI

// GrenzenX
uint16_t GrenzeXlinks = -2000; // Zustandsgrenze: LINKS / GERADEAUS
uint16_t GrenzeXrechts = 2000; // Zustandsgrenze: RECHTS / GERADEAUS

// Zustandsvariable
uint8_t zustand = 0;
uint8_t zustand_old = 0;

// Zustand ermitteln
{ // y-Wert
if( VektorMalSensorSumme[1] >=GrenzeY1) zustand = BLOCKIERT;
if((VektorMalSensorSumme[1] < GrenzeY1) &&
(VektorMalSensorSumme[1] >=GrenzeY2))
{
// x-Werte
if( VektorMalSensorSumme[0] < GrenzeXlinks ) zustand = HINDERNISLINKS;
if( VektorMalSensorSumme[0] > GrenzeXrechts ) zustand = HINDERNISRECHTS;
if((VektorMalSensorSumme[0] >=GrenzeXlinks) &&
(VektorMalSensorSumme[0] <=GrenzeXrechts)) zustand = GERADEAUS;
}
if (VektorMalSensorSumme[1] < GrenzeY2) zustand = FREI;
}

// Auf Zustand reagieren
if(zustand == zustand_old)
{
// kein MOTCo-Befehl notwendig
}
else //Veränderung eingetreten
{
// Sondermaßnahmen
// gegen Schwingung links/rechts: einmal GERADEAUS erzwingen
if((zustand_old == HINDERNISLINKS) || (zustand_old == HINDERNISRECHTS))
{
zustand = GERADEAUS;
}
// gegen Schwingung vor/zurück: zweimal zurück
if((zustand_old == BLOCKIERT) && (zustand == GERADEAUS))
{
zustand = BLOCKIERT;
}
// direkt vorne frei?
if(irco_distance[2]<150)
{
zustand = zustand_old;
}

//Allgemeine Maßnahmen
switch(zustand)
{
case FREI:
//entry
leds_set_status_all(LEDS_OFF, LEDS_OFF, LEDS_GREEN, LEDS_GREEN, LEDS_OFF, LEDS_OFF);
//do
motco_setSpeed( 3*SPEEDFACTOR, 3*SPEEDFACTOR ); // rasch vorwärts
delay(10);
//exit
break;
case HINDERNISRECHTS:
//entry
leds_set_status_all(LEDS_OFF, LEDS_OFF, LEDS_OFF, LEDS_OFF, LEDS_ORANGE, LEDS_ORANGE);
//do
motco_setSpeed( -SPEEDFACTOR, SPEEDFACTOR ); // nach links drehen
delay(10);
//exit
break;
case GERADEAUS:
//entry
leds_set_status_all(LEDS_OFF, LEDS_OFF, LEDS_ORANGE, LEDS_ORANGE, LEDS_OFF, LEDS_OFF);
//do
motco_setSpeed( 2*SPEEDFACTOR, 2*SPEEDFACTOR ); // gemäßigt vorwärts
delay(10);
//exit
break;
case HINDERNISLINKS:
//entry
leds_set_status_all(LEDS_ORANGE, LEDS_ORANGE, LEDS_OFF, LEDS_OFF, LEDS_OFF, LEDS_OFF);
//do
motco_setSpeed( SPEEDFACTOR, -SPEEDFACTOR ); // nach rechts drehen
delay(10);
//exit
break;
case BLOCKIERT:
//entry
leds_set_status_all(LEDS_OFF, LEDS_OFF, LEDS_RED, LEDS_RED, LEDS_OFF, LEDS_OFF);
//do
motco_setSpeed(-2*SPEEDFACTOR,-2*SPEEDFACTOR ); // rückwärts fahren
delay(10);
//exit
break;
}
zustand_old = zustand;
motco_update();
}
}//Ende while-Hauptschleife

while(1);
return 0;
}


// Hilfsfunktionen

void Init()
{
sei(); // enable interrupts

i2c_init();
pwm_init();
display_init();

bot_init();
leds_init();
floor_init();
gfx_init();
}

void leds_set_status_all(uint8_t col0, uint8_t col1, uint8_t col2, uint8_t col3, uint8_t col4, uint8_t col5)
{
leds_set_status(col0,0);
leds_set_status(col1,1);
leds_set_status(col2,2);
leds_set_status(col3,3);
leds_set_status(col4,4);
leds_set_status(col5,5);
}

float SupplyVoltage(void)
{
bot_update();
return(0.0166 * bot_supply - 1.19);
}

void textout(int x, int y, char* str, int ft)
{
gfx_move(x,y);
gfx_print_text(str,ft);
}

void float2string(float value, int decimal, char* valuestring)
{
int neg = 0; char tempstr[20];
int i = 0; int j = 0; int c; long int val1, val2;
char* tempstring;
tempstring = valuestring;
if (value < 0){ neg = 1; value = -value; }
for (j=0; j < decimal; j++) {value = value * 10;}
val1 = (value * 2);
val2 = (val1 / 2) + (val1 % 2);
while (val2 !=0){
if ((decimal > 0) && (i == decimal)){
tempstr[i] = (char)(0x2E);
i++;
}
else{
c = (val2 % 10);
tempstr[i] = (char) (c + 0x30);
val2 = val2 / 10;
i++;
}
}
if (neg){
*tempstring = '-';
tempstring++;
}
i--;
for (;i > -1;i--){
*tempstring = tempstr[i];
tempstring++;
}
*tempstring = '\0';
}

ehenkes
30.07.2007, 20:26
Noch zum Thema Löten:
http://www.curiousinventor.com/guides/How_To_Solder

ehenkes
02.08.2007, 09:58
Eine der Probleme besteht oft darin, eine geeignete Fernbedienung mit RC5-Code sicher zu erwerben. Auf diesem Weg ist es mir beim Nibo gelungen: (Einstellung an Universalfernbedienung: TV1, 023)
https://www.roboternetz.de/phpBB2/viewtopic.php?p=303427#303427

Lisbeth
05.08.2007, 13:21
Wo findet man eigentlich weiterführende Informationen über das Zusammenspiel der 3 Controller? Es gibt für den Nibo wohl eine Firmware, die über den ATMega128 die beiden ATtiny44 "flasht".
Es gibt im Wiki Infos über das .hex-File, aber keinen sourcecode. Warum werden Informationen über Bootloader und z.B. obige Firmware so ein Geheimnis gemacht? (Gilt auch für andere uC Hersteller).
Gruß
Lisbeth

ehenkes
05.08.2007, 13:52
Hallo Lisbeth! Ja genau so. Die Funktionsweise der Initializer-Software wird über die Jumper (vier Möglichkeiten) geregelt. Beim Nibo liegt alles "offen", manches allerdings unter der Motorhaube. Du kannst den gesamten Sourcecode einsehen:
https://nibo.svn.sourceforge.net/svnroot/nibo/trunk/src/

Am besten beschaffst Du Dir TortoiseSVN 1.4.4. http://tortoisesvn.net/

Damit kannst Du das Repository auf einfache Weise exportieren. Besorge Dir den Sourcecode immer von dort, nicht über Sourceforge, da dieses Paket nicht aktuell ist.

Verwendest Du MS Windows oder Linux als Betriebssystem?

Siehe z.B. ein kleines Hallo-Welt-Programm in C:
https://nibo.svn.sourceforge.net/svnroot/nibo/trunk/src/test1/test.c

Ich habe übrigens angefangen, Nibo in C++ zu programmieren. Nicht ganz einfach, aber es funktioniert prächtig. Hier ein kleines Beispiel:

#include <avr/interrupt.h>
#include "nibocc/niboconfig.hpp"

#include "nibocc/i2cmaster.hpp"
#include "nibocc/adc.hpp"
#include "nibocc/bot.hpp"
#include "nibocc/delay.hpp"
#include "nibocc/display.hpp"
#include "nibocc/floor.hpp"
#include "nibocc/graphicdisplay.hpp"
#include "nibocc/irco.hpp"
#include "nibocc/leds.hpp"
#include "nibocc/motco.hpp"
#include "nibocc/pwm.hpp"
#include "nibocc/textdisplay.hpp"

#include <stdlib.h> // RAND_MAX 32767
#include <stdint.h>
#include <string.h> // MyString

using namespace nibocc;

// Hilfsfunktionen
float SupplyVoltage(void);


// Hilfsklassen

/*****************
* Stringklasse *
******************/


// notwenig für WinAVR bis Mai 2007 bzw. bis GCC 4.1.2
// Ersatz für new, new[], delete und delete[] der fehlenden C++-Standard-Bibliothek
void* operator new (size_t size) { return malloc(size); }
void* operator new[] (size_t size) { return malloc(size); }
void operator delete (void* ptr) { free(ptr); }
void operator delete[] (void* ptr) { free(ptr); }

class MyString
{
private:
char * pData_;

public:
friend MyString operator+( const MyString &, const MyString & );
MyString() : pData_( NULL ) {} // inline ctor
MyString( const char * pText );
MyString( const MyString & text ); // Copy-Konstruktor
~MyString(); // dtor
const MyString & operator=( const MyString & text );

bool operator==( const MyString & text ) const;
char operator[]( int index ) const;
operator const char * () const; // cast zum C-String
operator char * () const; // cast zum C-String
int getLaenge() const;
void ausgeben() const;
};

MyString operator+( const MyString & leftstring, const MyString & rightstring );

/************************************************** ****************/

// ctor mit C-String als Argument
MyString::MyString( const char * pText ) : pData_( NULL )
{
if( pText )
{
pData_ = new char[ strlen( pText ) + 1 ];
strcpy( pData_, pText );
}
}

// copy-ctor
MyString::MyString( const MyString & text ) : pData_( NULL )
{
if( text.pData_ )
{
pData_ = new char[ strlen( text.pData_ ) + 1 ];
strcpy( pData_, text.pData_ );
}
}

// dtor
MyString::~MyString()
{
delete[] pData_;
}

// ==
bool MyString::operator==( const MyString & text ) const
{
if( pData_ == NULL || text.pData_ == NULL )
{
return ( pData_ == NULL && text.pData_ == NULL );
}
return ( strcmp( pData_, text.pData_ ) == 0 );
}

// []
char MyString::operator[]( int i ) const
{
if( i >= 0 && i < getLaenge() )
{
return pData_[i];
}
else
{
return '\0';
}
}

// Länge des Textes ermitteln
int MyString::getLaenge() const
{
if( pData_ == NULL )
{
return 0;
}
else
{
return strlen( pData_ );
}
}

// cast zu C-String
MyString::operator const char * () const
{
return pData_;
}

MyString::operator char * () const
{
return pData_;
}

// Zuweisungs-Operator
const MyString & MyString::operator=( const MyString & text )
{
if( this == &text ) // Selbstzuweisung abfangen
{
return *this;
}
delete[] pData_;
if( text.pData_ )
{
pData_ = new char[ strlen( text.pData_ ) + 1 ];
strcpy( pData_, text.pData_ );
}
else
{
pData_ = NULL;
}
return *this;
}

void MyString::ausgeben() const
{
// TODO
}

/************************************************** ****************/

MyString operator+( const MyString & leftstring, const MyString & rightstring )
{
MyString result;
if( leftstring.pData_ != NULL && rightstring.pData_ != NULL )
{
result.pData_ = new char[ strlen( leftstring.pData_ ) +
strlen( rightstring.pData_ ) + 1 ];
strcpy( result.pData_, leftstring.pData_ );
strcat( result.pData_, rightstring.pData_ );
}
else if( rightstring.pData_ != NULL )
{
result = rightstring;
}
else if( leftstring.pData_ != NULL )
{
result = leftstring;
}
return result;
}


class RandomStdlib // verwendet rand() aus <stdlib.h>
{
private:
const uint16_t seed_;
public:
RandomStdlib():seed_(static_cast<uint16_t>(3000*SupplyVoltage())){}

int getNum() const
{
static uint8_t seed_flag=0;
if(!seed_flag)
{
srand(seed_);
seed_flag = 1; // true
}
return rand();
}
};

template<typename T_Generator>
class Wuerfel
{
private:
const uint16_t maxzahl_;
const uint16_t maxrandom_;
T_Generator zahlengenerator_; // Template-Typ

public:
Wuerfel(uint16_t maxzahl):maxzahl_(maxzahl),maxrandom_(RAND_MAX-(RAND_MAX%maxzahl)) {}

uint16_t wuerfelt()
{
uint16_t r;
do{ r = zahlengenerator_.getNum(); }
while ( r >= maxrandom_ );
return ( r % maxzahl_ +1 );
}
};


int main()
{
sei();
Bot::init();
Leds::init();
Pwm::init();
Display::init();
Graficdisplay::init();

Leds::set_displaylight(1000);

Graficdisplay::move(0,10);
Graficdisplay::print_text("Nibo Lichtorgel", 0);
Graficdisplay::move(0,20);
Graficdisplay::print_text("mit Zufallsgenerator", 0);
Graficdisplay::move(0,40);
Graficdisplay::print_text("LED", 0);
Graficdisplay::move(40,40);
Graficdisplay::print_text("Color", 0);

MyString str, str1, str2;
str1 ="AVR-Programm mit";
str2 =" C++!";
str = str1 + str2;

Graficdisplay::move(0,54);
Graficdisplay::print_text( (char *) str, 0);

Wuerfel<RandomStdlib> w(6); // 1 ... 6
Wuerfel<RandomStdlib> c(3); // 1 ... 3

uint8_t wurf, color;
char text[2];

while(1)
{
static uint16_t pause = 1200;
pause -=50;
if(pause<50) pause = 50;

wurf = w.wuerfelt()-1;
color = c.wuerfelt();

itoa(wurf,text,10);
Graficdisplay::move(23,40);
Graficdisplay::print_text(text, 0);

itoa(color,text,10);
Graficdisplay::move(75,40);
Graficdisplay::print_text(text, 0);

Leds::set_status(color,wurf);
Leds::set_headlights(170*(wurf+1)); // 170...1020


Delay::delay(pause);

for(int i=0; i<6; ++i)
Leds::set_status(LEDS_OFF,i);
}

while(1);
return 0;
}

// Hilfsfunktionen

float SupplyVoltage(void)
{
bot_update();
return(0.0166 * bot_supply - 1.19);
}



Bin gerade an einer FSM nicht mit if/else oder switch/case, sondern gemäß http://www.ai-junkie.com/architecture/state_driven/tut_state1.html mit Klassen, die den jeweiligen Zustand im Sinne eines "state design pattern" repräsentieren, falls Dich so etwas interessieren sollte.

Lisbeth
05.08.2007, 16:51
@ehenkes:
1) Betriebssystem: Tut nix zur Sache! (Ich will keine Angriffsfläche für die diversen Fraktionen bieten :-) ) Der Nibo hat ja eh (noch) keins
2) C++: Welche Entwicklungsumgebung? Warum FiniteStateMachine?
3) Mein Vorschlag bzgl. Löten ist, dass es gut wäre, auch einen Fertigbausatz (vielleicht ohne mechanische Montage) gegen Aufpreis anzubieten. Der RP6 kostet ja fertig 129 EUR und das bei "nur" einen ATMega32.
4) Kann man hier im roboternetz eventuell die Technischen Daten der 3 hier so heiß diskutierten Roboter Asuro, Nibo und RP6 im Vergleich reinstellen?
5) Wie ich anderswo schon schrieb, liebe ich meine rasende Leiterplatte Asuro (mit Hüftschaden), weil er so ist, wie er ist. Zum Nibo muss ich erst noch ein Verhältnis aufbauen, aber er kommt mir jetzt schon ein wenig altklug vor....
6) So, und jetzt hör ich für heute auf: Nibo blinkt und rotiert.
Bis demnächst
Lisbeth

ehenkes
05.08.2007, 18:27
@Lisbeth:
ad 1) Mutig! Zu Nibo OS: Da gibt es FreeRTOS: http://www.cypax.net/snippets/index?language=de#mu-tasking
ad 2) Ich verwende AVR Studio + WinAVR für C++, habe nix Besseres. FiniteStateMachine (FSM) für ein Bewegungs-/Antikollisions-Programm
ad 3) Fertig bestückte Platine? Da gibt es doch dieses Problem mit dem 7805, der erst zum Schluss nach dem Anziehen der Schrauben festgelötet wird. Wartet man eine gewisse Zeit, kann man Nibo sicher fertig zusammen gebaut via ebay ergattern. Ich nehme Deinen kaum gebrauchten Nibo sofort, wenn Du "Traktoren" nicht magst. Da könnte ich die Kommunikation via RC5-Code testen. ;)
ad 4) vielleicht noch den c't-Bot dazu nehmen. Der Entwickler hat den Nibo basierend auf den Erfahrungen mit ASURO und c't-Bot entwickelt. Technische Daten sind aber noch nicht alles. Nibo's Vorteil sind die 5 IR-Sensoren. Die vorhandenen Dokumentationen, Programme, Bibliotheken und Erfahrungen sind ebenfalls wichtig.
ad 5) "rasende Leiterplatte" "altklug" - nicht übel! Weiter so. :)
ad 6) Die berühmte "Initializer.hex", deren Sourcecode Du ja nun auch kennst. Ich verwende übrigens noch eine Version vom 18.07., weil bei den neuen Versionen irgendwie Odometriedaten verloren gehen und Nibo suizid-gefährdet durch die Gegend schießt. Da ist der ASURO eine lahme Seifenkiste dagegen.
Tipp: Lege Dir mindestens zwei Akku-Sätze bereit. Nibo ist ein Energiebündel, kein Leisetreter.

Bin auf Deine Ideen, Vorschläge und Programme gespannt! Hoffentlich machst Du bei C++ mit. "ASURO ist C, Nibo ist C, C++ und Java." 8-[

Noch eine Frage: Du bist doch an MS Robotics Studio interessiert? Wie stellst Du Dir die Implementierung für den Nibo vor?

Wa sind deine Hauptinteressen bezüglich Programmierung des Nibo?

Lisbeth
09.08.2007, 15:36
So, da bin ich wieder!
1) Mal eine Frage, den Verbrauch betreffend: soweit ich weiß, haben Asuro und Nibo die gleichen Antriebsmotoren. Diese sind doch die größten Verbraucher, oder? (Mein Nibo hat kein Display!) Wieso braucht Nibo so viel mehr Leistung?
2) Gibt es ein "HowTo" zum Laden des ersten selbsterstellten Programms? In etwa so: Starten Atmel Studio 4.13, Einbinden der header .... (Pfadangaben ...), Kompilieren, Flashen (per ISP-Schnittstelle)
3) 7805: Eine fertig bestückte Leiterplatte kann leicht verwendet werden (ohne "nachlöten"). Ich würde übrigens niemals meinen Asuro und Nibo bei ebay verhökern!! Was sind das für Menschen....
4) MSRS: anderer Faden, aber ich verstehe dort die Aussage: ... service fertig nicht?!?!
Gruß
Lisbeth

ehenkes
09.08.2007, 16:55
1) http://nibo.editthis.info/wiki/Stromversorgung (Verbrauchsdaten)
Das Display ist doch das Sahnehäubchen beim Nibo! Ohne Display könnte ich mir überhaupt nicht vorstellen.
2) Ist in Entwicklung. Frage mal beim Entwickler nach. Vielleicht erhälst Du eine Vorabversion. Wenn nein, sagst Du mir Bescheid, dann stelle ich ein kleines Beispiel für AVR Studio auf meine Homepage. Wenn Du das allerdings noch nicht alleine schaffst, wird C++ schwierig, da man da alles manuell im makefile erledigen muss. AVR Studio unterstützt C++ nicht wirklich, es duldet es nur. Das Thema muss ich wohl auf meiner Homepage beschreiben, wenn das Programmiertutorial das nicht umfasst.
3) Du hängst also doch schon etwas an dem "altklugen" Traktor. ;)
4) "... service fertig nicht?!?!" Wie meinen? :)

workwind
09.08.2007, 17:00
Hallo Lisbeth,


1) Mal eine Frage, den Verbrauch betreffend: soweit ich weiß, haben Asuro und Nibo die gleichen Antriebsmotoren. Diese sind doch die größten Verbraucher, oder? (Mein Nibo hat kein Display!) Wieso braucht Nibo so viel mehr Leistung?

Die größten Verbraucher sind nicht die Motoren, sondern die Status-LEDs!
Jede LED benötigt pro Farbe ca 20 mA, wenn also alle Status-LEDs eingeschaltet sind, benötigen sie zusammen ca 240 mA!
Der Stromverbrauch mit Display und allen Sensoren, aber ohne LEDs und Motoren beträgt ca. 200 mA, ohne Sensoren 100 mA. Das Display benötigt ca 10 mA.



2) Gibt es ein "HowTo" zum Laden des ersten selbsterstellten Programms? In etwa so: Starten Atmel Studio 4.13, Einbinden der header .... (Pfadangaben ...), Kompilieren, Flashen (per ISP-Schnittstelle)

An einem Programmiertutorial wird momentan gearbeitet.

Schönen Gruß,
Workwind

ehenkes
10.08.2007, 00:20
Hier ein Antikollisionsprogramm als C++-Projekt mit dem jeweiligen "state" als eigene Klasse abgeleitet von der abstrakten Basisklasse State. Das nennt man "state pattern design" und wird in der Spieleprogrammierung gerne eingesetzt.



#ifndef NIBO_H
#define NIBO_H

#include <avr/interrupt.h>
#include "nibocc/niboconfig.hpp"
#include "nibocc/i2cmaster.hpp"
#include "nibocc/adc.hpp"
#include "nibocc/bot.hpp"
#include "nibocc/delay.hpp"
#include "nibocc/display.hpp"
#include "nibocc/floor.hpp"
#include "nibocc/graphicdisplay.hpp"
#include "nibocc/irco.hpp"
#include "nibocc/leds.hpp"
#include "nibocc/motco.hpp"
#include "nibocc/pwm.hpp"
#include "nibocc/textdisplay.hpp"
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

#endif




#ifndef ROBOTER_H
#define ROBOTER_H

#include "State.h"

const int SPEEDFACTOR = 35;

const int FREE = 0;
const int OBSTACLEFRONT = 1;
const int OBSTACLELEFT = 2;
const int OBSTACLERIGHT = 3;

class Roboter
{

int condition;
State* m_pCurrentState;

public:

Roboter();
~Roboter(){};

int getCondition(){return condition;}
void setCondition(int val){condition=val;}

void MoveAhead();
void MoveBack();
void MoveLeft();
void MoveRight();

void Update();
void ChangeState(State* pNewState);
};

#endif




#ifndef STATE_H
#define STATE_H

class Roboter;

class State // abstrakte Klasse
{
public:
virtual ~State(){}
virtual void Execute(Roboter*)=0;
};

#endif
#ifndef STATE_FREE_H
#define STATE_FREE_H

#include "StateObstacleFront.h"
#include "StateObstacleLeft.h"
#include "StateObstacleRight.h"
#include "Roboter.h"

class State_Free : public State
{
public:
State_Free(){}
virtual void Execute(Roboter* bot);
};

#endif




#ifndef STATE_OBSTACLEFRONT_H
#define STATE_OBSTACLEFRONT_H

#include "Roboter.h"
#include "StateObstacleLeft.h"
#include "StateObstacleRight.h"
#include "StateFree.h"

class State_ObstacleFront : public State
{
public:
State_ObstacleFront(){}
virtual void Execute(Roboter* bot);
};

#endif
#ifndef STATE_OBSTACLELEFT_H
#define STATE_OBSTACLELEFT_H

#include "Roboter.h"
#include "StateFree.h"
#include "StateObstacleFront.h"
#include "StateObstacleRight.h"

class State_ObstacleLeft : public State
{
public:
State_ObstacleLeft(){}
virtual void Execute(Roboter* bot);
};

#endif




#ifndef STATE_OBSTACLERIGHT_H
#define STATE_OBSTACLERIGHT_H

#include "Roboter.h"
#include "StateFree.h"
#include "StateObstacleFront.h"
#include "StateObstacleLeft.h"

class State_ObstacleRight : public State
{
public:
State_ObstacleRight(){}
virtual void Execute(Roboter* bot);
};

#endif




#ifndef UTIL_H
#define UTIL_H

#include "nibo.h"
using namespace nibocc;

// Hilfsfunktionen
float SupplyVoltage(void)
{
bot_update();
return(0.0166 * bot_supply - 1.19);
}

void float2string(float value, int decimal, char* valuestring)
{
int neg = 0; char tempstr[20];
int i = 0; int j = 0; int c; long int val1, val2;
char* tempstring;
tempstring = valuestring;
if (value < 0){ neg = 1; value = -value; }
for (j=0; j < decimal; j++) {value = value * 10;}
val1 = (long)(value * 2);
val2 = (val1 / 2) + (val1 % 2);
while (val2 !=0){
if ((decimal > 0) && (i == decimal)){
tempstr[i] = (char)(0x2E);
i++;
}
else{
c = (val2 % 10);
tempstr[i] = (char) (c + 0x30);
val2 = val2 / 10;
i++;
}
}
if (neg){
*tempstring = '-';
tempstring++;
}
i--;
for (;i > -1;i--){
*tempstring = tempstr[i];
tempstring++;
}
*tempstring = '\0';
}

void textout(int x, int y, char* str, int ft)
{
Graficdisplay::move(x,y);
Graficdisplay::print_text(str, ft);
}

void leds_set_status_all(uint8_t col0, uint8_t col1, uint8_t col2, uint8_t col3, uint8_t col4, uint8_t col5)
{
Leds::set_status(col0,0);
Leds::set_status(col1,1);
Leds::set_status(col2,2);
Leds::set_status(col3,3);
Leds::set_status(col4,4);
Leds::set_status(col5,5);
}

void Init()
{
sei();
Bot::init();
I2CMaster::init();
Pwm::init();
Leds::init();
Floor::init();
Display::init();
Graficdisplay::init();
}

// Hilfskonstruktionen
// pure virtual wird dennoch ausgeführt:
extern "C"{
void __cxa_pure_virtual() {} }

// Ersatz für new, new[], delete und delete[] der fehlenden C++-Standard-Bibliothek
void* operator new (size_t size) { return malloc(size); }
void* operator new[] (size_t size) { return malloc(size); }
void operator delete (void* ptr) { free(ptr); }
void operator delete[] (void* ptr) { free(ptr); }

#endif




//Roboter.cpp

#include "nibo.h"
#include "Roboter.h"
#include "StateFree.h"
using namespace nibocc;

void static leds_set_status_all(uint8_t col0, uint8_t col1, uint8_t col2, uint8_t col3, uint8_t col4, uint8_t col5)
{
Leds::set_status(col0,0);
Leds::set_status(col1,1);
Leds::set_status(col2,2);
Leds::set_status(col3,3);
Leds::set_status(col4,4);
Leds::set_status(col5,5);
}

Roboter::Roboter()
{
condition = FREE;
m_pCurrentState = new State_Free();
}

void Roboter::Update()
{
m_pCurrentState->Execute(this);
}

void Roboter::ChangeState(State* pNewState)
{
delete m_pCurrentState;
m_pCurrentState = pNewState;
}

void Roboter::MoveAhead()
{
//entry
leds_set_status_all(LEDS_OFF, LEDS_OFF, LEDS_GREEN, LEDS_GREEN, LEDS_OFF, LEDS_OFF);
//do
MotCo::set_speed( 3*SPEEDFACTOR, 3*SPEEDFACTOR );
MotCo::update();

//exit
}

void Roboter::MoveBack()
{
//entry
leds_set_status_all(LEDS_OFF, LEDS_OFF, LEDS_RED, LEDS_RED, LEDS_OFF, LEDS_OFF);
//do
MotCo::set_speed(-2*SPEEDFACTOR,-2*SPEEDFACTOR );
MotCo::update();
//exit
}

void Roboter::MoveLeft()
{
//entry
leds_set_status_all(LEDS_OFF, LEDS_OFF, LEDS_OFF, LEDS_OFF, LEDS_ORANGE, LEDS_ORANGE);
//do
MotCo::set_speed( -SPEEDFACTOR, SPEEDFACTOR );
MotCo::update();
//exit
}

void Roboter::MoveRight()
{
//entry
leds_set_status_all(LEDS_ORANGE, LEDS_ORANGE, LEDS_OFF, LEDS_OFF, LEDS_OFF, LEDS_OFF);
//do
MotCo::set_speed( SPEEDFACTOR, -SPEEDFACTOR );
MotCo::update();
//exit
}




//StateFree.cpp

#include "StateObstacleLeft.h"
#include "StateObstacleRight.h"
#include "StateObstacleFront.h"
#include "StateFree.h"


void State_Free::Execute(Roboter* bot)
{
if ( (bot->getCondition()) == FREE )
{
bot->MoveAhead();
}

if ( (bot->getCondition()) == OBSTACLEFRONT )
{
bot->ChangeState(new State_ObstacleFront());
}

if ( (bot->getCondition()) == OBSTACLELEFT )
{
bot->ChangeState(new State_ObstacleLeft());
}

if ( (bot->getCondition()) == OBSTACLERIGHT )
{
bot->ChangeState(new State_ObstacleRight());
}
}




//StateObstacleFront.cpp

#include "StateObstacleLeft.h"
#include "StateObstacleRight.h"
#include "StateObstacleFront.h"
#include "StateFree.h"

void State_ObstacleFront::Execute(Roboter* bot)
{
if ( (bot->getCondition()) == FREE )
{
bot->ChangeState(new State_Free());
}

if ( (bot->getCondition()) == OBSTACLEFRONT )
{
bot->MoveBack();
}

if ( (bot->getCondition()) == OBSTACLELEFT )
{
bot->ChangeState(new State_ObstacleLeft());
}

if ( (bot->getCondition()) == OBSTACLERIGHT )
{
bot->ChangeState(new State_ObstacleRight());
}
}




//StateObstacleLeft.cpp

#include "StateObstacleLeft.h"
#include "StateObstacleRight.h"
#include "StateObstacleFront.h"
#include "StateFree.h"

void State_ObstacleLeft::Execute(Roboter* bot)
{
if ( (bot->getCondition()) == FREE )
{
bot->ChangeState(new State_Free());
}

if ( (bot->getCondition()) == OBSTACLEFRONT )
{
bot->ChangeState(new State_ObstacleFront());
}

if ( (bot->getCondition()) == OBSTACLELEFT )
{
bot->MoveRight();
}

if ( (bot->getCondition()) == OBSTACLERIGHT )
{
bot->ChangeState(new State_ObstacleRight());
}
}




//StateObstacleRight.cpp

#include "StateObstacleLeft.h"
#include "StateObstacleRight.h"
#include "StateObstacleFront.h"
#include "StateFree.h"

void State_ObstacleRight::Execute(Roboter* bot)
{
if ( (bot->getCondition()) == FREE )
{
bot->ChangeState(new State_Free());
}

if ( (bot->getCondition()) == OBSTACLEFRONT )
{
bot->ChangeState(new State_ObstacleFront());
}

if ( (bot->getCondition()) == OBSTACLELEFT )
{
bot->ChangeState(new State_ObstacleLeft());
}

if ( (bot->getCondition()) == OBSTACLERIGHT )
{
bot->MoveLeft();
}
}




//test.c

/********************************************
* *
* N I B O - A N T I K O L L I S I O N *
* *
********************************************/

// Stand: 09.08.2007
// Erhard Henkes
// Programmiersprache C++

// Geometrischer Sensorschwerpunkt
// Gewichtung der Sensoren
// state pattern design

// TODO: wird noch unter Bürostuhlbein eingeklemmt
// schwingt ab und zu zwischen zwei Zuständen
// Absolute Grenzen durch relative ersetzen

// Header
#include "nibo.h" // Zusammenfassung der typischen Header für Nibo
#include "Roboter.h"
#include "utilities.h"
using namespace nibocc;

//Richtungen
#define LINKS 0
#define VORNE_LINKS 1
#define VORNE 2
#define VORNE_RECHTS 3
#define RECHTS 4

/************************************************** **************/

int main()
{
Init();

Roboter Nibo;

// Variablen
uint16_t Vektor[5][2]; // Einheitsvektoren (*10) [0] ist x- und [1] ist y-Wert
uint8_t weightfactor[5]; // Gewichtungsfaktor
uint16_t VektorMalSensor[5][2]; // Sensorwert * Einheitsvektor (*10)
uint16_t VektorMalSensorSumme[2]; // Sensorschwerpunkt (x,y) für Auswertung

// Einheitsvektor (* 10) gerundet
Vektor[0][0] = -10; // LINKS x
Vektor[0][1] = 0; // LINKS y
Vektor[1][0] = -7; // VORNE_LINKS x
Vektor[1][1] = 7; // VORNE_LINKS y
Vektor[2][0] = 0; // VORNE x
Vektor[2][1] = 10; // VORNE y
Vektor[3][0] = 7; // VORNE_RECHTS x
Vektor[3][1] = 7; // VORNE_RECHTS y
Vektor[4][0] = 10; // RECHTS x
Vektor[4][1] = 0; // RECHTS y

// Gewichtung der Sensoren in Abhängigkeit von der Richtung
weightfactor[LINKS] = 1;
weightfactor[VORNE_LINKS] = 2;
weightfactor[VORNE] = 3;
weightfactor[VORNE_RECHTS] = 2;
weightfactor[RECHTS] = 1;

// Vorbereitungen
Leds::set_displaylight(1000);
Leds::set_headlights(256);
Floor::enable_ir();
MotCo::set_pwm(512,512);
MotCo::set_speed(3,3);

// fixe Display-Anzeigen
textout(35,0,"Volt", 0);
textout(0, 8,"distance:", 0);
textout(0,24,"floor:", 0);
textout(0,40,"line:", 0);

// Laufvariablen
int i,j;

while(true)
{
// Akkuspannung anzeigen
float Ubatt = SupplyVoltage();
char text[6];
float2string(Ubatt,2,text);
textout(0,0," ",0); // 5 Zeichen löschen
textout(0,0,text, 0);

// Abstandsmessung Raumgefühl
IrCo::start_measure();
IrCo::update();

// Floor
uint16_t floor_distance[2];
uint16_t line_distance[2];

// Abstandsmessung Floor
Floor::update();
floor_distance[0] = floor_l;
floor_distance[1] = floor_r;
line_distance[0] = line_l;
line_distance[1] = line_r;

//Strings für Display
char irco_string[5][5];
char floor_string[2][5];
char line_string[2][5];

/*
IR-Abstandssensoren
*/

for(i=0; i<5; ++i)
textout(i*21,16," ",0); //löschen

for(i=0; i<5; ++i) // z.Z. noch rechts 0 und links 4 !!!!!!!!!!!!!
{
itoa(irco_distance[i],irco_string[i],10);
textout(i*21,16,irco_string[i],0);
}

/*
IR-Floorsensoren (Abgrunderkennung)
*/

for(i=0; i<2; ++i)
textout(i*28,32," ",0); //löschen

for(i=0; i<2; ++i)
{
itoa(floor_distance[i],floor_string[i],10);
textout(i*28,32,floor_string[i],0);
}

/*
IR-Liniensensoren
*/

for(i=0; i<2; ++i)
textout(i*28,48," ",0); //löschen

for(i=0; i<2; ++i)
{
itoa(line_distance[i],line_string[i],10);
textout(i*28,48,line_string[i],0);
}


/*
MOTCO

Mathematische Methode "x/y-Schwerpunkt der Sensorvektoren bilden":
(Einheitsvektoren * 10) * Sensorwert (0-255) * weightfactor, davon Summe bilden

VektorMalSensorSumme[...] 0 ist x-Wert und 1 ist y-Wert
Blockade: y kann maximal 14790 groß werden (vl, v, vr 255)
Richtung: x kann maximal -6120 (Hindernis links) bzw. +6120 (H. rechts) werden (l, vl 255 bzw. r, vr 255)
*/

// Ermittlung von VektorMalSensorSumme[...] (gewichteter x- und y-Wert)
VektorMalSensorSumme[0] = 0; // x-Wert
VektorMalSensorSumme[1] = 0; // y-Wert

// i entspricht links, vornelinks, vorne, vornerechts, rechts
// j entspricht x und y

for (i=0; i<5; ++i) {
for (j=0; j<2; ++j) {
VektorMalSensor[i][j] = Vektor[i][j] * irco_distance[i] * weightfactor[i]; // 4-i wegen IRCo?????
VektorMalSensorSumme[j] += VektorMalSensor[i][j];
}
}

// Reaktion auf VektorMalSensorSumme[...] (x- und y-Wert)

// GrenzenY
uint16_t GrenzeY1 = 12000; // Zustandsgrenze: BLOCKIERT / EVTL. AUSWEICHEN
uint16_t GrenzeY2 = 5000; // Zustandsgrenze: EVTL. AUSWEICHEN / FREI

// GrenzenX
uint16_t GrenzeXlinks = -2000; // Zustandsgrenze: LINKS / GERADEAUS
uint16_t GrenzeXrechts = 2000; // Zustandsgrenze: RECHTS / GERADEAUS


/* Curr.State Condition State Transition
// ----------------------------------------------------------------------------------------------------------------------
// (alle) (Y>=GrenzeY1) BLOCKIERT
// (alle) ((Y<GrenzeY1) && (Y>= GrenzeY2) && (X<GrenzeXlinks)) HINDERNISLINKS
// (alle) ((Y<GrenzeY1) && (Y>= GrenzeY2) && (X>GrenzeXlinks)) HINDERNISRECHTS
// (alle) ((Y<GrenzeY1) && (Y>= GrenzeY2) && (X>=GrenzeXlinks) && (X<=GrenzeXrechts)) FREI
// (alle) (Y<GrenzeY2) FREI
*/

// Condition ermitteln und entsprechende Klasse State... als m_pCurrentState setzen
// y-Wert
if( VektorMalSensorSumme[1] >=GrenzeY1)
{
Nibo.setCondition(OBSTACLEFRONT);
}

if( (VektorMalSensorSumme[1] < GrenzeY1) && (VektorMalSensorSumme[1] >=GrenzeY2) )
{
// x-Wert
if( VektorMalSensorSumme[0] < GrenzeXlinks )
{
Nibo.setCondition(OBSTACLELEFT);
}

if( VektorMalSensorSumme[0] > GrenzeXrechts )
{
Nibo.setCondition(OBSTACLERIGHT);
}

if( (VektorMalSensorSumme[0] >= GrenzeXlinks) && (VektorMalSensorSumme[0] <= GrenzeXrechts) )
{
Nibo.setCondition(FREE);
}
}

if ( (VektorMalSensorSumme[1] < GrenzeY2) || (irco_distance[2] < 150) )
{
Nibo.setCondition(FREE);
}

// Auf Zustand reagieren
Nibo.Update();

} // end of while

return 0;
}

Lisbeth
10.08.2007, 09:28
4) Link: https://www.roboternetz.de/phpBB2/viewtopic.php?p=304792#304792

Nochmal zum Verbrauch: Ich meinte einen Vergleich Asuro-Nibo! (Asuro kommt mit Batterien 79 Stunden weit!)

Gruß
Lisbeth

ehenkes
10.08.2007, 16:19
Asuro kommt mit Batterien 79 Stunden weitDie Laufzeit hängt von der Kapazität (mAh) der Akkus bzw. Batterien ab. Bei Nibo liegt die Laufzeit bei voller Beleuchtung im einstelligen Stundenbereich. Nibo braucht demnach deutlich mehr Energie, vor allem für die LEDs, die sein Markenzeichen sind. Details: http://nibo.editthis.info/wiki/Stromversorgung

Lisbeth
10.08.2007, 17:41
Asuro: 2 Motoren zu je 200 mA = 400 mA Laufzeit bei 1200mAh also 3 Stunden. (Irgendwo in der Asuro-Dokumentation stehen diese ominösen 79 Stunden, ich finde sie allerdings im Moment nicht).
Nibo: 2 Motoren zu je 200 mA, also rein theoretisch ohne Beleuchtung die gleiche Laufzeit, richtig? (Das unterschiedliche Gewicht mal vernachlässigt.)
Irgendwie kann doch dann die lange Laufzeit beim Asuro nich stimmen, oder?
Gruß
Lisbeth

ehenkes
10.08.2007, 20:13
ASURO verwendet vier Akkus der Größe AAA (Ladung Q = I*t = ca. 1 Ah), während Nibo acht Akkus der Größe AA (Ladung Q = I*t = ca. 2,6 Ah) einsetzt. Die Motoren verbrauchen max. 0,4 A. Zeit t = Q/I. Da sehe ich nirgends zweistellige Stundenlaufzeiten.

Das mit den 79 Stunden finde ich nirgends in den Anleitungen zum ASURO. :-k

Lisbeth
11.08.2007, 11:51
Hab ich ja gesagt, dass ich das leider im Moment nicht mehr finde...

Aber mal was Neues: Ich hab ihn (Nibo) neu programmiert. Allerdings scheint er leicht behindert zu sein: ab und zu knallt er durch und fährt im Kreise, wo er doch nur 50 cm geradeaus fahren sollte und dann stehenbleiben. Ist da irgendwas mit der PID-Regelung?

Wie programmiert man einen Nibo neu, der volle Kanne rumfährt?

Gibt es Funktionen wie SerWrite und SerRead? (Meldung an den PC, Befehle vom PC)
Noch besser PrintInt (für die Übertragung von Messwerten)?

Die LEDs kann man sehr schön lichtorgeln.

Gruß
Lisbeth

ehenkes
11.08.2007, 12:39
Allerdings scheint er leicht behindert zu sein: ab und zu knallt er durch und fährt im Kreise, wo er doch nur 50 cm geradeaus fahren sollte und dann stehenbleiben. Ist da irgendwas mit der PID-Regelung?
Ja, da stimmt etwas nicht. Bei mir kommen da zu wenige Encoder-Ticks an (wahrscheinlich eine Grenzwert-Festlegung bei den Fototransistoren). Das habe ich dem Entwickler bereits mitgeteilt. Bisher ist das Problem noch nicht gelöst. Daher verwende ich eine MotCo-Firmware, die ich am 18.07.2007 erhalten habe und die super funktioniert (nur leichte Schlangenlinie aber sehr gerade!). Ich lege diese Initializer.hex auf meine Page, damit wir die gleiche haben: http://www.henkessoft.de/Roboter/initializer_18Juli2007.zip
Mit dieser Firmware fährt er genau 50 cm, wenn Du auf die Rad-Daten kalibrierst. Ich habe das mal so gelöst:



void Go(int dist, int cm_pro_sec)
{
const float TICKS_PER_CM = 1.75f;

motco_resetOdometry(0,0);
motco_update();

int limit = dist * TICKS_PER_CM;


int pwm = cm_pro_sec * 80;
if (pwm > 1024) pwm = 1024;
if (pwm < -1024) pwm = -1024;

motco_setPWM(pwm,pwm);
motco_setSpeed(cm_pro_sec * TICKS_PER_CM , cm_pro_sec * TICKS_PER_CM);
motco_update();

do
{
motco_update(); /* geradeaus fahren */
}
while(motco_ticks_l < limit);
}

Ansonsten können wir ja eine neue Highlevel-Bibliothek entwickeln. Ich setze allerdings inzwischen auf C++, da ich dann eigene Klassen einsetzen kann. Dies macht vor allem wegen der Kapselung und Wiederverwendbarkeit Sinn. Das SRAM des ATmega128 ist mit 4096 Bytes ausreichend groß.


Die LEDs kann man sehr schön lichtorgeln.
Das ist richtig! Die LEDs sind in Verbindung mit den herrlichen "Scheinwerfern" das Charakteristischste am Nibo. Freut mich, dass Dir das auch so gut gefällt.

Ich empfehle Dir unbedingt das Graphikdisplay nachzurüsten. Mit 8 Zeilen je 21 Charakter ist das einsame Spitze. Allerdings musst Du dann einen 20-Pin-Stecker herstellen (im Schraubstock leicht) und 20 Lötstellen am Display fertigen (nervig!). Allerdings belegt das Display auch massig I/O des ATmega128 (siehe: http://nibo.editthis.info/wiki/Haupt-Controller).
Die IR-Kommunikation war ja schon beim ASURO nicht sonderlich praktisch wegen der zu kurzen Reichweite. Wenn schon, dann müsste man mit Funk nachrüsten. Durch die I²C-Schnittstelle kein wirkliches Problem.

Lisbeth
11.08.2007, 13:31
Frage 1: Thema I2C Schnittstelle:
Gibt es dazu ein wirklich gutes Tutorial? Ich hatte gehofft, dass ich das mit Hilfe der Ansteuerung der beiden Hilfs-Controller endlich mal richtig verstehe, aber ausser der mitgelieferten Firmware ist wohl nix dabei.
Wie geht das: Programmieren des ATtiny vom ATMega aus per Firmware?

Frage 2:
Gibt es irgendwo ein Funkmodul mit I2C-Schnittstelle zu kaufen?
Wie schließt man es an den Nibo an?
Wie programmiert man es dann?

Statement 1:
Von dem Display halte ich eher weniger: wenn Nibo durch die Gegend kurvt, wer soll es dann ablesen?

Statement 2:
Ich denke, ich werde nicht mit C++ arbeiten, sondern bei C bleiben, dafür aber ein RTOS aufsetzen.

Gruß
Lisbeth

ehenkes
11.08.2007, 17:01
Zu Frage1: Es gibt nur allgemeine Beschreibungen zu I²C, leider noch kein Tutorial für den Nibo. Hier hatte ich auch mehr Anleitung erwartet. Das ist ein klares TODO für den Entwickler! Denn die drei µC sind ein wichtiges Charakteristikum des Nibo.

Zu Frage2: wie bei 1. RN-Funk verwendet die RS232-Schnittstelle des PC oder µC. Für die Kommunikation zwischen Nibo und PC sollte der Entwickler ein Konzept vorschlagen/anbieten.

Zu Statement1: Das ist zu schaffen, hält fit und beweglich.

Zu Statement2: Ich konnte bisher die Vorteile eines RTOS nicht nachvollziehen. Man hat doch beispielsweise Probleme wie deadlock und memory fragmentation (letzteres hat man auch bei C++). Wie verändern sich die C-Programme auf Basis eines RTOS? Welches RTOS wirst Du zu Beginn einsetzen? Wie wird das aufgespielt und wie läuft anschließend das Flashen der Programme? Das Thema finde ich lehrreich, wenn ich auch bisher den Vorteil nicht verstehe. Siehe z.B.:
http://www.netrino.com/Articles/RTOSAlternatives/index.php

Frage: Läuft bei Dir die Initializer.hex vom 18.07. wie gewünscht oder verhält sich jeder Nibo individuell? Das ist ein wichtiges Thema, da man sich am Anfang aufgrund der Komplexität und fehlender Beschreibungen nicht selbst weiter helfen kann.

harry3
12.08.2007, 14:28
Also grundsätzlich würde mich Nibo schon interessieren.
Ich habe aber kein AVR Kit, könnte den Nibo also nicht programmieren.

Ist es also fix dass da eine IR Programmiermöglichkeit hinzukommt?

Wieweit sind Standardfunktionen schon vorhanden? Oder muss man sich da wirklich noch alles selber machen?

Preislich scheint Nibo ja etwa gleich mit dem RP6 zu sein, wobei der RP6 wohl eher ein robusteres Gerät zu sein scheint.

Es wäre interessant wenn jemand OBJEKTIV einen Vergleich zwischen Nibo und RP6 machen könnte. Letztendlich handelt es sich bei beiden ja nur um einen Haufen "Elektroschrott", wo Emotionen keine Rolle spielen, von daher kann es ja nicht so schwer sein das ganze objektiv und ohne persönliche Vorlieben zu diskutieren.

Alles in allem scheint Nibo durchaus ein guter, nächster Schritt nach Asuro zu sein. Allerdings scheint es halt noch einige Kinderkrankheiten zu geben welche mir weniger gefallen(hauptsächlich dass man ein Programmiergerät haben muss).


Grüße,
Harri

ehenkes
12.08.2007, 16:16
Ist es also fix dass da eine IR Programmiermöglichkeit hinzukommt?http://shop.nicai-systems.de/shop.php?view=2&id=29 Ein Programmieradapter soll nach Aussagen des Entwicklers ab September lieferbar sein. Ich würde Dir aber dennoch zu einem Atmel STK500 Starter Kit (ca. 70 Euro) raten, da man hiermit ziemlich universell ist und auch andere µC programmieren kann.
Siehe auch: http://nibo.editthis.info/wiki/Programmieradapter

Wieweit sind Standardfunktionen schon vorhanden? Oder muss man sich da wirklich noch alles selber machen?Du kannst Dir ja selbst ein Bild von der C/C++-Bibliothek machen. http://nibo.sourceforge.net/doc/html
Diese ist hervorragend strukturiert und bietet eine solide Grundlage für eigene Programme. Es fehlen aber noch einige Highlevel-Funktionen, die wir uns aber einfach selbst schreiben und hier posten können.

Alles in allem scheint Nibo durchaus ein guter, nächster Schritt nach Asuro zu sein.Das sehe ich auch so, aber es fehlen noch viele Anleitungen, Antworten, Vorbilder, Hilfestellungen, so dass selbst ASURO-erfahrene nicht klar kommen werden. Dafür bietet Nibo viel Leistung zu einem angemessenen Preis. Ich suche vor allem Partner für die C++-Programmierung.

Es wäre interessant wenn jemand OBJEKTIV einen Vergleich zwischen Nibo und RP6 machen könnte.Ich habe momentan nicht die Zeit, mir beide Roboter intensiv anzuschauen. ASURO und Nibo genügen mir zur Zeit vollauf. Für mich waren der ATmega128, die beiden ATtiny44, die fünf IR-Sensoren und die vier CNY70 am Boden der wesentliche Grund, mich für den Nibo zu entscheiden. Ich hätte ihm noch zwei Ultraschallsysteme in mittlerer Höhe verpasst, eines vorne und eines hinten, denn Nibo bleibt unter Bürostuhlbeinen hängen und ist hinten blind. Zusätzlich funktioniert die IR-Abstandsmessung bei schwarzen Hindernissen oder bei Reflektion des IR-Strahls nach oben nicht.

Ich denke, dass es bei einem Roboter vor allem darauf ankommt, dass auch anspruchsvolle Ideen wie Lernfähigkeit, Kartografierung, Bild- und Spracherkennung eine Realisierungswahrscheinlichkeit haben. Das sehe ich momentan am ehesten bei Nibo.

radbruch
12.08.2007, 19:44
Hallo


Es wäre interessant wenn jemand OBJEKTIV einen Vergleich zwischen Nibo und RP6 machen könnte.
Wirklich objektiv wird das wohl keiner können. Es sind sehr unterschiedliche Roboter, ein Vergleich macht deshalb eigentlich auch keinen Sinn.



...von daher kann es ja nicht so schwer sein das ganze objektiv und ohne persönliche Vorlieben zu diskutieren.
Natürlich sind die "persönlichen Vorlieben" letztlich der entscheidende Faktor. Was will man, was kann man, was möchte man lernen? Unter diesen Aspekten sucht man sich einen Roboter aus (oder baut sich selbst was, wenn es das was man will nicht zu kaufen gibt).



Alles in allem scheint Nibo durchaus ein guter, nächster Schritt nach Asuro zu sein.
Klar, nibo hat auch zwei Räder und eine Stütze. Außerdem hat er auch einen ATMega als Prozessor. Und damit endet die Gemeinsamkeit. Beim RP6 sieht es nicht viel besser aus: Gleicher Prozessor mit gleichem Takt(!), aber Raupenantrieb und kein Bausatz. Was soll man denn nun vergleichen?

Bausatz oder Fertigroboter? Ich hatte beim Zusammenbauen mit dem asuro schon meine Probleme, aber ich bin auch aus der Übung. Beim RP6 habe ich auf jedenfall eine Roboter, der funktioniert, wenn ich ihn in Betrieb nehme. Und ohne SMD geht auch in der Robotertechnik nicht wirklich viel...

Das Antriebskonzept? Der RP6 hat einen eher gemächlichen Raubenantrieb. Er fährt damit fast schon von alleine geradeaus und über ziemlich alles, was ihm im Weg steht.

Erweiterungsmöglichkeit? Der RP6 ist in erster Linie auf Erweiterungen ausgelegt. Auf seiner Hauptplatine sind schon Rasterfelder für eigene Schaltungen bereitgestellt, im Lieferumfang ist auch eine komplette Experimentierplatine mit Steckern und Kabeln enthalten. Und für knapp 40€ gibt's eine Erweiterung mit einem zusätzlichen, per I²C gekoppeltem 16MHz-ATMega32.

Support? Beide werden direkt vom Hersteller/Entwickler unterstützt. Hier im RN-Forum geht die Gewichtung eher zum RP6, auch weil wir hier eine Testaktion hatten. Auch sind die Libraries für den RP6 schon weitgehend komplett, wohl auch, weil er in der Grundversion nur einen Prozessor und weniger Schnickschnack wie Bodenkontrolle oder Beleuchtung besitzt.

Gruß

mic

harry3
12.08.2007, 19:59
Habe mir auch den RP6 angesehen. Auch kein schlechtes Teil, was mir abgeht ist eine Linienfolgeeinheit. Kann man aber wahrscheinlich mittels den Erweiterungsplatinen nachrüsten!?

Was sind denn so die "Highlights" die für den RP6 sprechen?
Oder anders gefragt: Was kann man so alles mit dem RP6 anstellen. Da er keine Linienfolger hat kann nur auf Hindernisse reagieren, sich sonst aber nicht in der Umgebung zurechtfinden!??

izaseba
12.08.2007, 20:01
Hallo Radbruch

Hier im RN-Forum geht die Gewichtung eher zum RP6, auch weil wir hier eine Testaktion hatten.
Das hast Du schön gesagt, in meinen Augen ist es auch ein großer Fehler von Nikai keine Testaktion zu starten.
Billiger kann man wohl keine Webung machen, als 10 Roboter zu verschenken.
Die User machen schon den Rest und entwickeln sogar selber die Bibliothek(sehe Asuro)
Naja, mehr wollte ich auch nicht gesagt haben

Gruß Sebastian

MartinFunk
12.08.2007, 20:14
Gibt es die Software auf den ATtiny44 zum download?

MfG Martin

ehenkes
12.08.2007, 21:15
Gibt es die Software auf den ATtiny44 zum download?Ja. Hier findet man alles: https://nibo.svn.sourceforge.net/svnroot/nibo/trunk/

Habe mir auch den RP6 angesehen. Auch kein schlechtes Teil, was mir abgeht ist eine Linienfolgeeinheit.Das ist beim Nibo sehr gut gelöst.

Natürlich sind die "persönlichen Vorlieben" letztlich der entscheidende Faktor. Was will man, was kann man, was möchte man lernen? Unter diesen Aspekten sucht man sich einen Roboter aus (oder baut sich selbst was, wenn es das was man will nicht zu kaufen gibt). Da kann ich zustimmen. Das ist der entscheidende Punkt. Für mich war der ATmega128 wegen des Heap für C++ wichtig, denn 4096 Bytes RAM ist deutlich mehr als 2048 Bytes. Vor allem deshalb, weil 1 KB schnell von .data + .bss + .noinit verwendet wird. Den Rest müssen sich Stack (von oben kommend) und Heap (von unten kommend) teilen. Siehe: https://www.roboternetz.de/wissen/index.php/Speicherverbrauch_bestimmen_mit_avr-gcc#Dynamischer_RAM-Verbrauch und http://www.nongnu.org/avr-libc/user-manual/malloc.html
Unter diesem Aspekt hat der ATmega128 dann nämlich mindestens das Dreifache zu bieten. Die 16 MHz des Nibo bereits auf der Hauptplatine haben mich auch überzeugt! Leistung und Speicher sind wichtige Kriterien. Auch die Idee, zwei zusätzliche "Sklaven" einzusetzen, ist überzeugend. Ich hätte noch einen dritten eingesetzt, um das Display zu füttern.

Ein anderer sucht vielleicht den Raupenantrieb, das Fertigmodell oder die stärkere Community. Dann ist man beim RP6 gut aufgehoben.

radbruch
12.08.2007, 21:21
Hallo


..in meinen Augen ist es auch ein großer Fehler von Nikai keine Testaktion zu starten.
Da ich keine Verkaufszahlen kenne, weiß ich nicht, ob eine "Testaktion" wirklich werbewirksam ist.


Was kann man so alles mit dem RP6 anstellen.
Linienfolgen ist für einen Raupenroboter nicht wirklich eine Spezialdisziplin, er ist nicht so agil wie ein Zweirädler ala asuro. Ich plane für meinen RP6 einen servogetriebenen Greiferarm, der hatte auf meinem asuro einfach nicht genug Platz. IR-Kommunikation (https://www.roboternetz.de/phpBB2/viewtopic.php?t=32585) habe ich schon verwirklicht. Im Moment spiele ich mit einer Kamera, näheres darüber gibt's wohl demnächst. Das sind nur ein paar Beispiele, was man mit dem RP6 (und natürlich vielen anderen Robotern) alles anstellen kann.

Ich komme eher aus der PC-Ecke und hatte mit dem asuro den ersten Kontakt zu AVR-RISC-Prozessoren. Nachdem ich mich umbaumässig mit dem asuro ziemlich ausgetobt habe, bin ich nun dabei, mir Grundkenntnisse der ATMegas anzueignen. Und hier ist für mich der nahtlose Übergang zwischen asuro und RP6 optimal.

Gruß

mic

ehenkes
12.08.2007, 21:36
... bin ich nun dabei, mir Grundkenntnisse der ATMegas anzueignen. Und hier ist für mich der nahtlose Übergang zwischen asuro und RP6 optimal.Auch Nibo verfügt über einen ATmega (wie gesagt: 4 mal mehr Flash-Speicher, 2 mal soviel RAM) und hat eine professionell strukturierte C/C++-Bibliothek. Dieses Argument kann ich nicht nachvollziehen. Die Lücke, dass es keinen IR-Programmieradapter gibt, wird demnächst geschlossen. Im übrigen sorgt eine gut aufgebaute Bibliothek (iodef.h, low level, high level) doch gerade dafür, dass man vom µC selbst kaum noch etwas spürt. Das ist beim Nibo sogar noch besser gelöst als beim RP6, wobei die Unterschiede nicht ins Gewicht fallen. Damit kann man sich verstärkt auf Algorithmen und Programm Design ausrichten.

radbruch
12.08.2007, 22:36
Hallo

Für mich quasi nahtlos, weil ich die Einstellungen und einige Funktionen der asuro-Lib nur mit Anpassung der Ports übernehmen kann. Ein klarer Vorteil des selben Takts und der Ein-Prozessor-Architektur des RP6 für asuro-Umsteiger.

Ich persönlich mag es, wenn man den Prozessor "spürt". Nur so kann man aus minimaler Hardware das maximale Ergebniss rauskitzeln. Protierbarkeit, Kapselungen, Schichtenmodelle und sonstige Erungenschaften der Programmierkunst brauche ich nicht wirklich für einen kleinen Roboter, der nur meinen Spieltrieb befriedigen soll.

Gruß

mic

ehenkes
12.08.2007, 23:00
Portierbarkeit, Kapselungen, Schichtenmodelle und sonstige Errungenschaften der Programmierkunst brauche ich nicht wirklich für einen kleinen Roboter, der nur meinen Spieltrieb befriedigen soll.Für den Basteltrieb ist das wirklich irrelevant. Informatiker und/oder an der Programmierung Interessierte sehen diesen Punkt vielleicht doch etwas anders. ;) Nibo und RP6 sollten hier übrigens beiden Fraktionen durch ausreichend Ausbaumöglichkeiten sowohl für Hard- als auch für Software gerecht werden können. :) Ob diese Roboter bereits für die höhere Ausbildung etwas taugen, da bin ich mir noch nicht ganz sicher.

izaseba
12.08.2007, 23:36
Portierbarkeit, Kapselungen, Schichtenmodelle und sonstige Errungenschaften der Programmierkunst brauche ich nicht wirklich für einen kleinen Roboter, der nur meinen Spieltrieb befriedigen soll.
Radbruch, ein virtuelles Bier für Dich ;-)
Du bringst es auf den Punkt!
Wir sind hier bei einer 8Bit Architektur, ohne Coprozessor oder Fließkommaeinheit, toll was sind hier schon 4kB RAM ?
Man soll schon ziemlich aufpassen, wie und was man programmiert, sonst gehen Dir die 4kB schneller zuneige, als man denkt.
Nicht gegen Dich ehenkes, ich hab mir mal Deine Programme angeguckt, die Du so schön postest, die mögen schon nicht schlecht sein, aber wenn ich bei einem AVR so magische Wörter wie malloc oder float sehe, weiß ich, der Mann hat keine Ahnung von der Architektur.
Was Du brauchst ist ein Arm7, besser 9 da kann man bedenklos sowas machen.
Naja, ich mach mich unbeliebt, das merke ich, dann halte ich halt die Klappe

Gruß Sebastian

ehenkes
13.08.2007, 06:27
Was Du brauchst ist ein Arm7, besser 9 da kann man bedenklos sowas machen.Das hat Lego Mindstorms NXT auch schon erkannt: 32-bit ARM7 microcontroller, 256 Kbytes FLASH, 64 Kbytes RAM und 8-bit AVR Microcontroller, 4 Kbytes FLASH, 512 Byte RAM.

... und dennoch: auf dem ATmega128 kann man mehr machen als nur Assembler. Probiert es doch einfach aus. ;-)

Lisbeth
14.08.2007, 15:35
Toll, seid ihr jetzt fertig?
Soweit ich mich erinnere, heißt dieser Faden : Bausatz Nibo und nicht "Wer ist der Tollste"! (Männer halt....)
Können wir jetzt zum Thema zurückkommen?
Könnte der Fadenverfasser sich auch mal wider zu Wort melden?
Schönen Feierabend!
Lisbeth

radbruch
14.08.2007, 16:13
Ups, sorry. Ich wolle euren "Faden" nicht zerschneiden. Aber das hier ist auch ein bisschen mein Thread (https://www.roboternetz.de/phpBB2/viewtopic.php?p=294837#294837).

Obwohl ich selbst keinen nibo besitze, haben sich viele meiner hier geäußerten Vermutungen bestätigt:

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=298790#298790

Gruß

mic

Lisbeth
14.08.2007, 16:42
@Radbruch: Ist schon in Ordnung! /* Ironie an: (Ist doch immer wieder schön, wenn man recht behält!) Ironie aus */

Ich habe einen Nibo und will ihn jetzt besser kennenlernen. Mein Asuro hat leider ein wenig zu wenig Speicher für ein paar Experimente, deshalb habe ich mir einen Nibo gekauft.
Dass die Programmierung per AVR ISP mkII erfolgt, stört mich nicht, da ich so ein Teil schon hatte und auch Erfahrung mit dem Atmel Studio (find ich ganz gut für die Projektverwaltung). Für Asuro-Kenner wäre ein Bootloader und anschliessende Programmierung via IR-RS232(USB) sicher die bekanntere und damit bessere Lösung gewesen. Schade, dass der Hersteller nicht einfach darauf aufgesetzt hat. Leider hat er auch nicht die Kommunikation mit einem fahrenden (mobilen) Roboter verbessert, was ich persönlich sehr bedauere. Die Mechanik ist so schön stabil, dass man einen Greifer und/oder eine Mini-Kamera(Maussensor?) als Erweiterung schön hätte anbieten können (anstelle des meiner Meinung nach überflüssigen Displays).
Wenn ich das richtig sehe, ist auch der RP6 nicht ohne Fehler; er hat halt nur halt andere.
Ich hoffe, dass beide Roboter so unterstützt werden wie Asuro (aber das ist wohl einmalig!).

So, und nu ab in den Biergarten!

Lisbeth

ehenkes
14.08.2007, 20:12
@Lisbeth: Wenn Du so sachlich bist, dann zeige dem Bastler und Rechthaber 'radbruch' (RP6-Tester) und dem Assembler-Fan (diese Leidenschaft teile ich, aber nicht beim Nibo) 'izaseba' und uns allen, was man mit dem Nibo alles programmieren kann. Lass uns teil haben an deinen Experimenten! :)

Die Programmierung mit dem STK500 gefällt mir übrigens gut. Einfach professionell. Nibo ist nichts für Anfänger. Dennoch wird es ab September einen Programmieradapter geben.

Das Display ist einsame Spitze! Klare Kaufempfehlung. =D>

Lisbeth
15.08.2007, 08:05
@ehenkes: Genau diese Art zu schreiben schreckt Anfänger eher ab: "Die Programmierung mit dem STK500 gefällt mir übrigens gut. Einfach professionell." Woher soll ein Anfänger wissen, was ein STK500 ist? Warum ist das professionell? Was ist unprofessionell? Warum soll man Nibo nicht in Assembler programmieren, wenn man es kann? Wer Lust hat, Makefiles und den ganzen Overhead vom Source-Programm bis zum "binary" zu Fuß zu machen: warum nicht?
Das Display kompensiert doch mit einem Riesenaufwand (Hardwarepins!!!) die nicht vorhandene Kommunikation PC-Nibo. Der Einsatz einer Fernsteuerung ist ja wohl nicht ganz ernst gemeint, oder?
Warum soll ich "zeigen, was man mit dem Nibo alles programmieren kann"? Die "Väter" des Asuro haben tolle Vorlagen (mit Erläuterung!!)geliefert, die man erstmal in den Nibo übertragen kann.
Leider fehlt mir die Kommunikation PC-Nibo für die Ermittlung einiger "Kurven".
Die IR-Distanzmessung funktioniert beim "Initializer" Programm, aber weit und breit keine Erläuterung. Auch kann man nicht ausmessen, wie die Reichweite ist, wie sich Fremdlicht auswirkt etc.
Lisbeth
:-k

ehenkes
15.08.2007, 18:51
Woher soll ein Anfänger wissen, was ein STK500 ist?Man tippt STK500 in Google, erhält ca. 100000 Fundstellen. Alle Einträge auf der ersten Seite beziehen sich auf das Atmel STK500 Starterkit. Siehe auch: http://www.henkessoft.de/Roboter/stk500.htm

Warum ist das professionell?Weil es von den Profis von Atmel für Profis entwickelt wurde. Die Programmierung des ASURO via IR funktioniert dagegen nicht immer zuverlässig, wie man im ASURO-Forum nachlesen kann.

Das Display kompensiert doch mit einem Riesenaufwand (Hardwarepins!!!) die nicht vorhandene Kommunikation PC-Nibo.Hardwarepins gehen da einige drauf, das ist richtig. Vielleicht hätte man das über einen weiteren µC und I²C lösen können. Mit Displayansteuerungen kenne ich mich aber nicht ausreichend aus.

... aber weit und breit keine Erläuterung.Das ist richtig. Die alles umfassende Dokumentation ist noch nicht fertig, soll wohl vor allem von den Anwendern erarbeitet werden. Der Sourcecode ist auch zu wenig dokumentiert.

... kann man nicht ausmessen, wie die Reichweite ist, wie sich Fremdlicht auswirkt etc. Du hast 5 Sensorsysteme (IR-LEDs übrigens ca. 20° nach oben biegen wegen Untergrundreflektion) und entsprechende Abstandsdaten. Was willst Du mehr? Damit kann man doch Experimente durchführen, musst halt selbst Buch führen.

Aber an zwei Punkten hast Du Recht:
1) Die Platine des Nibo ist schwierig zu löten
2) Die Beschreibung der Hintergründe und Zusammenhänge ist noch nicht ausreichend

izaseba
15.08.2007, 19:22
Ich hatte eigentlich nicht mehr vor in diesem Thread zu posten, aber eine Frage möchte ich doch noch stellen,
@ehenkes Du schlägst vor STK500 zu kaufen um eine ISP Schnittstelle zu erhalten ?
Meinst Du nicht, daß es etwas übertrieben ist ?
Was kostet so ein STK500 heutzutage? Ich habe noch knapp 100€ bezahlt, zugegeben vor paar Jahren...
Ein Roboterenthusiast kauft sich für 100€ einen Nibo und dazu eben mal ein STK500, ja super, muß man eine komplette Entwicklungsumgebung kaufen um einen ISP Adapter zu bekommen, es gibt da sicherlich billigere Möglichkeiten.
Ach so,
Bedenke dabei, daß der arme Kerl noch ein USB<->RS232 Adapter dazuholt, sonst kann er immer noch nicht loslegen, wenn der Rechner etwas neuer ist.
So das war jetzt wirklich meine letzte Aktion hier, will diesen Thread nich zumüllen ;-)

Gruß Sebastian

P.S. Wann hab ich behauptet ein Assemblerfan zu sein :-k

ehenkes
15.08.2007, 21:37
Was kostet so ein STK500 heutzutage?ca. 70 Euro, ist jeden Cent davon wert. Bei ebay kann man es mit Glück <65 Euro erwerben. Ansonsten nimmt man so etwas (man bräuchte hier allerdings noch einen Adapter von 10 auf 6 Pin, den man sich auch selbst basteln kann): http://lynx-dev.de/ebay/bauel/prog1.jpg

workwind
18.08.2007, 09:49
Es gibt jetzt eine Tutorial zur Programmierung des Roboters in C:
http://download.nicai-systems.com/nibo/NiboTutorial_20070817.pdf

radbruch
18.08.2007, 11:22
Hallo

Das mußte ich mir natürlich auch mal ansehen und hätte da noch ein paar Anmerkungen eines ewigen Nörglers:

- Bei dem nibo-Grundmodell sind ja weder der Programmieradapter (70€) noch das Display (39€) dabei. Da man aber beides benötigt um den ATMega zu programmieren bzw. Sensorwerte zu sehen, liegt doch ein funktionsfähiges nibo knapp über der 200€-Hürde. Oder hab' ich da was überlesen?

- Beim RC5-Fahrdemo taucht in der langen include-Liste wieder das display.h und in main() das display_init(); auf. Dann habe ich wohl doch nichts überlesen und ohne Display geht gar nichts. Keine Messdaten, keine empfangenen IR-Codes, schade. Ach, ich seh grad, bei dem Sensordemo ebenso. Prima.

- Leider ist das RN-Forum keine "weiterführende Internetseite"

Schönes WE noch

Gruß

mic

izaseba
18.08.2007, 11:33
- Bei dem nibo-Grundmodell sind ja weder der Programmieradapter (70€)
Quatsch, 70 € soll man laut Mr. ehenkes investieren, weil es ja so profesionell wäre ;-)
STK 500 ist völlig überzogen für die Aufgabe (am sonsten sehr nett)
Da reicht auch irgendein Bitbangprogger für die Parallele Schnittstelle(wenn überhaupt vorhanden)

Gruß Sebastian

radbruch
18.08.2007, 11:42
Ups, dann nehme ich die Preisangabe wieder zurück. Ich kenne mich da nicht so gut aus, ich hatte bisher nur Roboter von der Stange deren ATMaga einen Bootlader hatte. Und die wurden komplett geliefert, Akkus rein, Demo drauf, Spaß haben.

mic

izaseba
18.08.2007, 11:52
Und die wurden komplett geliefert, Akkus rein, Demo drauf, Spaß haben.
Du hast vollkommen recht.
Wenn man schon einen ISP Progger hat, ist es ansich wurst, ob der mitkommt oder nicht, aber so ein völliger Anfänger guckt natürlich in die Röhre :-(

Gruß Sebastian

ehenkes
18.08.2007, 17:48
... ein völliger Anfänger guckt natürlich in die RöhreAls didaktisches Gesamtkonzept für Anfänger ist Nibo (z.Z. noch) ungeeignet. Diesbezüglich hat 'radbruch' Recht gehabt. Man muss sich zu sehr die Brocken zusammen suchen. Zuviel bleibt aufgrund unzureichender Kommentare und Erklärungen offen.

Der Programmieradapter wird laut Ankündigung im September dieses Jahres erscheinen. Dass dieses Teil beim Einstieg gefehlt hat, hängt an Lieferproblemen eines µC. So etwas kommt bei Markteinführungen vor. Es macht keinen Sinn, darüber weiter zu diskutieren. Nibo wird es schwer haben, ein Ersatz für den ASURO zu werden. Dafür reicht bereits die Hürde der anspruchsvollen Platine (siehe Kommentare von 'Lisbeth').

Dennoch kann ich den Nibo-Bausatz empfehlen. Es würde mich freuen, wenn man hier oder an anderer Stelle mehr Programme und Ideen zum Nibo finden könnte. Ich bleibe optimistisch und mein Fazit ist trotz massiver Anfängerhürden positiv.

Lisbeth
19.08.2007, 14:27
Ich verstehe nur noch Bahnhof:
Was ist dieser ominöse Programmieradapter? Mein AVRISP mkII funktioniert bestens. Wozu also noch ein Adapter?
Die Version Bootloader und dann Programme per IR-Schnittstelle (Transceiver) flashen hätte ich persönlich besser gefunden: Gibt es alles schon, und wenn man einenAsuro hat, hat man es auch schon (ganz professionell von Arexx gekauft oder selber gelötet). Das Problem ist der Bootloader, der per ISP werksseitig geladen werden muss.
Abgesehen davon bleibe ich bei meiner Aussage, dass das Display überflüssig ist und auch für Testprogramme kein "Muss" sein darf, wenn es "optional" angeboten wird.
Den 2. Stock kann man auch für was Anderes verwenden....

ehenkes
19.08.2007, 15:32
Der Entwickler des Nibo hat mir zu diesem Thema im Juli folgende Information gegeben:

Nach Fertigstellung des Programmieradapters wird es Anfängern
möglich sein, den komplett zusammengebauten Roboter direkt über IR zu
programmieren. Da der Adapter sowohl einen IR-Tranceiver enthält als
auch einen 6-Pin ISP Stecker, kann der Roboter in jeder Situation
programmiert werden - auch wenn der Bootloader überschrieben wurde.Das klingt doch nicht schlecht.

Zum Graphikdisplay kann man stehen, wie man will. Besitzt man es, möchte man es nicht mehr missen. Lisbeth hat allerdings soweit Recht, dass es ausreichend Testprogramme geben muss, die für einen Nibo ohne Display ausgelegt sind.

Didaktisch ist Nibo sicher noch nicht zu Ende ausgeklügelt. Mich stört es nur marginal. Damit hat das RN vielleicht die Möglichkeit, Einfluss zu nehmen.

Lisbeth
19.08.2007, 15:50
Privatinformationen sind sind ja gut und schön, aber warum steht sowas nicht im Wiki?

workwind
19.08.2007, 16:04
Privatinformationen sind sind ja gut und schön, aber warum steht sowas nicht im Wiki?
Da haben Sie Recht, ich hab es ins Wiki eingetragen:
http://nibo.editthis.info/wiki/UCOM-IR

ehenkes
20.08.2007, 21:46
War da nicht ein off-topic Eintrag des RP6-Testers 'radbruch' gewesen? ;)

ehenkes
21.08.2007, 21:46
Das wiki wurde bezüglich IR-Kommunikation erweitert. Damit ist das Geheimnis um den verspäteten Programmieradapter gelüftet.
http://nibo.editthis.info/wiki/Programmieradapter
http://nibo.editthis.info/wiki/UCOM-IR
http://nibo.editthis.info/wiki/Nibo-IR-Protokoll

ehenkes
02.10.2007, 22:03
Wie sind inzwischen die Erfahrungen anderer Nibo-Besitzer?

martin.r
12.10.2007, 21:30
Bei der Nibo Einführungsaktion habe ich nun zugeschlagen.

Ein Erfahrungsbericht folgt in den nächsten Tagen, wenn nichts dazwischen kommt.

martin.r
16.10.2007, 17:00
Jetzt steht er also zusammengebaut vor mir. :)

Ich habe das Komplettset mit Nibo, Grafikdisplay, Programmieradapter, Fernbedienung und Ladegerät gekauft, wobei ich die 2 letzten Dinge nicht gebraucht hätte, aber kann ja nicht schaden.

Bei der momentan aktuellen Dokumentation
(DokuNibo_20070728.pdf,
NiboTutorial_20070817.pdf,
DokuUCOM-IR_20070825.pdf)

gibt es noch ein paar Mängel/Ungenauigkeiten, die behoben werden sollten.
Da wären:
Da auf der Platine nicht genau gekennzeichnet ist, wo die Reflexlichtschranken sowie die IR-Phototransistoren und IR-Dioden eingelötet werden müssen, sollte in der Doku zusätzlich zur Beschreibung noch ein Bild eingefügt werden, zur Veranschaulichung.

Die Holzscheibe für den Teflongleiter soll laut Doku vor dem Einlöten des Spannungsreglers festgeschraubt werden, ich bin so allerdings nur sehr schwer an die Lötpunkte gekommen und habe die Scheibe nochmal entfernt.

In der Doku zum Programmieradapter ist der Farbcode für die 22 Ohm Widerstände falsch angegeben (braun-schwarz-braun), richtig wäre rot-rot-schwarz.
Außerdem fehlt noch eine Beschreibung wie genau man Nibo programmieren kann, aber ich denke das wird noch kommen.

Das Programmiertutorial ist veraltet, die Funktion zur Textausgabe auf dem Display wurde anscheinend geändert, dort kommt aber noch die alte Version zum Einsatz.


Das wären soweit meine Anregungen, wie man die Doku verbessern könnte.
Anfängertauglich wird Nibo dadurch aber wohl auch nicht. Das könnte sich ändern, wenn mehr Leute hier im Forum den Roboter besitzen.
Die Lötarbeiten sind sicherlich anspruchsvoller als beim ASURO, ich hatte mit meiner Ausrüstung aber keine größeren Probleme (ERSA A60, 0,4 mm Spitze und 1mm Lötzinn)

Besonders viel Zeit für die Programmierung hatte ich leider noch nicht, hab leider im Moment viel zu tun. Aber die Bibliotheken machen einen ziemlich guten Eindruck.

Ich melde mich dann wieder, wenn es Neues zu berichten gibt.

ehenkes
10.11.2007, 22:11
... die Bibliotheken machen einen ziemlich guten Eindruck. Das sehe ich genau so.

ehenkes
25.11.2007, 16:19
Die Holzscheibe für den Teflongleiter soll laut Doku vor dem Einlöten des Spannungsreglers festgeschraubt werden, ich bin so allerdings nur sehr schwer an die Lötpunkte gekommen und habe die Scheibe nochmal entfernt. Das ist richtig, ist mir auch passiert. Allerdings handelt es sich hier um eine einfache Schraube, also kein ernstes Problem. ;-)

drakon
20.12.2007, 18:25
Hallo!
Welche Abstände sind mit den IR-Sensoren messbar? Wie genau mesen sie?

klopps4
26.02.2008, 10:41
Hallo.

Ich bin nun auch glücklicher Besitzer eines Nibo(bausatzes). Nachdem ich den Sockel für den Motortreiber falsch rum eingebaut hatte 8-[ , ist heute ein Ersatzsockel angekommen.

Beim ersten Versuch hab ich den Sockel so angelötet, dass von oben und von unten Lötzinn an den Pins des Sockels war (jaja, ich hab den Hinweis, dass der Bausatz nix für Lötanfänger ist, leider nicht angenommen O:) ). Dabei hab ich ziemlich vom Plastikteil des Sockels abgesengt.

Nun meine Frage. Da die Löcher, für die Beine der Bauteile, ja alle durchkontaktiert sind (sind sie doch?), ist es möglich das Bauteil einfach so weit wie möglich reinzustecken und nur von der Unterseite der Platine anzulöten? Dass würde meine weiteren Lötversuche doch ungemein erleichtern. (Ich kanns mir auch nicht wirklich anders vorstellen. Wie sollte man/ich sonst erst manche Teile bestücken, wenn die Platine langsam voll wird.)

Vielen Dank schonmal.

workwind
26.02.2008, 10:52
Alle Bauteile müssen nur von der Unterseite angelötet werden!
Die Bohrungen sind Durchkontaktiert, das flüssige Zinn sollte durch die Kapilarkräfte automatisch in die Bohrung gesaugt werden.

Die Löttemperatur sollte hoch genug gewählt werden (ca. 370°C), dabei die Lötzeit kurz halten (2-3s). Hierdurch wird hauptsächlich die Lötstelle aufgeheizt und das jeweilige Bauteil weitestgehend geschont.

klopps4
26.02.2008, 13:17
Danke für die schnelle Antwort.

Hab, zum Glück noch vorm Einbau, festgestellt, dass ich beim Auslöten ne Leiterbahn durchtrennt hab. Mal gucken ob ein Bekannter das flicken kann.

ehenkes
27.02.2008, 03:07
Bausatz nix für Lötanfänger
Dies kann man nur betonen. Eine der Herausforderungen des Nibo.

klopps4
17.03.2008, 15:09
Ich hab Widerstandsnetzwerk RN4 "verloren". Kann ich http://www.conrad.de/goto.php?artikel=415960 als Ersatz nutzen?

Und wie kann ich mit dem Netzteil den Akku laden?

EBS
18.03.2008, 14:21
Ich hab Widerstandsnetzwerk RN4 "verloren". Kann ich http://www.conrad.de/goto.php?artikel=415960 als Ersatz nutzen?

Und wie kann ich mit dem Netzteil den Akku laden?

Hallo Klopps4,

wenn du den RN4 bei Conrad bestellst, bestelle dir auch den
Tamiya-Stecker für das Netzteil mit. Solltest du
2200 - 2800 mA NIMH-Akku
zum NIBO haben, hab ich mir das "230 V Schnell-Ladegerät Voltcraft"
Nr: 232622 besorgt. Das hat Abschaltungs-Timer, Überlastungsschutz, Schnellade- und Erhaltungsladung.
Kannst die Anzahl der zu ladenden Batterien und den Ladestrom einstellen.
Die NIMH-Batterien sollte man nicht unter 8V betreiben.
Auch bei der NIBO Programmierung beachten.
Wenn du im AVR programmierst UCOM-IR verwendest,
hätte ich noch ein paar Fragen an Dir.

MfG.

klopps4
19.03.2008, 11:46
Ich hab Widerstandsnetzwerk RN4 "verloren". Kann ich http://www.conrad.de/goto.php?artikel=415960 als Ersatz nutzen?

Und wie kann ich mit dem Netzteil den Akku laden?

Hallo Klopps4,

wenn du den RN4 bei Conrad bestellst, bestelle dir auch den
Tamiya-Stecker für das Netzteil mit. Solltest du
2200 - 2800 mA NIMH-Akku
zum NIBO haben, hab ich mir das "230 V Schnell-Ladegerät Voltcraft"
Nr: 232622 besorgt. Das hat Abschaltungs-Timer, Überlastungsschutz, Schnellade- und Erhaltungsladung.
Kannst die Anzahl der zu ladenden Batterien und den Ladestrom einstellen.
Die NIMH-Batterien sollte man nicht unter 8V betreiben.
Auch bei der NIBO Programmierung beachten.
Wenn du im AVR programmierst UCOM-IR verwendest,
hätte ich noch ein paar Fragen an Dir.

MfG.

Stell deine Fragen ruhig. Ich kann mir zwar nicht vorstellen, dass ich dir ne große Hilfe bin, aber vielleicht kann dir ja jemand helfen der hier mitliest.

Ich hab den nibo im Komplettpaket bestellt. Da war ein Voltcraft-Ladegeräte (steht nix von Schnellladegerät drauf, aber nen Tamiya-Stecker hats) dabei. Nur hab ich halt keine Idee, wo ich einen der beiden Stecker am nibo anschliessen soll :)

AVR Studio läuft mittlerweile. Aber wenn ich unter Tools -> Program AVR -> (Auto) Connect -> Reiter 'Program' auf Erase Device klicke, fängt der in Fahrtrichtung rechte Motor, wie blöd an nach hinten zu drehen. Das selbe passiert auch vielleicht 0,2s wenn ich den Nibo einschalte. Kann man das irgendwie "entfernen"?

klopps4

EBS
19.03.2008, 15:33
Ich hab den nibo im Komplettpaket bestellt. Da war ein Voltcraft-Ladegeräte.

[ Das NIBO-Ladegerät ist nicht schlecht, aber man kann den Akku laut Conrad mit über 2000 mA nicht ganz aufladen und es hat keine Überladungsfunktion.
Meine Akkus kosteten über 20 Euro,
da war mir das Risiko zu groß und besorgte dann
"230 V Schnell-Ladegerät Voltcraft"
Nr: 232622 mit Abschaltungs-Timer, Überlastungsschutz, Schnellade- und Erhaltungsladung"
Du hast am NIBO-Ladegerät eine Tamiya BUCHSE
und was Du brauchst ist noch einen Tamiya STECKER.
Den Stecker hab ich paralell an die Nibo Versorgungsspannung angelötet (nach Batterie).]

Aber wenn ich unter Tools -> Program AVR -> (Auto) Connect -> Reiter 'Program' auf Erase Device klicke, fängt der in Fahrtrichtung rechte Motor, wie blöd an nach hinten zu drehen. Das selbe passiert auch vielleicht 0,2s wenn ich den Nibo einschalte. Kann man das irgendwie "entfernen"?

[ Wenn Du die Firmware laut Bauanleitung zum testen aufspielst, müßten sich beide Räder vom Nibo bei der ALTEN-VERSION immer wieder ein paar Sekunden einmal vor und dann wieder zürück bewegen.
Bei der NEUEN-VERSION sich der Nibo laut Beschreibung
im Uhrzeigersinn um seinen Mittelpunkt drehen.
Sollte sich dann das Rad zu schnell drehen, kann sein, das die Lichtschranke beim
Motorzahnrad nicht richtig eingestellt ist. Die kleine Nase seitlich an der LED muß ins Loch schauen. LED auf Verpolung prüfen.
Wenn alles nichts hilft, kann ich NIBO mal anschauen?]

EBS
19.03.2008, 15:54
Hallo!
Welche Abstände sind mit den IR-Sensoren messbar? Wie genau mesen sie?

Hallo drakon,
bin seit kurzem auch Besitzer eines Nibo.

Denke, das mit IR genau Messen,
ist Batteriespannungs abhängig.
Arbeite momentan im Versuchsaufbau an einer Lösung.
IR-Sendediode PE1/2 parallel PE4/5 an einer
Spannungsstabielen 5V Versorgung zu betreiben.
Für PE3 und PT3 einen Distanzsensor GP2D12 Erfassungsbereich 10-80 cm
Preis ca. 12,00 Euro einzusetzten.

Meine persönliche Meinung als Anfänger:
Je länger ich mich mit dem Nibo beschäftige,
desto mehr Begeisterung kommt auf.
Löterfahrung und einwenig Kenntnisse in Elektronik sollte man schon haben.

klopps4
19.03.2008, 17:35
Kannst du mir erklären, wie ich ein Firmware-Update mache?

Btw, kann man den Roboter bzw. den Programmieradapter "kaputt flashen"? Ich hab http://download.nicai-systems.com/nibo/ucom-ir-20070904.zip versucht auf den nibo zu laden. Seitdem lässt sich kein Programm mehr starten/laden. Die Fehlermeldung kam vorher alle 2-4 Flashversuche, jetzt kommt sie bei jedem Versuch. Kann die Meldung aber gerad nicht wiedergeben, bin an nem anderen Rechner.

Noch ne Frage. Man kann im AVR Studio Flash oder EEPROM auswählen. Welches nutz ich wann?

Aber er bewegt das rechte Rad noch, wenn ich ihn anmach.

EBS
19.03.2008, 19:17
Kannst du mir erklären, wie ich ein Firmware-Update mache?
Das mit Firmware muß ich noch probieren.
Mit EEPROM hab mich noch nicht eingelesen ob ich das brauche.

Kopiere von der Beschreibung
"Roboterbausatz Nibo Tutorial zur Progammierung"
von Seite 19 (Bewegung-Ab die Post!)
die Zeilen in das AVR-Studio und COMPALIER sie
mit den Voreinstellungen von Seite 5-7.
Dann hast du gleich einen kleinen Test ob NIBO geht.

Kann man den Roboter bzw. den Programmieradapter "kaputt flashen"?
Glaube man kann bis zu 10000 mal flashen.

Nicht das du ein Hardware-Problem hast.
Auf der Lötseite der Platine würd ich mal nach kleine Lötbrücken schauen
und alle Bauteile nach Liste prüfen.
Ich nehme nach Löten kleine Bürste und fahr vorsichtig drüber über Lötpunkte.

klopps4
20.03.2008, 10:43
Hier nochmal ne genauere Darstellung meines Problems.

Ich hab versucht die Datei "ucom-ir-20070904.hex" auf den nibo zu flashen. Das Ganze mehrmals, da es, wie bei einigen Beispielprogramm-Flash-Versuchen vorher auch, nicht gleich beim ersten Mal funktionierte (Fehlermeldung oder der Vorgang dauerte einfach länger als sonst). Danach hab ich nochmal n bisschen mit Jumper 1 und 2 rumgespielt (Warum ich all dies tat, kann ich leider nicht mehr nachvollziehen). Danach leuchteten die beiden LEDs, die noch vorn gerichtet sind, kurzzeitig auf.

Seitdem lässt sich der nibo gar nicht mehr flashen. Auch ein (teilweises) Wiederaufladen des Akkus brachte keine Besserung (das rechte Rad drehte sich zeitweise auch nicht mehr, was mich hoffen lies, es läge nur an nem leeren Akku; mittlerweile dreht sich das Rad, mit kurz geladenem Akku, wieder). Ich werde den Akku nochmal vollständig aufladen, vielleicht braucht er zum flashen ja einfach nur mehr Strom).

Der UCOM-IR funktioniert wahrscheinlich noch. Zumindest leuchten seine Lichter, je nach Zustand, noch rot und grün und er reagiert im noch auf Signale der Fernbedienung (getestet mit UComIrProg_1_0_0.exe).

Vielleicht hat ja jemand n paar Ideen oder kann mir zumindest sagen, dass man ihn nicht ohne weiteres "kaputt-flashen" kann.

Anbei die Fehlermeldung im AVR Studio.

Nachtrag: Mein nibo hat schonmal funktioniert, solange bis ich ein "Firmware-Update" machen wollte.

klopps4

EBS
20.03.2008, 16:14
Nibo geht und geht wieder nicht oder schlecht?
Deine Lötung der Lötpunkte gehen beim Nibo und den UCOM-IR
an den Bauteilen ganz durch die Platine?

Dann mal die Verbindungsseite.

Vom PC über USB-Kabel zu UCOM-IR
(am UCOM-IR ist der Jumper nicht gesteckt)
und mit 6 poligen Wangerstecker und Kabel auf Nibo
(am Nibo sind Jumper gesteckt).

Den Nibo einschalteten und im AVR-Studio unter AVRISP(Programm)
[Erase Devise] und dann HEX-Programm flashen.

Und jetzt ?

klopps4
20.03.2008, 16:30
Alles (Kabel, Jumper, AVR Studio) wie von dir beschrieben.

Als Resultat erhalt ich die beiden Screenshots.

workwind
20.03.2008, 16:46
Die Datei ucom-ir-20070904.hex ist die Firmware für den Programmieradapter, nicht für den Roboter...
Eventuell sind die Fuse-Bits im ATmega128 jetzt falsch gesetzt und dadurch die falsche Taktquelle eingestellt.
Im AVRStudio kann man im Downloader unter Board die ISP Freq. einstellen, probier dort mal den niedrigsten Wert.

Der Motor sollte sich eigentlich während des Resets bzw. während des Programmiervorgangs nicht drehen, falls er das trotzdem tut liegt ein Fehler vor.

klopps4
20.03.2008, 16:58
Daher wohl auch der Dateiname. :-b

Ne niedrigere Frequenz lässt sich einstellen, die Fehlermeldung bleibt die gleiche.

Was für ein Fehler könnte denn vorliegen? Nach nem botinit() hörte der rechte Motor auf zu drehen.

klopps4
22.03.2008, 10:09
Nachtrag: In nem anderen Thread wurde mir erklärt, dass ich ein 1MHz Signal an XTAL1 anlegen soll. Das hab ich auch irgendwie hingekriegt und jetzt lässt nibo sich wieder flashen.

Schön :)

Aber sobald ich ein altes Programm, das vorher funktionierte, lade, passiert ausser das der rechte Motor arbeitet und ich LED1 + 8 mit Berühren von R5 zum Leuchten bringen kann nix.

Kann ich vielleicht das Hex-File haben, das im ATmega128 war als er ausgeliefert wurde? Dann sollte doch, mit den Vorgängen unter Inbetriebnahme im Handbuch, wieder alles laufen (zumindest vielleicht :) )?

Edit: Und welche Fuse-Bits müssen gesetzt sein? (Int. RC Osc. 8MHz; 6CK + 0ms hab ich gerad selbst gesetzt; kann natürlich, wie so vieles bisher, totaler Unsinn sein).

workwind
22.03.2008, 11:23
Die Fuse-Bits sollten so gesetzt sein:

lfuse: 0xff
hfuse: 0x99
efuse: 0xff

Die Software zur Initialisierung der ATtiny44 Controller wird auf dem ATmega128 installiert. Anschliessend werden, je nach gesteckten Jumpern, die ATtinys programmiert.
Die Software gibt es hier:
http://download.nicai-systems.com/nibo/nibo_firmware_20070710.hex
Weitere Informationen zur Installation der Software auf dem Nibo:
http://nibo.editthis.info/wiki/Initializer_Software

klopps4
22.03.2008, 12:16
Funktioniert wieder. Dankeschön :)

Vielleicht haben Sie ja noch ne Idee wegen des rechten Motors.

Das Problem tritt unabhängig von anderen angeschlossenen Kabeln auf (Odometriesensoren, ISP, Display). Und wenn ich die linken Motor an X1 anschliesse, dreht der sich beim Start bzw. Flashen (Ansonsten wars der Rechte).

Am linken Getriebe war ne kleine Schicht schwarzer "Abrieb", wahrscheinlich vom Reifen, aber dort sind keine Abnutzungen zu sehen. Lies sich mit nem Pinsel aber sehr einfach wieder entfernen.

workwind
22.03.2008, 13:08
Ist die Verbindung zwischen den Pins 1 und 9 am IC2 (L293D) OK? Wenn der Pin 1 nicht am Reset angeschlossen ist, wird sich der Motor am Stecker X1 während des Resets bzw während des Programmierens drehen....

klopps4
22.03.2008, 13:55
Im zusammengebauten Zustand seh ich keine Verbindung, aber auch wenn ich Pin 1 mit Pin 9 mit nem Stück Draht verbinde, ändert sich nichts.

ehenkes
26.04.2008, 17:17
Meine persönliche Meinung als Anfänger: Je länger ich mich mit dem Nibo beschäftige, desto mehr Begeisterung kommt auf. Postet doch mal eure Programme.

EBS
28.04.2008, 16:00
Meine persönliche Meinung als Anfänger: Je länger ich mich mit dem Nibo beschäftige, desto mehr Begeisterung kommt auf. Postet doch mal eure Programme.

Erstmal vielen Dank an Ihnen Herr Dr. Henkes
für Ihre Berichte im Forum über Roboter und Ihrer home page.

Dadurch bin ich erst auf NIBO gekommen.
Durch die vielseitig Einsetzbarkeit der NIBO-Platine und der Software
nicht nur als Roboter,
hab ich mich für Ihn entschieden.
Momentan fehlt mir im Sommer Berufs bedingt ein wenig Zeit dazu,
aber folgende Projekte stehen an.

Einarbeitung in C und AVR.
Die 5 IR Sende-Dioden auf stabilen 5V legen.
Eine Raum Erkennung mit Servo und Sharp GP 2D12.
Optisch die NIBO Scheinwerfer gegen 15 Grad LED tauschen usw.
Mikrokopter mit Hinternisserkennung.

ehenkes
28.04.2008, 16:36
Klingt interessant! Kannst Du die Punkte

- Die 5 IR Sende-Dioden auf stabile 5V legen.
- Eine Raum Erkennung mit Servo und Sharp GP 2D12.
- Optisch die NIBO Scheinwerfer gegen 15 Grad LED tauschen
- Mikrokopter mit Hinderniserkennung.
bitte weiter erläutern. Vielleicht kommt eine Diskussion auf bezüglich der Optimierung deiner Planung.

EBS
29.04.2008, 15:15
Wie ich in einem vorherigen Bericht schon mal erwähnt habe,
kann man vielleicht die IR Messungen von der Akku Spannung unabhängig machen,
wenn man die Sendedioden mit 5 V betreibt.
Die Änderungen müßten, Dank der sehr übersichtlich aufgebauten Platine
und der zu öffnenden Bücke R2 mit ein paar Berechnungen und Bauteilen einfach sein.

Eine Hindernis Erkennung bevor der Roboter im Raum los fährt,
wäre nicht schlecht. Je nach Sensor auf eine Entfernung von 10-150 cm ist denkbar.
Man könnte über einen Modellbau Servo oder Schrittmotor den Sensor
einem bestimmten Bereich der Umgebung ein messen lassen.

Die NIBO LED Scheinwerfer auf 15 Grad LED um zu rüsten,
macht im dunklen Optisch einiges her.

EBS
09.05.2008, 13:58
Nibo Projekt sofort beendet.

Wünsche allen Roboter Fans,
hohe Zuverlässigkeit,
gute Unterstützung,
und viel Erfolg.

MfG.

ehenkes
24.05.2008, 16:46
Hallo EBS,
zeige doch mal Programme deines Nibo. Vielleicht kann man sich austauschen.

EBS
25.05.2008, 12:15
Hallo EBS,
zeige doch mal Programme deines Nibo. Vielleicht kann man sich austauschen.

2x Hardware mit Zubehör im Wertstoffhof entsorgt.

MfG.

ehenkes
25.05.2008, 15:02
2x Hardware mit Zubehör im Wertstoffhof entsorgt.
Zweimal entsorgt. Das ist ja Frust pur. Kannst Du die Details bitte darstellen, damit andere etwas lernen? Wo ist das Hauptproblem? Wieso kein Support?

ehenkes
07.06.2008, 18:55
Wie sieht das bei anderen Nibo-Nutzern aus? Erfahrungen mit Hard- und Software?

futbol_fanat
21.06.2008, 23:01
Haben den Nibo im Rahmen eines Schulprojektes zusammengebaut.
Nach einigen Stunden Löt-Übungen ging das Löten an der Leiterplatte dann einigermaßen gut von der Hand, auch wenn sicherlich keine Top Lötstellen dabei rausgekommen sind.
Die Anleitung war ab und an etwas ungenau, was wohl ohne Hilfe eines erfahreneren Elektronikers immer mal zu Problemen geführt hätte.
Ansonsten gabs mit der Hardware an sich keine größeren Probleme, eine Achse ist aus ihrer Halterung gebrochen, was dann aber wieder geklebt werden konnte, und im Bausatz haben 2 Widerstände gefehlt.

Insgesamt wurden 4 Nibo's zusammengebaut, von denen 2 auf Anhieb funktionierten. Die anderen beiden werden hoffentlich folgen :-)

Bilder unseres Nibos:

http://www.forza-hro.de/nibo/

Mit der Software wird sich dann wohl erst im späten Sommer beschäftigt.

ehenkes
22.06.2008, 01:26
Na dann viel Glück! Bitte Software hier posten, damit andere auch profitieren und Tipps geben können. Ziel sollte eine lebendige Community sein.

ehenkes
10.09.2008, 22:02
Das hält man ja kaum aus vor Lebendigkeit! :-k

Ruchbar
11.09.2008, 07:02
Ja, aber aus sicherer Quelle weiss ich, dass Nibo zummengebaut wurde und auch noch existiert :)

Man arbeitet momentan auch an diesem Projekt :)

ehenkes
11.09.2008, 17:39
Na, dann postet mal einige Sourcecodes. ;-)

Ruchbar
11.09.2008, 18:28
Kann aber wohl noch etwas dauern, weil es eine Kooperationsprojekt aus einer FH, einem Unternehmen und einem Gymnasium ist. Und an der FH wird momentan ja nicht gearbeitet :D

Jack Ruben
15.09.2008, 08:53
Wo findet man eigentlich weiterführende Informationen über das Zusammenspiel der 3 Controller? Es gibt für den Nibo wohl eine Firmware, die über den ATMega128 die beiden ATtiny44 "flasht".
Es gibt im Wiki Infos über das .hex-File, aber keinen sourcecode. Warum werden Informationen über Bootloader und z.B. obige Firmware so ein Geheimnis gemacht? (Gilt auch für andere uC Hersteller).
Gruß
Lisbeth

Möchte gerne mit Bascom programmieren aber das gelingt nicht über das
Zusammenspiel der 3 Controller.
Bitte hilfe und anweisungen.

Jack

nikostar
17.11.2008, 20:49
Ich habe probleme den driver für den Programmieradapter unter Vista zu installieren.
http://download.nicai-systems.com/nibo/ucom-ir.inf diese Datei wird von Vista nicht erkannt.

spower
10.12.2008, 16:18
Hallo,
ich habe mir gestern auch einen Nibo bestellt. Ich hoffe das der Bausatz sich auch für einen Anfänger eignet, nach dem was ich hier gelesen habe ist er wohl besser geignet wenn man schon par Erfahrungen mit Asuro oder ähnlichem gemacht hat.
Ich habe bis jetzt mit dem Mega128 Board was rumprobiert und bin eigentlich ganz gut zurecht gekommen, hatte mehr Probleme mit dem mechanischen Aufbau.
Deswegen hab ich mich entschlossen erst mal mit einem Bausatz anzufangen bevor mich an was größeres traue.

Sobald ich mein Päckchen bekommen habe und was rumexperimentiert habe werde ich über meine Erfahrungen mit Nibo berichten.

Achim S.
12.09.2009, 17:06
Hallo Freunde
beim stöbern in alten Artikeln habe ich diese meinungen gefunden. würdet ihr mir in zukunft ein gefallen tun. bleibt bei der technik und seit freundlich zueinander. diese seiten sind nicht da um irgendwelche wortgefechte auszutragen. so das muss mal gesagt werden.
ansonsten ist jeder rob eine ansichtssache und glaubensfrage. jedes teil hat seine vor- und nachteile. es zeugt von bastelarbeit wenn ich kabelbinder verwende. es kann auch durchaus sein, das der asuro von der technik überholt wurde. da ist es doch auch sinnvoll das mal was neues kommt.
also mein frage dazu lautet: gibt es denn nun ein nibo test oder sogar tester. wurden den seiten für diesen rob gebaut. ist etwas in RN drin oder besteht interesse daran?? viele fragen und wenige antworten. Ach so noch eine frage. warum haben diese typen nur 2 räder oder gibt es auch welche mit 4 rädern oder sollten keine 4 räder genommen werden? vielleicht probleme mit der technik
Achim