diff --git a/chrono/code/PythonAPI/IMU_collection.py b/chrono/code/PythonAPI/IMU_collection.py new file mode 100644 index 00000000..1bcf68cb --- /dev/null +++ b/chrono/code/PythonAPI/IMU_collection.py @@ -0,0 +1,425 @@ +#!/usr/bin/env python +# Copyright (c) 2019 Carnegie Mellon University +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +""" +Welcome to CARLA manual control. + +Use ARROWS or WASD keys for control. + + W : throttle + S : brake + A/D : steer left/right + Q : toggle reverse + Space : hand-brake + P : toggle autopilot + M : toggle manual transmission + ,/. : gear up/down + CTRL + W : toggle constant velocity mode at 60 km/h + + L : toggle next light type + SHIFT + L : toggle high beam + Z/X : toggle right/left blinker + I : toggle interior light + + TAB : change sensor position + ` or N : next sensor + [1-9] : change to sensor [1-9] + G : toggle radar visualization + C : change weather (Shift+C reverse) + Backspace : change vehicle + + V : Select next map layer (Shift+V reverse) + B : Load current selected map layer (Shift+B to unload) + + R : toggle recording images to disk + + CTRL + R : toggle recording of simulation (replacing any previous) + CTRL + P : start replaying last recorded simulation + CTRL + + : increments the start time of the replay by 1 second (+SHIFT = 10 seconds) + CTRL + - : decrements the start time of the replay by 1 second (+SHIFT = 10 seconds) + + F1 : toggle HUD + H/? : toggle help + ESC : quit + + F2 : 启动/停止 IMU数据录制 +""" +from __future__ import print_function + +# ============================================================================== +# -- imports ------------------------------------------------------------------- +# ============================================================================== +import glob +import os +import sys +import csv +import time +import datetime +import collections +import random +import math + +try: + sys.path.append(glob.glob('../carla/dist/carla-*%d.%d-%s.egg' % ( + sys.version_info.major, + sys.version_info.minor, + 'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0]) +except IndexError: + pass + +import carla +import pygame +from pygame.locals import * + + +# ============================================================================== +# -- IMU 数据录制类 ------------------------------------------------------------- +# ============================================================================== +class IMUDataCollector: + def __init__(self, save_dir='imu_records'): + self.imu_data = [] + self.save_dir = save_dir + self.is_recording = False + os.makedirs(self.save_dir, exist_ok=True) + self.file_name = f"imu_recording_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.csv" + self.file_path = os.path.join(self.save_dir, self.file_name) + + def add_imu_data(self, timestamp, accel_x, accel_y, accel_z, gyro_x, gyro_y, gyro_z, compass, vehicle_id): + if self.is_recording: + self.imu_data.append({ + 'timestamp': timestamp, + 'vehicle_id': vehicle_id, + 'accel_x': accel_x, + 'accel_y': accel_y, + 'accel_z': accel_z, + 'gyro_x': gyro_x, + 'gyro_y': gyro_y, + 'gyro_z': gyro_z, + 'compass': compass, + 'record_time': datetime.datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S.%f') + }) + + def start_recording(self): + self.is_recording = True + self.imu_data.clear() + print(f"[IMU] 开始录制: {self.file_path}") + return "IMU 录制中..." + + def stop_recording(self): + self.is_recording = False + if not self.imu_data: + print("[IMU] 无数据可保存") + return "无IMU数据" + with open(self.file_path, 'w', newline='', encoding='utf-8') as f: + fieldnames = ['timestamp', 'record_time', 'vehicle_id', 'accel_x', 'accel_y', 'accel_z', 'gyro_x', 'gyro_y', + 'gyro_z', 'compass'] + writer = csv.DictWriter(f, fieldnames=fieldnames) + writer.writeheader() + writer.writerows(self.imu_data) + print(f"[IMU] 保存成功,共 {len(self.imu_data)} 条数据") + return f"保存成功: {len(self.imu_data)} 条" + + +# ============================================================================== +# -- 全局工具函数 ---------------------------------------------------------------- +# ============================================================================== +def get_actor_display_name(actor, truncate=250): + name = ' '.join(actor.type_id.replace('_', '.').title().split('.')[1:]) + return (name[:truncate - 1] + u'\u2026') if len(name) > truncate else name + + +# ============================================================================== +# -- World 世界管理类 ------------------------------------------------------------ +# ============================================================================== +class World(object): + def __init__(self, carla_world, hud, args, imu_collector): + self.world = carla_world + self.hud = hud + self.player = None + self.collision_sensor = None + self.lane_invasion_sensor = None + self.gnss_sensor = None + self.imu_sensor = None + self.camera_manager = None + self.imu_collector = imu_collector + self._weather_index = 0 + self._actor_filter = args.filter + self.restart() + self.world.on_tick(hud.on_world_tick) + + def restart(self): + blueprint = random.choice(self.world.get_blueprint_library().filter(self._actor_filter)) + blueprint.set_attribute('role_name', 'hero') + spawn_point = random.choice(self.world.get_map().get_spawn_points()) + self.player = self.world.try_spawn_actor(blueprint, spawn_point) + + self.collision_sensor = CollisionSensor(self.player, self.hud) + self.lane_invasion_sensor = LaneInvasionSensor(self.player, self.hud) + self.gnss_sensor = GnssSensor(self.player) + self.imu_sensor = IMUSensor(self.player, self.imu_collector) + self.camera_manager = CameraManager(self.player, self.hud) + + def tick(self, clock): + self.hud.tick(self, clock) + + def render(self, display): + self.camera_manager.render(display) + self.hud.render(display) + + def destroy(self): + if self.camera_manager: + self.camera_manager.sensor.destroy() + sensors = [self.collision_sensor, self.lane_invasion_sensor, self.gnss_sensor, self.imu_sensor] + for s in sensors: + if s and s.sensor: + s.sensor.destroy() + if self.player: + self.player.destroy() + + +# ============================================================================== +# -- 键盘控制类 ------------------------------------------------------------------ +# ============================================================================== +class KeyboardControl(object): + def __init__(self, world, start_in_autopilot): + self.world = world + self.hud = world.hud + self._autopilot_enabled = start_in_autopilot + self.imu_collector = world.imu_collector + self._control = carla.VehicleControl() + world.player.set_autopilot(self._autopilot_enabled) + + def parse_events(self, client, world, clock): + for event in pygame.event.get(): + if event.type == QUIT: + return True + elif event.type == KEYUP: + if event.key == K_ESCAPE: + return True + # F2 录制IMU数据 + elif event.key == K_F2: + if self.imu_collector.is_recording: + msg = self.imu_collector.stop_recording() + else: + msg = self.imu_collector.start_recording() + self.hud.notification(msg) + # 其他快捷键保留原版功能 + elif event.key == K_p: + self._autopilot_enabled = not self._autopilot_enabled + world.player.set_autopilot(self._autopilot_enabled) + self.hud.notification('Autopilot %s' % ('On' if self._autopilot_enabled else 'Off')) + + # 基础驾驶控制 + keys = pygame.key.get_pressed() + self._control.throttle = 1.0 if keys[K_w] else 0.0 + self._control.brake = 1.0 if keys[K_s] else 0.0 + self._control.steer = -0.5 if keys[K_a] else (0.5 if keys[K_d] else 0.0) + world.player.apply_control(self._control) + return False + + +# ============================================================================== +# -- HUD 显示类 ----------------------------------------------------------------- +# ============================================================================== +class HUD(object): + def __init__(self, width, height): + self.dim = (width, height) + self._notifications = FadingText(pygame.font.Font(None, 20), (width, 40), (0, height - 40)) + self.server_fps = 0 + self.simulation_time = 0 + + def on_world_tick(self, timestamp): + self.simulation_time = timestamp.elapsed_seconds + + def tick(self, world, clock): + self._notifications.tick(world, clock) + + def notification(self, text, seconds=2.0): + self._notifications.set_text(text, seconds=seconds) + + def render(self, display): + self._notifications.render(display) + + +# ============================================================================== +# -- 传感器类 ------------------------------------------------------------------- +# ============================================================================== +class CollisionSensor(object): + def __init__(self, parent_actor, hud): + self.sensor = None + self.history = [] + self._parent = parent_actor + self.hud = hud + world = self._parent.get_world() + bp = world.get_blueprint_library().find('sensor.other.collision') + self.sensor = world.spawn_actor(bp, carla.Transform(), attach_to=self._parent) + self.sensor.listen(lambda event: self._on_collision(event)) + + def get_collision_history(self): + # 核心修复:default → defaultdict + history = collections.defaultdict(int) + for frame, intensity in self.history: + history[frame] += intensity + return history + + def _on_collision(self, event): + actor_type = get_actor_display_name(event.other_actor) + self.hud.notification('Collision with %r' % actor_type) + impulse = event.normal_impulse + intensity = math.sqrt(impulse.x ** 2 + impulse.y ** 2 + impulse.z ** 2) + self.history.append((event.frame, intensity)) + if len(self.history) > 4000: + self.history.pop(0) + + +class LaneInvasionSensor(object): + def __init__(self, parent_actor, hud): + self.sensor = None + world = parent_actor.get_world() + bp = world.get_blueprint_library().find('sensor.other.lane_invasion') + self.sensor = world.spawn_actor(bp, carla.Transform(), attach_to=parent_actor) + + +class GnssSensor(object): + def __init__(self, parent_actor): + self.sensor = None + self.lat = 0.0 + self.lon = 0.0 + world = parent_actor.get_world() + bp = world.get_blueprint_library().find('sensor.other.gnss') + self.sensor = world.spawn_actor(bp, carla.Transform(), attach_to=parent_actor) + + +class IMUSensor(object): + def __init__(self, parent_actor, data_collector): + self.sensor = None + self._parent = parent_actor + self.data_collector = data_collector + world = self._parent.get_world() + bp = world.get_blueprint_library().find('sensor.other.imu') + self.sensor = world.spawn_actor(bp, carla.Transform(), attach_to=self._parent) + self.sensor.listen(lambda data: self._imu_callback(data)) + + def _imu_callback(self, sensor_data): + self.data_collector.add_imu_data( + timestamp=sensor_data.timestamp, + accel_x=sensor_data.accelerometer.x, + accel_y=sensor_data.accelerometer.y, + accel_z=sensor_data.accelerometer.z, + gyro_x=sensor_data.gyroscope.x, + gyro_y=sensor_data.gyroscope.y, + gyro_z=sensor_data.gyroscope.z, + compass=math.degrees(sensor_data.compass), + vehicle_id=self._parent.id + ) + + +class CameraManager(object): + def __init__(self, parent_actor, hud): + self.sensor = None + self._parent = parent_actor + self.hud = hud + world = self._parent.get_world() + bp = world.get_blueprint_library().find('sensor.camera.rgb') + self.sensor = world.spawn_actor(bp, carla.Transform(carla.Location(x=-5, z=2.5)), attach_to=self._parent) + self.surface = None + + def render(self, display): + if self.surface: + display.blit(self.surface, (0, 0)) + + +# ============================================================================== +# -- 辅助UI类 ------------------------------------------------------------------- +# ============================================================================== +class FadingText(object): + def __init__(self, font, dim, pos): + self.font = font + self.dim = dim + self.pos = pos + self.seconds_left = 0 + self.surface = pygame.Surface(self.dim) + + def set_text(self, text, seconds=2.0): + self.text = text + self.seconds_left = seconds + + def tick(self, _, clock): + delta_seconds = 1e-3 * clock.get_time() + self.seconds_left = max(0.0, self.seconds_left - delta_seconds) + + def render(self, display): + if self.seconds_left > 0: + text_surf = self.font.render(self.text, True, (255, 255, 255)) + display.blit(text_surf, self.pos) + + +# ============================================================================== +# -- 主循环 --------------------------------------------------------------------- +# ============================================================================== +def game_loop(args): + pygame.init() + pygame.font.init() + world = None + imu_collector = IMUDataCollector() + + try: + client = carla.Client(args.host, args.port) + client.set_timeout(10.0) + display = pygame.display.set_mode((args.width, args.height), pygame.HWSURFACE | pygame.DOUBLEBUF) + hud = HUD(args.width, args.height) + world = World(client.get_world(), hud, args, imu_collector) + controller = KeyboardControl(world, args.autopilot) + clock = pygame.time.Clock() + + while True: + clock.tick_busy_loop(60) + if controller.parse_events(client, world, clock): + return + world.tick(clock) + world.render(display) + pygame.display.flip() + + finally: + if imu_collector.is_recording: + imu_collector.stop_recording() + if world: + world.destroy() + pygame.quit() + + +# ============================================================================== +# -- 主函数 --------------------------------------------------------------------- +# ============================================================================== +def main(): + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('--host', default='127.0.0.1') + parser.add_argument('--port', default=2000, type=int) + parser.add_argument('--res', default='1280x720') + parser.add_argument('--autopilot', action='store_true') + parser.add_argument('--filter', default='vehicle.*') + args = parser.parse_args() + args.width, args.height = map(int, args.res.split('x')) + game_loop(args) + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/chrono/content/chapter1.tex b/chrono/content/chapter1.tex deleted file mode 100644 index f96a97e5..00000000 --- a/chrono/content/chapter1.tex +++ /dev/null @@ -1,77 +0,0 @@ -\documentclass{hutbthesis} -\usepackage{ctex} -\usepackage{graphicx} -\usepackage{amsmath} -\usepackage{amsfonts} -\usepackage{amssymb} -\usepackage{enumitem} % 优化列表格式 - -% 论文基本信息(请根据实际情况替换占位符) -\title{基于Chrono与虚幻引擎的多体物理车辆仿真系统开发} -\author{你的姓名} -\advisor{你的指导教师 教授/副教授} -\major{车辆工程(或对应专业名称)} -\school{湖南工商大学} -\date{2025年5月} % 按实际提交日期修改 - -\begin{document} - -% 封面(模板自动生成,无需手动编写) -\maketitle - -% 摘要(若需补充,可在此处添加,示例如下) -\begin{abstract} -随着汽车工业向智能化、网联化转型,车辆研发对仿真测试的实时性、高精度和可视化需求日益迫切。本文聚焦于多体物理车辆仿真技术,提出基于Chrono多体动力学引擎与虚幻引擎的融合方案,解决传统仿真系统实时性差、可视化程度低等问题。首先阐述了研究背景与意义,梳理了国内外相关研究现状;其次明确了研究内容与技术路线;最后总结了研究创新点。本研究旨在构建高精度、高实时性的车辆仿真平台,为自动驾驶测试与车辆底盘性能验证提供技术支撑。 -\end{abstract} - -% 关键词(若需补充,可在此处添加) -\keywords{车辆仿真;Chrono引擎;虚幻引擎;多体动力学;实时可视化} - -% 第一章 绪论 -\chapter{绪论} -\section{研究背景与意义} -随着汽车工业向智能化、网联化深度转型,车辆研发流程对仿真测试的依赖度大幅提升。传统车辆多体物理仿真工具(如ADAMS、SIMPACK)虽具备高精度求解能力,但存在实时性差、可视化程度低、交互性弱等固有缺陷,难以满足自动驾驶海量场景测试、底盘性能动态验证等新兴研发需求。 - -虚幻引擎(Unreal Engine)作为主流的实时渲染引擎,凭借高保真场景渲染、灵活的人机交互设计能力,在工业可视化领域得到广泛应用;Chrono作为开源工程级多体动力学引擎,具备精准的车辆子系统建模、多物理场耦合求解能力,其精度可对标商业级仿真软件。将Chrono的高精度物理求解能力与虚幻引擎的高保真可视化优势相结合,构建“物理内核+可视化外壳”的车辆仿真系统,可实现“高精度动力学仿真-实时可视化交互-复杂场景适配”的协同,有效弥补传统仿真系统的短板,契合当前车辆研发数字化、实时化的发展趋势。 - -在此背景下,本研究聚焦于基于Chrono与虚幻引擎的多体物理车辆仿真系统开发,旨在解决多体动力学模型与可视化场景的实时同步、车辆核心子系统精准建模、复杂工况下仿真精度保障等关键技术问题,为车辆研发、自动驾驶测试等提供高效、可靠的仿真平台,具有重要的工程应用价值与学术研究意义。 - -\section{国内外研究现状} -\subsection{国外研究现状} -国外在车辆多体仿真与实时可视化融合领域起步较早,已形成较多阶段性成果。在多体动力学引擎应用方面,Chrono项目团队联合密歇根大学等科研机构,基于Chrono::Vehicle模块开发了多款车辆仿真模型,实现了悬架、轮胎等核心子系统的精准建模,并验证了其在越野车辆通过性仿真中的有效性;在虚实融合技术方面,通用、宝马等国际车企采用“专业物理引擎+实时渲染引擎”的技术路线,将Siemens Simcenter 3D与虚幻引擎结合,构建了车辆数字孪生仿真平台,成功应用于底盘性能标定与自动驾驶场景测试。 - -同时,国外学者在实时数据同步领域开展了深入研究,提出了基于UDP协议的轻量化数据传输方案,实现了物理仿真与可视化场景的毫秒级同步;在多物理场耦合方面,通过Chrono与OpenFOAM的协同,完成了车辆气动阻力与动力学性能的联合仿真,为复杂工况下的车辆性能分析提供了有力支撑。但国外研究多聚焦于高端车企的定制化方案,开源化、可复用的技术方案较少,难以满足通用化、低成本的研发需求。 - -\subsection{国内研究现状} -国内对车辆仿真技术的研究多集中于传统商业软件的应用与二次开发,例如基于ADAMS的车辆底盘性能仿真、基于MATLAB/Simulink的控制算法验证等。近年来,随着虚幻引擎、Chrono等开源工具的普及,国内高校与科研机构开始探索虚实融合的仿真技术路线:清华大学基于Chrono构建了电动车辆多体动力学模型,实现了动力传动系统的性能仿真;吉林大学将虚幻引擎与PhysX物理引擎结合,开发了自动驾驶场景仿真平台,完成了基础交通场景的可视化测试。 - -但国内研究仍存在明显不足:一是多数研究采用游戏级物理引擎(如PhysX),多体动力学求解精度不足,难以满足工程级应用需求;二是Chrono与虚幻引擎的协同多停留在简单数据传输层面,缺乏对同步延迟补偿、动力学精度校验的深入研究;三是场景建模与车辆物理行为的耦合度低,难以还原复杂路面、极端天气等真实环境对车辆性能的影响。因此,开发一款高精度、高实时性、高耦合度的基于Chrono与虚幻引擎的车辆仿真系统,具有明确的研究必要性。 - -\section{研究内容与方法} -\subsection{研究内容} -本研究旨在开发一套基于Chrono与虚幻引擎的多体物理车辆仿真系统,核心研究内容包括以下四个方面: -\begin{enumerate}[label=(\arabic{enumi})] - \item 高精度车辆多体动力学模型构建:基于Chrono::Vehicle模块,完成车架、悬架、转向、传动、轮胎等核心子系统的建模与集成,确保模型动力学响应精度对标实车测试数据。 - \item 多体仿真与可视化场景的协同架构设计:设计“Chrono物理层-数据传输层-虚幻可视化层”的三层架构,基于UDP/TCP协议实现数据双向传输,引入延迟补偿算法降低同步延迟。 - \item 复杂仿真场景建模与工况测试设计:基于虚幻引擎构建多类型测试场景(铺装路面、湿滑路面、越野地形等),设计典型测试工况(匀速行驶、紧急制动、蛇形试验等),制定仿真数据与实车数据的对比指标。 - \item 系统功能集成与优化:开发交互界面,优化Chrono求解器参数与虚幻引擎渲染效率,完成系统稳定性测试,确保长时间仿真无数据丢失、无状态失真。 -\end{enumerate} - -\subsection{研究方法} -本研究采用的技术方法如下: -\begin{enumerate}[label=(\arabic{enumi})] - \item 多体动力学建模方法:基于Chrono::Vehicle模块的标准化接口,采用参数化建模思想,实现各子系统的模块化构建与约束耦合。 - \item 实时同步技术:采用UDP协议实现轻量化数据传输,结合预测迭代法设计延迟补偿算法,保障物理仿真与可视化的实时一致性。 - \item 场景建模与渲染优化:利用虚幻引擎的地形编辑、材质系统与LOD(细节层次)技术,平衡场景保真度与渲染效率。 - \item 验证与优化方法:通过实车测试数据对标、典型工况仿真对比,验证系统精度;采用迭代优化策略,调整求解器参数与渲染设置,提升系统综合性能。 -\end{enumerate} - -\section{研究创新点} -本研究的创新点主要体现在以下三个方面: -\begin{enumerate}[label=(\arabic{enumi})] - \item 提出“高精度物理内核+高保真可视化外壳”的协同架构:将Chrono的工程级多体动力学求解能力与虚幻引擎的实时渲染优势深度融合,弥补了传统仿真系统“精度与实时性不可兼得”的短板。 - \item 构建多子系统精准耦合的车辆动力学模型:针对悬架、轮胎等核心子系统采用工程级模型(如Pac2002轮胎模型),结合土壤力学模块适配复杂地形,提升了仿真的工程实用性。 - \item 设计低延迟数据同步机制:引入预测迭代法补偿传输延迟,实现物理仿真与可视化场景的毫秒级同步(≤10ms),保障了仿真过程的一致性与交互性。 -\end{enumerate} - -\end{document} \ No newline at end of file diff --git "a/chrono/content/\350\256\272\346\226\207\346\217\220\347\272\262.tex" "b/chrono/content/\350\256\272\346\226\207\346\217\220\347\272\262.tex" deleted file mode 100644 index efe29e98..00000000 --- "a/chrono/content/\350\256\272\346\226\207\346\217\220\347\272\262.tex" +++ /dev/null @@ -1,86 +0,0 @@ -\documentclass{article} -\usepackage{ctex} % 支持中文 -\usepackage{enumitem} % 优化列表格式 -\usepackage{geometry} -\geometry{a4paper, margin=1.5cm} % 页面设置 - -\title{多体物理车辆仿真(Chrono+虚幻引擎)研究提纲} -\author{研究作者} -\date{} % 不显示日期,可自行添加 \date{202X年XX月} - -\begin{document} - -\maketitle -\tableofcontents % 生成目录(可选,编译两次生效) -\newpage - -\section{绪论} -\begin{enumerate}[label=1.\arabic*, itemsep=0.5ex] - \item 研究背景与意义 - \item 国内外研究现状 - \begin{enumerate}[label=1.2.\arabic*, itemsep=0.3ex] - \item 多体物理的车辆仿真Chrono仿真研究现状 - \item Chrono仿真通过虚幻引擎渲染的应用现状 - \end{enumerate} - \item 研究内容与方法 - \item 研究创新点 -\end{enumerate} - -\section{相关理论} -\begin{enumerate}[label=2.\arabic*, itemsep=0.5ex] - \item 多体物理学基础知识 - \begin{enumerate}[label=2.1.\arabic*, itemsep=0.3ex] - \item 多体物理基本概念 - \item 多体物理基础公式及原理 - \end{enumerate} - \item 多体物理结合Chrono仿真 - \begin{enumerate}[label=2.2.\arabic*, itemsep=0.3ex] - \item 轮式车辆下子系统(悬架、转向、传动、车轮) - \item 轮胎模型 - \item ISO车辆轴约定 - \end{enumerate} -\end{enumerate} - -\section{加入Chrono技术的仿真与原仿真技术对比差异} -\begin{enumerate}[label=3.\arabic*, itemsep=0.5ex] - \item 多体物理的车辆仿真Chrono优化模型 - \begin{enumerate}[label=3.1.\arabic*, itemsep=0.3ex] - \item Chrono仿真的车辆建模 - \item 刚体组件与约束组件的创建 - \item 多体物理Chrono仿真与虚幻引擎适配 - \end{enumerate} - \item 虚幻引擎环境渲染 - \begin{enumerate}[label=3.2.\arabic*, itemsep=0.3ex] - \item 开发环境配置 - \item 工程结构设计 - \end{enumerate} - \item 数据与实验设置 - \begin{enumerate}[label=3.3.\arabic*, itemsep=0.3ex] - \item 多体物理的车辆仿真与数据生成 - \item 评估指标设计 - \end{enumerate} -\end{enumerate} - -\section{实验与结果分析} -\begin{enumerate}[label=4.\arabic*, itemsep=0.5ex] - \item Chrono+虚幻引擎模型训练与验证 - \begin{enumerate}[label=4.1.\arabic*, itemsep=0.3ex] - \item 仿真过程与参数设置 - \item 仿真结果分析与优化效果展示 - \end{enumerate} - \item 仿真算例分析 - \begin{enumerate}[label=4.2.\arabic*, itemsep=0.3ex] - \item 单一场景仿真实验结果 - \item 不同车辆仿真的优化效果 - \item 对比传统仿真方法的优势 - \end{enumerate} - \item 仿真系统性能分析 -\end{enumerate} - -\section{结论与展望} -\begin{enumerate}[label=5.\arabic*, itemsep=0.5ex] - \item 结论 - \item 未来工作展望 -\end{enumerate} - -\end{document} \ No newline at end of file diff --git a/chrono/undergraduate/content/abstracten.tex b/chrono/undergraduate/content/abstracten.tex index 2029c716..8393ea27 100644 --- a/chrono/undergraduate/content/abstracten.tex +++ b/chrono/undergraduate/content/abstracten.tex @@ -2,12 +2,11 @@ \keywordsen{Multi-body physical simulation model; CarlaUE4 simulation platform; Chrono simulation algorithm} \begin{abstracten} - Multi-body system simulation has been widely applied in intelligent transportation and mechanical engineering, creating a strong demand for high-precision and high-efficiency physical simulation. However, traditional models suffer from low scene fidelity, insufficient dynamic solution accuracy, inaccurate constraint handling, and weak virtual-scene coupling, which fail to support complex systems such as vehicles and robotic arms. + Many-body system simulation has been applied to intelligent transportation and mechanical engineering, and thus there is a demand for high-precision, high-efficiency physical simulation. The previous model is a low-fidelity scene with poor dynamic behaviour, incorrect constraint handling, weak coupling with the virtual scene, etc., so it cannot be used for complex systems such as vehicles and robot arms. - This study constructs and optimizes a multi-body physical simulation model using the CarlaUE4 platform, Chrono algorithm, and PyCharm. After model development, algorithm tuning, and platform integration, comparative experiments show that the optimized model greatly improves motion trajectory accuracy and dynamic response speed, delivering more realistic and reliable results for complex scenarios. - - Finally, this paper summarizes the achievements and limitations of the proposed model. Future research will further refine simulation accuracy, constraint processing, and multi-platform collaboration to extend the application of multi-body simulation in engineering. + Modification of Study Constructs and Optimisation of a Multi-body Physical Simulation Model based on the Car-laUE4 Platform, Chrono Algorithm and PyCharm. After building the model, algorithms and platforms have been optimised, and through comparison experiments, it has been determined that the optimised model performs well in terms of the accuracy of motion trajectory and the speed of dynamic response; thus, more realistic and reliable results can be obtained in complex scenarios. + Finally, this paper presents the results and problems of the above model. In the future, more improvements will be made to the accuracy of the simulation, constraints and multi-platform cooperation in order to expand the applications of multi-body simulation in engineering. \end{abstracten} \ No newline at end of file diff --git a/chrono/undergraduate/content/abstractzh.tex b/chrono/undergraduate/content/abstractzh.tex index a12b169f..8ff324cb 100644 --- a/chrono/undergraduate/content/abstractzh.tex +++ b/chrono/undergraduate/content/abstractzh.tex @@ -4,12 +4,11 @@ %\categorycn{TP391} \begin{abstractzh} - 随着多体系统仿真技术在智慧交通、机械工程等领域的深度应用,对多体物理行为的高精度、高实时性仿真需求日益迫切。在实际工程场景中,传统多体物理仿真模型存在场景还原度不足、动力学求解精度偏低、多体约束处理不精准以及与虚拟场景耦合性差等问题,难以满足复杂多体系统(如车辆、机械臂)的仿真需求。 + 随着多体系统仿真的技术越来越广泛的应用到智慧交通、机械工程等各种各样的领域当中,对于一些要求非常高精度以及高效实时度的问题也变得越发突出起来。在现实中的实际工程应用当中,传统的多体物理仿真的模型有着不能完全还原场景的情况出现、求解的动力学精确程度不高、对多个体之间关系的处理不够到位、无法和虚拟环境建立起良好的联动等方面的问题,很难满足对于复杂多体系统的仿真要求。 - 本文主要基于CarlaUE4仿真平台、Chrono仿真算法及PyCharm软件进行实验设计与模型构建,为了实现多体物理仿真模型的高精度与高可靠性,在完成多体物理仿真模型的搭建、Chrono算法优化及平台耦合调试后,本文通过开展优化前后对照实验验证优化后仿真模型的性能提升——对比优化前后模型在多体运动轨迹、动力学响应速度等指标的差异,证明优化后的模型能够有效提升多体物理仿真的精度与真实性,满足复杂场景下的多体仿真需求。 - - 最终,本文在完成基于CarlaUE4与Chrono的多体物理仿真模型构建与优化后,总结了研究过程中取得的成果与存在的不足,展望未来,希望在未来的研究生求学生涯中,继续深入研究多体物理仿真的精度优化、复杂约束处理及多平台协同仿真技术,进一步完善多体物理仿真模型的性能,拓展其在更多工程领域的应用场景。 + 本文主要根据 CarlaUE4 仿真平台、Chrono 仿真算法以及 PyCharm 软件来进行实验的设计和模型的创建,并且为了得到高精度并且可靠的多体物理仿真模型,对多体物理仿真模型进行了搭建并完成了 Chrono 算法的优化和平台耦合调试之后,本文便开展了优化前后的对比实验来考察优化后的仿真实现的效果——分析优化前后模型的多体运动轨迹、动力学响应速度等方面的差别,从而证实经过优化以后所建立的仿真模型可以提高很多方面的准确性与真实性,符合复杂的多体环境应用的需求。 + 最后本文对在CarlaUE4和Chrono基础上所构建的多体物理仿真模型进行系统的建模、参数调整等,总结得到研究结果并指出目前的研究中存在的问题,在此基础上展望未来研究生职业生涯的发展方向,致力于通过不断的积累来提高多体物理仿真的精度、复杂约束的处理以及跨平台的协同仿真技术,并探索它在其他工程领域中的应用前景。 diff --git a/chrono/undergraduate/content/appendix.tex b/chrono/undergraduate/content/appendix.tex index b7b7a5e4..8e7d8009 100644 --- a/chrono/undergraduate/content/appendix.tex +++ b/chrono/undergraduate/content/appendix.tex @@ -137,3 +137,255 @@ \section{代码IMU收集.py} if __name__ == '__main__': main() \end{lstlisting} + +\section{Sedan TMeasy Tire.json} +\begin{lstlisting} +{ + "Name": "Sedan TMeasy Tire", + "Type": "Tire", + "Template": "TMeasyTire", + + // ------------------------------------------------ + // Tire design (REQUIRED) + + "Design": { + "Unloaded Radius [m]": 0.336423, + "Mass [kg]": 12.0, + "Inertia [kg.m2]": [ 0.156, 0.679, 0.156 ], + "Width [m]": 0.204978, + "Rim Radius [m]": 0.2032, + "Roundness of Cross Section": 0.1 + }, + + "Coefficient of Friction": 0.65, + + "Rolling Resistance Coefficients": [ 0.015, 0.015 ], + + // ------------------------------------------------ + // Vehicle type. + // Required only if tire specified with "load index" or "bearing capacity". + // Must be one of "Truck" or "Passenger" + + "Vehicle Type": "Passenger", + + // ------------------------------------------------ + // Load index specification. + // Takes priority over "bearing capacity" (used only if a full parameterization not provided) + + "Load Index": 108, + + // ------------------------------------------------ + // Bearing capacity specification. + // Lowest priority (used only if no other specification provided) + + "Maximum Bearing Capacity [N]": 10000, + + // ------------------------------------------------ + // Full parameter specification. + // Takes priority over both "Load Index" and "bearing capacity". + + "Parameters": { + "Tire Load": { + "Nominal Vertical Force [N]": 8562.8266, + "Maximum Vertical Force [N]": 29969.893 + }, + "Tire Stiffness": { + "Longitudinal [N/m]": 185004.42, + "Lateral [N/m]": 164448.37, + "Vertical [N/m]": [ 411121.0, 411121.00 ] + }, + "Tire Damping": { + "Longitudinal [Ns/m]": 3700, + "Lateral [Ns/m]": 3488, + "Vertical [Ns/m]": 3900 + }, + "Dynamic Radius Weighting Coefficients": [ 0.375, 0.75 ], + "Longitudinal": { + "Initial Slopes dFx/dsx [N]": [ 151447.29, 236412.79 ], + "Maximum Fx Load [N]": [ 7575.3614, 12808.276 ], + "Sliding Fx Load [N]": [ 4657.9208, 8625.3352 ], + "Slip sx at Maximum Fx": [ 0.12, 0.15 ], + "Slip sx where sliding begins": [ 0.9, 0.95 ] + }, + "Lateral": { + "Initial Slopes dFy/dsy [N]": [ 50931.693, 94293.847 ], + "Maximum Fy Load [N]": [ 6615.0404, 12509.947 ], + "Sliding Fy Load [N]": [ 6091.5092, 11443.875 ], + "Slip sy at Maximum Fy": [ 0.38786, 0.38786 ], + "Slip sy where sliding begins": [ 0.82534, 0.91309 ] + }, + "Aligning": { + "Normalized Trail at Zero Slip sy": [ 0.178, 0.19 ], + "Slip sy where Trail Changes Sign": [ 0.40726, 0.40726 ], + "Slip sy where Trail Tends to Zero": [ 0.82534, 0.91309 ] + } + }, + + // ------------------------------------------------ + // Visualization mesh (OPTIONAL) + + "Visualization": { + "Mesh Filename Left": "sedan/sedan_tire.obj", + "Mesh Filename Right": "sedan/sedan_tire.obj" + } + +} +\end{lstlisting} + +\section{Multi-Link.json} +\begin{lstlisting} + { + "Name": "Generic Multi-Link", + "Type": "Suspension", + "Template": "MultiLink", + + "Spindle" : + { + "Mass": 1.103, + "COM": [0.000, 0.80, 0.000], + "Inertia": [0.000478, 0.000478, 0.000496], + "Radius": 0.1, + "Width": 0.03 + }, + + "Upright": + { + "Mass": 3.201, + "COM": [0.000, 0.760, 0.000], + "Inertia": [0.0250, 0.00653, 0.0284], + "Radius": 0.02 + }, + + "Upper Arm": + { + "Mass": 4.744, + "COM": [-0.014, 0.490, 0.098], + "Inertia": [0.0237, 0.0294, 0.00612], + "Radius": 0.02, + "Location Chassis Front": [0.060, 0.397, 0.082], + "Location Chassis Back": [-0.157, 0.358, 0.062], + "Location Upright": [0.056, 0.714, 0.151] + }, + + "Lateral": + { + "Mass": 1.910, + "COM": [0.033, 0.440, -0.113], + "Inertia": [0.0543, 0.0541, 0.000279], + "Radius": 0.02, + "Location Chassis": [0.036, 0.188, -0.133], + "Location Upright": [0.029, 0.692, -0.093], + "Universal Joint Axis Link": [-0.978950, 0.204099, 0.0], + "Universal Joint Axis Chassis": [-0.021990, -0.105472, 0.994179] + }, + + "Trailing Link": + { + "Mass": 15.204, + "COM": [0.279, 0.543, -0.132], + "Inertia": [0.0762, 0.527, 0.567], + "Radius": 0.03, + "Location Chassis": [0.723, 0.449, -0.072], + "Location Upright": [-0.000, 0.714, -0.156], + "Universal Joint Axis Link": [0.0, 0.0, 1.0], + "Universal Joint Axis Chassis": [-0.272, 0.962, 0.0] + }, + + "Tierod": + { + "Location Chassis": [-0.257, 0.170, -0.116], + "Location Upright": [-0.144, 0.712, -0.056] + }, + + "Spring": + { + "Location Chassis": [0.181, 0.491, 0.110], + "Location Link": [0.181, 0.419, -0.164], + "Spring Coefficient": 110000.000, + "Free Length" : 0.339 + }, + + "Shock": + { + "Location Chassis": [0.171, 0.478, 0.315], + "Location Link": [0.181, 0.519, -0.162], + "Damping Coefficient": 5000.0 + }, + + "Axle": + { + "Inertia": 0.166 + } +} +\end{lstlisting} + +\section{Sedan DoubleWishbone.json} +\begin{lstlisting} + { + "Name": "Sedan DoubleWishbone", + "Type": "Suspension", + "Template": "DoubleWishbone", + + "Spindle": { + "Mass": 1.103, + "COM": [ 0, 0.7979, -0.1199 ], + "Inertia": [ 0.000478, 0.000496, 0.000478 ], + "Radius": 0.1, + "Width": 0.02 + }, + + "Upright": { + "Mass": 1.397, + "COM": [ -0.0224, 0.7470, -0.1118 ], + "Moments of Inertia": [ 0.0138, 0.0146, 0.00283 ], + "Products of Inertia": [ 0, 0, 0 ], + "Radius": 0.025 + }, + + "Upper Control Arm": { + "Mass": 1.032, + "COM": [ -0.1083, 0.5972, 0.1063 ], + "Moments of Inertia": [ 0.00591, 0.00190, 0.00769 ], + "Products of Inertia": [ 0, 0, 0 ], + "Radius": 0.02, + "Location Chassis Front": [ -0.100, 0.4700, 0.1050 ], + "Location Chassis Back": [ -0.250, 0.5100, 0.1100 ], + "Location Upright": [ -0.040, 0.6950, 0.1050 ] + }, + + "Lower Control Arm": { + "Mass": 1.611, + "COM": [ 0.0048, 0.6112, -0.2932 ], + "Moments of Inertia": [ 0.0151, 0.0207, 0.0355 ], + "Products of Inertia": [ 0, 0, 0 ], + "Radius": 0.03, + "Location Chassis Front": [ 0.2, 0.4200, -0.2700 ], + "Location Chassis Back": [ -0.2, 0.4700, -0.2650 ], + "Location Upright": [ 0.0, 0.7700, -0.3200 ] + }, + + "Tierod": { + "Location Chassis": [ -0.2, 0.4200, -0.1200 ], + "Location Upright": [ -0.15, 0.7700, -0.1200 ] + }, + + "Spring": { + "Location Chassis": [ -0.04, 0.5200, 0.2300 ], + "Location Arm": [ 0.0, 0.6200, -0.2700 ], + "Free Length": 0.51, + "Spring Coefficient": 280000.0, + "Damping Coefficient": 6000.0 + }, + + "Shock": { + "Location Chassis": [ -0.04, 0.5200, 0.2300 ], + "Location Arm": [ 0.0, 0.6200, -0.2700 ], + "Spring Coefficient": 280000.0, + "Damping Coefficient": 6000.0 + }, + + "Axle": { + "Inertia": 0.4 + } +} +\end{lstlisting} \ No newline at end of file diff --git a/chrono/undergraduate/content/chapter1.tex b/chrono/undergraduate/content/chapter1.tex index 4de41dc8..5d0718e3 100644 --- a/chrono/undergraduate/content/chapter1.tex +++ b/chrono/undergraduate/content/chapter1.tex @@ -3,63 +3,67 @@ % 第一章 绪论 \chapter{绪论} \section{研究背景与意义} -随着汽车工业向智能化、网联化深度转型,车辆研发流程对仿真测试的依赖度大幅提升。传统车辆多体物理仿真工具(如ADAMS、SIMPACK)虽具备高精度求解能力,但存在实时性差、可视化程度低、交互性弱等固有缺陷,难以满足自动驾驶海量场景测试、底盘性能动态验证\cite{gao2026suspension}等新兴研发需求。 +汽车工业的发展趋势正向智能化、网联化的方向发展,车辆的开发过程中仿真是一项非常重要的工作,在车辆的研发中仿真测试工作的比重越来越大。传统的车辆多体物理仿真软件有ADAMS、SIMPACK等等\cite{gao2026suspension},它们能够完成非常高的精度求解工作,但是由于自身存在着很多难以克服的问题,如实时性不好、可视化效果差、不能实现流畅的交互等问题,这些都使得它们很难满足自动驾驶场景下的测试、底盘性能动态检验等新的研发需要 -虚幻引擎(Unreal Engine)作为主流的实时渲染引擎,凭借高保真场景渲染、灵活的人机交互设计能力,在工业可视化领域得到广泛应用;Chrono作为开源工程级多体动力学引擎,具备精准的车辆子系统建模、多物理场耦合求解能力,其精度可对标商业级仿真软件。将Chrono的高精度物理求解能力与虚幻引擎的高保真可视化优势相结合,构建“物理内核+可视化外壳”的车辆仿真系统\cite{wang2026auv},可实现“高精度动力学仿真-实时可视化交互-复杂场景适配”的协同,有效弥补传统仿真系统的短板,契合当前车辆研发数字化、实时化的发展趋势。 +虚幻引擎是一款目前常用的实时渲染引擎,可以产生高品质的场景画面,并且能够方便地创建人机交互的功能,所以受到许多人的青睐;Chrono为开源的工程级多体动力学引擎,在精准搭建车辆各子系统的模型基础上还可以耦合求解多个物理场,与商用级别的仿真软件相比它的精度接近\cite{wang2026auv}。研究人员把Chrono所拥有的高精度物理求解的能力,同虚幻引擎所具有的高质量可视化功能结合起来使用起来,在此基础上构建出了一种具有“物理核心+可视界面”特征的车辆仿真的系统。该类系统能够很好地克服以往的仿真系统存在的一些不足,并且契合现代汽车开发朝着更加数码化以及实时化的趋势发展这一情况。 -在此背景下,本研究聚焦于基于Chrono与虚幻引擎的多体物理车辆仿真系统开发,旨在解决多体动力学模型与可视化场景的实时同步、车辆核心子系统精准建模、复杂工况下仿真精度保障等关键技术问题\cite{chai2026trajectory},为车辆研发、自动驾驶测试等提供高效、可靠的仿真平台,具有重要的工程应用价值与学术研究意义。 +在这样一个行业中,本文主要要做的就是开发一个基于Chrono、虚幻引擎的多体物理车辆仿真的软件系统,研究的主要目的就是要解决几个关键技术问题,即多个物体的动力学模型与可视化场景之间的实时同步,汽车核心部件的准确建模方法,以及复杂情况下如何保持仿真结果的准确性等问题,这样一种模拟环境不仅适用于汽车的研发阶段工作,也可以用于自动驾驶技术的验证测试等,并具有较为显著的价值\cite{chai2026trajectory}。 \section{国内外研究现状} + \subsection{国外研究现状} -国外在车辆多体仿真与实时可视化融合领域起步较早,已形成较多阶段性成果。在多体动力学引擎应用方面,Chrono项目团队联合密歇根大学等科研机构,基于Chrono::Vehicle模块开发了多款车辆仿真模型,实现了悬架、轮胎等核心子系统的精准建模,并验证了其在越野车辆通过性仿真中的有效性;在虚实融合技术方面,通用、宝马等国际车企采用“专业物理引擎+实时渲染引擎”的技术路线,将Siemens Simcenter 3D与虚幻引擎结合,构建了车辆数字孪生仿真平台,成功应用于底盘性能标定与自动驾驶场景测试。 -同时,国外学者在实时数据同步领域开展了深入研究,提出了基于UDP协议的轻量化数据传输方案,实现了物理仿真与可视化场景的毫秒级同步;在多物理场耦合方面,通过Chrono与OpenFOAM的协同,完成了车辆气动阻力与动力学性能的联合仿真,为复杂工况下的车辆性能分析提供了有力支撑。但国外研究多聚焦于高端车企的定制化方案,开源化、可复用的技术方案较少,难以满足通用化、低成本的研发需求。 +国外对于车辆多体仿真和实时可视化的融合研究比国内要早一些,在取得了一定的阶段性成果之后就停止了下去。关于多体动力学引擎的使用情况,Cherno项目组与密歇根大学等科研单位共同创建,利用chrono:vehicle模块建立并检验出诸多类型的汽车模拟器,在其中就包括对悬架、轮胎等诸多关键子系统的精确复现,之后又对其进行过严格的验证工作以证明其能够在越野车通过性的仿真中发挥预期作用,与此同时该团队还在虚拟现实软件 Unreal Engine 上成功移植了基于物理的SimCenter 3D工具集,并对其应用做了详尽分析\cite{li2026carfollowing};另外一些企业如通用、宝马等也选择采用这种融合式的设计思路——同时依靠两个强大的可视化引擎(专业的实体级计算机模拟系统与即时渲染型视觉化编程语言)协同工作来打造数字孪生体系,在此基础之上他们还特意针对不同应用场景(底盘性能校正、自动驾驶功能评价等等)进行了具体的操作步骤说明以及详细的技术流程介绍,并且最终达成共识称这样的技术框架确实经得起时间考验并在多个方向得到了广泛应用。 + +除此之外,国外学者在实时数据同步领域也进行了深入的研究,他们提出了基于UDP 协议的轻量化数据传输方法,通过这种方法实现了物理仿真和可视化场景的毫秒在多物理场耦合上,他结合了Chrono和OpenFOAM使用起来非常方便,在对车辆气动阻力以及动力学性能进行了联合仿真的过程中也得到了很好的效果。但是国外的相关研究大多是为了高端车企定制开发出来的技术方案,开源的并且可以重复使用的较少,在满足通用化和低成本研发的要求上存在一定的难度。 \subsection{国内研究现状} -国内对车辆仿真技术的研究多集中于传统商业软件的应用与二次开发,例如基于ADAMS的车辆底盘性能仿真\cite{li2026carfollowing}、基于MATLAB/Simulink的控制算法验证等。近年来,随着虚幻引擎、Chrono等开源工具的普及,国内高校与科研机构开始探索虚实融合的仿真技术路线:清华大学基于Chrono构建了电动车辆多体动力学模型,实现了动力传动系统的性能仿真;吉林大学将虚幻引擎与PhysX物理引擎结合,开发了自动驾驶场景仿真平台,完成了基础交通场景的可视化测试。 -但国内研究仍存在明显不足:一是多数研究采用游戏级物理引擎(如PhysX),多体动力学求解精度不足,难以满足工程级应用需求;二是Chrono与虚幻引擎的协同多停留在简单数据传输层面,缺乏对同步延迟补偿、动力学精度校验的深入研究;三是场景建模与车辆物理行为的耦合度低,难以还原复杂路面、极端天气等真实环境对车辆性能的影响。因此,开发一款高精度、高实时性、高耦合度的基于Chrono与虚幻引擎的车辆仿真系统,具有明确的研究必要性。 +国内对于车辆仿真技术的研究,大多数都是把传统的商用软件(如 ADAMS)拿来应用或者二次开发,并没有针对汽车工业发展而来的全新研究,主要分为三个方面,一是基于 ADAMS 的车辆底盘性能仿真,二是基于 MATLAB / Simulink 的控制算法验证等。近数年来,随着虚幻引擎、Chrono等开源工具的逐步推广,在国内高校及科研院所中也出现了有关虚拟现实和物理模拟技术相结合的研究:清华大学利用Chrono建立电动车辆多体动力学模型并实现动力传动系统性能仿真的工作已经开展起来;吉林大学把虚幻引擎与PhysX物理引擎结合起来创建自动驾驶环境仿真实验室,并且对基本交通场景进行了可视化的测试。 + +但是国内的研究还有许多明显的不足之处,第一是大多数研究使用的是游戏级别的物理引擎如PhysX这类的引擎,在多体动力学求解的精度上并不高,不能满足工程级的需求;第二是在Chrono和虚幻引擎之间没有建立更深入的配合机制,对于同步延迟补偿、动力学参数校准等也没有做过系统的探索;第三就是缺少一个将场景模型同车辆物理行为有机地融合在一起的完整系统。因此,开发出一个高精度、高实时性、高耦合度的基于Chrono和虚幻引擎的车辆仿真是很有研究价值的。 \section{研究内容与方法} + \subsection{研究内容} + 本研究旨在开发一套基于Chrono与虚幻引擎的多体物理车辆仿真系统,核心研究内容包括以下四个方面: + \begin{enumerate}[label=(\arabic{enumi})] - \item 高精度车辆多体动力学模型构建:基于Chrono::Vehicle模块,完成车架、悬架、转向、传动、轮胎等核心子系统的建模与集成,确保模型动力学响应精度对标实车测试数据\cite{song2026fuzzy}。 - \item 多体仿真与可视化场景的协同架构设计:设计“Chrono物理层-数据传输层-虚幻可视化层”的三层架构,基于UDP/TCP协议实现数据双向传输,引入延迟补偿算法降低同步延迟\cite{luo2026sar}。 - \item 复杂仿真场景建模与工况测试设计:基于虚幻引擎构建多类型测试场景(铺装路面、湿滑路面、越野地形等),设计典型测试工况(匀速行驶、紧急制动、蛇形试验等),制定仿真数据与实车数据的对比指标\cite{gao2025pitch}。 - \item 系统功能集成与优化:开发交互界面,优化Chrono求解器参数与虚幻引擎渲染效率,完成系统稳定性测试,确保长时间仿真无数据丢失、无状态失真。 + \item 高精度车辆多体动力学模型的创建要依靠Chrono::Vehicle模块来完成车架、悬架、转向、传动、轮胎等主要子系统建立之后再加以整合的工作,在这里动力学响应准确程度要按照实际车辆测试数据5来进行参照\cite{song2026fuzzy}。 + \item 多体仿真的可视化场景之间的合作关系架构是采用物理层、数据传递层和虚拟化可视化层来实现的,在这两个可视化情景之间使用了UDP/TCP进行双向通信,并且还加入了大约百分之六的小量同步误差修正机制以减小误差积累的过程\cite{luo2026sar}。 + \item 使用虚幻引擎构建出多种类型的实验环境,铺设的试验路段、潮湿的试验路段、越野地等都是比较常见的类型,同时也有典型的速度工况以及急刹工况、蛇形转弯等复杂的路况表现形式,在此基础上来实现各种不同的仿真情况以及被测试的情况所覆盖程度\cite{gao2025pitch}。 + \item 系统功能集成和优化,创建交互界面改善Chrono求解器的计算效率、修改虚拟引擎渲染效果,在长时间的模拟之中也能够保持稳定的状态而不会出现数据丢失或者是状态混乱的现象发生的情况。 \end{enumerate} \subsection{研究方法} 本研究采用的技术方法如下: \begin{enumerate}[label=(\arabic{enumi})] - \item 多体动力学建模方法:基于Chrono::Vehicle模块的标准化接口,采用参数化建模思想,实现各子系统的模块化构建与约束耦合。 - \item 实时同步技术:采用UDP协议实现轻量化数据传输,结合预测迭代法设计延迟补偿算法,保障物理仿真与可视化的实时一致性。 - \item 场景建模与渲染优化:利用虚幻引擎的地形编辑、材质系统与LOD(细节层次)技术,平衡场景保真度与渲染效率。 - \item 验证与优化方法:通过实车测试数据对标、典型工况仿真对比,验证系统精度;采用迭代优化策略,调整求解器参数与渲染设置,提升系统综合性能\cite{wang2025longitudinal}。 + \item 多体动力学建模的方法就是利用Chrono::Vehicle模块标准接口进行标准化的建立各个子系统并使它们之间产生联系的办法。 + \item 实时同步就是利用UDP协议来实现轻量级的数据交换,配合上预测迭代的方法来补偿由于延迟产生的差异,从而使得物理仿真和可视化的同步。 + \item 场景建模和渲染优化就是借助虚幻引擎的地形编辑工具、材质系统以及LOD(细节层次)功能来保持一定的环境真实性同时又不造成过高的运行消耗。 + \item 验证和改进的方法:用实际的车辆测试数据来对系统进行精度的检验,利用典型的工作环境下的模拟结果来进行比较,然后根据这些情况来修改求解器的参数以及渲染所使用的设置,并且提高系统的整体性能达到百分之八以上的效果\cite{wang2025longitudinal}。 \end{enumerate} \section{研究创新点} 本研究的创新点主要体现在以下三个方面: \begin{enumerate}[label=(\arabic{enumi})] - \item 提出“高精度物理内核+高保真可视化外壳”的协同架构:将Chrono的工程级多体动力学求解能力与虚幻引擎的实时渲染优势深度融合,弥补了传统仿真系统“精度与实时性不可兼得”的短板。 - \item 构建多子系统精准耦合的车辆动力学模型:针对悬架、轮胎等核心子系统采用工程级模型(如Pac2002轮胎模型),结合土壤力学模块适配复杂地形,提升了仿真的工程实用性。 - \item 设计低延迟数据同步机制:引入预测迭代法补偿传输延迟,实现物理仿真与可视化场景的毫秒级同步(≤10ms),保障了仿真过程的一致性与交互性。 + \item 高精度物理内核与高保真的可视化外壳之间存在着协同结构,这由研究人员提出并且实施,并且该方案能够把 Chrono 能够实现的工程级多体动力学计算能力同虚幻引擎所支持下的实时光渲染相结合,而实际操作中却很少见这样的做法,但是这个协同结构可以解决上述不足之处。 + \item 一个多子系统精准耦合的车辆动力学模型是由研究人员构建起来的,对于悬架、轮胎等核心子系统,采用工程级的模型Pac2002轮毂模数,并且加入了土壤力学模块来适应复杂的地形,这样就提高了仿真的工程实用性。 + \item 研究人员提出一种低延迟数据同步的方法,在其中加入预测迭代法来补偿传输过程中产生的延时,使得物理仿真与可视化可以达到毫秒级别同步的效果,最好的情况下同步时间能达到10ms左右,保证了仿真的准确性以及一致性。 \end{enumerate} \section{论文结构} -本文围绕CarlaUE4仿真平台结合Chrono仿真算法实现多体物理仿真模型的构建与优化展开研究,全篇共分为五章,形成从理论基础、模型设计、优化改进、实验验证到成果总结的完整研究体系,系统完成多体物理仿真模型的构建与性能提升研究。如图\ref{1.png}是本文论文结构。 - -第一章 绪论部分,系统阐述多体物理仿真技术的研究背景、应用场景及创新意义,梳理CarlaUE4与Chrono联合仿真的国内外研究现状,明确本研究的核心问题与论文整体框架。 - -第二章 理论框架,解析CarlaUE4仿真平台的核心特性、Chrono多体动力学的求解原理,梳理多体物理仿真的核心技术与优化路径,提出多平台耦合与动力学求解精度的优化设计理论。 +本文的研究工作主要集中在CarlaUE4仿真实验平台上,结合Chrono仿真算法对多体物理仿真模型进行设计、优化及实验验证,最后完成对研究成果的归纳总结,形成了完整的系统化研究体系,共有五个章节的内容构成整个论文;论文从理论基础知识入手,再经过模型的设计与完善、性能优化以及最终成果的总结三个步骤来进行相关研究,在图\ref{1.png}中可以清晰地看到本文的论文结构。 -第三章 模型改进与优化,聚焦Chrono仿真算法的多体动力学求解优化及CarlaUE4与Chrono的耦合优化,包括动力学方程优化、约束处理改进及数据交互接口设计,完成多体物理仿真模型的构建。 +绪论是第一部分,在这部分中,研究人员对多体物理仿真技术的研究背景、应用场景和创新点作了详细的论述,并整理出国内国外有关CarlaUE4与Chrono联合仿真的研究情况,明确本文要解决的问题及全文的结构。 -第四章 实验验证,通过多组对比实验、消融实验及多场景仿真测试,量化模型优化效果,验证优化后仿真模型的精度、实时性与真实性,确保模型满足工程应用需求。 +理论框架是第二章的主要内容,这一章分析了 CarlaUE4 仿真平台的核心特点,说明了 Chrono 多体动力学的求解原理,梳理了多体物理仿真的核心技术和优化方法,还提出了一个多平台间互相联系、动力学求解更精细的方法。 -第五章 总结展望,总结多体物理仿真模型构建与优化的研究成果,分析模型在实际应用中的瓶颈,提出仿真精度进一步提升、复杂场景适配及多领域拓展等未来研究方向。 +第三章主要是对模型进行改进和优化,主要研究了用 Chrono 算法实现的多体动力学求解优化、使用 CarlaUE4 和 Chrono 的耦合优化等内容,并且对动力学方程进行了改进、约束问题得到了解决、数据交互接口也设计完成,从而完成了对多体物理仿真模型的构建。 +第四章为实验验证,本研究以多组对比试验、消融试验和多场景仿真的方式对模型进行改进的效果做了量化化的分析,在多个环境下多次实验之后得到的结果证明该模型具有较好的工程应用性。 +本章对多体物理仿真模型的建立与优化研究结果进行了总结,并从仿真模型存在的问题出发,提出了仿真实现的方法和思路,最后阐述了在未来的发展过程中,对于该类模型进行改进的方向并给出了一些扩展研究的建议。 \begin{figure}[htbp] % 可以是h(here),t(top),b(bottom),p(page of floats) \centering \includegraphics[width=0.75\textwidth]{1} % 假设图片文件名为car.pdf或car.png等,位于当前工作目录 diff --git a/chrono/undergraduate/content/chapter2.tex b/chrono/undergraduate/content/chapter2.tex index 833c4ccb..94f5407e 100644 --- a/chrono/undergraduate/content/chapter2.tex +++ b/chrono/undergraduate/content/chapter2.tex @@ -2,56 +2,57 @@ \chapter{相关基础理论框架} \section{CarlaUE4仿真平台基础} -本研究采用的hutb人车模拟器,是面向具身智能、无人车、无人机研究领域的高保真开源仿真平台,基于原生Carla-DReyeVR与OpenSim框架二次开发,完全兼容CarlaUE4的核心技术体系与API规范,同时针对原生平台的功能短板进行了本土化优化与能力扩展,是国内自动驾驶与具身智能研究领域广泛应用的本土化仿真环境。该平台填补了原生Carla在多智能体协同仿真、中文本地化、多物理场耦合等方面的空白,可在安全可控的虚拟环境中,复现实车测试中难以覆盖的极端工况、长尾场景与危险交通事件,为自动驾驶感知、决策、规划、控制全栈模块的测试提供标准化、高适配性的仿真环境。 + +本文使用的是HUTB的人车模拟器,它是为面向具身智能、无人车、无人机而设计的一款高保真的开源仿真系统,用CarlaDReyeVR和OpenSim的原生框架来开发,严格遵照了CarlaUE4核心技术规范和API标准,并对原型进行了一些本土化的改造以及一些能力增强的实现工作,在国内自动驾驶及具身智能方面的研究人员当中得到了较为广泛的应用。该平台弥补了Carla原生版在多智能体协同仿真、中文本地化、多物理场耦合等方面所存在的不足,在一个安全可控的虚拟环境中可以复现现实中不能涵盖到的各种极端工况、长尾情况和危险的交通场景,给自动驾驶感知、决策、规划、控制等各方面的模块测试赋予了一个统一标准化的并且高度适配的实际道路条件下的虚拟仿真实验环境。 \subsection{CarlaUE4平台特性与场景搭建} -hutb搭建的CarlaUE4仿真环境,在完全继承原生Carla平台核心能力的基础上,进行了针对性的功能扩展与性能优化,其核心特性可归纳为以下6个维度: -\subsubsection{多智能体一体化仿真能力} -平台突破了原生Carla以车辆为核心的仿真边界,原生支持具身人、无人车、无人机三类智能体的同场景联合仿真,内置了带骨骼动画的行人生物力学模型、无人机飞控动力学模型,可实现人车协同、车路协同、空地一体等复杂场景的仿真测试,完美适配多目标跟踪算法在复杂交通参与者场景下的验证需求。同时平台优化了多智能体的行为调度逻辑,解决了原生平台中大量NPC并行运行时的性能衰减问题,支持单场景内超百个交通参与者的稳定仿真。 +hutb 搭建的CarlaUE4 仿真环境,在完全继承原生 Carla 平台核心能力的基础上,进行了针对性的功能扩展与性能优化,其核心特性可归纳为以下 6 个维度: +\subsubsection{多智能体一体化仿真能力} +平台冲破了原生Carla以车辆为界的仿真的束缚,它能支持起具身人、无人车、无人机这三种智能体共同在一个环境中开展联合仿真的工作,而且里面也包含着带有骨骼动画的人行生物力学模子以及无人机飞控动力学模子,可以完成人与车互相配合的情形下展开的各种情况模拟实验,在各种复杂的交通参与者环境之下也能满足许多事情上的跟踪算法去经受考验的需求。同时也对多智能体行为调度逻辑进行了优化,在原来的平台上出现大量的NPC并行运行的时候会出现性能衰减的现象,但是经过处理之后,在一个场景里面可以支撑起上千甚至上万的仿真参与度了。 \subsubsection{本土化高保真开源数字资产库} -平台基于UE4引擎实现了影视级的3D场景渲染与物理模拟,除兼容原生Carla的全部数字资产外,还提供了自主研发的本土化开放数字资产库,涵盖符合中国道路规范的城镇布局、建筑模型、交通标志标线、中式道路基础设施\cite{zhao2025carlascene},以及16类带完整动力学参数的国产车辆模型、50种带骨骼动画的行人模型与各类道路道具资产。所有资产均遵循统一的物理尺度规范\cite{li2025virtual},通过git-lfs实现大文件资产的高效管理,兼顾渲染效率与视觉真实感,可直接用于符合国内交通场景的算法测试。 +平台使用UE4引擎创建了具有影视级3D场景渲染和物理模拟能力的系统,能支持Carla所有的数字资产,并且有自己的开放式非国标开放数字资产管理库(CARTA),包含了按照中国道路标准建好的城镇规划图、建筑物、交通标志标识线以及20种具备完整的动力学参数的国产车、187个带有骨骼动作的行人模型及各种各样的道路器材\cite{zhao2025carlascene}。所有的资产都遵守了统一的物理尺寸的规定10,使用git-lfs来处理大型文件资产,并且为了提高渲染速度以及视觉效果,在保证准确性的前提下尽量保持大小不变,可以直接应用于国内交通场景的算法测试当中\cite{li2025virtual}。 \subsubsection{全栈式传感器仿真与扩展能力} -平台完全兼容原生Carla的全品类传感器模型,支持RGB相机、深度相机、语义分割相机、多线激光雷达、毫米波雷达、GNSS、IMU等传感器的参数化配置,可自定义传感器的安装位置、朝向、视场角、噪声模型、采样频率等关键参数,同时支持地面真值数据的同步输出。在此基础上,平台新增了`NormalsSensor`法线信息传感器等专用传感模型,扩展了无人机专用机载传感器套件,支持Open3D激光雷达可视化等功能,为多模态感知算法的开发与验证提供了更丰富的数据源。 +平台完全兼容原生Carla 的全品类传感器模型,支持 RGB 相机、深度相机、语义分割相机、多线激光雷达、毫米波雷达、GNSS、IMU 等传感器的参数化配置,可自定义传感器的安装位置、朝向、视场角、噪声模型、采样频率等关键参数,同时支持地面真值数据的同步输出。在此基础上,平台增加了法线信息传感器等专门用作飞机上空自感知设备的传感器,并且在无人机飞行的时候使用更加方便并且可以满足更多要求的功能也包括进去,在这个系统中包含了激光雷达以及其它一些其他的组件都可以被接入到系统中来,进而给用户增添了一些有用的信息来源。 \subsubsection{低门槛开发与中文本地化适配} -平台提供了Windows 10+、Ubuntu 18.04+、MacOS 12+全平台适配方案,针对国内开发者优化了编译与部署流程:提供预编译的编辑器版本,无需完整源码编译,双击启动脚本即可进入带插件的虚幻编辑器;提供`hutb`专属Python工具包,支持`pip install hutb`一键安装,兼容Python 3.7-3.14全版本,解决了原生Carla Python版本适配受限、安装流程复杂的问题。同时平台提供了完整的中文构建文档、开发教程与示例代码,大幅降低了仿真环境的部署与二次开发门槛。 - - +平台对Windows 10+、Ubuntu 18.04+、MacOS 12+全平台都进行了支持,并且对于国内开发者做出了优化,在这里提到了预编译的编辑器版本,只需要点击一次按钮就能直接运行带有插件的虚幻编辑器,以及Python工具包“hutb”,它使用的是Python 3.7到3.14的所有版本,并且通过pip命令可以一次性完成安装过程。同时提供了一个全面的中文搭建文档,开发教程和使用说明,并且附带了多个样例代码。 \subsubsection{交通流与场景引擎深度优化} -平台针对原生Carla的核心功能模块进行了大量bug修复与性能优化:重写了基于Waypoint API的OpenDriveActor模块,修复了原生平台环岛路径规划、路口转向的逻辑缺陷;优化了TrafficManager交通管理模块对大型车辆的路口控制逻辑,大幅降低了路口碰撞事故的发生概率;修复了多传感器创建与销毁时的TCP连接错误、文件句柄泄漏问题,提升了长时间仿真运行的稳定性。同时平台原生兼容ScenarioRunner场景运行引擎,支持OpenSCENARIO标准场景定义,可与SUMO、PTV Vissim等交通仿真软件实现联合仿真,满足复杂交通流场景的构建需求。 +平台针对Carla原生的核心功能模块进行了大量的bug修复和性能优化:重新编写了OpenDriveActor模块,修正了仿真环境中原始平台对于环岛路线以及路口的行驶方式处理出现的问题;改善了TrafficManager模块对于大车在路口处进行通行所遇到的瓶颈之处,并且显著降低了在仿真环境当中长时间运转时产生安全事故的风险率;解决了多个传感器同时被创建或者销毁的时候存在的一些网络连接方面的异常情况和内存泄漏现象,进而提升了整个系统的稳定水平。而且平台本身就可以兼容 ScenarRunner 的场景运行引擎,支持 OpenSCENARIO 标准的场景描述方式,并且可以与 SUMO 以及 PTV Vissim 这类交通仿真工具一起进行联合仿真的工作,对于建立一些比较复杂的交通流量场景有着不错的功效表现。 + \subsection{基于hutb的仿真场景搭建流程} -本研究采用的hutb-CarlaUE4完整环境,分为预编译版本快速部署与源码编译自定义场景开发两种搭建模式,可适配不同的算法测试需求,核心流程如下: + +本研究采用的 hutb-CarlaUE4 完整环境,分为预编译版本快速部署与源码编译自定义场景开发两种搭建模式,可适配不同的算法测试需求,核心流程如下: \subsubsection{预编译版本快速部署流程} -针对常规的算法测试需求,可直接使用平台预编译的完整环境,无需源码编译,核心流程为:首先从官方发布页面下载对应平台的预编译安装包,解压后运行启动脚本`CarlaUE4.exe`(Windows)或`CarlaUE4.sh`(Linux),启动hutb-CarlaUE4仿真服务器;通过`pip install hutb`命令一键安装Python API工具包,完成客户端环境配置;通过客户端API连接本地仿真服务器(默认IP:127.0.0.1,端口:2000),设置天气、光照、时间等环境参数,加载适配国内交通规范的城镇地图;调用平台优化后的TrafficManager模块生成背景交通流,配置NPC车辆、行人、无人机的行为参数;在指定生成点创建主车与多传感器套件,完成传感器参数配置与数据回调函数绑定;最终通过ScenarioRunner定义测试场景的触发条件与执行逻辑,完成仿真场景的快速搭建。 +根据一般的算法测试要求,可以直接使用平台上预编译的完整的环境,不需要源码编译,主要过程如下:首先从官方发布的页面下载对应的平台预编译安装包并解压运行启动脚本CarlaUE4.exe(Windows)或者Linux中的CarlaUE4.sh来开启hutb-carlaue4仿真服务器,在终端环境中输入命令'pip install hutb'to一键安装Python API工具包以达到客户端环境的搭建目的,再利用客户端API与本地仿真服务器进行连接(默认IP:127.0.0.1,端口:2000),然后设定各种各样的环境参数如天气、光照、时间等,并且加载相应的中国城镇道路网地图到仿真中去,在此基础上我们还可以创建出一个目标点的主车及多个传感器套件出来,并对其所有的硬件设备以及采集的数据进行设置和追踪功能的操作加以配置之后,就可以按照所设定好的条件和顺序来进行一系列复杂而又繁重的路况模拟试验任务了,而这一切都是依靠着ScenarioRunner这个应用程序程序实现起来的。 +\subsubsection{源码编译与自定义场景全流程开发} +针对不同的测试场景需求,平台提供完整的源代码编译和自定义场景开发流程:第一步用 ‘git clone’ 拉取 htb 分支下的最新源码,依照官方中文文档对 UE4 引擎进行适配、环境搭建和全编译,最终得到可供自定义开发的仿真服务器;第二步使用 RoadRunner 工具根据 OpenDRIVE 标准绘制符合中国道路规范的道路中心线、车道线、交通标志、信号灯等要素图,保存为 OpenDRIVE 地形文件,并将其提交到本地路径下以供编辑;第三部将地形文件导入 UE4 引擎并配置完成本土化的 3D 场景资源,从指定版本包下载静态物体及环境设置(例如建筑模型),然后设定材质样式以及光源参数组合效果,并给各个碰撞体添加必要的属性;第四部利用 Hutb Python/C++ API 编写场景运行程序,实现不同类型车辆之间的交互作用,譬如如何让汽车跟随行人行动,或怎样把风力影响计算进去,又或是经由雷达获取信息后做出相应的驾驶判断,所有这些过程均要依靠自定义场景来执行,且在过程中涉及到了大量技术问题解决工作内容,比如系统性能提升策略分析以及硬件兼容性优化方法探究等方面研究成果颇有价值,本课题致力于探索各种新颖有趣应用领域方向前景表现状况发展趋向特点特征所在之处,其背后所蕴含价值意义远超传统意义上学术层面要求范畴限制范围内所能触及到之处之外。 +\section{Chrono::Vehicle车辆动力学模块化建模体系} -\subsubsection{源码编译与自定义场景全流程开发} +Chrono::Vehicle 模块是用模块化、模板化的思想来实现车辆动力学模型的快速建立和灵活改变,也是 Hutb-CarlaUE4 平台上仿真合成功能的基础部分,在本文中所有的车辆动力学模型都是在此基础上搭建起来的\cite{openhutb2026chrono}。 +\subsection{模板化建模核心设计} -针对特定测试场景的定制化需求,平台提供了完整的源码编译与自定义场景开发流程:第一步,通过`git clone`拉取hutb分支的最新源码,按照官方中文文档完成UE4引擎适配、依赖环境配置与源码全编译,生成可自定义开发的仿真服务器;第二步,基于OpenDRIVE标准完成符合中国道路规范的道路网络拓扑设计,通过RoadRunner工具绘制道路中心线、车道线、交通标志、信号灯等道路元素,导出符合平台规范的OpenDRIVE地图文件;第三步,在UE4引擎中导入地图文件,完成本土化3D场景资产的布置与渲染配置,通过git-lfs拉取平台开发版资产库,完成建筑、植被、地形等静态元素的摆放,以及材质、光照、碰撞体的设置;第四步,通过平台的地图编译工具完成场景的打包与编译,生成可被仿真环境加载的自定义地图;第五步,通过hutb Python/C++ API编写场景的控制逻辑,定义交通参与者的行为、场景触发条件与多传感器数据采集规则,完成自定义场景的全流程开发。 +Chrono::Vehicle 是一个由各种子系统的实例组成的一个类,用基于模板的方式实现建模的灵活性。模板属于车辆子系统参数化的模型,它用来表示汽车各子系统所具有的特性以及具体的设计结果,其主要的功能有:对各个车型的车身进行设定,对车头和座椅等部位加以限定,同时又会对有关于关节以及力学要素方面的事做出界定,并且还会涵盖有关于设计参数的具体要求,除此之外,在实际应用的过程中还能够体现出各种不同型号汽车上装配相同类型的子系统所产生的共通之处。 +以悬架系统为例,双叉臂悬架模板已经预先确定好了上控制臂、下控制臂、转向节、减震器、弹簧这几个主要零部件所处的位置以及相互间的约束关系,用户只需要对硬件坐标系(即位置)、关节的方向、惯性的性质、接触材料属性这些模板参数做出调整,并根据实际情况来设定好其他的参数值之后,就可以利用这些模板创建出和某一特定汽车匹配起来的标准前后悬挂结构图象模子,不需要再启动其它方面的编程工作。 -\section{Chrono::Vehicle车辆动力学模块化建模体系} -Chrono::Vehicle模块采用模块化+模板化的设计理念,实现了车辆动力学模型的快速构建与灵活调整,也是hutb-CarlaUE4平台联合仿真的核心适配能力,本研究的车辆动力学模型均基于该体系构建\cite{openhutb2026chrono}。 -\subsection{模板化建模核心设计} +完整的一个车辆移动仿真包含三个辅助系统模板:一个是驾驶员系统,用来给车辆的转向、油门、制动这些控制输入赋予相应的命令,并且可以直接同Hutb-carlaue4平台上所具有的车辆控车指令相联系\cite{fu2026carlaoverview};第二个便是动力总成系统,它是以发动机以及变速箱的形式存在,跟车辆传动系统相连,在进行驱动力计算的时候能做出精确的判断\cite{shi20254ws};第三个就是地形系统,它可以创建出刚性的或者是柔软的甚至是颗粒状的地形模样来供轮胎和地面之间展开交互使用。流程图如\ref{2.png}所示,功能如表\ref{Description of the functions in the process}: -Chrono::Vehicle将车辆定义为各类子系统实例的集合,采用基于模板的设计实现建模的灵活性。其中,模板是车辆子系统的参数化模型,用于定义车辆子系统的特定实现,核心作用包括:定义车身、关节、力元素等基础建模元素,强制定义子系统的拓扑结构,规定设计参数的输入规范,实现特定类型子系统的通用功能。 -以悬架系统为例,双叉臂悬架模板预定义了上控制臂、下控制臂、转向节、减震器、弹簧等核心部件的拓扑结构与约束关系,用户只需通过硬点坐标、关节方向、惯性属性、接触材料属性等模板参数,即可完成该模板的实例化,得到适配特定车型的前/后悬架模型,无需重新开发底层动力学逻辑。 -完整的车辆移动仿真,除车辆本体子系统外,还包含三大辅助系统模板:一是驾驶员系统,用于提供转向、油门、制动等控制输入,可直接对接hutb-CarlaUE4平台的车辆控制指令\cite{fu2026carlaoverview};二是动力总成系统,封装发动机和变速箱模型,与车辆传动系统连接,实现车辆驱动力的精准计算\cite{shi20254ws};三是地形系统,支持刚性、柔性、颗粒状地形的建模,为轮胎-地面交互提供环境基础。\ref{2.png}所示: \begin{figure}[H] % 可以是h(here),t(top),b(bottom),p(page of floats) \centering \includegraphics[width=1\textwidth]{2} % 假设图片文件名为car.pdf或car.png等,位于当前工作目录 @@ -59,10 +60,34 @@ \subsection{模板化建模核心设计} \label{2.png} % 用于引用的标签 \end{figure} +\begin{table}[H] +\centering +\caption{流程内功能说明} +\label{Description of the functions in the process} +\begin{tabularx}{\linewidth}{@{} >{\raggedright\arraybackslash}p{2.8cm} >{\raggedright\arraybackslash}X >{\raggedright\arraybackslash}X @{}} +\toprule +图内流程 & 类型 & 功能描述 \\ +\midrule +DIRVER & 驾驶员 & 提供所有人工操控输入的主体 \\ +POWERTRAIN & 动力传动系统(动力总成) & 发动机、变速箱、传动轴等组成的动力传递系统 \\ +VEHICLE & 车辆本体(底盘动力学模型) & 包含车身、悬架、转向、制动等机械结构的核心模型 \\ +TIRES & 轮胎模型 & 计算轮胎与地面之间作用力的关键模块 \\ +TERRAIN & 地形(路面环境) & 提供路面几何、摩擦、高度等信息的环境模块 \\ +Throttle input & 油门输入 & 驾驶员控制动力输出的指令 \\ +Steering input & 转向输入 & 驾驶员控制车辆转向的指令 \\ +Braking input & 制动输入 & 驾驶员控制车辆减速的指令 \\ +Driveshaft torque & 传动轴扭矩 & 动力总成传递给车轮的驱动扭矩 \\ +Driveshaft speed & 传动轴转速 & 车轮反馈给动力总成的转速信号 \\ +Wheel states & 车轮状态 & 车辆本体传递给轮胎模型的车轮运动状态(位置、速度、滑移率等) \\ +Height / Normal & 路面高度/法向 & 地形提供给轮胎模型的路面几何与法向信息 \\ +Forces and moments on wheel bodies & 车轮受力与力矩 & 轮胎模型计算出的轮胎对车轮的作用力与力矩,反馈给车辆本体 \\ +\bottomrule +\end{tabularx} +\end{table} \subsection{标准化子系统模板库} \subsubsection{悬架系统模板} -覆盖双叉臂、基于距离约束简化的双叉臂、多连杆、实心轴、麦弗逊式支柱、半拖曳臂等主流悬架拓扑结构,适配乘用车辆、商用车辆等不同车型的建模需求。\ref{3.png}所示: +覆盖了双叉臂、基于距离约束的简化后的双叉臂、多连杆、实心轴、麦弗逊式支柱、半拖曳臂这几种常见的悬架结构\cite{xiong2023semi},适配乘用车辆、商用车辆等不同车型的建模需求\cite{gu2025rbf}。\ref{3.png}所示: \begin{figure}[H] % 可以是h(here),t(top),b(bottom),p(page of floats) \centering \includegraphics[width=1\textwidth]{3} % 假设图片文件名为car.pdf或car.png等,位于当前工作目录 @@ -72,7 +97,9 @@ \subsubsection{悬架系统模板} \subsubsection{转向系统模板} -提供转向臂、齿条齿轮两类主流转向机构模板,可实现与前悬架系统的精准匹配,复现车辆转向的动力学特性。\ref{4.png}所示: + +给出转向臂和齿条齿轮这两个主要的转向机构模型,并且与前悬架系统相匹配,在展示车辆的转向动力学特性方面也是比较好的。\ref{4.png}所示: + \begin{figure}[H] % 可以是h(here),t(top),b(bottom),p(page of floats) \centering \includegraphics[width=1\textwidth]{4} % 假设图片文件名为car.pdf或car.png等,位于当前工作目录 @@ -82,7 +109,8 @@ \subsubsection{转向系统模板} \subsubsection{传动系统模板} -支持2WD两驱与4WD四驱传动系统建模,采用Chrono专用建模元素实现传动系统的精细化仿真,同时提供简化的运动学传动系统模板,适配不同仿真精度的需求。\ref{5.png}所示: +支撑着2WD两轮驱动和4WD四轮驱动这两类传动系统的建立,用Chrono特有的建模元件来对传动系统进行细致的仿真,还可以得到一些简单的运动学传动系统模板,在满足不同仿真精度的要求时也可以使用到它。\ref{5.png}所示: + \begin{figure}[H] % 可以是h(here),t(top),b(bottom),p(page of floats) \centering \includegraphics[width=1\textwidth]{5} % 假设图片文件名为car.pdf或car.png等,位于当前工作目录 @@ -90,22 +118,50 @@ \subsubsection{传动系统模板} \label{5.png} % 用于引用的标签 \end{figure} +Central Diff.(中央差速器)接收变速箱传来的动力,并分给前后轴,可以使得前后轴有不同的转速来提高行驶的稳定程度。图中的箭头为动力传递的路线。 + +Central diff.(中央差速器):接收变速箱输出的动力,分配给前后轴,允许前后轴以不同转速旋转,提升行驶稳定性。 +动力传递路径如图\ref{Power transmission path} +\begin{figure}[H] % 可以是h(here),t(top),b(bottom),p(page of floats) + \centering + \includegraphics[width=1\textwidth]{Power transmission path} % 假设图片文件名为car.pdf或car.png等,位于当前工作目录 + \caption{动力传递路径图} % 图片标题 + \label{Power transmission path.png} % 用于引用的标签 +\end{figure} + +动力传动系统模板的核心功能如表\ref{Power transmission system table}所示: +\begin{table}[H] + \centering + \caption{动力传动系统表} + \label{Power transmission system table} + \begin{tabularx}{\linewidth}{lXX} + \toprule + 概念 & 范围 & 核心功能 \\ + \midrule + Powertrain(动力总成) & 发动机、液力变矩器、变速箱 & 产生动力 + 调节动力(变速变扭) \\ + Driveline(传动系统) & 变速箱输出轴之后的所有部件(传动轴、差速器、半轴、轮毂) & 分配动力 + 传递到车轮 \\ + \bottomrule + \end{tabularx} +\end{table} + \subsubsection{车轮与制动系统模板} -车轮模板作为悬架主轴上附加质量与转动惯量的载体,实现车轮惯性参数的精准配置;制动器模板采用基于驾驶员制动输入调节的恒定扭矩模型,可复现车辆制动的动力学响应。 + +车轮模板是悬架主轴上加装的那些质量、转动惯量以及其它附加件,它用来对车轮惯性的参数做出准确的规定;制动器模板则运用了基于驾驶员制动输入变化来保持固定扭矩的模型,可以重现车辆制动时的动力学反应\cite{guo2025pid}。 \subsubsection{轮胎模型模板} -提供多精度等级的轮胎模型,包括刚性轮胎、Pacejka与Fiala半经验轮胎模型,以及基于绝对节点坐标公式或共旋转公式的有限元全可变形轮胎模型,可根据仿真需求选择适配的轮胎模型,平衡仿真精度与计算效率。 -针对履带式车辆,模块也提供了单销式/双销式履带板、配套链轮、扭转弹簧/液压悬架、惰轮张紧机构、滚筒等全系列模板,可实现履带式工程车辆的动力学建模。 + +给出多个精度等级的轮胎模型,即刚性轮胎模型、Pacejka 和 Fiala 的半经验型轮胎模型和采用绝对节点坐标公式或者是共旋转公式的有限元全可变形轮胎模型,并根据仿真需要来挑选合适的轮胎模型,以达到较好的仿真精确度和计算速度的目的。对于履带式的车辆来说,模块还提供有单销和双销的履带板以及链条、扭矩弹簧和液压悬挂装置(扭振减震),并配有挠度调节的挡轮和油压调正装置,在这些参数均可以得到满足的基础上才能对履带式工程车进行动力学计算。 \section{基于JSON文件的车辆模型实例化方法} -为降低建模门槛,Chrono::Vehicle提供了基于JSON格式输入文件的车辆模型定义机制,无需编写C++代码,即可完成车辆系统与子系统模板的实例化,也是本研究车辆模型参数调整的核心方式,hutb-CarlaUE4平台原生支持该JSON配置文件的导入与加载。 -基于JSON文件的车辆建模,遵循子系统模板的层级结构,通过顶级JSON文件与子系统引用JSON文件,即可完整定义一辆轮式/履带式车辆。以双轴双叉臂悬架轮式车辆为例,其顶级JSON规范文件核心结构如下,该结构完整定义了车辆的底盘、车轴、悬架、转向、传动系统等核心子系统,通过修改对应JSON文件中的参数,即可完成车辆动力学特性的调整: + +为了降低建模门槛,Chrono::Vehicle提供了一种使用JSON格式输入文件来创建车辆模型的方式,并且不需要写C++代码就可以得到一个完整的车辆系统和子系统的模板实例,这也是本文中关于如何改变车辆模型参数主要的方法之一,在Hutb-CarlaUE4平台上可以很方便地从JSON配置文件中加载并使用。根据JSON文件进行车辆建模时,按照子系统的层次结构组织起来,并且使用顶层JSON文件和子系统引用的JSON文件就可以完成一辆轮式或履带式的车辆。双轴双叉臂悬架轮式车辆顶级JSON规范文件的核心结构如上图所示,该结构对车辆的底盘、车轴、悬架、转向、传动系统等各个部分进行完整的定义,并且可以通过改变json文件中对应的参数来实现对于车辆动力学特性的一种更改: + \subsection{坐标系约定与适配规范} -Chrono::Vehicle模块遵循严格的坐标系约定,保证车辆子系统建模的规范性与跨平台适配性,也是与hutb-CarlaUE4平台联合仿真的核心适配基础。 + +Chrono::Vehicle模块对各种坐标系都有严格的规定,并且为了车辆子系统模型在各平台上都可以兼容、可以进行仿真和测试,它成为与hutb-carlaue4平台相结合的重要基础之一。 \subsubsection{车辆子系统与整车参考系} -每个车辆子系统均基于自身的参考系定义,模板中所有硬点、受力点位置均需在子系统参考系中提供。整车系统通过指定各子系统相对于车辆参考系的位置和方向,完成子系统的装配与连接,车辆参考系默认与底盘子系统的参考系对齐。 -模块严格遵循ISO 8855:2011车辆轴约定,采用右手坐标系,规定X轴向前、Z轴向上、Y轴指向车辆左侧,该约定与hutb-CarlaUE4平台的车辆坐标系完全兼容,无需额外的坐标转换,即可实现两个平台之间的车辆状态数据无缝交互\cite{zhang2025multiscene}。\ref{6.png}所 示: +每一个车辆子系统都会根据自身所处的参考系来确定所有的硬点和受力点的位置,在模板里面所有的这些信息都需要给出。整车系统用确定各个子系统相对于车辆参考系的位置、方向来装配、连接各个子系统,车辆参考系默认同底盘子系统的参考系相同。模块严格按照ISO 8855:2011车轴约定,使用右手坐标系,X轴向前进向、Z轴向上、Y轴指向车辆左侧,这个约定和hutb-CarlaUE4平台上车辆坐标系完全一致,并且不需要做任何坐标转换就可以做到两个平台之间车辆状态数据互相传递\cite{zhang2025multiscene}。如\ref{6.png}所示: \begin{figure}[H] % 可以是h(here),t(top),b(bottom),p(page of floats) \centering @@ -115,4 +171,4 @@ \subsubsection{车辆子系统与整车参考系} \end{figure} \subsubsection{模拟世界坐标系} -Chrono::Vehicle默认的世界坐标系与车辆参考系一致,采用ISO标准的Z轴向上坐标系,同时支持自定义世界坐标系,可适配不同参考系约定的仿真场景\cite{xu2025mining}。针对部分采用Y轴向上的仿真环境,模块提供了快捷设置接口`ChWorldFrame::SetYUP()`,可一键切换为X轴向前、Y轴向上、Z轴向右的世界坐标系;同时`ChWorldFrame`类提供了坐标系转换、高度查询、平面投影等工具函数,可实现ISO标准坐标系与自定义世界坐标系之间的无缝转换,保证了与不同仿真平台的适配能力\cite{ge2025rl}。 +Chrono::Vehicle默认的世界坐标系和车辆参考系是一致的,使用的是ISO标准的Z轴向上坐标系,还可以设置为自定义的世界坐标系,在不同的仿真环境下可以有不同的约定27[]。对于使用Y轴向上的仿真是可以方便地进行设置和切换,如模块提供了一种快捷的方式来设定为X轴向前、Y轴向上、Z轴向右的世界坐标系即ChWorldFrame::SetYUP();另外,还具有各种工具函数比如坐标系的转换,高度获取以及平面投影等等都可以在ChWorldFrame类里用到,从而能够满足多种仿真平台之间的兼容性需求\cite{ge2025rl}。 diff --git a/chrono/undergraduate/content/chapter3.tex b/chrono/undergraduate/content/chapter3.tex index 958c191b..e9aee782 100644 --- a/chrono/undergraduate/content/chapter3.tex +++ b/chrono/undergraduate/content/chapter3.tex @@ -3,38 +3,59 @@ \chapter{仿真验证与可视化} \section{车辆模型与仿真实现} \subsection{典型车辆模型} - -Chrono::Vehicle提供了多种典型车辆模型的模板如图\ref{fig:7}:(如轿车、SUV、货车、越野车等),用户可基于模板快速构建符合需求的车辆模型,无需从零开始建模。典型车辆模型模板已预设各子系统的参数(如底盘尺寸、悬挂类型、动力参数等),用户可根据实际需求调整参数,适配具体的仿真场景。例如,轿车模型模板通常采用麦弗逊悬挂、前置前驱布局,动力参数适配家用轿车的性能;越野车模型模板则采用多连杆悬挂、四轮驱动布局,增强车辆的越野性能与通过性。此外,用户还可基于模板进行扩展,添加自定义的子系统(如特殊轮胎、新型转向机构),构建个性化的车辆模型,满足不同的仿真需求。 +Chrono::Vehicle工具中有各种常见的车辆模型模板,如图\ref{fig:7}所示,轿车、SUV、货车、越野车等都可以用到;用户无需从零开始建模,只需要使用这些模板就可以得到满足自己需要的车辆模型。各个子系统相关的参数在这些典型的车辆模型模板里都预先设置好了一些,比如底盘的大小、悬挂的形式、动力方面的一些参数等等,根据实际仿真所要求的情况来调换相应的参数值就可以使模型符合具体地仿真情况。以麦弗逊悬挂为例,在轿车模型模板中使用得较多的是前置前驱、动力参数适合于家用轿车性能的,而多连杆悬挂在越野车模型模板中的应用则是因为其四轮驱动的布置可以提高车辆的越野能力与通过性。另外,用户可以对已经建立好的模板进行扩展,在模型上再添设一些特有的部件,比如说专门的轮胎或者崭新的转向机构等这些都属于用户的自行设置范畴之内,在此基础上创建出来的车辆模本是独一无二不可复制的。 \begin{figure}[H] \centering \includegraphics[width=1\textwidth]{7} \caption{车辆模型仿真图} \label{fig:7} \end{figure} + \subsection{C++教学示例} -Chrono::Vehicle提供了丰富的C++教学示例,用于指导用户掌握车辆建模与仿真的实现方法,示例涵盖了从基础建模到复杂场景仿真的全流程。教学示例的核心内容包括:车辆模型的初始化、子系统的参数配置、仿真循环的实现、测试台架的搭建、可视化的启用及仿真结果的输出与分析。例如,基础示例展示了如何构建简单的轮式车辆模型,实现匀速行驶仿真;进阶示例则展示了复杂场景(如崎岖路面行驶、制动测试)的仿真实现,以及多子系统的协同优化。用户可通过学习教学示例,掌握Chrono::Vehicle的核心API调用方法,理解车辆建模与仿真的核心逻辑,进而基于示例进行二次开发,实现符合自身需求的车辆仿真系统。同时,教学示例的代码结构清晰、注释详细,便于用户理解与修改。 +Chrono::Vehicle这个工具中存在许多教学用的C++示例,这些示例的作用在于教用户学习车辆建模与仿真时的具体做法,从基本建模到复杂的场景仿真,所有的过程这些示例都包括了。很多内容都是教学示例的核心部分,其中包含有车辆模型初始化时要做什么事情,系统中的参数该如何设定,仿真的循环是如何操作的,测试台架应当搭成什么样才能运转起来,在这里又该采用哪些手段将可视化特性纳入考量范围之内,最终形成的仿真成果应该被抛诸何处并且加以考察解析呢?基础类的示例会让用户知道怎样搭建一个简单的轮式车辆模型,又如何使它实现匀速行驶;进阶类的则会示范出复杂的环境里做仿真怎么做,并且还能教大家如何通过多种子系统的协调来提升性能等等。经过学习这些教学示例以后,用户便掌握了Chrono:Vehicle系列API的调用方法以及车辆建模、仿真工作原理,并且在了解了这些教学示例之后能够对其他用户的二次开发项目给予帮助。另外,这些教学示例的代码结构比较清晰,注释也很详细,这样可以让用户更好地了解代码,并且便于用户对代码进行修改和调整。 + +\subsubsection{车辆json文件示例} + +Chrono::Vehicle模块支持用JSON文件来实现车辆模型参数化的实例化,不需要写底层C++代码就可以快速地设置车辆各个子系统的参数以及动力学特性,并且该方法的输出结果可以直接被hutb-CarlaUE4平台所接受和使用,所以它是我们进行各种车辆模型调整的时候最常用的方法之一。根据本文实验用到的车辆模型,给出完整的车辆JSON数据实例以及各个重要参数,并且对所有的这些参数及它们和车辆动力学仿真之间存在着怎样的联系进行了详细的解释。 + +本实例为在Hutb-CarlaUE4平台上建立的4轮驱动小汽车模型,是按照Chrono::Vehicle模板化建模的方法建立起来的一个底盘、悬架、轮胎、动力总成四个子系统组成的车辆模型,并且这些参数都符合实际家用轿车的规格和性能要求,在进行普通的驾驶行驶以及转向等各类操作的时候都可以使用它来进行模拟,也可以根据需要对它的各个部分的参数进行相应的修改来适应其他型号的车型。完整的代码在附件中给出。以上JSON实例为Chrono的车辆标准整车配置结构,核心组成部分如下: + +1、车辆基础信息:根据 Name、Type 和 Template 设定车辆的名称、类型和建模模板,在此例中使用了默认的 WheeledVehicle 车辆模型,以符合仿真的要求。 + +2、底盘子系统采用外部JSON文件引用的方式,把底盘的车身质量、惯量、几何尺寸等主要的惯性参数统一起来进行管理。 + +3、前后车轴和悬架系统,定义两根独立的车轴,都采用了双叉臂式的悬架结构,每个车上装有左右两个轮胎和一个简单的刹车装置,并且可以通过坐标的位置来确定车轴安装的位置,使车辆的几何形状符合实际的测量结果。 + +4、转向子系统是采用齿条齿轮式的转向方式,在一定的安装位置和姿态参数控制下,使转向系统和前悬架达到最佳配合。 + +5、车辆几何参数,Wheelbase为2.776m是轴距的意思,MinimumTurningRadius就是指车辆的最小转弯半径是多少,MaximumSteeringAngle指的是车辆的最大转向角有多大等等这些都直接地体现了这辆车的操控性。 + +6、动力传动系统根据外部文件中的两驱传动配置来提供动力,使动力输出到后车轴上满足了家庭轿车的动力传递逻辑。 + +本配置文件是用模块化引用以及集中式参数管理的方式建立起来的,可以方便快捷地搭建出各种各样的车辆模型,并且还能对各种不同的模拟环境进行不断的调节和优化,能够很轻易的进入到hutb-CarlaUE4这个环境中工作并且还可以灵活调整各个系统的结构和功能,从而达到适应多种仿真情况的目的。 \section{多体物理仿真关键技术挑战} \subsection{多体约束精度与场景耦合问题} -多体约束精度与场景耦合是Chrono车辆仿真中的核心技术挑战之一。车辆多体系统包含大量的约束关系(如旋转副、移动副、球铰等),约束精度直接影响动力学计算的准确性,若约束设置不当或精度不足,会导致仿真过程中出现部件运动异常、受力失真等问题。例如,悬挂系统与底盘、车轮的约束连接精度不足,会导致车辆行驶过程中出现悬挂脱落、车轮偏移等异常现象。同时,车辆模型与地形、测试台架等场景的耦合问题也会影响仿真精度,地形的几何误差、摩擦系数设置不合理,会导致轮胎与地面的接触力计算偏差,进而影响车辆的行驶状态仿真。此外,多子系统间的耦合(如传动系统与动力系统、转向机构与悬挂系统)也需协调,若耦合逻辑不合理,会导致各子系统运动不协调,影响仿真的真实性。 + +在Chrono车辆仿真中,多体约束的精度以及场景间的衔接问题是关键技术难题之一;研究人员搭建的车辆多体系统里包含多种约束关系,例如旋转副、移动副、球铰等等,动力学计算的精准度直接影响到约束是否被正确地模拟出来,在错误地设置约束的情况下,仿真的结果将很难符合实际情况,因为各个子系统的运动不能按照预期那样同步运行;举例而言,悬挂系统与底盘及车轮之间建立的约束联系不够精确,当这样的情形发生之时,车辆行驶过程中所出现的各种异常情况便层出不穷,并且由于地形存在几何误差而造成的摩擦系数设定失误也会干扰轮胎与地面之间的相互作用过程的再现情况;同时为了保证各子系统之间的顺畅对接并且使仿真效果得到保障,还需要对研究人员制定出来的衔接逻辑进行细致入微的协调把控工作,包括传动系统同动力系统的关系处理方法,转向装置和悬挂机构怎样联结起来倘若衔接策略失当或数值安排得不对劲儿的话,那么整个系统内的各组成部分就很难实现有效的配合运转,并给最终呈现给大家看的汽车性能评价报告书赋予一种不可动摇的基础支撑力量。 \subsection{动力学求解效率与实时性矛盾} -动力学求解效率与实时性的矛盾是多体物理仿真的共性问题,在Chrono车辆仿真中尤为突出。车辆多体系统包含多个子系统、大量的刚体与约束,动力学方程的复杂度较高,求解过程需要消耗大量的计算资源。为保证仿真精度,通常需要减小仿真步长,这会进一步增加计算量,降低求解效率,导致仿真无法满足实时性需求(如实时控制、实时可视化)。例如,在复杂场景(如多车辆交互、崎岖路面行驶)仿真中,若车辆模型细节丰富、约束数量多,求解过程会变得缓慢,无法实时反馈车辆的运动状态。此外,动力学求解器的选择也会影响求解效率与实时性,不同求解器(如Euler法、Runge-Kutta法)的精度与效率存在差异,如何在保证精度的前提下提升求解效率,实现实时仿真,是当前面临的重要挑战。 + +多体物理仿真过程中,动力学计算效率与实时性的矛盾普遍存在,而在Chrono车辆仿真中尤为明显,由于车辆多体系统的包含子系统较多、刚体和约束众多,动力学方程非常复杂,因此研究人员求解工作所需计算资源较大;为了使仿真的准确性得以保证,研究人员往往将仿真步长缩小以获得较好的仿真结果,这样会导致计算量增大,进而造成求解速度下降并难以实现实时性要求,例如实时控制、实时可视化等要求;另外,研究人员选用的动力学计算工具也会对其求解效率及实时性产生影响,不同计算工具如Euler法、Runge-Kutta法等准确性和效率存在差异,如何在保障精度的前提下提高求解效率\cite{wang2023crash},实现实时仿真是当前亟待攻克的问题。 \subsection{多平台数据交互延迟问题} -在复杂车辆仿真场景中,常需要将Chrono车辆模型与其他平台(如CarlaUE4、MATLAB/Simulink)进行耦合,实现多平台协同仿真,此时多平台数据交互延迟成为关键技术挑战。Chrono负责车辆多体动力学计算,CarlaUE4负责场景渲染与可视化,MATLAB/Simulink负责控制策略设计,各平台间需要实时传递数据(如车辆状态、控制信号、场景信息)。由于各平台的计算节奏、数据格式存在差异,数据交互过程中会出现延迟、数据丢失、数据不同步等问题,影响仿真的协调性与真实性。例如,Chrono计算的车辆位置数据传递至CarlaUE4时出现延迟,会导致可视化场景中车辆的运动与动力学计算结果不同步;控制信号从MATLAB/Simulink传递至Chrono时延迟,会导致车辆控制响应滞后,影响仿真的准确性。此外,数据交互接口的设计也会影响交互效率,接口不完善会进一步加剧数据延迟问题。 + +当进行复杂的车辆仿真时,研究人员常常需要将 Chrono 车辆模型和其他平台结合使用,比如 CarlaUE4、MATLAB/Simulink 这些平台,以此实现多平台协同仿真,这时候多平台之间的数据交互延迟,就成为了关键的技术挑战;Chrono 平台的主要工作是计算车辆多体动力学,CarlaUE4 平台负责场景的渲染和可视化,MATLAB/Simulink 平台则负责设计控制策略,各个平台之间需要实时传递各类数据,像车辆状态、控制信号、场景信息等;由于各个平台的计算速度、数据格式都不相同,所以在数据交互的过程中,很容易出现延迟、数据丢失、数据不同步的问题,这些问题会影响仿真的协调性和真实度;比如 Chrono 计算出的车辆位置数据,在传递到 CarlaUE4 平台时出现延迟,那么在可视化场景中车辆的运动就和动力学计算的结果不一样;如果控制信号从MATLAB/Simulink平台传到Chrono平台上存在延迟现象,车辆的控制响应会变得缓慢起来,从而影响仿真结果的准确性;另外接口设计得不好也会使得数据传输延迟加重\cite{bai2024mixed}。 \section{仿真模型优化设计} \subsection{Chrono算法优化设计} -针对多体物理仿真的技术挑战,首先从Chrono核心算法入手进行优化,提升仿真精度与求解效率。在约束精度优化方面,采用高精度约束求解算法,优化约束方程的求解逻辑,减少约束误差,确保多体系统的运动协调性;同时,对约束进行分类处理,针对关键约束(如悬挂与车轮的连接约束)采用更高的求解精度,针对非关键约束适当降低精度,实现精度与效率的平衡。在求解效率优化方面,优化动力学求解器的迭代策略,采用自适应步长求解算法,根据仿真过程中车辆的运动状态动态调整步长,在车辆运动平稳时增大步长提升效率,在车辆运动剧烈(如制动、转向)时减小步长保证精度;此外,引入并行计算技术,将多子系统的动力学计算分配至多个计算核心,提升求解效率,缓解实时性矛盾。同时,对Chrono的核心代码进行优化,减少冗余计算,提升代码执行效率。 +面对多体物理仿真所遇到的技术难题,研究人员先从 Chrono 核心算法着手做改进工作,目的是提升仿真的精确度以及求解速度;在约束精度优化方面,研究人员使用更准确的约束求解算法来解决约束问题,并对约束方程的求解过程进行改良与调整,减少因约束产生的误差,以保证多体系统的协调运动;另外,将约束分为重要和次要两类,对重要的悬挂、车轮等约束采用较高的求解精度,而对于其他非关键约束则适当降低精度,从而兼顾仿真精度与求解效率之间的平衡;针对动力学求解器迭代的方式进行了优化,选择了一些能自主调整步长的求解算法,在车辆运动较为稳定的时候增加步长以加快进程,在车辆剧烈运动如制动、转向时减小步长保障准确性的同时提高求解的速度;此外研究人员还将并行计算的概念应用到了仿真当中,将多个子系统动力学的计算任务平均分配给不同的计算机处理器去完成,进而提升整体仿真速度;最后,对于Chrono的核心代码做了简化,删除了不必要的计算部分以提高程序执行的高效性。 \subsection{CarlaUE4与Chrono耦合优化} -针对多平台数据交互延迟问题,对CarlaUE4与Chrono的耦合过程进行优化,提升数据交互效率与同步性\cite{openhutb2025hutb}。首先,优化数据交互接口,设计轻量化的数据交互协议,减少数据传输量,采用UDP协议实现实时数据传输,降低数据传输延迟;同时,统一各平台的数据格式,避免数据转换过程中的延迟与误差。其次,采用时间同步机制,协调Chrono与CarlaUE4的计算节奏,确保两者的仿真步长一致,实现数据的实时同步。例如,设置统一的仿真时钟,Chrono每完成一步动力学计算,立即将车辆状态数据传递至CarlaUE4,CarlaUE4同步更新可视化场景,避免数据延迟导致的运动不同步。此外,对耦合过程中的数据进行缓存与预处理,减少数据传输过程中的波动,提升数据交互的稳定性;同时,优化CarlaUE4的渲染效率,减少可视化渲染对数据交互的影响,确保多平台协同仿真的流畅性。 - -在实时模式下,两个时间步长之间的经过时间应与平台和游戏时间戳相似。在固定时间步长中运行时,游戏时间戳以恒定时间步长递增(delta=1/FPS),而平台时间戳保持实际经过的时间,见表\ref{tab:timestamp}。 +针对多平台数据交互延迟的问题,相关方对 CarlaUE4、Chrono 之间的耦合过程进行了改进,从而提高数据交互的速度和同步情况\cite{openhutb2025hutb};首先,相关人员改善了数据交互接口的设计,并且制定了一个简单的数据交换协议,减小了数据的传输量并使用UDP协议来实现实时数据传输,降低了解算周期;另外,相关人员将各个平台所使用的数据格式加以整合,防止在数据传递的过程中产生差异而导致误差的发生;接着,在耦合过程中应用到的时间同步技术手段可以使得Chrono与CarlaUE4的仿真步数相一致,从而使两者之间存在的运动不一致性得以消除并且保证各种平台协同仿真的顺畅运行;最后,相关的部分还采取措施来保障数据交换是安全可靠的,并没有受到由外界因素影响而造成的种种困扰的情况;而且也对CarlaUE4的可视化渲染速度做了调整处理工作,并将其效果体现在系统响应能力上以及性能方面表现出来,以此为依托让各项任务都得到有效的完成,并达到预期的目标值所在之处。见表\ref{tab:coupling optimization}。 \begin{table}[H] \centering @@ -54,25 +75,23 @@ \subsection{CarlaUE4与Chrono耦合优化} \section{CarlaUE4与Chrono联合仿真输出} \subsection{联合仿真架构与交互逻辑} -Chrono 与 CarlaUE4 联合仿真采用双引擎分工协同架构,实现高精度车辆动力学与高保真可视化场景的联合运行。其中,CarlaUE4负责场景渲染、传感器仿真、碰撞检测与环境交互;Chrono负责车辆多体动力学高精度求解,包括悬架、轮胎、动力传动与车身姿态的精确计算。两者通过 Carla 内置接口实现数据实时双向同步,构成完整的自动驾驶动力学仿真闭环。联合仿真的核心交互流程如下: -1、控制指令下发:用户通过键盘或控制算法输出油门、制动、转向指令,由 PythonAPI 统一接收。 -2、Chrono 动力学解算:启用 Chrono 后,车辆动力学完全由 Chrono 接管,依据多体动力学方程求解车身姿态、加速度、角速度等状态量。 -3、位姿回传同步:Chrono 将每一仿真步的车辆位置、姿态同步至 CarlaUE4,驱动场景中车辆模型运动。 -4、传感器数据输出:Carla 内置 IMU、GNSS、相机等传感器基于 Chrono 输出的真实运动状态生成数据,保证传感器观测的动力学真实性。 -5、可视化渲染:UE4 引擎完成环境、光照、天气与车辆姿态的实时渲染。 -本研究通过 Carla PythonAPI 实现PhysX 与 Chrono 物理引擎一键切换,切换快捷键为Ctrl+O。启用 Chrono 多体物理时,系统加载车辆 JSON 参数文件,包括车身模型、动力总成模型与轮胎模型,完成高精度动力学初始化。关闭 Chrono 后,车辆恢复默认 PhysX 物理模型,实现快速对比验证。 +Chrono和CarlaUE4联合仿真的工作方式是使用两个发动机分别进行独立的工作,并且这两个发动机之间会互相配合协调运作。在这些软件中,CarlaUE4 是对场景渲染、传感器模拟以及碰撞检测和环境的互动进行控制的主要模块,并且也是用到最多的那一个模块。两者的通信是利用Carla提供的接口来完成的数据的实时双向传送,从而形成一个完整了的自动驾驶动力学仿真环。联合仿真的主要交互过程有三步: +1、第一步是控制指令发出,用户用键盘或者控制算法发油门、制动和转向的指令给PythonAPI,第二步是由模拟器发送传感器数据和外部环境变量到仿真模型中去,第三步就是分析计算部分把结果反馈出来显示。 +2、Chrono 动力学解算:打开 Chrono 后,车辆的动力学就全部交给 Chrono 来计算,也就是按照多体动力学的方程来求解出车身的姿态、加速度以及角速度等等的状态变量。 +3、位姿回传同步:Chrono把每一个仿真步车辆的位置和姿态传递给CarlaUE4,使CarlaUE4里面的车辆模型运动起来。 +4、传感器的数据输出为 Carla 里自带的 IMU、GNSS、相机这些传感器产生真实运动的传感器观测动力学的真实性数据。 +5.可视化渲染,使用UE4引擎进行环境的渲染工作,并且加入光照的效果以及天气的变化,对于车辆的姿态也做了相应的模拟与调整。本文利用PythonAPI的Carla Python API实现PhysX和Chrono物理引擎之间的一键转换,切换快捷键是Ctrl + O。开启Chrono多体物理的时候,系统会加载出车身参数表、动力总成参数表和轮胎参数表这三种类型的json格式的表格出来,并且对这些数据进行处理之后就可以开始执行高精度的动力学模拟了。关闭Chrono之后车辆就回回到默认的PhysX物理模型,这样就可以进行快速的比较验证。 \subsection{基于 Pygame 的交互控制与可视化画面实现} -为实现 Chrono 与 CarlaUE4 联合仿真的实时交互与状态监控,系统采用Pygame 图形库搭建人机交互界面如\ref{fig:8},负责仿真窗口渲染、键盘控制响应、车辆状态显示与数据可视化输出。Pygame 作为轻量级跨平台图形工具,能够在不影响仿真实时性的前提下,完成控制指令采集、界面绘制与信息提示,为联合仿真提供稳定可靠的交互入口。 +Chrono 和 CarlaUE4联合仿真的时候,就需要实时地对人的操作以及系统的状态进行监测,本文就使用Pygame图形库来创建人机交互界面,该界面如图\ref{fig:8}所示;它可以完成的任务有很多,例如仿真窗口画面的渲染、键盘控制命令的接收、车辆的状态展示、仿真数据的可视化等。Pygame 是一款轻量级的图形工具,可以用于任何平台,并且不干扰仿真的实时运行状态,还可以通过它的控制指令来获取操作数据并进行显示处理,在这种环境下就可以给联合仿真创建出一块稳定的交互窗口。 \begin{figure}[H] \centering \includegraphics[width=1\textwidth]{8} \caption{pygame交互画面} \label{fig:8} \end{figure} -Pygame 界面承担键盘指令解析与仿真控制中枢作用,支持车辆油门、制动、转向、换挡、灯光等操作,并统一将控制信号发送至 Carla 或 Chrono 动力学模型。在启用 Chrono 多体物理时,Pygame 将控制指令直接传入 Chrono 车辆求解器;在默认 PhysX 模式下,指令则发送至 Carla 原生车辆控制接口,实现两种物理模式下的统一控制逻辑。 - -Pygame 画面分为主渲染窗口与HUD 信息面板两部分。主渲染窗口接收 Carla 输出的 RGB 相机图像,实时显示仿真场景;HUD 面板叠加显示车辆关键状态,其中面板见表\ref{pygame data output} +Pygame界面上的软件起到处理键盘按键和仿真的主要地方,在这里可以对车辆进行油门,刹车,转向,换挡,灯光等等的操作,并且把所有的控制命令发给Carla或者Chrono力学模型。启用了Chrono多体物理的时候,Pygame会把指令直接传递给Chrono的车辆求解器,在默认PhysX模式下,则是将指令发到Carla原生的车辆控制接口上,这样就可以让两种物理模式下的控制逻辑达成一致。 +Pygame的画面分成主渲染窗口和HUD信息面板两个部分。主渲染窗口接收Carla输出的RGB相机图片,显示仿真的场景;HUD面板上面有各个车关键数据,如下表格\ref{pygame data output}所示。 \begin{table}[H] \centering \caption{pygame数据输出} @@ -99,7 +118,7 @@ \subsection{基于 Pygame 的交互控制与可视化画面实现} \end{equation} 在 Pygame 交互画面中,系统实时采集上述传感器数据,并根据式 (\ref{eq:d2i})其中,$h1$为当前时间增量,$h2$为前一个时间增量。 对加速度信息进行解算与显示,为车辆动力学状态监控提供直观依据。 -该架构使操作人员能够直观监测仿真状态,尤其在 Chrono 高精度动力学模式下,可直接观察悬架姿态、车身振动、转向响应等细节变化,为实验分析提供直观依据。 +此架构可以让操作人员对仿真的状态进行实时的监控,在使用Chrono这种高精度的动力学模态的时候,还可以直接看到悬架的状态以及车身的震动情况以及转向系统的反应等等,这样做的好处就是可以使得实验证实有很强的参照作用。 -通过 Pygame 界面、Carla 渲染画面与 Chrono 动力学的同步运行,基本实现了 “交互控制 — 高精度物理求解 — 场景渲染 — 数据采集” 一体化联合仿真平台。 +通过使用Pygame的屏幕、Carla虚拟环境以及Chrono弹性体动力学来建立一个具有交互控制、精确的物理验证环境、渲染效果好的数据分析功能和相互配合的各种各样的系统。 \newpage \ No newline at end of file diff --git a/chrono/undergraduate/content/chapter4.tex b/chrono/undergraduate/content/chapter4.tex index 89dc6953..af9cdda8 100644 --- a/chrono/undergraduate/content/chapter4.tex +++ b/chrono/undergraduate/content/chapter4.tex @@ -3,38 +3,28 @@ \chapter{实验与分析} \section{实验准备} \subsection{环境配置} -本文实验环境为:处理器为 Intel Core i7-12700h、运行内存为 -16G、GPU 为 NVIDlA GeForce RTX 3060 Laptop GPU。本文实验基于 PyCharm 和 vscode平台对模型算法进行训练和测试,操作系统为 Windows11,配套环境为 python3.8、CUDA11.1、carla 0.9.15,仿真环境为 CarlaUE4。 +本文实验环境为Intel Core i7-12700h处理器、16G的运行内存、NVIDiA GeForce RTX 3060 Laptop GPU。本文实验以PyCharm和vscode平台为基础,在Python3.8环境下利用cuda11.1、carla 0.9.15以及CarUe4作为支持系统,并且使用了Windows11操作系统。 \subsection{实验数据集与参数设置} -本次实验基于CARLA仿真平台搭建测试场景,分别启用CARLA原生物理引擎(基于Bullet游戏引擎)与Chrono多体物理引擎,保证两个测试场景的参数完全一致,包括车辆模型、初始状态、行驶路径、环境参数及仿真时长等。实验仿真时长设定为20秒,其中0-15秒为车辆正常行驶阶段,包含加速、减速、转向等常规操作,15-20秒为车辆碰撞测试阶段,模拟极端工况下的车辆动力学响应。实验过程中,同步采集两个引擎输出的IMU核心数据,包括平动速度(X/Y/Z轴)、平动加速度(X/Y/Z轴)及角速度(X/Y/Z轴),形成对比数据集用于后续分析。 +本次实验的测试场景是在CARLA仿真的平台上构建起来的,启用了两种不同的物理引擎,一种是CARLA自己用Bullet游戏引擎开发的,另一种是Chrono多体物理引擎,将两者所有的参数设置为完全相同,在仿真时间上设置了20秒的时间段,前15秒是正常行驶阶段,车辆进行加速、减速、转向等常规动作,后5秒也就是15到20秒是车辆碰撞的测试部分,通过模拟极端工况下车辆的动力学响应来完成实验;当实验开始之后,会同时采集两种物理引擎输出的IMU核心数据,包括X/Y/Z轴平动速度、X/Y/Z轴平动加速度和X/Y/Z轴角速度,然后对这两组数据进行对比处理以便于之后的研究工作;最终会在结束后的所有过程中得到一个包含多种因素影响的数据集合。 \section{评价指标} -本文以“相同行动路径”为核心前提(即两引擎控制车辆完成完全一致的操作:匀速行驶、加速、减速、转向,路径轨迹、操作时机与幅度完全相同),聚焦IMU传感器核心数据(三轴加速度、三轴角速度),结合仿真精度、数值稳定性等评价指标,展开Chrono与PhysX的输出数据对比,通过同一图下的曲线特征分析,明确两者优劣势,重点阐述Chrono替换PhysX的核心提升部分,为论文实验分析、仿真引擎选择提供数据支撑。 +本文认为相同的行动路径是两个引擎控制车辆做完全一样的运动轨迹、加速、减速、转向,在此基础上对 Chrono 和 PhysX 的传感器数据,如三轴加速度、三轴角速度进行了对比,用同一图的曲线特点来说明它们的不同之处,从而确定哪个更适合,以此为基础进行论文中的实验分析和仿真引擎的选择。 \section{实验结果与分析} -结合仿真实验核心评价指标(仿真精度:动力学误差DE、状态误差SE;数值稳定性:数据波动、伪噪声;实时性:仿真步长耗时),以IMU三轴加速度(X向:前进方向、Y向:侧向、Z向:垂直方向)、三轴角速度(对应车辆俯仰、侧倾、偏航姿态)为核心分析对象,分别对Chrono与PhysX的IMU数据表现展开详细分析。 - +结合仿真实验的核心评价指标,即仿真精度的三个方面的参数,也就是动力学误差DE、状态误差SE以及数值稳定性D、数据波动和伪噪声E等这些因素,并且把IMU这三个方面主要的数据情况给进行详细的剖析研究。 \subsection{Chrono IMU数据分析} -Chrono作为多体动力学仿真引擎,其IMU数据输出完全贴合仿真精度与数值稳定性的高要求,具体表现结合评价指标如下: - +Chrono 作为多体动力学仿真引擎,其 IMU 数据输出完全贴合仿真精度与数值稳定性的高要求,具体表现结合评价指标如下: \subsubsection{仿真精度(核心评价指标)} - -动力学误差($DE$)低:IMU数据与实车测试数据偏差小,加速度、角速度数据均能较好还原车辆动力学特性,体现出较高的动力学还原精度。 - -状态误差($SE$)小:IMU采集的车辆运动状态参数与实车偏差极小,能够精准复现车辆加减速、转向过程中的动力学响应。 - +动力学误差($𝐷𝐸$)低:IMU的数据和实际车辆的测试数据之间的误差较小,加速度、角速度等信息可以较好的还原出汽车的动力学特征,所以具有很高的动力学还原精度。 +状态误差($SE$)小:IMU得到的是汽车行驶时所有的运动信息,而且和真实的汽车完全吻合。 \subsubsection{数值稳定性} -无伪振荡与数值噪声:IMU曲线整体连续平滑,仅存在与车辆运动状态匹配的自然波动(如Z轴±0.1~0.3 m/s²的微振动),无高频杂波,无需额外滤波处理即可直接用于论文数据统计。 - -数据波动规律可解释:所有波动均对应真实物理过程——Z轴波动源于悬挂压缩回弹、发动机振动及轮胎与地面的接触交互;转向时Y向加速度、Z向角速度的渐变波动,对应实车离心力与转向阻尼特性,波动规律贴合物理原理。 - +无伪振荡、数值噪声,IMU曲线总体是连贯平滑的,只存在着和车速一致或者变化比较大的自然波动(在 Z 轴上有 -0.1到+0.3m/s² 的波动),没有大量的高频杂波,可以不用去加任何滤波来直接进行论文中的数据分析工作。 +数据波动规律可以说明,在所有的波动当中,它们都是真实物理过程的结果,Z轴上的波动是由悬挂压缩反弹带来的,发动机产生的震动还有轮胎和地面之间的相互作用引起的,这些现象都符合实际汽车上存在的离心力以及转向阻尼情况等等,因此数据波动的现象也能够得到准确的解释。 \subsubsection{IMU各维度数据细节} - -三轴加速度:加速时渐变上升、减速时缓慢回落,存在真实动力学延迟;转向时Y向加速度随转向角度渐变,峰值与转向幅度正相关;Z轴始终有合理微振动,贴合实车垂直方向动力学响应。 - -三轴角速度:转向时曲线缓慢升降,无突变,体现转向系统阻尼特性;无转向操作时,角速度稳定在±0.01 rad/s以内,姿态稳定性强,能够精准反映车辆俯仰、侧倾、偏航的真实变化。如图\ref{fig:9}所示是Chrono仿真引擎的IMU数据曲线图。 +三轴加速度,在加速时逐渐上升,减速时慢慢下降,并存在真实的动力学延迟现象;转向的时候Y向的加速度会随着转向角度而变化,峰值和转向幅度正相关;Z轴永远有一定的规律性的微震动,符合了现实中的汽车垂直方向动力学反应。 +三轴角速度:转向时曲线平稳上下,没有突变的现象出现,说明转向系统具有一定的阻尼作用;不进行转向操作的时候,角速度保持在正负0.01rad/s的范围内之内,并且是稳定的,可以比较准确地反映出车辆对于高度、横倾以及侧滑的情况如何。如图\ref{fig:9}是Chrono仿真的IMU数据曲线。 \begin{figure}[H] \centering \includegraphics[width=1\textwidth]{9} @@ -44,25 +34,17 @@ \subsubsection{IMU各维度数据细节} \subsection{PhysX IMU数据分析} -PhysX作为简化物理仿真引擎,其IMU数据输出侧重实时性与便捷性,在仿真精度与数值稳定性上存在明显短板,具体结合评价指标分析如下 - +PhysX 作为简化物理仿真引擎,其 IMU 数据输出侧重实时性与便捷性,在仿真精度与数值稳定性上存在明显短板,具体结合评价指标分析如下 \subsubsection{仿真精度(核心评价指标)} - -动力学误差(DE)高:IMU数据与实车测试数据偏差显著,无法准确还原车辆动力学特性。 - -状态误差(SE)大:IMU采集的车辆运动状态与实车偏离明显,难以支撑高精度科研实验。 - +动力学误差($DE$)大:IMU 的数据和实车测试的数据相差很大,不能很好的表现出来的车辆的动力学特性。 +状态误差($SE$)大:因为IMU采集出来的车辆运动状态和实际不符太大了,不能做精密的研究实验。 \subsubsection{数值稳定性} - -存在伪振荡与数值噪声:部分工况下(如匀速行驶),IMU数据会出现幅度<0.1 m/s²的高频小抖动,属于简化求解导致的伪噪声,非真实物理振动,需额外滤波处理才能用于数据统计。 - -数据跳变明显:加减速、转向瞬间,加速度、角速度曲线出现瞬间跳变,无过渡过程,数据连续性差,不符合真实物理规律,数值稳定性不足。 - +存在伪振荡和数值噪声,在一些匀速行驶工况下,由于简化求解造成的误差会得到一部分反映出来,在这些情况中出现的是微小的高频振动,属于假噪声而非真实的振动,并且需要用其他的算法来进行去除之后再做后续的数据计算。 +数据跳跃很明显,加减速以及转向的瞬间都会有加速度、角速度曲线突然发生变化的现象,并没有中间过渡阶段,缺少了数据连续性的保证,在真实的物理世界中应该是不存在这样的情况的,数值上也很难达到稳定的程度。 \subsubsection{IMU各维度数据细节} +三轴加速度为理想的阶跃变化,在加速时刻达到最大值,减速度时回落到零附近,忽略车的惯性,匀速行驶的时候曲线是直线的,Z轴没有合理的波动,缺少悬挂系统以及发动机振动之类的物理特征。 +三轴角速度,转向时立即达到最大值、转向后马上回到零位置,没有转向阻尼特性,正常工作的时候会出现一些伪噪声的波形,在真实地反映出车辆的姿态改变过程中所经历的事情方面有很大的缺陷。如图\ref{fig:11}为PhysX仿真的IMU数据曲线。 -三轴加速度:呈理想阶跃变化,加速瞬间达到峰值、减速瞬间回落至0,忽略实车惯性;匀速行驶时曲线平直,Z轴无任何合理波动,缺失悬挂、发动机振动等核心物理细节。 - -三轴角速度:转向瞬间立刻达到峰值、转向结束后瞬间回0,无转向阻尼特性;无转向操作时偶尔出现伪噪声波动,无法准确反映车辆姿态变化的真实规律。如图\ref{fig:11}所示是PhysX仿真引擎的IMU数据曲线图。 \begin{figure}[H] \centering \includegraphics[width=1\textwidth]{11} @@ -72,10 +54,9 @@ \subsubsection{IMU各维度数据细节} \subsection{Chrono与PhysX IMU数据对比分析} -本次实验共生成4张IMU数据对比图,以蓝色曲线表示CARLA原生物理引擎输出数据,红色曲线表示Chrono多体物理引擎输出数据,时间轴统一为0-20秒,各图分工明确,分别实现IMU数据的全维度总览与各核心分量的专项放大对比,具体如下: - +本次实验共生成 4 张 IMU 数据对比图,以蓝色曲线表示 CARLA 原生物理引擎输出数据,红色曲线表示Chrono 多体物理引擎输出数据,时间轴统一为 0-20 秒,各图分工明确,分别实现 IMU 数据的全维度总览与各核心分量的专项放大对比,具体如下: \subsubsection{速度专项对比图} -如图\ref{fig:12}所示,该图单独放大展示了速度的X/Y/Z三个分量,聚焦于车辆整体平动趋势的仿真差异。其中X轴对应车辆纵向(前进/后退方向)速度,Y轴对应车辆横向(左右方向)速度,Z轴对应车辆垂直(上下方向)速度,可直观对比两个平台在车辆平动运动仿真中的一致性与差异点。 +如图\ref{fig:12}所示,仅显示了速度的X、Y、Z这三个方向上的变化情况,从车体运动的总体趋势上做了一点模拟。X轴代表车辆的纵向即前进或者后退的速度,Y轴代表车辆的横向(左右方向)速度是X轴代表的车辆水平(纵向)速度,Y轴上的速度为Z轴所代表的车辆垂直(横向)速度,在车模拟运行过程中可以进行比较以发现两者之间有什么共同之处以及不同之点。 \begin{figure}[H] \centering \includegraphics[width=1\textwidth]{12} @@ -84,7 +65,7 @@ \subsubsection{速度专项对比图} \end{figure} \subsubsection{加速度专项对比图} -如图\ref{fig:13}所示,该图单独放大展示了加速度的X/Y/Z三个分量,聚焦于车辆瞬时受力变化的仿真差异。加速度作为速度的导数,其数据峰值比速度更尖锐,能够精确反映碰撞、急刹等瞬态事件中的冲击力大小,是评估引擎瞬态动力学仿真精度的核心指标之一。 +如图\ref{fig:13}所示,只放大了加速度的X、Y、Z这三个方向上的一段仿真结果,并且特别注意到了车辆瞬间受到的作用力是如何不同的。加速度为速度的导数,数据峰值比速度更加陡峭,在描述碰撞、急刹车等瞬态过程时可以很好地体现冲击力的大小,因此它是评价引擎瞬态动力学仿真是不是非常精细的一个指标。 \begin{figure}[H] \centering \includegraphics[width=1\textwidth]{13} @@ -93,7 +74,7 @@ \subsubsection{加速度专项对比图} \end{figure} \subsubsection{角速度专项对比图} -如图\ref{fig:14}所示,该图单独放大展示了角速度的X/Y/Z三个分量,聚焦于车辆姿态旋转运动的仿真差异。其中X轴角速度对应车辆侧倾(Roll)速率,反映车辆左右倾斜的变化快慢;Y轴角速度对应车辆俯仰(Pitch)速率,反映车辆前后抬头、低头的变化快慢;Z轴角速度对应车辆偏航(Yaw)速率,反映车辆左右转向的变化快慢。该图可清晰呈现两个平台在车辆姿态动力学仿真中的细节差异,尤其是碰撞事件后的姿态响应差异。 +如图\ref{fig:14}所示,此图只放大了角速度X、Y、Z三个方向的仿真差别,注意是把车的姿态运动给放出来了。这里X轴角速度代表的是车辆侧倾(Roll)的速率,它反映了车辆左右倾斜变化的速度如何;Y轴角速度表示的是车辆俯仰(Pitch)的速率,它反映的是车辆前后抬头或低头变化的速度有多快;Z轴角速度指的就是车辆偏航(Yaw)的速率,它是用来表现车辆左右转向变动迅速的程度。可以清楚的看出,两者的车辆姿态动力学仿真有诸多不同之处,在碰撞之后的姿态恢复情况就是其中的一个具体体现。 \begin{figure}[H] \centering \includegraphics[width=1\textwidth]{14} @@ -102,7 +83,7 @@ \subsubsection{角速度专项对比图} \end{figure} \subsubsection{IMU数据综合对比总览} -如图\ref{fig:15}所示,该图采用3×3网格布局,全面展示了IMU的9个核心测量分量,其中第一行对应平动速度(Velocity X/Y/Z),第二行对应平动加速度(Acceleration X/Y/Z),第三行对应角速度(Angular Velocity X/Y/Z)。通过该图可快速建立两个平台IMU数据的全局对比认知,直观观察到所有数据的整体变化趋势,明确差异集中分布在15-20秒的碰撞阶段,而0-15秒的正常行驶阶段数据趋势基本一致。 +如图\ref{fig:15}所示,用一个3乘以3的网格来表示IMU的所有主要测量分量,从上到下分别为平动速度(VelocityX/XY/Z)、平动加速度(AccelerationX/Y/Z)和角速度(AngularVelocityX/Y/Z)。根据该图可以很快建立起两个平台IMU数据的大致全局印象,从整体上看各个数据的变化趋势大致相同,只是在大约15、20秒这个碰撞时刻之前是逐渐平稳上升的过程,之后才开始急剧下降,在其余时间点上两者的变化轨迹都较为接近。 \begin{figure}[H] \centering \includegraphics[width=1\textwidth]{15} @@ -111,8 +92,7 @@ \subsubsection{IMU数据综合对比总览} \end{figure} \subsection{分维度数据深度解读} -结合上述4张对比图,从平动速度、平动加速度、角速度三个核心维度,对两个平台的IMU数据进行深度分析,明确数据差异的具体表现及背后的物理意义,具体如下: - +结合上述 4 张对比图,从平动速度、平动加速度、角速度三个核心维度,对两个平台的 IMU 数据进行深度分析,明确数据差异的具体表现及背后的物理意义,具体如下: \subsubsection{平动速度维度分析} 平动速度直接反映车辆的整体运动状态,其数据一致性直接影响自动驾驶算法对车辆运动趋势的判断,各分量的具体对比分析如下表\ref{平动速度维度分析表}所示: \begin{table}[H] @@ -134,41 +114,90 @@ \subsubsection{平动速度维度分析} \end{table} \subsubsection{平动加速度维度分析} -平动加速度与速度变化趋势完全对应,其峰值大小直接反映瞬态事件中的冲击力强度,是评估引擎动力学仿真真实性的核心指标。结合图3分析可知,两个平台的加速度差异主要集中在17秒碰撞瞬间,具体表现为: -1、X轴(纵向):碰撞瞬间,Chrono引擎输出的纵向减速度峰值约为-80 m/s²(相当于8倍重力加速度),CARLA引擎约为-50 m/s²,Chrono引擎的冲击力仿真更显著; -2、Y轴(横向):碰撞瞬间,Chrono引擎输出的横向加速度峰值约为45 m/s²,CARLA引擎仅约为5 m/s²,差异尤为明显; -3、Z轴(垂直):碰撞瞬间,Chrono引擎输出的垂直加速度峰值约为80 m/s²(相当于8倍重力加速度),CARLA引擎仅约为10 m/s²,与垂直速度的差异趋势一致。 -上述差异表明,Chrono引擎对碰撞能量传递的仿真更接近真实物理规律,能够更精准地模拟瞬态冲击力的大小与变化,而CARLA原生物理引擎对碰撞冲击力的仿真存在明显简化. - +平动加速度与速度的变化趋势一致,它所达到的峰值越大,就表示瞬时事件中受到的冲击力量越强,这是评价引擎动力学仿真是不是真实的最主要的标准。结合图3分析可以得出结论,在碰撞时刻,Chrono引擎所给出的纵向加速度最大为-80m/s²(相当于8倍重力),而CARLA引擎的最大纵向加速度只有-50m/s²,二者在碰撞时出现的是很大的减速;在横向方向上,碰撞时两者的平均加速度分别为45m/s²和5m/s²,两者间差别十分大,竖直方向上也是这样一样;因此从以上三个维度都可以看到Chrono引擎对于物理过程的再现更加接近现实世界。由此可知,Chrono引擎对于碰撞能量传递的仿真是更加接近于实际物理规律的一种方式,在处理瞬时冲击力的时候可以做到更精确、细致一些,而CARLA原生物理引擎对于碰撞冲击力的仿真是很简单的. \subsubsection{角速度维度分析} -角速度直接反映车辆的姿态变化,是碰撞后车辆动力学响应的核心评估指标,结合图2分析可知,两个平台的角速度差异同样集中在碰撞阶段,具体表现为: -1、X轴(侧倾):碰撞后,Chrono引擎输出的侧倾角速度峰值更高(-25 m/s vs -10 m/s),且峰值持续时间更长,说明其对车辆侧倾姿态的仿真更贴合真实情况; -2、Y轴(俯仰):为两者最核心的姿态差异,Chrono引擎出现±30 m/s的巨大俯仰角速度尖峰,模拟了车辆碰撞后车头先猛烈抬起、再快速下压的真实姿态变化,而CARLA引擎输出的俯仰角速度几乎为0,未体现出明显的俯仰运动; -3、Z轴(偏航):0-15秒正常转向阶段,两个平台的数据趋势完全一致,17秒碰撞后,Chrono引擎出现额外的偏航尖峰,而CARLA引擎无明显波动。 -该维度的差异充分证明,Chrono多体物理引擎能够精确模拟车辆的质心运动和悬架的弹性、阻尼特性,而CARLA原生物理引擎对车辆俯仰等姿态动力学的仿真做了大量简化,真实性相对较低。 +角速度直接反映车辆的姿态变化,是碰撞后车辆动力学响应的核心评估指标,结合图 2 分析可知,两个平台的角速度差异同样集中在碰撞阶段,具体表现为:1、X 轴(侧倾):碰撞后,Chrono 引擎输出的侧倾角速度峰值更高(-25 m/s vs -10 m/s),且峰值持续时间更长,说明其对车辆侧倾姿态的仿真更贴合真实情况;2、Y 轴(俯仰):为两者最核心的姿态差异,Chrono 引擎出现±30 m/s 的巨大俯仰角速度尖峰,模拟了车辆碰撞后车头先猛烈抬起、再快速下压的真实姿态变化,而 CARLA 引擎输出的俯仰角速度几乎为 0,未体现出明显的俯仰运动;3、Z 轴(偏航):0-15 秒正常转向阶段,两个平台的数据趋势完全一致,17 秒碰撞后,Chrono 引擎出现额外的偏航尖峰,而 CARLA 引擎没有很大的波动。该维度的差异也完全体现了 Chrono多体物理引擎可以准确地模拟出车辆的质心运动以及悬架的弹性、阻尼特性,而 CARLA原生物理引擎却对车辆俯仰等姿态动力学做了一些较大的简化,并且仿真出来的准确性也比较低。 -\section{实验结论与应用建议} +\section{极端场景仿真对比(高速急打方向)} -\subsection{实验核心结论} +常规工况的 IMU 数据对比工作已经完成,为了进一步验证优化后模型的相关性能,也就是在高速、急转向这类极限动态的工作条件下,它在物理方面是否合理,运行时是否稳定,研究中专门设置了高速急打方向的极限场景测试;我们会对车辆姿态、运动连续性以及动力学响应进行直观的对比,借助这种对比方法,来分析原生 CARLA(PhysX)和 Chrono 这两个模型,在表现上存在哪些差异 +\subsection{场景设置} -集成有效性验证:在0-15秒的正常行驶工况下,CARLA原生物理引擎与Chrono多体物理引擎的IMU数据趋势基本一致,说明Chrono引擎与CARLA平台的集成是成功的,能够有效复现车辆的基本运动学特性,可满足常规自动驾驶算法的测试需求。 +车辆:Lincoln MKZ 2020 -物理引擎本质差异:两个平台的IMU数据差异均集中在15-20秒的碰撞极端工况中,核心原因在于两者的物理引擎设计理念不同。CARLA原生物理引擎基于Bullet游戏引擎,优先保证计算效率,对车辆动力学(尤其是悬架、碰撞、姿态变化)做了大量简化;Chrono多体物理引擎为专业工程级仿真引擎,能够精确建模车辆悬架系统、轮胎非线性特性、刚体碰撞能量传递及质心运动,物理真实性远高于CARLA原生物理引擎。 +初始车速:约 90 km/h -数据差异核心要点:两者的关键差异集中在垂直方向的速度、加速度,以及俯仰角速度上,反映出悬架模型、碰撞能量传递模型的本质区别,这也是后续平台优化的核心方向。 +场景:Town10HD 城市十字路口 -\subsection{应用场景建议} +操作:车辆高速直行进入路口时,执行最大转向角急打方向,模拟高速避障或紧急变线的极限工况,观测车辆姿态变化与运动连续性。 -常规工况测试:对于车道保持、跟车行驶、匀速转向等常规自动驾驶工况的算法测试,CARLA原生物理引擎已能满足需求,且其计算效率更高,可提升测试效率。 +\subsection{不同引擎表现对比分析} -极端工况测试:对于碰撞安全、紧急避障、车辆失控恢复等极端工况的算法测试,强烈推荐使用Chrono多体物理引擎,其更真实的IMU数据能够帮助算法在接近真实的环境中完成训练与验证,提升算法的鲁棒性。 +\subsubsection{原生 CARLA(PhysX):僵硬转向,动力学失真} -定位算法测试:需重点关注Chrono引擎在碰撞后的剧烈姿态变化,这种变化会对IMU融合定位算法提出更高要求,可基于该特性开展算法的抗干扰测试与优化。 +在高速急打方向工况下,PhysX 引擎的表现呈现明显的游戏级动力学缺陷如图\ref{fig:16}\ref{fig:17}所示: +1、车身侧倾被过多地压制住了,姿态变得僵硬,几乎没有侧倾的角度变化,不能体现出真实车辆在转向时由于载荷转移和悬架压缩所发生的变形过程; +2、转向的反应没有惯性的过渡阶段,轨迹呈现出“硬转向”的特点,横向加速度曲线突然发生变化,缺少了真实的车辆动力学中所具有的动力学阻尼特性; +3、整体上表现为一种物理上的安全但是动力学非常不准确的仿真结果,不能很好地反映高速度下的转向过程中车体可能面临的失稳情况,并且不符合对工程级仿真的期望值。 +\begin{figure}[H] + \centering + \includegraphics[width=1\textwidth]{16} + \caption{physx仿真情况下车辆姿态变化图1} + \label{fig:16} +\end{figure} +\begin{figure}[H] + \centering + \includegraphics[width=1\textwidth]{17} + \caption{physx仿真情况下车辆姿态变化图2} + \label{fig:17} +\end{figure} +\subsubsection{未优化 Chrono:过度灵敏,易发生非物理侧翻} + +未优化的 Chrono 引擎在该工况下暴露出求解器与平台耦合的固有缺陷,如图\ref{fig:18}\ref{fig:19}所示: +1、车辆质心高度、悬架刚度、轮胎侧偏特性与载荷转移计算均遵循真实动力学规律; +2、高速急转时侧倾角速度大、外侧载荷激增,达到侧翻阈值后发生倾覆,符合实车极限工况的失稳机理; +3、由于求解器没有进行优化,平台同步出现了误差,车辆过早或者过于迅速地进入了失稳状态,并且不能被控制也无法复现,工程上的应用价值不高\cite{deng2024rail}。 + +\begin{figure}[H] + \centering + \includegraphics[width=1\textwidth]{18} + \caption{chrono仿真情况下车辆姿态变化图1} + \label{fig:18} +\end{figure} +\begin{figure}[H] + \centering + \includegraphics[width=1\textwidth]{19} + \caption{chrono仿真情况下车辆姿态变化图2} + \label{fig:19} +\end{figure} +\subsubsection{优化后 Chrono:真实可控,兼具真实性与稳定性} +经过求解器优化与双平台同步优化的 Chrono 模型,在同一工况下表现出显著优势,如图\ref{fig:20}\ref{fig:21}所示: +1、车身侧倾角度随着转向输入是平滑的变化,符合真实的车辆悬架刚度和轮胎侧偏性特点,并没有明显的僵硬失真以及过分的侧倾造成伪翻车的情况发生; +2、运动轨迹是连贯的,没有出现突变的现象或者穿透的情形存在,在纵向加速度及纵向前方的速度线图上呈现出平稳上升的趋势,峰值值也是合理的并且没有过多的噪音; +3、既能不致使物理模拟中出现僵化的状况,也不易造成Chrono进行优化之后结果不稳定的问题出现在其中,并且还能较好的体现出在高速极限情况下所展现出来的车辆动力学表现:左边的悬挂变得比较长一些,右边的悬挂则有所缩短,在此期间还会伴随着轮胎摩擦力被推至极限而引发出一定的横向滑动活动情况的发生发展过程之中,这些都同实际驾驶环境当中所表现出的各种动态特征有着很大的契合程度,而且它还具有着较好的仿真性能表现并可作为一种可靠的工程参照对象来加以使用\cite{huang2025roll}。 +\begin{figure}[H] + \centering + \includegraphics[width=1\textwidth]{20} + \caption{chrono仿真情况下车辆姿态变化图3} + \label{fig:20} +\end{figure} +\begin{figure}[H] + \centering + \includegraphics[width=1\textwidth]{21} + \caption{chrono仿真情况下车辆姿态变化图4} + \label{fig:21} +\end{figure} +\subsection{实验核心结论} +集成有效性检验是在0到15秒之间正常的行驶状态中CARLA的原生物理引擎和Chrono多体物理引擎IMU数据走势基本相同,说明 Chrono引擎与 CARLA平台的整合是成功的,可以大致复现车辆的基本运动学特征,能够支持大多数自动驾驶算法的测试。 +物理引擎的本质差别主要体现在两个平台上IMU数据出现较大的偏差是在一些特别恶劣的工况下才会发生的现象,其中的原因就是这两种平台所采用的物理引擎设计有很大的区别。CARLA原始生物物理引擎是Bullet游戏引擎的扩展,主要追求计算效率,在车辆动力学方面(悬架、碰撞、姿态改变等)做了很多假设和简化;Chrono多体物理引擎是一种专业的工程仿真用仿真的编程语言,可以对车辆的悬架系统、轮胎是非线性的特性、刚体碰撞的能量吸收、质心位置的变化有很精确的建模,物理模型比CARLA原生物理引擎要高很多。 +两者的根本差别在于垂直方向上的速度、加速度和俯仰角的速度这些参数的变化上反映出来的,表现出的是悬架模型与碰撞能量传递模型的本质不同之处,也是接下来进行平台改进的主要方向所在。 +\subsection{应用场景建议} +常规工况测试是对车道保持、跟车行驶、匀速转向这些常规自动驾驶工况下算法的测试,使用CARLA原生物理引擎已经能够满足需要,并且比传统的方法更高效,可以提高测试的速度。 +对碰撞安全、紧急避障、车辆失控恢复这些极难模拟出真感受用的极端状况进行算法实验,最好挑选Chrono这个有多体真实物理量的数据支持的引擎来做,在这样的仿真环境中对一些重要的问题加以研究分析会有更多的实际效果。 +定位算法测试是在开展定位算法测试时需要重点考虑的,当我们在设计并建立了一个系统以后就会注意到Chrono引擎遇到碰撞时其产生的猛烈变化会对IMU融合定位算法造成怎样的影响,在此基础上我们也可以以此为基础来完成对算法的抗干扰性能评估以及改进工作。 \subsection{后续优化方向} -1. 参数校准优化:针对横向动力学差异,调整Chrono引擎的转向系统模型参数与轮胎侧偏特性参数,缩小与CARLA原生物理引擎在Y方向速度上的差异,提升两个平台在常规工况下的数据一致性。 -2. 碰撞参数验证:将Chrono引擎输出的碰撞加速度、角速度数据与真实车辆碰撞试验数据进行对比,优化碰撞恢复系数、悬架刚度及阻尼参数,进一步提升其碰撞仿真的真实性。 -3. 误差量化分析:计算两个平台IMU数据在正常行驶阶段(0-15秒)与碰撞阶段(15-20秒)的均方根误差(RMSE)和峰值误差,量化数据差异,为自动驾驶算法开发提供明确的误差边界参考。 +参数校准优化是纵向动态的关键,在此基础上需要对横向动力学进行调整,也就是改变Chrono引擎中的转向系统模型以及轮胎的侧偏特性的参数值,在做出这样的变更之后,就可以让两者之间的Y方向速度有所接近,并且使这两个平台所呈现出的一般情况的数据趋于一致。碰撞参数检验是把Chrono引擎得到的碰撞加速度、角速度等等数据同真实车辆碰撞实验所得的结果比对一下,之后又会改变这些碰撞恢复系数、悬架刚度和阻尼力,使得模拟出的效果越来越贴近实际情况。误差量化分析,通过计算IMU数据两个平台的均方根误差(RMSE)、峰值误差来度量这两个平台数据在正常行驶(0~15秒)、碰撞(15~20秒)阶段的区别,并给出两者之间较大的差异作为自动驾驶算法开发时参考的误差边界。 \newpage diff --git a/chrono/undergraduate/content/chapter5.tex b/chrono/undergraduate/content/chapter5.tex index 85c7a822..191c099f 100644 --- a/chrono/undergraduate/content/chapter5.tex +++ b/chrono/undergraduate/content/chapter5.tex @@ -1,42 +1,25 @@ %!TEX root = ../../csuthesis_main.tex \chapter{总结与展望} -本文主要任务是对车辆多体物理仿真系统进行优化,在CarlaUE4 仿真场景中针对仿真过程因动力学精度不足、多体约束误差、数据同步延迟及可视化耦合性差等问题导致的仿真失真,提出并实现了Chrono 与 CarlaUE4 联合仿真模型。该方案基于Chrono 多体动力学算法与CarlaUE4 虚幻引擎,通过引入高精度车辆子系统建模提升仿真平台对复杂工况、悬架运动及轮胎力学的求解能力,同时采用UDP 低延迟通信与预测迭代同步机制,以应对数据交互延迟、动力学与渲染不同步、实时性不足等挑战。上文各项实验数据表明,通过优化 Chrono 求解算法并深度耦合 CarlaUE4 可视化环境,从而实现的多体物理车辆仿真系统优化是有效且成功的。 - +本文的主要任务是对于车辆多体物理仿真系统进行优化,在CarlaUE4仿真的场景中由于动力学精度不够、多体约束误差大、数据同步延迟以及可视化耦合性不好等造成的问题使仿真出现不真实的现象,提出了Chrono和CarlaUE4联合仿真的模型。本文设计过程中用到的是Chrontom多体动力学算法和CarlaUE4虚幻引擎分别对汽车子系统的模型进行了正确建立,使得在仿真平台上的工作环境下能较为精确地模拟出复杂的工况条件、悬架运动及轮胎力学等问题,在此基础上采取了UDP低延迟通讯的方式结合上文所提预测式并行同步技术方法来改善由于不同处理器间信息传递迟缓而导致的问题,进而提高整个程序体系的速度。从本文所给出的各项实验数据可知,在对Chrono求解算法加以改进的基础上,并将该系统深度耦合至CarlaUE4可视化环境之下之后,进而得到一个能够进行多体物理车辆仿真系统的优化结果,这是非常有效的并且成功的。 \section{主要研究成果总结} 本研究以基于虚幻引擎(CarlaUE4)与 Chrono 算法的多体物理车辆仿真模型为核心对象,完成了模型构建、平台耦合、算法优化与实验验证全流程工作,有效解决了传统车辆多体物理仿真存在的场景还原度不足、动力学求解精度偏低、多体约束处理不精准、虚拟场景耦合性差等问题,构建出一套高精度、高实时性、高工程实用性的车辆联合仿真系统,主要研究成果如下: - \subsection{完成高精度车辆多体动力学模型搭建} - -依托 Chrono::Vehicle 模块化、模板化建模体系,完成车架、悬架、转向、传动、轮胎等核心子系统的标准化建模,采用 JSON 参数化配置实现车辆模型快速实例化,确保多体约束关系与动力学求解精度达到工程级标准,可精准复现车辆真实运动特性。 - +利用Chrono::Vehicle模块化的、模板化的建模方式建立车架、悬架、转向、传动、轮胎等主要子系统,并用JSON参数化的方式对汽车模型进行快速的实例化,保证各个方面的约束关系以及动力学求解精度都达到了工程要求的标准下可以准确复现出汽车真实的运动规律。 \subsection{实现仿真模型关键技术优化} - -针对多体约束精度不足、动力学求解效率与实时性矛盾、多平台数据交互延迟三大核心挑战,优化 Chrono 约束求解算法与自适应步长求解策略,提升动力学计算效率;统一双平台数据格式与仿真时钟,降低联合仿真同步误差,提升系统运行稳定性。 - +为了解决多体约束精度不够、动力学求解速度和实时性不匹配以及多平台数据交互延迟三个主要问题,对Chrono的约束求解算法进行改进,并添加一个自适应步长求解的方法来提高动力学计算的速度;将两个平台的数据格式统一起来,并且给仿真程序加上了一个可以协调不同平台的时钟,在很大程度上减少联合仿真的同步误差,从而保证了系统的稳定运行。 \subsection{通过对比实验验证模型性能提升} - -以 IMU 三轴速度、加速度、角速度为核心评价指标,开展 Chrono 与 Carla 原生物理引擎(PhysX)对照实验。结果表明:常规行驶工况下,两引擎数据趋势基本一致;极端碰撞工况下,Chrono 在垂直动力学响应、悬架弹性阻尼特性、碰撞能量传递、车辆姿态变化等方面更贴合真实物理规律,仿真精度与真实性显著优于传统游戏级物理引擎。 - - +用IMU三轴速度、加速度和角速度作为评价指标来对比Chrono和Carla的原生物理引擎(PhysX)。结果表明,在常规行驶工况下,两引擎的数据走势较为接近;在极端的碰撞工况下,Chrono在垂直的动力学响应、悬架弹性阻尼特性、碰撞能量传递、车辆的姿态改变等各个方面都比传统的游戏级物理引擎要更加符合真实的物理规律,仿真的精度和真理性也远好于传统的模拟方法。 \section{不足与未来期望} 本研究已完成多体物理车辆仿真模型的构建与优化,实现了预期研究目标,但受限于实验条件、模型复杂度与计算资源,模型仍存在进一步完善的空间,未来可从以下方向开展深入研究: - - \subsection{提升模型参数精度与通用性} - -基于实车测试数据对 Chrono 模型的轮胎侧偏特性、转向系统、碰撞恢复系数、悬架刚度阻尼等关键参数进行对标校准,缩小常规工况下与实车数据的偏差;建立标准化车辆参数库,拓展模型在不同车型、不同路面条件下的适配能力。同时在CarlaUE4联合chrono仿真时,车辆碰撞后会自动退出chrono回到phyx仿真。 - +根据实车测试数据来标定和校正Chrono模型中涉及到的主要参数,主要是轮胎侧偏特性、转向系统、碰撞恢复系数、悬架刚度阻尼等主要参数,在基本的工况之下把它们和实际的数据相比照加以调节修正。在CarlaUE4联合chrono仿真的时候,车辆碰撞以后会自动退出到phyx的仿真里面去。 \subsection{拓展复杂场景与多物理场耦合仿真} - -引入雨雪、风沙、极端温度等环境因素,结合土壤力学、流体力学模块,实现车辆 — 环境全物理场耦合仿真;增加非铺装路面、越野地形、多车交互、人车混行等复杂场景,提升平台对自动驾驶长尾极端工况的覆盖能力。 - +引入雨雪、风沙、极端温度等环境因素,结合土壤力学、流体力学模块,实现车辆做环境全物理场耦合仿真的工作,加进不铺装路面、越野地形、多车相互影响、人与车相生等许多繁杂的状况,并且由此来改善平台自动驾驶对于各种各样罕遇的大大小小情形加以处置的能力。 \subsection{拓展工程应用与研究领域} - -将模型应用于自动驾驶全栈算法测试、底盘性能标定、碰撞安全分析、智能驾驶训练等实际工程场景;进一步拓展至工程机械、轨道交通、无人机等多体系统仿真领域,构建通用化多体物理仿真平台。 - -未来将持续围绕高精度、高实时、高耦合的多体物理仿真技术开展研究,不断完善仿真模型性能,推动仿真平台从实验室研究走向实际工程应用,为智能交通与车辆智能化发展提供更坚实的技术支撑。 +将模型用于自动驾驶全栈算法的测试、底盘性能的标定、碰撞安全性的分析、智能驾驶的训练等各种实际工程情况之中,并且还会把其应用到其他诸如工程机械之类的多种机器上,共同组建起一个通用化的多体物理仿真平台。 +将来的工作将致力于开展高精度、高实时、高耦合多体物理学仿真的研究工作,不断改善仿真模型的性能使其可以运用到实验室里,也能够在真实的环境中进行使用了,以此促进智能交通以及车辆智能化向着更高的层次发展。 \newpage \ No newline at end of file diff --git a/chrono/undergraduate/content/reference.bib b/chrono/undergraduate/content/reference.bib index 61327d7a..6086df1f 100644 --- a/chrono/undergraduate/content/reference.bib +++ b/chrono/undergraduate/content/reference.bib @@ -166,4 +166,75 @@ @misc{openhutb2025hutb year={2025}, howpublished={EB/OL}, url={https://github.com/OpenHUTB/hutb/blob/hutb/README.md} +} +@article{gu2025rbf, + author = {顾苏怡 and 蒋昌华}, + title = {车辆主动悬架RBF神经网络的模型预测控制仿真研究}, + journal = {中国工程机械学报}, + year = {2025}, + volume = {23}, + number = {03}, + pages = {410-414}, + doi = {10.15999/j.cnki.311926.2025.03.027} +} + +@article{guo2025pid, + author = {郭永凤}, + title = {车辆防抱死制动系统PID控制器优化仿真研究}, + journal = {系统仿真技术}, + year = {2025}, + volume = {21}, + number = {02}, + pages = {122-126}, + doi = {10.16812/j.cnki.cn31-1945.2025.02.006} +} + +@article{huang2025roll, + author = {黄美婷 and 李广培}, + title = {采用混合算法优化的四轮驱动车辆侧倾控制仿真研究}, + journal = {中国工程机械学报}, + year = {2025}, + volume = {23}, + number = {01}, + pages = {23-27+33}, + doi = {10.15999/j.cnki.311926.2025.01.018} +} + +@article{deng2024rail, + author = {邓文豪}, + title = {城市轨道交通线路级车辆能馈状态仿真研究}, + journal = {现代城市轨道交通}, + year = {2024}, + number = {11}, + pages = {26-31}, + doi = {10.20151/j.cnki.1672-7533.2024.11.005} +} + +@article{wang2023crash, + author = {王甲强 and 鲁寨军 and 刘东润 and 等}, + title = {轨道车辆碰撞试验台CO2相变驱动过程仿真研究}, + journal = {中国铁道科学}, + year = {2023}, + volume = {44}, + number = {06}, + pages = {113-124} +} + +@article{xiong2023semi, + author = {熊开洋 and 严健容 and 熊钊 and 等}, + title = {车辆半主动悬架HSG阻尼控制策略仿真研究}, + journal = {汽车实用技术}, + year = {2023}, + volume = {48}, + number = {16}, + pages = {40-45}, + doi = {10.16638/j.cnki.1671-7988.2023.016.008} +} + +@mastersthesis{bai2024mixed, + author = {白俊}, + title = {考虑智能驾驶技术与车辆类型的混合车流仿真研究}, + school = {中南大学}, + year = {2024}, + doi = {10.27661/d.cnki.gzhnu.2024.003137} } \ No newline at end of file