สารบัญ:

Raspberry Pi Laser Scanner: 9 ขั้นตอน (พร้อมรูปภาพ)
Raspberry Pi Laser Scanner: 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Raspberry Pi Laser Scanner: 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Raspberry Pi Laser Scanner: 9 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: เซ็ตระบบสแกนภาพลงแชร์โฟลเดอร์บนบอร์ด Raspberry Pi : PART1 [คันทรีโชว์ #51] 2024, กรกฎาคม
Anonim
Image
Image
เครื่องสแกนเลเซอร์ Raspberry Pi
เครื่องสแกนเลเซอร์ Raspberry Pi

Laser Scanner เป็นอุปกรณ์ระบบฝังตัวของ Raspberry Pi ที่สามารถแปลงวัตถุให้เป็นดิจิทัลเป็นไฟล์.obj mesh เพื่อทำสำเนาโดยใช้การพิมพ์ 3 มิติ อุปกรณ์นี้ทำได้โดยใช้เลเซอร์เส้นและ PiCam ในตัวเพื่อทำการมองเห็นด้วยคอมพิวเตอร์ เลเซอร์อยู่ในตำแหน่งเอียง 45 องศาจากเลเซอร์ และฉายเส้นสีแดงสดบนชิ้นแนวตั้งชิ้นเดียวของวัตถุ กล้องตรวจจับระยะห่างของสไลซ์จากจุดศูนย์กลางเพื่อให้เป็นเมชสไลซ์ วัตถุถูกหมุนบนถาดที่หมุนได้ และกระบวนการจะทำซ้ำจนกว่าจะสแกนวัตถุทั้งหมด ไฟล์.obj ที่สร้างขึ้นจะถูกส่งไปยังผู้ใช้ในท้ายที่สุด ทำให้ระบบเป็นแบบสแตนด์อโลนและฝังตัวอย่างสมบูรณ์

คำแนะนำนี้จะอธิบายวิธีการสร้างอุปกรณ์ ผลลัพธ์บางส่วน และขั้นตอนในอนาคต

ขั้นตอนที่ 1: แรงบันดาลใจ

แรงบันดาลใจ
แรงบันดาลใจ
แรงบันดาลใจ
แรงบันดาลใจ

ในฐานะที่เป็นนักประดิษฐ์ตัวยง ฉันทำงานด้านการพิมพ์ 3 มิติและการสร้างแบบจำลองที่แข็งแกร่งมาหลายปีแล้ว ฉันได้ทำงานกับเครื่องมือสร้างต้นแบบที่แตกต่างกันมากมายตั้งแต่เราเตอร์ CNC ไปจนถึงเครื่องตัดเลเซอร์ไปจนถึงเครื่องพิมพ์ 3 มิติ อุปกรณ์หนึ่งที่ผู้ผลิตในพื้นที่ของฉันยังไม่ได้ซื้อคือเครื่องสแกน 3 มิติ และฉันสามารถบอกคุณได้ว่าทำไมถึงต้องซื้อ

อันที่ถูกกว่า (ไม่กี่ร้อยเหรียญ) ไม่น่าเชื่อถือ ต้องการเงื่อนไขที่สมบูรณ์แบบ และยังคงให้ผลลัพธ์ที่ค่อนข้างโทรม อันราคาแพงนั้น… ก็แพง มีราคาสูงถึงหลายพันดอลลาร์ ทำให้ฟังก์ชั่นของมันไม่คุ้มในหลายกรณี ยิ่งไปกว่านั้น หลายครั้งที่ฉันไม่เลือกใช้การวัดและออกแบบแบบจำลองตั้งแต่เริ่มต้น มากกว่าที่จะจัดการกับพื้นผิวที่สร้างขึ้นจากการสแกน

ด้วยเหตุนี้ ฉันต้องการสร้างเครื่องสแกนแบบสแตนด์อโลนราคาประหยัดเพื่อดูว่าฉันสามารถสแกนวัตถุโดยใช้ส่วนประกอบจากชั้นวางได้ดีเพียงใด

หลังจากทำการวิจัยแล้ว ฉันพบว่าเครื่องสแกน 3D จำนวนมากใช้แพลตฟอร์มที่หมุนได้ จากนั้นจึงใช้เซ็นเซอร์ต่างๆ ที่หลากหลายเพื่อวัดระยะห่างจากจุดศูนย์กลางเพื่อสร้างแบบจำลองการหมุน หลายตัวใช้กล้องคู่แบบเดียวกับ Kinect ในที่สุดฉันก็สะดุดกับ Yscanner ซึ่งเป็นเครื่องสแกนความละเอียดต่ำที่ใช้เลเซอร์ เมื่อพิจารณาจากความเรียบง่ายและความเป็นไปได้ เทคนิคเลเซอร์นี้ ซึ่งเลเซอร์จะฉายแสงชดเชยเมื่อเทียบกับกล้องเพื่อวัดระยะห่างจากจุดศูนย์กลาง ดูเหมือนเป็นเส้นทางที่ชัดเจนไปข้างหน้า

ขั้นตอนที่ 2: เครื่องมือและชิ้นส่วน

อะไหล่:

  • ราสเบอร์รี่ Pi $35.00
  • กล้อง Raspberry Pi V2 $30.00
  • ไฟ LED ตัวต้านทานและสายไฟ
  • เส้นใยการพิมพ์ 3 มิติ
  • แผ่นไม้ 12x12x0.125 แผ่น
  • ฮาร์ดแวร์ M3
  • สเต็ปเปอร์มอเตอร์ - $14
  • เลเซอร์เส้น - $8
  • ไดรเวอร์ LN298 สเต็ปเปอร์มอเตอร์ - $2.65
  • ปุ่มกดโลหะ - $5

เครื่องมือ:

  • หัวแร้ง
  • เครื่องตัดเลเซอร์
  • เครื่องพิมพ์ 3 มิติ
  • ไขควง
  • คีม

ขั้นตอนที่ 3: การออกแบบระดับสูง

การออกแบบระดับสูง
การออกแบบระดับสูง
การออกแบบระดับสูง
การออกแบบระดับสูง

องค์ประกอบหลักในการออกแบบนี้คือเลเซอร์เส้นที่ฉายบนชิ้นแนวตั้งของวัตถุ การฉายภาพนี้สามารถจับภาพได้บน picamera แก้ไขเปอร์สเปคทีฟ แล้วกรองออกก่อนการประมวลผลภาพ ในการประมวลผลภาพ สามารถรวบรวมระยะห่างระหว่างแต่ละส่วนของเส้นจากจุดศูนย์กลางของวัตถุได้ ในพิกัดแนวรัศมี รูปภาพนี้จะให้ผลทั้งองค์ประกอบ r และ z มิติที่สาม Θ ทำได้โดยการหมุนวัตถุเป็นชิ้นใหม่ แนวคิดนี้แสดงในรูปแรก

ในการดำเนินการตามที่อธิบายไว้ข้างต้น ฉันใช้ Raspberry Pi เป็นหน่วยประมวลผลกลางของเรา ฉันติดสเต็ปเปอร์มอเตอร์และไดรเวอร์มอเตอร์เข้ากับ Pi ซึ่งขับเคลื่อนโดยแหล่งจ่ายไฟ 5V ภายนอกและควบคุมโดยพิน GPIO ของ Pi วางเลเซอร์เส้นบนสาย 3.3 V บน Pi และติด PiCam เข้ากับอินพุตของกล้องบน Pi สุดท้าย มีการติดตั้งปุ่มแบบดึงลงอย่างง่าย และไฟ LED แสดงสถานะเพื่อระบุให้ผู้ใช้ทราบว่าระบบอยู่ในสถานะใด ระบบทั้งหมดจะสรุปไว้ในแผนภาพบล็อกของระบบ

ตั้งแต่เริ่มแรก ได้มีการวางแผนว่าจะจัดวางอุปกรณ์อิเล็กทรอนิกส์ในกล่องตัดด้วยเลเซอร์ที่ยึดร่วมกับ T-slots และฮาร์ดแวร์ M3 อุปกรณ์อิเล็กทรอนิกส์จะถูกซ่อนจากสายตาในช่องด้านล่างและฝาปิดจะช่วยให้เข้าถึงตำแหน่งวัตถุบนถาดหมุนได้ง่าย ฝาปิดนี้จำเป็นเพื่อลดปริมาณแสงที่รั่วไหลเข้าสู่ระบบ เนื่องจากแสงภายนอกนี้สามารถสร้างสัญญาณรบกวนในการสแกนครั้งสุดท้าย

ขั้นตอนที่ 4: ฮาร์ดแวร์

ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์

ตามที่เห็นด้านบน ก่อนที่ฉันจะเริ่มตัดด้วยเลเซอร์หรือการพิมพ์ 3 มิติ ฉันใช้ Autodesk Fusion 360 เพื่อสร้างแบบจำลอง 3 มิติโดยละเอียดของการออกแบบของเรา โดยภาพรวมแล้ว อุปกรณ์นี้เป็นกล่องธรรมดาที่มีฝาปิดพร้อมบานพับตัดด้วยเลเซอร์ อุปกรณ์มี 2 ชั้นหลัก ได้แก่ เตียงอิเล็กทรอนิกส์และเตียงหลัก โดยมีรูสำหรับวางสายไฟระหว่างสองชั้น

กล่องส่วนใหญ่ของเราผลิตขึ้นด้วยเครื่องตัดเลเซอร์ โดยมีการออกแบบที่ผลิตใน Fusion 360 และตัดด้วยเครื่องตัดเลเซอร์ Epilog Zing 40 W การออกแบบของเราแสดงในรูปด้านบน จากซ้ายบนไปทางขวา ชิ้นส่วนคือเตียงหลัก เตียงอิเล็กทรอนิกส์ ชิ้นส่วนสำหรับฝา 2 ชิ้น ชิ้นหลัง ชิ้นหน้า และชิ้นด้านข้าง 2 ชิ้น ในเตียงหลัก มีช่องเจาะหลักสามช่อง: ช่องแรกสำหรับติดตั้งสเต็ปเปอร์มอเตอร์ ช่องหนึ่งสำหรับกำหนดเส้นทางสายไฟจากเลเซอร์ และอีกช่องสำหรับกำหนดเส้นทางสายเคเบิลกว้างของ PiCam ชิ้นส่วนเตียงมีรูสำหรับยึด Pi, เขียงหั่นขนม และตัวขับมอเตอร์ และช่องเจาะขนาดใหญ่เพื่อเข้าถึงสเต็ปเปอร์มอเตอร์ ฝายึดติดกันเป็นชิ้นสามเหลี่ยมที่เห็นด้านบน และบานพับเป็นแบบอัดรีดอย่างง่ายที่มีความกว้างของเส้นผ่านศูนย์กลางของรูของแผงด้านข้าง ชิ้นส่วนด้านหลังและชิ้นส่วนด้านข้างด้านใดด้านหนึ่งมีช่องด้านข้างเพื่อให้สามารถเข้าถึงพอร์ตของ Pi (HDMI, USB, Ethernet, Power) ได้อย่างง่ายดาย ด้านหน้าเป็นชิ้นส่วนที่เรียบง่าย ซึ่งในที่สุดฉันก็เจาะรูด้วยสว่านมือเพื่อยึดปุ่มและไฟ LED ตามที่เห็นในทุกชิ้นส่วน ชิ้นส่วนของเรายึดเข้าด้วยกันโดยฮาร์ดแวร์ M3 โดยใช้ T-Joints และสล็อต นี่เป็นวิธีการจับชิ้นงานที่ตัดด้วยเลเซอร์ในมุมฉากและปลอดภัย ครีบของชิ้นส่วนต่างๆ เรียงกันกับช่องของชิ้นส่วนอื่นๆ และการตัดรูปตัว t บนขอบทำให้มีที่ว่างสำหรับน็อต M3 ที่จะติดเข้าไปโดยไม่ต้องหมุน ซึ่งช่วยให้เราใช้สกรู M3 เพื่อล็อคชิ้นส่วนต่างๆ เข้าด้วยกันโดยมีพื้นที่ขยับเพียงเล็กน้อยโดยไม่ต้องประกอบให้ถาวร

ฉันเลือกที่จะทำชิ้นงานส่วนใหญ่ของเราด้วยเครื่องตัดเลเซอร์เนื่องจากความเร็วและความง่ายของมัน อย่างไรก็ตาม ฉันยังต้องพิมพ์ 3D บางชิ้นเนื่องจากเรขาคณิต 3D ของพวกเขาที่จะสร้างได้ยากขึ้นบนเครื่องตัด ชิ้นแรกคือที่ใส่สายเลเซอร์ ชิ้นนี้จะต้องติดตั้งบนเตียงหลักที่ 45 องศาจากมุมมองของกล้องและมีรูเพื่อให้เลเซอร์สามารถใส่แรงเสียดทานเข้าไปได้พอดี ฉันยังต้องสร้างที่ยึดมอเตอร์ด้วยเพราะเพลาของมอเตอร์นั้นยาวมาก แรงเสียดทานของตัวยึดพอดีกับชิ้นส่วนที่ตัดด้วยเลเซอร์และลดระดับระนาบที่มอเตอร์ติดอยู่เพื่อให้แท่นหมุนถูกล้างออกด้วยเตียงหลัก

ขั้นตอนที่ 5: อุปกรณ์อิเล็กทรอนิกส์

อิเล็กทรอนิกส์
อิเล็กทรอนิกส์

ฮาร์ดแวร์การเดินสายของโปรเจ็กต์นี้ง่ายมาก เนื่องจากเครื่องสแกน 3 มิติไม่ต้องการอุปกรณ์ต่อพ่วงมากเกินไป มอเตอร์ ปุ่ม LED เลเซอร์ และกล้องจำเป็นต้องเชื่อมต่อกับ Pi ดังที่แสดงไว้ ฉันแน่ใจว่าได้เชื่อมต่อตัวต้านทานแบบอนุกรมกับพินแต่ละตัวที่เราใช้เพื่อป้องกันพิน หนึ่งพิน GPIO ใช้สำหรับควบคุมไฟ LED แสดงสถานะ ซึ่งจะสว่างขึ้นเมื่ออุปกรณ์พร้อมใช้งาน และพัลส์ด้วย PWM เมื่ออุปกรณ์ทำงาน หมุด GPIO อีกอันเชื่อมต่อกับปุ่มแบบดึงขึ้น โดยลงทะเบียนเป็น HIGH เมื่อไม่ได้กดปุ่ม และ LOW เมื่อกดปุ่ม สุดท้ายนี้ ฉันทุ่มเทสี่พิน GPIO เพื่อขับเคลื่อนสเต็ปเปอร์มอเตอร์

เนื่องจากมอเตอร์ของเราต้องก้าวไปในระดับหนึ่งโดยไม่ต้องมีการควบคุมความเร็ว เราจึงเลือกใช้ตัวขับมอเตอร์แบบสเต็ปที่ง่ายกว่า (L298N) ที่เพิ่มเส้นควบคุมเพื่อป้อนเข้าสู่อินพุตของมอเตอร์ เพื่อเรียนรู้เกี่ยวกับวิธีการใช้งานสเต็ปเปอร์มอเตอร์ในระดับต่ำมาก เราได้อ้างอิงทั้งเอกสารข้อมูล L298N และไลบรารี Arduino สเต็ปเปอร์มอเตอร์มีแกนแม่เหล็กพร้อมนิ้วโป้งที่สลับขั้ว สายไฟทั้งสี่ถูกพันไว้เพื่อควบคุมแม่เหล็กไฟฟ้าสองตัวซึ่งแต่ละเส้นส่งกำลังทุกนิ้วที่อยู่ตรงข้ามกันในมอเตอร์ ดังนั้นโดยการเปลี่ยนขั้วของนิ้ว เราสามารถดันสเต็ปเปอร์ได้หนึ่งขั้น ด้วยความรู้เกี่ยวกับวิธีการทำงานของสเต็ปเปอร์จากระดับฮาร์ดแวร์ เราจึงสามารถควบคุมสเต็ปเปอร์ได้ง่ายขึ้นมาก เราเลือกที่จะจ่ายไฟให้กับสเต็ปเปอร์มอเตอร์ของเราจากแหล่งจ่ายไฟ 5V ในห้องแล็บแทนที่จะเป็น Pi เนื่องจากการดึงกระแสไฟสูงสุดที่ประมาณ 0.8 A ซึ่งมากกว่าที่ Pi สามารถจ่ายได้

ขั้นตอนที่ 6: ซอฟต์แวร์

ซอฟต์แวร์
ซอฟต์แวร์
ซอฟต์แวร์
ซอฟต์แวร์
ซอฟต์แวร์
ซอฟต์แวร์
ซอฟต์แวร์
ซอฟต์แวร์

ซอฟต์แวร์สำหรับโครงการนี้สามารถแบ่งออกเป็นสี่องค์ประกอบหลักที่ทำงานร่วมกัน: การประมวลผลภาพ การควบคุมมอเตอร์ การสร้างตาข่าย และฟังก์ชันฝังตัว

โดยสรุปของซอฟต์แวร์ เราสามารถดูที่ตัวเลขแรก ในขณะที่ระบบบูท.bashrc จะเข้าสู่ระบบ Pi โดยอัตโนมัติและเริ่มเรียกใช้โค้ดหลามของเรา ระบบจะเปิดไฟสถานะเพื่อแจ้งให้ผู้ใช้ทราบว่าบูตอย่างถูกต้องแล้วและรอการกดปุ่ม ผู้ใช้สามารถวางสินค้าที่จะสแกนและปิดฝาได้ หลังจากกดปุ่ม ไฟ LED จะกะพริบเพื่อแจ้งให้ผู้ใช้ทราบว่าอุปกรณ์กำลังทำงาน อุปกรณ์จะวนซ้ำระหว่างการประมวลผลภาพและการควบคุมมอเตอร์จนกว่าการหมุนจะเสร็จสิ้นและรวบรวมข้อมูลวัตถุทั้งหมด สุดท้าย ตาข่ายจะถูกสร้างขึ้นและไฟล์จะถูกส่งไปยังอีเมลที่เลือกไว้ล่วงหน้า การดำเนินการนี้จะเริ่มต้นรอบใหม่ และเครื่องพร้อมที่จะทำการสแกนอีกครั้งด้วยการกดปุ่มเพียงปุ่มเดียว

การประมวลผลภาพ

สิ่งแรกที่นำมาใช้คือการประมวลผลภาพที่ถ่ายเพื่อดึงข้อมูลที่จัดเก็บไว้ในภาพให้อยู่ในรูปแบบที่สามารถใช้สร้างอาร์เรย์ของจุดต่างๆ ในอวกาศได้ ในการทำเช่นนี้ ฉันเริ่มต้นด้วยการถ่ายภาพวัตถุบนแท่นพร้อมกับเสียงพื้นหลังทั้งหมดที่เกิดจากแสงเลเซอร์ที่ส่องไปที่ด้านหลังของกล่องและกระจายออกไป ภาพนี้มีปัญหาหลักสองประการในรูปแบบดิบ อย่างแรก วัตถุถูกมองในมุมที่มีเปอร์สเปคทีฟสูง และอย่างที่สอง มีเสียงรบกวนจากพื้นหลังเป็นจำนวนมาก สิ่งแรกที่ฉันต้องทำคือคำนึงถึงมุมมองนี้ เพราะการใช้ภาพถ่ายตามที่เป็นอยู่จะไม่อนุญาตให้เรากำหนดความสูงของวัตถุที่สม่ำเสมอ ดังที่เห็นในรูปที่สอง ความสูงของรูปร่าง "L" กลับหัวนั้นสม่ำเสมอ อย่างไรก็ตาม เนื่องจากด้านหนึ่งยาวกว่าอีกด้านหนึ่ง จึงมีความสูงต่างกันที่ขอบใกล้กับผู้ชมมากที่สุด

ในการแก้ไขปัญหานี้ ฉันต้องแปลงพื้นที่ทำงานในรูปภาพให้เป็นรูปสี่เหลี่ยมผืนผ้าจากรูปทรงสี่เหลี่ยมคางหมูที่เคยเป็น ในการทำเช่นนี้ ฉันใช้โค้ดที่ได้รับจากลิงก์นี้ ซึ่งเมื่อให้รูปภาพและจุดสี่จุด ครอบตัดรูปภาพระหว่างจุดทั้งสี่และแปลงรูปภาพที่ครอบตัดเพื่อชดเชยเปอร์สเปคทีฟ การแปลงนี้ใช้สี่จุดเพื่อสร้างสี่เหลี่ยมผืนผ้าแทนที่จะเป็นรูปทรงสี่เหลี่ยมคางหมูดังที่เห็นในรูปที่สาม

ปัญหาต่อไปที่ต้องแก้ไขคือเสียงรบกวนจากพื้นหลังในรูปของแสงจากภายนอกและแสงที่สะท้อนด้วยเลเซอร์เอง ในการทำเช่นนี้ ฉันกรองแสงโดยใช้ฟังก์ชัน inRange() ของ OpenCV ฉันตั้งค่าธรณีประตูให้รับแสงสีแดงที่ระดับหนึ่งเท่านั้น เพื่อให้ได้ค่าที่ถูกต้อง ฉันเริ่มต้นด้วยเกณฑ์ผ่อนปรนและเพิ่มระดับธรณีสัณฐานต่อไปจนกว่าแสงเดียวที่หยิบขึ้นมาคือแสงเลเซอร์บนวัตถุที่กำลังสแกน เมื่อได้ภาพนี้แล้ว ฉันพบว่าพิกเซลที่สว่างที่สุดในแต่ละแถว ได้เส้นหนึ่งพิกเซลต่อแถวที่ล้อมรอบด้านซ้ายสุดของเส้นเลเซอร์ จากนั้นแต่ละพิกเซลจะถูกแปลงเป็นจุดยอดในพื้นที่ 3 มิติ และจัดเก็บไว้ในอาร์เรย์ ดังที่อธิบายไว้ในส่วนการสร้างตาข่าย ผลลัพธ์ของขั้นตอนเหล่านี้สามารถเห็นได้ในรูปที่สี่

การควบคุมมอเตอร์

หลังจากที่สามารถประมวลผลภาพเดียวได้สำเร็จเพื่อแยกส่วนของวัตถุ ผมต้องสามารถหมุนวัตถุเพื่อถ่ายภาพใหม่ด้วยมุมที่ต่างออกไป ในการทำเช่นนี้ ฉันควบคุมสเต็ปเปอร์มอเตอร์ด้านล่างแพลตฟอร์มที่วัตถุที่กำลังสแกนตั้งอยู่ ฉันสร้างพื้นฐานของฟังก์ชันสเต็ปปิ้งของเราโดยการสร้างตัวแปรเพื่อติดตามสถานะของมอเตอร์และไมโครสเต็ปปิ้งโดยสลับอินพุตของมอเตอร์ทั้งสี่ตัว

การสร้างตาข่ายเพื่อสร้างเมชจากรูปภาพที่ประมวลผลทั้งหมด อันดับแรก ฉันต้องแปลงพิกเซลสีขาวแต่ละพิกเซลในรูปภาพที่ประมวลผลให้เป็นจุดยอดในพื้นที่ 3 มิติ เนื่องจากฉันกำลังรวบรวมชิ้นส่วนแต่ละชิ้นของวัตถุที่มีความสมมาตรของทรงกระบอก จึงควรเริ่มรวบรวมพิกัดทรงกระบอก สิ่งนี้สมเหตุสมผลเนื่องจากความสูงของรูปภาพสามารถแทนแกน z ระยะห่างจากศูนย์กลางของตารางหมุนสามารถแทนแกน R และการหมุนของสเต็ปเปอร์มอเตอร์สามารถแทนแกนที อย่างไรก็ตาม เนื่องจากฉันจัดเก็บข้อมูลในพิกัดทรงกระบอก ฉันต้องแปลงจุดยอดแต่ละจุดเหล่านี้เป็นพิกัดคาร์ทีเซียน

เมื่อจุดยอดเหล่านี้ถูกสร้างขึ้น พวกเขาจะถูกจัดเก็บไว้ในรายการ และรายการดังกล่าวจะถูกจัดเก็บไว้ในรายการอื่นที่มีรายการจุดยอดที่สร้างขึ้นสำหรับแต่ละภาพที่ถ่าย เมื่อภาพทั้งหมดได้รับการประมวลผลและแปลงเป็นจุดยอดแล้ว ฉันต้องเลือกจุดยอดที่ฉันต้องการให้แสดงในเมชสุดท้าย ฉันต้องการรวมจุดยอดด้านบนและจุดยอดด้านล่าง จากนั้นตามความละเอียดที่ฉันเลือกจำนวนจุดยอดที่เว้นระยะห่างเท่าๆ กันเพื่อใช้สำหรับแต่ละภาพ เนื่องจากไม่ใช่รายการจุดยอดทั้งหมดจะมีความยาวเท่ากัน ฉันจึงต้องทำให้มันเท่ากันด้วยการค้นหารายการที่มีจุดยอดน้อยที่สุดและลบจุดยอดออกจากรายการอื่นๆ ทั้งหมดจนกว่าจะเท่ากันทั้งหมด ด้วยรายการจุดยอดที่สร้างขึ้น ตอนนี้ฉันสามารถ สร้างตาข่าย ฉันเลือกจัดรูปแบบตาข่ายของเราตามมาตรฐานไฟล์.obj เนื่องจากเป็นแบบเรียบง่ายและพิมพ์ได้ 3 มิติ

ฟังก์ชันสมองกลฝังตัว

หลังจากที่อุปกรณ์ใช้งานได้ ฉันขัดเกลามันโดยเพิ่มฟังก์ชันที่ฝังไว้เต็มรูปแบบ นี่หมายถึงการลบคีย์บอร์ด เมาส์ และจอภาพ และส่งไฟล์.obj มาให้เราแบบไร้สายหลังจากเสร็จสิ้นการประมวลผล ในการเริ่มต้น ฉันเปลี่ยนรหัส.bashrc เพื่อเข้าสู่ระบบโดยอัตโนมัติและเปิดโปรแกรม python หลักเมื่อเริ่มต้น ทำได้โดยใช้ sudo raspi-config และเลือก "Console Autologin" และเพิ่มบรรทัด "sudo python /home/pi/finalProject/FINAL.py" ไปที่ /home/pi/.bashrc.นอกจากนี้ ฉันยัง เพิ่มปุ่มและไฟ LED แสดงสถานะสำหรับอินพุตและเอาต์พุตของผู้ใช้ ปุ่มนี้จะให้ผู้ใช้บอกอุปกรณ์ว่าจะเริ่มสแกนเมื่อใด และไฟ LED จะแจ้งสถานะของเครื่องให้ผู้ใช้ทราบ หากไฟ LED เปิดอยู่ แสดงว่าอุปกรณ์พร้อมที่จะเริ่มการสแกนใหม่ หากไฟ LED กะพริบ แสดงว่าอุปกรณ์กำลังสแกนอยู่ หากไฟ LED อยู่ในสำนักงาน แสดงว่าซอฟต์แวร์มีข้อผิดพลาด เรียกร้องให้เริ่มระบบใหม่ สุดท้าย ฉันเปิดใช้งานอุปกรณ์เพื่อส่งไฟล์.obj ทางอีเมล ทำได้โดยใช้ไลบรารี smtplib และอีเมล ความสามารถในการส่งอีเมลนี้ทำให้เรามีวิธีการที่สะดวกและไร้สายมากในการส่งไฟล์ที่สร้างขึ้นไปยังผู้ใช้เพื่อเข้าถึงบนแพลตฟอร์มต่างๆ

ขั้นตอนที่ 7: บูรณาการ

บูรณาการ
บูรณาการ

หลังจากผลิตชิ้นส่วนต่างๆ ของอุปกรณ์แล้ว ผมก็ประกอบเข้าด้วยกัน รูปด้านบนแสดงตามลำดับ:

(ก) กล่องประกอบภายนอก

(b) ประกอบกล่องภายในด้วยกล้องและเลเซอร์

(c) มุมมองภายในของเตียงอิเล็กทรอนิกส์

(d) ด้านหลังของ Pi พร้อมการเข้าถึงพอร์ต Pi และอินพุตมอเตอร์ 5V

(จ) ปุ่มกดพร้อมวงแหวน LED และไฟแสดงสถานะที่ด้านหน้าเครื่อง

ขั้นตอนที่ 8: ผลลัพธ์

ผลลัพธ์
ผลลัพธ์
ผลลัพธ์
ผลลัพธ์
ผลลัพธ์
ผลลัพธ์
ผลลัพธ์
ผลลัพธ์

เครื่องสแกนเลเซอร์ 3 มิติสามารถสแกนวัตถุได้อย่างแม่นยำ คุณสมบัติของออบเจ็กต์นั้นชัดเจนและจดจำได้ง่าย ส่วนต่างๆ นั้นง่ายต่อการพิมพ์ 3 มิติโดยใช้ซอฟต์แวร์สไลซ์ เช่น Repetier ภาพด้านบนแสดงตัวอย่างการสแกนชิ้นไม้และเป็ดยาง

หนึ่งในการค้นพบและความสำเร็จที่ยิ่งใหญ่ที่สุดที่ฉันค้นพบระหว่างการทดสอบคือความสม่ำเสมอของอุปกรณ์ ตลอดการทดลองใช้วัตถุเดียวกันหลายครั้ง เครื่องสแกนสามารถสร้างไฟล์.obj ที่มีความคล้ายคลึงกันมากในแต่ละครั้ง แม้ว่าเราจะเปลี่ยนตำแหน่งของวัตถุเล็กน้อยก็ตาม ตามที่เห็นในการสแกนแยกกันทั้งสาม ภาพจะดูคล้ายกันมาก โดยเก็บรายละเอียดเหมือนกันและมีรายละเอียดเท่ากัน โดยรวมแล้วฉันรู้สึกประทับใจกับความสม่ำเสมอและความทนทานของระบบของเรามาก

ตัวแปรหนึ่งที่ฉันปรับแต่งได้คือความละเอียดของการสแกน เนื่องจากสเต็ปเปอร์มี 400 ขั้น ฉันสามารถเลือกได้ว่าแต่ละ ΔΘ จะใหญ่แค่ไหนเพื่อกำหนดความละเอียดเชิงมุม โดยค่าเริ่มต้น ฉันตั้งค่าความละเอียดเชิงมุมไว้ที่ 20 รอบ ซึ่งหมายความว่าแต่ละเฟรม มอเตอร์จะหมุน 20 ขั้น (400/20 = 20) ตัวเลือกนี้ถูกเลือกโดยคำนึงถึงเวลาเป็นหลัก - การสแกนด้วยวิธีนี้จะใช้เวลาประมาณ 45 วินาที อย่างไรก็ตาม ถ้าฉันต้องการการสแกนคุณภาพสูงกว่านี้มาก ฉันสามารถเพิ่มจำนวนการทำซ้ำได้มากถึง 400 ครั้ง ซึ่งจะทำให้มีจุดมากขึ้นในการสร้างแบบจำลองด้วย ทำให้การสแกนมีรายละเอียดมากขึ้น นอกจากความละเอียดเชิงมุมแล้ว ฉันยังสามารถปรับความละเอียดในแนวตั้ง หรือเลือกจำนวนจุดต่างๆ ที่ฉันเลือกสำรวจตามชิ้นเลเซอร์ได้อีกด้วย สำหรับความสนใจในเวลาใกล้เคียงกัน ฉันได้ตั้งค่าเริ่มต้นไว้ที่ 20 แต่ฉันสามารถเพิ่มเพื่อผลลัพธ์ที่ดีขึ้นได้ ในการเล่นกับพารามิเตอร์เหล่านี้ของความละเอียดเชิงมุมและความละเอียดเชิงพื้นที่ ฉันสามารถรวบรวมผลลัพธ์ของการสแกนต่างๆ ด้านล่างในรูปสุดท้าย ป้ายแต่ละป้ายถูกจัดรูปแบบให้มีความละเอียดเชิงมุม x ความละเอียดเชิงพื้นที่ ตามที่เห็นในการตั้งค่าการสแกนเริ่มต้น คุณสมบัติของเป็ดนั้นสามารถจดจำได้ แต่ไม่มีรายละเอียด อย่างไรก็ตาม เมื่อฉันเพิ่มความละเอียด คุณสมบัติที่แม่นยำของตัวเป็ดก็เริ่มแสดงออกมา ซึ่งรวมถึงตา จะงอยปาก หาง และปีกบนเป็ด ภาพความละเอียดสูงสุดใช้เวลาประมาณ 5 นาทีในการสแกน การได้เห็นความละเอียดที่ทำได้สูงนี้เป็นความสำเร็จที่ยิ่งใหญ่มาก

ข้อจำกัด

แม้ว่าโครงการจะประสบผลสำเร็จ แต่ก็ยังมีข้อจำกัดบางประการในการออกแบบและการใช้งาน การใช้เลเซอร์ทำให้เกิดปัญหามากมายเกี่ยวกับการกระจายแสง วัตถุหลายชิ้นที่ฉันพยายามสแกนที่โปร่งแสง เป็นมันเงา หรือมืดมากได้รับการพิสูจน์ว่ามีปัญหากับการสะท้อนแสงจากพื้นผิว หากวัตถุโปร่งแสง แสงจะถูกดูดกลืนและกระจายตัว ทำให้อ่านชิ้นที่มีเสียงดังมาก ในวัตถุที่แวววาวและมืด แสงอาจถูกสะท้อนหรือถูกดูดกลืนจนยากที่จะหยิบขึ้นมา ยิ่งไปกว่านั้น เนื่องจากฉันใช้กล้องเพื่อจับภาพคุณสมบัติของวัตถุ การตรวจจับของมันถูกจำกัดด้วยแนวสายตา ซึ่งหมายความว่าวัตถุเว้าและมุมแหลมมักจะถูกส่วนอื่นๆ ของวัตถุบดบัง นี่แสดงให้เห็นในตัวอย่างเป็ดยางของเรา เนื่องจากบางครั้งหางจะสูญเสียความโค้งในการสแกน กล้องสามารถตรวจจับได้เฉพาะโครงสร้างพื้นผิวเท่านั้น ซึ่งหมายความว่าไม่สามารถจับภาพรูหรือรูปทรงภายในได้ อย่างไรก็ตาม นี่เป็นปัญหาทั่วไปที่โซลูชันการสแกนอื่นๆ ก็มีเช่นกัน

ขั้นตอนถัดไป

แม้ว่าฉันจะพอใจกับผลลัพธ์ของโครงการของเรา แต่ก็มีบางสิ่งที่สามารถนำมาใช้เพื่อทำให้ดีขึ้นได้ สำหรับผู้เริ่มต้น ในสถานะปัจจุบัน ความละเอียดการสแกนสามารถเปลี่ยนแปลงได้โดยการเปลี่ยนตัวแปรความละเอียดแบบฮาร์ดโค้ดในโค้ดของเราเท่านั้น ในการทำให้โปรเจ็กต์ฝังตัวมากขึ้น อาจมีโพเทนชิออมิเตอร์ความละเอียดรวมอยู่ด้วย เพื่อให้ผู้ใช้สามารถเปลี่ยนความละเอียดได้โดยไม่ต้องเสียบจอภาพและคีย์บอร์ดเข้ากับเครื่องสแกนนอกจากนี้ เครื่องสแกนยังสร้างภาพที่บางครั้งอาจดูขรุขระ ในการแก้ไขปัญหานี้ สามารถใช้เทคนิคการปรับตาข่ายให้เรียบเพื่อขจัดสิ่งผิดปกติและมุมที่รุนแรง สุดท้ายนี้ ฉันพบว่าพิกัดพิกเซลไม่เหมาะกับโลกแห่งความเป็นจริง ตาข่ายที่ฉันสร้างนั้นใหญ่กว่าวัตถุจริง 6 ถึง 7 เท่า ในอนาคตจะเป็นประโยชน์หากใช้วิธีปรับขนาดตาข่ายเพื่อให้มีขนาดที่แม่นยำยิ่งขึ้นกับขนาดจริงของวัตถุ

ขั้นตอนที่ 9: ทรัพยากร

ฉันได้รวมโค้ด ไฟล์ STL สำหรับการพิมพ์ และไฟล์ DXF สำหรับการตัดทั่วทั้งโปรเจ็กต์

การประกวด Raspberry Pi 2020
การประกวด Raspberry Pi 2020
การประกวด Raspberry Pi 2020
การประกวด Raspberry Pi 2020

รางวัลที่หนึ่งในการประกวด Raspberry Pi 2020

แนะนำ: