CARLA
 
载入中...
搜索中...
未找到
ROS2.h
浏览该文件的文档.
1// Copyright (c) 2023 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
9#include "carla/Buffer.h" // 引入 Carla 缓冲区头文件
10#include "carla/BufferView.h" // 引入 Carla 缓冲区视图头文件
11#include "carla/geom/Transform.h" // 引入 Carla 变换几何头文件
12#include "carla/ros2/ROS2CallbackData.h" // 引入 ROS2 回调数据头文件
13#include "carla/streaming/detail/Types.h" // 引入 Carla 流媒体类型头文件
14
15#include <unordered_set> // 引入无序集合头文件
16#include <unordered_map> // 引入无序映射头文件
17#include <memory> // 引入智能指针头文件
18#include <vector> // 引入向量头文件
19
20// 前置声明
21class AActor; // 声明 AActor 类
22namespace carla {
23 namespace geom {
24 class GeoLocation; // 声明 GeoLocation 类
25 class Vector3D; // 声明 Vector3D 类
26 }
27 namespace sensor {
28 namespace data {
29 struct DVSEvent; // 声明 DVSEvent 结构
30 class LidarData; // 声明 LidarData 类
31 class SemanticLidarData; // 声明 SemanticLidarData 类
32 class RadarData; // 声明 RadarData 类
33 }
34 }
35}
36
37namespace carla {
38namespace ros2 {
39
40 class CarlaPublisher; // 声明 CarlaPublisher 类
41 class CarlaTransformPublisher; // 声明 CarlaTransformPublisher 类
42 class CarlaClockPublisher; // 声明 CarlaClockPublisher 类
43 class CarlaEgoVehicleControlSubscriber; // 声明 CarlaEgoVehicleControlSubscriber 类
44
45class ROS2
46{
47 public:
48
49 // 删除单例的复制构造函数
50 ROS2(const ROS2& obj) = delete; // 禁止拷贝构造函数
51 static std::shared_ptr<ROS2> GetInstance() { // 获取单例实例
52 if (!_instance) // 如果实例不存在
53 _instance = std::shared_ptr<ROS2>(new ROS2); // 创建新的实例
54 return _instance; // 返回实例
55 }
56
57 // 通用函数
58 void Enable(bool enable); // 启用或禁用
59 void Shutdown(); // 关闭功能
60 bool IsEnabled() { return _enabled; } // 检查是否启用
61 void SetFrame(uint64_t frame); // 设置帧数
62 void SetTimestamp(double timestamp); // 设置时间戳
63
64 // ros_name 管理函数
65 void AddActorRosName(void *actor, std::string ros_name); // 添加 Actor 的 ROS 名称
66 void AddActorParentRosName(void *actor, void* parent); // 添加 Actor 的父级 ROS 名称
67 void RemoveActorRosName(void *actor); // 移除 Actor 的 ROS 名称
68 void UpdateActorRosName(void *actor, std::string ros_name); // 更新 Actor 的 ROS 名称
69 std::string GetActorRosName(void *actor); // 获取 Actor 的 ROS 名称
70 std::string GetActorParentRosName(void *actor); // 获取 Actor 的父级 ROS 名称
71
72 // 回调函数
73 void AddActorCallback(void* actor, std::string ros_name, ActorCallback callback); // 添加 Actor 回调函数
74 void RemoveActorCallback(void* actor); // 移除 Actor 回调函数
75
76 // 允许流发布
77 void EnableStream(carla::streaming::detail::stream_id_type id) { _publish_stream.insert(id); } // 启用流发布
78 bool IsStreamEnabled(carla::streaming::detail::stream_id_type id) { return _publish_stream.count(id) > 0; } // 检查流是否启用
79 void ResetStreams() { _publish_stream.clear(); } // 重置流
80
81 // 接收要发布的数据
83 uint64_t sensor_type,
85 const carla::geom::Transform sensor_transform,
86 int W, int H, float Fov,
87 const carla::SharedBufferView buffer,
88 void *actor = nullptr); // 处理来自相机的数据
90 uint64_t sensor_type,
92 const carla::geom::Transform sensor_transform,
93 const carla::geom::GeoLocation &data,
94 void *actor = nullptr); // 处理来自 GNSS 的数据
96 uint64_t sensor_type,
98 const carla::geom::Transform sensor_transform,
99 carla::geom::Vector3D accelerometer,
100 carla::geom::Vector3D gyroscope,
101 float compass,
102 void *actor = nullptr); // 处理来自 IMU 的数据
104 uint64_t sensor_type,
106 const carla::geom::Transform sensor_transform,
107 const carla::SharedBufferView buffer,
108 int W, int H, float Fov,
109 void *actor = nullptr); // 处理来自 DVS 的数据
111 uint64_t sensor_type,
113 const carla::geom::Transform sensor_transform,
114 carla::sensor::data::LidarData &data,
115 void *actor = nullptr); // 处理来自激光雷达的数据
117 uint64_t sensor_type,
119 const carla::geom::Transform sensor_transform,
121 void *actor = nullptr); // 处理来自语义激光雷达的数据
123 uint64_t sensor_type,
125 const carla::geom::Transform sensor_transform,
127 void *actor = nullptr); // 处理来自雷达的数据
129 uint64_t sensor_type,
131 const carla::geom::Transform sensor_transform,
132 AActor *first_actor,
133 AActor *second_actor,
134 float distance,
135 void *actor = nullptr); // 处理来自障碍物检测的数据
136 void ProcessDataFromCollisionSensor( // 处理来自碰撞传感器的数据
137 uint64_t sensor_type, // 传感器类型
139 const carla::geom::Transform sensor_transform, // 传感器变换
140 uint32_t other_actor, // 其他 Actor 的 ID
141 carla::geom::Vector3D impulse, // 冲击力
142 void* actor); // 当前 Actor
143
144 private: // 私有成员
145 std::pair<std::shared_ptr<CarlaPublisher>, std::shared_ptr<CarlaTransformPublisher>> GetOrCreateSensor(int type, carla::streaming::detail::stream_id_type id, void* actor); // 获取或创建传感器
146
147// 单例
148ROS2() {}; // 构造函数
149
150static std::shared_ptr<ROS2> _instance; // 单例实例
151
152bool _enabled { false }; // 启用状态
153uint64_t _frame { 0 }; // 帧数
154int32_t _seconds { 0 }; // 秒数
155uint32_t _nanoseconds { 0 }; // 纳秒数
156std::unordered_map<void *, std::string> _actor_ros_name; // Actor 的 ROS 名称映射
157std::unordered_map<void *, std::vector<void*> > _actor_parent_ros_name; // Actor 的父级 ROS 名称映射
158std::shared_ptr<CarlaEgoVehicleControlSubscriber> _controller; // 控制器实例
159std::shared_ptr<CarlaClockPublisher> _clock_publisher; // 时钟发布者实例
160std::unordered_map<void *, std::shared_ptr<CarlaPublisher>> _publishers; // 发布者映射
161std::unordered_map<void *, std::shared_ptr<CarlaTransformPublisher>> _transforms; // 变换发布者映射
162std::unordered_set<carla::streaming::detail::stream_id_type> _publish_stream; // 发布流集合
163std::unordered_map<void *, ActorCallback> _actor_callbacks; // Actor 回调映射
164};
165
166} // namespace ros2
167} // namespace carla
包含与Carla流处理相关的底层细节的头文件。
std::unordered_map< void *, std::shared_ptr< CarlaTransformPublisher > > _transforms
Definition ROS2.h:161
void ProcessDataFromRadar(uint64_t sensor_type, carla::streaming::detail::stream_id_type stream_id, const carla::geom::Transform sensor_transform, const carla::sensor::data::RadarData &data, void *actor=nullptr)
Definition ROS2.cpp:791
void ProcessDataFromDVS(uint64_t sensor_type, carla::streaming::detail::stream_id_type stream_id, const carla::geom::Transform sensor_transform, const carla::SharedBufferView buffer, int W, int H, float Fov, void *actor=nullptr)
Definition ROS2.cpp:716
static std::shared_ptr< ROS2 > _instance
Definition ROS2.h:150
std::string GetActorParentRosName(void *actor)
Definition ROS2.cpp:157
static std::shared_ptr< ROS2 > GetInstance()
Definition ROS2.h:51
std::unordered_set< carla::streaming::detail::stream_id_type > _publish_stream
Definition ROS2.h:162
void AddActorCallback(void *actor, std::string ros_name, ActorCallback callback)
Definition ROS2.cpp:184
void Enable(bool enable)
Definition ROS2.cpp:77
void RemoveActorRosName(void *actor)
Definition ROS2.cpp:133
void ProcessDataFromIMU(uint64_t sensor_type, carla::streaming::detail::stream_id_type stream_id, const carla::geom::Transform sensor_transform, carla::geom::Vector3D accelerometer, carla::geom::Vector3D gyroscope, float compass, void *actor=nullptr)
Definition ROS2.cpp:694
void Shutdown()
Definition ROS2.cpp:853
std::string GetActorRosName(void *actor)
Definition ROS2.cpp:148
void ProcessDataFromObstacleDetection(uint64_t sensor_type, carla::streaming::detail::stream_id_type stream_id, const carla::geom::Transform sensor_transform, AActor *first_actor, AActor *second_actor, float distance, void *actor=nullptr)
Definition ROS2.cpp:814
void ProcessDataFromCamera(uint64_t sensor_type, carla::streaming::detail::stream_id_type stream_id, const carla::geom::Transform sensor_transform, int W, int H, float Fov, const carla::SharedBufferView buffer, void *actor=nullptr)
Definition ROS2.cpp:489
std::unordered_map< void *, ActorCallback > _actor_callbacks
Definition ROS2.h:163
ROS2(const ROS2 &obj)=delete
void ProcessDataFromSemanticLidar(uint64_t sensor_type, carla::streaming::detail::stream_id_type stream_id, const carla::geom::Transform sensor_transform, carla::sensor::data::SemanticLidarData &data, void *actor=nullptr)
Definition ROS2.cpp:768
std::shared_ptr< CarlaClockPublisher > _clock_publisher
Definition ROS2.h:159
void ProcessDataFromCollisionSensor(uint64_t sensor_type, carla::streaming::detail::stream_id_type stream_id, const carla::geom::Transform sensor_transform, uint32_t other_actor, carla::geom::Vector3D impulse, void *actor)
Definition ROS2.cpp:826
std::shared_ptr< CarlaEgoVehicleControlSubscriber > _controller
Definition ROS2.h:158
void AddActorRosName(void *actor, std::string ros_name)
Definition ROS2.cpp:120
bool IsEnabled()
Definition ROS2.h:60
bool IsStreamEnabled(carla::streaming::detail::stream_id_type id)
Definition ROS2.h:78
void UpdateActorRosName(void *actor, std::string ros_name)
Definition ROS2.cpp:141
uint32_t _nanoseconds
Definition ROS2.h:155
std::unordered_map< void *, std::vector< void * > > _actor_parent_ros_name
Definition ROS2.h:157
void AddActorParentRosName(void *actor, void *parent)
Definition ROS2.cpp:124
void SetTimestamp(double timestamp)
Definition ROS2.cpp:109
void RemoveActorCallback(void *actor)
Definition ROS2.cpp:192
void ResetStreams()
Definition ROS2.h:79
void ProcessDataFromLidar(uint64_t sensor_type, carla::streaming::detail::stream_id_type stream_id, const carla::geom::Transform sensor_transform, carla::sensor::data::LidarData &data, void *actor=nullptr)
Definition ROS2.cpp:746
void SetFrame(uint64_t frame)
Definition ROS2.cpp:90
int32_t _seconds
Definition ROS2.h:154
std::pair< std::shared_ptr< CarlaPublisher >, std::shared_ptr< CarlaTransformPublisher > > GetOrCreateSensor(int type, carla::streaming::detail::stream_id_type id, void *actor)
Definition ROS2.cpp:197
void EnableStream(carla::streaming::detail::stream_id_type id)
Definition ROS2.h:77
std::unordered_map< void *, std::string > _actor_ros_name
Definition ROS2.h:156
std::unordered_map< void *, std::shared_ptr< CarlaPublisher > > _publishers
Definition ROS2.h:160
uint64_t _frame
Definition ROS2.h:153
void ProcessDataFromGNSS(uint64_t sensor_type, carla::streaming::detail::stream_id_type stream_id, const carla::geom::Transform sensor_transform, const carla::geom::GeoLocation &data, void *actor=nullptr)
Definition ROS2.cpp:674
std::function< void(void *actor, ROS2CallbackData data)> ActorCallback
geom::Vector3D Vector3D
uint32_t stream_id_type
流ID的类型定义。
Definition Types.h:33
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
std::shared_ptr< BufferView > SharedBufferView
Definition BufferView.h:163