สารบัญ:

เปลี่ยน Roomba ของคุณให้เป็น Mars Rover: 5 ขั้นตอน
เปลี่ยน Roomba ของคุณให้เป็น Mars Rover: 5 ขั้นตอน

วีดีโอ: เปลี่ยน Roomba ของคุณให้เป็น Mars Rover: 5 ขั้นตอน

วีดีโอ: เปลี่ยน Roomba ของคุณให้เป็น Mars Rover: 5 ขั้นตอน
วีดีโอ: วิธีเช็ค ซ่อม หุ่นยนต์ทำความสะอาดอัตโนมัติ Mister Robot เครื่องไม่ทำงาน 2024, กรกฎาคม
Anonim
เปลี่ยน Roomba ของคุณให้เป็น Mars Rover
เปลี่ยน Roomba ของคุณให้เป็น Mars Rover

ขั้นตอนที่ 1: รวบรวมวัสดุของคุณ

เพื่อให้โครงการนี้เสร็จสมบูรณ์ คุณจะต้องรวบรวมเอกสารต่อไปนี้:

หุ่นยนต์ Roomba 1 ตัว

1 ชุด Raspberry Pi

1 กล้องวิดีโอ

เข้าถึง MATLAB

ขั้นตอนที่ 2: ดาวน์โหลด Roomba Toolboxes สำหรับ MATLAB

ดาวน์โหลด Roomba Toolboxes สำหรับ MATLAB
ดาวน์โหลด Roomba Toolboxes สำหรับ MATLAB
ดาวน์โหลด Roomba Toolboxes สำหรับ MATLAB
ดาวน์โหลด 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 ของคุณ
เลือกวิธีที่คุณต้องการควบคุม Roomba ของคุณ
เลือกวิธีที่คุณต้องการควบคุม 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)

จบ

จบ

จบ

จบ

แนะนำ: