热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CARLA(anopenurbandrivingsimulator)

论文:http:proceedings.mlr.pressv78dosovitskiy17adosovitskiy17a.pdf文档:https:ca

论文:http://proceedings.mlr.press/v78/dosovitskiy17a/dosovitskiy17a.pdf

文档:https://carla.readthedocs.io/en/latest/

介绍:

CARLA包含三个模块的自动驾驶:① 经典的规则化无人驾驶 ② 端对端模仿学习无人驾驶 ③端对端强化学习无人驾驶

CARLA支持感知控制两个模块,包含城市堵路(有汽车,建筑物,行人和道路指示标志),CARLA提供世界和智能体的接口,客户端API是python命令控制,以类似插槽(socket)的方式连接智能体和服务器。客户端client发送命令和下层指令,直接命令包括转向,加速和刹车,下层命令包括控制服务器的行为和重置仿真器,改变仿真环境和修改传感器参数。CARLA可以调整视觉信息质量和速度。CARLA有两个城镇,TOWN1用来训练,TOWN2用来测试。CARLA包含许多传感器,有RGB摄像头,提供深度信息的摄像头(该深度信息和语义分割,CARLA已经做好了,语义分割有12个种类:道路,道路线,交通灯,行人等等)GPS定位传感器,速度加速度传感器和碰撞传感器等等。

在CARLR中存在探索状态和行动,包含转向、节气门和刹车,包含传感器输入信息。

启动:

linux系统下安装各种依赖:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install build-essential clang-5.0 lld-5.0 g++-7 ninja-build python python-pip python-dev tzdata sed curl wget unzip autoconf libtool
pip install --user setuptools nose2sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/lib/llvm-5.0/bin/clang++ 101
sudo update-alternatives --install /usr/bin/clang clang /usr/lib/llvm-5.0/bin/clang 101

安装 Unreal Engine:

git clone --depth=1 -b 4.19 https://github.com/EpicGames/UnrealEngine.git ~/UnrealEngine_4.19
cd ~/UnrealEngine_4.19
./Setup.sh && ./GenerateProjectFiles.sh && make

安装CARLA:

git clone https://github.com/carla-simulator/carlaexport UE4_ROOT=~/UnrealEngine_4.19

在指定路径下(下载CARLA的路径下):

CarlaUE4.sh

CARLA默认的TCP接口是2000和2001,可以通过以下命令修改:

-carla-port=N

如果需要运行示例样例:

python example.py

修改地图:

./CarlaUE4.sh /Game/Carla/Maps/Town02

配置:

快进训练时间:

./CarlaUE4.sh -benchmark -fps=5

修改摄像头和传感器的参数:

Example.CarlaSettings.ini文件中修改,图片在服务器之间以BGRA数组的格式传送,用户也可以自己定义其他格式。

场景终端相机:(一般情况下选择在python中,后续将不再列出ini的修改)让整个场景看起来更加真实,在Python中:

camera = carla.sensor.Camera('MyCamera', PostProcessing='SceneFinal')
camera.set(FOV=90.0)
camera.set_image_size(800, 600)
camera.set_position(x=0.30, y=0, z=1.30)
camera.set_rotation(pitch=0, yaw=0, roll=0)carla_settings.add_sensor(camera)

在CarlaSettings.ini中:

[CARLA/Sensor/MyCamera]
SensorType=CAMERA
PostProcessing=SceneFinal
ImageSizeX=800
ImageSizeY=600
FOV=90
PositionX=0.30
PositionY=0
PositionZ=1.30
RotationPitch=0
RotationRoll=0
RotationYaw=0

深度地图相机:

camera = carla.sensor.Camera('MyCamera', PostProcessing='Depth')
camera.set(FOV=90.0)
camera.set_image_size(800, 600)
camera.set_position(x=0.30, y=0, z=1.30)
camera.set_rotation(pitch=0, yaw=0, roll=0)carla_settings.add_sensor(camera)

语义分割相机:将图像中的每一个目标进行分类

camera = carla.sensor.Camera('MyCamera', PostProcessing='SemanticSegmentation')
camera.set(FOV=90.0)
camera.set_image_size(800, 600)
camera.set_position(x=0.30, y=0, z=1.30)
camera.set_rotation(pitch=0, yaw=0, roll=0)carla_settings.add_sensor(camera)

激光雷达:一个旋转的激光雷达,投射出周围的三维点云

lidar = carla.sensor.Lidar('MyLidar')
lidar.set(Channels=32,Range=50,PointsPerSecond=100000,RotationFrequency=10,UpperFovLimit=10,LowerFovLimit=-30)
lidar.set_position(x=0, y=0, z=1.40)
lidar.set_rotation(pitch=0, yaw=0, roll=0)carla_settings.add_sensor(lidar)

benchmark agent:

agent 和 experiment suite 都需要用户定义

# We instantiate a forward agent, a simple policy that just set
# acceleration as 0.9 and steering as zero
agent = ForwardAgent()# We instantiate an experiment suite. Basically a set of experiments
# that are going to be evaluated on this benchmark.
experiment_suite = BasicExperimentSuite(city_name)# Now actually run the driving_benchmark
# Besides the agent and experiment suite we should send
# the city name ( Town01, Town02) the log
run_driving_benchmark(agent, experiment_suite, city_name,log_name, continue_experiment,host, port)

定义agent:这里的measurements传送回来的数据是agent的位置,方向,动态信息等等;sensor_data传送回来的信息是摄像头信息和雷达信息;Directions传送回来的是规划器发送的直行、右转、左转等信息;target传送回来的是位置和方向信息。函数会根据上述信息返回控制信息:转向角度、节气门开度、刹车制动力等。

from carla.agent.agent import Agent
from carla.client import VehicleControlclass ForwardAgent(Agent):def run_step(self, measurements, sensor_data, directions, target):"""Function to run a control step in the CARLA vehicle."""control = VehicleControl()control.throttle = 0.9return control

定义 experiment suite:

from carla.agent_benchmark.experiment import Experiment
from carla.sensor import Camera
from carla.settings import CarlaSettingsfrom .experiment_suite import ExperimentSuiteclass BasicExperimentSuite(ExperimentSuite):

@property
def train_weathers(self):return [1]
@property
def test_weathers(self):return [1]

查看起始位置:

python view_start_positions.py

增加一些其他的选项:

# Define the start/end position below as tasks
poses_task0 = [[7, 3]]
poses_task1 = [[138, 17]]
poses_task2 = [[140, 134]]
poses_task3 = [[140, 134]]
# Concatenate all the tasks
poses_tasks = [poses_task0, poses_task1 , poses_task1 , poses_task3]
# Add dynamic objects to tasks
vehicles_tasks = [0, 0, 0, 20]
pedestrians_tasks = [0, 0, 0, 50]

定义实验向量:

experiments_vector = []# The used weathers is the union between test and train weathersfor weather in used_weathers:for iteration in range(len(poses_tasks)):poses = poses_tasks[iteration]vehicles = vehicles_tasks[iteration]pedestrians = pedestrians_tasks[iteration]conditions = CarlaSettings()conditions.set(SendNonPlayerAgentsInfo=True,NumberOfVehicles=vehicles,NumberOfPedestrians=pedestrians,WeatherId=weather)# Add all the cameras that were set for this experimentsconditions.add_sensor(camera)experiment = Experiment()experiment.set(Conditions=conditions,Poses=poses,Task=iteration,Repetitions=1)experiments_vector.append(experiment)

定义评价标准:

@propertydef metrics_parameters(self):"""Property to return the parameters for the metrics moduleCould be redefined depending on the needs of the user."""return {'intersection_offroad': {'frames_skip': 10,'frames_recount': 20,'threshold': 0.3},'intersection_otherlane': {'frames_skip': 10,'frames_recount': 20,'threshold': 0.4},'collision_other': {'frames_skip': 10,'frames_recount': 20,'threshold': 400},'collision_vehicles': {'frames_skip': 10,'frames_recount': 30,'threshold': 400},'collision_pedestrians': {'frames_skip': 5,'frames_recount': 100,'threshold': 300},}

 


推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 本文介绍了在Android Studio中使用命令行build gradle的方法,并解决了一些常见问题,包括手动配置gradle环境变量和解决External Native Build Issues的方法。同时提供了相关参考文章链接。 ... [详细]
  • Ubuntu 用户安装 Linux Kernel 3.15 RC1
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • linux qt打开常用文件格式,设置Linux Qt文件默认打开方式为QtCreator
    Linux自定义文件打开方式也可参照文本抱歉,本文前段时间写的ubuntu下的Qt工程文件默认打开方式是不好用的,因为其他的文本文件也会受到影响,强迫症患者,每次打开Qt工程都是先 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
author-avatar
qqqq
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有