קורס יסודות בינה מלאכותית RB29-15 –בינה מלאכותית API הסוד הגדול
לפני שנתחיל 2 תרגילים כיפים של בינה מלאכותית
חלק א : API – רישום , יצירת קוד עם בינה מלאכותית
תרגיל כיתה 1 : API – רישום , יצירת קוד עם בינה מלאכותית
- צור חשבון באתר NASA
1.2 קישור לאתר NASA https://api.nasa.gov/
1.3 צור API תקבל אותו באמייל
1.4 בעזרת בינה מלאכותית ניתן לפתח קוד בפייטון אשר מכיל את ה KEY שקיבלת
2. בקש מהבינה מלאכותי לפתח קוד שיראה לך תמונות של החלל מבוססות האתר של NASA API
3.בקש מבינה מלאוכתית להציג תמונה מהחלל בעזרת קוד API
העשרה: API לאתר למסחר במניות (אחריות המשתמש בלבד)
4 https://alpaca.markets/
תרגיל 2 : API chatgpt
2.1 צור בעזרת בינה מלאכותית קישור ל CHATGP דרך אתר OPEN AI העזר במרצה
2.2 בנה קוד בבינה מלאכותית , אשר שולח בקשה ל chatGPT דרך API
חלק ב : רחפנים ובינה מאלכותית
שימוש רחפן בחקלאות ובינה מלאכותית
מעקב אחר בני אדם
חלקי מערכת הקרקע:
-
שלט רחוק (Transmitter): השלט שממנו מפעילים את הרחפן.
-
משקפי FPV (לא חובה): לצפייה בשידור החי מהרחפן.
-
אנטנות שידור/קליטה: משדרות ומקבלות אותות וידאו ופקודות בקרה.
-
מסגרת (Frame): שלדת הרחפן שמחזיקה את כל הרכיבים.
-
מנועים (Motors): מניעים את הרחפן, לרוב 4–8 מנועים.
-
פרופלורים (Propellers): מחוברים למנועים ומייצרים את הדחף.
-
בקר טיסה (Flight Controller – קרקר): המוח של הרחפן, מנהל ייצוב ובקרה. דוגמאות: Kakute, Matek, Omnibus.
-
ESC (Electronic Speed Controllers): שולטים במהירות המנועים לפי פקודות הבקר.
-
סוללה (LiPo Battery): מספקת חשמל לכל המערכת.
-
מקלט רדיו (Receiver): מקבל את הפקודות מהשלט.
-
GPS (לא חובה): לניווט ומיקום מדויק.
-
חיישנים (IMU): ג'יירו, אקסלרומטר וברומטר.
-
מצלמה (Camera): אופציונלית, לצילום וידאו ו-FPV.
-
VTX (Video Transmitter): משדר את הווידאו מהמחשב או המצלמה למשקפיים/מסך.
-
אנטנות: לשידור וקליטת אותות וידאו/רדיו.
שלושת מערכות ההפעלה המובילות לרחפנים:
מערכת הפעלה | יתרונות עיקריים | תמיכה במיקרו-בקר חיצוני ובינה מלאכותית? |
---|---|---|
Betaflight | – מיקוד ב-FPV מהיר ותגובות חדות. – אידאלי למרוצי רחפנים (Racing). – הכי קל להגדרה עם ממשק GUI ידידותי. |
מוגבל. לא מיועדת לשילוב ישיר של מיקרו-בקר חיצוני/AI, אך ניתן להוסיף מערכות חיצוניות (למשל עיבוד תמונה ב-RPi) במקביל. |
INAV | – תומכת בניווט GPS, Waypoints, RTH. – מעולה לרחפנים לטיולים, משימות אוטונומיות, ואפילו למטוסים. – שילוב חזק עם חיישני GPS, ברומטר, מצפן. |
תומכת באופן חלקי (I2C, UART) למיקרו-בקר חיצוני, וניתן להוסיף מודולים חיצוניים ל-AI (למשל ESP32, Raspberry Pi). |
ArduPilot (ArduCopter) | – הפתרון הכי מקצועי ורב-שימושי. – תומך בכלי טיס, רכבים יבשתיים, סירות ועוד. – יכולות מתקדמות כמו טיסה אוטונומית, מערכות SLAM, ויכולת התאמה גבוהה. |
כן! תומכת באופן מלא במיקרו-בקרים חיצוניים, עיבוד AI (למשל Jetson Nano, Raspberry Pi), ומשלבת פרוטוקולים כמו MAVLink. הכי מתקדמת לשילוב AI. |
בינה מלאכותית עם שילוב רחפן
שלב ראשון כתיבת קוד לרחפן אטונומי במערכת INAV
כדי לשלוט ברחפן עם בקר טיסה מבוסס INAV באמצעות ארדואינו, תוכל להשתמש בפרוטוקול MAVLink לשליחת פקודות כמו המראה, טיסה לנקודת GPS מסוימת ונחיתה.
דרישות:
-
בקר טיסה תואם ל-INAV (למשל, Holybro Kakute H743-Wing)
-
מודול GPS (כגון GP-1818MK)
-
ארדואינו (Uno, Mega, או ESP32)
-
ספריית MAVLink מותקנת ב-Arduino IDE
-
חיבור UART בין הארדואינו לבקר הטיסהArduPilot Discourse
🛠️ קוד לדוגמה:
הקוד הבא מדגים כיצד לחבר את הארדואינו לבקר הטיסה ולשלוח פקודות להמראה, טיסה לנקודת GPS ונחיתה.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
#include <mavlink.h> #include <SoftwareSerial.h> SoftwareSerial fcSerial(10, 11); // RX, TX void setup() { Serial.begin(57600); fcSerial.begin(57600); delay(2000); // שליחת פקודת המראה לגובה 15 מטר send_takeoff_command(15.0); delay(10000); // המתנה להמראה // שליחת פקודת טיסה לנקודת GPS send_goto_command(32.0853, 34.7818, 15.0); // קואורדינטות לדוגמה (תל אביב) delay(10000); // המתנה להגעה לנקודה // שליחת פקודת נחיתה send_land_command(); } void loop() { // לולאה ריקה } void send_takeoff_command(float altitude) { mavlink_message_t msg; uint8_t buf[MAVLINK_MAX_PACKET_LEN]; mavlink_msg_command_long_pack(255, 190, &msg, 1, 0, MAV_CMD_NAV_TAKEOFF, 0, 0, 0, 0, 0, 0, 0, altitude); uint16_t len = mavlink_msg_to_send_buffer(buf, &msg); fcSerial.write(buf, len); } void send_goto_command(float lat, float lon, float alt) { mavlink_message_t msg; uint8_t buf[MAVLINK_MAX_PACKET_LEN]; mavlink_msg_mission_item_int_pack(255, 190, &msg, 1, 0, 0, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT, MAV_CMD_NAV_WAYPOINT, 2, 1, 0, 0, 0, lat * 1e7, lon * 1e7, alt); uint16_t len = mavlink_msg_to_send_buffer(buf, &msg); fcSerial.write(buf, len); } void send_land_command() { mavlink_message_t msg; uint8_t buf[MAVLINK_MAX_PACKET_LEN]; mavlink_msg_command_long_pack(255, 190, &msg, 1, 0, MAV_CMD_NAV_LAND, 0, 0, 0, 0, 0, 0, 0, 0); uint16_t len = mavlink_msg_to_send_buffer(buf, &msg); fcSerial.write(buf, len); } |
אותו קוד בפייטון
1 |
pip install pymavlink |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
from pymavlink import mavutil import time # Connect to Pixhawk or INAV using MAVLink over Serial (update the port!) # For Linux: '/dev/ttyUSB0' # For Windows: 'COM3' or similar master = mavutil.mavlink_connection('COM3', baud=57600) # Wait for the heartbeat (initial signal from the drone) master.wait_heartbeat() print("✅ Connected to drone (System ID %u, Component ID %u)" % (master.target_system, master.target_component)) # Function to arm the drone (enables motors) def arm(): master.mav.command_long_send( master.target_system, # Drone System ID master.target_component, # Drone Component ID (flight controller) mavutil.mavlink.MAV_CMD_COMPONENT_ARM_DISARM, # Command: Arm/Disarm 0, # Confirmation (0 = no extra confirmation) 1, # 1 = Arm, 0 = Disarm 0, 0, 0, 0, 0, 0 # Other parameters (not used for arming) ) print("🚀 Arming...") # Function to take off to a specific altitude (in meters) def takeoff(altitude): master.mav.command_long_send( master.target_system, master.target_component, mavutil.mavlink.MAV_CMD_NAV_TAKEOFF, # Command: Takeoff 0, # Confirmation 0, 0, 0, 0, # Parameters (not required for basic takeoff) 0, 0, # Lat/Lon (0 = use current position) altitude # Target altitude in meters ) print(f"🛫 Takeoff to {altitude} meters...") # Function to fly to a specific GPS waypoint def fly_to_gps(lat, lon, alt): master.mav.mission_item_send( master.target_system, master.target_component, 0, # Sequence number of the mission (first waypoint = 0) mavutil.mavlink.MAV_FRAME_GLOBAL_RELATIVE_ALT, # Use global coordinates relative to ground mavutil.mavlink.MAV_CMD_NAV_WAYPOINT, # Command: Fly to waypoint 2, # Current (0 = inactive, 2 = active) 1, # Autocontinue to next waypoint (1 = yes) 0, 0, 0, 0, # Other parameters (not required for basic GPS waypoint) lat, lon, alt # Target latitude, longitude, and altitude ) print(f"🛰️ Flying to: lat={lat}, lon={lon}, alt={alt}") # Function to land the drone def land(): master.mav.command_long_send( master.target_system, master.target_component, mavutil.mavlink.MAV_CMD_NAV_LAND, # Command: Land 0, # Confirmation 0, 0, 0, 0, 0, 0, 0 # Parameters (not required for basic landing) ) print("🛬 Landing...") # ✨ Run the commands in sequence: arm() time.sleep(2) # Wait a bit before takeoff takeoff(15) # Takeoff to 15 meters time.sleep(10) # Wait for the takeoff to finish fly_to_gps(32.0853, 34.7818, 15) # Example: Fly to a GPS point in Tel Aviv time.sleep(10) # Allow time for the flight land() # Land the drone |
MAVLink Command Reference for Drones
MAVLink Command | Code | Description | Usage Example (Typical Params) |
---|---|---|---|
Arm/Disarm | MAV_CMD_COMPONENT_ARM_DISARM (400) |
Arm or disarm motors. | param1 : 1 = Arm, 0 = Disarm. Others: 0. |
Takeoff | MAV_CMD_NAV_TAKEOFF (22) |
Take off to a given altitude. | param7 : Altitude. Lat/Lon optional. |
Land | MAV_CMD_NAV_LAND (21) |
Land at the current or specified location. | All params usually 0 for basic landing. |
Return to Launch (RTL) | MAV_CMD_NAV_RETURN_TO_LAUNCH (20) |
Return to the takeoff point and land. | All params 0. |
Fly to Waypoint (GPS) | MAV_CMD_NAV_WAYPOINT (16) |
Fly to a specific GPS coordinate. | param5-7 : Latitude, Longitude, Altitude. |
Loiter (Circle) | MAV_CMD_NAV_LOITER_UNLIM (17) |
Circle at the current location indefinitely. | param3 : Radius. Others optional. |
Loiter Turns | MAV_CMD_NAV_LOITER_TURNS (18) |
Circle for a set number of turns. | param1 : Turns, param3 : Radius. |
Loiter Time | MAV_CMD_NAV_LOITER_TIME (19) |
Circle for a set amount of time (in seconds). | param1 : Time, param3 : Radius. |
Change Speed | MAV_CMD_DO_CHANGE_SPEED (178) |
Change airspeed or ground speed. | param1 : 0=airspeed, 1=groundspeed, param2 : speed (m/s). |
Set Mode | MAV_CMD_DO_SET_MODE (176) |
Change the flight mode. | param1 : Mode (e.g., 4=Guided). |
Pause Mission | MAV_CMD_MISSION_PAUSE (193) |
Pause current mission. | All params 0. |
Resume Mission | MAV_CMD_MISSION_START (300) |
Resume a paused mission. | param1 : Starting waypoint index. |
Start/Stop Video | MAV_CMD_VIDEO_START_CAPTURE (2500) / MAV_CMD_VIDEO_STOP_CAPTURE (2501) |
Start/stop video recording. | Params: Camera ID, Frequency, etc. |
Start/Stop Image Capture | MAV_CMD_IMAGE_START_CAPTURE (2000) / MAV_CMD_IMAGE_STOP_CAPTURE (2001) |
Start/stop still image capture. | Params: Camera ID, Interval, Count. |
Reboot/Shutdown FC | MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN (246) |
Reboot or shutdown the flight controller. | param1 : 1=reboot autopilot. |
שילוב YOLO בינה מלאכותית ורחפן
נפתח תוכנה מבוססת בינה מלאוכתית אשר מחברת בין מצלמה שמחוברת ל-Raspberry Pi לבין הרחפן שלך (שמבוסס על INAV/Pixhawk).
היא מבצעת את הפעולות הבאות:
✅ מצלמת ה-Raspberry Pi מצלמת בזמן אמת את מה שהרחפן רואה.
✅ אלגוריתם בינה מלאכותית (YOLOv8) מזהה עצמים בתמונה – כמו אנשים, מכוניות, חפצים וכו’.
✅ ברגע שהתוכנה מזהה מכשול (כל דבר שהוא לא "אדם" בדוגמה הזו), היא שולחת פקודה למחשב הטיסה של הרחפן:
1️⃣ לעצור את הרחפן (Disarm – ניתוק המנועים)
2️⃣ להמריא בחזרה לגובה 15 מטר – כדי לעבור מעל המכשול.
✅ התהליך קורה בזמן אמת: המצלמה מזהה, המידע מנותח, והרחפן מגיב מיד בהתאם.
איפה נכנסת הבינה המלאכותית?
הבינה המלאכותית פועלת בחלק של זיהוי העצמים בתמונה – בעזרת מודל YOLOv8:
-
המודל "מאומן" לזהות עצמים שונים בתמונות: למשל, בני אדם, מכוניות, אופניים, בעלי חיים, ועוד.
-
הוא מזהה כל עצם, מקיף אותו במסגרת, ומסווג אותו לפי סוג (Label) כמו "person", "car", "dog".
-
ברגע שהתוכנה מזהה עצם שהוא לא "אדם", היא מחליטה שזה מכשול ומגיבה בהתאם.
-
החלק הזה של הבינה המלאכותית מאפשר לרחפן לקבל החלטות בעצמו מבלי שתצטרך לשלוט עליו ידנית.
מתי משתמשים בזה?
✅ בפרויקטים של רחפנים אוטונומיים, כמו משלוחים, צילום או חקר שטח.
✅ במצבים שבהם הרחפן צריך להבין את הסביבה ולמנוע התנגשות בעצמו – לדוגמה, לעקוף מכשולים בגובה נמוך.
✅ באבטחה או חיפוש והצלה – הרחפן מזהה אנשים ומזהה מכשולים בשטח.
✅ במחקר ופיתוח – שילוב מצלמות, זיהוי תמונה, ורחפנים למערכות חכמות.
Raspberry Pi + YOLO + INAV (via MAVLink) Example
Setup Requirements
✅ Raspberry Pi (with camera module)
✅ INAV Flight Controller (Pixhawk, Kakute, etc.)
✅ MAVLink enabled on INAV (UART)
✅ Python libraries:
1 |
pip install pymavlink opencv-python ultralytics |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import cv2 from ultralytics import YOLO from pymavlink import mavutil import time # Load YOLOv8 model (pre-trained - can use custom models too) model = YOLO('yolov8n.pt') # You can use yolov8s.pt or a custom model # Connect to Pixhawk/INAV via serial (update port) master = mavutil.mavlink_connection('/dev/ttyUSB0', baud=57600) master.wait_heartbeat() print("✅ MAVLink connected to INAV.") # Start video capture (Raspberry Pi camera) cap = cv2.VideoCapture(0) # 0 = default camera # Obstacle detection threshold CONFIDENCE_THRESHOLD = 0.5 def climb_up(altitude): print(f"⚠️ Obstacle detected! Climbing to {altitude} meters...") master.mav.command_long_send( master.target_system, master.target_component, mavutil.mavlink.MAV_CMD_NAV_TAKEOFF, 0, 0, 0, 0, 0, 0, 0, altitude ) def stop_drone(): print("🛑 Stopping drone...") master.mav.command_long_send( master.target_system, master.target_component, mavutil.mavlink.MAV_CMD_COMPONENT_ARM_DISARM, 0, 0, 0, 0, 0, 0, 0, 0 ) while True: ret, frame = cap.read() if not ret: break # Run YOLO inference results = model.predict(source=frame, verbose=False, conf=CONFIDENCE_THRESHOLD) # Check for obstacles obstacle_detected = False for result in results: for box in result.boxes: class_id = int(box.cls) confidence = float(box.conf) label = model.names[class_id] print(f"Detected: {label} ({confidence:.2f})") # Treat everything except 'person' as obstacle (can adjust) if label != 'person': obstacle_detected = True # React to obstacles if obstacle_detected: stop_drone() time.sleep(1) climb_up(15) # Go up 15 meters time.sleep(5) # Give time to climb # Optional: Show camera output cv2.imshow('YOLO Detection', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() |
שימושים ב FPV רחפנים
רחפנים עם סיבים אופטים
מבנה חומרה של רחפן – הסבר בהרצאה מה תפקיד של כל רכיב
INAV
העשרה
חלק ג : חזרה על YOLO תרגיל כיתה
חלק א : אימון yolo colab
הסבר שלב אחרי שלב בהמשך הדף קישור לקוד אימון בינה מלאכותית
https://colab.research.google.com/gist/RoboWild/19deff31306d95d2e315a9e1d331f156/yolo-train.ipynb
1.1 קישור לתוכנה לסימון תוויות עבור YOLO מודל : https://www.makesense.ai/
תרגיל כיתה 2
YOLO מודל
- יש לעבוד לפי הסרטון שלב אחרי שלב .
- הסרטון הוא המשך של הרצאה RB23-09 RB23-08 שם מוספר שלב אחרי שלב של התקנת הסביבה פיתוח , תוספים
תרגיל כיתה 2
YOLO מודל
אימון רשתזיהוי טנק
2.1 נעבור על הקוד שלב אחרי שלב
סביבת קולאב COLAB :
– YOLO מודל yolo
שלב 1 : התקנת הסיפריות (עושים פעם אחת בלבד בסביבת הפיתוח)
בסוף התקנת הספריות אם אין שגיעות נקבל הודעת DONE כלומר סיים להתקין
שימו לב : סיבבת הפיתוח הקבצים תראה כך לפני ההתקנה
אנחנו עובדים על ספריית CONTENT
שלב 2 : יצירת קובץ yaml
לאחר ההתקנה נקבל
ואפשר לראות את תוכן הקובץ – קליל כפול עם העכבר על שם הקובץ
חילוץ הקובץ מ RAR :
לאחר החילוץ RAR ולחיצה על TANK
שלב 3 : התקנת קבצי התמונות והתוויות – (labels) בסביבת – אימון
נתקין את התונות על יהיה העתקה או יבואו או הורדה לסביבית הפיתוח שנאמן את הבינה המלאכותית – חייב להיות מאוד מדוייק – טעות הכי קטנה וזה לא יעבוד . . סביבת האימון יכולה להיות COLAB או ANACONDA או אחר ?
………………………………………………………………………………………………
נוריד מ GOOGLE DRIVE קובץ RAR שמכיל תמונות ו LABELS במבנה הנכון – חובה מבנה נכון
חילוץ קובץ RAR
https://colab.research.google.com/gist/RoboWild/19deff31306d95d2e315a9e1d331f156/yolo-train.ipynb
שלב 4 : אימון בינה מלאכותית מודל YOLO
יבוא ספריות , ויבוא המודל
נקבל את הספריות הבאות שימו לב על קובץ YOLOV8M.PT
אימון הבינה מלאכותית לפי קובץ YAML – זה המקום שהבינה מלאכותית לומדת
בסוף האימון של הבינה מלאכותית נקבל את הפלט הבא :
פעולת האימון של הבינה מלאכותית הסתיימה
מודל שלנו מאומן
שלב 5: בדיקה איך הבינה שלנו למדה ניתוח הליך הלימוד – נילמד בהמשך
שלב 6 : הרצה של קובץ של המודל שאומן
נחפש בתוך ספריית RUN את ה DETECT האחרון אם נרית כמה פעמים המספר יכול להשתנות של DETECT
נגדיר אובייקט PRE לפי המיקום של הקובץ BEST.PT
שימו לב : המיקום עשוי להשתנות בנתיב לפי שינוי בשם DETECT
ואז ניטען אותו – אפשר להעביר למחשבים אחרים או מיקרו מעבדים שונים
הרצה של הבינה מלאכותית – שורת קוד אחת בלבד ! כל השאר קוד פייתון
את התוצאה נקבל לתוך ספריה
קוד מתקדם יותר
https://colab.research.google.com/drive/1Iim5HYrT0wGJyEc6SHFkiZtkRmlLiv70#scrollTo=PQXWhPmU5NBk