สารบัญ:
- ขั้นตอนที่ 1: รับห้องสมุด
- ขั้นตอนที่ 2: การเขียนโปรแกรม
- ขั้นตอนที่ 3: รหัส
- ขั้นตอนที่ 4: เรียกใช้โค้ด
วีดีโอ: โครงการ Mars Roomba UTK: 4 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
การปฏิเสธความรับผิด: นี้จะใช้ได้เฉพาะในกรณีที่ ROOMBA ถูกตั้งค่าใน A
วิธีที่เฉพาะเจาะจงมาก คำสั่งสอนนี้จัดทำขึ้นและตั้งใจที่จะใช้โดยมหาวิทยาลัยของนักศึกษาและคณะรัฐเทนเนสซี
รหัสนี้ใช้เพื่อตั้งค่า Roomba ให้เรียกใช้โค้ดที่เขียนและบันทึกไว้ในเครื่องใน MATLAB สิ่งนี้จะไม่ทำงานหากคุณไม่สามารถรับห้องสมุดที่จำเป็นจากเว็บไซต์ของ University of Tennessee หากคุณมีไลบรารี คุณจะสามารถใช้ไลบรารีเหล่านั้นเพื่อตั้งโปรแกรม Roomba ของคุณเองได้โดยใช้ฟังก์ชันต่างๆ ในไลบรารี คำแนะนำนี้จะสอนวิธีติดตั้งไลบรารี่ สร้างโฟลเดอร์สำหรับโค้ดทั้งหมด และวิธีโค้ดและการใช้โปรแกรมที่เราให้ไว้ด้านล่าง
วัสดุที่จำเป็น:
· รูมบา
· MATLAB
· กล้อง Raspberry Pi และ Pi
ขั้นตอนที่ 1: รับห้องสมุด
ในเว็บไซต์วิศวกรรมจะมีกล่องเครื่องมือ/ไลบรารีให้ดาวน์โหลดและวางไว้ในโฟลเดอร์ใหม่ โฟลเดอร์นี้ต้องมีไฟล์งานโครงการทั้งหมด เนื่องจากฟังก์ชันใดๆ ที่ใช้ในโปรแกรมที่คุณสร้างจะต้องอ้างอิงถึงไลบรารี หลังจากที่คุณทำสิ่งนี้แล้ว คุณสามารถเริ่มต้นใช้งานโปรแกรมของคุณได้
ขั้นตอนที่ 2: การเขียนโปรแกรม
มีฟังก์ชันค่อนข้างน้อยที่สามารถใช้ในโปรแกรมได้ ฟังก์ชันเหล่านี้สามารถเข้าถึงได้โดยใช้คำสั่ง "doc roomba" คุณสามารถใช้ฟังก์ชันเหล่านี้เพื่อควบคุม Roomba ของคุณได้หลายวิธี รหัสที่ระบุด้านล่างใช้เซ็นเซอร์กันกระแทก เซ็นเซอร์แถบแสง กล้อง และเซ็นเซอร์หน้าผาในรูปแบบต่างๆ เพื่อสร้างยานสำรวจดาวอังคาร เราใช้เซ็นเซอร์ตรวจจับการกระแทกเพื่อตรวจจับเมื่อ Roomba ชนวัตถุ เมื่อสิ่งนี้เกิดขึ้น หุ่นยนต์จะถอยหลัง หันหลังกลับ และเคลื่อนที่ต่อไป ก่อนที่ Roomba จะกระทบกับวัตถุ แถบไฟจะตรวจจับวัตถุและทำให้ Roomba ทำงานช้าลง ดังนั้นเมื่อ Roomba ชนวัตถุเพื่อเปิดใช้งานเซ็นเซอร์ตรวจจับการกระแทก Roomba จะได้รับความเสียหาย/ได้รับผลกระทบจากแรงกระแทกน้อยลง กล้องจะค้นหาน้ำหรือลาวาบนพื้นผิว หากไม่พบของเหลว หุ่นยนต์จะทำการค้นหาต่อไป หากพบน้ำ หุ่นยนต์จะส่งข้อความถึงผู้ปฏิบัติงาน เซ็นเซอร์ตรวจจับหน้าผาถูกออกแบบมาเพื่อหยุดหุ่นยนต์หากเข้าใกล้หน้าผา หากหุ่นยนต์สัมผัสได้ถึงหน้าผา หุ่นยนต์จะถอยหลังและหันหลังกลับเพื่อหลีกเลี่ยงการล้ม
ขั้นตอนที่ 3: รหัส
คัดลอกและวางลงในไฟล์ MATLAB ที่อยู่ในโฟลเดอร์เดียวกับไลบรารี
ฟังก์ชันMainRoombaFile(r)
r.setDriveVelocity(0.1, 0.1)
ในขณะที่จริง % Infinte ในขณะที่วนซ้ำเพื่อให้โค้ดทำงานต่อไป
dontFall = CliffCheck(r) % กำหนดตัวแปร 'dontFall' ให้กับฟังก์ชัน 'cliffCheck'
if dontFall % ถ้าคำสั่งดำเนินการในโค้ดหลังจาก 'cliffCheck' เสร็จสมบูรณ์
r.setDriveVelocity(0.1, 0.1) % ทำให้ Roomba เคลื่อนที่หลังจาก 'cliffCheck' เสร็จสิ้น
end % สิ้นสุด 'dontFall' ถ้าคำสั่ง
bumper=bumpcheck(r) % กำหนดตัวแปร 'bumper' ให้กับฟังก์ชัน 'bumpcheck'
ถ้าบัมเปอร์ % ถ้าคำสั่งดำเนินการในโค้ดหลังจาก 'bumpcheck' เสร็จสมบูรณ์
r.setDriveVelocity(0.1, 0.1) % ทำให้ Roomba เคลื่อนที่หลังจาก 'bumpcheck' เสร็จสิ้น
สิ้นสุด % สิ้นสุด 'บัมเปอร์' ถ้าคำสั่ง
ของเหลว = LiquidCheck(r) % กำหนดตัวแปร 'ของเหลว' ให้กับฟังก์ชัน 'LiquidCheck'
ถ้าของเหลว % ถ้าคำสั่งดำเนินการในรหัสหลังจาก 'LiquidCheck' เสร็จสมบูรณ์
r.setDriveVelocity(0.1, 0.1) % ทำให้ Roomba เคลื่อนที่หลังจาก 'LiquidCheck' เสร็จสมบูรณ์
end % สิ้นสุด 'ของเหลว' ถ้าคำสั่ง
lightbumper=lightcheck(r) % กำหนดตัวแปร 'lightbumper' ให้กับฟังก์ชัน 'lightcheck'
หยุดชั่วคราว (0.1) % หยุดชั่วครู่เพื่อหลีกเลี่ยงการวนซ้ำอย่างต่อเนื่อง
end% สิ้นสุดไม่สิ้นสุดในขณะที่วนรอบ
สิ้นสุด % สิ้นสุดฟังก์ชัน
function bumper=bumpcheck(r) % สร้างฟังก์ชั่น 'bumpcheck'
bumpdata= r.getBumpers % กำหนดข้อมูลทั้งหมดจากบัมเปอร์ให้กับตัวแปร 'bumpdata'
กันชน = bumpdata.right || bumpdata.left || bumpdata.front % สร้างตัวแปรที่เก็บไว้ 'bumper' สำหรับบัมเปอร์ต่างๆ
if bumpdata.right>0% หากคำสั่งทำให้ฟังก์ชั่นต่าง ๆ ของ roomba เกิดขึ้นหาก Bumper ถูกกระแทก
r.stop % หยุด Roomba
r.moveDistance(-0.3, 0.2) % ย้อนกลับ Roomba 0.3m
r.turnAngle(90, 0.5) % หมุน Roomba 90 องศาให้เร็วที่สุด
จบ
ถ้า bumpdata.front>0
ร.หยุด
r.moveDistance(-0.3, 0.2)
r.turnAngle(randi(270), 0.5) % หมุน Roomba ในช่วงเวลาสุ่มระหว่าง 0 ถึง 270 องศาให้เร็วที่สุด
จบ
ถ้า bumpdata.left>0
ร.หยุด
r.moveDistance(-0.3, 0.2)
r.turnAngle(-90, 0.5) % หมุน Roomba -90 องศาให้เร็วที่สุด
จบ
จบ
ฟังก์ชั่น lightbumper=lightcheck(r) % สร้างฟังก์ชัน 'lightcheck'
lightdata= r.getLightBumpers % กำหนดข้อมูลทั้งหมดจากเซ็นเซอร์ light Bump ให้กับตัวแปร 'lightdata'
lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % สร้างตัวแปรที่เก็บไว้ 'lightbumper' สำหรับกันชนไฟที่แตกต่างกัน
ถ้า lightbumper % ถ้าคำสั่งเรียกข้อมูล lightbumper จากด้านบน
ถ้า lightdata.left>10 % ถ้าข้อความสั่งทำให้ฟังก์ชันต่าง ๆ ของ roomba เกิดขึ้น ถ้ากันชนแสงตรวจพบค่ามากกว่า 10 ค่า
r.setDriveVelocity(0.05, 0.05) % ทำให้ roomba ช้าลงเพื่อเตรียมพร้อมสำหรับการชน
end % สิ้นสุดเริ่มต้น if statement
ถ้า lightdata.rightCenter>10
r.setDriveVelocity(0.05, 0.05)
จบ
ถ้า lightdata.right>10
r.setDriveVelocity(0.05, 0.05)
จบ
ถ้า lightdata.leftCenter>10
r.setDriveVelocity(0.05, 0.05)
จบ
end % สิ้นสุด 'lightbumper' ถ้าคำสั่ง
สิ้นสุด % สิ้นสุดฟังก์ชัน lightcheck
ฟังก์ชัน dontFall = CliffCheck(r) % สร้างฟังก์ชัน 'cliffCheck'
data = r.getCliffSensors; % กำหนดข้อมูลทั้งหมดจากเซ็นเซอร์หน้าผาให้กับตัวแปร 'ข้อมูล'
dontFall = data.left<1020 || data.leftFront<1020 || data.rightFront<1020 || data.right<1020 % สร้างตัวแปรที่เก็บไว้ 'dontFall' สำหรับเซ็นเซอร์หน้าผาที่แตกต่างกัน
if dontFall % ถ้าคำสั่งเรียกข้อมูลเซ็นเซอร์หน้าผาจากด้านบน
ถ้า data.left < 1010 % หากคำสั่งทำให้ฟังก์ชันต่าง ๆ ของ roomba เกิดขึ้นหากเซ็นเซอร์ตรวจจับหน้าผาตรวจจับค่าน้อยกว่า 1,010 ค่า
ร.หยุด
r.moveDistance(-0.2, 0.2) % ย้อนกลับ Roomba 0.2m
r.turnAngle(-90, 0.5) % หมุน Roomba -90 องศาให้เร็วที่สุด
elseif data.leftด้านหน้า < 1010
ร.หยุด
r.moveDistance(-0.3, 0.2)
r.turnAngle(90, 0.5) % หมุน Roomba 90 องศาให้เร็วที่สุด
elseif data.rightFront < 1010
ร.หยุด
r.moveDistance(-0.3, 0.2)
r.turnAngle(90, 0.5) % หมุน Roomba 90 องศาให้เร็วที่สุด
elseif data.right < 1010
ร.หยุด
r.moveDistance(-0.3, 0.2)
r.turnAngle(90, 0.5) % หมุน Roomba 90 องศาให้เร็วที่สุด
จบ
จบ
จบ
ฟังก์ชัน liquids = LiquidCheck(r) % สร้างฟังก์ชัน 'LiquidCheck'
ในขณะที่จริง % start infinite loop สำหรับการสอบเทียบ
img = r.getImage; % อ่านค่ากล้องจากหุ่นยนต์
image(img) % แสดงรูปภาพในหน้าต่างรูป
red_mean = mean(mean(img(200, 150, 1)))% อ่านจำนวนพิกเซลสีแดงเฉลี่ย
blue_mean = mean(mean(img(200, 150, 3)))% อ่านจำนวนพิกเซลสีน้ำเงินเฉลี่ย
ของเหลว = red_mean || blue_mean % สร้างตัวแปรที่เก็บไว้ 'liquids' สำหรับตัวแปรสีต่างๆ
ถ้าของเหลว% ถ้าคำสั่งเรียกข้อมูลภาพจากด้านบน
ถ้า red_mean>170 % ถ้าคำสั่งที่ทำให้ฟังก์ชันต่าง ๆ ของ roomba เกิดขึ้น ถ้ากล้องเห็นสีแดงเฉลี่ยมากกว่า 170
r.stop % หยุด roomba
r.setLEDCenterColor(255) % กำหนดให้วงกลมเป็นสีแดง
r.setLEDDigits(); % ล้างจอแสดงผล
f = waitbar(0, '*ข้อความขาเข้า*'); % สร้างแถบรอสำหรับการโหลดข้อความ
r.setLEDDigits('HOT'); % ตั้งค่าจอแสดงผล LED เป็นเอาต์พุต 'HOT'
หยุดชั่วคราว(0.5) %สั้น หยุดชั่วคราวเพื่ออ่านข้อมูลที่แสดง
r.setLEDDigits('LAVA'); % ตั้งค่าจอแสดงผล LED เป็นเอาต์พุต 'LAVA'
หยุดชั่วคราว(0.5)
waitbar (.33, f, '*ข้อความขาเข้า*'); %สร้างการเพิ่มขึ้นของ waitbar
r.setLEDDigits('HOT');
หยุดชั่วคราว(0.5)
r.setLEDDigits('LAVA');
หยุดชั่วคราว(0.5)
waitbar (.67, f, '*ข้อความขาเข้า*'); % สร้างการเพิ่มขึ้นของ waitbar
r.setLEDDigits('HOT');
หยุดชั่วคราว(0.5)
r.setLEDDigits('LAVA');
waitbar(1, f, '*ข้อความขาเข้า*'); %ทำให้แถบรอเสร็จสมบูรณ์
หยุดชั่วคราว(1)
close(f) %ปิด waitbar
r.setLEDDigits(); % ล้างจอแสดงผล LED
ปิดทั้งหมด %ปิดหน้าต่างก่อนหน้าทั้งหมด
axes('Color', 'none', 'XColor', 'none', 'YColor', 'none') % ล้างหน้าต่างพล็อตของแกนและแผนภูมิ
y=0.5; % กำหนดตำแหน่ง y ของข้อความในหน้าต่างการพล็อต
x=0.06; % กำหนดตำแหน่ง x ของข้อความในหน้าต่างการพล็อต
title('FROM MARS ROOMBA', 'fontsize', 32) % เพิ่มชื่อให้กับหน้าต่างการพล็อต
quadeqtxt = 'ลาวาอันตราย'; % ตั้งค่าตัวแปร 'quadeqtxt' เป็นเอาต์พุต 0
ข้อความ (x, y, quadeqtxt, 'ล่าม', 'ลาเท็กซ์', 'ขนาดตัวอักษร', 36); % แสดงข้อความ quadeq ในหน้าต่างการพล็อต
r.moveDistance(-0.2, 0.2) % ย้อนกลับ roomba 0.2m
r.turnAngle(180, 0.5) %เปลี่ยน roomba 180 องศาให้เร็วที่สุด
r.setLEDCenterColor(128, 128); % ตั้งค่า LED ตรงกลาง Roomba เป็นสีส้ม
ปิดทั้งหมด %closes ที่เหลืออยู่ในหน้าต่างที่เปิดอยู่
elseif blue_mean>175% หากคำสั่งที่ทำให้ฟังก์ชั่นต่าง ๆ ของ roomba เกิดขึ้นหากกล้องเห็นสีน้ำเงินเฉลี่ยมากกว่า 175
r.stop % หยุด roomba
r.setLEDCenterColor(255) % กำหนดให้วงกลมเป็นสีแดง
r.setLEDDigits(); % ล้างหน้าจอ
f = waitbar(0, '*ข้อความขาเข้า*'); % สร้างแถบรอสำหรับการโหลดข้อความ
r.setLEDDigits('LOOK'); % ตั้งค่าจอแสดงผล LED เป็นเอาต์พุต 'LOOK'
หยุดชั่วคราว(0.5) %สั้น หยุดชั่วคราวเพื่ออ่านข้อมูลที่แสดง
r.setLEDDigits('WATR'); % ตั้งค่าจอแสดงผล LED เป็นเอาต์พุต 'WATR'
หยุดชั่วคราว(0.5)
waitbar (.33, f, '*ข้อความขาเข้า*'); %สร้างการเพิ่มขึ้นของ waitbar
r.setLEDDigits('LOOK');
หยุดชั่วคราว(0.5)
r.setLEDDigits('WATR');
หยุดชั่วคราว(0.5)
waitbar (.67, f, '*ข้อความขาเข้า*'); % สร้างการเพิ่มขึ้นของ waitbar
r.setLEDDigits('LOOK');
หยุดชั่วคราว(0.5)
r.setLEDDigits('WATR');
waitbar(1, f, '*ข้อความขาเข้า*'); %ทำให้แถบรอเสร็จสมบูรณ์
หยุดชั่วคราว(1)
close(f) %ปิด waitbar
r.setLEDDigits(); % ล้างจอแสดงผล LED
ปิดทั้งหมด %ปิดหน้าต่างก่อนหน้าทั้งหมด
axes('Color', 'none', 'XColor', 'none', 'YColor', 'none') % ล้างหน้าต่างพล็อตของแกนและแผนภูมิ
y=0.5; % กำหนดตำแหน่ง y ของข้อความในหน้าต่างการพล็อต
x=0.06; % กำหนดตำแหน่ง x ของข้อความในหน้าต่างการพล็อต
title('FROM MARS ROOMBA', 'fontsize', 32) % เพิ่มชื่อให้กับหน้าต่างการพล็อต
quadeqtxt = 'พบน้ำ'; % ตั้งค่าตัวแปร 'quadeqtxt' เป็นเอาต์พุต 0
ข้อความ (x, y, quadeqtxt, 'ล่าม', 'ลาเท็กซ์', 'ขนาดตัวอักษร', 36); % แสดงข้อความ quadeq ในหน้าต่างการพล็อต
r.moveDistance(-0.2, 0.2) % ย้อนกลับ roomba 0.2m
r.turnAngle(180, 0.5) %เปลี่ยน roomba 180 องศาให้เร็วที่สุด
r.setLEDCenterColor(128, 128); % ตั้งค่า LED ตรงกลาง Roomba เป็นสีส้ม
ปิดทั้งหมด %closes ที่เหลืออยู่ในหน้าต่างที่เปิดอยู่
สิ้นสุด % สิ้นสุด 'red_mean' ถ้าคำสั่ง
สิ้นสุด % สิ้นสุด 'ของเหลว' ถ้าคำสั่ง
end% ปิดอนันต์ในขณะที่วนรอบ
สิ้นสุด % สิ้นสุดฟังก์ชัน 'LiquidCheck'
ขั้นตอนที่ 4: เรียกใช้โค้ด
หลังจากที่คุณได้คัดลอกและวางโค้ดลงใน MATLAB แล้ว คุณต้องเชื่อมต่อกับ Roomba เมื่อเชื่อมต่อ Roomba แล้ว คุณต้องตั้งชื่อตัวแปร r ฟังก์ชันต่างๆ ใช้ตัวแปร r เมื่ออ้างถึง Roomba ดังนั้น Roomba จะต้องถูกกำหนดเป็นตัวแปร r หลังจากรันโค้ดแล้ว Roomba ควรรันตามคำแนะนำ
แนะนำ:
โครงการ Gimbal Stabilizer: 9 ขั้นตอน (พร้อมรูปภาพ)
โครงการ Gimbal Stabilizer: วิธีสร้าง Gimbal เรียนรู้วิธีสร้าง gimbal แบบ 2 แกนสำหรับกล้องแอคชั่นของคุณ ในวัฒนธรรมปัจจุบันเราทุกคนชอบบันทึกวิดีโอและจับภาพช่วงเวลาต่างๆ โดยเฉพาะอย่างยิ่งเมื่อคุณเป็นผู้สร้างเนื้อหาเช่นฉัน คุณคงประสบปัญหา วิดีโอสั่นคลอนดังกล่าว
เปลี่ยน Roomba ของคุณให้เป็น Mars Rover: 5 ขั้นตอน
เปลี่ยน Roomba ของคุณให้เป็น Mars Rover:
Mars Roomba: 6 ขั้นตอน
Mars Roomba: คำแนะนำนี้จะแนะนำคุณเกี่ยวกับการใช้งานบอทสูญญากาศ Roomba ที่ควบคุมด้วย Raspberry Pi ระบบปฏิบัติการที่เราจะใช้คือผ่าน MATLAB
โครงการ Roomba MATLAB 5 ขั้นตอน
โครงการ Roomba MATLAB: แผนปัจจุบันที่ NASA มีไว้สำหรับยานสำรวจดาวอังคารคือให้มันเป็นเครื่องรวบรวมข้อมูลและเดินเตร่รอบดาวอังคาร เก็บตัวอย่างดินเพื่อนำกลับมายังโลก เพื่อให้นักวิทยาศาสตร์ได้ทราบว่ามีรูปแบบชีวิตก่อนหน้านี้หรือไม่ ดาวเคราะห์ เพิ่มเติม
โครงการ Roomba: 5 ขั้นตอน (พร้อมรูปภาพ)
โครงการ Roomba: คำแนะนำนี้สร้างขึ้นเพื่อตอบสนองความต้องการของโครงการ Makecourse ที่มหาวิทยาลัยเซาท์ฟลอริดา (www.makecourse.com) คำแนะนำนี้จะครอบคลุมขั้นตอนและส่วนประกอบที่จำเป็นทั้งหมดเพื่อประกอบโครงการ Roomba ของฉัน