جدول المحتويات:

تحويل جهاز Roomba الخاص بك إلى مركبة Mars Rover: 5 خطوات
تحويل جهاز Roomba الخاص بك إلى مركبة Mars Rover: 5 خطوات

فيديو: تحويل جهاز Roomba الخاص بك إلى مركبة Mars Rover: 5 خطوات

فيديو: تحويل جهاز Roomba الخاص بك إلى مركبة Mars Rover: 5 خطوات
فيديو: دانييل شماتشتنبرجر: هل ستدمرنا التكنولوجيا؟ 2024, شهر نوفمبر
Anonim
تحويل جهاز Roomba الخاص بك إلى مركبة Mars Rover
تحويل جهاز Roomba الخاص بك إلى مركبة Mars Rover

الخطوة 1: اجمع المواد الخاصة بك

لإكمال هذا المشروع ، ستحتاج إلى جمع المواد التالية:

1 روبوت رومبا

1 مجموعة Raspberry Pi Kit

1 كاميرا فيديو

الوصول إلى MATLAB

الخطوة 2: قم بتنزيل Roomba Toolboxes لـ MATLAB

قم بتنزيل Roomba Toolboxes لـ MATLAB
قم بتنزيل Roomba Toolboxes لـ MATLAB
قم بتنزيل Roomba Toolboxes لـ MATLAB
قم بتنزيل Roomba Toolboxes لـ MATLAB

قم بتشغيل التعليمات البرمجية التالية لتثبيت مربعات الأدوات اللازمة لإكمال هذا المشروع.

غرفة وظيفة

clc.

قائمة٪ من الملفات المراد تثبيتها

files = {'roomba.m'، 'roombaSim.m'، 'roombaSimGUI.m'، 'roombaSimGUI.fig'} ؛

٪ موقع للتثبيت منه

الخيارات = خيارات الويب ('CertificateFilename'، ') ؛ ٪ أخبره بتجاهل متطلبات الشهادة

server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/' ؛

dlgTitle = 'تثبيت / تحديث Roomba'؛

٪ عرض الغرض والحصول على تأكيد

موجه = {

سيقوم هذا البرنامج بتنزيل ملفات EF 230 Roomba هذه:

''

strjoin (الملفات ، )

''

"إلى هذا المجلد:"

''

قرص مضغوط

''

'هل تريد الاستمرار؟"

};

زمارة؛

yn = Questdlg (موجه ، …

dlgTitle ، …

"نعم" ، "لا" ، "نعم") ؛

إذا كان ~ strcmp (yn ، "نعم") ، فارجع ؛ نهاية

٪ الحصول على قائمة الملفات الموجودة

Current_files = files (cellfun (exist، files)> 0) ؛

إذا كان ~ فارغًا (الملفات الموجودة)

٪ تأكد من أنه لا بأس حقًا لاستبدالها

موجه = {'أنت تستبدل هذه الملفات:'

''

strjoin (الملفات الموجودة ، )

''

"موافق ليحل محل؟"

};

زمارة؛

yn = Questdlg (موجه ، …

dlgTitle ، …

"نعم" ، "لا" ، "نعم") ؛

إذا كان ~ strcmp (yn ، "نعم") ، فارجع ؛ نهاية

نهاية

٪ تنزيل الملفات

cnt = 0 ؛

بالنسبة إلى i = 1: الطول (الملفات)

f = الملفات {i} ؛

disp (['Downloading' f]) ؛

محاولة

url = [الخادم f] ؛

حفظ الويب (f ، url ، خيارات) ؛ أضاف٪ خيارات لتجنب الأخطاء الأمنية

cnt = cnt + 1 ؛

يمسك

disp (['خطأ في التنزيل' f]) ؛

dummy = [f '.html'] ؛

إذا كان موجودًا (وهمي ، "ملف") == 2

حذف (وهمي)

نهاية

نهاية

نهاية

إذا كان cnt == طول (ملفات)

msg = "تم التثبيت بنجاح" ؛

waitfor (msgbox (msg، dlgTitle)) ؛

آخر

msg = 'خطأ في التثبيت - راجع نافذة الأوامر للحصول على التفاصيل' ؛

waitfor (errordlg (msg، dlgTitle)) ؛

نهاية

نهاية٪ roomba تثبيت

الخطوة 3: قم بالاتصال بجهاز Roomba الخاص بك

حان الوقت الآن للاتصال بـ Roomba الخاص بك باستخدام WiFi. باستخدام إصبعين ، اضغط على زري Dock و Spot في نفس الوقت لتشغيل جهاز Roomba أو إعادة تعيينه. بعد ذلك ، قم بتشغيل الكود r = roomba (# of 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)

٪ وسيطات الإدخال: كائن roomba واحد ، r

٪ وسيطات الإخراج: لا شيء

٪وصف:

تستخدم دالة٪ حلقة أثناء لانهائية للسماح بالاستقلالية

٪ استكشاف محيط الروبوت.

%

يوفر٪ funciton أيضًا إرشادات إلى غرفة Roomba حول ما يجب القيام به

٪ الحالات التالية: تفقد العجلة (العجلات) الاتصال بالأرض ، و

تم اكتشاف كائن٪ أمام الروبوت أو على أحد جانبيه ، و a

٪ تم الكشف عن انخفاض مفاجئ أمام الروبوت أو على أحد جانبيه.

%

تتضمن التعليمات النموذجية٪ أوامر حركة تهدف إلى التعظيم

٪ استكشاف أو تجنب اكتشاف خطر وأوامر للتواصل

النسبة المئوية للمعلومات المتعلقة باكتشافات الروبوتات (الصور) والموضع (الرسم البياني) ،

٪ والدولة (تحذير تقطعت بهم السبل) مع المستخدم عبر matlab و / أو البريد الإلكتروني. العديد من

تمت إضافة٪ من الأوامر الصوتية للاستمتاع.

٪ قدرات إعداد البريد الإلكتروني

mail = '[email protected]' ؛

كلمة المرور = 'EF230Roomba' ؛

setpref ("الإنترنت" ، "SMTP_Server" ، "smtp.gmail.com") ؛

setpref ("الإنترنت" ، "البريد الإلكتروني" ، البريد) ؛

setpref ("الإنترنت" ، "SMTP_Username" ، البريد) ؛

setpref ("الإنترنت" ، "SMTP_Password" ، كلمة المرور) ؛

props = 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 ؛

انعكاس_البيانات = 2700 ؛ ٪ تعيين القيمة المرجعية لأجهزة استشعار المنحدرات

lightBumper_datum = 200 ؛ ٪ تعيين القيمة المرجعية لأجهزة استشعار المصد الضوئي

نقاط البيع = [0 ، 0] ؛ متغير٪ لتخزين الموقع مع تهيئة مرجع البيانات

زاوية = 0 ؛ ٪ تعيين الزاوية المرجعية

netangle = 0 ؛ ٪ صافي زاوية الإزاحة

أنا = 2 ؛ مكرر النسبة المئوية لإضافة صفوف لوضع متغير التخزين

Dist = 0 ؛

r.setDriveVelocity (v ، v) ؛ ٪ بدء roomba المضي قدمًا

احيانا صحيح

كليف = r.getCliffSensors ؛

نتوء = r.getBumpers ؛

الضوء = r.getLightBumpers ؛

RandAngle = randi ([20، 60]، 1) ؛ ٪ يولد زاوية عشوائية واحدة بين 20 و 60 درجة. تستخدم لمنع الروبوت من التعثر في حلقة

٪ ماذا تفعل إذا فقدت عجلة أو أكثر ملامستها للأرض:

٪ إيقاف الحركة ، إرسال بريد إلكتروني تحذيري به صورة من المناطق المحيطة ،

٪ واسأل المستخدم ما إذا كان يجب المتابعة أو انتظار المساعدة

إذا كان Bump.rightWheelDrop == 1 || Bump.leftWheelDrop == 1

r.stop

Dist = r.getDistance ؛

pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ الحصول على إحداثيات س

pos (i، 2) = pos (i-1، 2) + dist * cosd (netangle) ؛ ٪ الحصول على إحداثيات ص

أنا = أنا + 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' ؛

الموقف = سافيبوس (نقاط البيع) ؛

%---------------------------

sendmail (mail، 'HELP!'، 'أنا عالق على منحدر!'، {imfile، position})

list = {'Continue'، 'Stop'} ؛

idx = menu ("ماذا أفعل؟" ، قائمة) ؛

إذا معرف == 2

استراحة

نهاية

٪ ما يجب فعله إذا تم اكتشاف كائن أمام الروبوت:

٪ توقف ، تراجع ، التقاط صورة ، تنبيه مستخدم الاكتشاف

٪ عبر البريد الإلكتروني ، أدر 90 درجة ، واستمر في الاستكشاف

elseif Light.leftCenter> lightBumper_datum || Light.rightCenter> lightBumper_datum || Bump.front == 1

r.stop.

Dist = r.getDistance ؛

pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ الحصول على إحداثيات س

pos (i، 2) = pos (i-1، 2) + dist * cosd (netangle) ؛ ٪ الحصول على إحداثيات ص

أنا = أنا + 1 ؛

المسافة r.move (- 125) ؛

Dist = r.getDistance ؛

pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ الحصول على إحداثيات س

pos (i، 2) = pos (i-1، 2) + dist * cosd (netangle) ؛ ٪ الحصول على إحداثيات ص

أنا = أنا + 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' ؛

الموقف = سافيبوس (نقاط البيع) ؛

%---------------------------

sendmail (mail، 'Alert!'، 'I found something!'، {imfile، position})

الزاوية = 90 ؛

netangle = netangle + زاوية ؛

ص زاوية الدوران (زاوية) ؛

r.setDriveVelocity (v ، v) ؛

٪ ما يجب فعله إذا تم اكتشاف كائن على يسار الروبوت:

٪ توقف ، استدر نحو الكائن ، نسخ احتياطي ، التقاط صورة ، تنبيه

٪ مستخدم الاكتشاف عبر البريد الإلكتروني ، أدر 90 درجة واستمر في الاستكشاف

elseif Light.leftFront> lightBumper_datum || Light.left> lightBumper_datum || Bump.left == 1

r.stop.

Dist = r.getDistance ؛

pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ الحصول على إحداثيات س

pos (i، 2) = pos (i-1، 2) + dist * cosd (netangle) ؛ ٪ الحصول على إحداثيات ص

أنا = أنا + 1 ؛

الزاوية = 30 ؛

netangle = netangle + زاوية ؛

ص زاوية الدوران (زاوية) ؛

المسافة r.move (- 125) ؛

Dist = r.getDistance ؛

pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ الحصول على إحداثيات س

pos (i، 2) = pos (i-1، 2) + dist * cosd (netangle) ؛ ٪ الحصول على إحداثيات ص

أنا = أنا + 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' ؛

الموقف = سافيبوس (نقاط البيع) ؛

%---------------------------

sendmail (mail، 'Alert!'، 'I found something!'، {imfile، position})

زاوية = -90 ؛

netangle = netangle + زاوية ؛

ص زاوية الدوران (زاوية) ؛

r.setDriveVelocity (v ، v) ؛

٪ ما يجب فعله إذا تم اكتشاف كائن على يمين الروبوت:

٪ توقف ، استدر نحو الكائن ، نسخ احتياطي ، التقاط صورة ، تنبيه

٪ مستخدم الاكتشاف عبر البريد الإلكتروني ، أدر 90 درجة واستمر في الاستكشاف

elseif Light.right> lightBumper_datum || Light.right> lightBumper_datum || Bump.right == 1

r.stop.

Dist = r.getDistance ؛

pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ الحصول على إحداثيات س

pos (i، 2) = pos (i-1، 2) + dist * cosd (netangle) ؛ ٪ الحصول على إحداثيات ص

أنا = أنا + 1 ؛

زاوية = -30 ؛

netangle = netangle + زاوية ؛

ص زاوية الدوران (زاوية) ؛

المسافة r.move (- 125) ؛

Dist = r.getDistance ؛

pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ الحصول على إحداثيات س

pos (i، 2) = pos (i-1، 2) + dist * cosd (netangle) ؛ ٪ الحصول على إحداثيات ص

أنا = أنا + 1 ؛

وقفة (1.5) ؛

r.beep ('C1 ^ ، C1 ^ ، C2 ^ ، D2 ^ ، D2 ^ ، C8 ^')

img = r.getImage ؛

imwrite (img، 'RightBump.png')

%--------------------------

imfile = 'RightBump.png' ؛

الموقف = سافيبوس (نقاط البيع) ؛

%---------------------------

sendmail (mail، 'Alert!'، 'لقد وجدت شيئًا!'، {imfile، position}) ؛

الزاوية = 90 ؛

netangle = netangle + زاوية ؛

ص زاوية الدوران (زاوية) ؛

r.setDriveVelocity (v ، v) ؛

٪ ماذا تفعل إذا تم الكشف عن جرف على يسار الروبوت:

٪ توقف ، تحرك للخلف ، انعطف يمينًا ، تابع الاستكشاف

elseif Cliff.left <reflect_datum || Cliff.leftFront <reflect_datum

r.stop.

Dist = r.getDistance ؛

pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ الحصول على إحداثيات س

pos (i، 2) = pos (i-1، 2) + dist * cosd (netangle) ؛ ٪ الحصول على إحداثيات ص

أنا = أنا + 1 ؛

المسافة r.move (- 125) ؛

Dist = r.getDistance ؛

pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ الحصول على إحداثيات س

pos (i، 2) = pos (i-1، 2) + dist * cosd (netangle) ؛ ٪ الحصول على إحداثيات ص

أنا = أنا + 1 ؛

زاوية = زاوية الراند.

netangle = netangle + زاوية ؛

ص زاوية الدوران (زاوية) ؛

r.setDriveVelocity (v ، v) ؛

٪ ماذا تفعل إذا تم الكشف عن جرف على يمين الروبوت:

٪ توقف ، تحرك للخلف ، انعطف يسارًا ، تابع الاستكشاف

elseif Cliff.right <reflect_datum || Cliff.right الجبهة <reflect_datum

r.stop.

Dist = r.getDistance ؛

pos (i ، 1) = dist * sind (زاوية) ؛ ٪ الحصول على إحداثيات س

pos (i، 2) = dist * cosd (زاوية) ؛ ٪ الحصول على إحداثيات ص

أنا = أنا + 1 ؛

المسافة r.move (- 125) ؛

زاوية = RandAngle ؛

netangle = netangle + زاوية ؛

ص زاوية الدوران (زاوية) ؛

r.setDriveVelocity (v ، v) ؛

نهاية

نهاية

تحكم الهاتف الذكي

الخيارات = {'Autonomous'، 'Manual Control'}

موجه = قائمة ("كيف تريد التحكم في العربة الجوالة؟" ، الخيارات)

م = mobiledev

ص = رومبا (19)

إذا موجه == 1

اكتشف (ص)

آخر

احيانا صحيح

وقفة (.5)

PhoneData = m. Orientation ؛

Azi = PhoneData (1) ،

الملعب = بيانات الهاتف (2) ؛

الجانب = بيانات الهاتف (3) ؛

إذا كان الجانب> 130 || الجانب <-130٪ إذا تم قلب الهاتف ووجهه لأسفل ، فقم بإيقاف غرفة Roomba واخرج من الحلقة

r.stop

r.beep ("C ، C ، C ، C")

استراحة

elseif Side> 25 && Side <40٪ إذا تم تدوير الهاتف بشكل جانبي بين 25 و 40 درجة ، انعطف يسارًا بمقدار 5 درجات

r.turnAngle (-5) ؛

elseif Side> 40٪ إذا تم تدوير الهاتف بشكل جانبي أكثر من 40 درجة ، انعطف يسارًا 45 درجة

ص زاوية الدوران (-45)

elseif Side-40٪ إذا تم تدوير الهاتف بشكل جانبي بين -25 و -40 درجة ، اتجه يمينًا بمقدار 5 درجات

ص زاوية الدوران (5) ؛

elseif Side <-40٪ إذا كان الهاتف مقلوبًا بشكل جانبي أقل من -40 درجة اتجه يسارًا 45 درجة

ص زاوية الدوران (45)

نهاية

٪ إذا تم حمل الهاتف بالقرب من عمودي ، التقط صورة وقم برسمها

إذا كان الملعب <-60 && image <= 9

r.beep

img = r.getImage ؛

حبكة فرعية (3 ، 3 ، صورة)

imshow (IMG)

نهاية

٪ تتحرك للأمام والخلف بناءً على الاتجاه الأمامي والخلفي

إذا كانت الملعب> 15 && Pitch <35٪ إذا كان الملعب بين 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) ؛

٪ الحصول على بيانات الوفير بعد التحرك

نتوء = r.getBumpers ؛

إذا كان Bump.right == 1 || Bump.left == 1 || Bump.front == 1

r.beep ("A، C، E")

المسافة (- 01)

نهاية

٪ الحصول على بيانات مستشعر الجرف

كليف = r.getCliffSensors ؛

إذا كان Cliff.left> 1500 || Cliff.leftFront> 1500 || Cliff. Refront> 1500 || Cliff.right> 1500٪ إذا تسبب شيء ما في تشغيل مستشعر الجرف ، فقم بالتعامل معه على أنه حمم بركانية وقم بعمل نسخة احتياطية

r.beep ('C ^^، C، C ^^، C، C ^^، C، C ^^، C، C ^^، C، C ^^، C')

المسافة r.move (- 031)

نهاية

نهاية

elseif درجة الصوت> 35٪ إذا كانت النغمة أكبر من 35 درجة تحرك للأمام مسافة أطول

٪ الحصول على بيانات المصد الخفيف قبل التحرك

litBump = r.getLightBumpers ،

إذا كان litBump.leftFront> 15 || litBump.leftCenter> 15 || litBump.rightCenter> 15 || litBump.rightFront> 15٪ إذا كان هناك شيء ما أمام غرفة roomba وسيضرب إذا تحرك للأمام يصدر ضوضاء وعرض رسالة

r.beep ('C ^^، F # ^، C ^^، F # ^')

آخر٪ تحرك

المسافة (.3)

٪ الحصول على بيانات الوفير بعد التحرك

نتوء = r.getBumpers ؛

إذا كان Bump.right == 1 || Bump.left == 1 || Bump.front == 1٪ إذا اصطدمت بشيء ما ، فتحدث ضوضاء ، وعرض الرسالة ، والنسخ الاحتياطي

r.beep ("A، C، E")

المسافة (- 01)

نهاية

٪ الحصول على بيانات مستشعر الجرف بعد التحرك

كليف = r.getCliffSensors ؛

إذا كان Cliff.left> 1500 || Cliff.leftFront> 1500 || كليف اليمين الأمامي> 1500 || Cliff.right> 1500٪ إذا تسبب شيء ما في تشغيل جهاز استشعار الجرف ، فقم بالتعامل معه على أنه حمم بركانية وقم بعمل نسخة احتياطية

r.beep ('C ^^، C، C ^^، C، C ^^، C، C ^^، C، C ^^، C، C ^^، C')

المسافة (- 31)

نهاية

نهاية

elseif الملعب - 35٪ إذا كان الملعب بين -15 و -35 درجة يتحرك للخلف مسافة قصيرة

r.moveDistance (-. 03) ؛

٪ الحصول على بيانات مستشعر الجرف بعد التحرك

كليف = r.getCliffSensors ؛

إذا كان Cliff.left> 1500 || Cliff.leftFront> 1500 || Cliff. Refront> 1500 || Cliff.right> 1500٪ إذا تسبب شيء ما في تشغيل مستشعر الجرف ، فقم بالتعامل معه على أنه حمم بركانية وقم بعمل نسخة احتياطية

r.beep ('C ^^، C، C ^^، C، C ^^، C، C ^^، C، C ^^، C، C ^^، C')

المسافة r.move (.04)

نهاية

elseif درجة الصوت -60٪ إذا كان الملعب بين -35 و -60 درجة تحرك للخلف مسافة أطول

المسافة (-.3)

٪ الحصول على بيانات مستشعر الجرف بعد التحرك

كليف = r.getCliffSensors ؛

إذا كان Cliff.left> 1500 || Cliff.leftFront> 1500 || كليف اليمين الأمامي> 1500 || Cliff.right> 1500٪ إذا تسبب شيء ما في تشغيل مستشعر الجرف ، فقم بالتعامل معه على أنه حمم بركانية وقم بعمل نسخة احتياطية

r.beep ('C ^^، C، C ^^، C، C ^^، C، C ^^، C، C، C ^^، C، C ^^، C')

المسافة (.31)

نهاية

نهاية

نهاية

نهاية

موصى به: