📌 测试用例
PythonAPI/examples/manual_control_steeringwheel.py
支持 Logitech G29 方向盘的驾驶控制客户端,用于:
- 通过真实赛车方向盘控制车辆
- 提供精确的油门/刹车/转向输入映射
- 保留键盘备用控制
适用于 驾驶模拟器开发、人机交互研究、沉浸式测试。
🔑 主要模块解析
1. DualControl 类:方向盘 + 键盘双模控制
-
核心职责 :同时处理 方向盘输入 和 键盘事件
-
方向盘初始化 :
pythonpygame.joystick.init() self._joystick = pygame.joystick.Joystick(0) self._joystick.init() -
配置文件加载 :
pythonself._parser.read('wheel_config.ini') # 读取设备轴/按钮映射 self._steer_idx = int(self._parser.get('G29 Racing Wheel', 'steering_wheel')) self._throttle_idx = int(self._parser.get('G29 Racing Wheel', 'throttle')) ...
✅ 支持自定义方向盘配置(通过
wheel_config.ini)
2. 方向盘输入处理(核心创新)
python
def _parse_vehicle_wheel(self):
jsInputs = [float(self._joystick.get_axis(i)) for i in range(numAxes)]
# 转向:线性映射 + 正切校正(模拟真实转向比)
steerCmd = K1 * math.tan(1.1 * jsInputs[self._steer_idx])
# 油门/刹车:对数映射(模拟踏板非线性响应)
throttleCmd = K2 + (2.05 * math.log10(-0.7 * jsInputs[self._throttle_idx] + 1.4) - 1.2) / 0.92
brakeCmd = ... # 同理
self._control.steer = steerCmd
self._control.throttle = throttleCmd
self._control.brake = brakeCmd
- 物理真实性 :
- 转向使用 正切函数 模拟低速高灵敏度、高速低灵敏度
- 油门/刹车使用 对数函数 模拟踏板行程非线性
- 安全限制 :输出值钳制在
[0, 1]范围内
3. 方向盘按钮映射
| 按钮 | 功能 |
|---|---|
| Button 0 | 重生车辆(Backspace) |
| Button 1 | 切换 HUD(F1) |
| Button 2 | 切换摄像头视角(Tab) |
| Button 3 | 切换天气(C) |
| Reverse Button | 切换倒挡(Q) |
| Button 23 | 切换传感器(`) |
⚠️ 注意:具体按钮编号需通过
jstest-gtk工具校准
4. World 类:基础仿真管理
- 车辆生成 :随机选择符合
--filter的车辆 - 传感器集成 :
- 碰撞检测(
CollisionSensor) - 车道入侵(
LaneInvasionSensor) - GNSS 定位(
GnssSensor) - 多摄像头/LiDAR(
CameraManager)
- 碰撞检测(
- 天气切换:循环预设天气模式
5. HUD 系统:专业级监控界面
实时显示关键信息:
- 车辆状态:速度、航向角、油门/刹车/转向量
- 定位数据:GNSS 坐标、高度
- 环境感知 :
- 碰撞历史强度曲线
- 周围车辆列表(距离排序)
💡 通过 进度条+数值 直观展示控制量
6. 配置文件 wheel_config.ini(关键依赖)
示例内容:
ini
[G29 Racing Wheel]
steering_wheel = 0
throttle = 2
brake = 3
reverse = 4
handbrake = 5
- 作用:将物理设备的轴/按钮映射到逻辑功能
- 校准工具 :Ubuntu 下使用
jstest-gtk查看设备输入值
🎯 典型使用流程
-
连接 Logitech G29 方向盘
-
运行校准工具 :
bashsudo apt install jstest-gtk jstest-gtk -
编辑
wheel_config.ini匹配设备轴编号 -
启动脚本 :
bashpython manual_control_steering_wheel.py -
操作规范 :
- 必须先踩刹车 才能启动车辆(安全机制)
- 方向盘控制优先级高于键盘
⚠️ 技术点
-
非线性输入映射
- 使用 对数/正切函数 模拟真实车辆响应特性
- 避免简单线性映射导致的操控不自然
-
双模输入支持
- 方向盘为主,键盘为辅(紧急情况备用)
- 按钮功能覆盖常用操作(无需键盘)
-
生产级健壮性
- 弱引用避免传感器回调循环依赖
- 完善的异常处理和资源清理
✅ 总结
该脚本是 CARLA 专业驾驶模拟器的标准实现,展示了:
- 如何 集成真实赛车方向盘 实现高沉浸感控制
- 如何 处理非线性输入设备 提升操控真实性
- 如何 构建双模输入系统 兼顾灵活性与可靠性
💡 核心价值 :
为 驾驶行为研究 、HMI 开发 、自动驾驶人机共驾测试 提供了开箱即用的硬件在环(HIL)仿真平台。