Installieren der NIBObee-Bibliothek auf Linux

Da ich im Internet keine NIBObee-Bibliothek Installationsanleitungen für Linux finden konnte, habe ich dieses Dokument verfasst. Das Betriebssystem welches ich hierfür nutze ist Ubuntu 14.04 LTS Trusty Tahr. Falls Du Debian verwendest, solltest Du mit dieser Anleitung gut zurechtkommen. Falls Du einen NIBObee-Roboter gekauft hast, wurde diesem höchstwahrscheinlich eine CD beigelegt. Der einzig relevante Ordner, den Du hierfür brauchst ist „linux“.

Öffne das Stammverzeichnis der CD-ROM und sieh dir den Inhalt an. Hier sind fünf tar-Archive, vier Programme, sowie die NIBObee-Bibliothek enthalten.

Nun hast Du mindestens zwei Möglichkeiten:
- Installation der vier Programme avrdude, avr-libc, binutils und gcc von den tar-Archiven durch das Entpacken und Kompilieren
- Herunterladen und Installation der Programme mit einem Paketverwaltungssystem wie apt-get, pacman oder yum

Der Benutzerfreundlichkeit wegen empfehle ich die zweite Option. Also gebe folgendes ein:

sudo apt-get install avrdude avr-libc binutils gcc

Nachdem Du das gemacht hast, ist immer noch viel zu tun. Zuerst müssen wir einen Projektordner für unsere NIBObee-Projekte erstellen.

In diesem Beispiel erstellen wir diesen Ordner auf dem Desktop mit:

mkdir ~/Desktop/nibobee-projects

Angenommen, Du benutzt die CD. Dann tippe folgende Befehle ein, um ins Verzeichnis der CD-ROM zu wechseln und dann die „nibobeelib“ tar-Datei in das neulich erstellte Verzeichnis zu kopieren:

cd /media/$USER/NIBObee/linux/
cp nibobeelib-20110603.tgz ~/Desktop/nibobee-projects/

Nun können wir zurück in den Projektordner und das .tgz-Archiv extrahieren:

cd ~/Desktop/nibobee-projects
tar xvf $(ls | grep nibobeelib)

Jetzt hängen wir an einem neuen Problem fest ohne es zu realisieren. Die Macher der CD haben das include-Verzeichnis für Linux anders gebündelt als für Windows. Das include-Verzeichnis ist tatsächlich existent! Jedoch ist es im src-Ordner vorhanden und heisst nibobee anstatt include. Keine Sorge, dieses Problem wird in ein paar Momenten gelöst.

Wenn Du nun das Verzeichnis prüfst, findest Du die Ordner doc, hex, lib und src. Sowie die .tgz-Datei.

So habe ich die NIBObee-Bibliothek installiert:

sudo mkdir /opt/nibobeelib/
sudo mv doc hex lib src /opt/nibobeelib/

Jetzt sind alle Dateien die Du brauchst, gut organisiert im /opt/ Ordner deiner Linux-Distribution vorhanden.
Lass uns ein Programm aus dem Ordner /opt/nibobeelib/ kopieren und in das Verzeichnis wechseln:

cp -r /opt/nibobeelib/src/tutorial/program1 . cd program1

Versuche das Programm mit make zu kompilieren.
Was ist gerade passiert? Die Konsole zeigt uns nun:

Makefile:13: ../../config-m16-15.mk: No such file or directory
Makefile:14: ../../version.mk: No such file or directory
Makefile:114: program1.d: No such file or directory
set -e; avr-gcc -MM -Os -ffunction-sections -DAVR -I../.. -mmcu= -std=c99 -DF_CPU= -DVERSION="\"\"" -D_NIBOBEE_ program1.c \
| sed 's#\(program1\)\.o[ :]*#\1.o program1.d : #g' > program1.d ; \
[ -s program1.d ] || rm -f program1.d
avr-gcc: error: missing argument to ‘-mmcu=’
make: *** No rule to make target `../../version.mk'. Stop.

Das ist völlig normal und ich werde jetzt erklären was soeben geschehen ist. Der Makefile in diesem Verzeichnis benutzt relative Pfade anstelle von absoluten Pfaden. Wie Du sehen kannst, tritt das Problem wegen der relativen Pfade auf. Hier gekennzeichnet als Punkte: ../../
Also habe ich den Makefile modifiziert, um dieses Problem zu beheben. Lade die Datei hier herunter und ersetze den Standard-Makefile.

Schaut man auf die diff-Datei, sieht man die Änderungen:

1d0
<
6,7c5,6
< LIBDIR = ../../../lib
< HEXDIR = ../../../hex
---
> LIBDIR = /opt/nibobeelib/lib
> HEXDIR = /opt/nibobeelib/hex
9,10c8,9
< LIBDIR = ../../../lib/$(PLATFORM)
< HEXDIR = ../../../hex/$(PLATFORM)
---
> LIBDIR = /opt/nibobeelib/lib/$(PLATFORM)
> HEXDIR = /opt/nibobeelib/hex/$(PLATFORM)
13,14c12,13
< include ../../config-$(PLATFORM).mk
< include ../../version.mk
---
> include /opt/nibobeelib/src/config-$(PLATFORM).mk
> include /opt/nibobeelib/src/version.mk
19d17
<
26d23
<
28c25
< CFLAGS += -Os -ffunction-sections -DAVR -I../.. -mmcu=$(DEVICE) -std=c99
---
> CFLAGS += -Os -ffunction-sections -DAVR -I /opt/nibobeelib/src -mmcu=$(DEVICE) -std=c99
37c34
< LIBS = -lnibobee_base -lnibobee_utils
---
> LIBS = /opt/nibobeelib/lib/libnibobee_base.a /opt/nibobeelib/lib/libnibobee_utils.a
108c105
< rm -f *.d *.o *~ *.elf $(TARGET).hex $(TARGET).lss $(NIBO_OBJS)
---
> rm -f *.d *.o *~ *.elf $(TARGET).hex $(TARGET).lss $(TARGET).xhex $(NIBO_OBJS)

Ich habe die relativen Pfade so geändert, dass sie auf unser /opt/nibobeelib/ Verzeichnis verweisen. Warum? Auf diesem Weg können wir den C-Quelltext von überall aus ohne Probleme kompilieren. Außerdem habe ich den „clean“-Befehl so geändert, dass er ebenfalls .xhex Dateien löscht, da der Standard-Makefile das nicht macht. Ab diesem Zeitpunkt solltest Du schon den originalen Makefile mit der modifizierten Version ersetzt haben.

Also gut. Bevor wir das Programm program1.c kompilieren, müssen wir erst eine .hex-Datei übertragen, welche die Odometriesensoren des Roboters kalibriert.
Zuerst erstellst Du ein neues Projekt namens „calibration“:

mkdir ~/Desktop/nibobee-projects/calibration/

Kopiere die hex-Datei aus der NIBObee-Bibliothek wie folgt:

cp /opt/nibobeelib/hex/calibration.hex ../calibration

Jetzt lade den Skript hier herunter und tue diesen in den „calibration“-Ordner oder kopiere den folgenden Code in eine Datei namens calibrate.sh,
welche in dem soeben erwähnten Ordner „calibration“ gespeichert werden sollte:

#!/bin/bash

HFUSE=0xd1
LFUSE=0xef
PROGRAMMER=usbasp
TARGET=calibration

printf '\E[31m'"\033[1mFlashing calibration program in 3 seconds\n\033[0m"
sleep 3

sudo avrdude -c $PROGRAMMER -p m16 -B 10 -U lfuse:w:$LFUSE:m -U hfuse:w:$HFUSE:m
sudo avrdude -c $PROGRAMMER -p m16 -B 2 -U flash:w:$TARGET.hex

Für diesen Skript habe ich die Werte und Befehle aus dem Standard-Makefile entnommen und an eine .hex-Datei angepasst, weil nichts kompiliert werden muss. In Ordnung, schalte den POWER-Schalter deines NIBObees ein und verbinde den Roboter via USB mit deinem Computer oder Laptop,
dann gehst du in das „calibration“-Verzeichnis und überträgst die Kalibrationsdatei mit folgenden drei Befehlen auf den Roboter:

cd ~/Desktop/nibobee-projects/calibration
chmod +x calibrate.sh
./calibrate.sh

Du wirst die grüne Programmierungs-LED (LED4) einmal blinken sehen und eine Reihe von Meldungen in der Konsole. Der Skript flasht die Sicherungen HFUSE, LFUSE und zu guter Letzt, den FLASH-Speicher.

Falls alles gut gelaufen ist, befindet sich der NIBObee nun im Kalibrierungsmodus und Du musst ihn kalibrieren. Finde eine weisse oder schwarze Oberfläche, idealerweise ein Stück weißes Papier und ein Stück schwarzes Papier. Platziere den Roboter auf eine weiße Oberfläche und drücke den linken Fühler nach hinten. Die gelben LEDs blinken fünf Mal. Platziere den Roboter auf eine schwarze Oberfläche und drücke den rechten Fühler nach hinten. Die roten LEDS blinken fünf Mal.

Um die Kalibrierungswerte zu speichern, drücke beide Fühler gleichzeitig vorwärts und alle vier LEDs blinken fünf Mal. Der NIBObee sollte nun die Kalibrierungswerte in seinem EEPROM-Speicher abgespeichert haben.

Du hast diese Anleitung fast abgeschlossen. Wir werden jetzt das erste Programm kompilieren.
Gehe wie folgt ins „program1“-Verzeichnis:

cd ~/Desktop/nibobee-projects/program1/

Tippe dann make ein, um den Code zu kompilieren.
Gib folgendes ein um die .hex-Datei zu übertragen:

sudo make avrdude

Wenn der Vorgang beendet ist, solltest Du die rote LED1 konstant im selben Muster blinken sehen. Gratulation! Du hast erfolgreich die NIBObee-Bibliothek auf Linux installiert, ein bisschen etwas über Makefile-Debugging gelernt, deinen NIBObee-Roboter kalibriert und dein erstes Programm kompiliert, als auch auf den Roboter übertragen!

Letzte Aktualisierung: 19. Februar 2020

An den Anfang dieser Seite zurückkehren