Gibt es eine Standard Library für 3D Vektoren in C++, welche gut auf
kleineren ARM-Controllern verwendet werden kann?
Ich brauche ein paar Standard-Funktionen wie Multiplikation und
Betragsbildung und will das Rad nicht neu erfinden.
Hallo Markus,
guck Dir mal die Eigen Library an (http://eigen.tuxfamily.org/dox/). Aus
zuverlässiger Quelle weiß ich, dass man das auch auf einem Cortex-M0
nutzen kann.
mfg Torsten
Hallo Torsten,
das sieht interessant, aber auch etwas zu kompliziert aus.
Die Library scheint ziemlich mächtig und aus irgendwelchen Gründen
befindet sich der gesamte Code in Header-Files anstatt in cpp-Files. Das
erscheint mir etwas seltsam.
Ich brauche eigentlich nur wenige Funktionen wie Skalarprodukt,
Vektorprodukt und Drehoperatoren und das ganze sollte unter 1-2Kbyte
Speicher belegen.
Markus schrieb:> Ich brauche eigentlich nur wenige Funktionen wie Skalarprodukt,> Vektorprodukt und Drehoperatoren und das ganze sollte unter 1-2Kbyte> Speicher belegen.
Ist doch schnell selber programmiert? Dafür ist die eigen-Bibliothek
tatsächlich etwas zu mächtig.
Moin,
Ich hab jetzt nur nenn kurzen Blick drauf geworfen.
Das alles in den Headern ist, liegt an den Templates. Wenn man die
verwendet, kann man das nicht mehr in .h und .cpp aufteilen. Das bringt
den Compiler durcheinander.
Markus schrieb:> das sieht interessant, aber auch etwas zu kompliziert aus.> Die Library scheint ziemlich mächtig und aus irgendwelchen Gründen> befindet sich der gesamte Code in Header-Files anstatt in cpp-Files. Das> erscheint mir etwas seltsam.
Naja, dass ist eigentlich bei modernen C++ Libraries fast schon üblich.
Mir ist aber nicht klar, was Du suchst. Es hat sich bestimmt noch
niemand hingesetzt und eine Library geschrieben, die exakt die Handvoll
Funktion enthält, die Du gerade jetzt brauchst.
Entweder Du schreibst das selbst (und mit Schreiben ist es in der Regel
nicht getan, da fehlt dann auch noch die Validieren, Dokumentation,
Optimierung etc.), oder Du setzt Dich mal einen halben Tag hin und ließt
die Dokumentation einer Library, die so etwas kann und dann hat Dein
Werkzeugkasten wieder ein wertvolles Werkzeug mehr.
Torsten R. schrieb:> Und wenn ich mir die Beispiele hier:> http://eigen.tuxfamily.org/dox/group__TutorialMatr... mal> angucke, sieht dass ganze doch extrem einfach aus.
Ist es auch. Ich habe mich mal in eigen während meines Masters
eingearbeitet, da ging es um Berechnung von Eigenwerten für eine
Schwingungsanalyse.
Hatte die Analyse zunächst in Matlab entwickelt und anschließend auf C++
mit eigen portiert. War kaum ein Tag arbeit. Die Dokumentation ist
außerdem sehr gut und bei doofen Fragen findet man per google schnell
Antwort :)
Eigen ist wirklich zu empfehlen. - Ist zwar sehr maechtig, aber hat auch
den Vorteil, dass einfache Sachen dennoch relativ schnell machbar sind.
Als Einstieg vielleicht die textuelle Quickreference:
https://eigen.tuxfamily.org/dox-devel/AsciiQuickReference.txt
Bsp Vektormultiplikation:
1
#include<Eigen/Dense>
2
3
intmain(){
4
Eigen::VectorXda(2),b(2);//2 gibt die Dimension des Vekt an.
5
a<<1,2;b<<2,1;//Vekt befuellen
6
doubleresultDotProd=a.dot(b);// oder wahlweise auch einfach a.tranpose()*b;
7
8
//Fuer das aeussere Prod. brauchts eine 2x2 Matrix
Markus schrieb:> das sieht interessant, aber auch etwas zu kompliziert aus.> Die Library scheint ziemlich mächtig und aus irgendwelchen Gründen> befindet sich der gesamte Code in Header-Files anstatt in cpp-Files. Das> erscheint mir etwas seltsam.
Mhm, noch nicht viel Erfahrung mit C++?
Markus schrieb:> Ich brauche eigentlich nur wenige Funktionen wie Skalarprodukt,> Vektorprodukt und Drehoperatoren und das ganze sollte unter 1-2Kbyte> Speicher belegen.
Ja dann ist die Library doch perfekt, es wird dank Templates nur das
Kompiliert was du nutzt, nicht mehr und nicht weniger.
>Autor: Bastler (Gast)>Torsten R. schrieb:>> Und wenn ich mir die Beispiele hier:>> http://eigen.tuxfamily.org/dox/group__TutorialMatr... mal>> angucke, sieht dass ganze doch extrem einfach aus.>Ist es auch. Ich habe mich mal in eigen während meines Masters>eingearbeitet, da ging es um Berechnung von Eigenwerten für eine>Schwingungsanalyse.
Es ist genau dann einfach und universell, wenn man es in ein ARDUINO
Programm integrieren kann.
Dass das möglich ist, wage ich allerdings zu bezweifeln.
Das Problem bei solch einer Bibliothek ist grundsätzlich, dass man am
Anfang nicht weiß, ob sie für das eigene Problem zu gebrauchen ist. Das
ist z.B. bei den ARDUINO-Libs sehr gut gelöst: einfach laden,
compilieren, ausprobieren fertig. Eine Sache von ein paar Minuten.
Markus schrieb:> Es ist genau dann einfach und universell, wenn man es in ein ARDUINO> Programm integrieren kann.> Dass das möglich ist, wage ich allerdings zu bezweifeln.
Probier es aus! C++ hat den Vorteil, dass Du in der Regel für nix
zahlst, was Du nicht auch nutzt. Würde mich wundern, wenn eine selbst
gestrickte Lösung schneller und effektiver wäre. Wie gesagt, so etwas
kann man selbst auf einem Cortex M0 einsetzen.
> Das Problem bei solch einer Bibliothek ist grundsätzlich, dass man am> Anfang nicht weiß, ob sie für das eigene Problem zu gebrauchen ist. Das> ist z.B. bei den ARDUINO-Libs sehr gut gelöst: einfach laden,> compilieren, ausprobieren fertig. Eine Sache von ein paar Minuten.
Wo siehst Du jetzt den großen Unterschied zur Eigen-Library?
>Wo siehst Du jetzt den großen Unterschied zur Eigen-Library?
In der Einfachheit des Vorgangs. Laden, Compile-Knopf drücken .. läuft.
Zum ersten Ausprobieren ist es sehr gut, wenn man sich nicht um
Verzeichnisse, Make-Files, Compilereinstellungen, welches Demo,
Versionsnummern usw. kümmern muss.
Bei Apple würde es wohl "Usabillity" heißen.
>Probier es aus! C++ hat den Vorteil, dass Du in der Regel für nix>zahlst, was Du nicht auch nutzt. Würde mich wundern, wenn eine selbst>gestrickte Lösung schneller und effektiver wäre.
Verstehe mich nicht falsch. Ich habe keine Zweifel daran, dass die
Eigen-Library ziemlich ausgereift und akademisch anspruchsvoll ist.
Meine Fragestellung ist nur:
- Ist sie schnell?
- braucht sie wenig Speicher?
- Läuft sie auf einem Cortex M0 mit minimalem Platz und
Resourcenverbrauch?
- ist sie einfach zu integrieren?
Wenn es ein Beispiel für eine Arduino Zero gäbe, wäre die Frage ziemlich
schnell beantwortet. Das ist auch die Philosophie des ARDUINO-Systems:
Löse das Problem schnell und effektiv, vermeide unnötige Technikprobleme
wie z.B. die lange Suche nach Compiler-Configurationen, falsche
Pfadeinstellungen, nicht aufzufindende Abhängigkeiten, zu großer
Ramspeicherbedarf usw.
Das Problem ist hier nur, dass ich mich vermutlich eine Woche mit der
Eigen-Library beschäftigen muss, bis ich diese Fragen für mich
beantworten kann. Dann investiere ich lieber einen halben Tag für die
paar Funktionen die ich brauche und programmiere es selber.
Markus schrieb:> Das Problem ist hier nur, dass ich mich vermutlich eine Woche mit der> Eigen-Library beschäftigen muss, bis ich diese Fragen für mich> beantworten kann.
Äh, was? Bist du geistig eingeschränkt oder warum braucht das so lange?
Letztens habe ich eine Library in ein Projekt eingebunden, die auf eigen
basiert. Also musste Eigen in mein Projekt eingebunden werden. Das,
wofür du eine Woche brauchen willst, beschränkt sich auf die Übergabe
von 'pkg-config --cflags --libs eigen' an den Compiler. Dann noch ein
include, und fertig. In einer Woche kann man alle 9000 Compiler Flags
vom GCC lernen, Gott weiß warum du so lange brauchst um das einzige
benötigte Flag -I zu finden, bzw. die Doku in der der pkg-config Aufruf
steht.
Die Installation von eigen ist sogar noch einfacher als die von Arduino
Libs, da sie unter Linux ruck zuck per Paketmanager installiert werden
kann.
>Äh, was? Bist du geistig eingeschränkt oder warum braucht das so lange?>Letztens habe ich eine Library in ein Projekt eingebunden, die auf eigen>basiert
Na dann mach mal und binde die Lib mal schnell in eine kleines
Arduino-Demo ein bevor alles nur leeres Gewäsch ist.
Markus schrieb:> Na dann mach mal und binde die Lib mal schnell in eine kleines> Arduino-Demo ein bevor alles nur leeres Gewäsch ist.
Keine Ahnung wie man bei Arduino Compiler-Flags eingibt. Ich hab es
daher so gemacht:
* In Eclipse ein Projekt für den STM32F051 angelegt
* In den Projekt-Einstellungen zu den Compiler-Flags `pkg-config
--cflags eigen3` hinzugefügt
Fertig. Jetzt kann Eigen verwendet werden. Hat 5 Minuten gedauert. So
schnell kriegst du keine Matrix-Algorithmen implementiert.
Hier noch ein sinnloses Dummy-Programm zur Demonstration dass es
funktioniert:
1
#include<Eigen/Dense>
2
3
volatilefloatx;
4
5
intmain(){
6
Eigen::Matrix<float,2,2>m;
7
m(0,0)=3;
8
m(1,0)=2.5;
9
m(0,1)=-1;
10
m(1,1)=m(1,0)+m(0,1);
11
12
Eigen::Matrix<float,2,1>v;
13
v(0,0)=1;
14
v(1,0)=2;
15
16
Eigen::Matrix<float,2,1>w=m*v;
17
18
while(1){
19
// Dummy-Ausgabe
20
x=w(0);
21
v+=w;
22
w=m*v;
23
}
24
}
Wenn du rausfindest wie man der Arduino-IDE Compiler-Flags eingibst,
kannst du es 1:1 so machen. Aber dem TO ging es überhaupt nicht um
Arduino, daher passt das so...
Dr. Sommer schrieb
>Ich hab es daher so gemacht:
Danke für die Code-Beispiele.
>Keine Ahnung wie man bei Arduino Compiler-Flags eingibt.
Siehst Du, genau an diesem Punkt unterscheidet sich die Theorie von der
Praxis.
Theoretisch ist es leicht und es geht, nur in der Praxis geht es
nicht.
Deshalb möchte ich mir erlauben, Dir für die Zukunft zu empfehlen, etwas
weniger voreilig in der Wortwal zu sein:
Dr. Sommer schrieb:
>Äh, was? Bist du geistig eingeschränkt oder warum braucht das so lange?
Markus schrieb:> Theoretisch ist es leicht und es geht, nur in der Praxis geht es> nicht.
Jetzt habe ich extra für dich herausgesucht, wie man in Arduino
Libraries erstellt. Auch das hat keine Woche gedauert:
1. Aktuelle Eigen Version (
http://bitbucket.org/eigen/eigen/get/3.2.8.tar.bz2 ) herunterladen
2. Archiv entpacken
3. Den entpackten Ordner von "eigen-eigen-07105f7124f9" nach "Eigen3"
umbenennen
4. Alles im Ordner löschen außer dem Unterordner "Eigen"
5. Eine Datei namens "Eigen3.h" im Ordner "Eigen3" anlegen, und
hineinschreiben:
1
#pragma push_macro("max")
2
#pragma push_macro("min")
3
#pragma push_macro("B1")
4
#pragma push_macro("B2")
5
#pragma push_macro("B3")
6
7
#undef max
8
#undef min
9
#undef B1
10
#undef B2
11
#undef B3
12
13
#include<Eigen/Eigen>
14
15
#pragma pop_macro("max")
16
#pragma pop_macro("min")
17
#pragma pop_macro("B1")
18
#pragma pop_macro("B2")
19
#pragma pop_macro("B3")
Dies ist erforderlich, da die Arduino IDE Makros definiert, die den
Eigen-Code verwirren. Hier sieht man sehr deutlich die Probleme, die die
völlig unnötige Nutzung von Makros statt Funktionen/Konstanten
verursachen.
6. Den gesamten Eigen3 Ordner in den "libraries" Ordner im Sketchbook,
also zB $HOME/sketchbook/libraries, verschieben.
Fertig. Jetzt kann man einen Beispiel-Arduino-Sketch anlegen:
1
#include<Eigen3.h>
2
3
4
volatilefloatx;
5
6
voidsetup(){
7
Eigen::Matrix<float,2,2>m;
8
m(0,0)=3;
9
m(1,0)=2.5;
10
m(0,1)=-1;
11
m(1,1)=m(1,0)+m(0,1);
12
13
Eigen::Matrix<float,2,1>v;
14
v(0,0)=1;
15
v(1,0)=2;
16
17
Eigen::Matrix<float,2,1>w=m*v;
18
19
while(1){
20
// Dummy-Ausgabe
21
x=w(0);
22
v+=w;
23
w=m*v;
24
}
25
}
26
27
voidloop(){
28
// put your main code here, to run repeatedly:
29
delay(1000);
30
digitalWrite(13,HIGH);
31
delay(1000);
32
digitalWrite(13,LOW);
33
}
Und für einen der ARM-Arduinos, wie den Arduino Zero, kompilieren.
Für geistig eingeschränkte wie dich habe ich den genannten "Eigen3"
Ordner noch als ZIP-Archiv angehängt. Das kannst du in der Arduino-IDE
mit "Sketch->Include Library->Add .ZIP Library..." automatisch
entpacken, sodass du direkt mit dem Sketch-Schreiben beginnen kannst.
Im ganzen Thread ging es überhaupt nicht um Arduino. Nur du hast damit
angefangen, wie toll alles bei Arduino ist, und ich hatte dir gezeigt
wie einfach es mit G++/Eclipse geht. Eine IDE, bei der man nichtmal
Compiler-Flags eingeben kann, als Maß aller Dinge zu nehmen, finde ich
etwas unrealistisch. Aber wie du siehst, ist es auch bei Arduino mit
etwas mehr Frickelei schnell möglich. Selbst ein Genie hätte in der Zeit
keine Matrix-Library mit allen nötigen Tests usw. implementieren können.
Hallo Markus,
ich finde es schon gelinde gesagt etwas unhöflich, zuerst
>Gibt es eine Standard Library für 3D Vektoren in C++, welche gut auf>kleineren ARM-Controllern verwendet werden kann?>Ich brauche ein paar Standard-Funktionen wie Multiplikation und>Betragsbildung und will das Rad nicht neu erfinden.
nach einer c++ Standard Bibliothek zu fragen. Und dann, nachdem die
hilfsbereiten Menschen hier genau diesen Wunsch passend und schnell
erfüllt haben damit herauszurücken, dass es um eine schlüsselfertige
Arduino-Bibliothek geht.
Frech!
vlg
Timm
Dr. Sommer schrieb:> Aber dem TO ging es überhaupt nicht um Arduino, daher passt das so...Dr. Sommer schrieb:> Im ganzen Thread ging es überhaupt nicht um Arduino.Timm R. schrieb:> ich finde es schon gelinde gesagt etwas unhöflich...
Huch, Markus ist ja der TO :D Das machts natürlich noch besser... Na
eine schlüsselfertige und sehr mächtige Arduino-Library hat er jetzt ja
mit Eigen...
>Für geistig eingeschränkte wie dich habe ich den genannten "Eigen3">Ordner noch als ZIP-Archiv angehängt.
Vielen Danke für das Zip-File, das hilft mir sehr weiter.
Hier habe ich noch ein kleines Liedchen für Dich gefunden:
https://www.youtube.com/watch?v=dapqMeQCdcs
Timm Reinisch (Firma: privatfrickler.de) (treinisch)
>Hallo Markus,>ich finde es schon gelinde gesagt etwas unhöflich, zuerst>>Gibt es eine Standard Library für 3D Vektoren in C++, welche gut auf>>kleineren ARM-Controllern verwendet werden kann?>>Ich brauche ein paar Standard-Funktionen wie Multiplikation und>>Betragsbildung und will das Rad nicht neu erfinden.>nach einer c++ Standard Bibliothek zu fragen. Und dann, nachdem die>hilfsbereiten Menschen hier genau diesen Wunsch passend und schnell>erfüllt haben damit herauszurücken, dass es um eine schlüsselfertige>Arduino-Bibliothek geht.
Hallo Timm,
es ging in dem Thread gar nicht speziell um die Arduino-Library. Arduino
ist nur ein Prüfstein, mit dem sich zeigen lässt dass etwas einfach zu
benutzten ist. Fast alle Dinge sind dort so gemacht, dass sie sich
einfach benutzen und testen lassen. Dieses Prinzip der einfachen
"Usability" stünde vielen Open-Source-Projekten gut zu Gesicht.
Dr. Sommer hat hier eine gute Arbeit geleistet, so dass viele Nutzer die
Libray jetzt ohne großen Aufwand testen können.
Allerdings muss ich sagen, dass ich seine Ausdrucksweise gelinde gesagt
etwas "frech" finde.
>Frech!
Markus schrieb:> Siehst Du, genau an diesem Punkt unterscheidet sich die Theorie von der> Praxis.>> Theoretisch ist es leicht und es geht, nur in der Praxis geht es> nicht.
Das geht auch in der Praxis ganz einfach. Das einzige was hier der
beschränkende Faktor ist, ist diese verkackte Arduino-IDE.
Nimm eine andere IDE, oder noch besser, einen Textedior deiner Wahl und
ein Makefile, und das Problem ist gelöst.
Streng genommen gibt es nicht mal ein Problem, bzw. sind nicht die
Compilerflags das Problem, sondern die Arduino-IDE.
Weil es nicht vorgesehen ist, das du da was ändern könnne sollst. Soll
ja schließlich idiotensicher und für jeden ganz einfach benutzbar sein.
Wenn mans aber doch machen muss, kann man in der Datei platform.txt die
Compilerflags eintragen...
Markus schrieb:> Dieses Prinzip der einfachen> "Usability" stünde vielen Open-Source-Projekten gut zu Gesicht.
Was können denn die Macher eines Projektes dafür, wenn Du nicht mit
deinen Werkzeugen (IDE, Compiler usw.) umgehen kannst?
Markus schrieb:> Arduino> ist nur ein Prüfstein, mit dem sich zeigen lässt dass etwas einfach zu> benutzten ist. Fast alle Dinge sind dort so gemacht, dass sie sich> einfach benutzen und testen lassen. Dieses Prinzip der einfachen> "Usability" stünde vielen Open-Source-Projekten gut zu Gesicht.
Arduino ist ein "Spielzeug" für alle, die sich nicht weiter in die
Thematik einarbeiten wollen. Du kannst den Arduino Workflow nicht mit
dem einer echten IDE vergleichen.
Desto einfacher die Programmierung/Nutzung ist, desto beschränkter ist
man in den Möglichkeiten und genau an diese Grenze bist du mit der Lib
gekommen.
>Arduino ist ein "Spielzeug" für alle, die sich nicht weiter in die>Thematik einarbeiten wollen.
Das erinnert mich ein wenig an diese Physiker, die immer behaupten,
Chemie sei eigentlich überflüssig, weil am Ende doch alles irgenwie
Physik sei. Wenn sie dann mit ihrem physikalischen Handwerkszeug
konkrete Problemstellungen aus der Chemie lösen sollen, kommt dabei aber
meist nichts brauchbares heraus. Jedenfalls nicht in überschauberer
Zeit.
Markus schrieb:> Gibt es eine Standard Library für 3D Vektoren in C++
Du suchtest eine Library. Eigen ist eine (Template-)Library, die
Tiny-3D-Engine
https://github.com/mrt-prodz/ATmega328-Tiny-3D-Engine
die ich im Folgenden mit T3DE abkürzen werde, nicht. T3DE ist eine
fertige Anwendung zur Animation vordefinierter Mesh-Modelle. Du kannst
darraus natürlich den für dich relevanten Quellcode heraus- und
in deine eigene Anwendung hineinkopieren. Das ist aber sicher nicht
einfacher, als an den Anfang des Programms ein
1
#include<Eigen/Dense>
zu schreiben und ggf. den Include-Pfad passend zu setzen.
Markus schrieb:> Ich brauche ein paar Standard-Funktionen wie Multiplikation und> Betragsbildung und will das Rad nicht neu erfinden.
Eigen hat Betragsbildung, T3DE nicht.
Markus schrieb:> Ich brauche eigentlich nur wenige Funktionen wie Skalarprodukt,> Vektorprodukt und Drehoperatoren
Eigen hat das alles, in T3DE fehlen Skalarprodukt und Vektorprodukt
komplett, Drehungen sind nur um die Koordinatenachsen möglich.
Markus schrieb:> Das Problem bei solch einer Bibliothek ist grundsätzlich, dass man am> Anfang nicht weiß, ob sie für das eigene Problem zu gebrauchen ist. Das> ist z.B. bei den ARDUINO-Libs sehr gut gelöst: einfach laden,> compilieren, ausprobieren fertig. Eine Sache von ein paar Minuten.
Festzustellen, dass T3DE deinen Anforderungen nicht entspricht, dauert
für dich vermutlich deutlich länger als ein paar Minuten. Die
3D-Animation laufen zu lassen ist sicher kein Problem. Aber bist du
danach gescheiter also vorher? Das Einzige, was du dann weißt, dass die
enthaltenen Vektor- und Matrixfunktionen für exakt jene 3D-Animationen
wie in der Demo geeignet ist.
Nur noch ein paar Dinge, die mich persönlich an T3DE stören würden:
- Es fehlen die meisten Grundfunktionen für Vektoren und Matrizen.
- Da für Sinus und Cosinus Look-Up-Tabellen verwendet werden, ist die
Winkelauflösung für Rotationen nur 1°. Für Animationen mag das
reichen, für viele andere Anwendungen ist das zu grob.
- Sämtliche Operationen (Skalierung, Translation und Rotation) werden
auf eine 4×4-Matrix-Multiplikation zurückgeführt, was sehr ineffzient
ist.
- Da Rotationen nur um die Koordinatenachsen möglich sind, muss eine
Rotation um eine andere Achse aus drei Einzelrotationen
zusammengesetzt werden, was ebenfalls sehr ineffzient ist.
- usw., wenn man ernsthaft damit arbeiten würde, würden einem sicher
noch weitere Dinge negativ auffallen.
Jetzt mal Hand auf's Herz: Wie lange hättest du gebraucht, um das selber
herauszufinden? Wirklich nur ein paar Minuten?
Programmieren ist eben trotz Arduino & Co. schon noch etwas mehr als nur
Copy/Paste ;-)
Markus schrieb:> Gibt es eine Standard Library für 3D Vektoren in C++Markus schrieb:> Es ist genau dann einfach und universell, wenn man es in ein ARDUINO> Programm integrieren kann.> Dass das möglich ist, wage ich allerdings zu bezweifeln.Markus schrieb:> Wenn es ein Beispiel für eine Arduino Zero gäbe, wäre die Frage ziemlich> schnell beantwortet.Markus schrieb:> Na dann mach mal und binde die Lib mal schnell in eine kleines> Arduino-Demo ein bevor alles nur leeres Gewäsch istMarkus schrieb:> es ging in dem Thread gar nicht speziell um die Arduino-Library.
Vielleicht ist es ja keine böse Absicht, aber du führst hier die Leute
ganz schön an der Nase herum.
>Vielleicht ist es ja keine böse Absicht, aber du führst hier die Leute>ganz schön an der Nase herum.
Ich weiß ehrlich gesagt nicht, was Du meinst.
Ich halte die Integration einer Library in die Arduino-Umgebung nach wie
vor für einen hervorragenden Test.
Es kann damit nämlich gezeigt werden, dass
- eine Library wenig Speicher verbraucht ( Arduino Uno, 32KFlash, 2kRam)
- dass sie auch für 8Bit Prozessoren geeignet ist
und bei richtiger Integration der Library:
- Der One-Click-Test auf Eignung
>Jetzt mal Hand auf's Herz: Wie lange hättest du gebraucht, um das selber>herauszufinden? Wirklich nur ein paar Minuten?
Wie kommst Du auf den schmalen Grad? Gefühlsmässig habe ich dazu eine
viertel Stunde gebraucht. Was mich an den Routinen gestört hat, ist das
verwenden fester Typen und die starre Struktur.
Meiner Meinung nach sind solche Threads sehr nützlich zu
Materialsammlung. Das ist, was jeder Student lernt: Erst die Analyse des
Standes der Technik durch umfangreiche Materialrecherche.
Wenn ich mir diesen Thread so anschaue, gibt es genau einen Vorschlag:
Die "Eigen Library" und ich kann mir kaum vorstellen, dass dies wirklich
die einzige Software dieser Art ist.
Markus schrieb:>>Vielleicht ist es ja keine böse Absicht, aber du führst hier die Leute>>ganz schön an der Nase herum.>> Ich weiß ehrlich gesagt nicht, was Du meinst.> Ich halte die Integration einer Library in die Arduino-Umgebung nach wie> vor für einen hervorragenden Test.
Ok, das ist jetzt im Nachhinein klar. Aber zwischen deinen Beiträgen vom
15.05.2016 18:43 (wo du das ersten Mal den Arduino ins Spiel brachtest)
und vom 19.05.2016 10:14 (wo du erklärtest, dass der Arduino nur der
Prüfstein sein soll), ging ich (und offensichtlich auch andere) davon
aus, das der Arduino das Zielsystem ist.
Mehr noch: Deine weiteren Beiträge ließen annehmen, dass die Bibliothek
als vorgefertigtes Paket mit allen Arduino-spezifischen Compiler- und
Linker-Einstellungen verfügbar sein soll, was die Auswahl natürlich sehr
einschränkt.
Markus schrieb:>>Jetzt mal Hand auf's Herz: Wie lange hättest du gebraucht, um das selber>>herauszufinden? Wirklich nur ein paar Minuten?>> Wie kommst Du auf den schmalen Grad? Gefühlsmässig habe ich dazu eine> viertel Stunde gebraucht.
Die folgende Aussage erweckte aber den Eindruck, dass du in der
Beurteilung fremder Software noch nicht ganz so fit bist:
Markus schrieb:> Das Problem ist hier nur, dass ich mich vermutlich eine Woche mit der> Eigen-Library beschäftigen muss, bis ich diese Fragen für mich> beantworten kann.
Und wenn du tatsächlich in einer Viertelstunde herausgefunden hast, dass
der Code für dich nicht taugt, warum hast du das dann nicht gleich mit
dazu geschrieben? So musste man davon ausgehen, dass dieser Code deinen
Wünschen voll entspricht und du nur noch weitere Alternativen mit
ähnlichem Funktionsumfang suchst.
Markus schrieb:> Wenn ich mir diesen Thread so anschaue, gibt es genau einen Vorschlag:> Die "Eigen Library"
Die Eigen ist halt die wahrscheinlich verbreitetste Lineare-Algebra-
Bibliothek für C++. Es gibt davon sogar einen Branch für AVR-Arduinos,
der zeigt, dass die Bibliothek auf AVRs tatsächlich lauffähig ist.
Allerdings scheint das Prohekt eingeschlafen zu sein:
https://github.com/vancegroup/EigenArduino> und ich kann mir kaum vorstellen, dass dies wirklich die einzige> Software dieser Art ist.
Du kannst dir auch noch die Armadillo-Bibliothek anschauen, die dir aber
vermutlich genauso wenig zusagen wird wie die Eigen:
http://arma.sourceforge.net/Markus schrieb:> Dann investiere ich lieber einen halben Tag für die paar Funktionen> die ich brauche und programmiere es selber.
Wenn du tatsächlich nur die paar von dir genannten Funktionen brauchst,
frage ich mich wirklich, warum du das nicht schon längst getan hast. Das
ist auf jeden Fall weniger Aufwand als
- erst hier im Forum nachzufragen,
- mit anderen herumzudiskutieren,
- (vielleicht) einen Kandidaten zu finden, der wenigstens halbwegs
passend ist und
- diesen Kandidaten schließlich noch an die eigenen Bedürfnisse
anzupassen.