|
|
Matlab: mex_file um c++ Code zu nutzen |
|
baronsocke |

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 21.05.14
|
 |
|
 |
Wohnort: Köln
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.06.2014, 12:26
Titel: Matlab: mex_file um c++ Code zu nutzen
|
 |
|
 |
|
Guten Tag!
Ich habe einen Panorama-Schwenkkopf von RODEON. Auf dieses kommt eine Kamera, so dass ich die Winkel verstellen kann.
Den RODEON Head muss ich aus Matlab steuern. Dafür brauche ich ein mex-File.
Um den RODEON Panoramakopf anzusteuern liegt die gesamte API, C-Code, dll, lib usw. bereit. Diese wird von Rodeon mitgeliefert.
Ich habe ein Mex-File angelegt, und den Ansteuerungscode in c++ geschrieben. Mittlerweile bekomme ich über Matlab den RODEON Kopf initialisiert.
Wir haben es als .cpp Datei angelegt und den Compiler auf Microsoft Visual 2008 (oder so ähnlich) geändert.
Jetzt habe ich den ersten Code geschrieben und manchmal bekomme ich sogar den Kopf zum bewegen!
Hier muss ich jetzt feintüfteln.
Der Kopf lässt sich komischerweise nicht immer initialisieren. Warum auch immer. Irgendwann klappt es dann mal wieder.
ZUM CODE:
Anfangs muss ich den Kopf initialisieren:
RCIH hRCI = RODEONcontrol_init(argc, arg)
Über diesen Befehl wird eine Verbindung hergestellt und der Kopf ist startklar. Jetzt meine Frage.
Den Datentyp RCIH hRCI braucht man immer für alle weiteren Ansteuerungen.
Um den Kopf mit bestimmten Winkeln zu füttern rufe ich die Methode:
RODEONcontrol_goto(hRCI, hAngle, vAngle) auf. Wie ihr seht, brauche ich auch hier den Datentyp hRCI.
Jetzt meine eigentliche Frage. Wenn ich das Programm starte, soll der Kopf einmal initialisiert werden. Dann gebe ich einen Winkel durch, der Kopf steuert den Winkel an und bleibt solange da stehen, bis ich ihm einen neuen Winkel übermittele. Dafür braucht er jedes mal wieder den Datentyp hRCI.
Aktuell ist der Methodenaufruf zur Initialisierung und die goto Funktion in einer Mex-funktion. Das bedeutet, dass jedes mal der Kopf neu initialisiert wird, wenn ich einen neuen Winkel übergebe. Das soll aber nicht sein.
Idealerweise hätte ich drei Mex-Funktionen:
1. eine zum Initialisieren (init)
2. eine um die Winkel anzusteuern (goto)
3. eine um den Kopf zu deinitialisieren und ihn in die Parkposition zu fahren. (deInit)
Und genau hier komme ich nicht weiter bzw. stoße ich an meine Programmierfähigkeiten. Um das so zu realisieren wie ich mir vorstelle, muss ich ja aus der 1. Funktion (init) mir den Datentyp hRCI holen und ihn jedes mal der goto-Methode übergeben.
Also: Ich rufe aus Matlab die init-Funktion auf, erhalte als Rückgabewert in Matlab den Datentyp hRCI, übergebe diesen zusammen mit den Winkeln wieder aus Matlab der goto-Methode.
Wie mache ich das? Geht das überhaupt? Oder wie löst man das Problem? Kann ich überhaupt einen solchen spezifischen Datentyp aus c++ in Matlab holen und ihn wieder über Mex an c++ übergeben?
Das gleiche müsste ich dann für die deInit-Funktion machen.
|
|
|
|
|
Titus |

Forum-Meister
|
 |
Beiträge: 871
|
 |
|
 |
Anmeldedatum: 19.07.07
|
 |
|
 |
Wohnort: Aachen
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.06.2014, 14:35
Titel:
|
 |
Hallo,
es geht, ist aber recht tricky: man castet (auf den Fransen cer C-Legalität) den Pointer auf ein int32 oder int64 um und gibt den zurück.
Es geht aber deutlich besser: man "merkt" sich über eine statische Variable in der MEX-Datei die Variable hRCI. Dann darf man natürlich nur eine MEX-Datei haben. Dieser verpasst man einen weiteren Inputparameter (der Einfachheit halber eine Zahl) und dann code in etwa
Hoffe das hilft weiter...
Titus
|
|
|
baronsocke |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 21.05.14
|
 |
|
 |
Wohnort: Köln
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 26.06.2014, 17:10
Titel:
|
 |
Danke für die Hilfe!
Das Prinzip habe ich verstanden, doch leider kann ich das nicht ins Programm umsetzen, da ich einfach nicht gut im Programmieren bin.
Ich rufe aus Matlab das Mex-File mit dem C-Code auf. Der Datentyp RCIH hRCI wird erstellt, wenn ich den RODEON Kopf initialisiere.
Wie bleibt denn nun der Datentyp nach der Initialisierung erhalten, wenn ich die Mex-Funktion wieder verlasse, um sie aus Matlab heraus mit neuen Winkel aufzurufen? dann ist doch der Datentyp auch verschwunden? Sprich ich müsste wieder neu initialisieren? Das soll so nicht sein.
Danke vielmals!
|
|
|
baronsocke |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 21.05.14
|
 |
|
 |
Wohnort: Köln
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.06.2014, 13:00
Titel:
|
 |
|
 |
|
Ich habe den Datentyp RCIH hRCI als globale Variable in der Mex-Funktion angelegt. So funktioniert es. Ich arbeite zusätzlich wie Titus beschrieben hat mit einem Vergleichsoperator, den ich bei Funktionsaufruf mit übergebe.
Ich möchte jetzt einen Schritt weiter gehen und eben nicht jedes mal den Vergleichsoperator übergeben. Um die Winkel anzufahren will ich nur zwei Winkel übergeben, nicht zwei Winkel und eine Zahl zum Vergleichen.
Ich möchte insgesamt 4 Mex-Funktionen haben:
1. zum Initialisieren (init)
2. um die Winkel einzustellen (goto)
3. um eine bestimmet Position auf 0°/0° zu setzen (setToZero)
4. zum Deinitialisieren und in Parkposition zu fahren (deInit)
Ich habe nun 4 Mex-Funktionen mit jeweils der entsprechenden Methode angelegt und jedes mal eine globale Variable für den Datentyp RCIH angelegt. Das gefällt ihm aber nicht:(
Wenn ich zuerst die Mex-Funktion zum Initialisieren aufrufe und dann die MEX-Funktion um die Winkel einzustellen, meckert er.
Woran kann das liegen?
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|