自动驾驶—CARLA仿真(7)vehicle_physics demo

PythonAPI/examples/vehicle_physics.py

carla_vehicle_physics

这是一个 车辆物理特性演示示例 ,用于展示 CARLA 中两种施加外力的方式------冲量(Impulse)力(Force) ------对车辆运动状态的影响,并验证二者在特定条件下的等效性。


🔑 主要模块解析

  • 功能 :输出当前仿真帧中车辆的关键物理量:
    • 帧号、仿真时间
    • 加速度(x, y, z)
    • 速度(x, y, z)
    • 位置(x, y, z)
  • 用途:便于观察施加冲量/力后车辆的动态响应(如垂直方向的跳起)。

2. wait(world, frames=100):同步等待工具函数
  • 功能 :推进仿真指定帧数(frames),每帧调用 world.tick()
  • 作用
    • 让车辆在施加外力前静止稳定
    • 在每次测试后留出足够时间观察效果
    • 重置状态前确保车辆已停止运动

3. 仿真环境初始化
python 复制代码
settings.fixed_delta_seconds = 0.1
settings.synchronous_mode = True
world.apply_settings(settings)
  • 启用 同步模式(确保精确控制仿真步长)
  • 设置固定时间步长 Δt = 0.1 秒(用于后续冲量与力的换算)

4. 车辆生成与视角设置
c 复制代码
vehicle_bp = blueprint_library.filter(arg.filter)[0]
  • 从蓝图库中按 --filter 参数(默认 "model3")选择车辆;
c 复制代码
vehicle_transform.location.z += 3
  • 将出生点 Z 坐标抬高 3 米(避免与地面碰撞干扰)
c 复制代码
spectator_transform.location += vehicle_transform.get_forward_vector() * 20
  • 设置观察者(Spectator)位于车辆后方 20 米,面向车辆(便于观察垂直跳动)

5. 核心测试逻辑:冲量 vs 力
✅ 步骤一:施加冲量(Impulse)
python 复制代码
impulse = 10 * car_mass  # 单位:N·s(牛·秒)
vehicle.add_impulse(carla.Vector3D(0, 0, impulse))
  • 物理意义:瞬间给予车辆一个向上的动量变化
  • 效果:车辆垂直向上"跳起",随后受重力下落
✅ 步骤二:施加等效力(Force)
python 复制代码
force = impulse / delta  # = (10 * mass) / 0.1 = 100 * mass (单位:N)
vehicle.add_force(carla.Vector3D(0, 0, force))
  • 关键说明 (来自注释): add_force 本应用于持续作用的力 ,但此处为演示等效性,

    将冲量 I 等效为在单个仿真步长 Δt 内施加的恒力:F = I / Δt

  • 预期效果 :与冲量测试产生几乎相同的初始跳起效果
✅ 状态重置机制

每次测试后执行:

python 复制代码
vehicle.set_transform(vehicle_transform)      # 重置位置/朝向
vehicle.set_target_velocity(carla.Vector3D(0, 0, 0))  # 清零速度
wait(world)                                  # 等待稳定
  • 确保两次测试初始条件完全一致,结果可比

6. 参数解析与入口
  • 支持命令行参数:
    • --host:CARLA 服务器 IP(默认 localhost
    • --port:端口(默认 2000
    • --filter:车辆筛选关键字(默认 "model3",实际应为 "vehicle.*model3*",但脚本取第一个匹配项)
  • 使用 try...finally 确保退出时恢复原始仿真设置并销毁车辆

🎯 核心物理概念演示

方法 API 物理定义 适用场景
冲量(Impulse) add_impulse(vector) 瞬时动量变化 I = Δp = F·Δt 碰撞、爆炸、瞬间推力
力(Force) add_force(vector) 持续作用力 F = dp/dt 引擎推力、风阻、持续外力

💡 本脚本通过 F = I / Δt单步内模拟等效冲量,直观展示二者关系。


✅ 总结:脚本核心价值

该测试用例是 CARLA 车辆物理控制 API 的教学范例,重点演示:

  1. 如何在同步模式下精确控制外力施加
  2. add_impulseadd_force 的使用区别与联系
  3. 通过状态重置实现可重复的物理实验
  4. 利用质量、时间步长进行物理量换算

适用于开发者理解 CARLA 的底层物理交互机制。

相关推荐
奔跑吧树袋熊15 小时前
AI与开发生态的深度融合:一场属于2026年的编程革命
人工智能
格林威15 小时前
工业相机图像高速存储(C++版):RAID 0 NVMe SSD 阵列方法,附堡盟相机实战代码!
开发语言·c++·人工智能·数码相机·opencv·计算机视觉·视觉检测
深小乐15 小时前
从 AI Skills 学实战技能(三):从 Mermaid Diagrams Skill,拆解 AI 生成图表实现过程
人工智能
irpywp16 小时前
Impeccable:赋予AI顶级设计美学
人工智能·github
佳木逢钺16 小时前
ROS Noetic 中自定义编译和替换 cv_bridge 的完整指南
人工智能·bash·ros
lrh12280016 小时前
深度解析Attention-Residuals:当注意力机制邂逅残差网络,会擦出怎样的火花?
人工智能
Java面试题总结16 小时前
Spring AI 初步集成(2)-添加记忆
java·人工智能·spring
twc82916 小时前
MCP协议核心解析:标准化AI工具调用的设计与实践
人工智能·大模型·mcp·ai工具调用
外参财观16 小时前
圆心科技IPO再折戟:重资产模式承压,AI叙事能否破局?
人工智能·科技
智算菩萨16 小时前
ChatGPT在非洲主要国家教育中的应用:效益、接受度与伦理挑战——基于2022-2024年文献的系统综述精读
论文阅读·人工智能·gpt·深度学习·ai·chatgpt·论文笔记