Apollo 系统架构
CANBus:对接车辆的底盘,做一些数据的收发,如油门,方向盘转角
HDMap:
- 给localization提供定位图层的信息
- 给perception一些车道线、道路拓扑、红绿灯的信息(超时空感知),附注感知的预测。如关注某位置的红绿灯,划分前景和背景中的障碍物然后滤除背景中的障碍物(如车道线外)
Prediction:预测行人或车辆的轨迹预测,预测会到哪个车道去
Planning:借助高精地图给以提供一些车道信息如boundary和车道中心线。
Control:把决策传到这个模块,control再将底盘命令发出进行交互
Apollo安装
git clone XXX
git checkout vXXXX
bash docker/scripts/dev_start.sh #编译时间较长
bash docker/scripts/dev_into.sh #进入apollo环境
文件夹结构
主要的任务模块可以在apollo/modules
看到, common_msg模块是表示数据类型,dreamview用于数据可视化,drivers包括各种传感器的驱动
模块文件夹下:
/conf:参数配置文件,输入输出话题的订阅
/launch:启动模块的启动文件,会启动某个dag文件
/dag: 包括调用流程,加载的模块是什么,订阅的通道,使用的config文件
/XXX: 该模块下具体的方法(算法),可能有多个文件夹
基本指令
cyber_monitor #监控个个topic的信息
cyber_launch start/stop modules/localization/..../xxx.launch #启动/关闭模块
cyber_recorder -h #可以显示出和数据集.bag相关的指令,比如bag包信息,播放等
bash scripts/bootstrap.sh #打开可视化,可以进入一个网页端,默认为“mkz standard debug”,车型可选为“mkz lgsvl321”,地图可选“sunnyvale big loop”
播放数据之后,窗口内就会开始变化了。播放时可在终端按空格暂停,然后可以输入指令启动其他想要的模块,加载完成后就可以接着播放数据了。
Carla联合仿真环境搭建
Carla基本介绍
基于UE4开发的开源无人驾驶仿真器
- PythonAPI
- 自动驾驶传感器(还有理想化的collision detection传感器)
- 用于规划和控制的快速仿真
- 地图生成
- 交通场景(open scenario)仿真
- ROS集成
- 自动驾驶baseline
0.9.15新特性
- 新的车型以及地图
- 基于Omniverse的素材导入
- 基于OSM的三维场景生成
Carla安装方式
- 源码安装:只有在要修改carla底层逻辑,或要导入自定义的车or地图时才如此安装,会安上一个ue4包,很占空间
- docker安装:实现多平台使用
- 预编译包安装:比较轻量,推荐使用
安装流程
版本:
apollo v8.0.0: https://github.com/ApolloAuto/apollo/tree/v8.0.0
CARLA 0.9.14: https://carla.org/2022/12/23/release-0.9.14
基础使用:
import carla
import random
import time
#客户端连接
actor_list = []
carla_client = carla.Client('172.17.0.1', 2000)
#carla默认端口为2000
#172.17.0.1为dorcker默认地址
carla_client.set_timeout(4.0)
#切换地图
carla_client.load_world("Town03") #默认为town10
world = carla_client.get_world()
#添加动态天气
weather = carla.WeatherParameters(cloudiness=10.0, precipitation=10.0,
sun_altitude_angle=20.0)
#cloudiness=99时,天黑了
#sun_altitude_angle 太阳角度
world.set_weather(weather)
# 添加车辆
bp_lib = world.get_blueprint_library()
vehicle_bp = bp_lib.find('vehicle.tesla.model3')
spawn_points = world.get_map().get_spawn_points()
transform_v = random.choice(spawn_points)
vehicle = world.spawn_actor(vehicle_bp, transform_v)
actor_list.append(vehicle)
print('created %s' % vehicle.type_id)
# 设定视角
spectator = world.get_spectator()
#把视角调整成和车一致,一般carla的车原点在底盘中间,实现可以从车后方进行观察
transform = carla.Transform(vehicle.get_transform().transform(carla.Location(x=-4,
z=2.5)), vehicle.get_transform().rotation)
spectator.set_transform(transform)
#添加传感器
camera_bp = bp_lib.find('sensor.camera.rgb')
camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4))
camera = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle)
actor_list.append(camera)
camera.listen(lambda image: image.save_to_disk('out/%06d.png' % image.frame))
camera.stop() #不stop的话会存很多很多照片
print('created %s' % camera.type_id)
# 随机添加车辆位置 仿真测试
for _ in range(0, 10):
transform = random.choice(spawn_points)
bp = random.choice(bp_lib.filter('vehicle'))
npc = world.try_spawn_actor(bp, transform)
if npc is not None:
actor_list.append(npc)
npc.set_autopilot(True, 6000)
print('created %s' % npc.type_id)
time.sleep(1)
vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=-1.0))
vehicle.set_autopilot(True, 6000)
print('destroying actors')
camera.destroy() #一定要把车和传感器销毁掉,否则下一次打开可能会报错
client.apply_batch([carla.command.DestroyActor(x) for x in actor_list])
print('done.')
还可以在终端跑脚本实现手动控制车辆
python manual_control.py
联合仿真
基础逻辑:carla中构建环境,信息传入apollo的算法,得到控制的结果后再传回carla实现车辆的控制
CARLA Apollo Bridge: https://github.com/guardstrikelab/carla_apollo_bridge?tab=readme-ov-file