CARLA
 
载入中...
搜索中...
未找到
LibCarla/source/carla/rss/RssSensor.h
浏览该文件的文档.
1// Copyright (c) 2019-2020 Intel Corporation
2//
3// This work is licensed under the terms of the MIT license.
4// For a copy, see <https://opensource.org/licenses/MIT>.
5
6#pragma once
7
8#include <atomic>
9#include <future>
10#include <list>
11#include <memory>
12#include <mutex>
13#include <vector>
14#include "carla/client/Sensor.h"
15
16namespace ad {
17// 命名空间ad的定义
18namespace rss {
19// 命名空间rss的定义,位于ad命名空间内
20namespace world {
21// 命名空间world的定义,位于rss命名空间内
22
23/// forward declaration of the RssDynamics struct
24struct RssDynamics;
25
26} // namespace world
27} // namespace rss
28} // namespace ad
29
30namespace carla {
31// carla命名空间的定义开始
32namespace rss {
33// rss命名空间的定义,位于carla命名空间内
34/// 前向声明 RoadBoundariesMode 枚举类
35enum class RoadBoundariesMode;
36/// 前向声明 RssCheck 类
37class RssCheck;
38/// 前向声明 ActorConstellationResult 结构体
39struct ActorConstellationResult;
40/// 前向声明 ActorConstellationData 结构体
41struct ActorConstellationData;
42} // namespace rss
43
44namespace client {
45
46/// 实现carla::client::Sensor接口的RSS传感器类
47/// 这个类是RssCheck类的代理
48class RssSensor : public Sensor {
49public:
50// 使用基类Sensor的构造函数
51 using Sensor::Sensor;
52// 定义一个函数类型,用于Actor星座(即周围物体的配置或分布)回调
53 // 该函数接收一个指向carla::rss::ActorConstellationData的智能指针,并返回一个carla::rss::ActorConstellationResult
56
57 /// @brief 构造函数
58 // 显式地使用ActorInitializer对象作为参数进行初始化 /// @brief constructor
59 explicit RssSensor(ActorInitializer init);
60
61 /// @brief 析构函数
62 // 用于RssSensor对象的清理工作
63 ~RssSensor();
64
65 /// 为每个待处理的测量中的每个行为体注册一个回调函数,以便决定RSS传感器相对于自我车辆与行为体星座的操作。
67
68 /// 注册一个回调函数,每次接收到新的测量数据时都会执行该函数。
69///
70/// @警告:如果对一个已经在监听的传感器调用此函数,则会窃取之前设置的回调函数的数据流。请注意,
71/// 模拟器中的多个Sensor实例(甚至在不同进程中)可能指向同一个传感器。
72 void Listen(CallbackFunctionType callback) override;
73
74 /// 停止监听新的测量数据。
75/// 注意:为了能够等待非活动状态的回调函数,全局解释器锁(GIL)必须被解锁。
76 void Stop() override;
77
78 /// 返回此Sensor实例当前是否正在监听模拟器中的相关传感器
79 bool IsListening() const override {
80 return _on_tick_register_id != 0u;
81 }
82
83 /// @brief 设置当前的日志级别
84 void SetLogLevel(const uint8_t &log_level);
85
86 /// @brief 设置当前的地图日志级别
87 void SetMapLogLevel(const uint8_t &map_log_level);
88
89 /// 返回当前自车(ego vehicle)所使用的动力学参数(@see also
90 /// RssCheck::GetEgoVehicleDynamics() 以获取更多信息)
91 const ::ad::rss::world::RssDynamics &GetEgoVehicleDynamics() const;
92 /// @brief 设置自车(ego vehicle)将要使用的动力学参数(@see
93 /// also RssCheck::SetEgoVehicleDynamics() 以获取更多信息)
94 void SetEgoVehicleDynamics(const ::ad::rss::world::RssDynamics &ego_dynamics);
95
96 /// 返回当前其他车辆所使用的动力学参数(@see RssCheck::GetOtherVehicleDynamics() 获取更多信息)
97 const ::ad::rss::world::RssDynamics &GetOtherVehicleDynamics() const;
98 /// @brief 设置其他车辆所使用的动力学参数(@see RssCheck::SetOtherVehicleDynamics() 获取更多信息)
99 void SetOtherVehicleDynamics(const ::ad::rss::world::RssDynamics &other_vehicle_dynamics);
100
101 /// 返回当前行人所使用的动力学参数(@see RssCheck::GetPedestrianDynamics() 获取更多信息)
102 const ::ad::rss::world::RssDynamics &GetPedestrianDynamics() const;
103 /// @brief 设置行人所使用的动力学参数(@see RssCheck::SetPedestrianDynamics() 获取更多信息)
104 void SetPedestrianDynamics(const ::ad::rss::world::RssDynamics &pedestrian_dynamics);
105
106 /// @returns 当前用于遵守道路边界的模式 (@see 同样参见 RssCheck::GetRoadBoundariesMode())
107 const ::carla::rss::RoadBoundariesMode &GetRoadBoundariesMode() const;
108 /// @brief 设置当前用于遵守道路边界的模式 (@see 同样参见 RssCheck::SetRoadBoundariesMode())
109 void SetRoadBoundariesMode(const ::carla::rss::RoadBoundariesMode &road_boundaries_mode);
110
111 /// @returns 当前的路由目标 (@see 同样参见 RssCheck::GetRoutingTargets())
112 const std::vector<::carla::geom::Transform> GetRoutingTargets() const;
113 /// @brief 向当前路由目标列表追加一个路由目标 (@see 同样参见 RssCheck::AppendRoutingTarget())
114 void AppendRoutingTarget(const ::carla::geom::Transform &routing_target);
115 /// @brief 重置当前的路由目标 (@see 同样参见 RssCheck::ResetRoutingTargets())
116 void ResetRoutingTargets();
117
118 /// @brief drop the current route (@see also RssCheck::DropRoute())
119 void DropRoute();
120
121private:
122 /// 传感器滴答(tick,可以理解为周期性触发的操作)回调函数,实际执行传感器相关逻辑的函数
123 /// the acutal sensor tick callback function
124 void TickRssSensor(const client::Timestamp &timestamp, CallbackFunctionType callback);
126 CallbackFunctionType callback);
127// 在相关线程加锁的情况下执行传感器滴答操作的函数,传入时间戳、演员列表和回调函数等参数
128 //// the object actually performing the RSS processing
129 std::shared_ptr<::carla::rss::RssCheck> _rss_check;
130 // 实际执行RSS处理的对象,是一个智能指针指向RssCheck类的实例,用于进行RSS相关的核心处理逻辑
131 /// the id got when registering for the on tick event
133/// 注册滴答事件(on tick event,周期性触发的事件)时获取的ID,用于标识该注册操作等相关用途
134 /// the mutex to protect the actual RSS processing and in case it takes too long to process ever frame
136/// 互斥锁,用于保护实际的RSS处理过程,防止在处理每帧数据耗时过长等情况下出现并发问题
137 /// the future for the async ticking thread
138 std::future<void> _tick_future;
139/// 用于异步滴答线程的未来(future,用于异步获取线程执行结果等操作)对象
140 /// some debug timings
141 std::list<double> _rss_check_timings;
142/// 一些用于调试的时间记录,可能记录RSS检查等操作的耗时情况等,以列表形式存储
143 //// the rss actor constellation callback function
145/ /RSS行为体星座(周围物体分布相关)回调函数,用于在相关场景下执行自定义的回调逻辑
146 /// reqired to store DropRoute() requests until next sensor tick
148 /// 用于存储DropRoute()请求的标志,直到下一次传感器滴答时处理,用于控制路由丢弃相关逻辑的标记
149 /// last processed frame
151/// 上一次处理的帧编号,用于记录处理进度等相关情况
152 static std::atomic_uint _global_map_initialization_counter_;
153};
154
155} // namespace client
156} // namespace carla
用于初始化 Actor 类。只有 ActorFactory 可以创建此对象,因此只有 ActorFactory 可以创建 Actor。
实现carla::client::Sensor接口的RSS传感器类 这个类是RssCheck类的代理
std::size_t _last_processed_frame
用于存储DropRoute()请求的标志,直到下一次传感器滴答时处理,用于控制路由丢弃相关逻辑的标记
std::future< void > _tick_future
互斥锁,用于保护实际的RSS处理过程,防止在处理每帧数据耗时过长等情况下出现并发问题
void ResetRoutingTargets()
重置当前的路由目标 (
std::size_t _on_tick_register_id
the id got when registering for the on tick event
RSS行为体星座(周围物体分布相关)回调函数,用于在相关场景下执行自定义的回调逻辑 bool _drop_route
reqired to store DropRoute() requests until next sensor tick
bool IsListening() const override
返回此Sensor实例当前是否正在监听模拟器中的相关传感器
const ::ad::rss::world::RssDynamics & GetOtherVehicleDynamics() const
返回当前其他车辆所使用的动力学参数(
void SetLogLevel(const uint8_t &log_level)
设置当前的日志级别
void SetEgoVehicleDynamics(const ::ad::rss::world::RssDynamics &ego_dynamics)
设置自车(ego vehicle)将要使用的动力学参数(
std::shared_ptr<::carla::rss::RssCheck > _rss_check
static std::atomic_uint _global_map_initialization_counter_
上一次处理的帧编号,用于记录处理进度等相关情况
void SetPedestrianDynamics(const ::ad::rss::world::RssDynamics &pedestrian_dynamics)
设置行人所使用的动力学参数(
void RegisterActorConstellationCallback(ActorConstellationCallbackFunctionType callback)
为每个待处理的测量中的每个行为体注册一个回调函数,以便决定RSS传感器相对于自我车辆与行为体星座的操作。
std::function<::carla::rss::ActorConstellationResult(carla::SharedPtr<::carla::rss::ActorConstellationData >)> ActorConstellationCallbackFunctionType
void Stop() override
停止监听新的测量数据。
const ::ad::rss::world::RssDynamics & GetPedestrianDynamics() const
返回当前行人所使用的动力学参数(
void TickRssSensor(const client::Timestamp &timestamp, CallbackFunctionType callback)
传感器滴答(tick,可以理解为周期性触发的操作)回调函数,实际执行传感器相关逻辑的函数
void SetOtherVehicleDynamics(const ::ad::rss::world::RssDynamics &other_vehicle_dynamics)
设置其他车辆所使用的动力学参数(
void SetMapLogLevel(const uint8_t &map_log_level)
设置当前的地图日志级别
std::list< double > _rss_check_timings
用于异步滴答线程的未来(future,用于异步获取线程执行结果等操作)对象
const ::ad::rss::world::RssDynamics & GetEgoVehicleDynamics() const
返回当前自车(ego vehicle)所使用的动力学参数(
RssSensor(ActorInitializer init)
构造函数
void AppendRoutingTarget(const ::carla::geom::Transform &routing_target)
向当前路由目标列表追加一个路由目标 (
std::mutex _processing_lock
注册滴答事件(on tick event,周期性触发的事件)时获取的ID,用于标识该注册操作等相关用途
void SetRoadBoundariesMode(const ::carla::rss::RoadBoundariesMode &road_boundaries_mode)
设置当前用于遵守道路边界的模式 (
ActorConstellationCallbackFunctionType _rss_actor_constellation_callback
一些用于调试的时间记录,可能记录RSS检查等操作的耗时情况等,以列表形式存储 / the rss actor constellation callback function
const ::carla::rss::RoadBoundariesMode & GetRoadBoundariesMode() const
const std::vector<::carla::geom::Transform > GetRoutingTargets() const
void Listen(CallbackFunctionType callback) override
注册一个回调函数,每次接收到新的测量数据时都会执行该函数。
void TickRssSensorThreadLocked(const client::Timestamp &timestamp, SharedPtr< carla::client::ActorList > actors, CallbackFunctionType callback)
传感器基类,继承自Actor类。
std::function< void(SharedPtr< sensor::SensorData >)> CallbackFunctionType
回调函数的类型别名,用于接收传感器数据。
RoadBoundariesMode
结构体定义道路边界的不同支持处理
Definition RssCheck.h:34
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
boost::shared_ptr< T > SharedPtr
使用这个SharedPtr(boost::shared_ptr)以保持与boost::python的兼容性, 但未来如果可能的话,我们希望能为std::shared_ptr制作一个Python适配器。
Definition Memory.h:19
包含CARLA客户端相关类和函数的命名空间。
Struct defining the configuration for RSS processing of a given actor
Definition RssCheck.h:112