8#include <ad/map/access/Operation.hpp>
9#include <ad/rss/state/ProperResponse.hpp>
10#include <ad/rss/world/Velocity.hpp>
37 log_error(
GetDisplayId(),
": registering of the actor constellation callback has to be done before start listening. Register has no effect.");
54 auto vehicle = boost::dynamic_pointer_cast<carla::client::Vehicle>(
GetParent());
55 if (vehicle ==
nullptr) {
60 float max_steer_angle_deg = 0.f;
61 for (
auto const &wheel : vehicle->GetPhysicsControl().GetWheels()) {
62 max_steer_angle_deg = std::max(max_steer_angle_deg, wheel.max_steer_angle);
64 auto max_steering_angle = max_steer_angle_deg *
static_cast<float>(M_PI) / 180.0f;
68 std::string
const open_drive_content = map->GetOpenDrive();
70 auto mapInitializationResult = ::ad::map::access::initFromOpenDriveContent(
71 open_drive_content, 0.2, ::ad::map::intersection::IntersectionType::TrafficLight,
72 ::ad::map::landmark::TrafficLightType::LEFT_STRAIGHT_RED_YELLOW_GREEN);
74 if (!mapInitializationResult) {
82 _rss_check = std::make_shared<::carla::rss::RssCheck>(max_steering_angle);
87 auto self = boost::static_pointer_cast<RssSensor>(shared_from_this());
92 [ cb = std::move(callback), weak_self =
WeakPtr<RssSensor>(self) ](
const auto &snapshot) {
93 auto self = weak_self.lock();
94 if (self !=
nullptr) {
95 self->TickRssSensor(snapshot.GetTimestamp(), cb);
111 _rss_check->GetLogger()->info(
"RssSensor stopping");
119 _rss_check->GetLogger()->info(
"RssSensor delete checker");
123 if (map_initialization_counter_value == 0u) {
125 ::ad::map::access::cleanup();
136 if (log_level < spdlog::level::n_levels) {
137 _rss_check->SetLogLevel(spdlog::level::level_enum(log_level));
147 if (map_log_level < spdlog::level::n_levels) {
148 _rss_check->SetMapLogLevel(spdlog::level::level_enum(map_log_level));
156 return default_vehicle_dynamics;
160 log_error(
GetDisplayId(),
": Actor constellation callback registered. GetEgoVehicleDynamics has no effect.");
161 return default_vehicle_dynamics;
164 return _rss_check->GetDefaultActorConstellationCallbackEgoVehicleDynamics();
174 log_error(
GetDisplayId(),
": Actor constellation callback registered. SetEgoVehicleDynamics has no effect.");
178 _rss_check->SetDefaultActorConstellationCallbackEgoVehicleDynamics(ego_dynamics);
185 return default_vehicle_dynamics;
189 log_error(
GetDisplayId(),
": Actor constellation callback registered. GetOtherVehicleDynamics has no effect.");
190 return default_vehicle_dynamics;
193 return _rss_check->GetDefaultActorConstellationCallbackOtherVehicleDynamics();
203 log_error(
GetDisplayId(),
": Actor constellation callback registered. SetOtherVehicleDynamics has no effect.");
207 _rss_check->SetDefaultActorConstellationCallbackOtherVehicleDynamics(other_vehicle_dynamics);
214 return default_pedestrian_dynamics;
218 log_error(
GetDisplayId(),
": Actor constellation callback registered. GetPedestrianDynamics has no effect.");
219 return default_pedestrian_dynamics;
222 return _rss_check->GetDefaultActorConstellationCallbackPedestrianDynamics();
232 log_error(
GetDisplayId(),
": Actor constellation callback registered. SetPedestrianDynamics has no effect.");
236 _rss_check->SetDefaultActorConstellationCallbackPedestrianDynamics(pedestrian_dynamics);
243 return default_road_boundaries_mode;
255 _rss_check->SetRoadBoundariesMode(road_boundaries_mode);
264 _rss_check->AppendRoutingTarget(routing_target);
270 return std::vector<::carla::geom::Transform>();
306 if ( settings.synchronous_mode ) {
307 _rss_check->GetLogger()->info(
"RssSensor[{}] sync-tick", timestamp.
frame);
312 _rss_check->GetLogger()->info(
"RssSensor[{}] async-tick", timestamp.
frame);
317 _rss_check->GetLogger()->info(
"RssSensor[{}] tick dropped", timestamp.
frame);
326 double const time_since_epoch_check_start_ms =
327 std::chrono::duration<double, std::milli>(std::chrono::system_clock::now().time_since_epoch()).count();
336 ::ad::rss::state::ProperResponse response;
337 ::ad::rss::state::RssStateSnapshot rss_state_snapshot;
338 ::ad::rss::situation::SituationSnapshot situation_snapshot;
339 ::ad::rss::world::WorldModel world_model;
342 auto const result =
_rss_check->CheckObjects(timestamp, actors,
GetParent(), response, rss_state_snapshot,
343 situation_snapshot, world_model, ego_dynamics_on_route);
346 double const time_since_epoch_check_end_ms =
347 std::chrono::duration<double, std::milli>(std::chrono::system_clock::now().time_since_epoch()).count();
349 auto const delta_time_ms = time_since_epoch_check_end_ms - time_since_epoch_check_start_ms;
351 _rss_check->GetLogger()->debug(
"RssSensor[{}] response: S:{}->E:{} DeltaT:{}", timestamp.
frame,
352 time_since_epoch_check_start_ms, time_since_epoch_check_end_ms,
363 agv_time += run_time;
367 _rss_check->GetLogger()->info(
"RssSensor[{}] runtime {} avg {}", timestamp.
frame, delta_time_ms, agv_time);
372 response, rss_state_snapshot, situation_snapshot, world_model,
373 ego_dynamics_on_route));
374 }
catch (
const std::exception &e) {
376 _rss_check->GetLogger()->error(
"RssSensor[{}] tick exception", timestamp.
frame);
380 _rss_check->GetLogger()->error(
"RssSensor[{}] tick exception", timestamp.
frame);
#define DEBUG_ASSERT(predicate)
用于初始化 Actor 类。只有 ActorFactory 可以创建此对象,因此只有 ActorFactory 可以创建 Actor。
geom::Transform GetTransform() const
返回行为体的当前变换(位置和方向)。
std::function< void(SharedPtr< sensor::SensorData >)> CallbackFunctionType
回调函数的类型别名,用于接收传感器数据。
std::size_t frame
自模拟器启动以来经过的帧数。
double elapsed_seconds
模拟自当前情境开始以来经过的秒数。
SharedPtr< ActorList > GetActors() const
返回一个包含当前世界上所有存在的参与者(actor)的列表。 获取整个模拟世界中所有参与者的集合,便于进行批量操作、统计或者遍历所有实体执行某些通用的操作等。
SharedPtr< Map > GetMap() const
返回描述这个世界的地图。 返回的是一个智能指针指向的Map对象,该Map对象包含了模拟世界中的地理信息、道路布局等地图相关的数据结构, 供外部调用者进一步查询和操作地图相关的功能。
rpc::EpisodeSettings GetSettings() const
获取当前模拟世界的设置信息,比如时间步长、同步模式等相关的参数配置情况, 返回的rpc::EpisodeSettings对象包含了这些详细的设置内容,供外部查询和可能的修改参考。
EpisodeProxy & GetEpisode()
SharedPtr< Actor > GetParent() const
const std::string & GetDisplayId() const
SharedPtrType Lock() const
与 TryLock 相同,但永远不会返回 nullptr。
void throw_exception(const std::exception &e)
static void log_error(Args &&... args)
boost::shared_ptr< T > SharedPtr
使用这个SharedPtr(boost::shared_ptr)以保持与boost::python的兼容性, 但未来如果可能的话,我们希望能为std::shared_ptr制作一个Python适配器。
boost::weak_ptr< T > WeakPtr
类似于SharedPtr,但提供对boost::weak_ptr的别名,用于弱引用
static void log_debug(Args &&... args)