在之前已经简单介绍过一下无人驾驶技术,那么我们编写好的 coding 如何测试呢? 之前在无人驾驶中介绍过,首先会将代码运行在虚拟环境下进行测试,就来介绍如何搭建一个无人驾驶的虚拟环境。然后我们选择特斯拉作为测试车辆。
对于我们这些无人驾驶爱好者,因为手上没有硬件,也不能因为开发无人驾驶应用而先买辆,然后安装线控系统和 lidra,以获取数据。
我们只是关心如何开发无人驾驶应用,开发好的程序需要在真实环境进行测试,现在可以借助 Carla 模拟环境便可以测试我们代码。
Carla 提供用于训练和验证无人驾驶模型的自主驾驶系统。除了开源代码和协议外,Carla 还提供了开放数字资源(城市布局、建筑、车辆),这一些都是免费的。通过编程我们可以完全控制,自定义驾驶仿真系统来达到自己训练模型的所需路况,包括交通规则、城镇道路以及建筑规划的环境、所有静态和动态资源(如行人,路灯和障碍物),以及如何地图生成等。
可扩展性可以创建一个服务器来实现多个客户端共享仿真系统,来实现可扩展性,同一节点或不同节点中的多个客户端还可以控制各自的 actor (参与者表示为 actor 这里 actor 可以移动汽车或行人等)。
灵活的 APICarla 提供一套灵活的 API,用户可以使用 API 来轻松控制模拟仿真系统的每一个,包括交通生成、行人行为、天气、传感器等等。
自动驾驶传感器套件用户可以配置多种传感器套件,包括 lidar、多个摄像头、景深传感器和 GPS 等。
快速模拟车辆的路径规划和控制当不需要图形可视化交通模拟和道路行为(road behaviro),可以通过关闭渲染模式,以快速执行不需要图形的交通模拟和车辆在道路行为(road behaviro)。
创建地图用户可以使用 roadrunner 等工具,按照 OpenDrive 标准轻松创建自己的地图。
引擎场景允许用户基于模块化行为定义和执行不同的交通场景。
Carla 支持对 ROS 的集成提供的 ROS-bridge 来与 ROS 集成,ROS 系统是机器人构建基础框架,百度阿波罗的无人驾驶开放平台就是基于 ROS 来改写。
自主驾驶基线在 Carla 提供自主驾驶基线作为可运行代理,包括 Autoware 代理和Conditional Imitation Learning(条件模拟学习)代理。
没有车做什么无人驾驶,今天介绍 Carla 给我们带来模拟驾驶体验,Carla 给那些没有机会自己上道训练自己的车的驾驶。提供了 window 和 linux 版本,没有提供 mac 版本,所以这里下载 window 版本安装来训练我们模型。
安装如果要安装 window 版本需要降低一个版本。下载安装 zip 文件大小大概 2.9 G 吧,解压后在根目录下看到一个可执行的 exe 文件,运行起来我们就可看到一个小镇,不过只有基础建设道路和建筑,路上并没有我们需要车辆、非机动车和行人。
这里使用 wasd 后来在小镇进行导航,对小镇环境有一个大体的了解,在默认情况下,这里看上去似乎是一座安静的小镇,街道上看不行人和车辆,接下来可以使用 python 来创建自定义模拟环境与模拟环境进行交互。
也可以通过运行 examples 文件夹下文件来先睹为快,spwan_npc 是生成角色 py 后面我们指定生成 npc 的数量。
py spawn_npc.py -n 80
运行文件后,就会发现有已经有车辆和非机动车运行在小镇道路上了。
002.JPG
py dynamic_weather.py
Sun(0.71, 35.79) Storm(clouds=0%, rain=0%, wind=0%)
也可以通过运行 dynamic_weather 来改变环境的天气,具体参数比较直观,有关参数设置详细信息可以参考文档。
003.JPG
python manual_control.py
添加可以手动控制角色在城镇里行驶,运行后随机给我们分别了一个非机动车—自行车,通过方向键可以控制 actor(自行车)在城镇里溜达,可以切换 actor 为机动车辆
005.JPG
角色的运动方式是我们通过 manual_control.py 定义的,我们也可以定义自己的手动控制方式,不过需要说明下这些操作和控制是基于 pygame ,所以需要先安装 pygame 这个库,然后再运行 manual_control.py 。
006.JPG
有关如何控制角色的如下图,玩过游戏应该对这些不会陌生,通过 aswd 按键来控制角色的移动。carla 支持多人在用一个仿真系统中操作自己角色。和游戏有点像,游戏源于真实同时游戏又是超现实的,可能会反过来作用于现实,
007.JPG
接下来,我们来实现一个 model3 的无人驾驶吧
import glob
import os
import sys
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 random
import time
以上代码大家可以从 carla 提供 examples 文件夹选择一个文件,然后保留该文件头部添加库以及设置环境 egg 文件部分的代码
def main():
actor_list = []
try:
client = carla.Client('localhost', 2000)
client.set_timeout(2.0)
world = client.get_world()
blueprint_library = world.get_blueprint_library()
bp = blueprint_library.filter('model3')[0]
print(bp)
spawn_point = random.choice(world.get_map().get_spawn_points())
vehicle = world.spawn_actor(bp,spawn_point)
vehicle.apply_control(carla.VehicleControl(throttle=0.1, steer=0.0))
actor_list.append(vehicle)
time.sleep(5)
finally:
print('destroying actors')
for actor in actor_list:
actor.destroy()
print('done.')
if __name__ == '__main__':
main()
client = carla.Client('localhost', 2000)
创建可一个客户端来链接 carla 的服务端
world = client.get_world()
blueprint_library = world.get_blueprint_library()
bp = blueprint_library.filter('model3')[0]
print(bp)
上面代码就是生成一个 actor 并且设置为 model3 车型
spawn_point = random.choice(world.get_map().get_spawn_points())
vehicle = world.spawn_actor(bp,spawn_point)
vehicle.apply_control(carla.VehicleControl(throttle=0.1, steer=0.0))
actor_list.append(vehicle)
创建车辆后在地图上随机分配一个点作为 actor 生成的位置,系统就会根据设置在虚拟环境随机生成 model3,然后给其分配一个控制(throttle=0.1, steer=0.0)
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved