background image

Σχεδιασμός και κατασκευή ενός υβριδικού αμυντικού αυτοματοποιημένου ρομποτικού συστήματος 

 

 

 

173 

Το client-server computing είναι πολύ σημαντικό, διότι επιτυγχάνει τα εξής: 

1.  Αποτελεσματική χρήση της υπολογιστικής ισχύος. 

2.  Μείωση του κόστους συντήρησης και αναβάθμισης. 

3.  Αύξηση  της  παραγωγικότητας,  προσφέροντας  στους  χρήστες  ξεκάθαρη  πρόσβαση 

στις αναγκαίες πληροφορίες μέσω σταθερών και εύκολων στην χρήση διασυνδέσεων. 

4.  Αύξηση  της  ευελιξίας  και  της  δυνατότητας  δημιουργίας  συστημάτων  που 

υποστηρίζουν πολλά περιβάλλοντα. 

 

Η ιστοσελίδα του συστήματος επικοινωνεί με την εφαρμογή μέσα από ένα tcp/ip socket. 

Επιλέχθηκε  ο  συγκεκριμένος  τύπος  επικοινωνίας  για  λόγους  αξιοπιστίας.  Η  επικοινωνία 

μεταξύ  της  ιστοσελίδας  και  της  εφαρμογής  γίνεται  με  τη  βοήθεια  αλφαριθμητικών.  Οι 

επιλογές του χρήστη αντιστοιχούν σε αριθμητικές μεταβλητές οι οποίες στέλνονται μέσα από 

το Socket με σκοπό την εκκίνηση ή την απενεργοποίηση της συσκευής. Παραδείγματος χάρη, 

όταν ο χρήστης πατήσει το κουμπί start αποστέλλεται η τιμή της μεταβλητής (πχ. η τιμή ‘a’) 

στον client, ο οποίος λαμβάνει την τιμή, εκτελεί κάποιες διαδικασίες ώστε να συνδεθεί με τον 

server, και έπειτα στέλνει την τιμή. Ο server λαμβάνει έναν αριθμό, ελέγχει για να δει σε ποια 

διαδικασία ανήκει ο αριθμός αυτός και στη συνέχεια εκτελεί την ανάλογη διεργασία.  Εκτός 

από  το  αλφαριθμητικό  που  αντιστοιχεί  στο  κάθε  κουμπί,  αποστέλλεται  και  το  χρονικό 

διάστημα  στο  οποίο  πρέπει  να  γίνει  η  ενεργοποίηση  /  απενεργοποίηση  της  συσκευής 

(ανάλογα με τις επιλογές του χρήστη), ο τύπος της κάμερας και η θύρα του Arduino.  

Στο σημείο αυτό πρέπει να σημειωθεί μια ακόμη διαφορά εντολών που διερευνήθηκε και 

εμπεριέχεται  στο  κομμάτι  της  επικοινωνίας.  Στην  πλευρά  του  server,  μετά  από  κατάλληλη 

εντολή  του  client  για  έναρξη  του  συστήματος,  εκτελείται  το  πρόγραμμα  ανίχνευσης- 

αναγνώρισης  με  τη  χρήση  της  εντολής  posix_spawn().  Η  εντολή  αυτή  χρησιμοποιήθηκε 

έναντι της εντολής fork() για αρκετούς λόγους.  

Στόχος  και  των  δύο  συναρτήσεων  είναι  να  δημιουργήσουν  μια  θυγατρική  διεργασία  η 

οποία θα τρέχει παράλληλα με την κύρια (διεργασία γονέας), όπου οι δύο αυτές διεργασίες θα 

είναι  αλληλένδετες.  Η  συνάρτηση  fork()  δημιουργεί  μια  διεργασία  (διεργασία  απόγονος

πανομοιότυπη με τη διεργασία γονέα η οποία τρέχει παράλληλα με την αρχική. Στη διεργασία 

γονέα  μπορεί  να  προστεθεί  και  η  εκτέλεση  άλλων  προγραμμάτων  (με  τη  βοήθεια  της 

συνάρτησης  execve()). Στην περίπτωση της παρούσας εργασίας η χρήση της  fork() για την 

παράλληλη  δημιουργία  του  προγράμματος  και  η  μετέπειτα  κλήση  του  προγράμματος