التطبيقات الروبوتية - الذكاء الاصطناعي - ثالث ثانوي
الجزء الأول
1. أساسيات الذكاء الاصطناعي
2. خوارزميات الذكاء الاصطناعي
3. معالجة اللغات الطبيعية
الجزء الثاني
4. التعرف على الصور
5. خوارزميات التحسين واتخاذ القرار
6. الذكاء الاصطناعي والمجتمع
رابط الدرس الرقمي الدرس الثاني التطبيقات الروبوتية 1 إحداث ثورة في العالم باستخدام الروبوتية Revolutionizing the World with Robotics الروبوتية هي مجال سريع النمو أحدث ثورة في طريقة عمل الناس وفي عيشهم www.ien.edu.sa وتفاعلهم مع بيئتهم وتطبيقاتها ، وتشمل مجموعة واسعة من المجالات: بداية من الروبوتية (Robotics) : التصنيع وحتى استكشاف الفضاء ، ومن الإجراءات الطبية إلى تنظيف المنزل تهتم الروبوتية بدراسة الروبوتات وهي ومن الترفيه إلى المهام العسكرية وتتمثل الميزة الرئيسة للروبوتية في قدرتها على آلات يمكنها أداء مجموعة متنوعة من أداء المهام المتكررة بدرجة عالية من الدقة والإتقان، حيث يُمكن أن تعمل الروبوتات المهام بطريقة مستقلة أو شبه مستقلة بلا تعب ودون أخطاء؛ مما يجعلها مثالية للقيام بالمهام الخطرة أو التي يصعب أو تحت تصرُّف البشر. على البشر القيام بها. على سبيل المثال، في العمليات المصنعية تُستخدم الروبوتات لأداء بعض المهام مثل: اللحام والطلاء وتجميع المنتجات، وفي المجال الطبي تُستخدم الروبوتات لإجراء العمليات الجراحية بدقة أكبر، وفي استكشاف الفضاء تُستخدم الروبوتات لاستكشاف ودراسة الكواكب البعيدة. الروبوتية والمحاكيات Robotics and Simulators : هناك تحديان مهمان في مجال الروبوتية هما التكلفة والوقت اللازمان لبناء و أجهزة الروبوت المادية واختبارها ، وهنا يأتي دور المحاكيات (Simulators) المحاكي (Simulator) : التي تُستخدم على نطاق واسع في أبحاث الروبوتية وتعليمها وصناعتها؛ لأنها برنامج يسمح للمطورين باختبار توفر طريقة فعّالة من حيث التكلفة، كما أنها آمنة لاختبار الروبوتات تصميماتهم وخوارزمياتهم وتحسينها وتجربتها ، حيث تتيح المحاكيات للمطوّرين إنشاء بيئات افتراضية تحاكي في عالم افتراضي قبل بناء الروبوتات سيناريوهات العالم الحقيقي؛ مما يسمح لهم باختبار قدرات الروبوتات المادية. و وأدائها في مجموعة متنوعة من المواقف، ويُمكنها محاكاة مختلف الظروف الجوية والتضاريس والعقبات التي قد تواجهها الروبوتات في العالم الحقيقي. كما يُمكن للمُحاكِيات أن تُحاكي التفاعلات بين الروبوتات المتعددة وبين الروبوتات والبشر؛ مما يسمح للمطوّرين بدراسة وتحسين الطرائق التي تتفاعل بها الروبوتات مع بيئتها. 312 شكل 6.5 محاكاة للأذرع الصناعية FEUER وزارة التعليم Ministry of Education 2024-1446
التطبيقات الروبوتية1: إحداث ثورة في العالم باستخدام الروبوتية
الروبوتية والمحاكيات
وهناك ميزة أخرى للمحاكيات تتمثل في أنها تسمح للمطوّرين بتعديل تصاميم وخوارزميات الروبوتات المختلفة، واختبارها بسهولة دون الحاجة إلى مُكوّنات ماديّة حاسوبية باهظة الثمن؛ حيث تسمح بالتكرار والتجريب بطريقة أسرع، مما يُؤدي إلى دورات تطوير أكثر سرعة وتصميمات أكثر كفاءة. وبوجه عام، تُعدُّ الروبوتية مجالًا سريع النمو يتضمن مجموعة واسعة من التطبيقات والمحاكيات التي تلعب دورًا مهما في تطوير الروبوتات عن طريق السماح للمطوّرين باختبار تصاميم الروبوتات وخوارزمياتها ، وتحسينها بطريقة آمنة وغير مكلفة، ومع استمرار تقدم التقنية، فمن المتوقع أن تنمو تطبيقات الروبوتية واستخدام المحاكيات، مما يمهد الطريق لعالم أكثر أتمتةً وترابطًا. ويبوتس Webots ويبوتس أداة برمجية قوية يُمكن استخدامها في محاكاة الروبوتات وبيئاتها، وهي منصة ممتازة الأنظمة تستحق إدخالها في عالم الروبوتات والذكاء الاصطناعي، حيث يستطيع الطلبة تصميم والخوارزميات الروبوتية ومحاكاتها واختبارها باستخدام هذه الأداة، دون الحاجة إلى معدات حاسوبية باهظة الثمن. يُعدُّ استخدام أداة ويبوتس في الذكاء الاصطناعي مفيدا بشكل خاص؛ لأنها تتيح للطلبة تجربة خوارزميات تعلم الآلة واختبار أدائها في بيئة تعتمد على المحاكاة، فمن خلال إنشاء روبوتات وبيئات افتراضية يستطيع الطلبة أن يستكشفوا إمكانيات وقيود الذكاء الاصطناعي، وأن يتعلموا كيفية برمجة الأنظمة الذكية التى يُمكنها اتخاذ القرارات بناءً على بيانات الزمن الواقعي. يُمكنك تنزيل أداة ويبوتس من الرابط التالي: Webots™ robot simulation https://github.com/cyberbotics/webots/releases/download/R2023a/webots-R2023a_setup.exe C:\Program Files\Webots\projects\robots\dji\mavic\worlds\mavic_2_pro.wbt (mavic) - Webots R2023a X File Edit View Simulation Build Overlays Tools Help. DJI Mavic 2 PRO demo co IMPORTABLE EXTERNPROTO WorldInfo Viewpoint Textured Background Textured BackgroundLight Floor "floor" Road "road" Windmill "windmill" Windmill "windmill(1)" → Windmill "windmill(2)" Windmill "windmill(3)" SmallManor "small manor" ◆ SquareManhole "manhole" CardboardBox "cardboard box" Tesla Model3Simple "vehicle" Pine "pine tree" Pine "pine tree(1)" Pine "pine tree(3)" Pine "pine tree(4)" Pine "pine tree(5)" Pine "pine tree(6)" Pine "pine tree(2)" • Forest Mavic2Pro "Mavic 2 PRO" 0:00:04:096 0.00x 00000 00000 100 0000000 -0-0-0-0 05000 شكل 6.6 مشروع طائرة مسيرة باستخدام أداة ويبوتس 313 وزارة التعليم Ministry of Education 2024-1446 ...ontrollers\mavic2pro\mavic2pro.c mavic2pro.c☑ 2 * Copyright 1996-2022 Cyberbotic 3 * 4 * Licensed under the Apache Lice 5 * you may not use this file exce 6 * You may obtain a copy of the L 7 * 8 * 9 http://www.apache.org/lice 10 * Unless required by applicable 11 * distributed under the License 12 * WITHOUT WARRANTIES OR CONDITIO 13 * See the License for the specif 14 * limitations under the License. 15 */ 16 17 /* 18 * Description: Simplistic drone 19 * - Stabilize the robot using th 20 * - Use PID technique to stabili 21 * - Use a cubic function applied 22 * - Stabilize the camera. 23 * - Control the robot using the 24 */ 25 26 #include <math.h> 27 #include <stdio.h> 28 #include <stdlib.h> 29 30 #include <webots/robot.h> 31 32 #include <webots/camera.h> 33 #include <webots/compass.h> 34 #include <webots/gps.h> 35 #include <webots/gyro.h> 36 #include <webots/inertial_unit.h> 37 #include <webots/keyboard.h> 38 #include <webots/led.h> 39 #include <webots/motor.h> 40 41 #define SIGN(x) ((x) > 0) - ((x) 42 #define CLAMP (value, low, high) (
وهناك ميزة أخرى تتمثل في أنها تسمح للمطورين بتعديل تصاميم خوارزميات الروبوتات المختلفة
ويبوتس
مراقبة المنطقة Area Surveillance نقطة الطريق (Waypoint) : في هذا الدرس والدرس التالي ستستخدم أداة ويبوتس لعمل محاكاة لطائرة مُسيَّرة تُحلق فوق أحد المنازل، ثم ستقوم بترقيتها لتكتشف الحدود البشرية كمراقبة، حيث تتكون المحاكاة من طائرة مُسيَّرة تُقلع من وضع السكون على نقطة الطريق هي موقع جغرافي الأرض وتبدأ في الدوران حول المنزل. وفي الدرس التالي، ستضيف ميزة رؤية محدد في فضاء ثلاثي الأبعاد تتم و معرفة مسبقًا لتتبعها الطائرات الحاسب للطائرة المسيَّرة باستخدام الكاميرا الخاصة بها باستخدام مكتبة أوبن برمجة الطائرة المسيرة لتطير إليها سي في (OpenCV) ، وهذا سيمكنك من تحليل الصور التي التقطتها الكاميرا. أو تمر من خلالها. وتستخدم نقاط الطريق لإنشاء مسارات طيران يتم التحكم في الطائرة المسيَّرة بواسطة نص برمجي بلغة البايثون وهو مسؤول عن التحكم في جميع الأجهزة المُسيَّرة بما فيها محركات المراوح والكاميرا ونظام تحديد المواقع العالمي - Global Positioning System وما إلى المسيَّرة، ويمكن ضبطها باستخدام ذلك، كما أنه يحتوي على مقطع برمجي لمزامنة جميع المحركات لتحريك الطائرة إحداثيات نظام تحديد المواقع العالمي المُسيَّرة إلى نقاط الطريق (Waypoints) المتنوعة وجعلها مستقرة في الهواء. و البدء مع ويبوتس Starting with Webots و أو أنظمة أخرى قائمة على المواقع. ستتعرف في هذا الدرس على أداة ويبوتس وبيئتها، حيث تتكون محاكاة ويبوتس من عنصرين: • التعريف بروبوت واحد أو أكثر وبيئاتها في ملف عَالَم ويبوتس (Webots World) برنامج متحكّم واحد أو أكثر للروبوتات المذكورة. عالم ويبوتس (Webots World هو وصف ثلاثي الأبعاد لخصائص الروبوت، حيث يتم تعريف كل كائن بما في ذلك موقعه، واتجاهه، وهندسته، ومظهره مثل لونه أو سطوعه، وخصائصه المادية ونوعه وما إلى ذلك، كما يُمكن أن تحتوي الكائنات على كائنات أخرى في الأنظمة الهرمية التي تُشكل العوالم . على سبيل المثال، قد يحتوي الروبوت علي عجلتين، ومُستشعر مسافة، ومفصل يحتوي على كاميرا ونحوها. يحدِّد ملف العالم ( World File) فقط اسم المتحكّم اللازم لكل روبوت، ولا يحتوي على المقطع البرمجي للمُتحكّم (Controller) في الروبوتات، وتُحفظ العوالم في ملفات بتنسيق "wbt." ، ويحتوي كل مشروع ويبوتس على مجلد فرعي بعنوان worlds ( العَوالِم) تُخزَّن فيه الملفات بتنسيق ."wbt.". متحكّم ويبوتس (Webots Controller) هو برنامج حاسب يتحكم في روبوت محدَّد في ملف العالم، ويُمكن استخدام أي لغة من لغات البرمجة التي يدعمها ويبوتس لتطوير المتحكّم مثل: لغة سي بلس بلس (++C) ولغة جافا (Java) ، ولكنـك ستستخدم في هذا المشروع لغة البايثون . يُطلق ويبوتس كل برنامج من برامج المتحكّم المعطاة كعملية منفصلة عندما تبدأ المحاكاة، ويقوم بربط عمليات المتحكّم بالروبوتات التي تمت محاكاتها، وعلى الرغم من أن العديد من الروبوتات يُمكنها مشاركة المقطع البرمجي نفسه لبرنامج المتحكّم ، إلا أن كل روبوت سيشغل العملية الخاصة به. يُخزَّن مصدر كل برنامج متحكّم وملفاته الثنائية معًا في مجلد المتحكّم (Controller Directory) ، حيث يحتوي كل مشروع ويبوتس على مجلد متحكّم داخل المجلد الفرعي الذي يتخذ اسم controllers (المتحكمات). بيئة الويبوتس The Webots Environment عندما تفتح البرنامج، ستلاحظ عدة حقول ونوافذ، حيث تشمل المكونات الرئيسة لواجهة ويبوتس ما يلي: لک شريط القائمة (Menu Bar) : يقع في الجزء العلوي من الواجهة ، ويُوفر شريط القوائم إمكانية الوصول إلى أوامر وخيارات متنوعة للعمل على المحاكاة مثل : إنشاء نموذج روبوت أو استيراده، وتهيئة بيئة المحاكاة، وتشغيل عمليات المحاكاة. شريط الأدوات (Toolbar) : هو مجموعة من الأزرار الموجودة أسفل شريط القائمة ويُوفر الوصول السريع إلى الوظائف المستخدمة بشكل متكرر مثل: إضافة كائنات إلى المشهد، وبدء المحاكاة ،وإيقافها ، وتغيير عرض الكاميرا. و وزارة التعليم Ministry of Education 2024-1446 314
مراقبة المنطقة
البدء مع ويبوتس
بيئة الويبوتس
315 شجرة المشهد ( Scene Tree) : هي تمثيل هرمي للكائنات في بيئة المحاكاة، حيث تتيح للمستخدمين التنقل في المشهد والتعامل معه مثل : إضافة أو حذف الكائنات، وتغيير خصائص الكائن ، وتجميع الكائنات وإدارتها بشكل أسهل. مُحرِّر الحقل Field Editor هو واجهة رسومات لتحرير خصائص الكائنات في بيئة المحاكاة، حيث يُمكن للمستخدمين استخدامه لضبط مُعاملات الكائن مثل موضعه، واتجاهه، وحجمه ومادته، وخصائصه الفيزيائية. نافذة ثلاثية الأبعاد (Window : هي نافدة العرض الرئيس لبيئة المحاكاة، وتعرض الكائنات وتفاعلاتها في فضاء ثلاثي الأبعاد، حيث يُمكن للمستخدمين التنقل في النافذة الثلاثية الأبعاد باستخدام عناصر تحكم الكاميرا المختلفة مثل: التحريك ، والتكبير أو التصغير والتدوير مُحرِّر النص :(Text Editor ) : هو أداة لتحرير مصدر المقطع البرمجي أو الملفات النصية الأخرى المستخدمة في المحاكاة، ويقدِّم تمييزا لبناء الجمل (Syntax Highlighting) وخصائص مفيدة أخرى لكتابة المقاطع البرمجية وتصحيحها (Debugging) ، مثل : الإكمال التلقائي (Auto-Completion) وإبراز الأخطاء (Error Highlighting). نافذة تعرض مُخرجات قائمة على النصّ من المحاكاة، بما في ذلك رسائل الخطأ وحدة التحكم ( Console) : هي ومعلومات التصحيح، وهي مفيدة في استكشاف الأخطاء التي تحدث أثناء المحاكاة وإصلاحها. محرر النص (Text editor). شريط الأدوات (Toolbar). شريط القائمة (Menu bar). C:\Program Files\Webots\proje ts\vehicles\worlds\city.wbt (vehicles) - Webots R2023a Edit View Simulation Build Overlays Tools Help File City + > IMPORTABLE EXTERNPROTO StraightRoadSegment "road(5)" Curved RoadSegment "road(6)" StraightRoadSegment "road(7)" RoadIntersection "road intersection(1)" StraightRoadSegment "road(8)" Curved RoadSegment "road(9)" StraightRoadSegment "road(10)" Curved RoadSegment "road(11)" StraightRoadSegment "road(12)" Curved RoadSegment "road(13)" > StraightRoadSegment "road(14)" > Curved RoadSegment "road(15)" BmwX5 "vehicle" > > 0:00:04:830 0.00x Generic TrafficLight "generic traffic light" CrossRoads TrafficLight "cross road traffic light" DEF STONES Solid Building UnderConstruction "building under construction' CommercialBuilding "commercial building" A un Node Mass mass: Selection: BmwX5 (Robot) Position Velocity excluding descendants 2000 kg density: COM: relative 1.2975 202.769 kg/m^3 0 0.1 1125.07 0 846.89 Inertia matrix: 0 4473.54 0 846.89 0 4346.1 Console - All شجرة المشهد (Scene tree ) . 回 : محرّر الحقل (Field editor). نافذة ثلاثية الأبعاد .(3D window) ...rollers\autonomous_vehicle\a itonomous_vehicle.c autonomous_vehicle.c 49 50 // enabe various fedtures' 51 bool enable_collision_avoidance = false; 52 bool enable_display = false; 53 bool has gps = false; 54 bool has_camera = false; 55 56 // camera 57 WbDeviceTag camera; 58 int camera_width = -1; 59 int camera_height = -1; 60 double camera_fov = -1.0; 61 62 // SICK Laser 63 WbDeviceTag sick; 64 int sick_width = -1; 65 double sick_range = -1.0; 66 double sick_fov = -1.0; 67 68 // speedometer 69 WbDeviceTag display; 70 int display_width = 0; 71 int display_height = 0; 72 WbImageRef speedometer_image = NULL; 73 74 // GPS 75 WbDeviceTag gps; 76 double gps_coords[3] = {0.0, 0.0, 0.0}; 77 double gps_speed = 0.0; 78 79 // misc variables 80 double speed = 0.0; 81 double steering_angle = 0.0; 82 int manual_steering = 0; 83 bool autodrive = true; 84 85 void print_help() { 86 87 printf("You can drive this car!\n"); printf("Select the 3D window and then use th INFO: autonomous_vehicle: Starting controller: "C:\Program Files\Webots\projects\vehicles\controllers\autonomous_vehicle\autonomous_vehicle.exe" INFO: generic_traffic_light: Starting controller: "C:\Program Files\Webots\projects\objects\traffic\controllers\generic_traffic_light\generic_traffic_light.exe" 10 10 r INFO: crossroads_traffic_lights: Starting controller: "C:\Program Files\Webots\projects\objects\traffic\controllers\crossroads_traffic_lights\crossroads_traffic_lights.exe" setting speed to 50 km/h You can drive this car! Select the 3D window and then use the cursor keys to: [LEFT]/[RIGHT] - steer [UP]/[DOWN] - accelerate/slow down. وزارة التعليم Ministry of Education 2024-1446 شكل 6.7: نافذة ويبوتس وحدة التحكم ( Console)
شجرة المشهد: هي تمثيل هرمي للكائنات في بيئة المحاكاة
Structure وزارة التعليم Ministry of Education 2024-1446 Bookmarks Project أولًا: عليك أن تقوم بتثبيت المكتبات اللازمة التي ستستخدمها في مشروعك. يمكنك تثبيت مكتبة أوبـن سـي في (OpenCV) عن طريق باي تشارم (PyCharm). لتنصيب مكتبة أو بن سي في (OpenCV) : > في نافذة Charm (باي تشارم) ، اضغط على Packages (جزم). > اكتب "opencv" (أوبن سي في ) في شريط البحث. 2 - ، 3 > اختر openvpython أوبن) سي في بايثون > ستظهر لك رسالة تخبرك باكتمال التنصيب. 5 1 ثم اضغط على install (تثبيت ) . . PC main.py File Edit View Navigate Code Refactor pythonProject Run Tools VCS Window Help pythonProject - main.py main.py X Python Packages opencv Installed (0 found) PyPI (78 found) opencv-python 2 opencv-python-headless opencv-contrib-python opencv-contrib-python-headless opencve opencv-pg opencvFPS opencvpro opencv-cam opencv-iav opencv-log opencv-mat opencvzone opencv-cam2 Com Version Control 1 Python Packages Add Package v opencv-pyth... 3 downloads 241M TODO 5 Packages installed successfully Installed packages: 'opencv-python' main 4 latest ▾ Install OpenCV on Wheels Pre-built CPU-only OpenCV packages for Python. Check the manual build section if you wish to compile the bindings from source to enable additional modules such as CUDA. Installation and Usage 1. If you have previous/other manually installed (= not installed via pip) version of OpenCV installed (e.g. Python Console Problems 2 Terminal Shared indexes for Python package "openpyxl==3.0.10" are downloaded (414,86 kB in 786 ms) (10 minutes ago) Services شكل 6.8: تثبيت مكتبة أوبن سي في بالمثل، يمكنك تثبيت مكتبة بيلو (Pillow) من خلال البحث عن كلمة "pillow". 1:1 CRLF UTF-8 4 spaces Python 3.7 (pythonProject) 316 Notifications
أولاً: عليك أن تقوم بتثبيت المكتبات اللازمة التي ستستخدمها في مشروعك يمكنك تثبيت مكتبة أوين سي
317 1 ثم دعونا نلقي نظرة على المشروع أولا عليك أن تبحث عن ملف عَالَم ويبوتس وتقوم بتحميله. لفتح عالم ويبوتس : من Menu bar شريط القائمة، اضغط على File (ملف) ، ثم على Open World افتح عالم ) . 2 > ابحث عن ملف drone_world.wbt ( الطائرة المُسيَّرة العالَم) في مجلد worlds (العوالم ) ، اضغط على Open (فتح). 3 C:\Program Files\Webots\projects\vehicles\worlds\city.wbt (vehicles) - Webots R2023a File Edit View Simulation Build Overlays Tools Help New Open World... Open Recent World 1 shift+0 Open Sample World... Save World Ctrl + Shift+S Save World As... Reload World Ctrl + Shift+R Reset Simulation Ctrl + Shift + T New Text File Ctrl+N Open Text File... Ctrl + O Save Text File Ctrl+S Save Text File As... Save All Text Files Revert Text File Ctrl+R Print Preview... Print... Ctrl + P 0:00:00:000 0.00x Open World File > This PC > Documents > A12_U3_Drone > worlds Organize 4 New folder Name 2 drone_world.wbt وزارة التعليم Ministry of Education 2024-1446 Quick access Creative Cloud Files This PC Network File name: drone_world.wbt X く Search worlds Date modified Type Size 30/3/2023 11:35 лμ WBT File 5 KB شكل 6.9: فتح عالم ويبوتس Wo 3 Open (*.wbt *.WBT) Cancel ?
دعونا ناقي نظرة على المشروع، أولاً عليك أن تبحث عن ملف عالم ويبوتس وتقوم بتحميله
و لک بعدها افتح ملف النصّ البرمجي بلغة البايثون الذي سيستخدم في التحكم في الطائرة المسيرة. لفتح النص البرمجي للمتحكم > اضغط على Open et le le افتح ملف نصي) من شريط القائمة 1 > ابحث عن ملف drone_controller.py مُتحكِّم الطائرة المسيرة) في مجلد controllers (المتحكّمات) ثم مجلد drone_controller (مُتحكِّم الطائرة المسيَّرة ) ، ثم اضغط على Open (فتح) . 3 C:\Program Files\Webots\projects\vehicles\worlds\city.wbt (vehicles) - Webots R2023a 0:00:00:000 0.00x File Simulation View Edit Build Overlays Tools Help New Open World... Ctrl + Shift + O Open Recent World Open Sample World... Save World Ctrl + Shift+S Save World As... Reload World Ctrl + Shift+R Ctrl + Shift + T Reset Simulation New Text File Open Text File... Save Text File A Save Text File As... Cave All Taut Ciler Ctrl+N 1+0 Ctrl + S > This PC > Documents > Al2_U3_Drone > controllers > drone_controller Open File... ~ ↑ Organize New folder > Quick access 2 PC Creative Cloud Files This PC Network drone_controller. py haarcascade_full body.xml File name: drone_controller.py Search drone_controller 3 All Open Cancel : شكل 6.10 فتح النص البرمجي لمتحكم ويبوتس موضع الكائن ودورانه Object Position and Rotation تُستخدم الإحداثيات ثلاثية الأبعاد X و Y و Z لتمثيل موضع كائن في الفضاء، حيث يُمثل X المحور الأفقي، ولا المحور الرأسي، وح محور العمق، وتُشبه إحداثيات العالم الحقيقي لخطّ العرض وخطّ الطول والارتفاعات المستخدمة لوصف المواقع على الأرض. الانحدار (Pitch) والالتفاف (Roll) والانعراج (Yaw) توجيهات دورانية يُمكن استخدامها لوصف حركة كائن ما بالنسبة للإطار المرجعي كما يظهر في الشكل 6.11 ، فالانحدار (Pitch) هو دوران الكائن حول محوره X؛ مما يجعله يـمـيـل لأعلى أو لأسفل بالنسبة للمستوى الأفقي، أما الالتفاف (Roll) فهو دوران الكائن حول محوره ۷؛ مما يجعل الجسم يميل جانبًا أو من جانب إلى آخر ، والانعراج (Yaw) هو دوران الكائن حول محوره 2؛ مما يجعل الجسم يلتف إلى اليسار أو اليمين بالنسبة للإطار المرجعي. يُمكن استخدام هذه القيم الست معًا ( ، ، ، الانحدار ، الالتفاف، الانعراج لوصف موضع كائن في الفضاء ثلاثي الأبعاد واتجاهه، حيث تُستخدم بشكل شائع في الروبوتات، وأنظمة الملاحة، والتطبيقات الأخرى التي تتطلب تحديد المواقع والتحكم بدقة. .. وزارة التعليم Ministry of Education 2024-1446 318
بعها افتح ملف النص البرمجي بلغة البايثون الذي سيستخدم في التحكم في الطائرة المسيرة
موضع الكائن ودورانه
لک أجهزة الطائرة المسيرة Drone Devices تم تجهيز الطائرة المُسيَّرة (Drone) بعدة مستشعرات (Sensors) تتيح لها أن تجمع المدخلات من بيئتها، ويوفِّر المحاكي الدالتين ( ) getDevice و ( )enable للتفاعل مع المستشعرات والمشغلات (Actuators) المختلفة لروبوت المحاكاة. تُستخدم دالة ( )getDevice للحصول على قراءات جهاز مثل: المستشعر أو المشغل من نموذج روبوت ،ويبوتس، وتأخذ مُعامِلا نصيًّا وتحدّد اسم الجهاز المراد الوصول إليه. تُستخدم الدالة ( )enable لتنشيط جهاز ، بحيث يُمكنه البدء في تقديم البيانات أو تنفيذ إجراء محدد. محور الانعراج شكل 6.11 محاور الدوران محور الانحدار محور الالتفاف وحدة القياس بالقصور الذاتي (IMU). O الكاميرا .(Camera) يُمكن لوحدة القياس بالقصور الذاتي (Inertial Measurement Unit - IMU) قياس التسارع الخطي للطائرة المسيَّرة وسرعتها الزاوية، وقياس القوى مثل الجاذبية، بالإضافة إلى قوى الدوران المؤثرة على الطائرة المسيَّرة، كما يُمكنها أن توفر معلومات عن وضع الطائرة المسيَّرة ( الانحدار، والالتفاف، والانعراج) ، وهو أمر بالغ الأهمية لتحقيق الاستقرار والتحكم. نظام تحديد المواقع العالمي (Global Positioning System - GPS) هو نظام ملاحة يعتمد على القمر الصناعي ويُوفر للطائرة المُسيَّرة معلومات دقيقة عن المواقع، ويمكن نظام تحديد المواقع العالمي الطائرة المسيَّرة من معرفة موقعها الحالي وارتفاعها وسرعتها بالنسبة إلى الأرض، وهذه المعلومات مهمة؛ للتنقل والتحكم في الطائرة المُسيَّرة. المستشعرات (Sensors) هي أجهزة تكشف الكميات الفيزيائية أو الأحوال البيئية وتقيسها، وتحوّلها إلى إشارة كهربائية للمراقبة أو التحكم. المشغلات (Actuators) هي أجهزة تحول الإشارات الكهربائية إلى حركة ميكانيكية لأداء عمل معيّن أو مُهمة معينة. الجيروسكوب نظام تحديد المواقع العالمي .(Gyroscope) لله .(GPS) شكل 6.12 : طائرة مسيرة بمستشعرات وكاميرا بينما تقيس السرعة الخطية المسافة التي يقطعها الجسم خلال الثانية، فإن السرعة الزاوية تقيس سرعة دوران الجسم حول نقطة مركزية أو محور، حيث تقيس مقدار التغير في الزاوية المركزية لجسم خلال وحدة ،الزمن وعادةً ما تُقاس بالراديان في الثانية (radis) أو الدرجات في الثانية (s). 319 وزارة التعليم Ministry of Education 2024-1446
أجهزة الطائرة المسيرة
و الجيروسكوب ( Gyroscope) هو مستشعر يقيس السرعة الزاوية، أو معدل الدوران حول محور معيّن، ويُعدُّ الجيروسكوب مفيدًا بشكل خاص في اكتشاف التغيرات الصغيرة في اتجاه الطائرة المسيَّرة وتصحيحها ، وهو أمر مهم للحفاظ على الاستقرار والتحكم و أثناء الطيران. كاميرا الطائرة المسيرة (Drone's Camera) تُستخدم لالتقاط الصور أثناء الطيران، ويُمكن تثبيتها على الطائرة المسيرة، بحيث تتمكن من التقاط صور من جهات وزوايا مختلفة عن طريق ضبط زاوية انحدار الكاميرا Camera Pitch) باستخدام الدالة ( )setPosition. وفي هذا المشروع، ضُبط الموضع على 0.7 ، أي حوالي 45 درجة بالنظر إلى الأسفل. أجهزة المروحيات الأربعة (Four Propeller ) في الطائرة المسيَّرة هي مشغلات تتحكم في سرعة دوران المروحية الرباعية (Quadcopter) واتجاهها ، وهي طائرات مسيرة مُجهزة بأربعة دوارات (Rotors) ، اثنان منهما يدوران في اتجاه عقارب الساعة والاثنان الآخران يدوران عكس اتجاهها ، حيث يولد دوران هذه الدوارات قوة رفع (Lift) ويسمح للطائرة المسيرة بالإقلاع والمناورة في الهواء. وكما هو الحال مع باقي الأجهزة، تُسترد المحركات وتوضع في موضعها ، وتُستخدم الدالة ()setVelocity كذلك لضبط السرعة الأولية للأجهزة المروحية. التحرك نحو الهدف Moving to a Target المروحيات .(Propellers) شكل 6.13 طائرة مسيرة بأربع مروحيات للانتقال من موقع إلى آخر، تستخدم الطائرة المسيَّرة دالة ( )move_to_target التي تحتوي على منطق التحكم (Control Logic) ، حيث تأخذ قائمة الإحداثيات كمُعامِل ، في شكل أزواج [ ، ] ؛ لاستخدامها كنقاط طريق. و في البداية، تتحقق الدالة مما إذا تمت تهيئة (Initialized) الموضع المستهدف (Target Position) أم لا، وفي تلك الحالة تضبطه على نقطة الطريق الأولى، ثم تتحقق مما إذا كانت الطائرة المسيَّرة قد وصلت إلى الموضع المستهدف بالدقة المحدّدة في المتغيّر target_precision. وإذا كان الأمر كذلك، تنتقل الدالة إلى نقطة الطريق المستهدفة التالية. ويجب حساب الزاوية بين الموضع الحالي للطائرة المُسيَّرة وموضعها المستهدف؛ لمعرفة مدى قوة الدوران التي يجب أن تكون عليه في الخطوة التالية، حيث تمت معايرة هذه القيمة وضبطها على النطاق [-] وبعد ذلك، تقوم الدالة بحساب اضطرابات الانعراج والانحدار المطلوبة لتوجيه الطائرة المسيرة نحو نقطة الطريق المستهدفة وضبط زاوية انحدار الطائرة المُسيَّرة على التوالى. حسابات المحركات Motor Calculations أخيرا، يجب حساب السرعة التي تضبط بها المحركات (Motors) ، وذلك بقراءة القيم المبدئية للمستشعرات، أي قراءة قيم الالتفاف والانحدار ، والانعراج من وحدة القياس بالقصور الذاتي، ويتم الحصول على قيم مواضع X و Y وح من نظام تحديد المواقع العالمي، بينما يتم الحصول على قيم تسارع الالتفاف والانحدار من الجيروسكوب. ويتم استخدام الثوابت (Constants المختلفة التي تم تعريفها في المقطع البرمجي مسبقًا لإجراء الحسابات والتعديلات بالتزامن مع مدخلات المستشعرات، وفي النهاية يتم ضبط الدفع (Thrust) الصحيح. معلومة يمكن للمروحية أن تتحرك في أي اتجاه وأن تُحافظ على طيرانها مُستقرًا من خلال التحكم في سرعة المروحيات الأربع واتجاهها، فعلى سبيل المثال عند زيادة سرعة الدوارين الموجودين على جانب واحد وتقليل سرعة الدوّارين الآخرين، فإن الطائرة المسيَّرة باستطاعتها الميلان والتحرك في اتجاه معين. وزارة التعليم Ministry of Education 2024-1446 320
الجيروسكوب هو مستشعر يقيس السرعة الزاوية، أو معدل الدوان حول محور معين
التحرك نحو الهدف
حسابات المحركات
معلومة: يمكن للمروحية أن تتحرك في أي اتجاه وأن تحافظ على طيرانها مستقرا من خلال التحكم
321 وزارة التعليم Ministry of Education 2024-1446 from controller import Robot import numpy as np # used for mathematic operations import os # used for folder creation import cv2 # used for image manipulation and human detection from PIL import Image # used for image object creation from datetime import datetime # used for date and time # auxiliary function used for calculations def clamp (value, value_min, value_max): return min(max(value, value_min), value_max) class Mavic (Robot): # constants of the drone used for flight #thrust for the drone to lift K_VERTICAL_THRUST = 68.5 # vertical offset the drone uses as targets for stabilization K_VERTICAL_OFFSET = 0.6 K_VERTICAL_P = 3.0 K_ROLL_P = 50.0 K_PITCH_P = 30.0 MAX_YAW_DISTURBANCE = 0.4 MAX PITCH_DISTURBANCE = -1 # P constant of the vertical PID # P constant of the roll PID # P constant of the pitch PID # precision between the target position and the drone position in meters target_precision = 0.5 def __init__(self): تحتوي مكتبة برنامج المتحكّم على فئة Robot (روبوت) التي ستستخدم لله طرائقها للتحكم في الطائرة المسيرة. Я استيراد المكتبات المطلوبة للحسابات والمعالجة. تُستخدم الثوابت (Constants) الموجودة بشكل تجريبي لحساب الطيران والاستقرار. # initializes the drone and sets the time interval between updates of the simulation Robot. __init__(self) self.time_step = int(self.getBasic TimeStep()) # gets and enables devices self.camera = self.getDevice("camera") self.camera.enable(self.time_step) self.imu = self.getDevice("inertial unit") self.imu.enable(self.time_step) self.gps = self.getDevice("gps") self.gps.enable(self.time_step) self.gyro = self.getDevice("gyro") self.gyro.enable(self.time_step) self.camera_pitch_motor = self.getDevice("camera pitch") self.camera_pitch_motor.setPosition(0.7) self.front_left_motor = self.getDevice("front left propeller") self.front_right_motor = self.getDevice("front right propeller") self.rear left_motor = self.getDevice("rear left propeller") self.rear_right_motor = self.getDevice("rear right propeller") motors = [self.front_left_motor, self.front_right_motor, self.rear_left_motor, self.rear_right_motor] for motor in motors: # mass initialization of the four motors motor.setPosition(float('inf')) motor.setVelocity(1)
تحتوي مكتبة برنامج المتحكم على فئة robot الذي سيستخدم طرائقها للتحكم في الطائرة المسيرة
وزارة التعليم Ministry of Education 2024-1446 self.current_pose = 6 * [0] #X, Y, Z, yaw, pitch, roll self.target_position = [0, 0, 0] self.target_index = 0 self.target_altitude = 0 def move_to_target(self, waypoints): # Moves the drone to the given coordinates # Parameters: waypoints (list): list of X,Y coordinates # Returns: # # (X. Y. Z) تهيئة موضع المُسيَّرة ( ، ، ) ودورانه ( الالتفاف، الانحدار (الانعراج). yaw_disturbance (float): yaw disturbance (negative value to go on the right) pitch_disturbance (float): pitch disturbance (negative value to go forward) if self.target_position [0:2] == [0, 0] #initialization self.target_position [0:2] = waypoints[0] # if the drone is at the position with a precision of target_precision if all([abs(x1 - x2) < self.target_precision for (x1, x2) in zip(self.target_position, self.current_pose[0:2])]): self.target_index += 1 if self.target_index > len(waypoints) - 1: self.target_index = 0 self.target_position [0:2] = waypoints [self.target_index] # computes the angle between the current position of the drone and its target position # and normalizes the resulting angle to be within the range of [-pi, pi] self.target_position[2] = np.arctan2( self.target_position [1] - self.current_pose[1], self.target_position[0] - self.current_pose[0]) angle_left = self.target_position [2] - self.current_pose [5] angle_left = (angle_left + 2 * np.pi) % (2 * np.pi) if (angle_left > np.pi): angle_left = 2 * np.pi # turns the drone to the left or to the right according to the value # and the sign of angle_left and adjusts pitch_disturbance yaw_ _disturbance = self.MAX_YAW_DISTURBANCE * angle_left / (2 * np.pi) pitch_disturbance = clamp ( np. log10(abs(angle_left)), self.MAX_PITCH_DISTURBANCE, 0.1) return yaw_disturbance, pitch_disturbance def run(self): # time intevals used for adjustments in order to reach the target altitude t1 = self.getTime() roll_disturbance = 0 pitch_disturbance = 0 yaw_disturbance = 0 322
تهيئة موضع المسيرة (x,y,z) ودورانه
323 وزارة التعليم Ministry of Education 2024-1446 # specifies the patrol coordinates waypoints = [[-30, 20], [-60, 30], [-75, 0], [-40, -10]] # target altitude of the drone in meters self.target_altitude = 8 while self.step(self.time_step) != -1: #reads sensors waypoints (نقاط الطريق) الخاصة بالمسار الذي ستطير فيه الطائرة المُسيَّرة. roll, pitch, yaw = self.imu.getRoll PitchYaw() x_pos, y_pos, altitude = self.gps.getValues() roll_acceleration, pitch_acceleration, _ = self.gyro.getValues() self.current_pose = [x_pos, y_pos, altitude, roll, pitch, yaw] if altitude> self.target_altitude - 1: # as soon as it reaches the target altitude, # computes the disturbances to go to the given waypoints if self.getTime() - t1 > 0.1: yaw_disturbance, pitch_disturbance waypoints) t1 = self.getTime() # calculates the desired input values for roll, pitch, yaw, = self.move_to_target( # and altitude using various constants and disturbance values roll input = self.K_ROLL_P clamp(roll, -1, 1) + roll_acceleration + roll_disturbance pitch_input = self.K_PITCH_P * clamp(pitch, -1, 1) pitch acceleration + pitch_disturbance = yaw_input yaw_disturbance + - clamped_difference_altitude = clamp(self.target_altitude altitude self.K_VERTICAL_OFFSET, -1, 1) + vertical_input = self.K_VERTICAL_P * pow(clamped_difference_altitude, 3.0) #calculates the motors' input values based on the #desired roll, pitch, yaw, and altitude values + - front_left_motor_input = self.K_VERTICAL_THRUST + vertical_input - yaw_input pitch_input roll input front_right_motor_input = self.K_VERTICAL_THRUST + vertical_input + yaw_input pitch_input + roll_input self.K_VERTICAL_THRUST + vertical_input rear_left_motor_input rear_right_motor_input = + + yaw_input - pitch_input - roll_input self.K_VERTICAL_THRUST + vertical_input = - yaw_input pitch_input + roll_input - #sets the velocity of each motor based on the motors' input values calculated above self.front_left_motor.setVelocity(front_left_motor_input) self.front_right_motor.setVelocity (-front_right_motor_input) self.rear left_motor.setVelocity (-rear_left_motor_input) self.rear_right_motor.setVelocity (rear_right_motor_input) = robot Mavic() robot.run()
waypoints (نقاط الطريق) الخاصة بالمسار الذي ستطير فيه الطائرة
حان الوقت الآن لإدراج النص البرمجي في الطائرة المسيرة وتشغيل المحاكاة. لإدراج برنامج المتحكم وتشغيل المحاكاة : 1 ثم اضغط من Scene tree ) شجرة المشهد ) ، اضغط على 2 Mavic Pro "Mavic ، على "controller "mavic2pro_patrol. 2 < من Field editor (محرِّر الحقل) ، اضغط على ... Select (اختيار). © 4 > حدد drone_controller مُتحكِّم الطائرة المُسيَّرة) ، ثم اضغط على OK (موافق). 5 عند إجراء تغييرات على النصوص البرمجية، لا تنس أن تضغط على Ctrl + S. > من Toolbar (شريط الأدوات ، اضغط على Run the simulation in real-time (شغل المحاكاة بشكل فوري) . 5 File Edit View Simulation Build Overlays Tools Help DJI Mavic 2 PRO demo IMPORTABLE EXTERNPROTO WorldInfo > Viewpoint Textured Background 0:00:00:000 0.00x 冬 6 > Textured BackgroundLight > Floor "floor" > > > Road "road" Pedestrian "pedestrian(2)" Pedestrian "pedestrian(1)" Pedestrian "pedestrian" Controller choice X Please select a controller from the list (it will start at the next time step) <none> <extern> > Windmill "windmill" Windmill "windmill(1)" > Windmill "windmill(2)" SmallManor "small manor" <generic> braitenberg 4 OK Cancel SquareManhole "manhole" CardboardBox "cardboard box" Tesla Model3Simple "vehicle" Forest Mavic2Pro "Mavic 2 PRO" 1 translation 0.00531 -1.9e-07 0.0857 rotation 0.0349 7.3e-07 0.999 -3.14 name "Mavic 2 PRO" controller "mavic2pro_patrol" controllerArgs window "<generic>" customData supervisor FALSE synchronization TRUE battery bodySlot > ☐ cameraSlot 111 Selection: controller (String) E 2 drone_controller mavic2pro mavic2pro_patrol sumo_supervisor 5 mavic2pro_patrol 3 وزارة التعليم Ministry of Education 2024-1446 Select... Edit شكل 6.14 إدراج النص البرمجي لبرنامج المتحكّم وتشغيل المحاكاة 324
ادراج برنامج المتحكم وتشغيل المحاكاة
عندما تبدأ المحاكاة، ستعمل محركات الطائرة المسيَّرة وستُقلع ، ثم ستتبع الطريق المحدَّدة مسبقًا حول المنزل، وتمر عبر نقاط الطريق. تم وضع الشخوص البشرية بشكل مسبق في بيئة ويبوتس لتكون بمثابة الهدف الذي تسعى للكشف عنه. شكل 6.15: إقلاع الطائرة المسيرة 325 وزارة التعليم Ministry of Education 2024-1446
عندما تبدأ المحاكاة ستعمل محركات الطائرة المسيرة وستقلع ثم ستتبع الطريق المحدد مسبقا
326 تمرينات 1 حلل الدالة ( )move_to_target واشرح كيفية قيام الطائرة المُسيَّرة بحساب موضعها التالي في قائمة نقاط الطريق. كيف يمكن تحسين مسار الطائرة المسيرة لتقليل زمن الطيران بين نقاط الطريق؟ 2 قيم عيوب خوارزميّة التحكُّم الحالية في الطائرة المسيَّرة عند مواجهة عوامل خارجية مثل: الرياح أو العوائق أو عدم دقة نظام تحديد المواقع العالمي، ثم اقترح وناقش التحسينات التي يمكن القيام بها في خوارزمية التحكم لجعل الطائرة المسيَّرة أكثر صمودًا في وجه هذه التحديات. وزارة التعليم Ministry of Education 2024-1446
حلل الدالة move_to_target() واشرح كيفية قيام الطائرة المسيرة بحساب موضعها التالي في قائمة نقاط الطريق، كيف يمكن تحسين مسار الطائرة المسيرة لتقليل زمن الطيران بين نقاط الطريق
قيم عيوب خوارزمية التحكم الحالية في الطائرة المسيرة عند مواجهة عوامل خارجية مثل الرياح أو العوائق أو عدم دقة نظام تحديد المواقع العالمي
3 4 استكشف الآثار الأخلاقية للطائرات المُسيَّرة الهوائية في التطبيقات الواقعية مثل: المراقبة وتوصيل الطرود وعمليات البحث والإنقاذ، ثم اكتب عن المخاوف المحتملة الخاصة بالخصوصية، وقضايا السلامة، واحتمالات إساءة استخدام هذه التقنية. أضف خاصية تُسجِّل موضع الطائرة المسيَّرة وارتفاعها واتجاهها على فترات منتظمة أثناء الطيران، ثم اكتب كل الأنماط التي قد تجدها في بيانات السجل. 5 جرب استخدام قيم مختلفة لثوابت PID في برنامج المتحكّم (K_VERTICAL_P، K_ROLL_P، K_PITCH_P). ولاحظ كيفية تأثير هذا التغيرات على استقرار الطائرة المسيرة واستجابتها، ثم ناقش الموازنات بين الاستقرار والاستجابة. 327 وزارة التعليم Ministry of Education 2024-1446