diff --git a/docs/carla_driving/README.md b/docs/carla_driving/README.md new file mode 100644 index 0000000000..75daeff321 --- /dev/null +++ b/docs/carla_driving/README.md @@ -0,0 +1,616 @@ +# 🚗 CARLA 0.9.15 自劚驟驶䞎蜊道保持控制系统 +基于 CARLA 仿真噚0.9.15 版本实现的自劚驟驶控制项目涵盖亀通灯识别䞎响应、自劚路埄规划䞎富航、实时倩气切换、手劚/自劚驟驶暡匏切换等功胜。项目提䟛了倚䞪析进匏脚本从最基础的自劚驟驶到完敎功胜版方䟿孊习和二次匀发。 + +## 目圕 +- 项目背景 +- 功胜特性 +- 项目结构 +- 脚本诊解 +- 栞心架构 + - 系统架构囟 + - 栞心类诎明 + - 䌠感噚䜓系 + - 驟驶行䞺暡匏 + - 倩气系统 +- 环境芁求 +- 安装 +- 䜿甚方法 + - 方匏䞀䞀键启劚Windows + - 方匏二手劚启劚 + - 呜什行参数 + - 键盘操䜜 +- 工䜜原理 + - 亀通灯检测䞎响应流皋 + - 自劚富航流皋 + - 手劚/自劚切换流皋 +- 配眮诎明 +- 垞见问题 +- 扩展匀发指南 +- 曎新日志 +- 讞可证 +- 臎谢 + +## 项目背景 +自劚驟驶仿真是自劚驟驶研发䞭䞍可或猺的环节。CARLA 是由 Intel Labs 䞻富匀发的匀源自劚驟驶仿真平台提䟛了䞰富的城垂环境、蜊蟆暡型、䌠感噚和亀通场景。 + +本项目基于 CARLA 0.9.15从官方瀺䟋出发逐步构建了䞀套实甚的自劚驟驶控制系统。项目特别针对以䞋痛点进行了适配 +- Python 3.9 兌容性CARLA 旧版 .egg 富入机制圚 Python 3.9+ 䞋存圚冲突项目提䟛了完敎的修倍方案 +- 功胜析进匏组合䞍同脚本对应䞍同功胜组合可按需选甚 +- 蜻量独立方案`world_Coordinate.py` 提䟛了䞍䟝赖 CARLA 内眮 Agent 的极简自劚富航方䟿理解和定制 + +## 功胜特性 +| 功胜 | 诎明 | +| ---- | ---- | +| 🗺 自劚富航 | 基于 BehaviorAgent 实现路埄规划䞎自劚驟驶到蟟目标后自劚切换新目标 | +| 🚊 亀通灯检测 | 通过 CARLA 内眮目标包囎框检测亀通灯状态红灯停蜊、绿灯通行 | +| 🌊 倩气切换 | 运行时键盘切换 CARLA 内眮倩气预讟晎倩、倚云、雚倩、雟倩等数十种 | +| 🔄 手劚/自劚切换 | 支持自劚驟驶䞎手劚键盘操控之闎实时切换无需重启 | +| 📡 倚䌠感噚融合 | 碰撞检测、蜊道偏犻检测、GNSS 定䜍、RGB 摄像倎 | +| 🖥 HUD 实时信息 | 蜊速、坐标、航向角、驟驶暡匏、FPS 等实时星瀺 | +| 🐍 Python 3.9 适配 | 修倍 egg 富入冲突兌容 CARLA 0.9.15 最新 API | +| 🪶 极简富航方案 | SimpleAutoAgent 纯自实现富航䞍䟝赖第䞉方 Agent 库 | + +## 项目结构 +``` +carla_driving_car_lane/ +├── main.py # 🔰 䞻入口基础自劚驟驶 + 倩气切换 +├── automatic_control.py # 🐍 Python 3.9 适配版自劚驟驶 +├── Add_weather_switching.py # 🌊 自劚驟驶 + 倩气实时切换 +├── Automatic_model # ⭐ 完敎功胜版手劚/自劚 + HUD + 倩气 +├── Switch_automatic # 🔄 纯自劚驟驶 + 倩气切换 +├── world_Coordinate.py # 🪶 极简版自实现 SimpleAutoAgent零倖郚䟝赖 +├── automatic_control/ +│ └── automatic_control.py # 📊 自劚驟驶控制倇选版本 +├── start_carla_sim.bat # 🖥 Windows 䞀键启劚脚本 +├── Requirements.txt # 📋 Python 䟝赖 +└── README.md # 📖 本文件 +``` + +## 脚本诊解 +### 脚本功胜对比 +| 脚本 | 自劚富航 | 倩气切换 | 手劚驟驶 | HUD 面板 | 适配修倍 | 富航方匏 | 快捷键 | +| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | +| main.py | ✅ | ✅ | ❌ | 基础 | ❌ | BehaviorAgent | TAB | +| automatic_control.py | ✅ | ❌ | ❌ | 基础 | ✅ | BehaviorAgent | — | +| Add_weather_switching.py | ✅ | ✅ | ❌ | 基础 | ✅ | BehaviorAgent | TAB | +| Automatic_model | ✅ | ✅ | ✅ | 增区 | ✅ | BehaviorAgent | C / TAB / WASD | +| Switch_automatic | ✅ | ✅ | ❌ | 基础 | ✅ | BehaviorAgent | TAB | +| world_Coordinate.py | ✅ | ✅ | ❌ | 增区 | ✅ | SimpleAutoAgent | PageUp/Down | + +> 💡 掚荐䜿甚顺序world_Coordinate.py理解原理→ main.py䜓验基础功胜→ Automatic_model完敎䜓验 + +### 各脚本诊细诎明 +#### `main.py` — 基础入闚版 +最接近 CARLA 官方瀺䟋的版本集成了碰撞/蜊道/GNSS 䌠感噚和倩气切换功胜。适合初次接觊 CARLA 自劚驟驶的甚户。 +- 䌠感噚碰撞、蜊道偏犻、GNSS、RGB 摄像倎 +- 自劚富航䜿甚 BehaviorAgent到蟟目标后自劚换新目标 +- 支持倩气预讟切换 + +#### `automatic_control.py` — Python 3.9 适配版 +针对 Python 3.9 环境的适配版本修倍了 .egg 文件富入冲突问题。劂果䜠的 Python 环境是 3.9+建议䌘先䜿甚歀版本。 +- 枅理了 carla/dist 䞋的冲突 .egg 路埄 +- 䌠感噚党郚修倍完成运行皳定 +- 纯自劚驟驶无倩气切换 + +#### `Add_weather_switching.py` — 倩气增区版 +圚 Python 3.9 适配版基础䞊增加了倩气实时切换功胜按 TAB 键即可圚䞍同倩气预讟闎切换。 + +#### `Automatic_model` — ⭐ 完敎功胜版掚荐 +功胜最完敎的版本包含手劚/自劚驟驶切换、增区 HUD 面板和倩气切换。 +- 按 C 键圚手劚/自劚驟驶之闎切换 +- 手劚暡匏䞋䜿甚 WASD 控制蜊蟆 +- HUD 星瀺驟驶暡匏、蜊速km/h、坐标X/Y、航向角 +- 碰撞和蜊道偏犻事件实时通知 +- 默讀加蜜 Town01 地囟 + +#### `Switch_automatic` — 纯自劚 + 倩气版 +自劚驟驶 + 倩气切换的粟简组合无手劚驟驶功胜。适合需芁纯自劚驟驶挔瀺的场景。 + +#### `world_Coordinate.py` — 极简独立版 +项目䞭最蜻量的自劚驟驶方案完党䞍䟝赖 CARLA 内眮的 Agent 库自己实现了 SimpleAutoAgent。 +- 自实现富航逻蟑基于向量点积和叉积计算蜬向角 +- 阻断所有可胜冲突的第䞉方库matplotlib/scipy/tensorflow/torch/keras +- 摄像倎䜍眮根据蜊蟆包囎盒劚态计算 +- HUD 星瀺 FPS、蜊速和行驶状态 +- 倩气切换䜿甚 PageUp/PageDown + +SimpleAutoAgent 富航逻蟑 +```python +# 计算蜊蟆前方䞎目标方向的关系 +dot = forward.x * target_dir.x + forward.y * target_dir.y # 点积刀断前后 +cross = forward.x * target_dir.y - forward.y * target_dir.x # 叉积刀断巊右 + +# 距犻 > 5m油闚 0.5 + 埮调蜬向距犻 ≀ 5m刹蜊 +``` + +## 栞心架构 +### 系统架构囟 +``` +┌──────────────────────────────────────────────────────────────┐ +│ CARLA 仿真匕擎 │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │ 地囟场景 │ │ 亀通系统 │ │ 倩气系统 │ │ 物理匕擎 │ │ +│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ +└──────────────────────┬───────────────────────────────────────┘ + │ TCP (2000 端口) +┌──────────────────────┌───────────────────────────────────────┐ +│ Python 客户端 │ +│ ┌───────────────────┌───────────────────┐ │ +│ │ World 场景管理 │ │ +│ │ ┌──────────┐ ┌──┮──┐ ┌──────────┐ │ │ +│ │ │ 䌠感噚管理 │ │蜊蟆 │ │ 盞机管理 │ │ │ +│ │ └──────────┘ └─────┘ └──────────┘ │ │ +│ └───────────────────────────────────────┘ │ +│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ +│ │ 富航代理 │ │ 控制噚 │ │ HUD 星瀺 │ │ +│ │ BehaviorAgent │ │ KeyboardCtrl │ │ FadingText │ │ +│ │ SimpleAgent │ │ (WASD/切换) │ │ (信息面板) │ │ +│ └──────────────┘ └──────────────┘ └──────────────┘ │ +└──────────────────────┬───────────────────────────────────────┘ + │ +┌──────────────────────┌───────────────────────────────────────┐ +│ Pygame 可视化界面 │ +│ ┌────────────────────────────────────────────────────┐ │ +│ │ RGB 摄像倎画面 (1280×720) │ │ +│ │ ┌──────────────────────────────────┐ │ │ +│ │ │ 暡匏: 自劚驟驶 │ │ │ +│ │ │ 蜊速: 45.2 km/h │ │ │ +│ │ │ 坐标: X:123.4 Y:56.7 │ │ │ +│ │ │ 航向: 89.2° │ │ │ +│ │ └──────────────────────────────────┘ │ │ +│ └────────────────────────────────────────────────────┘ │ +└──────────────────────────────────────────────────────────────┘ +``` + +### 栞心类诎明 +| 类名 | 所属脚本 | 职莣 | +| ---- | ---- | ---- | +| World | 党郚 | 场景管理蜊蟆生成/销毁、䌠感噚挂蜜、倩气切换 | +| KeyboardControl | 党郚 | 键盘事件倄理退出、倩气切换、驟驶暡匏切换、手劚驟驶 | +| HUD | 党郚 | HUD 信息枲染FPS、蜊速、坐标、通知消息 | +| FadingText | 党郚 | 析隐文字效果碰撞/蜊道偏犻等事件通知 | +| CollisionSensor | 党郚 | 碰撞䌠感噚检测䞎其他 Actor 的碰撞并通知 | +| LaneInvasionSensor | 党郚 | 蜊道偏犻䌠感噚检测压线/越线行䞺 | +| GnssSensor | main/Automatic_model/Switch | GNSS 䌠感噚获取经纬床坐标 | +| CameraManager | 党郚 | 摄像倎管理RGB 囟像采集䞎 Pygame 枲染 | +| BehaviorAgent | 倧郚分脚本 | CARLA 内眮富航代理路埄规划 + 行䞺决策 | +| SimpleAutoAgent | world_Coordinate.py | 自实现富航代理基于向量运算的极简富航 | + +### 䌠感噚䜓系 +``` + 蜊蟆 (Vehicle) + │ + ┌───────┬───────┌───────┬────────┐ + â–Œ â–Œ â–Œ â–Œ â–Œ + ┌────────┐┌──────┐┌──────┐┌──────┐┌──────┐ + │RGB盞机 ││碰撞 ││蜊道 ││GNSS ││可扩展 │ + │ ││䌠感噚 ││偏犻 ││䌠感噚││䌠感噚 │ + │1280×720││ ││䌠感噚 ││ ││(雷蟟) │ + └────────┘└──────┘└──────┘└──────┘└──────┘ + │ │ │ │ + â–Œ â–Œ â–Œ â–Œ + 画面枲染 碰撞通知 越线通知 定䜍数据 +``` + +| 䌠感噚 | Blueprint ID | 挂蜜方匏 | 蟓出 | +| ---- | ---- | ---- | ---- | +| RGB 摄像倎 | sensor.camera.rgb | SpringArm蜊后䞊方 | 1280×720 囟像 → Pygame 枲染 | +| 碰撞䌠感噚 | sensor.other.collision | 附着蜊蟆 | 碰撞事件 → HUD 通知 | +| 蜊道偏犻 | sensor.other.lane_invasion | 附着蜊蟆 | 越线事件 → HUD 通知 | +| GNSS | sensor.other.gnss | 蜊顶z+2.0 | 经纬床数据 | + +### 驟驶行䞺暡匏 +䜿甚 BehaviorAgent 的脚本支持䞉种驟驶行䞺通过 `--behavior` 参数指定 +| 暡匏 | 诎明 | 油闚 | 跟蜊距犻 | 变道频率 | +| ---- | ---- | ---- | ---- | ---- | +| normal | 正垞驟驶遵守亀通规则 | 适侭 | 适侭 | 适时变道 | +| cautious | 谚慎驟驶倧跟蜊距犻 | 蟃䜎 | 蟃倧 | 蟃少变道 | +| aggressive | 激进驟驶快速行驶 | 蟃高 | 蟃小 | 频繁变道 | + +```bash +# 谚慎暡匏 +python Automatic_model --behavior cautious + +# 激进暡匏 +python Automatic_model --behavior aggressive +``` + +### 倩气系统 +CARLA 0.9.15 内眮了数十种倩气预讟项目通过 `find_weather_presets()` 凜数自劚枚䞟所有可甚预讟。 + +| 类别 | 预讟瀺䟋 | +| ---- | ---- | +| ☀ 晎倩 | ClearNoon, ClearSunset, ClearNight | +| ☁ 倚云 | CloudyNoon, OvercastRain | +| 🌧 雚倩 | SoftRainNoon, HardRainNoon, HeavyRainSunset | +| 🌫 雟倩 | Fog | +| 🌧💚 暎风雚 | HardRainNoon + 区风 | + +切换方匏 +- 倧郚分脚本TAB 键埪环切换 +- world_Coordinate.pyPageUp / PageDown 正反向切换 + +## 环境芁求 +| 项目 | 最䜎芁求 | 掚荐配眮 | +| ---- | ---- | ---- | +| CARLA 仿真噚 | 0.9.15 | 0.9.15 | +| Python | 3.9+ | 3.9.x | +| 操䜜系统 | Windows 10仿真噚端 | Windows 10/11 | +| GPU | NVIDIA GTX 1060 6GB | NVIDIA RTX 3060 及以䞊 | +| 内存 | 16 GB | 32 GB | +| 磁盘 | 30 GBCARLA 安装 | SSD | +| 眑络 | 本地回环单机 | 局域眑倚机联仿 | + +> ⚠ CARLA 仿真噚仅支持 Windows/LinuxmacOS 䞍支持。Python 客户端可圚 macOS 䞊远皋连接 CARLA 服务噚。 + +## 安装 +### 1. 安装 CARLA 0.9.15 仿真噚 +从 CARLA Release 页面䞋蜜 0.9.15 版本解压至默讀路埄 +``` +D:\carla0.9.15\ +├── CarlaUE4.exe # 仿真噚䞻皋序 +├── CarlaUE4\ # 匕擎资源 +├── PythonAPI\ # Python 接口 +│ ├── carla\ # carla 暡块 +│ │ └── dist\ # .egg 文件旧版甚 +│ └── examples\ # 官方瀺䟋 +├── Import\ # 资源富入目圕 +└── Util\ # 工具脚本 +``` + +### 2. 安装 Python 䟝赖 +```bash +# 掚荐䜿甚虚拟环境 +python -m venv .venv +.venv\Scripts\activate # Windows +# source .venv/bin/activate # Linux + +pip install -r Requirements.txt +``` + +䟝赖诊情 +| 包名 | 版本 | 必选 | 诎明 | +| ---- | ---- | ---- | ---- | +| carla | 0.9.15 | ✅ | CARLA PythonAPI 客户端库 | +| pygame | 2.1.0 | ✅ | 仿真界面枲染䞎键盘蟓入 | +| numpy | 1.23.5 | ✅ | 数倌计算䞎囟像数组倄理 | +| opencv-python | 4.8.0.76 | ❌ | 囟像倄理扩展功胜 | +| matplotlib | 3.7.1 | ❌ | 数据可视化扩展功胜 | +| Pillow | 9.4.0 | ❌ | 囟像倄理扩展功胜 | +| torch | 2.0.0 | ❌ | 深床孊习检测暡型可选 | +| torchvision | 0.15.1 | ❌ | 视觉暡型配合 torch 䜿甚 | + +## 䜿甚方法 +### 方匏䞀䞀键启劚Windows +双击运行 `start_carla_sim.bat`脚本䌚自劚完成以䞋步骀 +1. 启劚 CARLA 仿真噚 → `CarlaUE4.exe -quality-level=Low` +2. 等埅 15 秒服务噚就绪 +3. 运行自劚驟驶脚本 → `automatic_control.py` + +> ⚠ 䜿甚前需修改 .bat 文件䞭的路埄诊见 配眮诎明。 + +### 方匏二手劚启劚 +#### 步骀 1启劚 CARLA 仿真噚 +```bash +# Windows — 䜎画莚暡匏掚荐性胜友奜 +CarlaUE4.exe -quality-level=Low + +# Windows — 高画莚暡匏 +CarlaUE4.exe -quality-level=Epic + +# Linux +./CarlaUE4.sh -quality-level=Low + +# 指定窗口化运行 +CarlaUE4.exe -windowed -ResX=1280 -ResY=720 +``` + +#### 步骀 2 +等埅仿真噚控制台星瀺 `CarlaServer ready`。 + +#### 步骀 3运行自劚驟驶脚本 +```bash +# 完敎功胜版掚荐銖次䜿甚 +python Automatic_model + +# 极简版理解富航原理 +python world_Coordinate.py + +# 基础版 +python main.py + +# 指定服务噚地址和参数 +python main.py --host 127.0.0.1 --port 2000 --res 1280x720 --behavior normal + +# 连接远皋 CARLA 服务噚 +python main.py --host 192.168.1.100 --port 2000 +``` + +### 呜什行参数 +| 参数 | 默讀倌 | 诎明 | +| ---- | ---- | ---- | +| --host | 127.0.0.1 | CARLA 服务噚地址本机或远皋 IP | +| --port | 2000 | CARLA 服务噚端口 | +| --res | 1280x720 | 枲染分蟚率栌匏宜x高 | +| --filter | vehicle.* | 蜊蟆蓝囟过滀劂 vehicle.tesla.model3 | +| -b / --behavior | normal | 驟驶行䞺暡匏normal / cautious / aggressive | + +瀺䟋 +```bash +# 䜿甚特定蜊蟆暡型 +python Automatic_model --filter vehicle.tesla.model3 + +# 4K 分蟚率 + 激进暡匏 +python Automatic_model --res 3840x2160 --behavior aggressive + +# 连接远皋服务噚 + 谚慎暡匏 +python main.py --host 192.168.1.100 --behavior cautious +``` + +### 键盘操䜜 +#### 通甚操䜜 +| 按键 | 功胜 | 适甚脚本 | +| ---- | ---- | ---- | +| ESC | 退出皋序 | 党郚 | +| Ctrl+Q | 退出皋序 | 党郚 | +| TAB | 切换倩气预讟 | main.py / Automatic_model / Switch_automatic | +| PageUp | 䞊䞀䞪倩气预讟 | world_Coordinate.py | +| PageDown | 䞋䞀䞪倩气预讟 | world_Coordinate.py | + +#### 手劚驟驶暡匏仅 `Automatic_model` +| 按键 | 功胜 | +| ---- | ---- | +| C | 切换手劚/自劚驟驶暡匏 | +| W | 油闚加速 | +| S | 刹蜊减速 | +| A | 巊蜬向 | +| D | 右蜬向 | + +## 工䜜原理 +### 亀通灯检测䞎响应流皋 +``` + CARLA 仿真䞖界 + │ + â–Œ + ┌──────────────────┐ + │ 获取䞖界䞭的亀通灯 │ + └────────┬─────────┘ + │ + â–Œ + ┌──────────────────┐ + │ 刀断亀通灯状态 │ + │ (红/黄/绿) │ + └────────┬─────────┘ + │ + ┌─────┮─────┐ + â–Œ â–Œ + 红灯 🛑 绿灯 🟢 + │ │ + â–Œ â–Œ + 刹蜊=1.0 油闚恢倍 + 停蜊等埅 正垞行驶 +``` +1. 客户端通过 CARLA API 获取䞖界䞭所有亀通灯 Actor +2. 根据蜊蟆䜍眮和朝向刀断前方是吊有亀通灯 +3. 检测亀通灯的 state 属性Red / Yellow / Green +4. 红灯/黄灯时讟眮 brake = 1.0throttle = 0.0 +5. 绿灯时恢倍正垞行驶由 BehaviorAgent 计算控制指什 + +### 自劚富航流皋 +``` + ┌────────────────┐ + │ 随机选择出生点 │ + └───────┬────────┘ + │ + â–Œ + ┌────────────────┐ + │ 生成蜊蟆 Actor │ ← vehicle.* 蓝囟过滀 + └───────┬────────┘ + │ + â–Œ + ┌────────────────┐ + │ 讟眮富航目标 │ ← 随机选择 spawn point + └───────┬────────┘ + │ + â–Œ + ┌────────────────┐ ┌────────────────┐ + │ BehaviorAgent │────►│ 计算控制指什 │ + │ run_step() │ │ (throttle/steer │ + └───────┬────────┘ │ /brake) │ + │ └────────────────┘ + â–Œ + ┌────────────────┐ + │ 应甚控制到蜊蟆 │ + └───────┬────────┘ + │ + â–Œ + ┌───────────────┐ 吊 + │ 是吊到蟟目标 │──────────┘ + └───────┬───────┘ ↑ + 是 │ │ + â–Œ │ + ┌────────────────┐ │ + │ 自劚讟眮新目标 │─────┘ + └────────────────┘ +``` + +### 手劚/自劚切换流皋 +``` + ┌─────────────┐ + │ 皋序启劚 │ + │ 默讀自劚 │ + └──────┬──────┘ + │ + ┌──────────┮──────────┐ + â–Œ â–Œ + ┌────────────┐ ┌────────────┐ + │ 自劚暡匏 │ │ 手劚暡匏 │ + │ │ C │ │ + │ Agent 计算 │◄──────►│ WASD 控制 │ + │ 控制指什 │ C │ 油闚/刹蜊 │ + │ │◄──────►│ /蜬向 │ + └────────────┘ └────────────┘ +``` + +## 配眮诎明 +### CARLA 安装路埄 +劂 CARLA 安装路埄非默讀需修改各 Python 脚本顶郚的路埄变量 +```python +CARLA_ROOT = r"D:\carla0.9.15" # 修改䞺䜠的 CARLA 安装路埄 +``` +涉及文件main.py、automatic_control.py、Add_weather_switching.py、Automatic_model、Switch_automatic + +### 䞀键启劚脚本路埄 +修改 `start_carla_sim.bat` 䞭的内容 +```bat +:: CARLA 仿真噚路埄 +start "" "D:\carla0.9.15\CarlaUE4.exe" -quality-level=Low + +:: Python 解释噚路埄 +"D:\carla_automatic1\.venv\Scripts\python.exe" + +:: 自劚驟驶脚本路埄 +"D:\carla_automatic1\automatic_control.py" +``` + +### 分蟚率调敎 +呜什行方匏 +```bash +python main.py --res 1920x1080 +``` +代码方匏修改 `main()` 凜数内默讀参数 +```python +argparser.add_argument('--res', default='1920x1080') +``` + +### CARLA 服务噚性胜调䌘 +| 参数 | 诎明 | 瀺䟋 | +| ---- | ---- | ---- | +| -quality-level=Low | 䜎画莚性胜䌘先 | CarlaUE4.exe -quality-level=Low | +| -quality-level=Epic | 高画莚视觉䌘先 | CarlaUE4.exe -quality-level=Epic | +| -world-port=2000 | 指定通信端口 | CarlaUE4.exe -world-port=3000 | +| -carla-rpc-port=3000 | 指定 RPC 端口 | CarlaUE4.exe -carla-rpc-port=3000 | + +## 垞见问题 +### Q1: 启劚脚本报错 `ModuleNotFoundError: No module named 'carla'` +原因CARLA PythonAPI 路埄未正确配眮。 +解决 +1. 确讀 `CARLA_ROOT` 路埄指向正确的 CARLA 安装目圕 +2. 确讀目圕䞋存圚 `PythonAPI/carla/` 文件倹 +3. Python 3.9+ 甚户䜿甚 automatic_control.py 等已适配版本 + +### Q2: 连接 CARLA 服务噚超时 `RuntimeError: time-out` +原因仿真噚未启劚或未就绪。 +解决 +1. 先启劚 CarlaUE4.exe等埅控制台星瀺 "ready" +2. 确讀端口䞀臎默讀 2000 +3. 增倧超时时闎`client.set_timeout(30.0)` + +### Q3: Python 3.9 例 egg 富入报错 +原因CARLA 旧版 .egg 文件䞎 Python 3.9 䞍兌容。 +解决䜿甚已适配版本脚本内眮路埄枅理逻蟑 +```python +for path in list(sys.path): + if "carla/dist" in path and path.endswith(".egg"): + sys.path.remove(path) +``` + +### Q4: 画面卡顿 / FPS 过䜎 +1. 䜿甚䜎画莚暡匏启劚`CarlaUE4.exe -quality-level=Low` +2. 降䜎分蟚率`python main.py --res 800x600` +3. 关闭䞍必芁的后台皋序 +4. 曎新 GPU 驱劚 + +### Q5: 富入 BehaviorAgent 报错 `ModuleNotFoundError` +原因猺少 CARLA Agent 暡块。 +解决确讀 CARLA 目圕䞋存圚 `PythonAPI/carla/agents/`也可改甚 `world_Coordinate.py` 的 SimpleAutoAgent。 + +### Q6: 碰撞后蜊蟆䞍恢倍行驶 +原因碰撞䌠感噚仅做通知无恢倍逻蟑。 +解决圚碰撞回调䞭补充逻蟑实现停蜊后重新规划路埄。 + +## 扩展匀发指南 +### 添加新䌠感噚 +参照现有䌠感噚类实现圚 `World.restart()` 䞭挂蜜 +```python +class MyCustomSensor(object): + def __init__(self, parent_actor, hud): + bp = parent_actor.get_world().get_blueprint_library().find('sensor.other.obstacle') + self.sensor = parent_actor.get_world().spawn_actor( + bp, carla.Transform(), attach_to=parent_actor) + self.sensor.listen(lambda event: self._on_event(event)) + + def _on_event(self, event): + # 倄理䌠感噚数据 + pass +``` + +可甚䌠感噚 Blueprint +| Blueprint ID | 诎明 | +| ---- | ---- | +| sensor.camera.rgb | RGB 摄像倎 | +| sensor.camera.depth | 深床摄像倎 | +| sensor.camera.semantic_segmentation | 语义分割摄像倎 | +| sensor.lidar.ray_cast | 激光雷蟟 | +| sensor.other.radar | 毫米波雷蟟 | +| sensor.other.imu | 惯性测量单元 | +| sensor.other.obstacle | 障碍物检测 | + +### 切换地囟 +```python +# 加蜜指定地囟 +client.load_world('Town03') +# 可甚地囟Town01 ~ Town10HD +# Town01: 简单小镇适合测试 +# Town03: 圆环亀叉路口 +# Town05: 高架桥䞎隧道 +# Town10HD: 高枅城垂 +``` + +### 添加曎倚蜊蟆 +```python +# 特定蜊型 +argparser.add_argument('--filter', default='vehicle.tesla.model3') + +# 所有䞀蜮蜊 +argparser.add_argument('--filter', default='vehicle.*.bike') + +# 所有摩托蜊 +argparser.add_argument('--filter', default='vehicle.*.motorcycle') +``` + +### 自定义 SimpleAutoAgent +修改 `world_Coordinate.py` 内的控制逻蟑可接入 PID、纯跟螪、深床孊习等算法 +```python +class SimpleAutoAgent: + def run_step(self): + control = carla.VehicleControl() + # 自定义控制逻蟑 + return control +``` + +## 曎新日志 +### v1.0.0 +- 基础自劚驟驶功胜main.py +- 碰撞/蜊道偏犻/GNSS 䌠感噚集成 +- 倩气切换功胜 + +### v1.1.0 +- Python 3.9 适配修倍 .egg 富入冲突 +- 新增 automatic_control.py / Add_weather_switching.py +- 新增 Switch_automatic 脚本 + +### v1.2.0 +- 完敎功胜版 Automatic_model手劚/自劚切换、增区 HUD +- 极简独立版 world_Coordinate.py自实现 SimpleAutoAgent +- Windows 䞀键启劚脚本 start_carla_sim.bat + +## 讞可证 +MIT License — 基于 Intel Labs 原始代码适配修改。 +诊见 LICENSE + +## 臎谢 +- CARLA Simulator — 匀源自劚驟驶仿真平台 +- Intel Labs — CARLA 原始代码莡献 +- 原始代码䜜者German Ros (german.ros@gmail.com) +- CARLA 文档 — API 参考䞎教皋 diff --git a/docs/index.md b/docs/index.md index 1283021a0a..909540c387 100644 --- a/docs/index.md +++ b/docs/index.md @@ -75,6 +75,9 @@ title: 䞻页 [__基于自监督孊习䞎PPO区化孊习的自劚驟驶仿真项目__](./autonomous_driving/README.md) - 基于CARLA的SSL+RL自劚驟驶仿真系统 +[__CARLA 0.9.15 自劚驟驶䞎蜊道保持控制系统__](./carla_driving/README.md) + + ## 规划 @@ -109,4 +112,4 @@ title: 䞻页 [__CARLA IMU 数据采集平台__](./carla_imu/carla_imu.md) — CARLA惯性测量单元数据采集䞎可视化驟驶平台匀发汇报文档 -[__setup_tool暡块汇报文档__](./setup_tool/report.md) - setup_tool 暡块背景、改进内容、运行方匏䞎效果总结 \ No newline at end of file +[__setup_tool暡块汇报文档__](./setup_tool/report.md) - setup_tool 暡块背景、改进内容、运行方匏䞎效果总结