CARLA
 
载入中...
搜索中...
未找到
World.cpp
浏览该文件的文档.
1// Copyright (c) 2017 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#include "carla/client/World.h" // 引入World类的定义
8
9#include "carla/Logging.h" // 引入日志记录功能
10#include "carla/client/Actor.h" // 引入参与者类的定义
11#include "carla/client/ActorBlueprint.h" // 引入参与者蓝图类的定义
12#include "carla/client/ActorList.h" // 引入参与者列表类的定义
13#include "carla/client/detail/Simulator.h" // 引入模拟器的详细信息
14#include "carla/StringUtil.h" // 引入字符串工具
15#include "carla/road/SignalType.h" // 引入信号类型定义
16#include "carla/road/Junction.h" // 引入交叉口类的定义
17#include "carla/client/TrafficLight.h" // 引入交通灯类的定义
18
19#include <exception> // 引入异常处理
20
21namespace carla {
22namespace client {
23
24 SharedPtr<Map> World::GetMap() const { // 获取地图的方法
25 return _episode.Lock()->GetCurrentMap(); // 返回当前地图
26 }
27
28 void World::LoadLevelLayer(rpc::MapLayer map_layers) const { // 加载地图层的方法
29 _episode.Lock()->LoadLevelLayer(map_layers); // 加载指定的地图层
30 }
31
32 void World::UnloadLevelLayer(rpc::MapLayer map_layers) const { // 卸载地图层的方法
33 _episode.Lock()->UnloadLevelLayer(map_layers); // 卸载指定的地图层
34 }
35
36 SharedPtr<BlueprintLibrary> World::GetBlueprintLibrary() const { // 获取蓝图库的方法
37 return _episode.Lock()->GetBlueprintLibrary(); // 返回蓝图库
38 }
39
40 rpc::VehicleLightStateList World::GetVehiclesLightStates() const { // 获取车辆灯光状态的方法
41 return _episode.Lock()->GetVehiclesLightStates(); // 返回车辆灯光状态列表
42 }
43
44 boost::optional<geom::Location> World::GetRandomLocationFromNavigation() const { // 获取随机导航位置的方法
45 return _episode.Lock()->GetRandomLocationFromNavigation(); // 返回随机导航位置
46 }
47
48 SharedPtr<Actor> World::GetSpectator() const { // 获取观众的方法
49 return _episode.Lock()->GetSpectator(); // 返回当前观众
50 }
51
52 rpc::EpisodeSettings World::GetSettings() const { // 获取设置的方法
53 return _episode.Lock()->GetEpisodeSettings(); // 返回当前剧集设置
54 }
55
56 uint64_t World::ApplySettings(const rpc::EpisodeSettings &settings, time_duration timeout) { // 应用设置的方法
57 rpc::EpisodeSettings new_settings = settings; // 复制新的设置
58 uint64_t id = _episode.Lock()->SetEpisodeSettings(settings); // 设置新的剧集设置并返回ID
59
60 time_duration local_timeout = timeout.milliseconds() == 0 ? // 判断超时设置
61 _episode.Lock()->GetNetworkingTimeout() : timeout; // 如果没有设置,则使用默认网络超时
62
63 if (settings.fixed_delta_seconds.has_value()) { // 如果有固定的时间间隔设置
64 using namespace std::literals::chrono_literals; // 使用时间字面量
65
66 const auto number_of_attemps = 30u; // 定义最大尝试次数
67 uint64_t tics_correct = 0; // 记录正确的滴答数
68 for (auto i = 0u; i < number_of_attemps; i++) { // 尝试应用设置
69 const auto curr_snapshot = GetSnapshot(); // 获取当前快照
70
71 const double error = abs(new_settings.fixed_delta_seconds.get() - curr_snapshot.GetTimestamp().delta_seconds); // 计算误差
72 if (error < std::numeric_limits<float>::epsilon()) // 如果误差在允许范围内
73 tics_correct++; // 正确滴答数加一
74
75 if (tics_correct >= 2) // 如果正确滴答数达到2
76 return id; // 返回设置ID
77
78 Tick(local_timeout); // 执行一次Tick操作
79 }
80
81 log_warning("World::ApplySettings: After", number_of_attemps, " attempts, the settings were not correctly set. Please check that everything is consistent."); // 日志警告
82 }
83 return id; // 返回设置ID
84 }
85
86 rpc::WeatherParameters World::GetWeather() const { // 获取天气的方法
87 return _episode.Lock()->GetWeatherParameters(); // 返回当前天气参数
88 }
89
90 void World::SetWeather(const rpc::WeatherParameters &weather) { // 设置天气的方法
91 _episode.Lock()->SetWeatherParameters(weather); // 应用新的天气参数
92 }
93
94 float World::GetIMUISensorGravity() const { // 获取IMU传感器重力的方法
95 return _episode.Lock()->GetIMUISensorGravity(); // 返回当前重力设置
96 }
97
98 void World::SetIMUISensorGravity(float NewIMUISensorGravity) { // 设置IMU传感器重力的方法
99 _episode.Lock()->SetIMUISensorGravity(NewIMUISensorGravity); // 应用新的重力设置
100 }
101
102 WorldSnapshot World::GetSnapshot() const { // 获取世界快照的方法
103 return _episode.Lock()->GetWorldSnapshot(); // 返回当前世界快照
104 }
105
106 SharedPtr<Actor> World::GetActor(ActorId id) const { // 根据ID获取参与者的方法
107 auto simulator = _episode.Lock(); // 锁定当前剧集
108 auto description = simulator->GetActorById(id); // 获取指定ID的参与者描述
109 return description.has_value() ? // 如果参与者存在
110 simulator->MakeActor(std::move(*description)) : // 创建并返回参与者实例
111 nullptr; // 否则返回空指针
112 }
113
114 SharedPtr<ActorList> World::GetActors() const { // 获取所有参与者的方法
115 return SharedPtr<ActorList>{new ActorList{ // 返回新的参与者列表
116 _episode,
117 _episode.Lock()->GetAllTheActorsInTheEpisode()}}; // 获取所有参与者
118 }
119
120 SharedPtr<ActorList> World::GetActors(const std::vector<ActorId> &actor_ids) const { // 根据ID列表获取参与者的方法
121 return SharedPtr<ActorList>{new ActorList{ // 返回新的参与者列表
122 _episode,
123 _episode.Lock()->GetActorsById(actor_ids)}}; // 根据ID获取参与者列表
124 }
125
127 const ActorBlueprint &blueprint, // 参与者蓝图
128 const geom::Transform &transform, // 变换信息
129 Actor *parent_actor, // 父参与者
130 rpc::AttachmentType attachment_type, // 附加类型
131 const std::string& socket_name) { // 套接字名称
132 return _episode.Lock()->SpawnActor(blueprint, transform, parent_actor, attachment_type, GarbageCollectionPolicy::Inherit, socket_name);
133 // 使用给定参数生成新的参与者
134 }
135
137 const ActorBlueprint &blueprint, // 参与者蓝图
138 const geom::Transform &transform, // 变换信息
139 Actor *parent_actor, // 父参与者
140 rpc::AttachmentType attachment_type, // 附加类型
141 const std::string& socket_name) noexcept { // 套接字名称
142 try {
143 return SpawnActor(blueprint, transform, parent_actor, attachment_type, socket_name);
144 // 尝试生成参与者,若成功返回参与者指针
145 } catch (const std::exception &) {
146 return nullptr; // 发生异常时返回空指针
147 }
148 }
149
150 WorldSnapshot World::WaitForTick(time_duration timeout) const { // 等待tick时间
151 time_duration local_timeout = timeout.milliseconds() == 0 ?
152 _episode.Lock()->GetNetworkingTimeout() : timeout; // 根据情况确定超时时间
153
154 return _episode.Lock()->WaitForTick(local_timeout); // 等待并返回快照
155 }
156
157 size_t World::OnTick(std::function<void(WorldSnapshot)> callback) { // 注册tick事件
158 return _episode.Lock()->RegisterOnTickEvent(std::move(callback)); // 返回回调ID
159 }
160
161 void World::RemoveOnTick(size_t callback_id) { // 移除tick事件
162 _episode.Lock()->RemoveOnTickEvent(callback_id); // 根据ID移除
163 }
164
165 uint64_t World::Tick(time_duration timeout) { // 执行tick操作
166 time_duration local_timeout = timeout.milliseconds() == 0 ?
167 _episode.Lock()->GetNetworkingTimeout() : timeout; // 确定超时时间
168 return _episode.Lock()->Tick(local_timeout); // 执行tick并返回结果
169 }
170
171 void World::SetPedestriansCrossFactor(float percentage) { // 设置行人过街因子
172 _episode.Lock()->SetPedestriansCrossFactor(percentage); // 更新因子
173 }
174
175 void World::SetPedestriansSeed(unsigned int seed) { // 设置行人种子
176 _episode.Lock()->SetPedestriansSeed(seed); // 更新种子值
177 }
178
179 SharedPtr<Actor> World::GetTrafficSign(const Landmark& landmark) const { // 获取交通标志
180 SharedPtr<ActorList> actors = GetActors(); // 获取所有参与者
181 SharedPtr<TrafficSign> result; // 结果变量
182 std::string landmark_id = landmark.GetId(); // 获取地标ID
183 for (size_t i = 0; i < actors->size(); i++) {
184 SharedPtr<Actor> actor = actors->at(i); // 遍历参与者
185 if (StringUtil::Match(actor->GetTypeId(), "*traffic.*")) { // 匹配交通标志类型
186 TrafficSign* sign = static_cast<TrafficSign*>(actor.get()); // 转换为交通标志指针
187 if(sign && (sign->GetSignId() == landmark_id)) { // 匹配ID
188 return actor; // 返回匹配的参与者
189 }
190 }
191 }
192 return nullptr; // 未找到时返回空指针
193 }
194
195 SharedPtr<Actor> World::GetTrafficLight(const Landmark& landmark) const { // 获取交通信号灯
196 SharedPtr<ActorList> actors = GetActors(); // 获取所有参与者
197 SharedPtr<TrafficLight> result; // 结果变量
198 std::string landmark_id = landmark.GetId(); // 获取地标ID
199 for (size_t i = 0; i < actors->size(); i++) {
200 SharedPtr<Actor> actor = actors->at(i); // 遍历参与者
201 if (StringUtil::Match(actor->GetTypeId(), "*traffic_light*")) { // 匹配交通灯类型
202 TrafficLight* tl = static_cast<TrafficLight*>(actor.get()); // 转换为交通灯指针
203 if(tl && (tl->GetSignId() == landmark_id)) { // 匹配ID
204 return actor; // 返回匹配的参与者
205 }
206 }
207 }
208 return nullptr; // 未找到时返回空指针
209 }
210
211 SharedPtr<Actor> World::GetTrafficLightFromOpenDRIVE(const road::SignId& sign_id) const { // 从OpenDRIVE获取交通信号灯
212 SharedPtr<ActorList> actors = GetActors(); // 获取所有参与者
213 SharedPtr<TrafficLight> result; // 结果变量
214 for (size_t i = 0; i < actors->size(); i++) {
215 SharedPtr<Actor> actor = actors->at(i); // 遍历参与者
216 if (StringUtil::Match(actor->GetTypeId(), "*traffic_light*")) { // 匹配交通灯类型
217 TrafficLight* tl = static_cast<TrafficLight*>(actor.get()); // 转换为交通灯指针
218 if(tl && (tl->GetSignId() == sign_id)) { // 匹配ID
219 return actor; // 返回匹配的参与者
220 }
221 }
222 }
223 return nullptr; // 未找到时返回空指针
224 }
225
226 void World::ResetAllTrafficLights() { // 重置所有交通信号灯
227 _episode.Lock()->ResetAllTrafficLights(); // 调用重置方法
228 }
229
230 SharedPtr<LightManager> World::GetLightManager() const { // 获取光照管理器
231 return _episode.Lock()->GetLightManager(); // 返回光照管理器
232 }
233
234 void World::FreezeAllTrafficLights(bool frozen) { // 冻结或解冻所有交通信号灯
235 _episode.Lock()->FreezeAllTrafficLights(frozen); // 调用冻结方法
236 }
237
238 std::vector<geom::BoundingBox> World::GetLevelBBs(uint8_t queried_tag) const { // 获取级别边界框
239 return _episode.Lock()->GetLevelBBs(queried_tag); // 返回边界框列表
240 }
241
242 std::vector<rpc::EnvironmentObject> World::GetEnvironmentObjects(uint8_t queried_tag) const { // 获取环境对象
243 return _episode.Lock()->GetEnvironmentObjects(queried_tag); // 返回环境对象列表
244 }
245
246
248 std::vector<uint64_t> env_objects_ids, // 环境对象的 ID 列表
249 bool enable) const { // 是否启用环境对象
250 _episode.Lock()->EnableEnvironmentObjects(env_objects_ids, enable); // 锁定并启用或禁用环境对象
251 }
252
253boost::optional<rpc::LabelledPoint> World::ProjectPoint(
254 geom::Location location, // 要投影的点的位置
255 geom::Vector3D direction, // 投影方向
256 float search_distance) const { // 搜索距离
257 auto result = _episode.Lock()->ProjectPoint(location, direction, search_distance); // 锁定并进行点投影
258 if (result.first) { // 如果投影成功
259 return result.second; // 返回投影结果
260 }
261 return {}; // 否则返回空
262 }
263
264boost::optional<rpc::LabelledPoint> World::GroundProjection(
265 geom::Location location, // 要投影的点的位置
266 float search_distance) const { // 搜索距离
267 const geom::Vector3D DownVector(0,0,-1); // 定义向下的向量
268 return ProjectPoint(location, DownVector, search_distance); // 调用 ProjectPoint 进行地面投影
269 }
270
271std::vector<rpc::LabelledPoint> World::CastRay(
272 geom::Location start_location, // 射线起始位置
273 geom::Location end_location) const { // 射线结束位置
274 return _episode.Lock()->CastRay(start_location, end_location); // 锁定并进行射线投射
275 }
276
277std::vector<SharedPtr<Actor>> World::GetTrafficLightsFromWaypoint(
278 const Waypoint& waypoint, // 轨迹点
279 double distance) const { // 距离
280 std::vector<SharedPtr<Actor>> Result; // 保存交通信号灯的结果
281 std::vector<SharedPtr<Landmark>> landmarks =
282 waypoint.GetAllLandmarksInDistance(distance); // 获取指定距离内的所有地标
283 std::set<std::string> added_signals; // 用于记录已添加的信号
284 for (auto& landmark : landmarks) { // 遍历所有地标
285 if (road::SignalType::IsTrafficLight(landmark->GetType())) { // 判断是否为交通信号灯
286 SharedPtr<Actor> traffic_light = GetTrafficLight(*(landmark.get())); // 获取交通信号灯
287 if (traffic_light) { // 如果找到交通信号灯
288 if(added_signals.count(landmark->GetId()) == 0) { // 检查是否未添加
289 Result.emplace_back(traffic_light); // 添加到结果中
290 added_signals.insert(landmark->GetId()); // 标记为已添加
291 }
292 }
293 }
294 }
295 return Result; // 返回找到的交通信号灯
296 }
297
298std::vector<SharedPtr<Actor>> World::GetTrafficLightsInJunction(
299 const road::JuncId junc_id) const { // 获取交叉口的交通信号灯
300 std::vector<SharedPtr<Actor>> Result; // 保存结果的向量
301 SharedPtr<Map> map = GetMap(); // 获取地图
302 const road::Junction* junction = map->GetMap().GetJunction(junc_id); // 获取交叉口
303 for (const road::ContId& cont_id : junction->GetControllers()) { // 遍历控制器
304 const std::unique_ptr<road::Controller>& controller =
305 map->GetMap().GetControllers().at(cont_id); // 获取控制器
306 for (road::SignId sign_id : controller->GetSignals()) { // 遍历控制器的信号
307 SharedPtr<Actor> traffic_light = GetTrafficLightFromOpenDRIVE(sign_id); // 从 OpenDRIVE 获取交通信号灯
308 if (traffic_light) { // 如果找到交通信号灯
309 Result.emplace_back(traffic_light); // 添加到结果中
310 }
311 }
312 }
313 return Result; // 返回找到的交通信号灯
314 }
315
317 const std::string &object_name, // 对象名称
318 const rpc::MaterialParameter& parameter, // 材质参数
319 const rpc::TextureColor& Texture) { // 纹理颜色
320 _episode.Lock()->ApplyColorTextureToObjects({object_name}, parameter, Texture); // 锁定并应用颜色纹理到对象
321 }
322
324 const std::vector<std::string> &objects_name, // 对象名称列表
325 const rpc::MaterialParameter& parameter, // 材质参数
326 const rpc::TextureColor& Texture) { // 纹理颜色
327 _episode.Lock()->ApplyColorTextureToObjects(objects_name, parameter, Texture); // 锁定并应用颜色纹理到对象列表
328 }
329
331 const std::string &object_name, // 对象名称
332 const rpc::MaterialParameter& parameter, // 材质参数
333 const rpc::TextureFloatColor& Texture) { // 浮点纹理颜色
334 _episode.Lock()->ApplyColorTextureToObjects({object_name}, parameter, Texture); // 锁定并应用浮点颜色纹理到对象
335 }
336
338 const std::vector<std::string> &objects_name, // 对象名称列表
339 const rpc::MaterialParameter& parameter, // 材质参数
340 const rpc::TextureFloatColor& Texture) { // 浮点纹理颜色
341 _episode.Lock()->ApplyColorTextureToObjects(objects_name, parameter, Texture); // 锁定并应用浮点颜色纹理到对象列表
342 }
343
344std::vector<std::string> World::GetNamesOfAllObjects() const { // 获取所有对象的名称
345 return _episode.Lock()->GetNamesOfAllObjects(); // 锁定并返回所有对象的名称
346 }
347
348
350 const std::string &object_name, // 对象名称
351 const rpc::TextureColor& diffuse_texture, // 漫反射纹理
352 const rpc::TextureFloatColor& emissive_texture, // 自发光纹理
353 const rpc::TextureFloatColor& normal_texture, // 法线纹理
354 const rpc::TextureFloatColor& ao_roughness_metallic_emissive_texture) // AO、粗糙度、金属度、自发光纹理
355{
356 // 检查漫反射纹理的宽度和高度是否有效
357 if (diffuse_texture.GetWidth() && diffuse_texture.GetHeight()) {
358 // 将漫反射纹理应用于指定对象
360 object_name, rpc::MaterialParameter::Tex_Diffuse, diffuse_texture);
361 }
362
363 // 检查法线纹理的宽度和高度是否有效
364 if (normal_texture.GetWidth() && normal_texture.GetHeight()) {
365 // 将法线纹理应用于指定对象
367 object_name, rpc::MaterialParameter::Tex_Normal, normal_texture);
368 }
369
370 // 检查AO、粗糙度、金属度和自发光纹理的宽度和高度是否有效
371 if (ao_roughness_metallic_emissive_texture.GetWidth() &&
372 ao_roughness_metallic_emissive_texture.GetHeight()) {
373 // 将AO、粗糙度、金属度和自发光纹理应用于指定对象
375 object_name,
377 ao_roughness_metallic_emissive_texture);
378 }
379
380 // 检查自发光纹理的宽度和高度是否有效
381 if (emissive_texture.GetWidth() && emissive_texture.GetHeight()) {
382 // 将自发光纹理应用于指定对象
384 object_name, rpc::MaterialParameter::Tex_Emissive, emissive_texture);
385 }
386}
387
389 const std::vector<std::string> &objects_names, // 对象名称列表
390 const rpc::TextureColor& diffuse_texture, // 漫反射纹理
391 const rpc::TextureFloatColor& emissive_texture, // 自发光纹理
392 const rpc::TextureFloatColor& normal_texture, // 法线纹理
393 const rpc::TextureFloatColor& ao_roughness_metallic_emissive_texture) // AO、粗糙度、金属度、自发光纹理
394{
395 // 检查漫反射纹理的宽度和高度是否有效
396 if (diffuse_texture.GetWidth() && diffuse_texture.GetHeight()) {
397 // 将漫反射纹理应用于多个指定对象
399 objects_names, rpc::MaterialParameter::Tex_Diffuse, diffuse_texture);
400 }
401
402 // 检查法线纹理的宽度和高度是否有效
403 if (normal_texture.GetWidth() && normal_texture.GetHeight()) {
404 // 将法线纹理应用于多个指定对象
406 objects_names, rpc::MaterialParameter::Tex_Normal, normal_texture);
407 }
408
409 // 检查AO、粗糙度、金属度和自发光纹理的宽度和高度是否有效
410 if (ao_roughness_metallic_emissive_texture.GetWidth() &&
411 ao_roughness_metallic_emissive_texture.GetHeight()) {
412 // 将AO、粗糙度、金属度和自发光纹理应用于多个指定对象
414 objects_names,
416 ao_roughness_metallic_emissive_texture);
417 }
418
419 // 检查自发光纹理的宽度和高度是否有效
420 if (emissive_texture.GetWidth() && emissive_texture.GetHeight()) {
421 // 将自发光纹理应用于多个指定对象
423 objects_names, rpc::MaterialParameter::Tex_Emissive, emissive_texture);
424 }
425}
426
427} // namespace client
428} // namespace carla
static bool Match(const char *str, const char *wildcard_pattern)
Match str with the Unix shell-style wildcard_pattern.
包含生成参与者所需的所有必要信息。
表示模拟中的一个行为体(Actor)。
Landmark 类表示地图中的一个地标,该地标与某个信号相关联。 包含关于地标的各种属性和信息,可以用来在地图上找到该地标以及获取其相关数据。
Definition Landmark.h:23
std::string GetId() const
获取地标的唯一标识符。 该标识符在整个系统中是唯一的,用来区分不同的地标。
Definition Landmark.h:53
carla::road::SignId GetSignId() const
路径点类,表示道路上的特定位置。
std::vector< SharedPtr< Landmark > > GetAllLandmarksInDistance(double distance, bool stop_at_junction=false) const
获取从当前位置到指定距离内的所有地标列表。
SharedPtr< ActorList > GetActors() const
返回一个包含当前世界上所有存在的参与者(actor)的列表。 获取整个模拟世界中所有参与者的集合,便于进行批量操作、统计或者遍历所有实体执行某些通用的操作等。
Definition World.cpp:114
void ApplyColorTextureToObject(const std::string &actor_name, const rpc::MaterialParameter &parameter, const rpc::TextureColor &Texture)
Definition World.cpp:316
std::vector< geom::BoundingBox > GetLevelBBs(uint8_t queried_tag) const
返回该等级中所有元素的BBs。 边界框可以描述物体在三维空间中的大致范围,通过获取所有元素的边界框, 可以用于碰撞检测、空间划分、可视化展示等多种与空间位置和范围相关的操作,这里返回的是指定标签(que...
Definition World.cpp:238
void LoadLevelLayer(rpc::MapLayer map_layers) const
加载指定的地图层级(由rpc::MapLayer类型参数指定)到模拟世界中。 可以根据需要选择性地加载地图的不同部分或者功能层,比如只加载交通道路层或者建筑物层等,具体取决于MapLayer的定义。
Definition World.cpp:28
SharedPtr< BlueprintLibrary > GetBlueprintLibrary() const
返回当前世界中可用的蓝图列表。 这个蓝图可以用来在世界中生成参与者(actor)。 通过这些蓝图可以在世界中生成相应的实体对象,调用者可以基于返回的蓝图库来选择合适的蓝图创建所需的参与者。
Definition World.cpp:36
void EnableEnvironmentObjects(std::vector< uint64_t > env_objects_ids, bool enable) const
启用或禁用环境物体,根据传入的环境物体ID列表(env_objects_ids)以及布尔值参数enable来操作, 可以动态地控制某些环境物体在模拟世界中是否显示或者参与物理模拟等,实现灵活的场景配置。
Definition World.cpp:247
void FreezeAllTrafficLights(bool frozen)
冻结或解冻所有交通信号灯,通过传入的布尔值参数来控制, 冻结时交通信号灯状态将保持不变,常用于暂停交通灯变化来观察特定交通场景或者进行调试等情况。
Definition World.cpp:234
boost::optional< rpc::LabelledPoint > GroundProjection(geom::Location location, float search_distance=10000.0) const
Definition World.cpp:264
WorldSnapshot GetSnapshot() const
返回当前世界的快照。 快照(Snapshot)包含了模拟世界在某一时刻的整体状态信息,例如所有参与者的位置、状态,天气情况等, 可以用于记录、对比不同时刻的世界状态或者进行一些基于特定时刻状态的分析和操...
Definition World.cpp:102
void ResetAllTrafficLights()
根据OpenDRIVE标志ID获取对应的交通灯的智能指针。 重置所有交通信号灯的状态,可能将其恢复到初始默认状态或者按照一定规则重新初始化状态, 用于在模拟过程中重新调整交通灯的整体情况,比如模拟交通拥...
Definition World.cpp:226
rpc::WeatherParameters GetWeather() const
检索当前世界上活动的天气参数。 可以获取到当前模拟世界中的天气状况相关的参数,例如晴天、雨天、雾天等天气类型对应的具体参数设置, 像光照强度、雾气浓度等,用于呈现不同天气下的模拟场景效果。
Definition World.cpp:86
SharedPtr< Actor > GetSpectator() const
返回为旁观者的参与者.
Definition World.cpp:48
rpc::VehicleLightStateList GetVehiclesLightStates() const
返回一个元素对列表, 其中第一个元素是车辆ID,第二个元素是灯光状态.
Definition World.cpp:40
SharedPtr< Actor > GetActor(ActorId id) const
根据id查找actor,如果没有找到则返回nullptr。 通过传入的ActorId参数,在当前模拟世界中查找对应的参与者对象,方便快速定位特定的实体, 比如查找某一辆特定编号的车辆或者某个行人等。
Definition World.cpp:106
SharedPtr< Actor > GetTrafficLight(const Landmark &landmark) const
根据提供的地标(Landmark)获取对应的交通信号灯(TrafficLight)的智能指针。 与获取交通标志类似,通过地标来查找对应的交通信号灯对象,以便获取信号灯状态、控制信号灯等相关操作,模拟交通...
Definition World.cpp:195
void SetPedestriansCrossFactor(float percentage)
设置一个代理表示在它的路径中穿过道路的概率。 0.0f表示行人不得过马路 0.5f表示50的行人可以过马路 1.0f表示所有行人在需要时都可以过马路 用于控制模拟世界中行人过马路行为的概率,通过调整这个...
Definition World.cpp:171
uint64_t Tick(time_duration timeout)
通知模拟器继续进行下一个节拍(仅对同步模式有效)。 在同步模拟模式下,通过调用这个函数来告知模拟器可以推进到下一个时间步了, 并且返回这个调用开始的帧的id,用于跟踪和记录模拟进度在时间轴上的位置。
Definition World.cpp:165
detail::EpisodeProxy _episode
Definition World.h:339
SharedPtr< Actor > TrySpawnActor(const ActorBlueprint &blueprint, const geom::Transform &transform, Actor *parent=nullptr, rpc::AttachmentType attachment_type=rpc::AttachmentType::Rigid, const std::string &socket_name="") noexcept
和SpawnActor一样,但失败时返回nullptr而不抛出异常。 与SpawnActor功能类似,不过在创建参与者失败的情况下,不会抛出异常打断程序流程,而是安静地返回nullptr, 这样在一些需...
Definition World.cpp:136
boost::optional< rpc::LabelledPoint > ProjectPoint(geom::Location location, geom::Vector3D direction, float search_distance=10000.f) const
GetEnvironmentObjects获取指定标签的环境物体。 EnableEnvironmentObjects启用或禁用环境物体。
Definition World.cpp:253
WorldSnapshot WaitForTick(time_duration timeout) const
阻塞调用线程,直到接收到一个世界刻。 世界刻(Tick)可以理解为模拟世界的时间推进的一个基本单位,通过阻塞等待一个世界刻, 可以确保在获取后续操作所需的最新世界状态时,是基于已经更新到下一个时间步的情...
Definition World.cpp:150
std::vector< SharedPtr< Actor > > GetTrafficLightsInJunction(const road::JuncId junc_id) const
Definition World.cpp:298
void SetIMUISensorGravity(float NewIMUISensorGravity)
设置用于IMUISensor加速度计计算的重力值。 允许外部根据实际模拟需求,调整IMUI传感器加速度计计算所使用的重力值,改变模拟物理环境的相关参数。
Definition World.cpp:98
void ApplyTexturesToObject(const std::string &actor_name, const rpc::TextureColor &diffuse_texture, const rpc::TextureFloatColor &emissive_texture, const rpc::TextureFloatColor &normal_texture, const rpc::TextureFloatColor &ao_roughness_metallic_emissive_texture)
Definition World.cpp:349
std::vector< std::string > GetNamesOfAllObjects() const
Definition World.cpp:344
uint64_t ApplySettings(const rpc::EpisodeSettings &settings, time_duration timeout)
Definition World.cpp:56
boost::optional< geom::Location > GetRandomLocationFromNavigation() const
从行人导航网格获得一个随机位置 在模拟行人行为等场景时,可以利用这个函数获取一个在行人导航范围内的随机地点, 比如用于生成行人的初始位置或者随机行走的目标位置等。
Definition World.cpp:44
std::vector< rpc::EnvironmentObject > GetEnvironmentObjects(uint8_t queried_tag) const
获取指定标签(queried_tag)的环境物体(EnvironmentObject)列表。 环境物体可以包括路边的障碍物、建筑物等各种非参与者但影响模拟场景的物体,通过获取它们可以进行相关的查询、操作...
Definition World.cpp:242
SharedPtr< Map > GetMap() const
返回描述这个世界的地图。 返回的是一个智能指针指向的Map对象,该Map对象包含了模拟世界中的地理信息、道路布局等地图相关的数据结构, 供外部调用者进一步查询和操作地图相关的功能。
Definition World.cpp:24
std::vector< rpc::LabelledPoint > CastRay(geom::Location start_location, geom::Location end_location) const
Definition World.cpp:271
std::vector< SharedPtr< Actor > > GetTrafficLightsFromWaypoint(const Waypoint &waypoint, double distance) const
Definition World.cpp:277
void ApplyColorTextureToObjects(const std::vector< std::string > &objects_names, const rpc::MaterialParameter &parameter, const rpc::TextureColor &Texture)
Definition World.h:302
void ApplyFloatColorTextureToObjects(const std::vector< std::string > &objects_names, const rpc::MaterialParameter &parameter, const rpc::TextureFloatColor &Texture)
Definition World.cpp:337
void SetPedestriansSeed(unsigned int seed)
在行人模块中将 seed 设置为使用随机数。 设置行人相关随机行为的种子值,相同的种子值可以使得行人模块在每次模拟时产生相同的随机行为序列,便于复现和对比不同模拟情况, 或者设置不同的种子值来获取真正的...
Definition World.cpp:175
void ApplyTexturesToObjects(const std::vector< std::string > &objects_names, const rpc::TextureColor &diffuse_texture, const rpc::TextureFloatColor &emissive_texture, const rpc::TextureFloatColor &normal_texture, const rpc::TextureFloatColor &ao_roughness_metallic_emissive_texture)
Definition World.cpp:388
SharedPtr< LightManager > GetLightManager() const
获取交通灯管理器(LightManager)的智能指针。 交通灯管理器可以用于统一管理和控制模拟世界中所有交通灯的各种操作,比如批量设置状态、定时切换等,提供更便捷的交通灯管理功能。
Definition World.cpp:230
SharedPtr< Actor > SpawnActor(const ActorBlueprint &blueprint, const geom::Transform &transform, Actor *parent=nullptr, rpc::AttachmentType attachment_type=rpc::AttachmentType::Rigid, const std::string &socket_name="")
根据 转换中提供的 蓝图,在世界中生成一个参与者(actor)。 如果提供了 父类,则参与者(actor)被附加到 父类。 基于给定的ActorBlueprint(参与者创建蓝图)以及指定的几何变换(g...
Definition World.cpp:126
SharedPtr< Actor > GetTrafficSign(const Landmark &landmark) const
根据提供的地标(Landmark)获取对应的交通标志(TrafficSign)的智能指针。 地标通常代表地图中的特定位置,通过它可以定位和获取对应的交通标志对象,用于查询交通规则相关的指示信息等。
Definition World.cpp:179
void ApplyFloatColorTextureToObject(const std::string &actor_name, const rpc::MaterialParameter &parameter, const rpc::TextureFloatColor &Texture)
Definition World.cpp:330
void RemoveOnTick(size_t callback_id)
Remove a callback registered with OnTick.
Definition World.cpp:161
SharedPtr< Actor > GetTrafficLightFromOpenDRIVE(const road::SignId &sign_id) const
根据OpenDRIVE标志ID获取对应的交通灯的智能指针。 OpenDRIVE是一种用于描述道路网络等信息的标准格式,利用其中的标志ID可以准确地在模拟世界中找到对应的交通灯对象,
Definition World.cpp:211
size_t OnTick(std::function< void(WorldSnapshot)> callback)
注册一个 回调函数,在每次接收到世界刻时调用。 可以注册一个自定义的函数,在模拟世界每推进一个时间步(即接收到世界刻)时被自动调用, 便于在每个时间步执行一些自定义的逻辑,比如更新统计信息、检查特定条件...
Definition World.cpp:157
float GetIMUISensorGravity() const
获取用于IMUI传感器加速度计计算的重力值。 在涉及到模拟车辆、机器人等带有IMUI传感器的实体时,需要获取这个重力值用于传感器相关物理量的准确计算, 以符合真实物理世界的规律或者模拟特定的物理环境。
Definition World.cpp:94
void SetWeather(const rpc::WeatherParameters &weather)
在模拟场景中改变天气。 通过传入指定的rpc::WeatherParameters参数,来设置模拟世界的天气情况,实现模拟不同天气环境下的交通、行人等行为场景。
Definition World.cpp:90
rpc::EpisodeSettings GetSettings() const
获取当前模拟世界的设置信息,比如时间步长、同步模式等相关的参数配置情况, 返回的rpc::EpisodeSettings对象包含了这些详细的设置内容,供外部查询和可能的修改参考。
Definition World.cpp:52
void UnloadLevelLayer(rpc::MapLayer map_layers) const
卸载指定的地图层级(由rpc::MapLayer类型参数指定)。 与LoadLevelLayer相对应,用于移除已经加载的地图部分,释放相关资源或者改变模拟世界的显示内容等。
Definition World.cpp:32
SharedPtrType Lock() const
与 TryLock 相同,但永远不会返回 nullptr。
const std::set< ContId > & GetControllers() const
static bool IsTrafficLight(const std::string &type)
uint32_t GetWidth() const
Definition Texture.h:29
uint32_t GetHeight() const
Definition Texture.h:33
Positive time duration up to milliseconds resolution.
Definition Time.h:19
static time_duration milliseconds(size_t timeout)
Definition Time.h:26
int32_t JuncId
Definition RoadTypes.h:23
std::string ContId
Definition RoadTypes.h:41
std::string SignId
Definition RoadTypes.h:35
std::vector< std::pair< ActorId, VehicleLightState::flag_type > > VehicleLightStateList
carla::ActorId ActorId
参与者的智能指针类型
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
static void log_warning(Args &&... args)
Definition Logging.h:101
boost::shared_ptr< T > SharedPtr
使用这个SharedPtr(boost::shared_ptr)以保持与boost::python的兼容性, 但未来如果可能的话,我们希望能为std::shared_ptr制作一个Python适配器。
Definition Memory.h:19
包含CARLA客户端相关类和函数的命名空间。