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.
- doc enthält die Dokumentation der verschiedenen Funktionen aus der NIBObee-Bibliothek. Wenn Du dich näher mit der NIBObee-Bibliothek auseinandersetzen möchtest, solltest Du diese Ordner definitiv anschauen
- hex enthält interessante, vorkompilierte .hex-Dateien, die Du nur noch auf den Roboter übertragen musst
- lib enthält die Bibliotheksdateien
- src enthält den Quelltext, die include-Dateien, Tutorial-Programme und vieles mehr
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