สารบัญ:

โครงการ Mars Roomba UTK: 4 ขั้นตอน
โครงการ Mars Roomba UTK: 4 ขั้นตอน

วีดีโอ: โครงการ Mars Roomba UTK: 4 ขั้นตอน

วีดีโอ: โครงการ Mars Roomba UTK: 4 ขั้นตอน
วีดีโอ: Быстрая укладка плитки на стены в санузле. ПЕРЕДЕЛКА ХРУЩЕВКИ от А до Я #27 2024, กรกฎาคม
Anonim
โครงการ Mars Roomba UTK
โครงการ Mars Roomba UTK
โครงการ Mars Roomba UTK
โครงการ Mars Roomba UTK

การปฏิเสธความรับผิด: นี้จะใช้ได้เฉพาะในกรณีที่ 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 ควรรันตามคำแนะนำ

แนะนำ: