自动驾驶 | 为CarLA添加一辆小米SU7 Part I
自动驾驶 | 为CarLA添加一辆小米SU7 Part I

导言
什么是CarLA?
CarLA是一款基于虚幻引擎4(Unreal Engine 4)构建的开源自动驾驶仿真平台,为自动驾驶算法的研发、测试与验证提供高保真的虚拟环境。其核心特性包括:
- 高精度地图与传感器模拟:支持激光雷达、摄像头、毫米波雷达等多种传感器的物理级仿真。
- 动态交通场景:内置行人、车辆、交通信号等交互元素,可模拟复杂城市路况。
- 模块化设计:用户可通过Python或C++ API灵活控制环境参数、交通流及智能体行为。
通过从源码构建CarLA,我们可以通过UE4编辑器快速便捷地为它添加一款载具。
准备工作
为了将自定义的一款载具添加到CarLA中,你需要做好如下准备工作:
- 已经准备好的载具模型
- 一份从源码构建的CarLA和UE4编辑器(详见https://carla.readthedocs.io/en/latest/build_windows/#windows-build)
- 安装好CarLA API的Python环境
- 最新版本的Blender
在本文中,我将以小米 SU7为例,将这款载具添加到CarLA中,你可以在Sketchfab中下载到所需要的资源:https://sketchfab.com/3d-models/xiaomi-su7-ca2cda599f5341068c992c9f44551bf9

准备要导入的载具
模型准备
首先将你所需要的模型下载到本地并解压,在这里我选择了gltf格式

打开blender,选择file -> import -> gltf即可导入:

接下来我们开始检查并整理模型,打开face orientation,检查所有面的内外朝向都没问题(确保没有面的外侧是红色的)

为了方便后续骨骼绑定,我强烈建议将模型划分为四个轮子和车身两个部分:


接下来,我们将模型缩放到以米为单位,并且以x轴为正前方,z轴朝上,并且车轮是刚好接地的:

(Optional)如果你希望给载具更多细节,可以从官方下载车牌并置于车头和车尾(https://carla-assets.s3.us-east-005.backblazeb2.com/fbx/LicensePlate.rar)

骨架对齐
接下来,我们从官网下载所需要的载具骨架(https://carla-assets.s3.us-east-005.backblazeb2.com/fbx/VehicleSkeleton.rar),选择file -> import -> fbx导入到blender中

五个骨骼为:Vehicle_Base,Wheel_Front_Left,Wheel_Front_Right,Wheel_Rear_Left以及Wheel_Rear_Right,分别对应车身,左前轮,右前轮,左后轮以及右后轮。
小心地将四个轮子的骨骼尾部对齐到车轮的中心


接下来为Base和Wheels各添加一个Modifier -> Deform -> Armature,object选择我们的骨架

顶点组绑定
接下来为每个轮子绑定到和四个骨骼同名的顶点组上:

车身绑定为Vehicle_Base:

做完这些工作之后,理论上你就已经完成了骨骼绑定,你可以通过在Pose Mode下进行摆布验证骨骼是否都被正确绑定了

材质命名
在导出之前,强烈建议按照CarLA的材质命名标准(M_CarPart_CarName)进行重新命名:

导出模型
上述工作都就绪之后,我们可以导出模型,选择file -> export -> fbx,按照图中的设置导出模型

导入UE4 Editor
首先打开UE4 Editor,进入Content->Carla->Static->Car->4Wheeled下新建一个文件夹命名为我们的载具,并将我们导出的fbx进行导入,在导入的时候选择材质继承M_CarPaint_Master,并重载Base Color(不要吐槽画质为什么突然变低了,因为我的UE4是编译在远程的工作机上的)

导入完成之后,我们打开骨骼模型

但是看着好像和我们在blender看到的模型不太一样

不用担心,接下来我们把车灯和车窗换成已经有的透明材质(我这里为了偷懒,直接使用了特斯拉现成的车灯材质,大家不要学我,为了美观我还把车漆调成了小米SU7的经典配色)

创建物理资产
如图打开物理资产

如图选择四个轮子,选择sphere后重新生成碰撞体

再把物理类型调成Kinematic

同理vehicle_base选择为Single Convex Hull之后再重新生成(这样的碰撞基本够用,如果你还需要更精细的类型就需要自行创建模型),物理类型是Default

创建动画
首先右键新建一个动画蓝图

父类选择VehicleAnimIsntance,骨骼选择我们已经有的骨骼

接下来,我们找到Content->Carla->Static->Car->4Wheeled->Tesla->Tesla_Animation并打开,复制蓝图中的所有节点

再见这些节点粘贴到我们刚才新建的动画蓝图中,完成连线并点击左上角的编译,保存并退出

配置载具蓝图
打开Content->Carla-Blueprints->Vehicles,创建一个新的文件夹并命名为我们的载具
右键选择新建蓝图,选择VehicleWheel,分别为BP_SU7_FrontWheel和BP_SU7_RearWheel

其中FrontWheel如下配置:
Collision Mesh选择为Wheel_Shape,Radius和Width按照实际模型填写(这里因为和特斯拉的车辆尺寸差不多,所以我偷懒了直接使用特斯拉的尺寸),选择不被手刹影响,并且舵角为70

RearWheel也同理,只是勾选可以被手刹影响,并且舵角为0

保存并点击左上角编译之后,我们在原地右键新建一个蓝图,选择BaseVehiclePawn

点击打开,分别在Mesh配置我们刚才准备好的动画、骨骼模型以及VehicleMovement中配置四个轮子的蓝图


点击左上角编译并保存退出
注册载具
打开Content->Carla-Blueprints->Vehicles->VehicleFactory,点开Vehicles

新建一个元素,填入汽车厂商以及型号,并指定为我们刚才创建的载具蓝图,完成之后保存编译退出

测试载具
完成上述所有工作之后,点击右上角的Launch,启动CarLA
待CarLA启动之后,我们打开控制台进入安装有CarLA API的环境,找到官方提供manual_control.py脚本,增加参数--filter su7并启动

接下来请通过轻推w键以享受你的驾驶之旅!

结语
本文讲述如何将一个模型作为载具添加到CarLA模拟器中,但是注意,目前这个载具还不支持灯光开关、车门开闭以及LiDAR光线反射,我们会在下一个部分进行讲述(如果我还没有弃坑的话)
参考文献
https://carla.readthedocs.io/en/latest/tuto_A_add_vehicle/#add-a-new-vehicle
https://www.youtube.com/watch?v=0F3ugwkISGk
https://github.com/carla-simulator/carla/issues/1779
自动驾驶 | 为CarLA添加一辆小米SU7 Part I的更多相关文章
- 深度学习与自动驾驶领域的数据集(KITTI,Oxford,Cityscape,Comma.ai,BDDV,TORCS,Udacity,GTA,CARLA,Carcraft)
http://blog.csdn.net/solomon1558/article/details/70173223 Torontocity HCI middlebury caltech 行人检测数据集 ...
- Carla 自动驾驶仿真平台的安装与配置指南
简介 Carla 是一款基于 Python 编写和 UE(虚幻引擎)的开源仿真器,用于模拟自动驾驶车辆在不同场景下的行为和决策.它提供了高度可定制和可扩展的驾驶环境,包括城市.高速公路和农村道路等.C ...
- Google Waymo自动驾驶安全技术报告(二)
Waymo的技术在公开道路上.封闭测试场.仿真器进行了广泛的测试,所以可以保证自动驾驶系统的每一部分在其ODD内都有强大.可靠.安全的处理能力. Waymo的自动驾驶系统由三个相互独立.严格测试的子系 ...
- 自动驾驶传感器比较:激光雷达(LiDAR) vs. 雷达(RADAR)
自动驾驶传感器比较:激光雷达(LiDAR) vs. 雷达(RADAR) 据麦姆斯咨询报道,2032年全球范围内自动驾驶汽车的产量将高达2310万辆,未来该市场的复合年增长率(CAGR)高达58%.届时 ...
- [原]JSBSim 自动驾驶(浅出)
jsbsim的脚本文件分为几大类: 1.系统脚本: systems 包含通用飞机各部分功能模块组件以及自动飞行控件:Autopilot.xml 和 自动飞行的算法控件:GNCUtilities.x ...
- 基于DRL和TORCS的自动驾驶仿真系统——之环境配置
基于DRL和TORCS的自动驾驶仿真系统 --之环境配置 玩TORCS和DRL差不多有一整年了,开始的摸爬滚打都是不断碰壁过来的,近来在参与CMU的DRL10703课程学习和翻译志愿者工作,也将自己以 ...
- 自动驾驶缺人才?听听David Silver怎么说!
如今自动驾驶在全球范围内的发展势头愈发“凶猛”,该领域人才也一度被视为“香饽饽”. 即使在美国,自动驾驶工程师的起薪也已经突破了25万美元,我国‘“开价”之高更是令人咋舌. 人才.人才.还是人才!重要 ...
- Apollo自动驾驶框架试玩
2017年7月5日,百度举行了AI开发者大会,在会上发布了Apollo项目,并进行了演示,该项目在Github上已经能够被访问.出于一个程序员的好奇,昨天试玩了一把,确实不错. http://apol ...
- 本科阶段就挑战自动驾驶开发?华为云ModelArts帮你轻松实现!
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- zz自动驾驶中轨迹规划的探索和挑战
大家好,今天我们主要介绍一下轨迹规划的探索和挑战,我主要从四个方面介绍: 轨迹规划的概念 决策 横向规划 纵向规划 轨迹规划的概念: 轨迹规划的核心就是要解决车辆该怎么走的问题.比如我们知道了附近有行 ...
随机推荐
- Protocol Buffer 使用-copy
概述Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化.它很适合做数据存储或 RPC 数据交换格式.可用于通讯协议.数据存储等领域的语言无关. ...
- Calendar日历类(抽象类)的使用
4. java.util.Calendar( 日历)类 类 Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能. 获取Calendar实例的方法 使用Calendar.get ...
- Apache Camel系列(3)----Redis组件
Redis组件允许你从Redis接收消息,以及将消息发送给Redis.RedisProducer的功能很强大,几乎能执行所有的Redis Command,这些Command都是在Message的hea ...
- Mac安装Flink
版本 Flink flink-1.13.1-bin-scala_2.11.tgz 依赖scala2.12 一.下载 https://archive.apache.org/dist/flink/ 解压 ...
- FLink14--核心窗口--TumblingWindiwApp
一.依赖 https://www.cnblogs.com/robots2/p/16048648.html 二. 代码 前言:window用作有keyBy情况,前面没有使用keyBy的话用windowA ...
- 微信分享前端开发全程详解含iOS、安卓、H5、ReactNative以及微信开放标签的适配和使用
2024年9月,本人在做微信分享前端部分的iOS.安卓和H5的页面和功能时踩了不少坑,于是写了这篇文章,内容包括微信分享在上面三个端的技术点和坑点.解决办法,微信开放标签的相关适配,以及ReactNa ...
- 图解MySQL【日志】——Binlog
Binlog(Binary Log,归档日志) 为什么需要 Binlog? Binlog 是 MySQL 中的二进制日志,用于记录数据库的所有写操作(INSERT.UPDATE.DELETE 等) 1 ...
- 【COM3D2Mod 制作教程(7)】实战!制作衣服部分(上)
[COM3D2Mod 制作教程(7)]实战!制作衣服部分(上) 教程介绍 隔了 N 个月终于迎来了第二期的 Mod 教程部分,这一期我们将开始制作人物的衣服部分. 因为体型适配的原因,衣服部分要比身体 ...
- APEX实战第1篇:本地部署拥有AI能力的APEX
学会部署APEX是为了更好构建企业级AI应用打基础,比如企业级的知识平台.智能报表等. 先前在<手把手教你喂养 DeepSeek 本地模型>,使用AnythingLLM方式,虽然操作上已经 ...
- 解密ZAB协议:Zookeeper一致性的核心实现
一致性问题 设计一个分布式系统必定会遇到一个问题-- 因为分区容忍性(partition tolerance)的存在,就必定要求我们需要在系统可用性(availability)和数据一致性(consi ...