7-地图和导航

news2024/9/29 13:18:20

1 地图

    地图既包括城镇的3D模型,也包括城镇的道路定义。地图的道路定义基于Opendrive文件,这是一种标准化的、带注释的道路定义格式。opdrive标准1.4定义道路、车道、路口等的方式决定了Python API的功能和决策背后的推理。

    Python API充当了一个高级查询系统来导航这些路径。它不断发展,以提供更广泛的工具集。

1.1 改变地图

    要改变地图,世界也必须改变。仿真将从头开始重新创建。你可以在一个新的世界中重新开始相同的地图,或者你可以同时改变地图和世界:

    reload_world()用相同的地图创建一个新的世界实例。

    load_world()改变当前的地图并创建一个新的世界。

world = client.load_world('Town01')

    每个地图都有一个与当前加载城市的名称相匹配的名称属性,例如Town01。要获取可用地图的列表:

print(client.get_available_maps())

1.2 地标

    OpenDRIVE文件中定义的交通标志被转换为CARLA,作为可以从API查询的地标对象。以下方法和类可用于操纵和处理地标对象:

    carla.Landmark表示OpenDRIVE信号。该类的属性和方法描述了地标及其影响区域。

    carla.LandmarkOrientation表示地标相对于道路几何定义的方向。

    carla.LandmarkType包含常见的地标类型,以便于转换为OpenDRIVE类型。

    carla.Waypoint可以获取位于其前方一定距离处的地标。可以指定要获取的地标类型。

    carla.Map检索地标集。它可以返回地图中的所有地标,或具有共同ID、类型或组的地标。

    carla.World充当着地标和carla.TrafficSign之间的中介。

my_waypoint.get_landmarks(200.0,True)

1.3 路点

    carla.Waypoint是CARLA世界中的一个3d定向点,对应于opdrive车道。所有与路点相关的事情都发生在客户端;与服务器的通信只需要一次,就可以获得包含路点信息的地图对象。

    每个路点包含一个carla.Transform表示它在地图上的位置以及包含它的车道的方向。road_id、section_id、lane_id、s分别对应opdrive的道路。路径点的id由这四个值的哈希组合构造而成。
    注:同一道路内距离小于2cm的路点共享相同的id。

    路点保存着包含它的车道的信息。这些信息包括车道的左右车道标记、一个布尔值(用于确定它是否在交叉路口内)、车道类型、宽度和换道权限。

# Access lane information from a waypoint
inside_junction = waypoint.is_junction()
width = waypoint.lane_width
right_lm_color = waypoint.right_lane_marking.color

1.4 车道

    OpenDRIVE标准1.4(OpenDRIVE standard 1.4)定义的车道类型在carla中转换为API,LaneType是一系列枚举值。
    车道周围的车道标记可通过carla.LaneMarking获取。车道标记由一系列变量定义:
    颜色:carla.LaneMarkingColor是定义标记颜色的枚举值。
    莱恩:carla.LaneChange表示车道是否允许左转、右转、同时可以左右转或不允许转弯。
    类型:carla.LaneMarkingType是根据OpenDRIVE标准定义标记类型的枚举值。
    宽度(width):定义车道标记的宽度。
    以下示例显示了如何获取特定路点的车道类型、车道标记和变道许可的信息:

# Get the lane type of the waypoint
lane_type = waypoint.lane_type

# Get the type of lane marking on the left.
left_lanemarking_type = waypoint.left_lane_marking.type()

# Get available lane changes for this waypoint.
lane_change = waypoint.lane_change

1.5 路口

    carla.Junction表示OpenDRIVE连接。此类包含一个带有边界框的交叉口,用于标识其中的车道或车辆。
    carla.Junction类包含get_waypoints方法,该方法为Junction内的每条车道返回一对路点。每对都位于连接边界的起点和终点。

waypoints_junc = my_junction.get_waypoints()

1.6 环境对象

    CARLA地图上的每个对象都有一组相关变量,可以在这里找到here。这些变量中包含一个唯一的ID(unique ID),可用于切换(toggle)该对象在地图上的可见性。您可以使用Python API根据每个环境对象的语义标记(semantic tag)获取(fetch)它们的ID:

    # Get the buildings in the world
    world = client.get_world()
    env_objs = world.get_environment_objects(carla.CityObjectLabel.Buildings)

    # Access individual building IDs and save in a set
    building_01 = env_objs[0]
    building_02 = env_objs[1]
    objects_to_toggle = {building_01.id, building_02.id}

    # Toggle buildings off
    world.enable_environment_objects(objects_to_toggle, False)
    # Toggle buildings on
    world.enable_environment_objects(objects_to_toggle, True)

2 导航

    CARLA中的导航通过Waypoint API管理(carla.Waypoint和carla.Map)
    客户端必须首先与服务器通信,以检索包含路点信息的地图对象。

2.1 通过路点导航

    Waypoint API公开了一些方法,这些方法允许路点相互连接,并沿着道路构建一条道路供车辆导航:
    next(d)在车道方向的近似距离d内创建一个路点列表。该列表为根据距离d设置一个路点。

    previous(d)创建了一个路点列表,路点位于车道的相反方向上的近似距离d内。

    Next_until_lane_end (d)和previous_until_lane_start(d)返回间隔为d的路点列表。这些列表分别从当前路点到路的起点和终点。

  get_right_lane()get_left_lane()返回相邻车道(如果存在)中的等效路点。通过找到右/左车道上的下一个路点并移动到该路点,可以进行变道操作。

# Find next waypoint 2 meters ahead.
waypoint = waypoint.next(2.0)

2.2 生成地图导航

    客户端需要向服务端发出请求以获取.xodr地图文件并将其解析为carla.Map对象。这只需要做一次。
    获取map对象:

map = world.get_map()

    地图对象包含用于创建车辆的推荐生成点。你可以得到这些生成点的列表,每个生成点都包含一个carla.Transform,使用以下方法进行转换。注意:生成点可能已经被占用,由于碰撞导致车辆创建失败。

spawn_points = world.get_map().get_spawn_points()

    可以通过在地图的OpenDRIVE定义中获取(getting)距离特定位置或特定road_id、lane_id和s值最近的路点来开始使用路点:

# Nearest waypoint in the center of a Driving or Sidewalk lane.
waypoint01 = map.get_waypoint(vehicle.get_location(),project_to_road=True, lane_type=(carla.LaneType.Driving | carla.LaneType.Sidewalk))

#Nearest waypoint but specifying OpenDRIVE parameters. 
waypoint02 = map.get_waypoint_xodr(road_id,lane_id,s)

    下面的示例展示了如何生成一组路点来可视化城市车道。这将在地图上为每条道路和车道创建路点,路点之间的距离大约是2米。

waypoint_list = map.generate_waypoints(2.0)

    要生成道路拓扑的缩略图,请使用以下示例。这将返回路点对(元组)的列表。每对中的第一个元素与第二个元素连接,两者都定义了地图中每条车道的起点和终点。有关此方法的更多信息,请参阅PythonAPI。

waypoint_tuple_list = map.get_topology()

    下面的示例将carla.Transform转换为carla形式的地理经纬度坐标:

my_geolocation = map.transform_to_geolocation(vehicle.transform)

    使用以下示例以OpenDRIVE格式将道路信息保存到磁盘:

info_map = map.to_opendrive()

3 carla地图   

    CARLA生态中有八个城镇,每个城镇都有两种地图,非图层和图层两种。图层是指地图中的分组对象,具体可参阅Layers。

3.1 无图层地图

    下表显示了无图层地图(单击城镇名称可以查看地图的俯视图)。所有图层始终存在,在这些地图中无法单独打开或关闭。在CARLA 0.9.11之前,这些是唯一可用的地图类型。

城镇地图概述
Town01由“T型交叉口”组成的基本城镇布局。
Town02一个小型化的Town01地图
Town03复杂的城镇,有一个5车道的交叉口、一个环形交叉口、崎岖路、隧道等等。
Town04一个有高速公路和小镇的无限环路。
Town05方形网格城镇,有十字路口和桥。每个方向都有多条车道。可用于执行变道。
Town06有许多高速公路出入口的长公路。
Town07乡村环境,狭窄的道路,谷仓,几乎没有红绿灯。
Town10一个具有不同环境的城市环境,如大道或长廊,以及更逼真的纹理。

    注意:用户可以自定义地图customize a map,甚至创建一个新地图create a new map在CARLA中使用。

3.2 图层地图

     图层地图的布局与非分层地图相同,但可以关闭和打开地图的图层。图层地图可以通过后缀_Opt来标识,例如Town01_Opt。使用这些地图,可以通过Python API来加载load和卸载unload图层:

    # Load layered map for Town 01 with minimum layout plus buildings and parked vehicles
    world = client.load_world('Town01_Opt', carla.MapLayer.Buildings | carla.MapLayer.ParkedVehicles)

    # Toggle all buildings off
    world.unload_map_layer(carla.MapLayer.Buildings)

    # Toggle all buildings on   
    world.load_map_layer(carla.MapLayer.Buildings)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2176825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

日志的艺术:深入理解 spdlog

目录 1. 为什么需要日志? 2. 同步日志 vs. 异步日志 3. spdlog 的核心组成部分 4. 如何创建一个Logger 5. 如何选择输出目标(Sink) 6. 个性化你的日志格式 7. 异步日志的魔法 8. 刷新策略:何时将日志写入 9. 调整线程池&…

强化学习入门——Pybullet初体验

Pybullet 最近一直在想如何进行RL的学习,在学习RL的过程中,好的模拟仿真平台是非常重要的。除了Gym,还了解到Pybullet模块可以简便快捷地创建仿真环境,所以学习一下。 1.简介 PyBullet 是一个用于机器人学、游戏开发和图形研究…

mycat读写分离中间件

5、部署Mycat读写分离中间件服务 5.1安装Mycat服务 将Mycat服务的二进制软件包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到Mycat虚拟机的/root目录下,并将软件包解压到/use/local目录中 5.2赋予解压后的mycat目录权限 5.3向/etc/profile系统变量…

PyQt5与Html的关于地图位置显示的动态交互

PyQt5与Html的关于地图位置显示的动态交互 1 前言2 python部分3 HTML代码4 注意总结 1 前言 上篇本是放弃关于Folium的动态显示,但是在仔细对比Folium在python的直接应用与Html中的写法,其实两者没有什么区别,都是基于Leaflet上建立区域&…

[大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究

[大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究 目录 文章目录 [大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究目录文章研究背景 文章标题摘要1 引言2 相关工作3 数据集创建3.1 数据收集3.2 目标提示生成3.3 数据集注…

[ACS_C]:以 H2和 O2等离子体处理的 Al2O3为载体的 Pt 催化剂用于液态有机氢载体对二苄基甲苯和全氢二苄基甲苯的加氢和脱氢

摘要:二苄基甲苯 (DBT) 是一种很有前途的液态有机氢载体 (LOHC),理论储氢量为 6.2 wt%,可与可再生能源发电系统耦合。本工作采用一种方便、环保的等离子体处理方法改性氧化铝表面羟基和表面氧空位 (SOV)。通过浸渍处理后的氧化铝制备了不同的…

如何修复变砖的手机并恢复丢失的数据

您可能之前听说过“变砖”,但您知道什么是变砖手机吗?正如许多论坛中经常提出的问题一样,我如何知道我的手机是否变砖了?好吧,手机变砖主要有两种类型,即软件变砖和硬变砖。软变砖手机意味着重启后您仍然可…

MATLAB guide选择图片和全局变量使用

文章目录 前言一、按键选取文件二、全局化变量使用全局华使用 总结 前言 提示:这里可以添加本文要记录的大概内容: 项目需要: 提示:以下是本篇文章正文内容,下面案例可供参考 一、按键选取文件 [filename,pathname]…

想要编辑 PDF 文件?使用这 10 种最佳 PDF 编辑工具

您是否遇到过利益干系人要求您对 PDF 文件进行细微更改的情况? 通常我们会这样做! 但是,对你来说,做出要求的改变有多难呢? 好吧,当您没有用于创建 PDF 文件的源文件时,问题就来了。是的&…

如何选购适合自己的内衣洗衣机?五款热门卓越型号测评推荐

相信不少小伙伴都跟我一样,一方面,认为内裤、袜子与大件的上衣、裤子放一块清洗,会感觉很不卫生,而且穿在身上也不安心。但是另一方面,本身又很懒惰,也不想自己用手洗,不但经常会遗漏一些污渍&a…

探索 DaPy:Python 中的 AI 数据处理新贵

文章目录 探索 DaPy:Python 中的 AI 数据处理新贵背景介绍DaPy 是什么?如何安装 DaPy?DaPy 的简单函数使用方法加载数据数据筛选数据聚合数据可视化自定义函数 DaPy 在实际场景中的应用数据预处理数据分析数据处理与集成 常见 Bug 及解决方案…

蓝牙资讯|2024可穿戴市场的手表将出现下滑,耳机和戒指将增长

市场调查机构 IDC 发布博文,预测 2024 年全球可穿戴设备出货量达到 5.379 亿台,同比增长 6.1%。IDC 预计新兴市场的进一步普及和成熟市场的更新周期的开始将推动听力设备的发展,因为消费者希望更换大流行病时期购买的产品。 IDC 预估 2024 …

VS2017安装Installer Projects制作Setup包

下载安装扩展包 VS2017默认未安装Installer Projects Package,需要联机下载: 也可网页上下载离线InstallerProjects.vsix文件: https://visualstudioclient.gallerycdn.vsassets.io/extensions/visualstudioclient/microsoftvisualstudio20…

Spring Boot 进阶-Spring Boot 如何实现自定义的过滤器详解

在上一篇文章中我们讲解了关于拦截器的相关内容,并且通过一个防抖的例子来讲解了拦截器在实际开发中的使用。这篇文章我们为大家带来的就是关于过滤器的相关内容的分享。下面我们首先来介绍一下什么是过滤器。 什么是过滤器? 过滤器Filter,是Servlet技术中最常用的技术,开…

K8S精进之路-控制器DaemonSet -(3)

介绍 DaemonSet就是让一个节点上只能运行一个Daemonset Pod应用,每个节点就只有一个。比如最常用的网络组件,存储插件,日志插件,监控插件就是这种类型的pod.如果集群中有新的节点加入,DaemonSet也会在新的节点创建出来…

【Router】路由功能之DMZ(Demilitarized Zone)功能介绍及实现

DMZ(Demilitarized Zone) DMZ(非军事化区域)是一个位于内部网络和外部网络之间的分段区域。在一个网络中,DMZ通常包含运行公共服务的服务器或其他设备。 DMZ是一个位于内部网络和外部网络之间的分段区域,用…

wpa_cli支持EAP-TLS认证运行设计

wpa_cli支持EAP-TLS认证运行设计 1 输入 1.1启动wpa_supplicant 和 wpa_cli 在OpenHarmony开发板或华为开发机的命令行中输入 wpa_supplicant -Dnl80211 -c/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf -gabstract:/data/service/el1/public/wifi/sock…

【笔记】Java 栈 java.util.Stack

目标:了解Java编程语言里栈和队列是什么样的。 概念 在Java中,Stack 类表示一个后进先出(LIFO,Last-In-First-Out)的对象栈。它继承自 Vector 类,并提供了五个操作,允许将向量(Vector)视为栈来处理。这些操作包括常用的: 压栈(push)出栈(pop)操作用于查看栈顶元…

物理加密机的高性能操作

物理加密机,也被称为硬件安全模块(HSM)或加密锁,是一种用于保护敏感数据和软件应用的物理设备。以下是关于物理加密机的详细介绍: 一、定义与功能 物理加密机通过提供强大的加密功能和访问控制,确保数据在存储、处理和传输过程中的…

GIS--为研究区准备数据

一、实验目的 掌握空间数据的分幅组织方法,掌握常用的空间数据处理技术 二、实验内容 计算图幅号;空间配准、投影定义、投影转换;拼接、裁切,获取研究区内的土地利用数据 三、实验原理与方法 实验原理:空间数据组…