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

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

导言

什么是CarLA?

CarLA是一款基于虚幻引擎4(Unreal Engine 4)构建的开源自动驾驶仿真平台,为自动驾驶算法的研发、测试与验证提供高保真的虚拟环境。其核心特性包括:

  • 高精度地图与传感器模拟:支持激光雷达、摄像头、毫米波雷达等多种传感器的物理级仿真。
  • 动态交通场景:内置行人、车辆、交通信号等交互元素,可模拟复杂城市路况。
  • 模块化设计:用户可通过Python或C++ API灵活控制环境参数、交通流及智能体行为。

通过从源码构建CarLA,我们可以通过UE4编辑器快速便捷地为它添加一款载具。

准备工作

为了将自定义的一款载具添加到CarLA中,你需要做好如下准备工作:

在本文中,我将以小米 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

https://sketchfab.com/3d-models/xiaomi-su7-ca2cda599f5341068c992c9f44551bf9

相关推荐
赛卡8 小时前
汽车安全:功能安全FuSa、预期功能安全SOTIF与网络安全Cybersecurity 解析
人工智能·安全·网络安全·车载系统·自动驾驶·汽车
技术小甜甜9 小时前
【Blender Texture】【游戏开发】高质感 Blender 4K 材质资源推荐合集 —— 提升场景真实感与美术表现力
blender·游戏开发·材质·texture
Thomas游戏开发15 小时前
Unity3D TextMeshPro终极使用指南
前端·unity3d·游戏开发
一点.点1 天前
ISO 22737——解读自动驾驶相关标准法规(LSAD)
自动驾驶·汽车
画江湖Test2 天前
乘用车自动驾驶和非乘用车(矿车,卡车)自动驾驶区别
人工智能·机器学习·自动驾驶·车载测试·汽车测试·座舱测试
Thomas游戏开发2 天前
Unity3D 逻辑代码性能优化策略
前端框架·unity3d·游戏开发
一点.点2 天前
ISO 17387——解读自动驾驶相关标准法规(LCDAS)
自动驾驶·汽车
硅谷秋水2 天前
Impromptu VLA:用于驾驶视觉-语言-动作模型的开放权重和开放数据
人工智能·机器学习·计算机视觉·语言模型·自动驾驶
Thomas游戏开发3 天前
Unity3D HUD高性能优化方案
前端框架·unity3d·游戏开发
埋头苦干的墨小白3 天前
《自动驾驶轨迹规划实战:Lattice Planner实现避障路径生成(附可运行Python代码)》—— 零基础实现基于离散优化的避障路径规划
人工智能·python·自动驾驶