CARLA
 
载入中...
搜索中...
未找到
WalkerManager.h
浏览该文件的文档.
1// Copyright (c) 2019 Computer Vision Center (CVC) at the Universitat Autonoma
2// de Barcelona (UAB).
3//
4// This work is licensed under the terms of the MIT license.
5// For a copy, see <https://opensource.org/licenses/MIT>.
6// 这是一个头文件保护指令,确保该头文件在被多次包含时,其内容只会被编译一次
7#pragma once
8// 包含Carla项目中定义的不可复制(NonCopyable)相关的头文件,可能用于禁止类对象被拷贝,
9// 以此来确保某些对象在使用过程中的唯一性或者符合特定的资源管理逻辑
10#include "carla/NonCopyable.h"
11// 包含Carla客户端中与交通信号灯(TrafficLight)相关的头文件,用于处理交通信号灯的状态、属性等相关操作
12#include "carla/client/TrafficLight.h" // 包含Carla客户端中与整个虚拟世界(World)相关的头文件,可能用于访问世界中的各种实体、获取世界相关的属性等操作
13#include "carla/client/World.h"// 包含Carla项目中几何位置(Location)相关的头文件,用于表示虚拟世界中的点坐标等几何信息,比如行人、车辆等的位置
14#include "carla/geom/Location.h"// 包含Carla项目中导航(nav)相关的行人事件(WalkerEvent)头文件,可能用于定义行人在行走过程中遇到的各种事件类型
15#include "carla/nav/WalkerEvent.h"// 包含Carla项目中远程过程调用(RPC)相关的演员(Actor)标识符(ActorId)头文件,用于唯一标识虚拟世界中的各种实体(如行人、车辆等)
16#include "carla/rpc/ActorId.h"// 包含Carla项目中远程过程调用(RPC)相关的交通信号灯状态(TrafficLightState)头文件,用于表示交通信号灯的不同状态(如红灯、绿灯等)
18// 定义在Carla项目的nav命名空间下,表明这些类、结构体和函数是与导航相关功能实现的一部分,特别是针对行人导航方面
19namespace carla {
20namespace nav {
21// 前向声明Navigation类,告知编译器后续会定义该类,但在此处先不用知道其具体实现细节,
22 // 这样可以解决类之间相互包含时可能出现的编译顺序问题
23 class Navigation;
24
25 // 定义行人状态的枚举类型
27 WALKER_IDLE,// 行人空闲状态,可能表示行人当前没有进行任何明显的移动或活动。
28 WALKER_WALKING,// 行人行走状态,表示行人正在移动中。
29 WALKER_IN_EVENT,// 行人处于事件中的状态,这个状态的具体含义可能依赖于上下文,
30// 但通常表示行人正在参与某种特定的事件或活动,比如过马路、等待交通灯等。
31 WALKER_STOP// 行人空闲状态,可能表示行人当前没有进行任何明显的移动或活动。
32 };
33
34 // 定义一个结构体用于表示行人路线中的某一点
36 WalkerEvent event;// 事件类型
38 unsigned char areaType;// 区域类型
39
40 // 构造函数初始化所有成员
41 WalkerRoutePoint(WalkerEvent ev, carla::geom::Location loc, unsigned char area) : event(ev), location(loc), areaType(area) {};
42 };// 使用传入的 WalkerEvent 参数来初始化成员变量 event
43 // 使用传入的 carla::geom::Location 参数来初始化成员变量 location
44 // 使用传入的 unsigned char 参数来初始化成员变量 areaType
45 // 构造函数体为空,因为所有的初始化工作都已经在初始化列表中完成了。
46 // 初始化列表(即冒号后面的部分)是一种在构造函数体执行之前初始化成员变量的高效方式。
47 // 定义一个结构体用于表示一个行人的信息
48 struct WalkerInfo {// WalkerInfo 结构体,用于存储行人的相关信息。
49 carla::geom::Location from; // from 成员变量,表示行人出发的地点。
50 // 它是一个 carla::geom::Location 类型的对象,该类型很可能在 CARLA 仿真环境中定义,用于表示二维或三维空间中的点。
51 carla::geom::Location to; // to 成员变量,表示行人到达的地点。
52 // 它也是一个 carla::geom::Location 类型的对象,与 from 成员变量类似,用于指定行人的目的地。
53 unsigned int currentIndex { 0 }; // currentIndex 成员变量,表示行人当前在其路线中的索引位置。
54 // 它是一个 unsigned int 类型的值,初始化为 0,意味着默认情况下行人处于路线的起点。
55 WalkerState state; // state 成员变量,表示行人的当前状态。
56 // WalkerState 是一个枚举类型(或可能是另一个结构体/类),用于定义行人可能处于的不同状态,如行走、空闲、停止等。
57 std::vector<WalkerRoutePoint> route; // route 成员变量,表示行人的路线。
58 // 它是一个 std::vector<WalkerRoutePoint> 类型的容器,其中 WalkerRoutePoint 是一个结构体或类,用于存储路线上的单个点(或事件)的信息。
59 // std::vector 是C++标准库中的一个动态数组容器,能够根据需要自动调整其大小。
60 };
61
62 // 定义 WalkerManager 类用于管理行人及其路径
63 class WalkerManager : private NonCopyable {// WalkerManager 类,用于管理行人的行为和状态。
64// 它私有地继承(或更可能是“包含”了一个被简化为NonCopyable的类,用于禁止拷贝)了 NonCopyable 类,
65// 以防止 WalkerManager 对象被意外地拷贝或赋值。
66 public:
67
68 WalkerManager(); // 构造函数,用于创建WalkerManager对象,初始化该对象的内部状态,
69 // 可能会对成员变量进行初始化或者设置一些默认值,为后续管理行人及其路径做好准备。
70
71 ~WalkerManager(); // WalkerManager 的析构函数。
72 // 它是一个虚函数(尽管这里没有使用 virtual 关键字,但在实际设计中可能会是虚的,
73 // 特别是如果 WalkerManager 是多态基类的话),用于在 WalkerManager 对象被销毁时执行清理操作。
74 // 析构函数体可能释放了对象在生命周期中分配的资源,或者执行了其他必要的清理工作。
75
76 // 设置导航模块的函数,接受一个Navigation类型的指针参数,用于将外部定义的导航模块关联到WalkerManager对象中,
77 // 使得WalkerManager可以利用该导航模块来进行行人路径规划等相关操作
78 void SetNav(Navigation *nav);
79// 设置模拟器的引用,接受一个指向weak_ptr<carla::client::detail::Simulator>类型的参数,
80 // 通过这种弱引用的方式,可以访问模拟器相关的API函数,同时避免了循环引用等可能导致的资源管理问题,
81 // 方便在管理行人时与模拟器进行交互,比如获取世界状态、更新实体信息等操作
82
83 void SetSimulator(std::weak_ptr<carla::client::detail::Simulator> simulator);
84// 创建新的行人路线,接受一个ActorId类型的参数,用于唯一标识要创建路线的行人,
85 // 函数内部会根据相关逻辑为该行人创建合适的行走路线,返回一个布尔值表示创建操作是否成功
86
87 bool AddWalker(ActorId id);
88// 移除现有的行人路线,同样接受一个ActorId类型的参数,用于指定要移除路线的行人,
89 // 函数会清理与该行人路线相关的各种资源和信息,返回布尔值表示移除操作是否成功
90
91 bool RemoveWalker(ActorId id);
92// 更新所有的行人路线,接受一个双精度浮点数类型的参数delta,该参数可能表示时间间隔等信息,
93 // 函数会根据这个时间间隔以及行人的当前状态、路线等信息,对所有行人的路线进行更新,比如调整行人位置、处理事件等操作,
94 // 返回布尔值表示更新操作是否成功
95
96 bool Update(double delta);
97// 从当前路径点设置新的行人路线,有两个重载版本:
98
99 // 第一个重载版本只接受一个ActorId类型的参数,用于指定要设置路线的行人,
100 // 函数会基于当前路径点等相关信息为该行人重新规划路线,返回布尔值表示操作是否成功
101
102 bool SetWalkerRoute(ActorId id);// SetWalkerRoute 函数的一个重载版本,它接受一个参数:
103// ActorId id - 一个标识符,用于唯一指定要设置路线的行人(Walker)。
104// 这个函数的作用是设置指定行人的路线,但具体的路线信息(如起点、途经点、终点等)
105// 可能是在函数内部以某种方式预定义的,或者是在之前的某个时刻已经设置的。
106// 函数返回一个布尔值,表示操作是否成功。
107 bool SetWalkerRoute(ActorId id, carla::geom::Location to);// SetWalkerRoute 函数的另一个重载版本,它接受两个参数:
108// ActorId id - 同样是一个标识符,用于唯一指定要设置路线的行人。
109// carla::geom::Location to - 一个地点,表示行人路线的终点。
110// 这个函数的作用是设置指定行人的路线,其中终点是明确指定的。
111// 起点可能是默认的、之前设置的,或者是通过其他方式确定的。
112// 函数同样返回一个布尔值,表示操作是否成功。
113
114 // 设置路径中的下一个点
116
117 // 获取路径中的下一个点
119
120 // 获取路径中当前人行横道的结束点
122
123 // 返回导航对象
125
126 // 返回影响特定位置的交通灯
128
129 private:
130
131 // 获取所有交通灯的路径点
133// 执行特定事件的处理,接受一个ActorId类型的参数用于指定行人,一个WalkerInfo类型的引用参数用于获取和更新行人的信息,
134 // 以及一个双精度浮点数类型的参数delta(可能表示时间间隔等信息),
135 // 函数会根据行人当前遇到的事件以及相关状态,执行相应的处理逻辑,比如等待交通灯、通过路口等操作,返回处理结果(EventResult类型,具体类型定义可能在别处)
136
137 EventResult ExecuteEvent(ActorId id, WalkerInfo &info, double delta);
138// 使用无序映射(unordered_map)数据结构来存储每个行人(以ActorId作为键)对应的行人信息(WalkerInfo结构体),
139 // 方便快速查找、添加、删除和更新每个行人的相关信息
140 std::unordered_map<ActorId, WalkerInfo> _walkers;// 使用向量(vector)数据结构来存储交通灯相关的信息,每个元素是一个包含交通灯共享指针(SharedPtr<carla::client::TrafficLight>)
141 // 和对应的地理位置(carla::geom::Location)的pair结构体,用于管理和查询交通灯及其位置信息
142 std::vector<std::pair<SharedPtr<carla::client::TrafficLight>, carla::geom::Location>> _traffic_lights;// 指向Navigation对象的指针,用于关联外部的导航模块,初始化为nullptr,后续通过SetNav函数进行赋值
143 Navigation *_nav { nullptr };// 使用弱引用(weak_ptr)来存储指向模拟器(Simulator)对象的指针,避免强引用可能导致的循环引用问题,
144 // 同时又能通过该弱引用在需要时访问模拟器相关的API函数
145 std::weak_ptr<carla::client::detail::Simulator> _simulator;
146 };
147
148} // namespace nav
149} // namespace carla
这个类用于禁止拷贝和移动构造函数及赋值操作
管理行人导航,使用 Recast & Detour 库进行低层计算。
Definition Navigation.h:86
bool RemoveWalker(ActorId id)
std::vector< std::pair< SharedPtr< carla::client::TrafficLight >, carla::geom::Location > > _traffic_lights
bool GetWalkerCrosswalkEnd(ActorId id, carla::geom::Location &location)
void SetSimulator(std::weak_ptr< carla::client::detail::Simulator > simulator)
EventResult ExecuteEvent(ActorId id, WalkerInfo &info, double delta)
bool Update(double delta)
bool GetWalkerNextPoint(ActorId id, carla::geom::Location &location)
bool SetWalkerNextPoint(ActorId id)
std::weak_ptr< carla::client::detail::Simulator > _simulator
std::unordered_map< ActorId, WalkerInfo > _walkers
SharedPtr< carla::client::TrafficLight > GetTrafficLightAffecting(carla::geom::Location UnrealPos, float max_distance=-1.0f)
void SetNav(Navigation *nav)
bool SetWalkerRoute(ActorId id)
EventResult
事件的结果
Definition WalkerEvent.h:43
boost::variant2::variant< WalkerEventIgnore, WalkerEventWait, WalkerEventStopAndCheck > WalkerEvent
行人事件变体
Definition WalkerEvent.h:83
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
boost::shared_ptr< T > SharedPtr
使用这个SharedPtr(boost::shared_ptr)以保持与boost::python的兼容性, 但未来如果可能的话,我们希望能为std::shared_ptr制作一个Python适配器。
Definition Memory.h:19
rpc::ActorId ActorId
Definition ActorId.h:26
unsigned int currentIndex
std::vector< WalkerRoutePoint > route
carla::geom::Location from
carla::geom::Location to
carla::geom::Location location
WalkerRoutePoint(WalkerEvent ev, carla::geom::Location loc, unsigned char area)