สารบัญ:
- ขั้นตอนที่ 1: การตั้งค่าฮาร์ดแวร์
- ขั้นตอนที่ 2: ค้นหาเซ็นเซอร์เหล่านั้นทั้งหมด
- ขั้นตอนที่ 3: การทดสอบเพื่อตั้งค่าพารามิเตอร์
- ขั้นตอนที่ 4: การเริ่มต้นรหัส
- ขั้นตอนที่ 5: ด้านบนของวงในขณะที่: เซ็นเซอร์การกระแทกทางกายภาพ
- ขั้นตอนที่ 6: ตามเส้นทาง
- ขั้นตอนที่ 7: การประมวลผลภาพ
- ขั้นตอนที่ 8: ผลิตภัณฑ์สำเร็จรูป
วีดีโอ: Robo-Technician: 8 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
ลองนึกภาพสักครู่ว่าคุณเป็นหนึ่งในนักบินอวกาศที่ลงจอดบนดาวอังคาร คุณมีหลายล้านสิ่งที่ต้องทำ ตัวอย่างที่ต้องทำ การทดลองเพื่อดำเนินการ ข้อมูลที่จะรวบรวม แต่วันละครั้งหรือสองครั้งที่คุณต้องวิ่งไปรอบ ๆ ที่อยู่อาศัยและ/หรือโมดูลการวิจัยที่คุณอาศัยอยู่และทำงานเพื่อตรวจสอบพวกเขา จำเป็นต้องมีใครบางคนต้องแน่ใจว่าสิ่งของนั้นอยู่ในสภาพดี ชิ้นส่วนและชิ้นส่วนหลายพันชิ้นทำงานและเข้าที่ แต่ถ้ามีผู้ช่วยอัตโนมัติเพื่อบรรเทาภาระหน้าที่บางอย่างของคุณ จะเกิดอะไรขึ้นถ้ามีหุ่นยนต์ตัวเล็กที่สามารถเคลื่อนที่ไปมาภายในโมดูลเพื่อให้แน่ใจว่าทุกอย่างเข้าที่ ทำงานและปลอดภัย
Robo-Technician เพื่อช่วยชีวิต
โดยพื้นฐานแล้ว โค้ดนี้ควบคุม Robo-Technician เนื่องจากเดินตามเส้นทางสีอ่อนบนพื้น มันจะไปตามเส้นทางนี้จนกว่าจะพบทางแยกในเส้นทางหรือทางเลี้ยว ซึ่งจะกระตุ้นให้ถ่ายภาพเพื่อประมวลผลภาพเพื่อให้ช่างเทคนิค Robo ตัดสินใจว่าจะไปที่ใดต่อไป เซ็นเซอร์กันกระแทกและกันกระแทกทำงานเพื่อปกป้อง Robo-Technician จากความเสียหาย และเซ็นเซอร์ตรวจจับการกระแทกจะควบคุมว่าจะถ่ายภาพการวินิจฉัยเมื่อใด เมื่อรวมกันแล้ว Robo-Technician ได้รับการออกแบบมาเพื่อซูมไปรอบๆ โมดูลของ Mar ช่วยเพิ่มเวลาให้กับนักบินอวกาศในขณะที่ทำงานพื้นฐานของการตรวจสอบ โดยจะขอให้มนุษย์ป้อนข้อมูลเมื่อพบสิ่งผิดปกติเท่านั้น
เพื่อเป็นการเตือนอีกครั้งว่านี่เป็นงานที่กำลังดำเนินการอยู่ โค้ดที่มีอยู่ใช้งานได้ แต่มีอาการสะอึก โดยเฉพาะอย่างยิ่งเนื่องจากมีโปรแกรมที่ทับซ้อนกันหลายโปรแกรมที่เกี่ยวข้อง นอกจากนี้ สำหรับโปรเจ็กต์นี้เพื่อทำงานในภารกิจ Mars จริง หุ่นยนต์จะต้องถูกสร้างขึ้นเพื่อจุดประสงค์เฉพาะนั้น ดังนั้นอีกครั้ง ฉันเดาว่านี่เป็นงานสร้าง "การพิสูจน์แนวคิด"
มีบางสิ่งที่คุณจะต้องเริ่มต้นใช้งาน คุณจะต้องใช้โปรแกรมราคาแพง แพ็คเกจสนับสนุนสำหรับโปรแกรมนั้น และพื้นฐานเล็กน้อยในการเขียนโค้ด เนื่องจากฉันเป็นนักเรียน และมีการจัดเตรียมรหัสชั้นล่างบางส่วนไว้ (สำหรับราสเบอร์รี่ pi) ฉันจะไม่พูดถึงการตั้งค่านี้โดยเฉพาะ คุณสามารถค้นหาลิงก์ทั้งหมดสำหรับรหัสฐานด้านล่าง ไปที่รายการวัสดุกัน
ฮาร์ดแวร์
- Raspberry Pi (เราใช้รุ่น 3)
- ไอโรบอท ®
- อุปกรณ์จับยึดบางชนิดเพื่อให้ Raspberry Pi ต่ออยู่กับ Robo-Technician
- กล้อง Raspberry Pi (ไม่ว่าจะรุ่นไหน ขอแค่มีออโต้โฟกัสและความละเอียดของภาพที่ดีเท่านั้น)
- ขาตั้งหรือซองหนังบางชนิดเพื่อให้กล้องหันไปข้างหน้ากับ Robo-Technician
- วัสดุที่จะใช้เป็นแถบ สีขาว (หรือสีอ่อนมาก) ที่ยึดกับพื้นอย่างแน่นหนา ต้องกว้างกว่าช่องว่างระหว่างเซ็นเซอร์หน้าผาสองตัวด้านหน้าเพียงเล็กน้อย
- 4 ป้ายที่มีข้อความขนาดใหญ่มาก (โดยพิมพ์คำว่า IMAGE, RIGHT, BACK และ LEFT)
- แผ่นกระดาษสี (อย่างน้อยสามแผ่นและควรเป็นสีแดง สีเขียว และสีน้ำเงิน)
ซอฟต์แวร์
- Matlab (2018a และ 2017b ถูกใช้และดูเหมือนจะสร้างความแตกต่างเล็กน้อย)
- แพ็คเกจรองรับ Raspberry Pi สำหรับ Matlab
- รหัส Raspberry Pi สำหรับเชื่อมต่อกับ Matlab (ลิงก์ไปยังซอร์สโค้ดที่ให้ไว้ด้านล่าง)
- กล่องเครื่องมือประมวลผลรูปภาพสำหรับ Matlab (คุณไม่สามารถทำโครงการนี้ได้หากไม่มีกล่องเครื่องมือ)
- ไม่บังคับ: ติดตั้ง Matlab Mobile บนโทรศัพท์ของคุณแล้ว ซึ่งฉันจะอธิบายในภายหลัง
ขั้นตอนที่ 1: การตั้งค่าฮาร์ดแวร์
ef.engr.utk.edu/ef230-2018-08/projects/roo…
นี่คือลิงค์สำหรับรหัสฐานเพื่อให้แน่ใจว่า iRobot® สามารถสื่อสารกับ Matlab พร้อมกับบทช่วยสอนพื้นฐาน อย่างที่ฉันพูดไปก่อนหน้านี้ ฉันจะไม่พูดถึงส่วนนี้โดยเฉพาะ เนื่องจากการกวดวิชาได้วางไว้อย่างดีแล้ว ฉันจะพูดถึงว่าเมื่อคุณทำตามขั้นตอนในลิงก์แล้ว คุณสามารถใช้คำสั่ง "doc" ของ Matlab เพื่อดูข้อมูลที่รวมอยู่ได้ โดยเฉพาะ:
doc roomba
และอีกจุดที่สำคัญมาก
เมื่อคุณดาวน์โหลดไฟล์จากลิงค์ด้านบน ให้วางไว้ในโฟลเดอร์ที่ฉันอธิบายไว้ด้านบน เนื่องจาก Matlab ต้องการให้ไฟล์ที่ผู้ใช้สร้างขึ้นเพื่อให้อยู่ในโฟลเดอร์การทำงานปัจจุบัน
ให้ออกไปให้พ้นทางไปที่รหัส
ขั้นตอนที่ 2: ค้นหาเซ็นเซอร์เหล่านั้นทั้งหมด
ใช้เวลาสักครู่แล้วให้ iRobot® ตรวจสอบ เป็นการดีที่จะรู้ว่าสิ่งเหล่านี้อยู่ที่ไหน เพื่อให้คุณมีความคิดเกี่ยวกับอินพุตที่ Robo-Technician ได้รับ และคุณจะสามารถทราบได้ว่าทำไมสิ่งนั้นถึงหมุนเป็นวงกลมแทนที่จะไปตามเส้นทางที่คุณจะตั้งค่า (ซึ่งอาจ หรืออาจจะไม่เกิดขึ้น) คุณจะเห็นเซ็นเซอร์กันกระแทกขนาดใหญ่ที่ด้านหน้าอย่างเห็นได้ชัด เซ็นเซอร์หน้าผาจะมองเห็นได้ยากขึ้นเล็กน้อย คุณจะต้องพลิกมันแล้วมองหาหน้าต่างพลาสติกใสสี่บานที่อยู่ใกล้ขอบด้านหน้า เซ็นเซอร์ตรวจจับการกระแทกถูกซ่อนไว้มากกว่าเดิม แต่สำหรับตอนนี้ มันก็เพียงพอแล้วที่จะบอกว่าการแสดงสดในแถบสีดำวาววับอยู่รอบๆ ด้านหน้าของ iRobot® ซึ่งอยู่ที่ด้านหน้าของแถบเซ็นเซอร์การกระแทกทางกายภาพ
มีเซ็นเซอร์วัดการตกล้อ แต่สิ่งเหล่านี้ไม่ได้ใช้ในโครงการนี้ ดังนั้นเราจะทำการทดสอบเซ็นเซอร์ต่อไป
ขั้นตอนที่ 3: การทดสอบเพื่อตั้งค่าพารามิเตอร์
ก่อนที่เราจะสามารถส่งช่าง Robo-Technician ออกไปทำงานนั้นได้ เราจำเป็นต้องหาจุดแข็งและช่วงเซ็นเซอร์ของมันก่อน เนื่องจาก iRobot® แต่ละตัวมีความแตกต่างกันเล็กน้อยและเปลี่ยนแปลงตลอดอายุของหุ่นยนต์ เราจึงต้องค้นหาว่าเซ็นเซอร์จะอ่านข้อมูลในพื้นที่ที่มันทำงานอย่างไร วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการตั้งค่าเส้นทางที่มีสีอ่อน (ฉันใช้แถบกระดาษเครื่องพิมพ์สีขาว แต่อะไรก็ได้ที่เป็นสีอ่อน) บนพื้นผิวที่ Robo-Technician ทำงาน
เริ่มต้น Matlab และเปิดสคริปต์ใหม่ บันทึกสคริปต์ในโฟลเดอร์เดียวกันที่ฉันอธิบายไว้ก่อนหน้านี้และตั้งชื่อตามที่คุณต้องการ (พยายามทำให้สั้น แต่เนื่องจากชื่อของไฟล์นี้จะเป็นชื่อฟังก์ชัน) เปิดหุ่นยนต์และใช้การตั้งค่าตัวแปร roomba จากบทช่วยสอน พิมพ์คำสั่งลงในหน้าต่างคำสั่ง
ตรวจสอบให้แน่ใจว่าได้เสียบ Raspberry Pi เข้ากับ iRobot® และคอมพิวเตอร์ของคุณเชื่อมต่อกับการเชื่อมต่ออินเทอร์เน็ตเดียวกัน คุณจะใช้เวลาน้อยลงในการดึงผมออกเพื่อพยายามคิดว่าเหตุใด Matlab จึงไม่เชื่อมต่อ
r = roomba (หมายเลขที่คุณตั้งค่า)
ตัวแปร " r " ในกรณีนี้ไม่จำเป็น คุณสามารถเรียกมันว่าอะไรก็ได้ที่คุณต้องการ แต่มันทำให้ชีวิตง่ายขึ้นในการใช้ตัวแปรตัวอักษรเดียว
เมื่อตั้งค่าเส้นทางและเชื่อมต่อ roomba สำเร็จแล้ว ให้วาง Robo-Technician ในอนาคตโดยให้เซ็นเซอร์ตรวจจับหน้าผาหนึ่งหรือสองตัวอยู่เหนือเส้นทาง เห็นได้ชัดว่านั่นหมายถึงอีกสองหรือสามรายการอยู่เหนือพื้นผิวที่คุณเลือก
ตอนนี้เริ่มต้นเซ็นเซอร์ทดสอบด้วยคำสั่ง:
r.testSensors
โปรดทราบว่า " r " คือตัวแปรที่คุณกำหนดไว้ก่อนหน้านี้ ดังนั้น หากไม่ใช่ ' r ' ให้เปลี่ยน ' r. กับสิ่งที่คุณตัดสินใจ สิ่งนี้จะแสดงหน้าจอเซ็นเซอร์ทดสอบพร้อมข้อมูลมากมาย
สำหรับโครงการนี้เน้นไปที่ไฟกันชน กันชน และส่วนหน้าผา ย้ายช่างเทคนิค Robo ไปรอบๆ เพื่อให้แน่ใจว่าเซ็นเซอร์เปลี่ยนแปลงอย่างไรบนพื้นผิวต่างๆ หรือวัตถุต้องอยู่ใกล้แค่ไหนเพื่อให้ค่า ligthBumper เปลี่ยนไป ฯลฯ จำตัวเลขเหล่านี้ไว้ (หรือจดไว้) เพราะคุณจะ ต้องการให้ตั้งค่าพารามิเตอร์ของคุณในไม่กี่วินาที
ขั้นตอนที่ 4: การเริ่มต้นรหัส
ก่อนอื่นคุณจะต้องสร้างฟังก์ชัน ฉันเรียกมันว่า "เส้นทาง" แต่อีกครั้ง ไม่จำเป็นต้องใช้ชื่อนี้ แต่ฉันจะเรียกมันว่า "เส้นทาง" ต่อจากนี้ไป
ส่วนบนของรหัสคือการตั้งค่าตัวเลือกการป้อนข้อมูลของผู้ใช้ มันสร้างรายการบางรายการที่จะใช้ใน listdlg แล้วเปิดกล่องโต้ตอบรายการ ซึ่งช่วยให้ผู้ใช้สามารถเลือกสีพาธที่ต้องการได้ ซึ่งจะเข้ามาเล่นในภายหลัง
รายการ = {'แดง', 'น้ำเงิน', 'เขียว'}
problist = {'Casualty, Save Image', 'Component Out of Place, Save Image', 'Expected, Continue'} pathcolor = listdlg ('PromptString', 'Select a Path Color', … 'SelectionMode', 'single', 'ListString', รายการ) ปัญหา = 0; ไดรฟ์ = ;
ต้องประกาศตัวแปร "prob" และ "driv" ที่นี่ เนื่องจากจะใช้ภายใน main while loop ของฟังก์ชัน แต่อีกครั้ง ถ้าคุณต้องการเปลี่ยนชื่อตัวแปรเหล่านี้หรือเปลี่ยนการเลือกรายการ ก็ไม่เป็นไร คุณมีความสอดคล้องในส่วนที่เหลือของรหัส
ขั้นตอนที่ 5: ด้านบนของวงในขณะที่: เซ็นเซอร์การกระแทกทางกายภาพ
ด้านบนของลูป while มีลอจิกเซ็นเซอร์การชนทางกายภาพ โดยพื้นฐานแล้วเมื่อ Robo-Technician ชนกับบางอย่างจะหยุด (หรือสำหรับเซ็นเซอร์กันกระแทกด้านหน้าจะสำรองไว้ 0.1 เมตร) จากนั้นจะจัดตำแหน่งตัวเองเพื่อถ่ายภาพ ให้ครอบคลุมส่วนควบคุมความเร็วและตำแหน่งก่อน
หากคุณทดสอบเซ็นเซอร์ทั้งหมดกับ Robo-Technician ในขั้นตอนก่อนหน้านี้ คุณจะรู้ว่าเซ็นเซอร์กันกระแทกมีค่าตรรกะ (0 หรือ 1) โดยมีค่าศูนย์ซึ่งแสดงถึงตำแหน่งปกติที่ไม่ได้กดของเซ็นเซอร์ เก็บไว้ในใจสำหรับรหัส
ในขณะที่ true %main ในขณะที่ลูป % รับข้อมูลบัมเปอร์ S = r.getBumpers ถ้า S.left ~= 0 r.stop elseif S.right ~= 0 r.stop elseif S.front ~= 0 r.stop end
นี่เป็นส่วนพื้นฐาน "ถ้ามันกระทบอะไรหยุด" หากเซ็นเซอร์ตรวจจับการชนกัน เซ็นเซอร์จะเคลื่อนไปยังส่วนถัดไปของรหัส ซึ่งจะปรับตำแหน่งของ Robo-Technician ใหม่เพื่อให้ได้ภาพถ่าย
ถ้า S.left ~= 0 % ถ้าลูปใช้ข้อมูลบัมเปอร์และจัดตำแหน่งกล้องสำหรับรูปภาพ r.turnAngle(5) หยุดชั่วคราว (0.5) img = r.getImage % ถ่ายภาพและแสดงภาพ (img) % กล่องโต้ตอบ prob = listdlg(' PromptString', 'พบอุปสรรคที่ไม่คาดคิด โปรดระบุ'…, 'SelectionMode', 'single', 'ListString', problist) elseif S.right ~=0 r.turnAngle(-5) pause(0.5) img = r getImage image(img) prob = listdlg('PromptString', 'Found an Unexpected Obstacle โปรดระบุ'…, 'SelectionMode', 'single', 'ListString', problist) elseif S.front ~= 0 r.moveDistance(- 0.1) หยุดชั่วคราว (0.5) img = r.getImage image (img) prob = listdlg('PromptString', 'พบอุปสรรคที่ไม่คาดคิด โปรดระบุ'…, 'SelectionMode', 'single', 'ListString', problist) สิ้นสุด
โดยพื้นฐานแล้ว เมื่อถ่ายภาพแล้ว กล่องโต้ตอบอื่นจะปรากฏขึ้นพร้อมสามตัวเลือก สองตัวเลือกแรกจะบันทึกรูปภาพลงในโฟลเดอร์ที่ระบุ ซึ่งฉันจะกล่าวถึงในภายหลัง ในขณะที่ตัวเลือกที่สามเพียงแค่ปิดกล่องโต้ตอบและดำเนินการต่อผ่านลูป หากคุณจำตัวเลือกไม่ได้ ให้ดูที่ขั้นตอนก่อนหน้า
ตอนนี้ฉันแทรกส่วนโค้ดไว้ระหว่างส่วนเซ็นเซอร์กันกระแทกและส่วนการบันทึกรูปภาพ สิ่งนี้ใช้ค่า lightBumper และตั้งค่าความเร็วของไดรฟ์เป็น 0.025 เมตร/วินาที (ช้ามาก) ซึ่งไม่จำเป็นจริงๆ แต่จะช่วยลดการกระแทกของ Robo-Technician และทำให้เซ็นเซอร์การกระแทกทางกายภาพเสื่อมสภาพในที่สุด
L = r.getLightBumpers ถ้า L.left > 100 || L.leftFront >100 || L.rightFront >100 || L.right >100 driv = 0.025 r.setDriveVelocity(0.025) อื่น driv = 0.1 สิ้นสุด
นี่จะเป็นส่วนหนึ่งที่ค่าที่คุณสังเกตเห็น (และหวังว่าจะเขียนลงไป) ก่อนหน้านี้เข้ามาเล่น
"L.(ด้านข้างและทิศทางของเซนเซอร์) > 100" ขึ้นอยู่กับค่าที่ฉันสังเกต ดังนั้นหากการสังเกตของคุณแตกต่างกัน ให้เปลี่ยนตัวเลขเหล่านี้ แนวคิดก็คือถ้าช่างเทคนิคหุ่นยนต์สัมผัสได้ถึงบางสิ่งที่อยู่ข้างหน้ามันสักสองสามเซนติเมตร มันจะช้าลง มากกว่านั้นก็ไม่จำเป็น
ส่วนต่อไปเป็นที่ที่บันทึกรูปภาพไว้ใช้ในภายหลัง
% หากเลือกตัวเลือกแรกหรือตัวเลือกที่สองในกล่องโต้ตอบ prob ให้บันทึกรูปภาพหาก prob == 1 % ถ้าลูปสร้างข้อมูลไฟล์สำหรับรูปภาพ เขียนด้วยการประทับเวลา t = นาฬิกา; basename = sprintf('\img_%d_%d_%d_%d_%d.png', t(1), t(2), t(3), t(4), t(5)); โฟลเดอร์ = 'E:\UTK\Classes\fall 18\ef230\irobot\images'; fullFileName = fullfile (โฟลเดอร์ ชื่อฐาน); imwrite(img, fullFileName) ปิด รูปที่ 1 หยุดชั่วคราว (2) elseif prob == 2 t = นาฬิกา; basename = sprintf('\img_%d_%d_%d_%d_%d.png', t(1), t(2), t(3), t(4), t(5)); โฟลเดอร์ = 'E:\UTK\Classes\fall 18\ef230\irobot\images'; fullFileName = fullfile (โฟลเดอร์ ชื่อฐาน); imwrite(img, fullFileName) ปิด รูปที่ 1 หยุดชั่วคราว (2) สิ้นสุด
ชื่อไฟล์และตำแหน่งทั้งหมดที่บันทึกรูปภาพนั้นเป็นทางเลือก ฉันเลือกโฟลเดอร์ที่ซ้อนอยู่ในโฟลเดอร์ roomba ที่ฉันสร้างในขั้นตอนการแนะนำตัว แต่จะอยู่ที่ใดก็ได้ที่คุณเลือก นอกจากนี้ รูปถ่ายจะถูกบันทึกด้วยการประทับเวลา แต่นั่นก็ไม่จำเป็นอย่างยิ่ง (แม้ว่าจะมีประโยชน์ตามสมมุติฐานสำหรับภารกิจของดาวอังคาร)
เมื่อปิดเซ็นเซอร์กันกระแทกแล้ว เราสามารถเคลื่อนไปยังเซ็นเซอร์หน้าผาและเส้นทางต่อไปได้
ขั้นตอนที่ 6: ตามเส้นทาง
รหัสสำหรับเซ็นเซอร์หน้าผาถูกตั้งค่าเพื่อเปรียบเทียบค่าของค่าเซ็นเซอร์ด้านหน้าสองค่าและค่าเซ็นเซอร์สองด้าน คุณจะต้องเปลี่ยนค่าเหล่านี้ (อาจ) ตามค่าที่สังเกตได้ของคุณ นอกจากนี้ คุณยังอาจจำเป็นต้องแก้ไขค่าเหล่านี้หลังจากทำการทดสอบไปสองสามครั้ง และเปลี่ยนแปลงตามแสงแวดล้อม ช่วงเวลาของวัน (ขึ้นอยู่กับว่าพื้นที่ทดสอบมีแสงสว่างเพียงพอ) หรือเมื่อหน้าต่างเซ็นเซอร์สกปรก
ก่อนที่เราจะไปที่รหัสเซ็นเซอร์หน้าผา มีส่วนรหัสสั้น ๆ ที่ฉันแทรกเพื่อล้างข้อมูลที่ไม่จำเป็นบางส่วนจาก Matlab ส่วนนี้ไม่จำเป็น แต่ฉันใช้มันเพื่อลดพื้นที่เก็บข้อมูลที่จำเป็นสำหรับการรันโปรแกรม
ล้าง img ล้าง t ล้างชื่อฐาน ล้าง fullFileName ล้างโฟลเดอร์
ส่วนรหัสถัดไปคือเนื้อของโครงการ ช่วยให้ Robo-Technician เดินตามเส้นทางสีอ่อนที่วางไว้บนพื้น โดยสรุป มันพยายามบังคับตัวเองเพื่อให้เซ็นเซอร์หน้าผาสองตัวด้านหน้าอยู่เหนือเกณฑ์ โดยอิงจากค่าที่สังเกตได้ของคุณ และช่วยให้โปรแกรมเริ่มขั้นตอนการประมวลผลภาพในภายหลังได้เล็กน้อย
C = r.getCliffSensors % ถ้าลูปตามแถบสี (สีขาว) ถ้า C.leftFront > 2000 && C.rightFront >2000 %เส้นบอกแนวตรง r.setDriveVelocity(driv) elseif C.leftFront 2000 % เลี้ยวขวาถ้าหุ่นยนต์ไปไกลเกินไป left r.turnAngle(-2.5) elseif C.leftFront >2000 && C.rightFront<2000%turns left if robot left ifrobot to right too far right r.turnAngle(2.5) elseif C.leftFront <2000 && C.rightFront 100 || L.leftFront >100 || L.rightFront >100 || L.right >100 img = r.getImage end %checks to see if there are a bend in path if C.left >2800 && C.right <2800 r.turnAngle(2.5) elseif C.left 2800 r.turnAngle(- 2.5) วางตำแหน่ง % สิ้นสุดสำหรับการแสดงการรู้จำภาพเส้นทาง ('รับภาพ') สิ้นสุดปลายทาง
โปรดจำไว้ว่าชื่อตัวแปรที่ฉันเลือกนั้นเป็นทางเลือก แต่ฉันคิดว่ามันทำให้ชีวิตง่ายขึ้นที่จะใช้ตัวแปรตัวอักษรเดี่ยวเมื่อเป็นไปได้
เพื่ออธิบายส่วนตรงกลางของรหัส เมื่อเซ็นเซอร์ด้านหน้าทั้งสองวิ่งออกจากขอบทางเดิน (เมื่อถึงทางแยกหรือเมื่อถึงจุดสิ้นสุดของเส้นทาง) จะดูว่ามีอะไรอยู่ข้างหน้าหรือไม่. คุณจะต้องวางวัตถุบนพื้นตรงปลายเส้นทางหรือที่ทางแยกใดๆ เพื่อให้สิ่งนี้ทำงาน
เมื่อถ่ายภาพแล้ว ระบบจะใช้การจดจำภาพเพื่อค้นหาว่าต้องทำอย่างไร มีตัวยึดตำแหน่งในส่วนนี้ของรหัสเช่นกัน:
% ตัวยึดตำแหน่งสำหรับการรับรู้ภาพเส้นทาง ('GETTING IMAGE')
ฉันใช้สิ่งนี้ชั่วคราวเพราะฉันต้องการพูดเฉพาะเกี่ยวกับการประมวลผลข้อความและสีที่เกิดขึ้น ซึ่งอยู่ในขั้นตอนต่อไป
ขั้นตอนที่ 7: การประมวลผลภาพ
การประมวลผลภาพมีสองส่วน อย่างแรกคือการรู้จำสี ซึ่งจะคำนวณความเข้มของสีในรูปภาพเพื่อตัดสินใจว่าจะใช้การจดจำข้อความต่อไปหรือไม่ การคำนวณสีขึ้นอยู่กับตัวเลือกที่ทำในกล่องโต้ตอบแรกนั้นในตอนเริ่มต้น (ฉันใช้สีแดง น้ำเงิน เขียว แต่คุณสามารถเลือกสีใดก็ได้ที่คุณต้องการ ตราบใดที่ค่าเฉลี่ยสำหรับความเข้มของสีสามารถรับรู้ได้โดย กล้อง Raspberry Pi)
img = r.getImage img = imcrop(img, [0 30 512 354]) imgb =imcrop(img, [0 30 512 354]) imgt = imcrop(img, [0 30 512 354]) red = mean(mean() imgb(:,:, 1))); g = ค่าเฉลี่ย(หมายถึง(imgb(:,:, 2))); b = ค่าเฉลี่ย(หมายถึง(imgb(:,:, 3)));
นี่คือการตรวจสอบความเข้ม จะใช้ในส่วนถัดไปเพื่อตัดสินใจว่าต้องการทำอะไร
if red > g && red >b if pathcolor == 1 imgc = imcrop(img, [0 30 512 354]) R = ocr(img) if R. Words{1} == IMAGE || R. Words{2} == IMAGE || R. Words{3} ==IMAGE t = นาฬิกา; basename = sprintf('\img_%d_%d_%d_%d_%d.png', t(1), t(2), t(3), t(4), t(5)); โฟลเดอร์ = 'E:\UTK\Classes\fall 18\ef230\irobot\images'; fullFileName = fullfile (โฟลเดอร์ ชื่อฐาน); imwrite(img, fullFileName) หยุดชั่วคราว(2) elseif R. Words{1} == RIGHT || R. Words{2} == ขวา || R. Words{3} ==RIGHT r.turnAngle(-75) elseif R. Words{1} == LEFT || R. Words{2} == ซ้าย || R. Words{3} == ซ้าย r.turnAngle(75) elseif R. Words{1} == BACK || R. Words{2} == ย้อนกลับ || R. Words{3} ==BACK r.turnAngle(110) end else r.turnAngle(110) end end
ส่วนนี้กำหนดว่าสีที่เลือกในกล่องโต้ตอบแรกตรงกับสีที่กล้องเห็นหรือไม่ ถ้ามันรันจะรันการจดจำข้อความ ดูเหมือนว่าจะเห็นว่าคำใด (IMAGE, BACK, RIGHT หรือ LEFT) ปรากฏขึ้นจากนั้นจึงเลี้ยว (สำหรับขวาและซ้าย) หมุนไปรอบ ๆ (สำหรับด้านหลัง) หรือถ่ายภาพและบันทึกในลักษณะเดียวกับก่อนหน้านี้
ฉันได้ให้รหัสเพียงส่วนเดียวสำหรับสีที่ต่างกัน
เพื่อให้โค้ดรู้จักสีน้ำเงินและสีเขียว เพียงคัดลอกโค้ดแล้วเปลี่ยนการตรวจสอบลอจิกที่ด้านบนของเซ็กเมนต์และตั้งค่า " pathcolor == (number) " ให้สอดคล้องกับการเลือกสีจากกล่องโต้ตอบด้านบน (สำหรับ รหัสตามที่แสดง สีน้ำเงินจะเป็น 2 และสีเขียวจะเป็น 3)
ขั้นตอนที่ 8: ผลิตภัณฑ์สำเร็จรูป
ตอนนี้ Robo-Technician ควรซูมไปรอบๆ โมดูลภารกิจของ Mars และรายงานกลับไปยังนักบินอวกาศเมื่อมีสิ่งผิดปกติเกิดขึ้น
โปรดจำไว้ว่า ค่าเซ็นเซอร์หน้าผาและ lightBumper ทั้งหมดจะต้องเปลี่ยนเป็นค่าที่สังเกตได้ของคุณ นอกจากนี้ จากประสบการณ์ ฉันพบว่าการทดสอบโปรเจ็กต์นี้บนพื้นสีเข้มจะดีกว่า และจะดีกว่าถ้าพื้นนั้นไม่สะท้อนแสง สิ่งนี้ทำให้ความเปรียบต่างเพิ่มขึ้นระหว่างทางเดินกับพื้นซึ่งทำให้ช่างเทคนิค Robo จะปฏิบัติตามอย่างถูกต้องมากขึ้น
หวังว่าคุณจะสนุกกับการสร้างผู้ช่วยตัวน้อยสำหรับภารกิจ Mars และสนุกกับการสร้าง
แนะนำ:
Simple Robo-Dog (ทำจากคีย์เปียโน ปืนของเล่น และเมาส์): 20 ขั้นตอน (พร้อมรูปภาพ)
Simple Robo-Dog (ทำจากคีย์เปียโน ปืนของเล่น และเมาส์): โอ้ อาเซอร์ไบจาน! ดินแดนแห่งไฟ การต้อนรับที่ดี ผู้คนที่เป็นมิตรและผู้หญิงสวย (… ขอโทษนะ ผู้หญิง! แน่นอน ฉันมีตาให้คุณเท่านั้น ภรรยาของฉัน gözəl balaca ana ördəkburun!) แต่บอกตามตรง ที่นี่เป็นสถานที่ที่ยากมากสำหรับผู้ผลิต โดยเฉพาะอย่างยิ่งเมื่อคุณ
Hex Robo V1 (พร้อม Cannon): 9 ขั้นตอน (พร้อมรูปภาพ)
Hex Robo V1 (พร้อม Cannon): แรงบันดาลใจจากหุ่นยนต์ตัวก่อนของฉัน คราวนี้ฉันสร้าง Hex Robo สำหรับเกม War ติดตั้งปืนใหญ่ (ถัดไปใน V2) หรืออาจควบคุมโดยใช้จอยสติ๊ก (ถัดไปใน V3) ฉันคิดว่ามันน่าเล่น กับเพื่อน ยิงกันโดยใช้ลูกบอลพลาสติกปืนใหญ่ขนาดเล็กและ
Robo-recruiter ของ Makerspace - รับคำตอบสำหรับคำถามที่พบบ่อยของคุณ: 4 ขั้นตอน
Robo-recruiter ของ Makerspace - รับคำตอบสำหรับคำถามที่พบบ่อยของคุณ: ปีที่แล้วฉันเสนอให้ผู้อำนวยการโรงเรียนเสนอแนวคิดที่จะมีชั้นเรียน Makerspace นอกหลักสูตรสำหรับนักเรียนที่อยากรู้ทุกอย่างเกี่ยวกับเครื่องมือทุกอย่างที่เรามี ในที่สุดเมื่อเขาตกลง ฉันก็รู้ว่าฉันต้องดึงความสนใจของนักเรียนทั้งหมด
วิธีการติดตั้ง Robo Recall Mod Kit (ตัวเรียกใช้ 2019): 4 ขั้นตอน
วิธีติดตั้ง Robo Recall Mod Kit (ตัวเรียกใช้ 2019): ด้วยการเปิดตัว Epic Games Store และผลกระทบของเกมอย่าง Fortnite ตัวเรียกใช้งานของ Epic Games ได้ทำการเปลี่ยนแปลงครั้งใหญ่ในปี 2018 และในปี 2019 ในขณะที่ยังคงมีอยู่อย่างง่ายดาย หมวดหมู่ที่เลือกได้สำหรับการพัฒนาตามปกติ (โดยใช้ฐาน un
Braço Robô Controlado Por Giroscópio Via Celular: 3 ขั้นตอน
Braço Robô Controlado Por Giroscópio ทาง Celular: Este projeto ira te auxiliar na criação de um braço robótico controlado pelo giroscópio de um celular, irei separa em x partes:Lista de materiaisEsquema eletrônicoMovendo eletrônicoMovendo