สารบัญ:

Roomba Scout Explorer: 8 ขั้นตอน
Roomba Scout Explorer: 8 ขั้นตอน

วีดีโอ: Roomba Scout Explorer: 8 ขั้นตอน

วีดีโอ: Roomba Scout Explorer: 8 ขั้นตอน
วีดีโอ: Master Your Keyword Strategy | Jungle Scout - Power Feature Series | Week 4 of 8 2024, พฤศจิกายน
Anonim
Roomba Scout Explorer
Roomba Scout Explorer

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

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

ขั้นตอนที่ 1: อุปกรณ์

-Roomba พร้อมกล้องติดตัว (รู้จักชื่อเฉพาะ)

-เชื่อมต่อเซิร์ฟเวอร์

-Windows 10 / Mac พร้อมการเชื่อมต่ออินเทอร์เน็ต

- แพลตฟอร์มที่สดใส

-พื้นมืด

- วัตถุที่หลงทางใด ๆ ที่มีการออกแบบสีเดียว

ขั้นตอนที่ 2: ตั้งค่า MATLAB

ตั้งค่า MATLAB
ตั้งค่า MATLAB

ในการสร้างงานและฟังก์ชันสำหรับ roomba คุณต้องมีรหัสและชุดเครื่องมือเฉพาะที่มีคำสั่ง roomba

เมื่อดาวน์โหลด MATLAB 2016a เป็นต้นไป ให้สร้างโฟลเดอร์เพื่อเก็บไฟล์โรบ็อตเหล่านี้และแทรกไฟล์ MATLAB ต่อไปนี้ลงในโฟลเดอร์และเรียกใช้เพื่อติดตั้งไฟล์ roomba ที่จำเป็นที่เหลืออยู่

หลังจากนั้น ให้คลิกขวาในหน้าต่างโฟลเดอร์ปัจจุบัน เลื่อนเมาส์ไปที่ "เพิ่มเส้นทาง" แล้วคลิก "โฟลเดอร์ปัจจุบัน" ตอนนี้ควรตั้งค่าเส้นทางเพื่อให้แต่ละไฟล์เหล่านี้ใช้เพื่อเปิดใช้งาน roomba

ตอนนี้ ใช้คำสั่งด้านล่างในหน้าต่างคำสั่งเพื่อตั้งค่า roomba:

r=roomba(#).

สัญลักษณ์ # คือ 'หมายเลข' ของ roomba ที่ระบุ อย่างไรก็ตาม หากคุณต้องการเพียงตัวจำลองของ roomba เพียงพิมพ์คำสั่งต่อไปนี้:

r=roomba(0).

แนะนำให้ใช้การจำลองเพื่อทดสอบรูปแบบการเคลื่อนไหว

หากคุณสงสัยว่า roomba สามารถปฏิบัติตามคำสั่งใดได้ ให้พิมพ์คำสั่งต่อไปนี้ในหน้าต่างคำสั่ง:

ด็อกเตอร์รูมบา

สำหรับรายละเอียดเพิ่มเติม โปรดเยี่ยมชมเว็บไซต์ต่อไปนี้:

ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php

ขั้นตอนที่ 3: ฟังก์ชัน: การเคลื่อนไหว

ฟังก์ชัน: การเคลื่อนไหว
ฟังก์ชัน: การเคลื่อนไหว
ฟังก์ชัน: การเคลื่อนไหว
ฟังก์ชัน: การเคลื่อนไหว

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

- เพื่อลดความเสียหาย หุ่นยนต์ต้องลดความเร็วเป็นความเร็วที่ต่ำกว่า

-เมื่อเข้าใกล้หน้าผาหรือกำแพง หุ่นยนต์จะเคลื่อนที่ถอยหลังและเปลี่ยนมุมตามจุดกระทบ

-หลังจากขับรถมาสักพัก Roomba จะหยุดและถ่ายภาพบริเวณโดยรอบในที่สุด

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

ขั้นตอนที่ 4: ฟังก์ชัน: การประมวลผลภาพ

ฟังก์ชัน: การประมวลผลภาพ
ฟังก์ชัน: การประมวลผลภาพ

ตามคำขอ เราได้รับมอบหมายให้แก้ไขข้อมูลของภาพ (หรือหลายภาพ) ที่ได้รับจากกล้องของหุ่นยนต์ ซึ่งเราตัดสินใจให้ roomba "นับ" จำนวนวัตถุที่เห็นในภาพ

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

โปรดทราบว่าฟังก์ชันนี้ไม่สามารถทำงานในเครื่องจำลองได้เนื่องจากไม่มีกล้องมาให้ หากพยายามจะเกิดข้อผิดพลาดโดยแจ้งว่าใช้ได้เฉพาะเมทริกซ์ (:,:, 3) เท่านั้น

ขั้นตอนที่ 5: ฟังก์ชัน: การทำแผนที่

ฟังก์ชัน: การทำแผนที่
ฟังก์ชัน: การทำแผนที่
ฟังก์ชัน: การทำแผนที่
ฟังก์ชัน: การทำแผนที่
ฟังก์ชัน: การทำแผนที่
ฟังก์ชัน: การทำแผนที่
ฟังก์ชัน: การทำแผนที่
ฟังก์ชัน: การทำแผนที่

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

เพื่อเพิ่มขีดจำกัดความยาวของเวลาทำงานของฟังก์ชัน ขีดจำกัด n<20 บนลูป while ถูกใช้เพื่อการทดสอบ

พึงระลึกไว้เสมอว่า เนื่องด้วยความซับซ้อนของโค้ด จึงเกิดข้อผิดพลาดมากขึ้นเมื่อส่วนโค้ดทำงานเป็นเวลานาน จากการทดสอบครั้งก่อน พบว่ามีการกระแทก 10 ครั้งเป็นจำนวนคะแนนก่อนที่จะเกิดข้อผิดพลาดที่สำคัญ

ขั้นตอนที่ 6: การตีข่าว

การวางเคียงกัน
การวางเคียงกัน
การวางเคียงกัน
การวางเคียงกัน
การวางเคียงกัน
การวางเคียงกัน
การวางเคียงกัน
การวางเคียงกัน

เนื่องจากทั้งหมดนี้จะอยู่ในไฟล์เดียว เราจึงสร้างฟังก์ชันโดยใช้สองขั้นตอนก่อนหน้าเป็นฟังก์ชันย่อย ร่างสุดท้ายถูกสร้างขึ้นด้วยการปรับเปลี่ยนฟังก์ชัน redux ที่เรียกว่า "recon" ดังต่อไปนี้ เพื่อหลีกเลี่ยงความสับสนสำหรับ MATLAB สคริปต์ "ตัวนับ" และ "rombplot3" ถูกเปลี่ยนชื่อเป็นฟังก์ชันฝังตัว "CountR" และ "plotr" ตามลำดับ

ต้องมีการเปลี่ยนแปลงหลายอย่างในเวอร์ชันสุดท้ายเมื่อเทียบกับสคริปต์ก่อนหน้า:

-ต้นกำเนิดจะถูกทำเครื่องหมายด้วยวงกลมสีแดงเสมอ

- ทุกครั้งที่ Roomba หยุดจากกันชน ตำแหน่งจะถูกทำเครื่องหมายด้วยวงกลมสีดำ

- ทุกครั้งที่ roomba หยุดจากเซ็นเซอร์หน้าผา ตำแหน่งจะถูกทำเครื่องหมายด้วยวงกลมสีน้ำเงิน

-ทุกครั้งที่ roomba หยุดสำรวจพื้นที่ ตำแหน่งจะถูกทำเครื่องหมายด้วยวงกลมสีเขียว

- รูปภาพถูกแก้ไขเพื่อให้ส่วนบนถูกลบออกเนื่องจากการประทับเวลาที่อาจรบกวนผลลัพธ์

-เส้นขอบจะไม่ถูกนับเป็นวัตถุเนื่องจากมีจำนวนค่อนข้างสูง

- ตัวแปรหลายตัวมีการเปลี่ยนแปลง ดังนั้นเพื่อหลีกเลี่ยงความสับสน ให้ใช้เวอร์ชันด้านบนเพื่อการอ้างอิง

ขั้นตอนที่ 7: การทดสอบ

การทดสอบ
การทดสอบ

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

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

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

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

ขั้นตอนที่ 8: สรุป

บทสรุป
บทสรุป

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

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

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

แนะนำ: