genau, so sollte es auch sein, danke! :)
Druckbare Version
kann man sich ein Topic eigentlich irgendwie sticky machen ? also irgendwo im profil ne persönliche notiz? ich ersauf hier schon fast an meinen eigenen lesezeichen im browser :P
gute idee :D
Hardware ist angekommen @HaWe .. mal schauen was ich heute Nachmittag so schaffe, habe noch ein Problem mit meinem Datalogger zu lösen, zum Glück übernimmt Petrus gerade die Bewässerung meines Balkons
zwischenbericht: brick läuft erstmal, alle abhängigkeiten sind installiert
negativ: man braucht den sog. brickdemon ... ich lgaub ich versteh was du mit treiber meinst ... aber die installation ist doch eigentlich ganz leicht
positiv: als ich hab jetzt keinen ultra starken magneten hier, aber man sieht wie das magnetsignal rumeiert, aber das stört die ausrichtung nicht im geringsten
Kommst du damit klar den service zu installieren oder ist das schon ein no-go?
hallo,
ich habe bislang Null Erfahrung mit demons und kenne sie nur vom Hörensagen. Ich weiß weder, wie man die installiert noch wie man sie startet, an sich wollte ich eine einfache Treiberlib oder Datentransfer mit einfachen Protokollen, wie sonst auch für i2c-, SPI- oder UART-Sensoren.
Was genau steckt denn aber hinter diesem speziellen demon, wie genau sind die Installations- und Startbefehle?
https://www.tinkerforge.com/en/doc/S...-install-linux
unter windows ist es einfach nur ne exe die man installiert
unter linux lädt man sich das ".deb" file runter und installiert es mit dem packagemanager
für den RaspberryPi mit Debian Lite sind es 3 zeilen
sudo apt-get install pm-utils
wget http://download.tinkerforge.com/tool...test_armhf.deb
sudo dpkg -i brickd_linux_latest_armhf.deb
pm-utils fehlt leider in der standard installation und wird auch nicht im guide erwähnt, aber bei der installation steht es dabei wenn es nicht installiert worden ist!
Konfigurieren musst du glücklicherweise nichts, ansonsten ist ein Demon nichts weiteres als ein "Dienst" also ein Programm dass bei Systemstart mitläuft und Funktionen anbietet
In diesem Fall erkennt der BrickDemon wenn ein Brick per USB angeschlossen wird und stellt ihn als Socketverbindung über localhost bereit
... Daher auch meine falsche Annahme dass der sich als USB Netzwerkkarte anmeldet ... wäre ja auch zu schön gewesen ...
hallo,
also das ist ja genau das, was mich von Anfang an abgeschreckt hat - das ist mir eindeutig zu monstermäßig und zu wirr.
Um einen Demon downzuloaden, müsste etwas wie ein
sudo apt-get install brickdemon
reichen,
und um ihn zu starten, ein einfaches
sudo ./brickdemon
bzw
system("sudo ./brickdemon");
aus dem C-programm heraus.
Ansonsten müsste fürs eigene Programm ein einfaches #include ausreichen und einfache Compiler und Linker-Flags, wie ich sie oben beschrieben habe, samt simplem IMU-polling
double yaw = getIMUheading();
oder ähnlich.
Vorbild kann nach wie vor der CMPS11 sein, wie schon erwähnt, da braucht man noch nicht mal eine Lib einzubinden, es reicht i2c-Register auszulesen (z.B. mit wiringPi / wiringI2C), in denen die fusionierten gefilterten Werte ja bereits drinstehen.
ps,
alternativ, statt einer Lib, den erwähnten "10-Zeiler" (von mir aus auch 20-Zeiler) einfach in mein eigenes C-Programm hinein zu copy-and-pasten, wie eine beliebige zusätzliche (komplizierte) C-Funktion, wäre natürlich auch ok, wenn man dann die yaw-Werte ähnlich simpel pollen kann.
sudo /etc/init.d/brickd startZitat:
system("sudo ./brickdemon");
sudo /etc/init.d/brickd stop
sudo /etc/init.d/brickd restart
das package ist leider meines wissens nach in keinem public repository, also musst du es schon mit wget laden, aber das ist standard bei allen linux distrosZitat:
sudo apt-get install brickdemon
Daher hier 2 Varianten, eine nach deinem Wunsch, welche vorraussetzt dass die deb file in einem bestimmten ordner liegt und die alternative variante die ähnlich simpel ist und genau so gut funktioniert
Code:wget -P /var/cache/apt/archives/ http://download.tinkerforge.com/tools/brickd/linux/brickd_linux_latest_armhf.deb
sudo apt-get install brickd_linux_latest_armhf
ALTERNATIV
wget http://download.tinkerforge.com/tools/brickd/linux/brickd_linux_latest_armhf.deb
sudo dpkg -i brickd_linux_latest_armhf.deb
sudo apt-get install -f
.... ich lese meinen artikel und frage mich gerade warum ich mich früher immer so blöd angestellt habe .. es ist doch eigebntlich total einfach wenn man erstmal ein wenig in den dokus ließt ....
PS: apt-get benutzt auch nur
sudo dpkg im hintergrund, aber es lädt zusätzlich die abhängigkeiten mit runter
in der alternativen version benutz ich den "wunderbefehl"
sudo apt-get install -f ... den solltest du dir unbedingt merken, der reparieret kaputte package installationen (verbindungsverlust z.B. oder eben ein unvollständig installiertes .deb)
ich spiele gerade auch mit dem gedanken die bridge komponente aus dem brickd source code zu extrahieren, aber das ist ein ganz schönes stück arbeit
hallo,
das hier einmalig in die Konsole zu copy-and-pasten ist ntl kein Problem:
diese Befehle hier für den Demon allerdings müssen intern von meinem C-Programm aus zugänglich sein, notfalls über den system execute cmd:Code:wget -P /var/cache/apt/archives/ http://download.tinkerforge.com/tool...test_armhf.deb
sudo apt-get install brickd_linux_latest_armhf
sudo /etc/init.d/brickd start
sudo /etc/init.d/brickd stop
sudo /etc/init.d/brickd restart
also z.B. bei Programmstart, am Anfang von main() :
und bei Programmende, am Ende von main(), direkt vor exit(0) :Code:system("sudo /etc/init.d/brickd start");
(sicher bin ich mir jetzt natürlich nicht, ob system von einem user Programm aus aufgerufen auch sudo Befehle für demons ausführen kann, das muss selbstverständlich klappen)Code:system("sudo /etc/init.d/brickd stop");
wenn das alles ist und genau so auch sicher funktioniert, kein Problem!
Wie genau pollt man dann die yaw- oder heading-Werte?
Ganz ohne Demon wäre es mir allerdings sympathischer, klarer Fall... ;)
das sollte genau so funktionieren, testen kann cih es erst heute nachmittag
daten habe ich auch schon gelesen, abe rich habe noch nichts konkretes was die ausrichtung angeht ... das demo tool wie gesagt zeigt dass der magnetfeldstörungen wohl ganz gut ignoriert
tag 3 .... ich habe DOCH eine kaputte SDCard ... neue ist(edit: sind) bestellt ... grmpf (besser ich hab mal etwas reserve)
SDCards liegen jetzt beim Paketshop, da mein anderes Prjekt eh gerade einen Dämpfer abbekommen hat kann ich heute nochmal hieran arbeiten.
@HaWe Messdaten habe ich unter Python übrigens schon erfolgreich ausgelesen, es kondensiert sich zu folgendem Code in C(ungetestet, das wollte ich heute ausprobieren, wenn ich dazu komme):
Code:#include "ip_connection.h"
#include "brick_imu_v2.h"
typedef struct
{
float w;
float x;
float y;
float z;
}quaternion_s;
quaternion_s q;
// Create IP connection
IPConnection ipcon;
ipcon_create(&ipcon);
// Create device object
IMUV2 imu;
imu_v2_create(&imu, UID, &ipcon);
// Connect to brickd
if(ipcon_connect(&ipcon, HOST, PORT) < 0) {
fprintf(stderr, "Could not connect\n");
return 1;
}
// Don't use device before ipcon is connected
// Get current quaternion
int16_t w, x, y, z;
if(imu_v2_get_quaternion(&imu, &w, &x, &y, &z) < 0) {
fprintf(stderr, "Could not get quaternion, probably timeout\n");
return 1;
}
q.w = w/16383.0;
q.x = x/16383.0;
q.y = y/16383.0;
q.z = z/16383.0;
float yaw = atan2(2.0*(q.y*q.z + q.w*q.x), q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z);
float pitch = asin(-2.0*(q.x*q.z - q.w*q.y));
float roll = atan2(2.0*(q.x*q.y + q.w*q.z), q.w*q.w + q.x*q.x - q.y*q.y - q.z*q.z);
Wieso ruft ihr imu_v2_get_quaternion() auf und formt das in Euler-Winkel um anstatt direkt imu_v2_get_orientation() den Euler-Winkel auszulesen?
wenn du mir erklärst was genau die in der doku mit dem gimballock meinen und warum sie dazu raten die quaternioen zu benutzen? wenn ich es recht verstehe, drehst du das ding auf hochkant und bekommst keine ausrichtugn mehr ... über die quaternionen soll dasd wohl nicht passieren, solange man die ausrichtung der achsen berücksichtigt ... meinem verständnis nach muss man das dann selber machen, weswegen ich den obigen ansatz verfolge ...
denke ich habe das WE mal irgendwo zwit dazwischen um mich wieder ran zu setzen
PS: nicht erklären was gimballock ist, sondern im konkreten kontext dieses sensors und warum sie davor warnen wenn nicht gemeint ist was ich gerade als annahme geschrieben habe :D
Ja, die Quaternion-Darstellung ist ohne Gimbal Lock. Allerdings nur solange wie man bei Quaternionen bleibt, bei der Umrechnung in Euler verliert man deren Vorteile.
Gimbal Lock ist in der Deutschen Wikipedia leider nicht mathematisch erklärt, bei Drehungen kann es zu Singularitäten (Sprünge bei einem Pitch von +90/-90°) kommen, Eine gute Erklärung kriege ich leider nicht hin, deswegen der Verweis auf [1].
Der Punkt ist: Das Problem hat man (soweit ich das verstehe) bei Berechnungen, z.B. Gegeben ist eine Position A. Welche Drehung d muss ich anwenden um zu Position B zu kommen. Beim einfachen auslesen des aktuellen Winkels, um die Drehung im 3D-Raum zu lesen kommt es zu keinem Problem. Die Eulerwinkel des IMU Bricks 2 sind hier nicht besser oder schlechter als die Eulerwinkel anderer IMUs.
[1] https://zfx.info/viewtopic.php?p=35924#p35924