ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ
ΔΠΜΣ Προηγμένα Συστήματα Υπολογιστών και Επικοινωνιών
Νοήμονα και Αυτόνομα Συστήματα
Διδάσκων : Τσαρδούλιας Εμμανουήλ
Open-source simulator for autonomous driving research
Μιγκιπή Αναστασία ΑΕΜ 487
Μιχαηλούδης Αθανάσιος ΑΕΜ 489
Θεσσαλονίκη, Ιούλιος 2021
Τα τελευταία χρόνια έχει υπάρξει ενεργή ανάπτυξη στον τομέα της αυτόνομης κίνησης τόσο
από ιδιωτικούς οργανισμούς όσο και από τον ακαδημαϊκό χώρο. Μία από τις συνήθεις
πρακτικές στον εν λόγω τομέα είναι η ανάπτυξη και επικύρωση πρωτοτύπων οδήγησης σε
simulators. Ερευνητές σε όλο τον κόσμο αναπτύσσουν αυτούς τους προσομοιωτές για την
υποστήριξη εκπαίδευσης και ανάπτυξης συστημάτων που δεν απαιτούν την ύπαρξη
ανθρώπινου παράγοντα.
Η CARLA (Car Learning to Act) είναι ένας προσομοιωτής ανοιχτού κώδικα, βασισμένος σε
Unreal Engine 4 για έρευνα σχετικά με την αυτόνομη κίνηση.
Έχει αναπτυχθεί εξαρχής για την υποστήριξη της ανάπτυξης, εκπαίδευσης και επικύρωσης
συστημάτων αυτόνομης κίνησης. Εκτός από το ότι είναι λογισμικό ανοιχτού κώδικα και
πρωτοκόλλων, η CARLA παρέχει ψηφιακά assets (αστικά layout, κτίρια, οχήματα) που
δημιουργήθηκαν ακριβώς για τον σκοπό αυτό, και μπορούν να χρησιμοποιηθούν
ελεύθερα. Η πλατφόρμα προσομοίωσης υποστηρίζει ευέλικτο ορισμό των αισθητήρων,
των περιβαλλοντικών συνθηκών και δυναμικών πρακτόρων, δημιουργίας χαρτών και
πολλών άλλων χαρακτηριστικών[1].
Ο προσομοιωτής Carla αποτελείται από μία επεκτάσιμη αρχιτεκτονική client-server. Ο
server είναι υπεύθυνος για όλες τις σχετικές λειτουργίες με την προσομοίωση αυτή
καθαυτή: λειτουργίες αισθητήρων, υπολογισμό των δυνάμεων της Φυσικής, αναβαθμίσεις
της κατάστασης του εικονικού κόσμου και των πρακτόρων μέσα σε αυτόν, και πολλά άλλα.
Είναι σκόπιμο, καθώς στοχεύει σε ρεαλιστικά αποτελέσματα, ο server να τρέχει σε
dedicated GPU, ειδικά όταν πρόκειται για μηχανική μάθηση. Η client πλευρά του
προσομοιωτή αποτελείται από ένα σύνολο client modules που ελέγχουν την λογική των
πρακτόρων στη σκηνή και θέτουν τις συνθήκες του εικονικού κόσμου. Αυτό επιτυγχάνεται
αξιοποιώντας το CARLA API (σε Python ή C++), ένα επίπεδο που μεσολαβεί ανάμεσα στον
server και στον client και το οποίο εξελίσσεται συνεχώς για να παράξει νέες λειτουργίες[2].
Εικ.1: Βασική δομή του προσομοιωτή Carla
Στα πλαίσια της παρούσας εργασίας χρησιμοποιήθηκε ο Carla simulator, με βάση τον οποίο
δημιουργήθηκαν αυτόνομες συμπεριφορές που εφαρμόζονται σε αυτοκινούμενα
αυτοκίνητα, με την γλώσσα Python σε σύστημα με AMD Ryzen 5 με 16 BG RAM και κάρτα
γραφικών NVIDIA GeForce GTX 1650 με αυτόνομη RAM 4GB σε Windows.
Σελίδα 2
Χρησιμοποιήθηκαν διάφορες εκδόσεις του simulator – η stable 0.8.2 (που μετράει αρκετά
έτη πια και τις λείπουν αρκετά χαρακτηριστικά), η 0.9.10, η 0.9.5 – στην οποία υλοποιήθηκε
και έτρεξε μέρος του κώδικα, και η 0.9.8 (στην οποία έτρεξαν τα περισσότερα ερωτήματα).
Αφού υπερκεράστηκαν διάφορα εμπόδια εγκατάστασης σε περιβάλλον windows – η Carla
εγκαθίσταται και λειτουργεί βέλτιστα σε περιβάλλον Linux - χρειάστηκε επίσης να
δημιουργηθεί virtual environment, με εγκατεστημένη την έκδοση 3.7 της Python – με το
ευφάνταστο όνομα Carla (conda create -n Carla python=3.7) , ώστε να μπορούμε να
δουλέψουμε, καθώς η Carla απαιτεί τη συγκεκριμένη έκδοση της Python ή πρότερη.
Τουτέστιν, πριν την εκτέλεση οποιουδήποτε ερωτήματος, είναι απαραίτητη η δημιουργία
και ενεργοποίηση virtual environment από το command prompt (activate Carla) εάν ο
χρήστης χρησιμοποιεί και μεταγενέστερη εκδοχή της Python.
Ως προς τα ερωτήματα της εργασίας
1.
Εγκατάσταση – Δημιουργία World – Launch agent (car)
2.
Κίνηση
3.
Sensors – sensor visualization
4.
A*
5.
Κίνηση με custom ταχύτητες
Εγκαταστάθηκε ο Carla Simulator, ανοίξαμε έναν κόσμο (world) και έγινε launch σε ένα
αυτοκίνητο. Τηλεκινήθηκε το αυτοκίνητο για 20 δευτερόλεπτα χωρίς να συγκρουστεί με
κάποιο εμπόδιο - από το manual_control.py. (manual control erotima 1 2021-04-29.mkv).
Εκτελέσαμε αυτόνομη, τυχαία κίνηση μέσω των συναρτήσεων του Carla με δύο τρόπους –
πρώτα από το manual_control.py με επιλογή P, με την οποία ενεργοποιείται η αυτόνομη
κίνηση (automatic control erotima 2 V1.mkv) και επίσης από το αρχείο
automatic_control.py (αρχείο automatic control erotima 2 V2.mkv).
Εγκαταστάθηκε μία κάμερα στο μπροστά μέρος του αμαξιού και ένα lidar στο πάνω μέρος
του. Οπτικοποιήθηκαν οι μετρήσεις (εικόνα από την κάμερα – αρχείο Visualization CAMERA
erotima 3a.mkv - και scan από το lidar – αρχείο Visualization LIDAR erotima 3b.mkv) – κατά
την εκτέλεση της οπτικοποίησης των μετρήσεων της κάμερας, έγινε spawn σε 200 agents
(αρχείο spawn_npc.py)
Επιχειρήθηκε επί μακρόν η υλοποίηση του αλγορίθμου Α*, δεν κατέστη δυνατό όμως να
χρησιμοποιηθεί ορθά. Περαιτέρω ενασχόληση χρειάζεται για να υλοποιηθεί με τα
απαιτούμενα constraints, κυρίως όσον αφορά την κίνηση σε κυκλικούς κόμβους.
Εκτελείται αυτόνομη κίνηση με το όχημα, στο οποίο δίνονται custom ταχύτητες, ώστε να
μεταβαίνει από την τρέχουσα θέση του σε έναν τυχαίο στόχο.
Οι ταχύτητες εξαρτώνται από το προφίλ οδήγησης που ορίζεται μέσω του
behavior_agent.py και διαχωρίζονται σε cautious, normal και aggressive, με τις custom
ταχύτητες στα 40, 50 και 70 Km/h αντίστοιχα. Επισυνάπτονται δύο αρχεία, κίνησης σε δύο
Σελίδα 3
χάρτες – σε αστικό περιβάλλον (αρχείο erotima 5 path 2021-07-22 14-43-59.mkv) αλλά και
σε αυτοκινητόδρομο (αρχείο erotima 5 custom speed.mkv), όπου διακρίνεται καλύτερα και
η ανάπτυξη ταχύτητας και η προσπέραση, κάτι που λόγω σεβασμού των ορίων ταχύτητας
και των περιορισμών ασφάλειας δεν ήταν εύκολο να καταγραφεί στο αστικό περιβάλλον.
6.
Lane detection με custom ταχύτητες
7.
Agent (car and pedestrian) spawn – Collision avoidance
Υλοποιήθηκε lane detection με μεθόδους machine vision. Το όχημα διαγιγνώσκει εάν
βρίσκεται στη μέση των λωρίδων, στην αντίθετη περίπτωση ρυθμίζει την κίνηση ώστε να
παραμένει στο κέντρο – αρχείο lane_detection.py. Custom ταχύτητες δίνονται στο όχημα
μέσω του behavior_agent.py. Επιλέξαμε να καταγράψουμε τρία αρχεία - στο erotima 6 lane
detection custom velocity 2 2021-07-21 13-29-02, φαίνεται από μεριάς server η κίνηση, και
στο αρχείο erotima 6 lane detection custom velocity 2021-07-21 13-29-03.mkv ο
ταυτόχρονος υπολογισμός των αποστάσεων από τις λωρίδες και ο επαναπροσδιορισμός
και διόρθωση της θέσης του οχήματος. Επιπρόσθετα, στο erotima 6 lane detection custom
velocity camera view 2021-07-21 12-44-37.mkv φαίνεται η άποψη της κάμερας του
οχήματος.
Έγινε spawn σε ακόμη δύο (2) οχήματα στον κόσμο τα οποία κινούνται τυχαία, αυτόνομα,
όπως και 5 πεζούς οι οποίοι επίσης κινούνται τυχαία. Χρησιμοποιείται ο αισθητήρας lidar
του αμαξιού μας ώστε να μην συγκρούεται με κάποιο αυτοκίνητο ή πεζό.
Τροποποιήθηκαν τα αρχεία manual_control.py και automatic_control.py ώστε να
προσμετρώνται και οι πεζοί. Μάλιστα, είναι δυνατή και η εμφάνιση της απόστασης του
οχήματός μας από τον καθένα – αλλά δε θεωρήθηκε σκόπιμο να εμφανίζεται η πληροφορία
της ατομικής απόστασης καθενός πεζού από το όχημα.
Πειραματιστήκαμε κάπως (carla_pedestrian_experiment.py) για τη δημιουργία πεζών που
δεν γίνονταν spawn στη μέση του δρόμου και έμεναν ακίνητοι προκαλώντας κυκλοφοριακό
κομφούζιο με την παρουσία τους εκεί, καθώς τα παρακείμενα αυτοκίνητα είχαν εξορισμού
προφίλ προσεκτικού οδηγού, και δεν εκτελούσαν προσπέραση πεζού – όπως είναι φυσικό
για οποιονδήποτε οδηγό. Ευτυχώς, το πρόβλημα λύθηκε σε εκδόσεις της Carla μετά την
0.9.5 (εξ ου και το ότι τα περισσότερα ερωτήματα έτρεξαν σε έκδοση 0.9.8).
Δημιουργήθηκε αρχείο spawn_walker.py που προσθέτει οποιονδήποτε αριθμό πεζών,
αλλά η χρήση του εγκαταλείφθηκε λόγω της παρακάτω βελτίωσης.
Τροποποιήθηκε το spawn_npc.py και επίσης προσθέτει (με χρήση της παραμέτρου -w)
οποιονδήποτε αριθμό πεζών. Με την παράμετρο -n προστίθεται οποιοσδήποτε αριθμός
οχημάτων. Για να γίνει spawn λοιπόν για παράδειγμα σε 2 αυτοκίνητα και 5 πεζούς, η
εντολή είναι python spawn_npc -n 2 -w 5.
Έχει γίνει πρόβλεψη σε περίπτωση που υπάρχει collision κατά τη διάρκεια spawn να γίνεται
spawn σε τόσους agents για όσους δεν υφίσταται collision. (αρχείο erotima 7_ walker
collision - spawn again 2021-07-04 22-36-37.mkv), ώστε να αποφεύγονται γεγονότα όπως
τα παρακάτω
Σελίδα 4
Εικ.2: Spawn collision με πεζό
όπου με το spawn, το όχημά μας έλιωσε έναν πεζό.
Επίσης, έγινε πρόβλεψη να αποφεύγονται collisions όπως το παρακάτω, που εμφανιζόταν
ως collision with road!
Εικ.3: Spawn collision με δρόμο
Σε περίπτωση που γίνει spawn τελικά σε λιγότερους agents από τους επιθυμητούς – λόγω
αποφυγής collision – μπορεί να ξαναγίνει φυσικά spawn για τον επιθυμητό αριθμό
οχημάτων ή πεζών.
Έχουν καταγραφεί δύο αρχεία, το erotima 7 spawn.mkv κατά το οποίο γίνεται απευθείας
spawn του επιθυμητού αριθμού agents χωρίς collision, και το erotima 7_ walker collision spawn again 2021-07-04 22-36-37.mkv, κατά το οποίο δίνεται μεν η εντολή κανονικά για
spawn 2 ακόμη οχημάτων και 5 πεζών, αλλά λόγω collision δημιουργούνται 2 μεν ακόμη
οχήματα, αλλά 4 πεζοί. Αντιπαρερχόμεθα το πρόβλημα, απλά κάνοντας ξανά spawn σε έναν
πεζό.
Σελίδα 5
8.
Προσπέραση
Εάν κάποιο αμάξι βρίσκεται στην ίδια λωρίδα με εμάς αυξάνουμε την ταχύτητα του
οχήματος και υλοποιούμε λειτουργία προσπέρασης – για συγκεκριμένο προφίλ οδήγησης
( aggressive) – python behavior_agent.py aggressive. Την πληροφορία σχετικά με τις θέσεις
των αμαξιών την παίρνουμε από το Carla API. (αρχείο erotima 8 overtaking 2021-07-04 2209-37.mkv) και το προφίλ οδήγησης καθορίζεται από το behavior_agent.py σε aggressive.
Η συγκεκριμένη υλοποίηση εξυπηρετεί διττό σκοπό – εκτός από την απάντηση στο
συγκεκριμένο ερώτημα.
Εξ ορισμού, τα οχήματα στην Carla οδηγούν πολύ συντηρητικά. Δεν εκτελούν αλλαγές
λωρίδας, καθώς προσπαθούν κυρίως να αποφεύγουν τις συγκρούσεις.
Η αύξηση του επιπέδου επιθετικότητας δύναται να αναγκάσει τους πράκτορες στην
εκμάθηση καλύτερων πρακτικών, πιο ασφαλών και ρεαλιστικών – άλλωστε, οι πραγματικοί
οδηγοί στους δρόμους είναι πολύ επιθετικοί.
9.
Human detection
Τροποποιήθηκαν τα αρχεία manual_control.py και automatic_control.py με τη δημιουργία
αλγόριθμου human detection και χρησιμοποιείται έτσι ώστε να παράγεται ένα οπτικό
μήνυμα (CAUTION!!! Nearby pedestrians!!!) κάθε φορά που εντοπίζεται κάποιος πεζός σε
απόσταση μικρότερη των 25 μέτρων. (αρχείο erotima 9 human detection camera.mkv).
Η απόσταση ορίστηκε τόση, ώστε να υπάρχει επαρκής χρόνος αλλά και να μην εμφανίζεται
συνεχώς το μήνυμα, κάτι που θα εκμηδένιζε τη χρησιμότητά του.
9.1. Vehicle behaviour/ Finite State Machine
10.
10.1.
Vehicle behaviour
Το αυτόνομο όχημα ανταποκρίνεται ρεαλιστικά, λαμβάνοντας υπόψη τόσο τα άλλα
αυτόνομα οχήματα και τους πεζούς, όσο και την κατάσταση των φαναριών (αρχείο erotima
10 behaviour 2021-07-25 11-04-06).
Το αυτόνομο όχημα υπακούει πάντοτε στον Κώδικα Οδικής Κυκλοφορίας. Τηρεί τα όρια
ταχύτητας, την προτεραιότητα των πεζών και άλλων οχημάτων, σέβεται τόσο τα φανάρια
όσο και τα άλλα σήματα, δεν παρκάρει ποτέ μέσα στη μέση του δρόμου (αρχείο .
10.2.
Finite State Machine (FSM)
Λαμβάνοντας υπόψη το ότι:
For complex problems in which common urban driving scenarios are included, the difficulty
in representing the system as FSM lies in dealing with the need to implement the potentially
high number of transitions due to the state explosion problem [17]
επιλέξαμε να κρατήσουνε τις καταστάσεις του FSM σε λογικά επίπεδα επίδειξης των
λειτουργιών που συνάδουν στην συμπεριφορά του οχήματος καθώς και των μεταβάσεων
ανάμεσά τους, με σκοπό να αποφευχθεί το πρόβλημα της εκθετικής αύξησης – έκρηξης –
των καταστάσεων.
Σελίδα 6
Με βάση τα παραπάνω, εκπονήθηκε το ακόλουθο FSM βασισμένο στις μεταβάσεις του [18]
Εικ.4: FSM οχήματος αυτόνομης κίνησης
(Non) Trivia
Αρκετός από τον κώδικα (ο οποίος μπορεί να ανακτηθεί και από εδώ) πάρθηκε από
το Carla PythonAPI. Όσα αρχεία δε μεταβλήθηκαν, διατηρήθηκαν όπως ήταν, με τα
ονόματα των δημιουργών τους. Όπου μεταβάλλαμε μέρος του κώδικα αναφέρεται στην
αρχή του αρχείου ως σημείωση Modified by και σε όσα αρχεία δημιουργήσαμε αναφέρεται
φυσικά μόνο το όνομά μας.
Άλλα πράγματα που μας άρεσαν – όλα τα φανάρια πράσινα
# ...
if vehicle_actor.is_at_traffic_light():
traffic_light = vehicle_actor.get_traffic_light()
if traffic_light.get_state() == carla.TrafficLightState.Red:
# world.hud.notification("Traffic light changed! Good to go!")
traffic_light.set_state(carla.TrafficLightState.Green)
Σελίδα 7
References
[1] CARLA: An Open Urban Driving Simulator, Alexey Dosovitskiy, German Ros, Felipe Codevilla,
Antonio Lopez, Vladlen Koltun; PMLR 78:1-16
[2] carla.readthedocs.io
[3] Pedestrian Detection: A Benchmark, Piotr Dollar, Christian Wojek, Bernt Schiele, Pietro Perona
[4] Geometry-Aware Video Object Detection for Static Cameras, Dan Xu, Weidi Xie, Andrew
Zisserman, Visual Geometry Group, Department of Engineering Science, University of Oxford, Oxford
[5] Verifying the Safety of Lane Change Maneuvers of Self-driving Vehicles Based on Formalized
Traffic Rules, Pek, Zahn, Althoff, IEEE Intelligent Vehicles Symposium, July 2017, DOI:
10.1109/IVS.2017.7995918
[6] An Embedded Autonomous Robotic System for Alive Human Body Detection and Rescue
Operation, Rajeev Joshi, Pratap Chandra Poudel, Pankaj Bhandari, International Journal of Scientific
and Research Publications, Volume 4, Issue 5, May 20141ISSN 2250-3153
[7] Safety verification of autonomous vehicles for coordinated evasive maneuvers. Althoff M, Althoff
D, Wollherr D, et al.,2010 IEEE Intelligent Vehicles Symposium; 2010
[8] Autonomous Driving Strategies at Intersections: Scenarios, State-of-the-Art, and Future Outlooks,
LianzhenWei, ZiruiLi,JianweiGong, ChengGong,Jiachen L
[9] End to end learning for self-driving cars, Bojarski M. Del Testa D. Dworakowski D. et al., 2016,
arXiv preprint arXiv:1604.07316
[10] Exploring the Limitations of Behavior Cloning for Autonomous Driving, Codevilla F. Santana E.
Lopez A. Gaidon A, arxiv.org/pdf/1904.08980v1.pdf
[11] CIRL: Controllable Imitative Reinforcement Learning for Vision-based Self-driving, Xiaodan
Liang, Tairui Wang, Luona Yang, Eric Xing, Proceedings of the European Conference on Computer
Vision (ECCV), 2018, pp. 584-599
[12] A Research Platform for Autonomous Vehicles Technologies Research in the Insurance Sector,
Ángel de Miguel, Moreno F., Marín-Plaza P., Al-Kaff A., Palos M., Martín D., Encinar-Martín R García
F., Applied Sciences 10(16):5655, 2020, DOI: 10.3390/app10165655
[13] A Finite State Machine Based Automated Driving Controller and its Stochastic Optimization,
Conference: ASME 2017 Dynamic Systems and Control Conference, DOI: 10.1115/DSCC2017-5209
[15] Path Planning for Autonomous Vehicles in Unknown Semi-structured Environments, Dolgov D.
Thrun S. Montemerlo M. Diebel J., Vol 29 Issue 5: Special Issue on The Eleventh International
Symposium on Experimental Robotics, https://doi.org/10.1177/0278364909359210
[16] A* Planning, Likhachev, Maxim, Planning and Decision-making in Robotics. 2020, 16-782
www.cs.cmu.edu/~maxim/classes/robotplanning_grad/lectures/astar_16782_fall20.pdf
[17] The State Explosion Problem, Antti Valmari, Lectures on Petri nets: Advances in Petri nets
Springer-Verlang, Berlin-Heidelberg, 1998, 429–473
[18] Hybrid Systems Modeling and Reachability- Based Controller Design Methods for Vehicular
Automation, Jaeyong Park, Arda Kurt & ̈Umit ̈Ozg u
̈ ner, 2014, Unmanned Systems 2(02), pp. 101–
119, doi:10.1142/S2301385014500071.
Σελίδα 8