16 kwietnia 2024


Rezultat rekonstrukcji modelu przestrzennego, wykonanej za pomocą funkcji dostępnych w zakresie Reverse Engineering jest zwykle nieparametryczny. To oczywiście oznacza, że nie jest możliwa łatwa i szybka modyfikacja kształtu takiego modelu. Ale czy zawsze tak musi być?

Andrzej Wełyczko

Jeśli rekonstruowany element ma kształt zdefiniowany przez zaawansowane powierzchnie z krzywizną zmieniającą się w obu kierunkach głównych (double curvature surfaces), to nie ma jednoznacznej metody „odtworzenia” ich parametrycznej definicji. Problem jest jednak znacznie łatwiejszy dla części pryzmatycznych, czyli takich, których kształt jest opisany za pomocą powierzchni kanonicznych (płaskich, cylindrycznych, stożkowych lub wyciąganych). Powierzchnie kanoniczne to takie, dla których w każdym ich punkcie promień krzywizny przynajmniej w jednym kierunku ma wartość nieskończoną.

rekonstrukacja skanu 3d
Rys. 1

Rozważmy przykład kostki, której rezultat skanowania 3D w formacie STL jest importowany do CATIA V5 (Rys.1). Można oczywiście kwestionować konieczność rekonstrukcji tak prostego detalu, który łatwo zmierzyć, a wyniki pomiarów uwzględnić w procesie konstruowania „od zera”. Mam jednak nadzieję, że metoda opisana poniżej chociaż w części zainspiruje tych, którzy problemy rekonstrukcji modelu rozwiązują na co dzień.
Skan 3D (niezależnie od formatu) umożliwia zdefiniowanie modelu przestrzennego za pomocą siatki trójkątów. Pewnie dlatego skrót STL (STereo Lithography), jako najstarszy z formatów stosowanych w technikach Rapid Prototyping oraz Reverse Engineering, ma także inne rozwinięcia: Standard Triangle Language lub Standard Tessellation Language. Taka siatka może być wygładzana, filtrowana, ręcznie lub automatycznie naprawiana, optymalizowana, …itd. W tym przypadku ten etap pominę, bo te operacje nie mają wpływu na metodę opisaną poniżej.
Przed rozpoczęciem procesu rekonstrukcji warto wykonać analizę rozkładu krzywizny dla zaimportowanej siatki (polecenie Curvature Mapping dostępne w środowisku na rysunku 2).

Rys02
Rys. 2

Jeśli taka analiza zostanie wykonana dla Type = Maximum, to jej rezultatem jest identyfikacja obszarów o różnych promieniach krzywizny:

  • obszary czerwone lub niebieskie: „klasyczne” zaokrąglenia krawędzi,
  • obszary zielone: powierzchnie płaskie, cylindryczne, stożkowe lub wyciągane, czyli takie, których krzywizna przynajmniej w jednym kierunku jest zerowa.

Dzięki takiej analizie można zaplanować kolejne etapy procesu rekonstrukcji, bo wiemy gdzie zdefiniować powierzchnie kanoniczne, a gdzie powierzchnie z krzywizną w obu kierunkach głównych.
Jeśli celem jest uzyskanie przynajmniej częściowo parametrycznego modelu powierzchniowo-bryłowego, to warto zdefiniować taką transformację siatki STL, która ustali jej położenie na płaszczyznach głównych przestrzeni roboczej. W tym celu trzeba wykonać rekonstrukcję kilku elementów geometrycznych, które posłużą do zdefiniowania takiej transformacji. Mogą to być na przykład trzy płaszczyzny (Rys. 3), które w kolejnym kroku będą powiązane z płaszczyznami głównymi modelu (xy plane, zx plane oraz yz plane).

Rys03
Rys. 3

Każda powierzchnia kanoniczna może być „odtworzona” za pomocą polecenia Basic Surface Re­cognition. W tym celu, po wskazaniu siatki (Rys. 4 A) należy aktywować jej fragment (dla powierzchni płaskich najlepiej zastosować Mode = Flood – Rys. 4 B), a następnie obrócić/rozciągnąć proponowaną przez system powierzchnię do takiego położenia/wielkości, która jest wymagana (Rys. 4 C). Skanowanie 3D nigdy nie jest perfekcyjne i dlatego zawsze wystąpi błąd rekonstrukcji – tu Max error = 0.0208. Ważne jest to, aby ten błąd nie był zbyt duży, na przykład mniejszy niż 0,1mm.

Rys04
Rys. 4

Transformacja siatki może być zdefiniowana za pomocą polecenia Align with Constraints, dla którego zdefiniowano relacje: Plane.3 – xy plane, Plane.1 – zx plane oraz Plane.2 – yz plane (Rys. 5).

Rys05
Rys. 5

W polu Statistics okna Align with Constraints system prezentuje raport, z którego jasno wynika, że zadane pary płaszczyzn nie są do siebie idealnie równoległe. Na przykład dla pary Plane.1 – zx plane mamy: dist.=not calculated, angl. – 0.01697. Gdyby taka dokładność była zbyt mała, to po wyznaczeniu płaszczyzny Plane.1 należałoby (za pomocą polecenia Plane w środowisku GSD) zdefiniować dwie płaszczyzny prostopadłe do Plane.1, umieszczone jak najbliżej odpowiednich ścian siatki Block.1.
Po wykonaniu polecenia Align with Constraints siatka STL jest „dopasowana” do płaszczyzn głównych modelu i dlatego w łatwy sposób można zdefiniować kontur prostokątny (Sketch.1 na rysunku 6) oraz bryłę Pad.1, która w całości zawiera siatkę Block.2.

Rys06
Rys. 6

Kształt bryły może i powinien być zmodyfikowany za pomocą kolejnych powierzchni (tu: Plane.4 na rysunku 7), którą, podobnie jak poprzednio, zdefiniowano stosując polecenie Basic Surface Recognition.

Rys07
Rys. 7

Czy taka definicja powierzchni płaskiej jest parametryczna? Powierzchnia Plane.4 powstała w wyniku wyciągania linii Profile.4 w kierunku linii Line.10. Obie linie są zdefiniowane pomiędzy punktami, których definicja jest parametryczna, a więc i one, i powierzchnia są parametryczne. Definicja kolejnych powierzchni płaskich, odcięcie „zbędnych” fragmentów oraz modyfikacja bryły za pomocą polecenia Split (Rys. 8) nie wymaga chyba komentarza.

Rys08
Rys. 8

Odtworzenie szczegółów konstrukcyjnych (otwory i wybrania) można także wykonać za pomocą polecenia Basic Surface Recognition (pod warunkiem, że ich kształt jest kombinacją powierzchni kanonicznych). Na przykład otwór stopniowy (Rys. 9 i 10) można zrekonstruować za pomocą trzech powierzchni cylindrycznych i dwóch powierzchni płaskich. Definicja fragmentu siatki, który posłuży do rekonstrukcji powierzchni cylindrycznej lub stożkowej może być wykonana za pomocą polecenia Activate w trybie Mode = Brush albo w trybie Mode = Trap (Rectangular lub Polygonal).

Rys09
Rys. 9

Rys10
Rys. 10

Także w tym przypadku zrekonstruowane powierzchnie cylindryczne są parametryczne, czyli można modyfikować ich parametry (promień, punkt początkowy i końcowy osi). Podobna procedura, czyli rekonstrukcja powierzchni kanonicznych, ekstrapolacja tych powierzchni, wykonanie polecenia Trim (odcięcie „zbędnych” fragmentów oraz połączenie w jedną powierzchnię) i wykonanie polecenia Split w celu modyfikacji kształtu modelu bryłowego może być zastosowana dla pozostałych szczegółów konstrukcyjnych.

Rys11
Rys. 11

Rezultat takiej procedury rekonstrukcji jest parametryczny, ale nie jest to jedyne z możliwych rozwiązań. Jaki obiekt jest najczęściej stosowany w modelach parametrycznych? Odpowiedź jest chyba oczywista: kontur, szkic (Sketch w nomenklaturze systemu CATIA V5).
W procesie rekonstrukcji płaskie „krzywe” mogą być zamienione na kontury, czyli obiekty typu Sketch. Użyłem określenia „krzywe”, bo rezultat wykonania polecenia Planar Sections (z wyłączonym trybem Flip to curve creation) jest tylko zbiorem punktów siatki zredukowanym do wybranej płaszczyzny, a nie rzeczywistą krzywą (Rys. 12).

Rys12
Rys. 12

Jeśli, co oczywiste w pierwszym kroku, celem jest definicja konturu, który określa zewnętrzny kształt rekonstruowanego elementu (bez szczegółów konstrukcyjnych), to istotnym w określeniu tego kształtu elementem jest obiekt Planar Sections.1 (Planar Sections.2, jako nieistotny na tym etapie procesu rekonstrukcji, może być usunięty).
W kolejnym kroku należy zastosować polecenie Sketch from Scan z aktywnym trybem Primitive, (Rys. 13).

Rys13
Rys. 13

W tym trybie rekonstruowany kontur może być zbudowany z odcinków linii prostej, łuku okręgu lub elipsy. Dla każdego segmentu rozpoznawanego konturu wykonanie tego polecenia jest możliwe w trybie automatycznym (Automatic) lub wymuszonym przez konstruktora (Line, Circle, Ellipse lub Nothing – jeśli zaznaczony element nie ma być rozpoznany). Kształt zewnętrzny rekonstruowanej części z powodów metodologicznych nie powinien być definiowany za pomocą skomplikowanych konturów i dlatego zaokrąglenia narożników zostały pominięte, bo te szczegóły geometryczne zostaną zdefiniowane w końcowej fazie rekonstrukcji za pomocą polecenia Edge Fillet w środowisku Part Design.


W czasie wykonywania polecenia Sketch from scan warto włączyć tryb Display local deviations, aby uzyskać informację na temat dokładności rekonstrukcji.
W rozważanym przykładzie wynikiem zastosowania tego polecenia jest obiekt Sketch.1 z pięcioma odcinkami liniowymi, a każdy z nich ma zdefiniowana relację typu Fixed (Rys. 14 A). Kontur nie jest ciągły, bo nie rozpoznano wszystkich jego segmentów i dlatego musi być zmodyfikowany:

  • Ciągłość konturu uzyskamy po zastosowaniu polecenia Trim (Rys. 14 B),
  • Jeśli wymagana jest modyfikacja kształtu tego konturu, to trzeba usunąć relacje typu Fixed i zastąpić je innymi w taki sposób, aby możliwa była parametryczna modyfikacja geometrii. Na przykład (Rys. 14 C):
    • Relacje poziomości (Horizontal) lub pionowości (Vertical) odcinków liniowych, które są widoczne w strukturze modelu jako równoległość (Parallelism) do kierunków głównych,
    • Relacje wymiarowe: długość (Length) lub kąt (Angle).

Od tej pory wartość każdego parametru konturu Sketch.1 może być modyfikowana (Rys. 14 D).

Rys14
Rys. 14

Kontur Sketch.1 ma być zastosowany w definicji bryły typu Pad i dlatego trzeba jeszcze ustalić grubość tej bryły. W tym celu można zdefiniować płaską powierzchnię (Basic Surface Recognition: Plane.4 na rysunku 15) i zdefiniować bryłę Pad.1 w trybie First Limit/Type = Up to plane i Limit = Plane.4/Face.1.

Rys15
Rys. 15

Jeśli w jakimś obszarze kształt nie może być zdefiniowany za pomocą powierzchni kanonicznych, to trzeba zastosować polecenie inne niż Basic Surface Recognition. W tym celu trzeba wyodrębnić obszar siatki, który ma być rekonstruowany – na przykład polecenie Activate z aktywnym trybem Brush. W tym trybie definicja obszaru polega na „malowaniu siatki za pomocą pędzla” o zadanym promieniu (Rys. 16).

Rys16
Rys. 16

Rekonstrukcję dowolnie wybranego obszaru siatki można wykonać na kilka sposobów:
Metoda klasyczna (krzywe-powierzchnia): definicja krzywych (polecenia Planar Sections lub Curve On Mesh), modyfikacje krzywych (polecenia Clean Contour lub Curves Network) i wreszcie definicja powierzchni (polecenia PowerFit, Multi-sections Surface, Surfaces Network lub Automatic Surface),
Bezpośrednia rekonstrukcja powierzchni na podstawie siatki: polecenia PowerFit lub Automatic Surface (Rys. 17).

Rys17
Rys. 17

Polecenie PowerFit zastosowane tylko dla siatki, czyli bez wskazania krzywych brzegowych (Outer Boundary, Inner Boundary) i powierzchni podstawowej (Initial Surface) w rozważanym przykładzie generuje powierzchnię, która nie spełnia wymagań konstrukcyjnych (Max deviation = 0,4988mm > 0,1mm). Lepszy rezultat daje zastosowanie polecenia Automatic Surface (Max Surface deviation = 0,08001mm). Trzeba jednak zauważyć, że żadne z tych poleceń nie generuje parametrycznego rezultatu, a przecież taki był cel postawiony na etapie definiowania zadania.
Wybrany fragment siatki powinien być zrekonstruowany jako powierzchnia wyciągana (patrz: analiza rozkładu krzywizny siatki STL na rysunku 2) i dlatego najłatwiej zastosować polecenie Extrude w środowisku Generative Shape Design. Do tego , zgodnie z założeniami wstępnymi, potrzebna jest krzywa parametryczna i dlatego w pierwszym kroku za pomocą polecenia Planar Sections i z aktywnym trybem generowania krzywej (Flip to curve creation) należy zdefiniować krzywą przekroju (Rys. 18).

Rys18
Rys. 18

Jak ustalić płaszczyznę referencyjną tego przekroju (pole Reference w oknie Planar Sections)? W tym przykładzie może to być płaszczyzna równoległa do płaszczyzny głównej yz plane lub do jednej z płaskich powierzchni zrekonstruowanych wcześniej. Stopień (Max. Order) oraz maksymalna liczba segmentów (Max. Segments) rekonstruowanej krzywej mogą być zadane w oknie Curve from Scan. Tu także można włączyć analizę dokładności (Display the maximum deviation) – w tym przykładzie Max = 0,0776mm < 0,1mm.
Krzywa Curve.1 nie jest parametryczna i dlatego konieczna jest jej „parametryczna rekonstrukcja”. Nie można w tym przypadku zastosować polecenia Sketch from Scan, bo krzywa Curve.1 ma kształt swobodny, czyli nie jest „sklejona” z segmentów liniowych i/lub łuków okręgu. Z tego powodu proponuję zastosować procedurę ręczną, w której w środowisku Sketcher zdefiniujemy krzywą typu Spline jak najbardziej zbliżoną do krzywej Curve.1. Przed uruchomieniem polecenia Sketch trzeba zdefiniować płaszczyznę (tu: Plane.1) wyznaczoną przez płaską krzywą Curve.1, a następnie:
Wykonać rzut (polecenie Projection) w trybie konstrukcyjnym (aktywny tryb Construction element) krzywej Curve.1 na płaszczyznę konturu Sketch.2 (Rys. 19A).
Za pomocą polecenia Spline zdefiniować krzywą (Rys. 19B), której punkty leżą na wykonanym wcześniej rzucie krzywej Curve.1 (system automatycznie definiuje relację typu Coincidence). Liczba punktów zależy oczywiście od długości i kształtu krzywej Curve.1 oraz, co chyba oczywiste, od zadanej dokładności rekonstrukcji: każdy punkt krzywej Sketch.2 powinien znajdować się w odległości nie większej niż wymagana dokładność od jego rzutu prostopadłego na krzywą Curve.1.

Rys19
Rys. 19

Nie dotyczy to punktów węzłowych krzywej Sketch.1/Spline.1, bo te są położone dokładnie na krzywej Curve.1 i dlatego do jednoznacznej definicji kształtu wystarczy ustalić odległość tych węzłów od osi H lub V.
Jeśli wartość pomiaru maksymalnej odległości krzywych Curve.1 i Sketch.2 (Rys. 20) jest zbyt duża (większa od wymaganej dokładności), to należy zwiększyć liczbę punktów węzłowych krzywej Sketch.2/Spline.1 i/lub zmienić ich położenie.

Rys20
Rys. 20

Zmianę położenia punktów węzłowych można wykonać ręcznie, modyfikując wymiary w środowisku Sketcher (Rys. 19B) lub automatycznie (Rys. 21) po zdefiniowaniu zadania optymalizacyjnego w środowisku Product Engineering Optimizer.

Rys21
Rys. 21

Proces definiowania kolejnych elementów powierzchniowych (tu Extrude.5, Extrapol.1, Plane.6, Trim.1 na rysunku 22) oraz ich integrację z modelem bryłowym (Split.1) jest chyba na tyle oczywisty, że szczegółowy opis można pominąć.

Rys22
Rys. 22

Po zdefiniowaniu kształtu zewnętrznego odtwarzanej bryły można przystąpić do definiowania szczegółów konstrukcyjnych. Te mogą być odtworzone za pomocą poleceń Basic Surface Definition lub Sketch from scan. Praktyczna metoda rekonstrukcji takich elementów polega na wyodrębnieniu fragmentu siatki STL (polecenie Activate w trybie Trap, Brush lub Flood), definicji przekroju (polecenie Planar Sections) oraz zamiana takiego przekroju na obiekt typu Sketch (Planar Sections.2 na Sketch.3 na rysunku 23).

Rys23
Rys. 23

Na bazie takiego konturu można dalej (Rys. 24) zdefiniować powierzchnię typu Extrude (tu: Extrude.10), płaską powierzchnię dna (tu: Plane.9), wykonać operację Trim i zintegrować rezultat tej operacji z modelem bryłowym (Split).

Rys24
Rys. 24

Rekonstrukcja pozostałych szczegółów konstrukcyjnych może być wykonana za pomocą takiej samej lub bardzo podobnej procedury.
Kolejny etap rekonstrukcji to ustalenie parametrów fazowania i zaokrąglania krawędzi. W tym celu, podobnie jak wcześniej, można wyodrębnić fragment siatki STL i zdefiniować kilka krzywych przekrojowych (polecenie Planar Sections z włączonym trybem Flip to curve creation). Dla każdej z tych krzywych (Curve.2, …Curve.5 na rysunku 25) można wykonać analizę rozkładu krzywizny (Porcupine Curvature) i w ten sposób ustalić wartość promienia zaokrąglenia krawędzi, jaki należy zastosować w modelu bryłowym dla analizowanego obszaru siatki STL.

Rys25
Rys. 25

W ostatnim kroku warto wykonać porównanie parametrycznej definicji bryły z importowaną siatką STL. Takie porównanie może być wykonane pomiędzy siatką STL a powierzchnią zewnętrzną bryły. W tym celu należy wykonać polecenie Extract w trybie Propagation type = Point continuity (tu: Extract.1 na rysunku 26) i zastosować polecenie Deviation Analysis.

Rys26
Rys. 26

Jeśli dokładność rekonstrukcji jest w jakimś obszarze zbyt mała, to trzeba wykonać odpowiednie modyfikacje, a te w modelu parametrycznym nie powinny być większym problemem.
Realizacja opisanej tu procedury konstrukcyjnej jest możliwa z licencjami Digitized Shape Editor (DSE), Quick Surface Reconstruction (QSR), Generative Shape Design (GSD) oraz Part Design (PDG) jeśli końcowy model ma być bryłą. Block ma niezbyt skomplikowany kształt i dlatego metoda jego rekonstrukcji jest relatywnie prosta. Istotą tej metody jest odpowiednie pozycjonowanie pliku źródłowego (Block.stl) w przestrzeni roboczej oraz zastosowanie wszędzie, gdzie to jest możliwe parametrycznych obiektów geometrycznych (powierzchni i konturów). Dzięki zastosowaniu takiej procedury modyfikacje modelu końcowego są możliwe w takim zakresie, na ile parametryczne są zrekonstruowane obiekty pośrednie.

Andrzej Wełyczko

 

artykuł pochodzi z wydania 11 (122) listopad 2017