Browse Source

Finalizing servo support

Added new README too
master
Georgios Gerontakis 5 years ago
parent
commit
5693fa162f
  1. 48
      README.md
  2. 3
      camera module/README.md
  3. BIN
      camera module/__pycache__/servo.cpython-37.pyc
  4. 10
      camera module/main.py
  5. 3
      tracking and telemetry/README.md

48
README.md

@ -1,3 +1,51 @@
# Talos_Drones_Tracking_and_Telemetry # Talos_Drones_Tracking_and_Telemetry
![enter image description here](https://scontent.fath7-1.fna.fbcdn.net/v/t1.0-9/74674993_115153423241475_4772277731842850816_n.jpg?_nc_cat=103&_nc_ohc=fl0TAVjHIzoAQn0zfYrt0L-uHNcVjRjos4qpfN2RWaFryHpJ41NLYKVnA&_nc_ht=scontent.fath7-1.fna&oh=0b9912eb666fd830d18fce5fb9205b5b&oe=5ED97648) ![enter image description here](https://scontent.fath7-1.fna.fbcdn.net/v/t1.0-9/74674993_115153423241475_4772277731842850816_n.jpg?_nc_cat=103&_nc_ohc=fl0TAVjHIzoAQn0zfYrt0L-uHNcVjRjos4qpfN2RWaFryHpJ41NLYKVnA&_nc_ht=scontent.fath7-1.fna&oh=0b9912eb666fd830d18fce5fb9205b5b&oe=5ED97648)
# Περιγραφή του Project
Στο συγκεκριμένο project υλοποιούμε ένα σύστημα οπτικής καταγραφής πτήσεων και τηλεμετρίας για μη επανδρωμένα αεροσκάφη.
**Το Project αυτό δημιουργήθηκε σε συνεννόηση με την ομάδα Έρευνας μη Επανδρωμένων συστημάτων ΤΑΛΟΣ του Πανεπιστημίου Δυτικής Αττικής και προορίζεται για χρήση σε πειραματικές πτήσεις drones**
# Camera Module
- Για την οπτική καταγραφή χρησιμοποιείται μια κάμερα η οποία είναι τοποθετημένη πάνω σε ένα tilt και εχει τη δυνατοτητα περιστροφής 180 μοιρών αριστερά-δεξιά ( ο ένας servo) και πάνω - κάτω
( ο δεύτερος servo).
- Η κάμερα με το servo tilt συνδέεται με ένα raspberry pi (3 Model B+) και στο raspberry pi αυτό τρέχει ένας "δαίμονας" ο οποίος είναι υπεύθυνος για τη λήψη στιγμιότυπων από τη κάμερα πάνω στο tilt και μετά από επεξεργασία του στιγμιότυπου αυτού (με OpenCV) είναι σε θέση να βγάλει συμπεράσματα σχετικά με τη τοποθεσία του μη επανδρωμένου αεροσκάφους ως προς τη κάμερα. Στη συνέχεια ελέγχει τους 2 servo έτσι ώστε να ακολουθεί το drone. Τέλος, κάνει streaming της τελικής εικόνας στο Client του project ο οποίος έχει συνδεθεί. (**Για τη συνεχεία της εργασίας θα αναφερόμαστε σε όλο αυτό το σύστημα με τη κάμερα το servo tilt και την υπηρεσία επεξεργασίας και streaming ως "Camera Module"**)
//insert camera module picture here//
# Συνδεσμολογία Camera Module
//insert scheme for camera module//
# Εφαρμογή Χρήστη
Για την απεικόνιση των πληροφοριών από τη τηλεμετρία και τη προβολή των πλάνων από το Camera Module δημιουργήθηκε εφαρμογή σε C# η οποία κάνει χρήση του πρωτοκόλλου MAVLink για τη παροχή τη τηλεμετρία.
![enter image description here](https://lh3.googleusercontent.com/dC7GTFsNXT2gfqM8LNYjaqa8xut5k_XW5dd_rV6O5pTswJ4g56YVd2uWuM3fG5Yj_hu1oY6emXYxFTZGZVR1DnwTkVSfCh04bsWreLSm-RG-VIuE6TIJa2nHh0UDqml0tDA34vc0Lt0U5pgIGXgbv2lC-NT9TLTxPMnRJkv-wpVPF7wwTQwSiADNi3zZyQrd0Pqg8oWvKo81wvzu1AxqsRgVKCsTNUnCGMWAcNqzaBI-eE9hDQeHcfW_r1lvKVccvmuQM49jQPPGIpSkSrMpcrkjgtNKJElTdzw-6NLZItGhzwiQjvpb57h8axHlvPsxQwoRCHtVNSTKMwoVF8rQd8oJRq1Dp0p_0k68saiJ6CulH2pW2YVV1HsE28EPknjXBMdWcNzoyOxeShqyNclxg-KVTHLK6UcklvYueqtHfMUE0J9S5cASL_sgG-xki0wBcnpYraSU83pQPs14dPQP6_cPYLtF2tXPLoBc8j6528lpww7CjGErPCE7KCRb9Gix3yczcQ-uBlQXseFHZGbSx4DtzPUT5x_s0vUrc825GRpGfQA8nHFHz1HV0JbqPQRHU2Rx2OjUF7LG6U8oKLLDUKfpgcMewK6Txl7BPEnm-qzHnbulATJgvFEjENI19OzgtmdUM4lsbDyFb1dM1wETinGJmsSO2aixZw4vGMLHQApASaXG3f4eLjo=w1037-h572-no)
Ο χρήστης της εφαρμογής μπορεί να έχει πρόσβαση στο Camera Module επιλέγοντας πατώντας το κουμπί "Add Camera Module" και εισάγοντας την διεύθυνση του.
![enter image description here](https://lh3.googleusercontent.com/ThGPIkvbm_SatkXSuAok1cr-9SXLPz5xF9wXCVF5oiCcrn2sKH6FSQ1tqxk2Ca8CF1-sV5vUjH68wXE8O240FRze4M6e7xm2eDtjJNIGnLdlf37rrRIKITILIv8XpHvaig2OwvmGUi00mwJ_7RY0Nt1NU2GWyG7PtBUFTD7eW6dOnvB7p2ByB-9OvZeV0gDWf9m9c3siRl1jalYWZ04ZpOaP9qS4QPh57WZNDkGDpbve9SRaoiFniNdsKImfczWqrtQNNfkVViIWiLzo94vMlZy6v8cvQX-kf1HE2dbvySIVcHdmCMTcb2nF-FkMZcI8JnEiq9PmUvb0RAMhoPK3hOps1Ji36syrPw7sra2E_9bB6yUElPRnOrBQSusac1Dmh2_jtFw5BdXG-P26hUZT489u8-VRK_j4qncBCm3SEKKwbCVYS1INJfVxDhNVBu1XHNRJnL1IEvWHKhE-AIQFLw0jXgOsrkBeaPt-HeoKkytOa231r38AweOb6W5l80cnhkkYGJh5qf1TKH7HEuz8jMua3QskkOLDVrYDa-SmeYDiRggue54dZeVbHqvNkjBgyRSDPJn2-koabzDSSj0JbsFzkbtFJ1gcR0MHji911Jq8G3Mxb8F986REQ0mjUJjYLiQGB3IktFibPR3c1YwN-3i_ihnAsLxqKpRsf5rH2EmFfyO4gSDaZQk=w852-h164-no)
Μέσω της εφαρμογής έχουμε τη δυνατοτητα:
- Εμφάνισης των μηνυμάτων τηλεμετρίας που στέλνονται από το drone στο δέκτη.
- Προσθήκης του Camera Module ετσι ώστε ο χρήστης να έχει και οπτική επαφή με το drone.
- Εμφάνισης πληροφοριών του drone σχετικά με το τύπο του, τον αυτόματο πιλότο, το base mode και τη κατάσταση στην οποία βρίσκεται.
- **Εντοπισμός σε πραγματικού χρόνο του drone και καταγραφή της πορείας του σε χάρτη.**
- Προβολής μπαταρίας που απομένει και ηχητική ειδοποίηση του χρήστη όταν αυτή φτάσει στη μέση και όταν τελειώνει με εντονότερη ηχητική ειδοποίηση.
**Τα παραπανω έχουν δημιουργηθεί αποκλειστικά και μόνο για τους σκοπούς της παρουσίασης ενώ το Project θα συνεχίσει να αναπτύσσεται στο μέλλον μεχρι τη μόνιμη ενσωμάτωση του στα project της ομάδας ΤΑΛΟΣ**
# Τηλεμετρία
Για τη τηλεμετρία χρησιμοποιούμε ένα module ραδιο-τηλεμετρίας στα 433Mhz αφού πρώτα έχουμε εγκαταστήσει τους κατάλληλους drivers.
![enter image description here](https://drones.altigator.com/images/ardupilot/modem-4333-mhz-100mw-mavlink-telemetry-compatibility-pixhawk.jpg)
Ωστόσο δεν έχει σημασία με ποιο τρόπο γίνεται η ζεύξη του χρήστη με το drone για την επικοινωνία, καθώς κοινός παρονομαστής για την επικοινωνία το πρωτόκολλο MAVLink.
# Χρήση του Project
1. Αφού η συνδεσμολογία του servo tilt με το development board είναι
σωστή, τρεχουμε στο development board
> sudo ./setup.sh
ώστε να εγκατασταθούν τα απαραιτητα για την εκκίνηση του δαίμονα.

3
camera module/README.md

@ -1,3 +0,0 @@
# Talos_Drones_Tracking_and_Telemetry
![enter image description here](https://scontent.fath7-1.fna.fbcdn.net/v/t1.0-9/74674993_115153423241475_4772277731842850816_n.jpg?_nc_cat=103&_nc_ohc=fl0TAVjHIzoAQn0zfYrt0L-uHNcVjRjos4qpfN2RWaFryHpJ41NLYKVnA&_nc_ht=scontent.fath7-1.fna&oh=0b9912eb666fd830d18fce5fb9205b5b&oe=5ED97648)

BIN
camera module/__pycache__/servo.cpython-37.pyc

Binary file not shown.

10
camera module/main.py

@ -5,8 +5,8 @@ import servo
# Constant variables definition. # Constant variables definition.
MAJOR_VERSION = cv2.getVersionMajor() MAJOR_VERSION = cv2.getVersionMajor()
SERVO_INITIAL_X_ANGLE = 0 # The initial horizontal angle of the camera. SERVO_INITIAL_X_ANGLE = 90 # The initial horizontal angle of the camera.
SERVO_INITIAL_Y_ANGLE = 0 # The initial vertical angle of the camera. SERVO_INITIAL_Y_ANGLE = 90 # The initial vertical angle of the camera.
SERVO_STEP_ANGLE = 5 # The angle at which the servo motors move each frame. SERVO_STEP_ANGLE = 5 # The angle at which the servo motors move each frame.
DESIRED_HEIGHT = 480 # The input image will be resized to this height, preserving its aspect ratio. DESIRED_HEIGHT = 480 # The input image will be resized to this height, preserving its aspect ratio.
BLUE_THRESHOLD = 150 # If the blue channel is bigger than this, it is considered background and removed. BLUE_THRESHOLD = 150 # If the blue channel is bigger than this, it is considered background and removed.
@ -113,6 +113,7 @@ def processImage(img):
# Draw the bounding rectangle and its centroid to the image. # Draw the bounding rectangle and its centroid to the image.
#cv2.circle(resized, (objCenterX, objCenterY), 5, YELLOW, LINE_THICKNESS) #cv2.circle(resized, (objCenterX, objCenterY), 5, YELLOW, LINE_THICKNESS)
cv2.rectangle(resized, (x,y), (x+w,y+h), RED, LINE_THICKNESS) cv2.rectangle(resized, (x,y), (x+w,y+h), RED, LINE_THICKNESS)
cv2.line(resized, (objCenterX, objCenterY), (imgCenterX, imgCenterY), YELLOW, LINE_THICKNESS)
# Determinate the direction of the object relative to the center of the camera. # Determinate the direction of the object relative to the center of the camera.
xDir, yDir = determinateDir(imgCenterX, imgCenterY, objCenterX, objCenterY) xDir, yDir = determinateDir(imgCenterX, imgCenterY, objCenterX, objCenterY)
@ -153,7 +154,10 @@ footage_socket.connect('tcp://' + client_ip.decode() + ':5555')
servoX = SERVO_INITIAL_X_ANGLE servoX = SERVO_INITIAL_X_ANGLE
servoY = SERVO_INITIAL_Y_ANGLE servoY = SERVO_INITIAL_Y_ANGLE
cap = cv2.VideoCapture('C:/Users/steyi/Desktop/drone_test.mp4') servo.SetAngleUp(servoY)
servo.SetAngleDown(servoX)
cap = cv2.VideoCapture('C:/Users/Giorgos Ger/Desktop/drone_test.mp4')
if (cap.isOpened() == False): if (cap.isOpened() == False):
print('Error opening stream.') print('Error opening stream.')
quit() quit()

3
tracking and telemetry/README.md

@ -1,3 +0,0 @@
# Talos_Drones_Tracking_and_Telemetry
![enter image description here](https://scontent.fath7-1.fna.fbcdn.net/v/t1.0-9/74674993_115153423241475_4772277731842850816_n.jpg?_nc_cat=103&_nc_ohc=fl0TAVjHIzoAQn0zfYrt0L-uHNcVjRjos4qpfN2RWaFryHpJ41NLYKVnA&_nc_ht=scontent.fath7-1.fna&oh=0b9912eb666fd830d18fce5fb9205b5b&oe=5ED97648)
Loading…
Cancel
Save