自动驾驶—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)仿真平台。

相关推荐
工藤学编程23 分钟前
零基础学AI大模型之LangChain智能体执行引擎AgentExecutor
人工智能·langchain
图生生27 分钟前
基于AI的商品场景图批量生成方案,助力电商大促效率翻倍
人工智能·ai
说私域28 分钟前
短视频私域流量池的变现路径创新:基于AI智能名片链动2+1模式S2B2C商城小程序的实践研究
大数据·人工智能·小程序
yugi98783831 分钟前
用于图像分类的EMAP:概念、实现与工具支持
人工智能·计算机视觉·分类
aigcapi35 分钟前
AI搜索排名提升:GEO优化如何成为企业增长新引擎
人工智能
彼岸花开了吗40 分钟前
构建AI智能体:八十、SVD知识整理与降维:从数据混沌到语义秩序的智能转换
人工智能·python·llm
MM_MS40 分钟前
Halcon图像锐化和图像增强、窗口的相关算子
大数据·图像处理·人工智能·opencv·算法·计算机视觉·视觉检测
韩师傅1 小时前
前端开发消亡史:AI也无法掩盖没有设计创造力的真相
前端·人工智能·后端
AI大佬的小弟1 小时前
【小白第一课】大模型基础知识(1)---大模型到底是啥?
人工智能·自然语言处理·开源·大模型基础·大模型分类·什么是大模型·国内外主流大模型
lambo mercy1 小时前
无监督学习
人工智能·深度学习