สารบัญ:

Roomba ควบคุมด้วย MATLAB: 5 ขั้นตอน
Roomba ควบคุมด้วย MATLAB: 5 ขั้นตอน

วีดีโอ: Roomba ควบคุมด้วย MATLAB: 5 ขั้นตอน

วีดีโอ: Roomba ควบคุมด้วย MATLAB: 5 ขั้นตอน
วีดีโอ: 1.5.0 PROJECT OVERVIEW: L298N Motor control using Arduino with Matlab GUI 2024, กรกฎาคม
Anonim
MATLAB ควบคุม Roomba
MATLAB ควบคุม Roomba
MATLAB ควบคุม Roomba
MATLAB ควบคุม Roomba

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

ขั้นตอนที่ 1: ชิ้นส่วนและวัสดุ

ชิ้นส่วนและวัสดุ
ชิ้นส่วนและวัสดุ
ชิ้นส่วนและวัสดุ
ชิ้นส่วนและวัสดุ
ชิ้นส่วนและวัสดุ
ชิ้นส่วนและวัสดุ
ชิ้นส่วนและวัสดุ
ชิ้นส่วนและวัสดุ

MATLAB 2018a

- MATLAB เวอร์ชัน 2018 เป็นเวอร์ชันที่ต้องการมากที่สุด ส่วนใหญ่เป็นเพราะใช้งานได้ดีที่สุดกับโค้ดที่เชื่อมต่อกับอุปกรณ์มือถือ อย่างไรก็ตาม โค้ดส่วนใหญ่ของเราสามารถตีความได้ในเวอร์ชันส่วนใหญ่ของ MATLAB

iRobot สร้างอุปกรณ์

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

Raspberry Pi (พร้อมกล้อง)

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

ขั้นตอนที่ 2: ไฟล์ฐานข้อมูล Roomba

ไฟล์ฐานข้อมูล Roomba
ไฟล์ฐานข้อมูล Roomba

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

สามารถดาวน์โหลดไฟล์ได้ที่ลิงค์นี้หรือไฟล์ที่ดาวน์โหลดได้ด้านล่าง

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

ขั้นตอนที่ 3: การเชื่อมต่อกับ Roomba

ขั้นแรก คุณต้องแน่ใจว่าหุ่นยนต์ของคุณเชื่อมต่อกับบอร์ด Raspberry Pi โดยใช้ปลั๊กไมโคร USB จากนั้นคุณต้องเชื่อมต่อคอมพิวเตอร์และหุ่นยนต์ของคุณกับ WiFi เดียวกันอย่างถูกต้อง เมื่อเสร็จสิ้น คุณสามารถเปิดหุ่นยนต์ของคุณและเชื่อมต่อกับหุ่นยนต์โดยใช้คำสั่งที่กำหนดในไฟล์ฐานข้อมูลหุ่นยนต์ (ฮาร์ดรีเซ็ตหุ่นยนต์ของคุณเสมอก่อนและหลังใช้งาน) ตัวอย่างเช่น เราใช้คำสั่ง "r.roomba(19)" เพื่อเชื่อมต่อกับหุ่นยนต์ของเรา โดยกำหนดตัวแปร r ให้กับอุปกรณ์ของเรา สิ่งนี้อ้างอิงกลับไปที่ไฟล์ฐานข้อมูล ซึ่งตั้งค่าตัวแปรของเราเป็นโครงสร้างที่เราสามารถอ้างอิงได้ในช่วงเวลาที่กำหนด

ขั้นตอนที่ 4: รหัส

รหัส
รหัส
รหัส
รหัส

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

เราเริ่มต้นด้วยคำสั่งง่ายๆ "r.setDriveVelocity(.06)" ที่กำหนดความเร็วไปข้างหน้าของหุ่นยนต์เป็น.06 m/s นี่เป็นเพียงเพื่อให้หุ่นยนต์เคลื่อนที่ล่วงหน้า

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

ในขณะที่ % จริง ในขณะที่การวนซ้ำจะดำเนินต่อไปจนกว่าจะมีบางสิ่ง "เท็จ" เกิดขึ้น (ในกรณีนี้ มันจะดำเนินต่อไปอย่างไม่สิ้นสุด) data = r.getCliffSensors; data2 = r.getBumpers;% ดึงข้อมูลอย่างต่อเนื่องเกี่ยวกับค่าเซ็นเซอร์หน้าผาและกำหนดให้กับตัวแปร % img = r.getImage; % ถ่ายภาพจากกล้องที่ติดตั้ง % image(img); % แสดงภาพที่ถ่าย % red_mean = mean(mean(img(:,:, 1)));% ใช้ค่าเฉลี่ยของสีเขียวถ้า data.rightFront < 2000 r.turnAngle(-2); % เปลี่ยน Roomba ประมาณ.2 องศา CW เมื่อค่าสำหรับเซ็นเซอร์หน้าผาด้านขวาต่ำกว่า 2000 r.setDriveVelocity(.05); Elseif data.leftFront data.leftFront && 2000 > data.rightFront r.moveDistance(.1); % บอก Roomba ให้เดินหน้าต่อไปที่ประมาณ.2 m/s หากค่าทั้งสองจากเซ็นเซอร์ด้านหน้าขวาและด้านหน้าซ้ายต่ำกว่า 2000 % r.turnAngle(0); % บอกให้ Roomba ไม่หมุนหากเงื่อนไขข้างต้นเป็นจริง

elseif data2.right == 1 r.moveDistance(-.12); r.turnAngle(160); r.setDriveVelocity(.05); elseif data2.left == 1 r.moveDistance(-.2); r.turnAngle(5); r.setDriveVelocity(.05); elseif data2.front == 1 r.moveDistance(-.12); r.turnAngle(160); r.setDriveVelocity(.05);

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

anet = อเล็กซ์เน็ต; % กำหนด alexnet deep learning ให้กับตัวแปรในขณะที่จริง % Infinite ในขณะที่ loop img = r.getImage; img = imresize(img, [227, 227]); label = จำแนก (anet, img); if label == "กระดาษเช็ดมือ" || label == "ตู้เย็น" label = "น้ำ"; ภาพสุดท้าย (img); ชื่อเรื่อง(อักขระ(ฉลาก)); drawow;

วง while ที่ช่วยให้เราควบคุมอุปกรณ์ด้วยโทรศัพท์ของเราดึงข้อมูลนั้นจากไจโรสโคปของโทรศัพท์และเราเสียบมันเข้ากับเมทริกซ์ที่สตรีมข้อมูลกลับเข้าสู่ MATLAB บนคอมพิวเตอร์อย่างต่อเนื่อง เราใช้คำสั่ง if ที่อ่านข้อมูลของเมทริกซ์และให้เอาต์พุตที่ย้ายอุปกรณ์ตามค่าบางอย่างของไจโรสโคปของโทรศัพท์ สิ่งสำคัญคือต้องรู้ว่าเราใช้เซ็นเซอร์การวางแนวของอุปกรณ์มือถือ เมทริกซ์แบบหนึ่งต่อสามที่กล่าวถึงข้างต้นจัดหมวดหมู่ตามแต่ละองค์ประกอบของเซ็นเซอร์การวางแนวของโทรศัพท์ ซึ่งได้แก่ แอซิมัท ระยะพิทช์ และด้านข้าง คำสั่ง if สร้างเงื่อนไขที่ระบุเมื่อด้านข้างเกินค่า 50 หรือต่ำกว่า -50 จากนั้นหุ่นยนต์จะเคลื่อนที่ไปข้างหน้า (บวก 50) หรือถอยหลัง (ค่าลบ 50) และเช่นเดียวกันสำหรับค่าพิทช์ หากค่าพิทช์เกินค่า 25 ของค่าที่ต่ำกว่า -25 หุ่นยนต์จะหมุนเป็นมุม 1 องศา (บวก 25) หรือลบ 1 องศา (ค่าลบ 25)

ในขณะที่หยุดชั่วคราวจริง (.1) % หยุดชั่วคราว.5 วินาทีก่อนที่จะใช้แต่ละค่า Controller=iphone. Orientation; % กำหนดเมทริกซ์สำหรับค่าการวางแนวของ iPhone ให้กับตัวแปร Azimuthal=Controller(1); % กำหนดค่าแรกของเมทริกซ์ให้กับตัวแปร Pitch=Controller(2); % กำหนดค่าที่สองของเมทริกซ์ให้กับตัวแปร (เอียงไปข้างหน้าและข้างหลังเมื่อ iPhone ถูกถือด้านข้าง) Side=Controller(3); % กำหนดค่าที่สามของเมทริกซ์ให้กับตัวแปร (เอียงซ้ายและขวาเมื่อ iPhone ถูกถือด้านข้าง) % ทำให้เกิดเอาต์พุตตามการวางแนวของโทรศัพท์หาก Side > 130 || ด้าน 25 r.moveDistance(-.1) % ย้าย Roomba ไปข้างหลังประมาณ.1 เมตร ถ้า iPhone เอียงไปข้างหลังอย่างน้อย 25 องศา ถ้าด้าน 25 r.turnAngle(-1) % หมุน Roomba ประมาณ 1 องศา CCW หาก iPhone เอียงซ้ายอย่างน้อย 25 องศา มิฉะนั้น ถ้า Pitch < -25 r.turnAngle(1) % หมุน Roomba ประมาณ 1 องศา CW หาก iPhone เอียงปลายอย่างน้อย 25 องศา

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

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

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

แนะนำ: