Jump to content

C++ IMU daten ausgeben


Recommended Posts

Guten Tag miteinander

Ich bin eher neu in C und in diesem Forum. (Bekommt man mehr Antworten wenn man auf Englisch posted?)

Nun meine eigentliche Frage:

Ich habe ein IMU Brick 2.0 und würde gerne aus dem C code ein dll erstellen wobei der Output der Funktion die Messdaten in Euler Winkel sein sollen.

Wie stellt man das an?

Momentan verwende ich das example_all_data.c file und dort werden die Messdaten über imu_v2_register_callback und darin genested cb_all_data aufgerufen.

Wie bekomme ich nun die Messdaten in die main() Ebene des Programmes (example_all_data). Anders gesagt wie bekomme ich die Eulerangles in der höchsten Ebene des Programms so dass ich diese Messungen als Variable auspucken kann?

 

Gruss

Jeremy

Link to comment
Share on other sites

Moin,

vielleicht wäre es leichter dir zu helfen, wenn du uns mitteilen würdest, was genau du machen möchtest.

Da du Anfänger bist, würde ich dir empfehlen, erstmal dich an den gegebenen Beispielen und der Hilfe von Tinkerforge  lang zu hangeln. Besonders das example_simple.c ist für den Anfang echt nicht schlecht.  Du bekommst die Daten genau dann wenn du sie abrufst und landen auch an der Stelle wo du sie haben willst.  Allerdings sind das nicht die Eulerwinkel, dazu musst du die Funktion imu_v2_get_orientation verwenden.  Vielleicht reicht dir das dann auch schon für den Anfang.  Von da aus kannst du das dann in eine DLL auslagern, wenn überhaupt nötig.

Wenn du allerdings callbacks verwenden möchtest, schaue dir das Beispiel genauer an.  Das ...register_callback übergibt eine Funktion die die Daten verarbeitet (cb_all_data),   und da stehen die Daten auch zur Verfügung. Die Funktion wird auch ausgeführt wenn deine main() eine pause macht und z.B. auf eine Tasteneingabe wartet. Also vielleicht einfach mal in Threads und Synchronisation einlesen ;) 

MfG,

Nils

Link to comment
Share on other sites

Hallo Nils

Danke für den Tip. ich werde die mal genauer anschauen. Ich weiss allerdings nicht ob mir die Callback funktion einen Vorteil gibt. Vieleicht kannst Du mich da beraten.

Was ich vor habe:

Ich möchte das IMU über einen Realtime controller von NI auslesen. Diese kann allerdings nicht den Brick Deamon ausführen da darauf kein Windows Betriebssystem sondern PharLaps darauf läuft. Zudem kommt NI Realtime nicht mit .net aus, daher kann ich das Labview API nicht verwenden.

Deswegen habe ich zu dem IMU BRick 2.0 auch einen Masterbrick und Ether extension angeschaft. Somit sollte ich die kommunikation auch ohne den Brick Deamon funktionieren. (Bezüglich DLL: Das dll würde ich dann bei Labview realtime einlesen. )

Nun was ich machen möchte ist die Orientierung des IMU bricks auszulesen und meinen Regelsystem füttern. Dort habe ich einen loop der mir ständig die Messwerte füttert und die Controlgrössen auspuckt.

Daher könnte gut sein das ich die Callback gar nicht brauche. Oder ich hab die Callback Funktionalität einfach nicht verstanden.

 

(Nun nach ausprobieren verwende ich die Qaternionwinkel und wandle sie in XYZ Cardan Winkel um. Daher brauche ich auch die RollGierNick winkel nicht mehr.)

 

Danke für die Auskunft.

Jeremy

 

 

Link to comment
Share on other sites

Moin Jeremy,

ich selber benutze die callbacks ganz gerne, aber ich habe da auch etwas andere Voraussetzungen, da ich mit c++ und Qt arbeite, und der Vollständigkeit halber, mit Windows habe ich auch nix am Hut.  Bin mit Linux ganz zufrieden ;)

Bei dir sieht das wohl etwas anders aus.  Vielleicht reicht es ja auch einfach eine DLL zu erstellen und die Header mit zur Verfügung zu stellen.

Wie du eine DLL erstellst, kannst du dir vielleicht von Dmitry abschauen: https://stackoverflow.com/questions/31352215/c-makefile-building-multiple-dll-and-project-structuring 

In die DLL sollten wohl die Dateien brick_imu_v2.c und ip_connection.c. Dann die entsprechenden Header mit zur Verfügung stellen.  Wenn das klappt, ist vermutlich die Hälfte schon geschafft.  Dann musst du nur den Code nur noch aufrufen, aber wie das bei deinem System geht, kann ich dir leider nicht sagen.

Ich drück dir die Daumen :)

Nils

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...