From 20e276a8b59910f31457b27368fd297e97f4c74b Mon Sep 17 00:00:00 2001 From: 183899 Date: Mon, 1 Dec 2025 11:44:13 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/driverless/main.py | 60 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/driverless/main.py diff --git a/src/driverless/main.py b/src/driverless/main.py new file mode 100644 index 0000000000..6a8726fa54 --- /dev/null +++ b/src/driverless/main.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 + +import carla +import config as Config +import math +from drawer import PyGameDrawer +from sync_pygame import SyncPyGame +from mpc import MPC + + +class Main(): + + def __init__(self): + # setup world + self.client = carla.Client(Config.CARLA_SERVER, 2000) + self.client.set_timeout(10.0) + self.world = self.client.load_world(Config.WORLD_NAME) + self.map = self.world.get_map() + + # spawn ego + ego_spawn_point = self.map.get_spawn_points()[100] + bp = self.world.get_blueprint_library().filter('vehicle.tesla.model3')[0] + self.ego = self.world.spawn_actor(bp, ego_spawn_point) + + # init game and drawer + self.game = SyncPyGame(self) + self.drawer = PyGameDrawer(self) + self.mpc = MPC(self.drawer, self.ego) + + # start game loop + self.game.game_loop(self.world, self.on_tick) + + def on_tick(self): + # generate reference path (global frame) + lookahead = 5 + wp = self.map.get_waypoint(self.ego.get_location()) + path = [] + + for _ in range(lookahead): + _wps = wp.next(1) + if len(_wps) == 0: + break + wp = _wps[0] + path.append(wp.transform.location) + + # get forward speed + velocity = self.ego.get_velocity() + speed_m_s = math.sqrt(velocity.x ** 2 + velocity.y ** 2 + velocity.z ** 2) + dt = 1 / Config.PYGAME_FPS + + # generate control signal + control = carla.VehicleControl() + control.throttle = 0.6 + control.steer = self.mpc.run_step(path, speed_m_s, dt) + + # apply control signal + self.ego.apply_control(control) + +if __name__ == '__main__': + Main() \ No newline at end of file From 4a2ccc8b67a058c5855cf350d35f1aa73eaaaa34 Mon Sep 17 00:00:00 2001 From: 183899 Date: Mon, 8 Dec 2025 09:17:03 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=B0=86=E5=8E=9F=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=90=8D=E6=9B=B4=E6=94=B9=E4=B8=BA=E6=9B=B4=E5=8A=A0=E8=AF=A6?= =?UTF-8?q?=E7=BB=86=E7=9A=84=E5=90=8D=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/{driverless => unmannedcar_MPC}/RADME.md | 0 src/{driverless => unmannedcar_MPC}/main.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/{driverless => unmannedcar_MPC}/RADME.md (100%) rename src/{driverless => unmannedcar_MPC}/main.py (100%) diff --git a/src/driverless/RADME.md b/src/unmannedcar_MPC/RADME.md similarity index 100% rename from src/driverless/RADME.md rename to src/unmannedcar_MPC/RADME.md diff --git a/src/driverless/main.py b/src/unmannedcar_MPC/main.py similarity index 100% rename from src/driverless/main.py rename to src/unmannedcar_MPC/main.py From 2b3e4b21265f434d5acdf8c6c01189b3192a20fc Mon Sep 17 00:00:00 2001 From: 183899 Date: Mon, 15 Dec 2025 10:03:16 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E5=99=A8=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=A2=9E=E6=B7=BB?= =?UTF-8?q?=E4=BA=86=E9=80=9F=E5=BA=A6=E6=98=BE=E7=A4=BA=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/unmannedcar_MPC/main.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/unmannedcar_MPC/main.py b/src/unmannedcar_MPC/main.py index 6a8726fa54..9877ff1bbc 100644 --- a/src/unmannedcar_MPC/main.py +++ b/src/unmannedcar_MPC/main.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +##!/usr/bin/env python3 import carla import config as Config @@ -46,6 +46,10 @@ def on_tick(self): # get forward speed velocity = self.ego.get_velocity() speed_m_s = math.sqrt(velocity.x ** 2 + velocity.y ** 2 + velocity.z ** 2) + + # 计算并保存当前速度(km/h) + current_speed_kmh = speed_m_s * 3.6 # m/s to km/h + dt = 1 / Config.PYGAME_FPS # generate control signal @@ -56,5 +60,8 @@ def on_tick(self): # apply control signal self.ego.apply_control(control) + # 在屏幕上显示速度 + self.drawer.display_speed(current_speed_kmh) + if __name__ == '__main__': Main() \ No newline at end of file