{"id":3320,"date":"2015-12-25T14:35:02","date_gmt":"2015-12-25T13:35:02","guid":{"rendered":"http:\/\/svarthaletracing.se\/?p=3320"},"modified":"2015-12-31T01:02:44","modified_gmt":"2015-12-31T00:02:44","slug":"impeller-bryderi-loses-med-programmeringsnorderi","status":"publish","type":"post","link":"https:\/\/svarthaletracing.se\/?p=3320","title":{"rendered":"Impeller-bryderi l\u00f6ses med programmeringsn\u00f6rderi"},"content":{"rendered":"<p>Det \u00e4r s\u00e4llan man f\u00e5r chansen att hj\u00e4lpa <a href=\"http:\/\/mobackenracing.se\" target=\"_blank\">Mobacken-killarna<\/a> med n\u00e5got de inte skulle klarat sj\u00e4lva, s\u00e5 sj\u00e4lvklart tar man chansen att sp\u00e4nna musklerna n\u00e4r tillf\u00e4lle ges.<\/p>\n<p>Anders \u00e4r nu i full f\u00e4rd med att konstruera\/bygga <a href=\"http:\/\/www.mobackenracing.se\/?cat=31\" target=\"_blank\">en v\u00e4rre gasturbinmotor<\/a> till sin motorcykel och i samband med detta s\u00e5 har n\u00e5gon snubbe (<a href=\"http:\/\/3d-scanning.se\/\" target=\"_blank\">3D-scanning.se<\/a>) 3D-skannat impeller och turbin \u00e5t honom. 3D-skanningen resulterar STL-filer, och vad Anders vill \u00e4r att fr\u00e5n dessa f\u00e5 fram en modell av hur motsvarande turbinhus ska se ut.<\/p>\n<p><a href=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/impeller1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3321\" src=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/impeller1.png\" alt=\"impeller1\" width=\"924\" height=\"738\" srcset=\"https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/impeller1.png 924w, https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/impeller1-601x480.png 601w\" sizes=\"auto, (max-width: 924px) 100vw, 924px\" \/><\/a><\/p>\n<p>&#8221;Skitenkelt&#8221; t\u00e4nkte jag som det proffs jag ans\u00e5g mig vara, men togs r\u00e4tt kvickt ner p\u00e5 jorden igen. Det hela resulterade i en del klurande, och en del l\u00e4rdomar &#8211; vilket man s\u00e5klart aldrig tackar nej till. T\u00e4nkte att jag kunde dela med mig lite.<\/p>\n<h2>Vad \u00e4r en STL-fil?<\/h2>\n<p>STL st\u00e5r f\u00f6r &#8221;Stereo Lithography&#8221;, och \u00e4r ett s\u00e4tt att representera tredimensionella objekt i dataform. Ett solitt objekt hanteras som &#8221;ih\u00e5ligt&#8221;, d.v.s. det har bara en yta och man tar inte h\u00e4nsyn till vad som finns inuti detta. Ytan i sin tur \u00e4r uppbyggd av trianglar, som var och en representeras av tre koordinater &#8211; en f\u00f6r varje h\u00f6rn, samt en vektor (pilen i bilden nedan) som indikerar vilken sida av triangeln som utg\u00f6r f\u00f6rem\u00e5lets utsida.<\/p>\n<div id=\"attachment_3323\" style=\"width: 269px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/www.fabbers.com\/tech\/STL_Format\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3323\" class=\"wp-image-3323 size-full\" src=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/StL-facet.gif\" alt=\"StL-facet\" width=\"259\" height=\"178\" \/><\/a><p id=\"caption-attachment-3323\" class=\"wp-caption-text\">http:\/\/www.fabbers.com\/tech\/STL_Format<\/p><\/div>\n<p>N\u00e4r trianglarna fogas samman s\u00e5 bildas ett &#8221;n\u00e4t&#8221;. D\u00e4rf\u00f6r kallas resultatet ofta f\u00f6r &#8221;mesh&#8221;.<\/p>\n<div id=\"attachment_3322\" style=\"width: 490px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/commons.wikimedia.org\/wiki\/File:STL-file.jpg\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3322\" class=\"wp-image-3322 size-full\" src=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/480px-STL-file.jpg\" alt=\"480px-STL-file\" width=\"480\" height=\"480\" srcset=\"https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/480px-STL-file.jpg 480w, https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/480px-STL-file-150x150.jpg 150w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><p id=\"caption-attachment-3322\" class=\"wp-caption-text\">By LaurensvanLieshout (Own work) [GFDL (http:\/\/www.gnu.org\/copyleft\/fdl.html) or CC BY-SA 3.0 (http:\/\/creativecommons.org\/licenses\/by-sa\/3.0)], via Wikimedia Commons<\/p><\/div>\n<h2>Problemet?<\/h2>\n<p>Ja vad \u00e4r problemet egentligen? Jo, det f\u00f6rsta problemet var min okunskap. Jag \u00e4r van att anv\u00e4nda 3D-CAD-program (Autodesk Inventor) och trodde att detta skulle vara som klippt och skuret f\u00f6r att l\u00f6sa Anders lilla bryderi.<\/p>\n<p>Det Anders vill \u00e4r att f\u00e5 ut den profil som &#8221;bildas&#8221; om man ser impellern fr\u00e5n sidan, roterar den och projicerar den p\u00e5 en bakgrund. Den kontur som d\u00e5 bildas \u00e4r precis den form man vill ha p\u00e5 huset som ska omsluta impellern.<\/p>\n<p><a href=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/impeller.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3324\" src=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/impeller.png\" alt=\"impeller\" width=\"646\" height=\"353\" srcset=\"https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/impeller.png 646w, https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/impeller-640x350.png 640w\" sizes=\"auto, (max-width: 646px) 100vw, 646px\" \/><\/a><\/p>\n<p>Det visade sig dock inte riktigt vara s\u00e5 enkelt. Inventor \u00e4r en mjukvara som man anv\u00e4nder f\u00f6r att konstruera saker. De konstruktioner man g\u00f6r best\u00e5r (v\u00e4ldigt f\u00f6renklat) av olika &#8221;primitiva former&#8221;, t.ex. cylindrar, kuber etc. som tillsammans utg\u00f6r olika objekt. En godtycklig tredimensionell pryl som skannats in till en STL-modell har inte r\u00e4tt uppbyggnad f\u00f6r att direkt kunna hanteras av Inventor.<\/p>\n<p>Det finns ett till\u00e4gg till Inventor som heter Mesh Enabler, som kan analysera STL-filen och f\u00f6rs\u00f6ka bryta ner hela modellen till primitiva former som Inventor st\u00f6djer. Jag laddade ner Mesh Enabler och gjorde ett f\u00f6rs\u00f6k, utan s\u00e4rskilt bra resultat, d.v.s. det fungerade inte alls. D\u00e4rf\u00f6r blev det till att ta till plan B&#8230;<\/p>\n<h2>Plan B<\/h2>\n<p>Varje g\u00e5ng man ska b\u00f6rja arbeta med ett nytt filformat s\u00e5 m\u00e5ste man ta reda p\u00e5 hur detta \u00e4r uppbyggt. Alla filer som lagras i datorn best\u00e5r av en m\u00e4ngd datav\u00e4rden av formatet <em>byte<\/em>. En byte kan anta ett v\u00e4rde fr\u00e5n 0 till 255. Detta \u00e4r inte s\u00e5 hemskt anv\u00e4ndbart i de flesta fall, d\u00e5 man kan beh\u00f6va representera betydligt st\u00f6rre och mindre v\u00e4rden \u00e4n s\u00e5. D\u00e4rf\u00f6r kan man l\u00e5ta flera byte tillsammans representera st\u00f6rre v\u00e4rden.<\/p>\n<p>T.ex. s\u00e5 kan man l\u00e5ta 4 bytes representera ett flyttalsv\u00e4rde (decimaltal) mellan -3,4028235E+38 och 3,4028235E+38, vilket i runda sl\u00e4ngar blir +\/- 3,4 med 38 nollor efter. Detta \u00e4r det format (allm\u00e4nt kallat <em>datatyp<\/em>) som anv\u00e4nds i STL-filer. Om man programmerar Visual Basic s\u00e5 ben\u00e4mns detta <em>Single <\/em>och i m\u00e5nga andra programeringsspr\u00e5k kallas datatypen<em> Float<\/em>.<\/p>\n<p>P\u00e5 <a href=\"http:\/\/www.fabbers.com\/tech\/STL_Format\" target=\"_blank\">den h\u00e4r hemsidan<\/a> hittade jag det jag beh\u00f6vde. Det visade sig att uppbyggnaden p\u00e5 en STL-fil \u00e4r v\u00e4ldigt enkel. Filen b\u00f6rjar med 80 bytes som inneh\u00e5ller en del generell information, som f\u00f6ljs av 4 bytes som tillsammans talar om hur m\u00e5nga trianglar filen inneh\u00e5ller. Efter de inledande 84 byten s\u00e5 kommer definitionerna av alla trianglar. Varje triangel definieras av totalt 50 bytes vardera.<br \/>\nFilen jag fick av Anders \u00e4r enorm! 180 Mb l\u00e5ter kanske inte s\u00e5 mycket, men detta betyder faktiskt att man har 3 772 310 att g\u00e5 igenom. Lite mer \u00e4n vad jag skulle vilja g\u00f6ra manuellt \u00f6ver en kopp kaffe. Blir till att programmera ist\u00e4llet.<\/p>\n<h2>Programmet<\/h2>\n<p>S\u00e5dana h\u00e4r uppgifter \u00e4r faktiskt f\u00f6rbaskat kul. Vid det h\u00e4r laget vet jag:<\/p>\n<p>1. Vad jag vill uppn\u00e5<br \/>\n2. Vad en STL-fil \u00e4r f\u00f6r n\u00e5got<br \/>\n3. Hur STL-filen \u00e4r uppbyggd.<\/p>\n<p>Det jag inte r\u00e4knat ut \u00e4n \u00e4r vilken metod jag ska anv\u00e4nda. Jag best\u00e4mde mig efter en del funderande f\u00f6r f\u00f6ljande metod, som senare skulle implementeras i kod:<\/p>\n<p><strong>Metod<\/strong><br \/>\n1. L\u00e4s in hela STL-filen till datorns arbetsminne.<br \/>\n2. L\u00e4s ut hur m\u00e5nga trianglar den inneh\u00e5ller.<br \/>\n3. Loopa igenom alla trianglar f\u00f6r att kontrollera modellens storlek. Detta g\u00f6r jag f\u00f6r att veta var i &#8221;rymden&#8221; objektet ligger.<br \/>\n4. Dela upp modellen i ett antal skikt, och kontrollera f\u00f6r varje skikt hur stor diameter detta har (se bilderna nedan).<br \/>\n5. Sammanfoga diametrarna fr\u00e5n varje skikt till en kontur och exportera denna som en vanlig 2D-CAD-fil (dxf).<\/p>\n<p><a href=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/slices1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3326\" src=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/slices1.png\" alt=\"slices1\" width=\"846\" height=\"460\" srcset=\"https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/slices1.png 846w, https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/slices1-640x348.png 640w\" sizes=\"auto, (max-width: 846px) 100vw, 846px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/slices2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3327\" src=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/slices2.png\" alt=\"slices2\" width=\"873\" height=\"703\" srcset=\"https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/slices2.png 873w, https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/slices2-596x480.png 596w\" sizes=\"auto, (max-width: 873px) 100vw, 873px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/slices3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3325\" src=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/slices3.png\" alt=\"slices3\" width=\"499\" height=\"491\" srcset=\"https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/slices3.png 499w, https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/slices3-488x480.png 488w\" sizes=\"auto, (max-width: 499px) 100vw, 499px\" \/><\/a><\/p>\n<p>Bilderna har jag genererat med gratismjukvaran MeshLab. Nu n\u00e4r jag r\u00e4knat ut en metod s\u00e5 var det bara till att skrida till verket. 160 rader fulkod senare s\u00e5 hade jag ett resultat.<\/p>\n<p><a href=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/kod.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3328\" src=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/kod.png\" alt=\"kod\" width=\"664\" height=\"746\" srcset=\"https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/kod.png 664w, https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/kod-427x480.png 427w\" sizes=\"auto, (max-width: 664px) 100vw, 664px\" \/><\/a><\/p>\n<p>Alla program m\u00e5ste ha ett bra anv\u00e4ndargr\u00e4nssnitt. Utformande av s\u00e5dana \u00e4r inte riktigt min styrka, men i det h\u00e4r fallet blev jag n\u00f6jd:<\/p>\n<p><a href=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/program.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3329\" src=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/program.png\" alt=\"program\" width=\"741\" height=\"311\" srcset=\"https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/program.png 741w, https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/program-640x269.png 640w\" sizes=\"auto, (max-width: 741px) 100vw, 741px\" \/><\/a><\/p>\n<p>Den lilla information som finns att f\u00e5 under processen rullar fram i textform:<\/p>\n<p><a href=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/debugOutput.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3330\" src=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/debugOutput.png\" alt=\"debugOutput\" width=\"278\" height=\"291\" \/><\/a><\/p>\n<p>Det \u00e4r s\u00e5dana h\u00e4r g\u00e5nger man blir imponerad av datorer. Ofta upplever man dem som sl\u00f6a, men n\u00e4r man g\u00f6r program som \u00e4r dedikerade till att l\u00f6sa en specifik uppgift s\u00e5 g\u00e5r det undan! Det h\u00e4r programmet, som \u00e4r fulkodat, taskigt optimerat och dessutom k\u00f6rs i debugl\u00e4ge i Visual Studio tar <strong>knappt 7 sekunder<\/strong> p\u00e5 sig att ladda in ~180 Mb fr\u00e5n h\u00e5rddisken, loopa igenom drygt <strong>188 miljoner bytes<\/strong> <strong>tv\u00e5 g\u00e5nger<\/strong>, g\u00f6ra ber\u00e4kningar p\u00e5 dessa samt generera en CAD-fil med resultatet. P\u00e5 en 6 \u00e5r gammal dator!<\/p>\n<p><a href=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/andersProfil.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3332\" src=\"http:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/andersProfil.png\" alt=\"andersProfil\" width=\"632\" height=\"618\" srcset=\"https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/andersProfil.png 632w, https:\/\/svarthaletracing.se\/wp-content\/uploads\/2015\/12\/andersProfil-491x480.png 491w\" sizes=\"auto, (max-width: 632px) 100vw, 632px\" \/><\/a><\/p>\n<p>Helt f\u00e4rdigt \u00e4r det dock inte. Jag kan beh\u00f6va &#8221;kalibrera&#8221; modellen lite, s\u00e5 jag tror att jag l\u00e5ter Anders ta n\u00e5gra enkla m\u00e5tt p\u00e5 den som jag kan anv\u00e4nda f\u00f6r att kompensera i ber\u00e4kningarna i programmet om det skulle vara n\u00f6dv\u00e4ndigt!<\/p>\n<p><strong>Piece of cake!<\/strong><\/p>\n<p>(Edit: <a href=\"http:\/\/www.mobackenracing.se\/?p=6658\" target=\"_blank\">H\u00e4r ser ni Mobacken-Anders arbeta vidare med profilen jag genererat<\/a>).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Det \u00e4r s\u00e4llan man f\u00e5r chansen att hj\u00e4lpa Mobacken-killarna med n\u00e5got de inte skulle klarat sj\u00e4lva, s\u00e5 sj\u00e4lvklart tar man chansen att sp\u00e4nna musklerna n\u00e4r tillf\u00e4lle ges. Anders \u00e4r nu i full f\u00e4rd med att konstruera\/bygga en v\u00e4rre gasturbinmotor till &hellip; <a href=\"https:\/\/svarthaletracing.se\/?p=3320\">Forts\u00e4tt l\u00e4sa <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,26],"tags":[],"class_list":["post-3320","post","type-post","status-publish","format-standard","hentry","category-allmant","category-faktarutorguider"],"_links":{"self":[{"href":"https:\/\/svarthaletracing.se\/index.php?rest_route=\/wp\/v2\/posts\/3320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/svarthaletracing.se\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/svarthaletracing.se\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/svarthaletracing.se\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/svarthaletracing.se\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3320"}],"version-history":[{"count":5,"href":"https:\/\/svarthaletracing.se\/index.php?rest_route=\/wp\/v2\/posts\/3320\/revisions"}],"predecessor-version":[{"id":3351,"href":"https:\/\/svarthaletracing.se\/index.php?rest_route=\/wp\/v2\/posts\/3320\/revisions\/3351"}],"wp:attachment":[{"href":"https:\/\/svarthaletracing.se\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/svarthaletracing.se\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/svarthaletracing.se\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}