สารบัญ:
- ขั้นตอนที่ 1: รวบรวมวัสดุของคุณ
- ขั้นตอนที่ 2: ดาวน์โหลด Roomba Toolboxes สำหรับ MATLAB
- ขั้นตอนที่ 3: เชื่อมต่อกับ Roomba. ของคุณ
- ขั้นตอนที่ 4: เลือกวิธีที่คุณต้องการควบคุม Roomba ของคุณ
- ขั้นตอนที่ 5: ขับรถ Roomba ของคุณ
วีดีโอ: เปลี่ยน Roomba ของคุณให้เป็น Mars Rover: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
ขั้นตอนที่ 1: รวบรวมวัสดุของคุณ
เพื่อให้โครงการนี้เสร็จสมบูรณ์ คุณจะต้องรวบรวมเอกสารต่อไปนี้:
หุ่นยนต์ Roomba 1 ตัว
1 ชุด Raspberry Pi
1 กล้องวิดีโอ
เข้าถึง MATLAB
ขั้นตอนที่ 2: ดาวน์โหลด Roomba Toolboxes สำหรับ MATLAB
เรียกใช้รหัสต่อไปนี้เพื่อติดตั้งกล่องเครื่องมือที่จำเป็นเพื่อให้โครงการนี้เสร็จสมบูรณ์
ห้องทำงานbaInstall
ซีแอลซี;
% รายการไฟล์ที่จะติดตั้ง
ไฟล์ = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'};
% ตำแหน่งที่จะติดตั้งจาก
ตัวเลือก = weboptions('CertificateFilename', ''); % บอกให้ละเว้นข้อกำหนดของใบรับรอง
เซิร์ฟเวอร์ = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/';
dlgTitle = 'ติดตั้ง/อัปเดต Roomba';
% แสดงวัตถุประสงค์และได้รับการยืนยัน
พรอมต์ = {
'โปรแกรมนี้จะดาวน์โหลดไฟล์ EF 230 Roomba เหล่านี้:'
''
strjoin(ไฟล์, ' ')
''
'ไปยังโฟลเดอร์นี้:'
''
ซีดี
''
'อยากไปต่อไหม? '
};
เสียงบี๊บ;
yn = questdlg (พร้อมท์, …
dlgTitle, …
'ใช่', 'ไม่', 'ใช่');
ถ้า ~strcmp(yn, 'ใช่') ให้ส่งคืน; จบ
% รับรายการไฟล์ที่มีอยู่
ที่มีอยู่_files = ไฟล์(cellfun(@exist, ไฟล์) > 0);
ถ้า ~isempty(existing_files)
% ตรวจสอบให้แน่ใจว่าเปลี่ยนได้จริงๆ
prompt = {'คุณกำลังแทนที่ไฟล์เหล่านี้: '
''
strjoin(existing_files, ' ')
''
'ตกลงที่จะเปลี่ยน?'
};
เสียงบี๊บ;
yn = questdlg (พร้อมท์, …
dlgTitle, …
'ใช่', 'ไม่', 'ใช่');
ถ้า ~strcmp(yn, 'ใช่') ให้ส่งคืน; จบ
จบ
% ดาวน์โหลดไฟล์
cnt = 0;
สำหรับ i=1:length(ไฟล์)
f=ไฟล์{i};
disp(['กำลังดาวน์โหลด' f]);
ลอง
url = [เซิร์ฟเวอร์ f];
บันทึกเว็บ (f, url, ตัวเลือก); เพิ่มตัวเลือก % เพื่อหลีกเลี่ยงข้อผิดพลาดด้านความปลอดภัย
cnt = cnt + 1;
จับ
disp(['เกิดข้อผิดพลาดในการดาวน์โหลด' f]);
หุ่น = [f '.html'];
ถ้ามี (จำลอง 'ไฟล์')==2
ลบ (จำลอง)
จบ
จบ
จบ
ถ้า cnt == ความยาว (ไฟล์)
msg = 'การติดตั้งสำเร็จ';
waitfor(msgbox(msg, dlgTitle));
อื่น
msg = 'การติดตั้งผิดพลาด - ดูรายละเอียดในหน้าต่างคำสั่ง';
รอ (errordlg(msg, dlgTitle));
จบ
สิ้นสุด %roombaInstall
ขั้นตอนที่ 3: เชื่อมต่อกับ Roomba. ของคุณ
ถึงเวลาเชื่อมต่อกับ Roomba ของคุณโดยใช้ WiFi แล้ว ใช้ 2 นิ้วกดปุ่ม Dock และ Spot พร้อมกันเพื่อเปิดหรือรีเซ็ต Roomba ของคุณ ถัดไป เรียกใช้รหัส r=roomba(# ของ Roomba ของคุณ) ในหน้าต่างคำสั่งของ MATLAB เพื่อเชื่อมต่อกับหุ่นยนต์ของคุณ เมื่อคุณดำเนินการคำสั่งนี้แล้ว Roomba ของคุณควรพร้อมทำงาน
ขั้นตอนที่ 4: เลือกวิธีที่คุณต้องการควบคุม Roomba ของคุณ
มีสองวิธีที่คุณสามารถควบคุม Roomba ของคุณได้: โดยอัตโนมัติหรือใช้สมาร์ทโฟนเป็นตัวควบคุม
หากคุณเลือกที่จะขับ Roomba โดยอัตโนมัติ คุณจะต้องใช้เซ็นเซอร์ในตัวสามตัว: เซ็นเซอร์หน้าผา เซ็นเซอร์กันกระแทก และเซ็นเซอร์วัดแสง
ในการใช้สมาร์ทโฟน ก่อนอื่นคุณต้องเชื่อมต่อสมาร์ทโฟนของคุณกับคอมพิวเตอร์โดยทำตามขั้นตอนด้านล่าง
หมายเหตุ: คอมพิวเตอร์และสมาร์ทโฟนของคุณต้องอยู่ในเครือข่าย WiFi เดียวกันเพื่อเชื่อมต่ออย่างถูกต้อง!
1. ดาวน์โหลดแอป MATLAB จากร้านแอปบนอุปกรณ์ของคุณ
2. พิมพ์ "connector on" ลงในหน้าต่างคำสั่งของคุณและตั้งรหัสผ่านที่จะต้องป้อนลงในอุปกรณ์ทั้งสองเครื่อง
3. หลังจากทำเช่นนั้น MATLAB จะให้ที่อยู่ IP ของคอมพิวเตอร์ของคุณ คุณต้องไปที่หน้าการตั้งค่าในแอป MATLAB บนสมาร์ทโฟนของคุณ และเพิ่มคอมพิวเตอร์โดยใช้ที่อยู่ IP ที่ระบุและรหัสผ่านที่คุณป้อนไว้ก่อนหน้านี้
4. ในหน้าต่างคำสั่งบนคอมพิวเตอร์ของคุณ ให้พิมพ์รหัส m=mobiledev และสิ่งนี้ควรเริ่มต้นสมาร์ทโฟนของคุณเป็นตัวควบคุมสำหรับ Roomba ของคุณ
5. คอมพิวเตอร์และสมาร์ทโฟนของคุณควรพร้อมใช้งานทันที
ขั้นตอนที่ 5: ขับรถ Roomba ของคุณ
เมื่อคุณมีเครื่องมือที่จำเป็นทั้งหมดในการสร้าง Mars Rover แล้ว คุณก็พร้อมที่จะสร้างโค้ดของคุณเองแล้ว เราได้แนบโค้ดตัวอย่างด้านล่างสำหรับทั้งการขับขี่อัตโนมัติและการขับขี่ที่ควบคุมด้วยสมาร์ทโฟน
การขับขี่อัตโนมัติ
ฟังก์ชัน Explore_modified(r)
%อินพุตอาร์กิวเมนต์: 1 วัตถุ roomba, r
% อาร์กิวเมนต์เอาต์พุต: none
%คำอธิบาย:
% function ใช้ infinite while loop เพื่ออนุญาต autonomous
การสำรวจสภาพแวดล้อมของบอท
%
%funciton ยังให้คำแนะนำกับ roomba สำหรับสิ่งที่ต้องทำใน
% สถานการณ์ต่อไปนี้: ล้อสูญเสียการสัมผัสกับพื้นและ
% วัตถุถูกตรวจพบด้านหน้าหรือด้านใดด้านหนึ่งของบอทและ a
ตรวจพบ %การดรอปกะทันหันที่ด้านหน้าหรือด้านใดด้านหนึ่งของบอท
%
%คำแนะนำทั่วไปรวมถึงคำสั่งการเคลื่อนไหวที่มีวัตถุประสงค์เพื่อเพิ่มสูงสุด
สำรวจหรือหลีกเลี่ยงอันตรายที่ตรวจพบและคำสั่งในการสื่อสาร
%ข้อมูลเกี่ยวกับการค้นพบของบอท (รูปภาพ) ตำแหน่ง (กราฟ)
% และสถานะ (คำเตือนที่ค้างอยู่) กับผู้ใช้ผ่าน MATLAB และ/หรืออีเมล หลาย
เพิ่มคำสั่งเสียง % เพื่อความบันเทิง
%ตั้งค่าความสามารถของอีเมล
เมล = '[email protected]';
รหัสผ่าน = 'EF230Roomba';
setpref('อินเทอร์เน็ต', 'SMTP_Server', 'smtp.gmail.com');
setpref('อินเทอร์เน็ต', 'อีเมล', อีเมล);
setpref('อินเทอร์เน็ต', 'SMTP_Username', เมล);
setpref('อินเทอร์เน็ต', 'SMTP_Password', รหัสผ่าน);
อุปกรณ์ประกอบฉาก = java.lang. System.getProperties;
props.setProperty('mail.smtp.starttls.enable', 'true');
props.setProperty('mail.smtp.auth', 'true');
props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory');
props.setProperty('mail.smtp.socketFactory.port', '465');
% r=roomba(19)
r.beep('G2^^, G2^^, G2^^, G2^^, A2^^, A2^^, G1^^, E1^^, C2^^, C2^^, C1^^, C1 ^^, D1^^, C1^^, D2^^, E4^^, G2^^, G2^^, G2^^, G2^^, A2^^, A2^^, G1^^, E1^^, C2^^, C2^^, C2^^, E1^^, E1^^, E1^^, D1^^, C4^^');
วี =.1;
Reflect_datum=2700; %set ค่าอ้างอิงเซ็นเซอร์หน้าผา
lightBumper_datum = 200; %set light ค่าอ้างอิงของเซ็นเซอร์กันชน
ตำแหน่ง=[0, 0]; %variable สำหรับการจัดเก็บตำแหน่งด้วย Datum เริ่มต้น
มุม=0; %กำหนดมุมอ้างอิง
ตาข่าย=0; %การกระจัดของมุมสุทธิ
ผม=2; % iterator สำหรับการเพิ่มแถวในตำแหน่งตัวแปรการจัดเก็บ
dist = 0;
r.setDriveVelocity(v, v); %เริ่ม roomba ก้าวไปข้างหน้า
ในขณะที่จริง
Cliff = r.getCliffSensors;
Bump = r.getBumpers;
แสง = r.getLightBumpers;
RandAngle = randi([20, 60], 1); % สร้าง 1 มุมสุ่มระหว่าง 20 ถึง 60 องศา ใช้เพื่อป้องกันไม่ให้บอทติดอยู่ในลูป
จะทำอย่างไรถ้าล้อหนึ่งล้อหรือมากกว่าสูญเสียการสัมผัสกับพื้น:
%หยุดการเคลื่อนไหว ส่งอีเมลเตือนพร้อมรูปภาพบริเวณโดยรอบ
% และถามผู้ใช้ว่าจะดำเนินการต่อหรือรอความช่วยเหลือ
ถ้า Bump.rightWheelDrop == 1 || Bump.leftWheelDrop == 1
ร.หยุด
dist = r.getDistance;
pos(i, 1)= pos(i-1, 1) + dist * sind(netangle); รับ x พิกัด
pos(i, 2)= pos(i-1, 2) + dist * cosd(netangle); รับพิกัด y
ผม=ผม+1;
r.beep('F#1^^, C1^^, F#1^^, C1^^, F#1^^, C1^^, F#1^^, C1^^, F#1^^, C1^^, F#1^^, C1^^, F#1^^, C1^^, F#1^^, C1^^')
img = r.getImage;
imwrite(img, 'stuck.png');
%--------------------------
imfile='stuck.png';
ตำแหน่ง = savepos (pos);
%---------------------------
sendmail(เมล 'HELP!', 'ฉันติดอยู่บนหน้าผา!', {imfile, position})
รายการ = {'ดำเนินการต่อ', 'หยุด'};
idx = menu('ฉันควรทำอย่างไร', รายการ);
ถ้า idx == 2
หยุดพัก
จบ
จะทำอย่างไรถ้าตรวจพบวัตถุที่หน้าบอท:
%หยุด ย้ายกลับ ถ่ายภาพ แจ้งเตือนผู้ใช้ให้ค้นพบ
% ผ่านอีเมล หมุน 90 องศา แล้วสำรวจต่อไป
Elseif Light.leftCenter > lightBumper_datum || Light.rightCenter > lightBumper_datum || Bump.front == 1
r.หยุด;
dist = r.getDistance;
pos(i, 1)= pos(i-1, 1) + dist * sind(netangle); รับ x พิกัด
pos(i, 2)= pos(i-1, 2) + dist * cosd(netangle); รับพิกัด y
ผม=ผม+1;
r.moveDistance(-.125);
dist = r.getDistance;
pos(i, 1)= pos(i-1, 1) + dist * sind(netangle); รับ x พิกัด
pos(i, 2)= pos(i-1, 2) + dist * cosd(netangle); รับพิกัด y
ผม=ผม+1;
r.beep('A1^, A1^, A4^, A2^, G2^, G2^, G4^, Bb2^, Bb2^, Bb3.5^, G1^, A8^')
img = r.getImage;
imwrite(img, 'FrontBump.png')
%--------------------------
imfile='FrontBump.png';
ตำแหน่ง = savepos (pos);
%---------------------------
sendmail(เมล 'Alert!', 'ฉันพบบางอย่าง!', {imfile, ตำแหน่ง})
มุม = 90;
netangle=netangle+มุม;
r.turnAngle(มุม);
r.setDriveVelocity(v, v);
จะทำอย่างไรถ้าตรวจพบวัตถุทางด้านซ้ายของบอท:
%หยุด หันไปทางวัตถุ สำรอง ถ่ายภาพ เตือน
%ผู้ใช้การค้นพบผ่านอีเมล หมุน 90 องศาแล้วสำรวจต่อไป
elseif Light.leftFront > lightBumper_datum || Light.left > lightBumper_datum || Bump.left == 1
r.หยุด;
dist = r.getDistance;
pos(i, 1)= pos(i-1, 1) + dist * sind(netangle); รับ x พิกัด
pos(i, 2)= pos(i-1, 2) + dist * cosd(netangle); รับพิกัด y
ผม=ผม+1;
มุม=30;
netangle=netangle+มุม;
r.turnAngle(มุม);
r.moveDistance(-.125);
dist = r.getDistance;
pos(i, 1)= pos(i-1, 1) + dist * sind(netangle); รับ x พิกัด
pos(i, 2)= pos(i-1, 2) + dist * cosd(netangle); รับพิกัด y
ผม=ผม+1;
r.beep('A4^, A4^, G1^, E1^, C3.5^, C2^^, C1^, C1^, C2^, D2^, D2^, E8^')
img = r.getImage;
imwrite(img, 'LeftBump.png')
%--------------------------
imfile='LeftBump.png';
ตำแหน่ง = savepos (pos);
%---------------------------
sendmail(เมล 'Alert!', 'ฉันพบบางอย่าง!', {imfile, ตำแหน่ง})
มุม=-90;
netangle=netangle+มุม;
r.turnAngle(มุม);
r.setDriveVelocity(v, v);
จะทำอย่างไรถ้าตรวจพบวัตถุทางด้านขวาของบอท:
%หยุด หันเข้าหาวัตถุ สำรอง ถ่ายภาพ เตือน
%ผู้ใช้ที่ค้นพบผ่านอีเมล หมุน 90 องศาแล้วสำรวจต่อไป
Elseif Light.rightFront > lightBumper_datum || Light.right > lightBumper_datum || Bump.right == 1
r.หยุด;
dist = r.getDistance;
pos(i, 1)= pos(i-1, 1) + dist * sind(netangle); รับ x พิกัด
pos(i, 2)= pos(i-1, 2) + dist * cosd(netangle); รับพิกัด y
ผม=ผม+1;
มุม=-30;
netangle=netangle+มุม;
r.turnAngle(มุม);
r.moveDistance(-.125);
dist = r.getDistance;
pos(i, 1)= pos(i-1, 1) + dist * sind(netangle); รับ x พิกัด
pos(i, 2)= pos(i-1, 2) + dist * cosd(netangle); รับพิกัด y
ผม=ผม+1;
หยุดชั่วคราว(1.5);
r.beep('C1^, C1^, C2^, D2^, D2^, C8^')
img = r.getImage;
imwrite(img, 'RightBump.png')
%--------------------------
imfile='RightBump.png';
ตำแหน่ง = savepos (pos);
%---------------------------
sendmail(เมล 'Alert!', 'ฉันพบบางอย่าง!', {imfile, ตำแหน่ง});
มุม=90;
netangle=netangle+มุม;
r.turnAngle(มุม);
r.setDriveVelocity(v, v);
จะทำอย่างไรถ้าตรวจพบหน้าผาทางด้านซ้ายของบอท:
%หยุด ถอยหลัง เลี้ยวขวา สำรวจต่อไป
Elseif Cliff.left < reflect_datum || Cliff.leftFront < reflect_datum
r.หยุด;
dist = r.getDistance;
pos(i, 1)= pos(i-1, 1) + dist * sind(netangle); รับ x พิกัด
pos(i, 2)= pos(i-1, 2) + dist * cosd(netangle); รับพิกัด y
ผม=ผม+1;
r.moveDistance(-.125);
dist = r.getDistance;
pos(i, 1)= pos(i-1, 1) + dist * sind(netangle); รับ x พิกัด
pos(i, 2)= pos(i-1, 2) + dist * cosd(netangle); รับพิกัด y
ผม=ผม+1;
มุม=-RandAngle;
netangle=netangle+มุม;
r.turnAngle(มุม);
r.setDriveVelocity(v, v);
จะทำอย่างไรถ้าตรวจพบหน้าผาทางด้านขวาของบอท:
%หยุด ถอยหลัง เลี้ยวซ้าย สำรวจต่อไป
Elseif Cliff.right < reflect_datum || Cliff.rightFront < reflect_datum
r.หยุด;
dist = r.getDistance;
pos(i, 1)= dist * sind(มุม); รับ x พิกัด
pos(i, 2)= dist * cosd(มุม); รับพิกัด y
ผม=ผม+1;
r.moveDistance(-.125);
มุม=แรนด์แองเกิล;
netangle=netangle+มุม;
r.turnAngle(มุม);
r.setDriveVelocity(v, v);
จบ
จบ
ตัวควบคุมสมาร์ทโฟน
ตัวเลือก = {'อัตโนมัติ', 'การควบคุมด้วยตนเอง'}
Prompt = menu('คุณต้องการควบคุมรถแลนด์โรเวอร์อย่างไร', ตัวเลือก)
m = mobiledev
r = roomba(19)
ถ้าพร้อมท์ == 1
สำรวจ)
อื่น
ในขณะที่จริง
หยุดชั่วคราว(.5)
PhoneData=m.การวางแนว;
Azi=PhoneData(1);
สนาม=ข้อมูลโทรศัพท์(2);
ด้าน = PhoneData(3);
ถ้าด้านข้าง>130 || ด้านข้าง<-130 %หากพลิกโทรศัพท์คว่ำหน้า ให้หยุด roomba และออกจากลูป
ร.หยุด
r.beep('C, C, C, C')
หยุดพัก
elseif ด้านข้าง>25 && ด้านข้าง<40% หากหันโทรศัพท์ไปด้านข้างระหว่าง 25 ถึง 40 องศา ให้เลี้ยวซ้าย 5 องศา
r.turnAngle(-5);
elseif ด้านข้าง>40% หากพลิกโทรศัพท์ไปด้านข้างเกิน 40 องศา ให้เลี้ยวซ้าย 45 องศา
r.turnAngle(-45)
elseif ด้านข้าง-40% หากหมุนโทรศัพท์ไปด้านข้างระหว่าง -25 ถึง -40 องศา ให้เลี้ยวขวา 5 องศา
r.turnAngle(5);
elseif ด้านข้าง<-40% หากหมุนโทรศัพท์ไปด้านข้างน้อยกว่า -40 องศา ให้เลี้ยวซ้าย 45 องศา
r.turnAngle(45)
จบ
%หากถือโทรศัพท์ไว้ใกล้แนวตั้ง ให้ถ่ายภาพและลงจุด
ถ้า Pitch<-60 && ภาพ<=9
r.beep
img=r.getImage;
โครงเรื่องย่อย(3, 3, ภาพ)
อิมโชว์(img)
จบ
%เลื่อนไปข้างหน้าและถอยหลังตามการวางแนวด้านหน้าและด้านหลัง
if Pitch>15 && Pitch<35 %ถ้า pitch ระหว่าง 15 ถึง 35 องศา เคลื่อนไปข้างหน้าในระยะทางสั้น ๆ
%รับข้อมูลกันชนแบบเบาก่อนเคลื่อนย้าย
litBump=r.getLightBumpers;
ถ้า litBump.leftFront>500 || litBump.leftCenter>500 || litBump.rightCenter>500 || litBump.rightFront>500 % หากมีสิ่งใดอยู่หน้า roomba และจะตีหากเคลื่อนที่ไปข้างหน้า ทำให้เกิดเสียงและแสดงข้อความ
r.beep('C^^, F#^, C^^, F#^')
อื่น %ย้าย
r.moveDistance(.03);
%รับข้อมูลบัมเปอร์หลังจากย้าย
Bump=r.getBumpers;
ถ้า Bump.right==1 || Bump.left==1 || Bump.front==1
r.beep('A, C, E')
r.moveDistance(-.01)
จบ
รับข้อมูลเซ็นเซอร์หน้าผา
Cliff=r.getCliffSensors;
ถ้า Cliff.left>1500 || Cliff.leftFront>1500 || Cliff.rightFront>1500 || Cliff.right>1500% หากมีสิ่งกระตุ้นเซ็นเซอร์หน้าผาให้ถือว่าเป็นลาวาและสำรอง
r.beep('C^^, C, C^^, C, C^^, C, C^^, C, C^^, C, C^^, C')
r.moveDistance(-.031)
จบ
จบ
elseif Pitch>35% ถ้า pitch มากกว่า 35 องศา ให้เคลื่อนที่ไปข้างหน้าในระยะทางไกล
%รับข้อมูลกันชนแบบเบาก่อนเคลื่อนย้าย
litBump=r.getLightBumpers;
ถ้า litBump.leftFront>15 || litBump.leftCenter>15 || litBump.rightCenter>15 || litBump.rightFront>15 %ถ้ามีอะไรอยู่หน้า roomba และจะตีถ้าเคลื่อนที่ไปข้างหน้าทำให้เกิดเสียงและแสดงข้อความ
r.beep('C^^, F#^, C^^, F#^')
อื่น %ย้าย
r.moveDistance(.3)
%รับข้อมูลบัมเปอร์หลังจากย้าย
Bump=r.getBumpers;
ถ้า Bump.right==1 || Bump.left==1 || Bump.front==1 % หากคุณกดสิ่งใดส่งเสียงดัง แสดงข้อความ และสำรองข้อมูล
r.beep('A, C, E')
r.moveDistance(-.01)
จบ
รับข้อมูลเซ็นเซอร์หน้าผาหลังจากเคลื่อนย้าย
Cliff=r.getCliffSensors;
ถ้า Cliff.left>1500 || Cliff.leftFront>1500 || Cliff.rightFront>1500 || Cliff.right>1500% หากมีสิ่งกระตุ้นเซ็นเซอร์หน้าผาให้ถือว่าเป็นลาวาและสำรอง
r.beep('C^^, C, C^^, C, C^^, C, C^^, C, C^^, C, C^^, C')
r.moveDistance(-.31)
จบ
จบ
elseif ทางลาด-35 % ถ้าระยะพิทช์ระหว่าง -15 ถึง -35 องศา ถอยกลับในระยะทางสั้นๆ
r.moveDistance(-.03);
รับข้อมูลเซ็นเซอร์หน้าผาหลังจากเคลื่อนย้าย
Cliff=r.getCliffSensors;
ถ้า Cliff.left>1500 || Cliff.leftFront>1500 || Cliff.rightFront>1500 || Cliff.right>1500% หากมีสิ่งกระตุ้นเซ็นเซอร์หน้าผาให้ถือว่าเป็นลาวาและสำรอง
r.beep('C^^, C, C^^, C, C^^, C, C^^, C, C^^, C, C^^, C')
r.moveDistance(.04)
จบ
elseif ทางลาด-60 % ถ้าระยะพิทช์ระหว่าง -35 ถึง -60 องศา ถอยกลับเป็นระยะทางไกลขึ้น
r.moveDistance(-.3)
รับข้อมูลเซ็นเซอร์หน้าผาหลังจากเคลื่อนย้าย
Cliff=r.getCliffSensors;
ถ้า Cliff.left>1500 || Cliff.leftFront>1500 || Cliff.rightFront>1500 || Cliff.right>1500% หากมีสิ่งกระตุ้นเซ็นเซอร์หน้าผาให้ถือว่าเป็นลาวาและสำรอง
r.beep('C^^, C, C^^, C, C^^, C, C^^, C, C^^, C, C^^, C')
r.moveDistance(.31)
จบ
จบ
จบ
จบ
แนะนำ:
เปลี่ยน Raspberry Pi เป็น Bluetooth Beacon: 4 ขั้นตอน
เปลี่ยน Raspberry Pi เป็น Bluetooth Beacon: Bluetooth เป็นหนึ่งในเทคโนโลยีที่เป็นนวัตกรรมในการถ่ายโอนข้อมูลแบบไร้สาย สร้างระบบอัตโนมัติภายในบ้าน ควบคุมอุปกรณ์อื่น ๆ ฯลฯ ในคำแนะนำนี้ ฉันจะพยายามเปลี่ยน Raspberry Pi เป็น Bluetooth Beacon ข้อกำหนด Raspberry PiBleuIO (A Bl
โครงการ Mars Roomba UTK: 4 ขั้นตอน
โครงการ Mars Roomba UTK: การปฏิเสธความรับผิด: สิ่งนี้จะใช้ได้ก็ต่อเมื่อ ROOMBA ได้รับการตั้งค่าในทุกวิธีที่เฉพาะเจาะจง คำแนะนำนี้จัดทำขึ้นและตั้งใจที่จะใช้โดยมหาวิทยาลัยของนักเรียนและคณะ TENNESSEE รหัสนี้ใช้เพื่อตั้งค่า Roomba เพื่อดำเนินการในพื้นที่ เขียนและเ
Mars Roomba: 6 ขั้นตอน
Mars Roomba: คำแนะนำนี้จะแนะนำคุณเกี่ยวกับการใช้งานบอทสูญญากาศ Roomba ที่ควบคุมด้วย Raspberry Pi ระบบปฏิบัติการที่เราจะใช้คือผ่าน MATLAB
เปลี่ยนแผนผัง EAGLE ของคุณให้เป็น PCB: 22 ขั้นตอน (พร้อมรูปภาพ)
เปลี่ยนแผนผัง EAGLE ของคุณให้เป็น PCB: ในคำแนะนำก่อนหน้านี้ ฉันได้ให้คำแนะนำเกี่ยวกับรายการแผนผังโดยใช้โปรแกรมแก้ไข EAGLE ของ CadSoft ในคำแนะนำนี้ เราจะสร้างแผงวงจรพิมพ์จากแผนผังนั้น ฉันเดาว่าฉันควรจะบอกว่าเราจะทำการออกแบบ PCB ทำให้งูเหลือมทางกายภาพ
แฮ็กเครื่องยิงขีปนาวุธ Usb ของคุณให้เป็น "ป้อมปืนอัตโนมัติเล็งอัตโนมัติ!": 6 ขั้นตอน
แฮ็กเครื่องยิงขีปนาวุธ Usb ของคุณให้เป็น "ป้อมปืนอัตโนมัติเล็งอัตโนมัติ!": วิธีทำให้เครื่องยิงขีปนาวุธ usb ของคุณมีจุดมุ่งหมายด้วยตัวมันเอง คำแนะนำนี้จะสอนให้คุณเปลี่ยนเครื่องยิงขีปนาวุธ usb ของคุณใน autoturret ซึ่งจะค้นหาและเล็งไปที่เป้าหมาย IR (ขออภัยเฉพาะเป้าหมาย IR)