Compare commits

..

16 Commits

6 changed files with 70 additions and 62 deletions

View File

@ -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

BIN
Bild.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 900 KiB

Binary file not shown.

View File

@ -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))

View File

@ -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))

View File

@ -1,4 +1,3 @@
##Fußgängerimplementierung
import carla
import random