Compare commits
16 Commits
CARLA-Fahr
...
CARLA-Fahr
Author | SHA1 | Date | |
---|---|---|---|
b81e2a8065 | |||
14c6957147 | |||
5532bec065 | |||
62198d7f4a | |||
3424ce6c16 | |||
bb135ee12d | |||
ef1bbe57aa | |||
f3654821a3 | |||
e608d42321 | |||
0d534ad9fb | |||
1c9b7cc6f5 | |||
94390675ed | |||
1dec1d79b4 | |||
0560c4796b | |||
9e16257113 | |||
364dd27dab |
@ -1,6 +1,13 @@
|
||||
# Projekt Name: Fahrsimulaton_CARLA-Simulator
|
||||
carla ist ein Simulator zur Fahrsimulation. CARLA stellt für uns die Verbindung zum Client her, sodass wir diese nicht mehr selbst aufbauen müssen. Ziel unseres Projekts ist es, die Nutzung des Simulators Carla zu demonstrieren, einer fortschrittlichen Open-Source-Plattform, die auf die Simulation autonomer Fahrzeuge spezialisiert ist. Carla ermöglicht die Erstellung realistischer virtueller Umgebungen, um Algorithmen der künstlichen Intelligenz unter Bedingungen zu testen und zu validieren, die der realen Welt nahekommen. Das Projekt zielt darauf ab, die Fähigkeiten von Carla zu erforschen, um autonome Fahrsysteme zu verbessern und komplexe Szenarien ohne reale Risiken zu testen.
|
||||
# Projekt Name: Fahrsimulator_CARLA-Simulator
|
||||
carla ist ein Simulator zur Fahrsimulation. CARLA stellt für uns die Verbindung zum Client her, sodass wir diese nicht mehr selbst aufbauen müssen. Ziel unseres Projekts ist es, die Nutzung des Simulators Carla zu demonstrieren, einer fortschrittlichen Open-Source-Plattform, die auf die Simulation autonomer Fahrzeuge spezialisiert ist. Carla ermöglicht die Erstellung realistischer virtueller Umgebungen, um Algorithmen der künstlichen Intelligenz unter Bedingungen zu testen und zu validieren, die der realen Welt nahekommen. Das Projekt zielt darauf ab, die Fähigkeiten von Carla zu erforschen, um autonome Fahrsysteme zu verbessern und komplexe Szenarien ohne reale Risiken zu testen.
|
||||
|
||||
## Installation
|
||||
1. Klone Repository `git clone <repository_url>`
|
||||
2. 安装依赖:`npm install`
|
||||
3. 启动项目:`npm start`
|
||||
```bash
|
||||
pip install foobar
|
||||
```
|
||||
|
||||
## Projektbeschreibung
|
||||
|
||||
@ -28,16 +35,16 @@ Das Hauptziel des Projekts ist es, Entwicklern zu helfen, Algorithmen für auton
|
||||
3.2 Förderung der Anwendung von intelligenten Verkehrssystemen.
|
||||
Wir hoffen, dass sich das Projekt nicht nur auf das autonome Fahren beschränkt, sondern auch die Erforschung und Anwendung von intelligenten Verkehrssystemen unterstützen wird.Durch die kontinuierliche Optimierung des Verkehrsflussmanagements, der Fahrspuroptimierung und anderer Funktionen wird es Stadtplanern und Verkehrsmanagern helfen, immer komplexere Verkehrssituationen effektiv zu bewältigen und die Verkehrseffizienz und -sicherheit in Städten zu verbessern.
|
||||
|
||||
|
||||
## Installierung und Ausführung des Projekts
|
||||
Wenn Sie das Projekt auf einer Maschine installieren oder ausführen müssen, auf der Benutzer (wie zum Beispiel POS-Systeme) auf das Projekt zugreifen, sollten die folgenden Schritte und Abhängigkeiten beachtet werden:
|
||||
|
||||
1. Systemanforderungen
|
||||
|
||||
Betriebssystem: [Windows/Linux/macOS]
|
||||
Notebooks: https://jupyter-notebook.readthedocs.io/en/latest/
|
||||
Python-Version: [z. B. Python 3.8 oder höher]
|
||||
Zusätzliche Abhängigkeiten: [Liste der benötigten Bibliotheken, z. B. CARLA-Simulator, andere Python-Pakete]
|
||||
Notebooks: https://jupyter-notebook.readthedocs.io/en/latest/
|
||||
|
||||
|
||||
2. Installation
|
||||
|
||||
@ -76,31 +83,32 @@ Um das Projekt besser zu verstehen, können Screenshots oder Diagramme verwendet
|
||||
5.5 Authentifizierung (falls erforderlich)
|
||||
Falls das Projekt eine Authentifizierung benötigt, wie z. B. Benutzername und Passwort, stellen Sie sicher, dass diese in diesem Abschnitt beschrieben sind, damit Benutzer wissen, wie sie sich anmelden können.
|
||||
|
||||
|
||||
## Dukumentation
|
||||
Interessante Seite: https://carla.readthedocs.io/en/latest/python_api/ Tutorial: https://pythonprogramming.net/introduction-self-driving-autonomous-cars-carla-python/
|
||||
Ausführung des Programms mit jupyter_carla_Umgebung: https://technischehochschulen-my.sharepoint.com/:v:/r/personal/nnacl84441_technischehochschulen_onmicrosoft_com/Documents/Microsoft%20Teams%20Chat%20Files/VIDEO-2025-01-09-14-18-13.MP4?csf=1&web=1&e=42WKug
|
||||
|
||||
|
||||
## Autoren und Danksagungen
|
||||
## Autoren und Danksagungen
|
||||
Der Carla-Simulator-Teil des Projekts war eine Teamleistung, und ich möchte den folgenden Autoren meinen aufrichtigen Dank aussprechen:
|
||||
|
||||
1. Claude Valérie Nna
|
||||
übernehmen die Teile: Erzeugung und Steuerung der Fahrzeuge sowie die Wetterbedingungen
|
||||
GitHub Links zu Profilen und E-Mail: https://github.com/nnacl84441, nnacl84441@th-nuernberg.de
|
||||
übernehmen die Teile: Erzeugung und Steuerung der Fahrzeuge sowie die Wetterbedingungen
|
||||
GitHub Links zu Profilen und E-Mail:https://github.com/nnacl84441, nnacl84441@th-nuernberg.de
|
||||
|
||||
## Was hat funktioniert?
|
||||
- Das Hinzufügen und die Kontrolle der Fahrzeuge
|
||||
- Die Berücksichtigungen der Wetterbedingungen
|
||||
- DasEntfernen von kollidierten oder im Stau feststeckenden Fahrzeugen.
|
||||
- Die Hinzufüge und Kontrolle der Füßgänger
|
||||
- Der Code in andere Karte
|
||||
Während der Simulation wurden zwei Probleme festgestellt:
|
||||
1- Kollisionen zwischen Fahrzeuge
|
||||
Meine Lösung: Die kollierten Fahrzeuge entfernen.
|
||||
Ich habe eine Funktion def has_collision(vehicle1,vehicle2) definiert, die überprüft, ob zwei Fahrzeuge in Kollision sind, indem sie deren Entfernungen und Positionen berechnet. Eine minimaler Abstand von 2 Meter ist festgelegt,um eine Kollision zu berücksichtigen.Wenn die berechnete Parameter(Entfernungen und Positionen = distance in den Code gennant) kleiner als 2 ist. dann ist es eine Kollision.
|
||||
Danach versucht die Funktion def reset_collision(vehicle1,vehicle2) die Fahrzeuge im Kollision zu befreien,indem sie die Positionen der Fahrzeugen entweder 2 Meter nach Recht oder 2 Meter nach links anpasst und die Geschwindigkeiten der Fahrzeugen auf 5 km/h verringert.Dann wird if has_collision überprüft,ob die Kollision bestehen bleibt.Wenn der Fall wäre,wird ein Fahrzeug nach 3 Seconde aus der Umgebung entfernt.
|
||||
|
||||
2- Die Entstehung von Staus.
|
||||
Meine Lösung 1:Vorfahrtregeln festlegen
|
||||
Daher habe ich eine Schwellenentfernung von 4 Metern festgestellt. jedes Fahrzeug , das sich dieser distanz nähert,wird seine Geschwindigkeit,seine Ausrichtung und seiner Abstand gerechnet.Falls Das Fahrzeug mit niedriger Priorität in Bewegung ist, bremst das Fahrzeug, damit das andere Fahrzeug mit höheren Priorität vorfährt.sonst fährt das Fahrzeug weiter.
|
||||
Es passiert , dass zwei Fahrzeuge die gleiche Priorität haben. Deshalb habe ich zusätzlich die Funktion def handle_simultaneous_arrival(vehicles) verwenden,um die Fafrzeuge mit der gleichen Prioritäten zu unterscheiden,Indem sie jedem Fahrzeug einen Zufallswert zwischen 0,5 und 1,5 Sekunden zuweist.
|
||||
|
||||
|
||||
Meine Lösung 2: Das Verkehrsstau entfernt.
|
||||
Die Funktion def is_vehicles_blocked(vehicle,max_stop-time=30) überprüft anhand der Anhaltezeit und der Beschleunigung, ob ein Fahrzeug blockiert ist. max_stop_time: Zeit (in Sekunden), bevor ein Fahrzeug als blockiert gilt.Wenn dieses Fahrzeug eine Geschwindigkeit kleiner als 2 m/s und eine Anhaltezeit größer als 30 Seconde hat,kann es nicht bewegen. d.h blokiert dann wird dieses Fahrzeug nach 30 Seconde aus der Umgebung entfernt.
|
||||
|
||||
2. Liyuan Zhu,
|
||||
übernehmen die Teile: Erzeugung und Steurung der Fußgänger.
|
||||
übernehmen die Teile: Erzeugung der Fußgänger
|
||||
GitHub Links zu Profilen und E-Mail: https://github.com/zhuli90799, zhuli90799@th-nuernberg.de
|
||||
|
||||
## Was hat funktioniert?
|
||||
- Den Fußgänger- und AI-Controller erhalten
|
||||
- Generierung von Fußgängerentstehungspunkten(spawn_points)
|
||||
- Batch-Generierung von Fußgängern
|
||||
@ -784,9 +792,9 @@ the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
|
||||
|
||||
## useful for future project teams
|
||||
Bitte lies die CARLA-Dokumentation, da alle Methoden, Befehle und Beschreibungen darin stehen. Man muss die Datei nicht immer speichern, wenn man den Code ausführt. Sonst stürzt CARLA ab.
|
||||
## Dokumentation
|
||||
Interessante Seite: https://carla.readthedocs.io/en/latest/python_api/
|
||||
Tutorial: https://pythonprogramming.net/introduction-self-driving-autonomous-cars-carla-python/
|
||||
|
||||
|
||||
## Projektzustand
|
Binary file not shown.
@ -67,7 +67,12 @@ map_name = world.get_map().name
|
||||
print("Loaded map name:", map_name)
|
||||
|
||||
|
||||
# Vorfahrtregeln festlegen
|
||||
|
||||
|
||||
##### ###### #######
|
||||
# Vorfahrtregeln festlegen#
|
||||
# #### ##### ######
|
||||
|
||||
# Define uncontrolled intersections (add more coordinates if needed)
|
||||
INTERSECTION_ZONES = [
|
||||
carla.Location(x=100, y=200, z=0),
|
||||
@ -83,8 +88,7 @@ def handle_simultaneous_arrival(vehicles):
|
||||
for v in vehicles:
|
||||
delay = random.uniform(0.5 , 1.5)
|
||||
v.wait(delay)
|
||||
|
||||
|
||||
|
||||
|
||||
# Manage uncontrolled intersections
|
||||
def manage_uncontrolled_intersections():
|
||||
@ -125,11 +129,14 @@ def manage_uncontrolled_intersections():
|
||||
else:
|
||||
vehicle.waiting_time += world.get_snapshot().timestamp.delta_seconds
|
||||
print(f"Vehicle {vehicle.id} is waiting for {vehicle.waiting_time:.1f} sec.")
|
||||
|
||||
|
||||
|
||||
|
||||
# The Code try to adjusts the position of two colliding vehicles to separate them.
|
||||
######## ######### ######### #################
|
||||
# The Code try to adjusts the position of two colliding vehicles to separate them. #
|
||||
# if the adjustment fails, one vehicle is removed from the world #
|
||||
# ######## ######## ######## ######## ########
|
||||
|
||||
collision_status = {} # Statut de collision entre véhicules
|
||||
|
||||
def has_collision(vehicle1, vehicle2):
|
||||
@ -222,12 +229,8 @@ def communicate_with_other_vehicle(vehicle):
|
||||
vehicle.stop()
|
||||
other.move()
|
||||
|
||||
# detection la ligne d'arret en avance
|
||||
|
||||
# The code based of the speed and stop_time of vehicles
|
||||
# check if vehicles has 0.0 m/s speed and
|
||||
# stop_time ist more than 30 seconds
|
||||
# that means the vehicle is blocked and
|
||||
# will be removed
|
||||
STOP_DISTANCE = 10 # Distance avant la ligne d'arrêt
|
||||
|
||||
def detect_stop_line(vehicle,stop_line_position):
|
||||
@ -257,10 +260,10 @@ def ensure_correct_stop(vehicle):
|
||||
|
||||
|
||||
|
||||
#The code adjust the position of ambulance
|
||||
|
||||
|
||||
|
||||
# The code adjust the position of ambulance
|
||||
# Classe représentant un camion
|
||||
class Truck:
|
||||
def __init__(self, vehicle):
|
||||
@ -298,8 +301,7 @@ def get_clearance(vehicle, side, world):
|
||||
# Attendre un instant pour capter les données
|
||||
time.sleep(0.1)
|
||||
|
||||
|
||||
# Suppression du capteur
|
||||
# Suppression du capteur
|
||||
sensor.destroy()
|
||||
|
||||
# Vérification et affichage du message
|
||||
@ -324,7 +326,6 @@ def adjust_truck_steering(truck, world):
|
||||
right_clearance = get_clearance(truck.vehicle, "right", world)
|
||||
front_clearance = get_clearance(truck.vehicle, "front", world)
|
||||
|
||||
|
||||
control = truck.vehicle.get_control()
|
||||
|
||||
# Ajuster la direction pour éviter les obstacles
|
||||
@ -343,9 +344,7 @@ def adjust_truck_steering(truck, world):
|
||||
if front_clearance < 3.0: # Si un véhicule est trop proche devant
|
||||
control.brake = 0.5 # Appliquer le freinage
|
||||
control.throttle = 0.0 # Réduire la vitesse à zéro pour éviter une collision
|
||||
|
||||
|
||||
|
||||
|
||||
# fonction pour freiner
|
||||
distance_ahead = get_clearance(truck.vehicle,"front",world)
|
||||
|
||||
@ -360,9 +359,6 @@ def adjust_truck_steering(truck, world):
|
||||
# Appliquer le nouveau contrôle au camion
|
||||
truck.vehicle.apply_control(control)
|
||||
|
||||
|
||||
|
||||
|
||||
# Filtrer les camions dans la simulation
|
||||
vehicles = world.get_actors().filter('vehicle.*')
|
||||
|
||||
@ -376,9 +372,11 @@ def adjust_truck_steering(truck, world):
|
||||
|
||||
|
||||
|
||||
|
||||
# Pour suivre le temps d'arrêt des véhicules
|
||||
|
||||
#The code based of the speed and stop_time of vehicles
|
||||
# check if vehicles has 0.0 m/s speed and
|
||||
# stop_time ist more than 30 seconds
|
||||
# that means the vehicle is blocked and
|
||||
# will be removed
|
||||
stuck_vehicles_time = {} # Stocke le temps d'arrêt des véhicules
|
||||
|
||||
def is_vehicle_blocked(vehicle, max_stop_time=30):
|
||||
@ -425,20 +423,21 @@ def is_spawn_point_occupied(spawn_point, vehicles, max_density=2, remove_stuck_v
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# get the vehicle blueprints and spwan point
|
||||
vehicle_blueprints = world.get_blueprint_library().filter('vehicle*')
|
||||
spawn_points = world.get_map().get_spawn_points()
|
||||
|
||||
# Spawn 30 vehicles randomly distributed throughout the map
|
||||
# for each spawn point, we choose a random vehicle from the blueprint library
|
||||
vehicles = []
|
||||
for i in range(0,30):
|
||||
vehicles.append(world.try_spawn_actor(random.choice(vehicle_blueprints), random.choice(spawn_points)))
|
||||
|
||||
#display the available vehicles
|
||||
blueprint_library = world.get_blueprint_library()
|
||||
print("Available vehicule models:", blueprint_library.filter('vehicle.*'))
|
||||
|
||||
|
||||
#display the Number of spwan points
|
||||
print("Number of spawn points:", len(spawn_points))
|
||||
|
||||
|
||||
@ -461,13 +460,25 @@ if vehicle is not None:
|
||||
else:
|
||||
print(f"Failed to create vehicle after several attempts.")
|
||||
|
||||
|
||||
#The vehicles start the control system
|
||||
for vehicle in world.get_actors().filter('*vehicle*'):
|
||||
if vehicle.attributes['role_name'] != 'ego':
|
||||
vehicle.set_autopilot(True)
|
||||
|
||||
|
||||
|
||||
#How to set weather and display available carla.weather.parameters
|
||||
world.set_weather(carla.WeatherParameters.HardRainNoon)
|
||||
world.set_weather(carla.WeatherParameters.ClearNoon)
|
||||
world.set_weather(carla.WeatherParameters.HardRainNight)
|
||||
world.set_weather(carla.WeatherParameters.CloudySunset) # Set weather to CloudySunset
|
||||
world.set_weather(carla.WeatherParameters.WetNoon) # Set weather to wet
|
||||
world.set_weather(carla.WeatherParameters.CloudyNoon)
|
||||
world.set_weather(carla.WeatherParameters.SoftRainNight)
|
||||
world.set_weather(carla.WeatherParameters.WetCloudySunset)
|
||||
print(dir(carla.WeatherParameters))
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,10 +0,0 @@
|
||||
## Wetterimplementierung
|
||||
world.set_weather(carla.WeatherParameters.HardRainNoon)
|
||||
world.set_weather(carla.WeatherParameters.ClearNoon)
|
||||
world.set_weather(carla.WeatherParameters.HardRainNight)
|
||||
world.set_weather(carla.WeatherParameters.CloudySunset) # Set weather to CloudySunset
|
||||
world.set_weather(carla.WeatherParameters.WetNoon) # Set weather to wet
|
||||
world.set_weather(carla.WeatherParameters.CloudyNoon)
|
||||
world.set_weather(carla.WeatherParameters.SoftRainNight)
|
||||
world.set_weather(carla.WeatherParameters.WetCloudySunset)
|
||||
print(dir(carla.WeatherParameters))
|
@ -1,4 +1,3 @@
|
||||
##Fußgängerimplementierung
|
||||
import carla
|
||||
import random
|
||||
|
Loading…
x
Reference in New Issue
Block a user