Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Programmierung Nibobee
Hallo,
bin neu hier und habe mir vor kurzem einen Nibobee gekauft. Habe ihn zusammengelötet und es funktioniert auch alles. Habe jedoch zwei Fragen:
:arrow: Wie kann man die Motoren mithilfe der Odometriesensoren ansteuern? Ich möchte zum Beispiel das der Roboter geradeaus fährt (beide Motoren mit gleicher Drehzahl) und Abweichungen in der Drehzahl korrigiert.
:arrow: Wie kann man die Motoren für eine bestimmte Zeit einschalten? Also zum Beispiel für 10s beide Motoren mit der gleichen Geschwindigkeit (ohne Odometriekorrektur), dann für 5s nur der linke Motor usw.
Wäre nett wenn ihr mir Beispiele zeigen könnten! Habe im Anhang mal den Programmtext für die zweite Frage.
Viele Grüße,
Manuel
#include <nibobee/iodefs.h>
#include <nibobee/motpwm.h>
int main()
{
motpwm_init();
while(1==1) {
enable_interrupts();
int16_t speed_l=0;
int16_t speed_r=0;
speed_l = 500;
speed_r = 500;
motpwm_setLeft(speed_l);
motpwm_setRight(speed_r);
}
return 0;
}
Weiß denn keiner eine Antwort auf meine Fragen?
Viele Grüße,
Manuel
Mein Nibobee sollte anfang nächste Woche kommen, dann kann ich mir das ganze einmal anschauen. Falls mir dann eine Lösung für deine Frage einfällt, poste ich es hier ;)
pinsel120866
18.12.2009, 17:47
Hallo,
mit dem Befehl "delay" wartet die Bee mit der Ausführung des nächsten Befehls.
z. B.:
_delay_ms(1000);
Danke, habe es gerade ausprobiert.
Ich kann bei diesem Befehl aber nicht die Dauer einstellen, wie lange der Motor laufen soll, oder? Außerdem führt er dann nur den letzten Befehl aus (hier: speed_l = 400; speed_r = 400;) . Was mache ich falsch?
Manuel
#include <nibobee/iodefs.h>
#include <nibobee/motpwm.h>
#include <nibobee/delay.h>
int main()
{
motpwm_init();
while(1==1) {
enable_interrupts();
int16_t speed_l=0;
int16_t speed_r=0;
speed_l = 400;
speed_r = 400;
_delay_ms(1000);
speed_l = 0;
speed_r = 400;
_delay_ms(1000);
speed_l = 700;
speed_r = 700;
motpwm_setLeft(speed_l);
motpwm_setRight(speed_r);
}
return 0;
}
radbruch
18.12.2009, 18:44
Hallo
Bei meiner bee dauert delay(1) eine ms:
#include <nibobee/iodefs.h>
#include <nibobee/base.h>
#include <nibobee/led.h>
#include <nibobee/motpwm.h>
#include <nibobee/delay.h>
int main(void)
{
int16_t speed_l=0;
int16_t speed_r=0;
led_init();
motpwm_init();
enable_interrupts();
led_set(0,1);
delay(3000);
led_set(0,0);
led_set(1,1);
while(1==1) {
speed_l = 400;
speed_r = 400;
motpwm_setLeft(speed_l);
motpwm_setRight(speed_r);
delay(1000);
speed_l = 0;
speed_r = 400;
motpwm_setLeft(speed_l);
motpwm_setRight(speed_r);
delay(1000);
speed_l = 700;
speed_r = 700;
motpwm_setLeft(speed_l);
motpwm_setRight(speed_r);
delay(1000);
}
return 0;
}
Die Motoransteuerung finde ich ziemlich zickig, ich weiß noch nicht, ob mir das so gefällt. Ich stehe mehr auf eigenverantwortliche Ansteuerung mit MotorDir()/MotorPWM(). Leider haben die Codescheiben nur 4 Löcher, 8 wären deutlich besser. Bei einer Drehzahlregelung dürften die unterschiedlichen Abstände zwischen High und Low Probleme bereiten.
Gruß
mic
[Edit]
Noch 'ne Anmerkung zu delay(): In meiner Datei delay.c ist das so definiert:
void delay(uint16_t ms){
while(ms--)
delay_ms(1);
}
Zum einen fehlt hier irgendwie der Unterstrich vor delay_ms() und zudem wär ein schlichtes delay_ms(ms) einfacher und vermutlich genauer weil ohne Overhead durch die Aufrufe von delay_ms(1)
Vielen Dank!
Jetzt funktioniert es so, wie ich es mir vorgestellt habe!
Jetzt nur noch die Frage wegen der Odometrie. Wäre nett wenn dazu auch noch wer was weiß! Bis jetzt kann ich nur LEDs bei Radbewegung blinken lassen.
Manuel
radbruch
18.12.2009, 19:49
Hallo
Vielleicht reicht dir das schon zum Einstieg in die Odometry:
#include <nibobee/iodefs.h>
#include <nibobee/base.h>
#include <nibobee/led.h>
#include <nibobee/motpwm.h>
#include <nibobee/odometry.h>
#include <nibobee/delay.h>
int main(void)
{
int16_t speed_l=0;
int16_t speed_r=0;
led_init();
motpwm_init();
odometry_init();
enable_interrupts();
led_set(0,1);
delay(3000);
led_set(0,0);
led_set(1,1);
speed_l = 400;
speed_r = 400;
while(1==1)
{
odometry_reset();
motpwm_setLeft(speed_l);
motpwm_setRight(speed_r);
while(odometry_getLeft(0)+odometry_getRight(0) < 200); // auslesen ohne reset
motpwm_setLeft(0);
motpwm_setRight(0);
delay(1000);
odometry_reset();
motpwm_setLeft(-speed_l);
motpwm_setRight(-speed_r);
while(odometry_getLeft(0)+odometry_getRight(0) > -200); // würgs
motpwm_setLeft(0);
motpwm_setRight(0);
delay(1000);
}
return 0;
}
Gruß
mic
Tuxi-Halle
22.12.2009, 16:53
Liebe NIBObee-Gemeinde!
Bin leicht am verzweifeln, aber vielleicht kann mir ja hier jemand helfen.
Der NIBObee ist aufgebaut und hat alle Tests bestanden. Aufbau war bis auf ein paar kleine "Hakeligkeiten" bei den Getrieben ganz einfach. Einer der Fühler hakt auch noch gelegentlich - diese Konstruktion sollte noch mal überdacht werden.
Da ich alle Programmiererei unter Linux (SuSE 11.2) mache, verwende ich als Entwicklungsumgebung Eclipse (CDT) mit dem AVR-Plugin. Dort kann man auch sämtliche Einstellungen vornehmen, wie im Tutorial für AVR-Studio beschrieben. Die ersten Test-Beispiele haben sofort funktioniert - Hochladen auf den NIBObee klappt auch problemlos - ergo dürfte grundsätzlich alles richtig konfiguriert sein.
Die Probleme beginnen mit dem Testen der Liniensensoren. Bei diesem rudimentären Code krachts schon - kommentiere ich die beiden Zeilen mit "line" aus, so klappts:
#include <nibobee/iodefs.h>
#include <nibobee/led.h>
#include <nibobee/line.h>
int main()
{
led_init();
line_init();
return(0);
}
Das ergibt folgende Fehlermeldung (nur der Anfang):
**** Build of configuration Release for project NIBO_Line_Test ****
make all
Building file: ../main.c
Invoking: AVR Compiler
avr-gcc -I/home/wolf/Software/NIBObeeLib/include/ -Wall -Os -fpack-struct -fshort-enums -funsigned-char -funsigned-bitfields -D_NIBOBEE_ -mmcu=atmega16 -DF_CPU=15000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o"main.o" "../main.c"
Finished building: ../main.c
Building target: NIBO_Line_Test.elf
Invoking: AVR C Linker
avr-gcc -Wl,-Map,NIBO_Line_Test.map -L/home/wolf/Software/NIBObeeLib/lib -mmcu=atmega16 -o"NIBO_Line_Test.elf" ./main.o -lnibobee_base -lnibobee_utils -lnibobee_line
/home/wolf/Software/NIBObeeLib/lib/libnibobee_line.a(line.o): In function `do_calibrateBlack':
line.c:(.text.do_calibrateBlack+0x12): undefined reference to `analog_getValue'
line.c:(.text.do_calibrateBlack+0x1c): undefined reference to `analog_getValue'
/home/wolf/Software/NIBObeeLib/lib/libnibobee_line.a(line.o): In function `line_calibrateBlack':
line.c:(.text.line_calibrateBlack+0x4): undefined reference to `delay'
*** und so weiter und so fort ***
Hat jemand eine Idee, was da fehlt oder schief läuft? Wie gesagt: Alle Bespiele und eigenen Progrämmchen OHNE "line" funktionieren problemlos.
Danke schon mal und viele Grüße!
radbruch
22.12.2009, 17:04
Muß man nicht noch analog.h und delay.h (und base.h) einbinden?
Tuxi-Halle
22.12.2009, 22:49
Eigentlich nicht, denn sonst würde das Beispiel "Arbeiten mit den Liniensensoren" aus dem Tutorial (S.38 ) nicht funktionieren. Kann auch gar nicht nötig sein, denn im obigen "Code" wird ja nichts aus analog.h usw. verwendet. Habs natürlich trotzdem mal probiert, aber wie zu erwarten war, ergab das die gleichen Fehlermeldungen. In den Quellen der libs kann ich auch nicht erkennen, daß da irgendwas nicht richtig aufgelöst würde. Die libs selbst dürften auch ok sein, denn die habe ich noch mal "gemaket" - ohne Fehler oder Warnungen durchgelaufen. Und wie gesagt: die anderen Sachen funktionieren ja alle. Ich stehe vor einem Rätsel... Hat vielleicht noch jemand eine Idee?
Hi,
ich bin auch neu hier und habe mir zu Weihnachten auch den NIBOBee zugelegt. Der Aufbau ist soweit fertig, und die ersten Programme aus dem Tutorial wurden auch schon aufgespielt. Nachdem die auf CD mitgelieferten Bibliotheken nicht vollständig waren und Fehler beim compilieren geworfen haben habe ich mir die aktuellste Version aus dem Netz geholt. Nun hänge ich genau wie Tuxi-Halle bei den Liniensensoren fest. Ich bekomme die gleichen Fehlermeldungen wie oben genannt.
avr-gcc -mmcu=atmega16 -Wl,-Map=Fühler.map Fühler.o -L"C:\Programme\NIBObeeLib\lib" -lnibobee_base -lnibobee_line -lnibobee_utils -o Fühler.elf
C:\Programme\NIBObeeLib\lib\libnibobee_line.a(line .o): In function `do_calibrateBlack':
line.c:(.text.do_calibrateBlack+0x12): undefined reference to `analog_getValue'
line.c:(.text.do_calibrateBlack+0x1c): undefined reference to `analog_getValue'
C:\Programme\NIBObeeLib\lib\libnibobee_line.a(line .o): In function `do_calibrateWhite':
line.c:(.text.do_calibrateWhite+0xe): undefined reference to `analog_getValue'
line.c:(.text.do_calibrateWhite+0x18): undefined reference to `analog_getValue'
C:\Programme\NIBObeeLib\lib\libnibobee_line.a(line .o): In function `line_get':
.
.
.
...
mir scheint das die Bibliotheken noch Fehler enthalten. Hat jemand noch ähnliche Probleme und Lösungsvorschläge parat?
ps:
Tuxi-Halle kannst du mir bitte mal nen Link zu dem oben von dir genannten Tutorial geben damit ich auch unter Linux Programme aufspielen und entwickeln kann? Habe im Moment noch als Behelf ne virtuelle Maschine laufen für die Biene...
schmitzens
28.12.2009, 15:08
Hallo Tuxi-Halle, hallo waschtl,
ich habe auch eine Biene zu Weihnachten bekommen und bin nun fast mit dem Tutorial durch, bisher ohne Probleme, auch beim Liniensensor!
Wenn ich den Beispielcode von Tuxi-Halle einfügebekomme ich keine Fehler. Kann es sein, dass ihr bei den Project Options die Objekte nicht in der richtigen Reihenfolge gelinkt habt (Seite 16 Tutorial)? Wenn ich bei mir dort die Reihenfolge vertausche bekomme ich solche Fehler wie von euch gepostet!
Gruß, Rudi
hi schmitzens,
das die Reihenfolge durcheinander geraten ist kann durchaus sein. Da habe ich bisher nicht wirklich drauf geachtet. Ich werde das gleich mal zu Hause mit einem neu angelegtem Projekt ausprobieren.
Tuxi-Halle
28.12.2009, 19:22
Hallo schmitzens,
an der Reihenfolge liegt es nicht - die war richtig, aber eigentlich sollte die auch keine Rolle spielen. Schaut man sich die libs mit einem Dateibetrachter an (mc), dann sieht man auch, daß die vom Linker beanstandeten Funktionen allesamt auch exportiert werden. Es bleibt mir unverständlich, weshalb sie trotzdem nicht richtig aufgelöst werden. Ich geh mal davon aus, daß Du mit Windows arbeitest?
@waschtl:
Ich bezog mich auf das mitgelieferte Tutorial, denn ein spezielles NIBObee-Tutorial für Linux gibt es (noch) nicht. Es gibt aber diverse AVR-Tutorials für Linux und Eclipse (googeln). Damit bekommt man es relativ leicht hin - wie gesagt: bis auf das noch bestehende Linker-Problem. Wenn Du SuSE verwendest, findest Du eigentlich alles nötige mit Yast -> Software installieren -> AVR (avr-libc, avrdude, cross-avr-binutils, cross-avr-gcc) bzw. eclipse. Ich habe mir die eclipse(CDT) aber von der eclipse-Homepage (www.eclipse.org) geholt. Dazu noch das eclipse-AVR-plugin von sourceforge (http://sourceforge.net/projects/avr-eclipse/files/) holen. Die Installation ist total simpel: eclipse in ein Verzeichneis Deiner Wahl entpacken (ich habs im home-Verzeichnis installiert), dann das AVR-Plugin entpacken und "drüberkopieren" - die Verzeichnisstruktur des Plugins ist wie üblich schon genau passend. Wenn das alles installiert ist, kannst Du die Projekt-Einstellungen vornehmen, wie sie für AVR-Studio im Tutorial beschrieben sind. Erst mal alles einzeln auf "Hello World"-Niveau testen, dann solltest Du die Beispiele ausprobieren können. Bei mir klappte das alles sofort - erst bei den "Liniensensoren" ging es nicht mehr weiter.
Bei Fragen bin ich gern behilflich, aber wie gesagt: die "line"-Sachen funktionieren bei mir auch noch nicht und ohne die macht die Sache keinen richtigen Spaß. Die mitgelieferten Beispiel-hex-Files (die selbst erzeugten kleinen Progrämmchen natürlich auch) konnte ich mit der beschriebenen Konfiguration aber problemlos auf den NIBObee hochladen, so daß ich sicher weiß, daß die Liniensensoren tatsächlich funktionieren. Das bekommt man ja aber auch schon mit dem Inbetriebnahmeprogramm first.hex mit, daß im Auslieferunsgzustand bereits geladen ist.
Hm - bin nach wie vor ratlos. Wenn noch jemand eine Idee beisteuern könnte....
Tuxi-Halle
28.12.2009, 21:57
@waschtl:
Neue Erkenntnisse: Du scheinst tatsächlich recht zu haben - an der 'libnibobee_line.a' scheint etwas faul zu sein. Wenn ich die rausnehme und dafür 'line.o' dazu linke, dann klappts! Mit dieser Konstellation habe ich das Beispiel "Arbeiten mit den Liniensensoren" (Tutorial S.38 ) ausprobiert - funktioniert bestens! Leider kann ich aber nicht erkennen, was an der lib faul ist, denn es funktioniert weder mit der Original-lib noch mit der selbst "gemakten". Die anderen libs (zumindest base und utils) funktionieren in beiden Versionen. Mich wundert, daß scheinbar niemand außer uns das Problem hat.
radbruch
28.12.2009, 22:06
Mich wundert, daß scheinbar niemand außer uns das Problem hat.Die bee ist noch nicht so sehr verbreitet...
ok, nach einigem Ausprobieren mit der Reihenfolge der importierten Bibliotheken hab ich das Beispiel aus dem Tutorial ans laufen bekommen. Allerdings habe ich eine Andere Reihenfolge als im Tutorial angegeben benutzt. Ich importiere in folgender Reihenfolge:
libnibobee_line.a
libnibobee_utils.a
libnibobee_base.a
mit den Einstellungen bekomme ich keine Fehlermeldungen mehr und die Programme scheinen ordentlich zu laufen.
Mit dem Programmieren unter Linux werde ich wohl noch ein paar Tage warten... erstmal muss ich die Hardware sauber ans laufen bekommen. Gestern habe ich gemerkt das mit der Odometrie auf der linken Seite was nicht zu stimmen scheint...
Tuxi-Halle
29.12.2009, 00:27
Überraschung! Ich habe es Dir gleichgetan und siehe da: es funktioniert! Allerdings nur mit den selbst übersetzten libs. Die Reihenfolge ist also genau andersherum als im Tutorial. Welche Entwicklungsumgebung benutzt Du?
im moment benutze ich noch das AVR-Studio. Genau so wie es im Tutorial steht. Da ich vor einigen Wochen auf Ubuntu umgestiegen bin habe ich das in ner virtuellen Maschine unter WinXP laufen...
Ich möchte aber bei nächster Gelegenheit auch unter Linux Entwickeln - da muss ich mich noch ein wenig einlesen...
Mit Eclipse habe ich schon mal ein wenig Erfahrungen gesammelt. Damit könnte ich mich anfreunden.
Und da du ja schon Erfahrungen unter Linux hast hätte ich auch gleich schon die erste Frage - wie bekomme ich unter Linux die Programme in die Biene? Ich habe schon den avrdude für linux gesehen - nutzt du den, oder gibts ne Möglichkeit das unter Eclipse zu automatisieren?
ich hatte das gleiche Problem mit dem liniensensor und siehe da das Ändern der Reihenfolge von den libs hat es behoben
sehr schön
Tuxi-Halle
29.12.2009, 23:01
@waschtl:
AVRDUDE ist in jedem Falle richtig - sowohl mit als auch ohne eclipse. Durch das oben erwähnte AVR-Plugin wird auch AVRDUDE sehr gut in eclipse integriert. Ohne eclipse ist es eigentlich ein Kommandozeilen-Tool, für das es aber auch ein ganz gutes GUI gibt: "AVR Burn-O-Mat" ( http://avr8-burn-o-mat.aaabbb.de/ ). Ubuntu kenne ich nicht im Detail, aber die grundlegende Verzeichnisstruktur sollte nicht wesentlich anders als bei SuSE sein. Dies vorausgesetzt, muß Du folgendes tun, um mit AVRDUDE auf den NIBObee zugreifen zu können: Im Verzeichnis /etc/udev/rules.d legst Du eine Datei mit dem Namen "80-usbprog.rules" an mit folgendem Inhalt:
# Udev rules for NIBObee-Programmer
#
ATTR{idVendor}=="16c0", ATTR{idProduct}=="05dc", GROUP="users", MODE="0660"
Wenn Du AVRDUDE installiert hast und den Rechner neu gestartet hast, solltest Du nun Deine hex-Files auf den NIBObee hochladen können. Am Einfachsten geht es wirklich mit dem AVR Burn-O-Mat. Dem gibst Du noch ein paar Einstellungen mit:
- 'AVRDUDE location' (bei mir '/opt/cross/bin/avrdude' )
- 'alternative AVRDUDE configuration file' (bei mir '/opt/cross/etc/avrdude.conf' )
- 'Progrmmer': den Eintrag 'usbasp (USBasp, http://www.fischl.de/usbasp/)' auswählen
- 'Port': Eintrag 'usb' auswählen
- im Hauptfenster den 'AVR type' einstellen: 'ATmega16'
Das wars. Nun kannst Du mit dem 'File'-Dialog das gewünschte 'hex-File'auswählen und mit 'write' hochladen (dauert ein paar Sekunden).
Wenn alles geklappt hat, steht im Ausgabefenster soetwas:
/opt/cross/bin/avrdude -C /opt/cross/etc/avrdude.conf -p m644 -P usb -c usbasp -U flash:w:/home/wolf/Software/NIBObeeLib/src/test/first/first.hex:i
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.03s
avrdude: Device signature = 0x1e9609
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "/home/wolf/Software/NIBObeeLib/src/test/first/first.hex"
avrdude: writing flash (2688 bytes):
Writing | ################################################## | 100% 18.68s
avrdude: 2688 bytes of flash written
avrdude: verifying flash memory against /home/wolf/Software/NIBObeeLib/src/test/first/first.hex:
avrdude: load data flash data from input file /home/wolf/Software/NIBObeeLib/src/test/first/first.hex:
avrdude: input file /home/wolf/Software/NIBObeeLib/src/test/first/first.hex contains 2688 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 13.86s
avrdude: verifying ...
avrdude: 2688 bytes of flash verified
avrdude done. Thank you.
Viel Erfolg!
Hi Tuxi-Halle ,
also deine Beschreibung zum Einstellen und Verwenden von AVR-Dude mit AVR Burn-O-Mat ist spitze - habe sofort auf anhieb fertige hex-Dateien von mir flashen können. Ich musste zwar die Pfade an mein Ubuntu anpassen, aber das war kein Problem.
Probleme hatte ich gerade dabei mein Eclipse einzurichten. Allerdings habe ich nach einigen Anlaufproblemen das erste Programm aus dem Tutorial übersetzt bekommen und auch übertragen.
Allerdings verstehe ich eines nicht. Warum werden von der Windows-installation die Headerdateien für die bereitgestellten Objektdateien bereitgestellt, aber in den zip-Files und den .tgz-Dateien fehlen die Header? Nachdem ich mir die Header vom Win-Rechner geholt hatte und die in mein Projekt eingebunden hatte konnte ich das Projekt auch enlich übersetzten...
... kann es vielleicht sein das ich mir das importieren der Bibliotheken zu kompliziert mache? Das letzte mal in C programmiert habe ich vor 3 oder 4 Jahren... da ist mir so einiges entfallen habe ich bereits gemerkt.
Tuxi-Halle
30.12.2009, 20:17
@waschtl:
Freut mich, daß es geklappt hat :-)
Mit der Installation der libs hast Du keinen Fehler gemacht. Es ist einfach so, daß die Quellen und Header nur in der 'msi'-Datei enthalten sind. Offenbar wurden die erfreulicher Weise immer zahlreicher werdenden Leute mit Windows-freiem PC vergessen :-( Hier sollte nicai-systems schleunigst nachbessern und wenigstens die gleichen Dateien bereitstellen, wie für die Windows-User!!! Ich mußte auch meine eigentlich schon verschrottete XP-Kiste extra wieder flott machen, um an die Quellen zu kommen. Ich verstehe sowieso nicht, weshalb nicai-systems mit solchen proprietären Tools wie 'NIBObee-Programmer' oder 'AVR-Studio' operiert, wo man sich sogar erst mal noch registrieren - sprich: persönliche Daten herausrücken - muß, obwohl es das alles doch auch mit eclipse+AVR-Plugin, AVRDUDE usw. geht - das gibt es alles für Windows und Linux. Das hätte zugleich noch den Vorteil, daß nur ein Tutorial für beide Betriebsysteme notwendig wäre.
Bleib dran! Programmieren unter Linux macht Spaß! ;-)
s.frings
03.04.2010, 15:59
Wenn ihr wieder aus Probleme mit den Libraries stoßt, dann schaut euch mal https://www.roboternetz.de/phpBB2/viewtopic.php?t=53543 an. Meine Alternative besteht aus einer *.c und einer *.h Datei. Da können die von euch genannten Probleme/Unklarheiten gar nicht erst auftreten.
vnrobot1
31.07.2011, 17:37
hallo Tux-halle,
ich habe auch Interesse Nibobee mit Eclipse, also unter ubuntu (11.04) zu programmieren, aber ich habe da leider noch überhaupt keine Ahnung!!!
Kannst Du mir zeigen, wie Du die Libraries und include eingebunden hat
Außerdem wie kompliert man ein Programm überhaupt unter eclipse?
Gibt es vielleicht ein anleitung mit eclipse auf deutsch, ich habe nur im english gefunden!!!
danke im voraus
mfg
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.