自动驾驶—CARLA仿真(22)manual_control_steeringwheel demo

📌 测试用例

PythonAPI/examples/manual_control_steeringwheel.py

支持 Logitech G29 方向盘的驾驶控制客户端,用于:

  1. 通过真实赛车方向盘控制车辆
  2. 提供精确的油门/刹车/转向输入映射
  3. 保留键盘备用控制

适用于 驾驶模拟器开发、人机交互研究、沉浸式测试


🔑 主要模块解析

1. DualControl 类:方向盘 + 键盘双模控制
  • 核心职责 :同时处理 方向盘输入键盘事件

  • 方向盘初始化

    python 复制代码
    pygame.joystick.init()
    self._joystick = pygame.joystick.Joystick(0)
    self._joystick.init()
  • 配置文件加载

    python 复制代码
    self._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 查看设备输入值

🎯 典型使用流程

  1. 连接 Logitech G29 方向盘

  2. 运行校准工具

    bash 复制代码
    sudo apt install jstest-gtk
    jstest-gtk
  3. 编辑 wheel_config.ini 匹配设备轴编号

  4. 启动脚本

    bash 复制代码
    python manual_control_steering_wheel.py
  5. 操作规范

    • 必须先踩刹车 才能启动车辆(安全机制)
    • 方向盘控制优先级高于键盘

⚠️ 技术点

  1. 非线性输入映射

    • 使用 对数/正切函数 模拟真实车辆响应特性
    • 避免简单线性映射导致的操控不自然
  2. 双模输入支持

    • 方向盘为主,键盘为辅(紧急情况备用)
    • 按钮功能覆盖常用操作(无需键盘)
  3. 生产级健壮性

    • 弱引用避免传感器回调循环依赖
    • 完善的异常处理和资源清理

✅ 总结

该脚本是 CARLA 专业驾驶模拟器的标准实现,展示了:

  1. 如何 集成真实赛车方向盘 实现高沉浸感控制
  2. 如何 处理非线性输入设备 提升操控真实性
  3. 如何 构建双模输入系统 兼顾灵活性与可靠性

💡 核心价值

驾驶行为研究HMI 开发自动驾驶人机共驾测试 提供了开箱即用的硬件在环(HIL)仿真平台。

相关推荐
余俊晖2 小时前
使用Agent做本体匹配的架构设计
人工智能·语言模型·自然语言处理
科士威传动2 小时前
方形滚珠导轨如何保障高速定位精度?
人工智能·科技·机器人·自动化·制造
SmartBrain2 小时前
洞察:阿里通义DeepResearch 技术
大数据·人工智能·语言模型·架构
声声codeGrandMaster2 小时前
AI之模型提升
人工智能·pytorch·python·算法·ai
lpfasd1233 小时前
AI Phone下的各类App该何去何从
人工智能
玖日大大3 小时前
LangGraph 深度解析:构建强大智能体的新一代框架
人工智能·语言模型·架构·langchain
GISer_Jing3 小时前
Nano Banana:AI图像生成与编辑新标杆
前端·javascript·人工智能
新元代码4 小时前
Function Calling的现状和未来的发展
人工智能
jinxinyuuuus4 小时前
订阅指挥中心:数据可移植性、Schema设计与用户数据主权
数据仓库·人工智能