สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: วิธีแก้เขาวงกต
- ขั้นตอนที่ 2: ข้อควรพิจารณาในการเขียนโปรแกรมหุ่นยนต์
- ขั้นตอนที่ 3: โปรแกรมหลัก
- ขั้นตอนที่ 4: บล็อกของฉัน (รูทีนย่อย)
- ขั้นตอนที่ 5: การเริ่มต้นสร้างหุ่นยนต์: ฐาน
- ขั้นตอนที่ 6: ด้านบนของฐาน 1
- ขั้นตอนที่ 7: ด้านบนของฐาน 2
- ขั้นตอนที่ 8: ด้านบนของฐาน 3
- ขั้นตอนที่ 9: เซ็นเซอร์อินฟราเรดและอัลตราโซนิก
- ขั้นตอนที่ 10: สายเคเบิล
- ขั้นตอนที่ 11: ขั้นตอนสุดท้ายในการสร้างหุ่นยนต์: การตกแต่ง
- ขั้นตอนที่ 12: สร้างเขาวงกต
- ขั้นตอนที่ 13: เขาวงกต
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
นี่เป็นหุ่นยนต์ที่ใช้งานง่ายและเรียบง่ายพร้อมปัญญาประดิษฐ์ ออกแบบมาเพื่อสำรวจเขาวงกตและเมื่อวางไว้ที่ทางเข้า เพื่อขับผ่านไปยังทางออกและหลีกเลี่ยงทางตัน มันซับซ้อนกว่าโปรเจ็กต์ก่อนหน้าของฉันมาก ซึ่งแค่ขับรถผ่านเขาวงกต ที่นี่ หุ่นยนต์ต้องจำเส้นทางที่มันเคยไป กำจัดทางตัน จัดเก็บเส้นทางใหม่ แล้วเดินตามเส้นทางใหม่
มีการอธิบายหุ่นยนต์ก่อนหน้าของฉันที่นี่:
หุ่นยนต์ถูกสร้างขึ้นโดยใช้ LEGO Mindstorms EV3 ซอฟต์แวร์ EV3 ทำงานบนคอมพิวเตอร์และสร้างโปรแกรม ซึ่งดาวน์โหลดไปยังไมโครคอนโทรลเลอร์ที่เรียกว่า EV3 Brick วิธีการเขียนโปรแกรมเป็นแบบใช้ไอคอนและระดับสูง เป็นเรื่องง่ายและหลากหลาย
เสบียง
PARTS
- ชุดเลโก้ Mindstorms EV3
- LEGO Mindstorms EV3 เซ็นเซอร์อัลตราโซนิก ไม่รวมอยู่ในชุด EV3
- กระดาษลูกฟูกสำหรับเขาวงกต สองกล่องน่าจะเพียงพอ
- กระดาษแข็งแผ่นบางๆ เพื่อช่วยยึดมุมและผนังบางส่วนให้มั่นคง
- กาวและเทปเพื่อเชื่อมต่อชิ้นส่วนกระดาษแข็งเข้าด้วยกัน
- ซองการ์ดอวยพรสีแดงเพื่อระบุทางออกของเขาวงกต
เครื่องมือ
- มีดยูทิลิตี้สำหรับตัดกระดาษแข็ง
- ไม้บรรทัดเหล็กเพื่อช่วยในกระบวนการตัด
ซอฟต์แวร์
โปรแกรมอยู่ที่นี่:
ขั้นตอนที่ 1: วิธีแก้เขาวงกต
วิธีการขับเขาวงกต
มีหลายวิธีในการนำทางเขาวงกต หากคุณสนใจที่จะศึกษาพวกเขา พวกเขาจะอธิบายไว้อย่างดีในบทความ Wikipedia ต่อไปนี้: https://en.wikipedia.org/wiki/Maze_ dissolve_algorithm
ฉันเลือกวิธีการตามกำแพงด้านซ้ายมือ แนวคิดก็คือหุ่นยนต์จะรักษากำแพงไว้ทางด้านซ้ายโดยทำการตัดสินใจต่อไปนี้เมื่อเดินผ่านเขาวงกต:
- หากสามารถเลี้ยวซ้ายได้
- มิฉะนั้น ให้ตรงไปถ้าเป็นไปได้
- ถ้าไปทางซ้ายหรือตรงไปไม่ได้ ให้เลี้ยวขวา ถ้าเป็นไปได้
- หากไม่สามารถทำตามข้างต้นได้ จะต้องเป็นจุดสิ้นสุด หันไปรอบ ๆ
ข้อควรระวังประการหนึ่งคือวิธีการนี้อาจล้มเหลวได้หากเขาวงกตมีวงวนอยู่ในนั้น ขึ้นอยู่กับตำแหน่งของลูป หุ่นยนต์สามารถวนไปมารอบๆ ลูปได้ วิธีแก้ปัญหาที่เป็นไปได้สำหรับปัญหานี้คือให้หุ่นยนต์สลับไปใช้กฎผู้ติดตามผนังทางขวามือ หากรู้ว่ามันกำลังวนซ้ำ ฉันไม่ได้รวมการปรับแต่งนี้ในโครงการของฉัน
ไขเขาวงกตเพื่อค้นหาเส้นทางโดยตรง
ขณะขับรถผ่านเขาวงกต หุ่นยนต์จะต้องจำเส้นทางที่มันกำลังเดินทางและกำจัดทางตัน ทำได้โดยการจัดเก็บแต่ละเลี้ยวและทางแยกในอาร์เรย์ ตรวจสอบการรวมเฉพาะของทางเลี้ยวและทางแยกตามที่เกิดขึ้น และแทนที่ชุดค่าผสมที่มีทางตัน รายการทางเลี้ยวและทางแยกสุดท้ายคือเส้นทางตรงผ่านเขาวงกต
ทางเลี้ยวที่เป็นไปได้ ได้แก่ ซ้าย ขวา หลัง (ทางตัน) และทางตรง (ซึ่งเป็นทางแยก)
ชุดค่าผสมจะถูกแทนที่ดังนี้:
- "ซ้าย หลัง ซ้าย" กลายเป็น "ตรง"
- "ซ้าย, กลับ, ขวา" กลายเป็น "ย้อนกลับ"
- "ซ้าย หลัง ตรง" กลายเป็น "ขวา"
- "ขวา หลัง ซ้าย" กลายเป็น "กลับ"
- "ตรง กลับ ซ้าย" กลายเป็น "ขวา"
- "ตรง หลัง ตรง" กลายเป็น "หลัง"
หุ่นยนต์จัดการกับเขาวงกตของฉันอย่างไร
- เมื่อหุ่นยนต์เริ่มขับรถ จะเห็นช่องว่างทางด้านขวาและจัดเก็บ Straight ในรายการในอาร์เรย์
- จากนั้นจะเลี้ยวซ้ายและเพิ่มซ้ายลงในรายการ รายการตอนนี้ประกอบด้วย: ตรง ซ้าย
- เมื่อถึงจุดสิ้นสุด มันจะหมุนกลับและเพิ่มกลับเข้าไปในรายการ รายการตอนนี้ประกอบด้วย: ตรง, ซ้าย, หลัง
- ผ่านช่องทางที่ใช้จากทางเข้าเพิ่มตรงเข้ารายการ รายการตอนนี้ประกอบด้วย: ตรง ซ้าย หลัง ตรง รู้จักการรวมกันและเปลี่ยนซ้าย, หลัง, ตรงไปขวา รายการตอนนี้มี Straight, Right
- เมื่อถึงจุดสิ้นสุด มันจะหมุนกลับและเพิ่มกลับเข้าไปในรายการ รายการตอนนี้ประกอบด้วย: ตรง, ขวา, หลัง
- หลังจากเลี้ยวซ้าย รายการจะมี ตรง, ขวา, หลัง, ซ้าย. มันรู้จักการรวมกันและเปลี่ยนขวา, กลับ, ซ้ายไปข้างหลัง รายการตอนนี้มี Straight, Back
- หลังจากเลี้ยวซ้ายถัดไป รายการจะมีตรง กลับ ซ้าย มันเปลี่ยนชุดค่าผสมนั้นไปทางขวา รายการนี้มีเพียงสิทธิ์เท่านั้น
- มันผ่านช่องว่างและเพิ่มตรงไปยังรายการ รายการนี้ประกอบด้วย Right, Straight
- หลังจากเลี้ยวขวา รายการจะมี Right, Straight, Right ซึ่งเป็นเส้นทางตรง
ขั้นตอนที่ 2: ข้อควรพิจารณาในการเขียนโปรแกรมหุ่นยนต์
ข้อควรพิจารณาสำหรับไมโครคอนโทรลเลอร์ใดๆ
เมื่อหุ่นยนต์ตัดสินใจเลี้ยว ควรเลี้ยวในวงกว้างหรือเดินหน้าเป็นระยะทางสั้น ๆ ก่อนเลี้ยวและหลังจากหมุนไปข้างหน้าเป็นระยะทางสั้น ๆ อีกครั้งโดยไม่ตรวจสอบเซ็นเซอร์ เหตุผลสำหรับระยะทางสั้น ๆ ครั้งแรกคือ หุ่นยนต์ไม่ควรชนกำแพงหลังจากเลี้ยว และเหตุผลสำหรับระยะทางสั้นที่สองคือ หลังจากที่หุ่นยนต์หันไป เซ็นเซอร์จะเห็นช่องว่างยาวที่เพิ่งมาจาก และหุ่นยนต์ก็คิดว่ามันควรจะหมุนอีกครั้งซึ่งไม่ใช่สิ่งที่ควรทำ
เมื่อหุ่นยนต์สัมผัสได้ถึงทางแยกทางด้านขวาแต่ไม่ใช่ทางเลี้ยวขวา ฉันพบว่าเป็นการดีที่จะให้หุ่นยนต์ขับไปข้างหน้าประมาณ 10 นิ้ว (25 ซม.) โดยไม่ตรวจสอบเซ็นเซอร์
ข้อควรพิจารณาเฉพาะสำหรับ LEGO MINDSTORMS EV3
แม้ว่า LEGO Mindstorms EV3 จะใช้งานได้หลากหลายมาก แต่ก็อนุญาตให้มีเซ็นเซอร์แต่ละประเภทที่เชื่อมต่อกับอิฐตัวเดียวได้ไม่เกินหนึ่งตัว อิฐสองก้อนขึ้นไปสามารถถูกล่ามโซ่ได้ แต่ฉันไม่ต้องการซื้อ Brick อีกตัว ดังนั้นฉันจึงใช้เซ็นเซอร์ต่อไปนี้ (แทนเซ็นเซอร์อัลตราโซนิกสามตัว): เซ็นเซอร์อินฟราเรด เซ็นเซอร์สี และเซ็นเซอร์อัลตราโซนิก สิ่งนี้ได้ผลดี
แต่เซ็นเซอร์สีมีช่วงที่สั้นมากประมาณ 2 นิ้ว (5 ซม.) ซึ่งนำไปสู่ข้อควรพิจารณาพิเศษบางประการดังที่อธิบายไว้ด้านล่าง:
- เมื่อเซ็นเซอร์สีตรวจพบผนังด้านหน้าและหุ่นยนต์ตัดสินใจเลี้ยวขวาหรือหันหลังกลับ เซ็นเซอร์ควรถอยกลับก่อน เพื่อให้มีพื้นที่เพียงพอสำหรับหมุนตัวโดยไม่ชนกำแพง
- ปัญหาที่ซับซ้อนเกิดขึ้นกับทางแยก "ตรง" บางทาง เนื่องจากเซ็นเซอร์สีมีช่วงสั้น หุ่นยนต์จึงไม่สามารถระบุได้ว่าจะตรวจจับทางแยก "ตรง" ที่เหมาะสมหรือนำไปสู่การเลี้ยวขวาหรือไม่ ฉันได้ลองแก้ไขปัญหานี้โดยตั้งค่าโปรแกรมให้จัดเก็บ "ตรง" ในรายการทุกครั้งที่หุ่นยนต์ตรวจจับได้ จากนั้นจึงกำจัด "ตรง" มากกว่าหนึ่งรายการในรายการ แก้ไขสถานการณ์ที่เลี้ยวขวาตาม "ตรง" ในเขาวงกต แต่ไม่ใช่สถานการณ์ที่มีการเลี้ยวขวาโดยไม่มี "ตรง" ก่อนหน้านั้น ฉันยังลองตั้งค่าโปรแกรมให้กำจัด "ตรง" ถ้ามันอยู่ก่อน "ขวา" แต่วิธีนี้ใช้ไม่ได้ถ้าเลี้ยวขวาตาม "ตรง" ฉันไม่สามารถหาวิธีแก้ปัญหาที่เหมาะกับทุกกรณีได้ แต่ฉันคิดว่ามันเป็นไปได้ที่หุ่นยนต์จะดูระยะทางที่เดินทาง (โดยการอ่านเซ็นเซอร์การหมุนของมอเตอร์) และตัดสินใจว่าจะเป็น "ทางตรง" หรือทางที่ถูกต้อง เปลี่ยน. ฉันไม่คิดว่าความซับซ้อนนี้คุ้มค่าที่จะทำเพื่อจุดประสงค์ในการแสดงแนวคิด AI ในโครงการนี้
- ข้อดีของเซ็นเซอร์สีคือแยกความแตกต่างระหว่างสีน้ำตาลของผนังกับสีแดงของกำแพงที่ฉันใช้ที่ทางออก และให้วิธีที่ง่ายสำหรับหุ่นยนต์ในการตัดสินใจเมื่อเสร็จสิ้นเขาวงกต
ขั้นตอนที่ 3: โปรแกรมหลัก
LEGO Mindstorms EV3 มีวิธีการเขียนโปรแกรมตามไอคอนที่สะดวกมาก บล็อกจะแสดงที่ด้านล่างของหน้าจอแสดงผลบนคอมพิวเตอร์ และสามารถลากและวางลงในหน้าต่างการเขียนโปรแกรมเพื่อสร้างโปรแกรมได้ EV3 Brick อาจเชื่อมต่อกับคอมพิวเตอร์โดยใช้สาย USB, Wi-Fi หรือ Bluetooth จากนั้นโปรแกรมสามารถดาวน์โหลดจากคอมพิวเตอร์ไปยัง Brick
โปรแกรมประกอบด้วยโปรแกรมหลักและ "My Blocks" หลายตัวซึ่งเป็นรูทีนย่อย ไฟล์ที่อัปโหลดมีโปรแกรมทั้งหมด ซึ่งอยู่ที่นี่:
ขั้นตอนในโปรแกรมหลักมีดังนี้:
- กำหนดและเริ่มต้นตัวแปรนับผลัดกันเดินและอาร์เรย์
- รอ 5 วินาทีแล้วพูดว่า "ไป"
- เริ่มวนซ้ำ
- ขับรถผ่านเขาวงกต เมื่อถึงทางออก วงจะออกจาก
- แสดงบนหน้าจอของ Brick ทางแยกที่พบในเขาวงกตจนถึงตอนนี้
- ตรวจสอบว่าเส้นทางควรสั้นลงหรือไม่
- แสดงทางแยกในเส้นทางที่สั้นลง
- วนกลับไปที่ขั้นตอนที่ 4
- หลังจากวนรอบให้ขับเส้นทางตรง
ภาพหน้าจอแสดงโปรแกรมหลักนี้
ขั้นตอนที่ 4: บล็อกของฉัน (รูทีนย่อย)
แสดง Navigate My Block ซึ่งควบคุมวิธีที่หุ่นยนต์ขับผ่านเขาวงกต ตัวพิมพ์มีขนาดเล็กมากและอาจอ่านไม่ออก แต่เป็นตัวอย่างที่ดีของความอเนกประสงค์และทรงพลังของ if-statement (เรียกว่า Switches ในระบบ LEGO EV3)
- ลูกศร # 1 ชี้ไปที่สวิตช์ที่ตรวจสอบว่าเซ็นเซอร์อินฟราเรดมองเห็นวัตถุมากกว่าระยะทางที่กำหนดหรือไม่ ถ้าเป็นเช่นนั้น บล็อกชุดบนสุดจะถูกดำเนินการ ถ้าไม่เช่นนั้น การควบคุมจะถูกส่งไปยังชุดบล็อกขนาดใหญ่ด้านล่าง ซึ่งเป็นที่ตั้งของลูกศร #2
- ลูกศร #2 ชี้ไปที่สวิตช์ที่ตรวจสอบสีที่เซ็นเซอร์สีมองเห็น มี 3 กรณี: ไม่มีสีด้านบน สีแดงตรงกลาง และสีน้ำตาลที่ด้านล่าง
- ลูกศรสองอัน #3 ชี้ไปที่สวิตช์ที่ตรวจสอบว่าเซ็นเซอร์อัลตราโซนิกเห็นวัตถุมากกว่าระยะทางที่กำหนดหรือไม่ ถ้าเป็นเช่นนั้น บล็อกชุดบนสุดจะถูกดำเนินการ ถ้าไม่เช่นนั้น การควบคุมจะถูกส่งไปยังชุดบล็อกด้านล่าง
My Blocks สำหรับย่อเส้นทางและสำหรับการขับรถบนเส้นทางตรงนั้นซับซ้อนกว่าและอ่านไม่ออกโดยสิ้นเชิง ดังนั้นจึงไม่รวมอยู่ในเอกสารนี้
ขั้นตอนที่ 5: การเริ่มต้นสร้างหุ่นยนต์: ฐาน
ดังที่ได้กล่าวไว้ก่อนหน้านี้ LEGO Mindstorms EV3 อนุญาตให้มีเซ็นเซอร์แต่ละประเภทที่เชื่อมต่อกับอิฐตัวเดียวได้ไม่เกิน 1 ตัว ฉันใช้เซ็นเซอร์ต่อไปนี้ (แทนเซ็นเซอร์อัลตราโซนิกสามตัว): เซ็นเซอร์อินฟราเรด เซ็นเซอร์สี และเซ็นเซอร์อัลตราโซนิก
รูปภาพคู่ด้านล่างแสดงวิธีการสร้างหุ่นยนต์ ภาพแรกของแต่ละคู่แสดงชิ้นส่วนที่จำเป็น และภาพที่สองแสดงชิ้นส่วนเดียวกันที่เชื่อมต่อเข้าด้วยกัน
ขั้นตอนแรกคือการสร้างฐานของหุ่นยนต์โดยใช้ชิ้นส่วนที่แสดง ฐานหุ่นยนต์แสดงกลับหัวกลับหาง ชิ้นส่วนรูปตัว L ขนาดเล็กที่ด้านหลังของหุ่นยนต์รองรับส่วนหลัง มันเลื่อนในขณะที่หุ่นยนต์เคลื่อนที่ งานนี้โอเค ชุด EV3 ไม่มีชิ้นส่วนแบบลูกกลิ้ง
ขั้นตอนที่ 6: ด้านบนของฐาน 1
ขั้นนี้และอีก 2 ขั้นต่อไปเป็นขั้นบนสุดของฐานหุ่นยนต์ เซ็นเซอร์สี และสายเคเบิล ซึ่งเป็นสายเคเบิลทั้งหมด 10 นิ้ว (26 ซม.)
ขั้นตอนที่ 7: ด้านบนของฐาน 2
ขั้นตอนที่ 8: ด้านบนของฐาน 3
ขั้นตอนที่ 9: เซ็นเซอร์อินฟราเรดและอัลตราโซนิก
ถัดมาเป็นเซ็นเซอร์อินฟราเรด (ด้านซ้ายของหุ่นยนต์) และเซ็นเซอร์อัลตราโซนิก (ด้านขวา) นอกจากนี้ยังมีหมุด 4 ตัวสำหรับติดอิฐด้านบน
เซ็นเซอร์อินฟราเรดและอัลตราโซนิกอยู่ในแนวตั้งแทนที่จะเป็นแนวนอนปกติ ช่วยให้สามารถระบุมุมหรือปลายผนังได้ดีขึ้น
ขั้นตอนที่ 10: สายเคเบิล
สายเคเบิลเชื่อมต่อกับอิฐดังนี้:
- พอร์ต B: เหลือมอเตอร์ขนาดใหญ่
- พอร์ต C: มอเตอร์ขนาดใหญ่ด้านขวา
- พอร์ต 2: เซ็นเซอร์อัลตราโซนิก
- พอร์ต 3: เซ็นเซอร์สี
- พอร์ต 4: เซ็นเซอร์อินฟราเรด
ขั้นตอนที่ 11: ขั้นตอนสุดท้ายในการสร้างหุ่นยนต์: การตกแต่ง
ปีกและครีบใช้สำหรับตกแต่งเท่านั้น
ขั้นตอนที่ 12: สร้างเขาวงกต
กล่องกระดาษลูกฟูกสองกล่องน่าจะเพียงพอสำหรับเขาวงกต ฉันสร้างกำแพงเขาวงกตสูง 5 นิ้ว (12.5 ซม.) แต่ 4 นิ้ว (10 ซม.) น่าจะใช้ได้ดีหากคุณไม่มีกระดาษลูกฟูก
ขั้นแรก ฉันตัดรอบผนังกล่องห่างจากด้านล่าง 10 นิ้ว (25 ซม.) จากนั้นฉันก็ตัดรอบผนัง 5 นิ้วจากด้านล่าง มีผนังขนาด 5 นิ้วหลายแบบ นอกจากนี้ ฉันยังตัดพื้นกล่องโดยเหลือประมาณ 1 นิ้ว (2.5 ซม.) ไว้กับผนังเพื่อความมั่นคง
ชิ้นส่วนต่างๆ สามารถตัดและติดกาวหรือติดเทปได้ทุกที่ที่จำเป็นเพื่อสร้างเขาวงกต ควรมีช่องว่างระหว่างผนังด้านข้าง 11 หรือ 12 นิ้ว (30 ซม.) ในทุกเส้นทางที่มีทางตัน ความยาวไม่ควรน้อยกว่า 10 นิ้ว (25 ซม.) ระยะทางเหล่านี้จำเป็นสำหรับหุ่นยนต์ที่จะหมุนไปรอบๆ
บางมุมของเขาวงกตอาจต้องได้รับการเสริมแรง นอกจากนี้ ผนังบางอันตรงต้องป้องกันไม่ให้งอ หากมีมุมกล่องที่ยืดให้ตรง ควรติดกระดาษแข็งบาง ๆ ชิ้นเล็ก ๆ ไว้ที่ด้านล่างตามที่แสดง
ทางออกมีแนวกั้นสีแดงประกอบด้วยซองการ์ดอวยพรสีแดงครึ่งซองและฐานทำด้วยกระดาษแข็งบาง 2 แผ่น ดังรูป
ขั้นตอนที่ 13: เขาวงกต
ข้อควรระวังอย่างหนึ่งคือเขาวงกตไม่ควรมีขนาดใหญ่ หากการหมุนของหุ่นยนต์ทำมุมเล็กน้อยจากจุดที่ถูกต้อง ความคลาดเคลื่อนจะเพิ่มขึ้นหลังจากสองสามรอบและหุ่นยนต์สามารถวิ่งเข้าไปในกำแพงได้ ฉันต้องเล่นซอหลายครั้งกับการตั้งค่าการหมุนของทางเลี้ยวเพื่อที่จะขับผ่านเขาวงกตเล็กๆ ที่ฉันทำสำเร็จได้สำเร็จ
วิธีแก้ปัญหานั้นคือการรวมรูทีนการยืดเส้นทางซึ่งจะทำให้หุ่นยนต์มีระยะห่างจากกำแพงด้านซ้ายโดยเฉพาะ ฉันไม่ได้รวมสิ่งนี้ โปรแกรมมีความซับซ้อนเพียงพอและเพียงพอสำหรับการสาธิตแนวคิด AI ในโครงการนี้
สรุปข้อสังเกต
นี่เป็นโครงการที่สนุกและเป็นประสบการณ์การเรียนรู้ที่ยอดเยี่ยม ฉันหวังว่าคุณจะพบว่ามันน่าสนใจ