30 #include <Eigen/Geometry> 38 #include "osi_common.pb.h" 39 #include "osi_detectedobject.pb.h" 40 #include "osi_hostvehicledata.pb.h" 41 #include "osi_object.pb.h" 42 #include "osi_sensordata.pb.h" 55 void from_osi_identifier(
const osi3::Identifier& osi_id,
int&
id);
75 const osi3::BaseMoving& osi_bm_gt,
79 void from_osi_mov_obj_type_classification(
const T& osi_mo, cloe::Object::Class& oc);
80 void from_osi_mov_obj_type_classification(
81 const osi3::MovingObject::Type& osi_ot,
82 const osi3::MovingObject::VehicleClassification::Type& osi_vt,
83 cloe::Object::Class& oc);
85 void from_osi_detected_moving_object_alt(
const osi3::DetectedMovingObject& osi_mo,
88 void from_osi_boundary_points(
const osi3::LaneBoundary& osi_lb,
cloe::LaneBoundary& lb);
90 void transform_ego_coord_from_osi_data(
const Eigen::Vector3d& dimensions_gt,
cloe::Object& obj);
99 const Eigen::Vector3d& dimensions_gt,
102 Eigen::Isometry3d osi_position_orientation_to_pose_alt(
const osi3::BaseMoving& base,
103 const osi3::BaseMoving& base_gt);
106 const osi3::MovingObject::VehicleAttributes& osi_va);
112 enum class SensorMockTarget { MountingPosition, DetectedMovingObject, DetectedLaneBoundary };
125 {SensorMockLevel::OverwriteNone,
"overwrite_none"},
126 {SensorMockLevel::InterpolateMissing,
"interpolate_missing"},
127 {SensorMockLevel::OverwriteAll,
"overwrite_all"},
138 SensorMockConf() =
default;
140 virtual ~SensorMockConf() noexcept =
default;
142 std::map<Target, Level> level = {{Target::MountingPosition, Level::OverwriteNone},
143 {Target::DetectedMovingObject, Level::OverwriteNone},
144 {Target::DetectedLaneBoundary, Level::OverwriteNone}};
146 CONFABLE_SCHEMA(SensorMockConf) {
149 {
"mounting_position",
cloe::Schema(&level[Target::MountingPosition],
"mock level for sensor mounting position")},
150 {
"detected_moving_objects",
cloe::Schema(&level[Target::DetectedMovingObject],
"mock level for detected moving objects")},
151 {
"detected_lane_boundaries",
cloe::Schema(&level[Target::DetectedLaneBoundary],
"mock level for detected lane boundaries")},
156 void to_json(cloe::Json& j)
const override {
157 j[
"mounting_position"] = level.at(SensorMockTarget::MountingPosition);
158 j[
"detected_moving_objects"] = level.at(SensorMockTarget::DetectedMovingObject);
159 j[
"detected_lane_boundaries"] = level.at(SensorMockTarget::DetectedLaneBoundary);
174 OsiOmniSensor(std::unique_ptr<OsiTransceiver>&& osi_transceiver, uint64_t owner_id)
175 : osi_comm_(
std::move(osi_transceiver)), owner_id_(owner_id) {
176 ground_truth_ = std::make_unique<OsiGroundTruth>();
186 : osi_comm_(osi_transceiver), owner_id_(owner_id) {
187 ground_truth_ = std::make_unique<OsiGroundTruth>();
199 virtual void process(
const osi3::Timestamp& timestamp);
207 virtual void process(osi3::SensorData* osi_sd,
cloe::Duration& sim_time);
214 virtual void process(
const osi3::SensorView& osi_sv);
222 virtual void process(
const bool has_veh_data,
223 const osi3::HostVehicleData& osi_hv,
224 const osi3::MovingObject& osi_ego);
232 virtual void process(
const bool has_eh,
233 const osi3::DetectedEntityHeader& osi_eh,
234 const osi3::DetectedMovingObject& osi_mo);
236 void mock_detected_lane_boundaries();
238 void from_osi_boundary_points(
const osi3::LaneBoundary& osi_lb,
cloe::LaneBoundary& lb);
245 virtual void store_ego_object(std::shared_ptr<cloe::Object> ego_obj) = 0;
252 virtual void store_object(std::shared_ptr<cloe::Object> obj) = 0;
264 virtual void store_sensor_meta_data(
const Eigen::Vector3d& bbcenter_to_veh_origin,
265 const Eigen::Vector3d& ego_dimensions) = 0;
270 cloe::Duration osi_timestamp_to_simtime(
const osi3::Timestamp& timestamp)
const;
275 virtual Eigen::Isometry3d get_static_mounting_position(
276 const Eigen::Vector3d& bbcenter_to_veh_origin,
const Eigen::Vector3d& ego_dimensions) = 0;
278 virtual void set_mock_conf(std::shared_ptr<const SensorMockConf> mock) = 0;
281 return mock_->level.at(trg_type);
311 std::shared_ptr<const SensorMockConf> mock_{
nullptr};
Eigen::Isometry3d osi_sensor_pose_
Store sensor pose relative to the ego frame (rear axle center, not ground level). ...
Definition: osi_omni_sensor.hpp:305
std::unique_ptr< OsiGroundTruth > ground_truth_
Access to osi ground truth, e.g. for mock-ups.
Definition: osi_omni_sensor.hpp:296
void from_osi_base_moving_alt(const osi3::BaseMoving &osi_bm, const osi3::BaseMoving &osi_bm_gt, cloe::Object &obj)
Definition: osi_omni_sensor.cpp:244
SensorMockTarget
Definition: osi_omni_sensor.hpp:112
Definition: confable.hpp:46
std::unique_ptr< OsiTransceiver > osi_comm_
Definition: osi_omni_sensor.hpp:293
void from_osi_host_vehicle_data(const osi3::HostVehicleData &osi_hv, cloe::Object &obj)
Definition: osi_omni_sensor.cpp:158
Definition: object.hpp:51
Definition: osi_ground_truth.cpp:29
Definition: lane_boundary.hpp:36
OsiOmniSensor(std::unique_ptr< OsiTransceiver > &&osi_transceiver, uint64_t owner_id)
Definition: osi_omni_sensor.hpp:174
uint64_t owner_id_
Id of the sensor's owner (ego).
Definition: osi_omni_sensor.hpp:299
SensorMockLevel
Definition: osi_omni_sensor.hpp:121
std::chrono::nanoseconds Duration
Definition: duration.hpp:45
void transform_obj_coord_from_osi_data(const Eigen::Isometry3d &sensor_pose, const Eigen::Vector3d &dimensions_gt, cloe::Object &obj)
Definition: osi_omni_sensor.cpp:325
Definition: schema.hpp:178
#define ENUM_SERIALIZATION(xType, xMap)
Definition: enum.hpp:52
OsiOmniSensor(OsiTransceiver *osi_transceiver, uint64_t owner_id)
Definition: osi_omni_sensor.hpp:185
cloe::Duration osi_timestamp_to_time(const osi3::Timestamp ×tamp)
Definition: osi_omni_sensor.cpp:145
Definition: osi_omni_sensor.hpp:166
void from_osi_base_moving(const osi3::BaseMoving &osi_bm, cloe::Object &obj)
Definition: osi_omni_sensor.cpp:226
Eigen::Vector3d osi_vehicle_attrib_rear_offset_to_vector3d(const osi3::MovingObject::VehicleAttributes &osi_va)
Definition: osi_utils.cpp:77
Definition: osi_transceiver.hpp:50
Eigen::Isometry3d osi_ego_pose_
Store ego pose (reference point is rear axle center, not ground level).
Definition: osi_omni_sensor.hpp:302