WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

STL in SimMechanics Second Generation

 

##Robert##
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2012, 12:54     Titel: STL in SimMechanics Second Generation
  Antworten mit Zitat      
Hallo Zusammen,

ich bin gerade dabei mich in SimMechanics2 einzuarbeiten.

Als einfaches Einstiegsbeispiel stelle ich mir eine Schubkurbel vor, bei der die Geometrie durch STL-Teile bestimmt ist.

Dazu habe ich mit die Einzelteile (alles so einfach wie mögliche) in CATIA erstellt und als STL abgespeichert.
(Die direkte/indirekte Einbindung von CAD Telen mit Hilfe von SimMechLink möchte ich nicht, sondern nur mit STL-Teilen Arbeiten)

In SimMech2 gibt es ja die Möglichkeit, sich Schwerpunkt, Masse und Trägheit automatisch aus der Geometrie berechnen zu lassen. Das möchte ich natürlich auch nutzen.

Als ich dann mit dem Modell fertig war und es mal starten wollte, tauchte aber schon das erste Problem auf.

Es kommt die Fehlermeldung: "A geometric inertia is incompatible with a non-solid geometry."

Mir ist zwar schon irgentwie klar, dass zur Massenberechnung etc. ein Volumen und keine Oberfläche (STL) gebraucht wird. Aber ich finde es auch komisch, dass die Software sowas nicht automatisch umrechnen kann.

Meine Frage ist jetzt, ob ich die automatische Massenberechnung etc. für SimMech2 für STL Teile dann doch selbst programmieren muss?
Oder ob es einen einfacheren Weg gibt, den ich grad nur nicht gesehen habe?

Ich würde mich sehr freuen wenn mir hier jemand auf die Sprünge helfen kann.

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen


cybbi
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 84
Anmeldedatum: 23.08.11
Wohnort: ---
Version: Alle
     Beitrag Verfasst am: 25.07.2012, 13:25     Titel:
  Antworten mit Zitat      
Bin leider mit SimMechanics 2G nicht so sehr vertraut, aber in 1G war es so, dass man mit den STL-Dateien nichts weiter anfangen konnte, als diese als Bildquelle zu verwenden. Und STL-Dateien sind ja nichts anderes außer Bilder (3-Dimensional).
Vielleicht kannst du mal ein Model inkl. CAD-Dateien (evtl. auch STL-Dateien, eben alles was benötigt wird.. Smile ) hochladen.
Private Nachricht senden Benutzer-Profile anzeigen
 
##Robert##
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2012, 13:21     Titel:
  Antworten mit Zitat      
Hallo cibby,

vielen Dank für deine schnelle Antwort!

Leider konnte ich bis jetzt nicht zurückschreiben da sich noch weitere Schwierigkeiten ergaben, die ich erstmal lösen wollte bevor ich dir antworte.

Um jetzt gezielt auf das STL Problem einzugehen habe ich mein Modell auf ein Einfachpendel reduziert. (Wenns an einem Körper klappt, dann funktionierts hoffentlich auch für den Rest)

Beim SimMech G1 habe ich die STL Dateien auch als Graphik genommen und die Trägheitsdaten etc. per Hand eingetragen. Hat soweit recht gut funktioniert.

Bei SimMech G2 wollte ich dann die Funktion für automatische Berechnung der Trägheitsdaten nutzen. Wenn du auf den Block "Solid" gehst, kannst du bei "Inertia" auswählen wie die Trägheitsdaten gerechnet werden sollen.
Bei "Custom" habe ich mal die im Catia gerechneten Trägheitsdaten per Handeingetragen.
Das Ziel ist aber "Calculate from Geomety" zu wählen und gar nichts mehr per Hand eingeben zu müssen, außer die Dichte des Werkstoffes.

Da finde ich es schon blöd, dass das Programm nicht automatisch aus der STL-Datein ein Volumen und daraus die Masse, etc. rechnen kann.

Aber vielleicht gibt es ja da eine Funktion die ich bis jetzt noch nicht gesehen habe? Oder ich muss mir so eine Funktion selbst programmieren?

Habe Modell und STL angehängt. STL konnte ich nicht hinzufügen, habe daher diese in .txt umbenannt. Aber kannst ja nach download wieder in .stl umwandeln.

Wäre super wenn du hier eine Idee hättest.

Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 30.07.2012, 08:24     Titel:
  Antworten mit Zitat      
Hallo,

Ich hab mich auch mal mit der Thematik befasst allerdings nur zu Recherchezwecken. Wenn ich mich nicht täusche dann unterstüzt doch simMechanics 2 das STL Format zZ nur von AutoCAD und ProE. Ich meine mich erinnern zu können dass es aus Catia Dateien nur die Grafik nutzen kann und nicht in der Lage ist Trägheitsmomente zu berechnen. Allerdings ohne Gewähr.

http://www.mathworks.com/matlabcent.....chanics-stl-file-importer

Hier noch ein Link aus dem File Exchange den ich damals gefunden hab. Vl. kann dieses kleine Zusatzprogramm das, ist aber für das alte SimMechanics.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
##Robert##
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2012, 14:09     Titel:
  Antworten mit Zitat      
Hallo Phate,

vielen Dank für deine Antwort.

Soweit ich weiß ist es bei einem STL Format doch egal ob es von Catia, AutoCad oder sonst. CAD Software kommt. Man kann eine STL Datei auch völlig ohne CAD schreiben, also immer Normalenvektor und die drei Eckpunkte etc.
Ist zwar extem aufwendig bei komplexen Flächen, aber doch möglich oder?

Den Link den Du mir angehängt hast ist genau das, was ich suche. Danke.

Gibt es sowas auch für Generation 2 und ich habe es bis jetzt nur übersehen?

Oder muss ich mir so ein Zusatzprogramm für Generation2 selbst schreiben (mit SimScapeLanguange?)?
Wenn ich es selbstschreiben muss, gibt es eine leichte Möglichkeit den Quellcode dieses Zusatzprogramms einfach von SimMechG1 auf SimMechG2 "umzuschreiben"? Oder muss ich das komplett neu erstellen?

Ich bin völliger Anfänger bezüglich Matlab Simulink und daher hab ich noch keine Ahnung wie ich die SimScapeLanguage benutze. Da werd ich mich in den nächsten Tagen erst richtig reinlesen. Aber vielleicht kannst du mir ja schon vorab sagen in welche Richtung es laufen wird, damit ich dann gleich an der richtigen Stelle anfagen kann mich reinzuarbeiten und keine Zeit verliere.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
cybbi
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 84
Anmeldedatum: 23.08.11
Wohnort: ---
Version: Alle
     Beitrag Verfasst am: 30.07.2012, 14:47     Titel:
  Antworten mit Zitat      
MATLAB kann Modelle nicht aus CATIA importieren, da die CATIA-API dafür wohl nicht geeignet ist (oder nicht öffentlich ist.. irgendwie sowas in der Art). Jedenfalls ist das nicht möglich. Das Verwenden von dieser Funktion "Calculate from Geometry" bedeutet, dass die Geometerie ein SimMechanics Geometry sein muss (Cylinder, Brick, Sphere, General Extrusion,...).

Aus STL Dateien ist es NICHT möglich, Inertia zu berechnen. Grund ist der, dass STL zu wenig Informationen zu Koordinaten Frames besitzt, um daraus den Trägheitstensor zu berechnen.
Private Nachricht senden Benutzer-Profile anzeigen
 
##Robert##
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2012, 17:00     Titel:
  Antworten mit Zitat      
Hallo Cybbi,

danke für die Antwort.

Dann werd ich also mit Hilfe von SimscapeLanguage meinen eigenen Body Block (bzw. Solid Block) schreiben müssen, der aus STL alles berechnen kann.

Der Link den Phate beigefügt hat, zeigt dass es so ein Zusatzprogramm für SimMechG1 schon gibt.

Die Frage ist jetzt nur ob ich sowas für SimMech2 komplett selbst schreiben muss oder ob es sie Möglichkeit gibt, an diesem schon vorhandenen Zusatzprogramm ein paar Zeilen zu ändern und es dann für SimMech2 nutzen zu können?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 31.07.2012, 08:28     Titel:
  Antworten mit Zitat      
Hi,

Ich geb dir recht dass in STL Daten eigentlich nur die Hüllgeometrie abgebildet ist, soll ja schließlich ne Standart Schnittstelle sein. Hast du eventuell mal STL Dateien aus einem anderen CAD Programm ausprobiert? Sollte ja im Internet besorgbar sein vl. mal von ProE oder sowas und schauen ob es dann berechnet werden kann.

Ich hab mir das leider nicht genauer angeschaut was in dem STL Konverter geschieht. Sah auf den ersten Blick nicht sonderlich kompliziert aus, da kann ich mich aber auch täuschen Smile. Von demher sollte es möglich sein das ganze auf 2nd Gen anzupassen.

Am besten mal Anfangen und wenn es irgendwo hakt nachfragen. Meistens wird es durch machen und ausprobieren klarer (zumindest bei mir).

Wenn ich es richtig gesehen hab ist das Tool sogar von einem Mathworks-Mitarbeiter erstellt worden. Vl kannst du ihn mal kontaktieren und nachhaken ob es sowas auch schon für die zweite Generation gibt (würd mich wundern wenn das noch keiner gemacht hat der viel damit arbeitet) bzw. ob es in nächster Zeit ein Release gibt auf FileCentral oder so.


Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
##Robert##
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2012, 09:08     Titel:
  Antworten mit Zitat      
Hallo Phate,

gute Idee, ich werd mal den Mathworks-Mitarbeiter anschreiben. Sobald ich ne Lösung hab stell ich die hier rein.

Ich bin gestern auf noch zwei Probleme gestoßen, die aber vom Prinzip her dieselbe Lösung haben dürften.

Bei den Release Notes habe ich gelesen, dass die 2nd Gen keine eigene "Funktionalität" für Kraftsensoren im Gelenk und bei Constraints keine Möglichkeit für unebene Kurven anbietet bzw. unterstützt. Aber genau diese zwei Sachen sind für mich überaus wichtig (für kinetostatische Analyse etc.).

In der Benutzer-Dokumentation habe ich gelesen, dass es prinzipiell möglich ist, alle Blöcke (also alle Funktionalitäten?), egal für welches Simscape-AddOne (also auch SimMech2), mit SimscapeLanguage selbst zu schreiben.

Wie kann ich das mit dem "nicht unterstützt" verstehen? Heißt das, in dem Fall ist es nicht möglich mit SimscapeLanguage genau diese Funktionalitäten zu schreiben?

Sorry ist vielleicht eine sehr triviale Frage aber da ich in Matlab (bzw. allg im Programieren) noch blutiger Anfänger bin, frage ich lieber mal nach. Wäre super hier eine Antwort zu bekommen. Danke.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
cybbi
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 84
Anmeldedatum: 23.08.11
Wohnort: ---
Version: Alle
     Beitrag Verfasst am: 31.07.2012, 09:25     Titel:
  Antworten mit Zitat      
##Robert## hat Folgendes geschrieben:

Bei den Release Notes habe ich gelesen, dass die 2nd Gen keine eigene "Funktionalität" für Kraftsensoren im Gelenk und bei Constraints keine Möglichkeit für unebene Kurven anbietet bzw. unterstützt. Aber genau diese zwei Sachen sind für mich überaus wichtig (für kinetostatische Analyse etc.).


Das stimmt soweit, dass das in 2G nicht unterstützt wird. Warum verwendest du eigentlich dann nicht 1G, wenn das das ist, was du so dringend brauchst? Alles was ich bis jetzt gelesen habe von dir, sollte sich auch in 1G prima bearbeiten lassen...

##Robert## hat Folgendes geschrieben:

In der Benutzer-Dokumentation habe ich gelesen, dass es prinzipiell möglich ist, alle Blöcke (also alle Funktionalitäten?), egal für welches Simscape-AddOne (also auch SimMech2), mit SimscapeLanguage selbst zu schreiben.


Ja, das ist möglich. Die grundlegende Kommunikation zu SimMechanics oder anderen Produkten läuft bei der Simscape Language dann über Physical Signals (In der SimScape Language über die keywords "inputs" und "outputs" definiert). Diese Physical Signals finden sich dann in SimMechanics an allen möglichen Stellen, z.B. bei Acutating oder Sensor Ports.
Private Nachricht senden Benutzer-Profile anzeigen
 
##Robert##
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2012, 09:57     Titel:
  Antworten mit Zitat      
Hallo Cybbi,

vielen Dank für deine Antwort.

Ich bin auch schon am Überlegen es doch mit 1nd Gen zu machen.

Die 2nd Gen bietet halt den Vorteil, bei der Visualisierung die Geschwindigkeit zu regulurieren und das System von mehreren Betratchungorten gleichzeitig zu sehen. Und genau das findet einer meiner Betreuer für meine Semesterarbeit so gut. Daher haben wir uns dann auf 2nd Gen festgelegt.

Jetzt muss ich mal sehen. Wenn ich mit selbstgeschriebenen Blöcken alles das was ich aus der 1nd Gen haben will auch in die 2nd Gen einbetten kann, dann mach ichs mit 2nd Gen. Wenn das zu kompliziert wird, dann werd ich vorschlagen es doch mit 1nd Gen zu machen.

Vielen Dank nochmal, an euch beide, für die bisherige Unterstützung!

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 31.07.2012, 10:04     Titel:
  Antworten mit Zitat      
Hallo,

So wie ich das verstehe wird momentan kein fertiges Modul in SimMechanics angeboten. Du kannst allerdings mit der SimScape Umgebung dir die gewünschten Funktionalitäten selbst erstellen.

Wie aufwändig das ist und ob die Lösungen die du selbst implementierst ausreichend gut/genau sind musst du natrülich selber wissen.
Wollte nur nochmal gesagt haben dass sowas ziemlich aufwändig sein kann
wenn man das noch nie gemacht hat.

Man trifft fast immer auf Probleme die man so am Anfang nicht erwartet hat,
was das ganze zT. sehr zermürbend machen kann.

Viele Erfolg und falls es geht halt das Topic hier aktuell. Bin auch daran
interessiert.

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
##Robert##
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2012, 10:26     Titel:
  Antworten mit Zitat      
Hallo Phate,

ich werd mich jetzt einfach in die Themaik weiter reinarbeiten und morgen mal mit meinen Betreuern reden wie es weiter gehen soll.

Werd euch auf jeden auf dem Laufenden halten und auch die Lösungen hier posten.

Vielen Dank nochmal.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
##Robert##
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2012, 17:44     Titel:
  Antworten mit Zitat      
Hallo Zusammen,

nach längerer Überlegung meines Betreuers (für meine Semesterarbeit) soll es jetzt doch in SimMechanicsG1 laufen.

Ich bin jetzt u.a. dabei das Programm von Mathworks (siehe den Link von Phate) auf Richtigkeit zu überprüfen. Dazu möchte ich außer Testrechnungen mit verschiedenen Körpern/Geometrien natürlich auch den Quellcode verstehen.

Es geht im Wesentlichen um die Datei "stl2sm" da diese die geometrischen/mechanischen Größen berechnet. Hier verstehe ich eigentlich alles bis auf die Berechnung des Trägheitstensors. Da ich wie gesagt Matlab Anfänger bin, macht mir diese Rechnung wirklich Probleme, vorallem an der Stelle wo ich mit Handrechnung integrieren würde.

Ich glaube zwar zu wissen worauf die einzelnen Zeilen des Codes hinaus wollen, aber leider nicht wie dies funktionieren soll.

Hier mal die wesentlichen Zeilen des Quellcodes mit Komentaren in den Zeilen die ich nicht verstehe bzw. wo ich den Code leicht geändert habe.

Code:

run(filename); % In einem anderen Unterprogramm wird aus der stl-file eine m-file erzeugt, damit matlab damit rechnen kann. Hier wird
% diese m-file ausgeführt, diese ist gleich der stl-file, nur es fehlen die jweiligen normalenvektoren, aslo nur die
% Eck-Koordinaten enthalten.

% Init
numtriangle = numel(triangle);
Ccan=1/60*(1/2*eye(3)+1/2*ones(3,3))*rho; % Diese Zeile verstehe ich nicht. Was wird hier gerechnet? Was soll Ccan bezwecken?
Xgtotal = zeros(3,1);
V=zeros(numtriangle,1);
M=zeros(numtriangle,1);
C=zeros(3,3,numtriangle);
Xg=zeros(3,1,numtriangle);

for i = 1:numtriangle
A = reshape(struct2array(triangle(i)),3,3)*(1/1000); % Der Faktor (1/1000) ist von mir selbst eingefügt um in der Einheit [mm] rechnen zu können
V(i) = 1/6 * det(A);    % Volume % rho wird von einem anderen Unterprogramm übergeben. Daher hier einfach manuell z.b. für stahl rho = 7874 deklarieren.
M(i) = rho * V(i);    % Mass
Xg(:,:,i) = mean([zeros(3,1) A],2); %Center of Mass
C(:,:,i) = det(A)*A*Ccan*A';    % Covariance    % Ich kann mir zwar denken was hier als Ergebnis rauskommen soll aber nicht wie es durch speziell diese Rechnung entstehen soll.
end

Mtotal = sum(M);
Ctotal = sum(C,3);
%Vtotal = sum(V);
for i=1:numtriangle
Xgtotal = Xgtotal + Xg(:,:,i)*M(i);
end
Xgtotal = Xgtotal/Mtotal;

% Translate to Xgtotal (center of mass)
dx = zeros(3,1) - Xgtotal;
Ctotal = Ctotal + Mtotal*(dx*Xgtotal'+Xgtotal*dx'+dx*dx'); % Diese Zeile habe ich zur besseren Dastellung hier umgeschrieben. Original im Anhang

% Tensor of Inertia
J=eye(3)*trace(Ctotal)-Ctotal; % Das ist mir eigenlich klar
 


Mein Problem sind also speziell "Ccan" und "C(:,:,i) bzw C". Ich verstehe nicht wie ich an der Stelle wo normal ein Volumenintegral gerechnet wird nur eine Matrizenmuliplikation stehen kann? Desweiteren ist mir unklar wozu die Matrix "Ccan" überhaupt dienen soll und für was der Vorfaktor "1/60" gebraucht wird (1/6 wird wahrscheinlich in Verbindung mit "det(A)" zur Volumenberechnung gebraucht werden, wie bei "V(i)". Aber das 1/10 noch dazu ist mir wirklich rätselhaft)

Im Anhang befinden sich eine aus einer stl-Beispieldatei enstandene m-file (für "run(filename") und die zur Berechnung (heißt "slt2sm") verwendete m-file. Die restilichen Dateien habe ich nicht angehängt, da diese mit dem Problem eigentlich nichts zutun haben, kann man aber über den Link weiter oben laden.

Das ganze ist wahrscheinlich "spielend" leicht aber ich komm nicht drauf.

Wäre super wenn mir jemand helfen könnte!

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht 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 nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.