Skip to content

Commit ba316fd

Browse files
committed
Merge branch 'feature/max_distance_hard_cut' into 'master'
Feature/max distance hard cut See merge request tuda-fzd/perception-sensor-modeling/object-based-generic-perception-object-model!2
2 parents 20cf2c8 + ef665f7 commit ba316fd

12 files changed

+40
-34
lines changed

README.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,8 @@ If you would like to have a different one or if your simulation master does not
147147

148148
| Parameter | Description |
149149
| ---------------------- | ------------------------------------------------------------ |
150-
| max_range_in_m | Detection range for midsize vehicle at boreside with a detection probability of 50 %. |
150+
| reference_range_in_m | Detection range for mid-size vehicle (RCS = 10 dBsm) at boreside with a detection probability of 50 % |
151+
| max_range_in_m | Maximum detection range due to physical limits or ambiguity regions |
151152
| irradiation_pattern | Beam pattern for lidar and antenna characteristics for radar as elevation-azimuth-map with normalized values between 0 and 1 |
152153
| detection_thes_dB_stdv | standard deviation for the detection threshold combined with the noise floor |
153154

@@ -276,7 +277,7 @@ Currently, all information on model input is passed to the output.
276277
* If needed, you can install it via `sudo apt-get install libprotobuf-dev protobuf-compiler`
277278
* or from source:
278279
* Download it from https://github.com/protocolbuffers/protobuf/releases/tag/v3.0.0 and extract the archive.
279-
* Try to run `./autogen.sh`, if it failes, download the gmock-1.7.0.zip from https://pkgs.fedoraproject.org/repo/pkgs/gmock/gmock-1.7.0.zip/073b984d8798ea1594f5e44d85b20d66/gmock-1.7.0.zip, extract it into the protobuf folder and rename the gmock-1.7.0 folter to gmock.
280+
* Try to run `./autogen.sh`, if it fails, download the gmock-1.7.0.zip from https://pkgs.fedoraproject.org/repo/pkgs/gmock/gmock-1.7.0.zip/073b984d8798ea1594f5e44d85b20d66/gmock-1.7.0.zip, extract it into the protobuf folder and rename the gmock-1.7.0 folder to gmock.
280281
* Proceed with the install with
281282
```bash
282283
$ make

src/model/model_name.conf

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ObjectBasedLidarObjectModel
1+
ObjectBasedGenericPerceptionObjectModel

src/model/profiles/profile_MidRange_Radar.hpp.in

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ namespace model::profile::MidRange_Radar {
3636

3737
MidRange_Radar.sensor_view_configuration.mutable_update_cycle_time()->set_seconds(0);
3838
MidRange_Radar.sensor_view_configuration.mutable_update_cycle_time()->set_nanos(40000000);
39-
MidRange_Radar.sensor_view_configuration.set_range(150.0);
39+
MidRange_Radar.sensor_view_configuration.set_range(200.0);
4040
MidRange_Radar.sensor_view_configuration.set_field_of_view_horizontal(180.0 / 180 * M_PI);
4141
MidRange_Radar.sensor_view_configuration.set_field_of_view_vertical(170.0 / 180 * M_PI);
4242
MidRange_Radar.sensor_view_configuration.mutable_mounting_position()->mutable_position()->set_x(3.82);
@@ -54,7 +54,7 @@ namespace model::profile::MidRange_Radar {
5454
radar_sensor_view_configuration->mutable_mounting_position()->mutable_position()->set_z(0.24);
5555
radar_sensor_view_configuration->mutable_mounting_position()->mutable_orientation()->set_roll(0.0);
5656
radar_sensor_view_configuration->mutable_mounting_position()->mutable_orientation()->set_pitch(0.0);
57-
radar_sensor_view_configuration->mutable_mounting_position()->mutable_orientation()->set_yaw(0.0);
57+
radar_sensor_view_configuration->mutable_mounting_position()->mutable_orientation()->set_yaw(0.0 / 180.0 * M_PI);
5858
radar_sensor_view_configuration->set_emitter_frequency(77000000);
5959

6060
MidRange_Radar.sensor_parameters.radar_multipath_min_ground_clearance = 0.2;
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11

22
/// data_extraction_parameters
3-
Ibeo_LUX_2010.data_extraction_parameters.max_range_in_m = 50.0; //range for vehicle from ibeo ScaLa User Manual
4-
//Ibeo_LUX_2010.data_extraction_parameters.max_range_in_m = 300.0; //range for vehicle from ibeo ScaLa User Manual
3+
Ibeo_LUX_2010.data_extraction_parameters.reference_range_in_m = 50;
4+
Ibeo_LUX_2010.data_extraction_parameters.max_range_in_m = 1000;
55
Ibeo_LUX_2010.data_extraction_parameters.irradiation_pattern.elevation = {-1.6, 1.6};
6-
Ibeo_LUX_2010.data_extraction_parameters.irradiation_pattern.azimuth = {-72.0, -70.0, -60.0, -50.0, -40.0, -30.0, -20.0, -10.0, 0.0, -10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 72.0};
6+
Ibeo_LUX_2010.data_extraction_parameters.irradiation_pattern.azimuth = {-72, -70, -60, -50, -40, -30, -20, -10, 0, -10, 20, 30, 40, 50, 60, 70, 72};
77
Ibeo_LUX_2010.data_extraction_parameters.irradiation_pattern.elevation_azimuth_power_values = {{0.00, 0.25, 0.45, 0.60, 0.75, 0.85, 0.95, 1.00, 1.00, 1.00, 0.95, 0.90, 0.75, 0.55, 0.32, 0.30, 0.00}, {0.00, 0.25, 0.45, 0.60, 0.75, 0.85, 0.95, 1.00, 1.00, 1.00, 0.95, 0.90, 0.75, 0.55, 0.32, 0.30, 0.00}}; //from Valeo SCALA User Manual
8-
Ibeo_LUX_2010.data_extraction_parameters.detection_threshold_dB_stdv = 3.0;
8+
Ibeo_LUX_2010.data_extraction_parameters.detection_threshold_dB_stdv = 3;
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11

22
/// data_extraction_parameters
3-
LongRange_Radar.data_extraction_parameters.max_range_in_m = 300.0;
4-
LongRange_Radar.data_extraction_parameters.irradiation_pattern.elevation = {-10.0, 10.0};
5-
LongRange_Radar.data_extraction_parameters.irradiation_pattern.azimuth = {-30.0, -20.0, -10.0, 0.0, 10.0, 20.0, 30.0};
6-
LongRange_Radar.data_extraction_parameters.irradiation_pattern.elevation_azimuth_power_values = {{0, 0.75, 1.00, 1.00, 1.00, 0.75, 0}, {0, 0.75, 1.00, 1.00, 1.00, 0.75, 0.0}};
7-
LongRange_Radar.data_extraction_parameters.detection_threshold_dB_stdv = 3.0;
3+
LongRange_Radar.data_extraction_parameters.reference_range_in_m = 200;
4+
LongRange_Radar.data_extraction_parameters.max_range_in_m = 250;
5+
LongRange_Radar.data_extraction_parameters.irradiation_pattern.elevation = {-10, 10};
6+
LongRange_Radar.data_extraction_parameters.irradiation_pattern.azimuth = {-30, -20, -10, 0, 10, 20, 30};
7+
LongRange_Radar.data_extraction_parameters.irradiation_pattern.elevation_azimuth_power_values = {{0, 0.75, 1.00, 1.00, 1.00, 0.75, 0}, {0, 0.75, 1.00, 1.00, 1.00, 0.75, 0}};
8+
LongRange_Radar.data_extraction_parameters.detection_threshold_dB_stdv = 3;
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11

22
/// data_extraction_parameters
3-
MidRange_Radar.data_extraction_parameters.max_range_in_m = 100.0;
4-
MidRange_Radar.data_extraction_parameters.irradiation_pattern.elevation = {-10.0, 10.0};
5-
MidRange_Radar.data_extraction_parameters.irradiation_pattern.azimuth = {-60.0, -50.0, -40.0, -30.0, -20.0, -10.0, 0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0};
6-
MidRange_Radar.data_extraction_parameters.irradiation_pattern.elevation_azimuth_power_values = {{0.0, 0.20, 0.50, 0.80, 0.90, 1.00, 1.00, 1.00, 0.90, 0.80, 0.50, 0.20, 0.0}, {0.0, 0.20, 0.50, 0.80, 0.90, 1.00, 1.00, 1.00, 0.90, 0.80, 0.50, 0.20, 0.0}};
7-
MidRange_Radar.data_extraction_parameters.detection_threshold_dB_stdv = 3.0;
3+
MidRange_Radar.data_extraction_parameters.reference_range_in_m = 120;
4+
MidRange_Radar.data_extraction_parameters.max_range_in_m = 150;
5+
MidRange_Radar.data_extraction_parameters.irradiation_pattern.elevation = {-10, 10};
6+
MidRange_Radar.data_extraction_parameters.irradiation_pattern.azimuth = {-60, -42, -25, -10, -9, -6, 0, 6, 9, 10, 25, 42, 60};
7+
MidRange_Radar.data_extraction_parameters.irradiation_pattern.elevation_azimuth_power_values = {{0, 0.075, 0.225, 0.375, 0.625, 1.00, 1.00, 1.00, 0.625, 0.375, 0.225, 0.075, 0}, {0, 0.075, 0.225, 0.375, 0.625, 1.00, 1.00, 1.00, 0.625, 0.375, 0.225, 0.075, 0}};
8+
MidRange_Radar.data_extraction_parameters.detection_threshold_dB_stdv = 3;
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11

22
/// data_extraction_parameters
3-
SCALA_1.data_extraction_parameters.max_range_in_m = 300.0; //range for vehicle from ibeo ScaLa User Manual
3+
SCALA_1.data_extraction_parameters.reference_range_in_m = 300; //range for vehicle from ibeo ScaLa User Manual
4+
SCALA_1.data_extraction_parameters.max_range_in_m = 1000;
45
SCALA_1.data_extraction_parameters.irradiation_pattern.elevation = {-1.6, 1.6};
5-
SCALA_1.data_extraction_parameters.irradiation_pattern.azimuth = {-72.0, -70.0, -60.0, -50.0, -40.0, -30.0, -20.0, -10.0, -10.0, 0.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 72.0};
6+
SCALA_1.data_extraction_parameters.irradiation_pattern.azimuth = {-72, -70, -60, -50, -40, -30, -20, -10, -10, 0, 20, 30, 40, 50, 60, 70, 72};
67
SCALA_1.data_extraction_parameters.irradiation_pattern.elevation_azimuth_power_values = {{0.00, 0.25, 0.45, 0.60, 0.75, 0.85, 0.95, 1.00, 1.00, 1.00, 0.95, 0.90, 0.75, 0.55, 0.32, 0.30, 0.00}, {0.00, 0.25, 0.45, 0.60, 0.75, 0.85, 0.95, 1.00, 1.00, 1.00, 0.95, 0.90, 0.75, 0.55, 0.32, 0.30, 0.00}}; //from Valeo SCALA User Manual
7-
SCALA_1.data_extraction_parameters.detection_threshold_dB_stdv = 3.0;
8+
SCALA_1.data_extraction_parameters.detection_threshold_dB_stdv = 3;

src/model/strategies/data-extraction-strategy/profile_struct.hpp.in

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
struct data_extraction_parameters {
3-
float max_range_in_m; //maximum detection range for midsize vehicle (10 dBsm for radar) at bore sight
3+
float reference_range_in_m; //maximum detection range for midsize vehicle (10 dBsm for radar) at bore sight
4+
float max_range_in_m; //maximum detection range due to physical limits or ambiguity regions
45
struct irradiation_pattern { //beam pattern for lidar and antenna characteristics for radar
56
std::vector<float> elevation;
67
std::vector<float> azimuth;

src/model/strategies/data-extraction-strategy/src/DataExtractionStrategy.cpp

+8-6
Original file line numberDiff line numberDiff line change
@@ -105,26 +105,28 @@ void DataExtractionStrategy::process_vertices_from_one_object(const std::vector<
105105
wave_length = Speed_of_Light / profile.sensor_view_configuration.radar_sensor_view_configuration(0).emitter_frequency();
106106
float rcs_dbsm_threshold = 10;
107107
equivalent_reflecting_area_threshold = (float)pow(10.0, rcs_dbsm_threshold / 10);
108-
detection_threshold_dB = float(10.0 * log10(pow(wave_length, 2) * equivalent_reflecting_area_threshold / pow(profile.data_extraction_parameters.max_range_in_m, 4)));
108+
detection_threshold_dB = float(10.0 * log10(pow(wave_length, 2) * equivalent_reflecting_area_threshold / pow(profile.data_extraction_parameters.reference_range_in_m, 4)));
109109
power_equivalent_area = get_rcs_in_sm(sensor_data, detection_data_of_current_object.detection(0).object_id().value());
110110

111111
} else { // lidar
112112
wave_length = Speed_of_Light / profile.sensor_view_configuration.lidar_sensor_view_configuration(0).emitter_frequency();
113113
equivalent_reflecting_area_threshold = 2.5;
114-
detection_threshold_dB = float(10.0 * log10(pow(wave_length, 2) * equivalent_reflecting_area_threshold / pow(profile.data_extraction_parameters.max_range_in_m, 4)));
114+
detection_threshold_dB = float(10.0 * log10(pow(wave_length, 2) * equivalent_reflecting_area_threshold / pow(profile.data_extraction_parameters.reference_range_in_m, 4)));
115115
power_equivalent_area = calc_visible_area(proj_vertices_current_obj, mean_vertex_position_of_current_object.distance());
116116
}
117117

118118
double irradiation_gain = calculate_irradiation_gain(mean_vertex_position_of_current_object.azimuth(), mean_vertex_position_of_current_object.elevation());
119119

120120
double distance = mean_vertex_position_of_current_object.distance();
121-
double power_equivalent_value_db = double(10.0 * log10(std::pow(wave_length, 2) * irradiation_gain * power_equivalent_area / std::pow(distance, 4)));
122-
if (profile.data_extraction_parameters.detection_threshold_dB_stdv > 0.0) {
121+
122+
auto power_equivalent_value_db = double(10.0 * log10(std::pow(wave_length, 2) * irradiation_gain * power_equivalent_area / std::pow(distance, 4)));
123+
if (profile.data_extraction_parameters.detection_threshold_dB_stdv > 0.0) {
123124
std::normal_distribution<double> distribution(0.0, profile.data_extraction_parameters.detection_threshold_dB_stdv); // dist(mean, stddev), normal distribution with stddev in dB
124125
std::knuth_b generator(std::rand()); // rand used for Windows compatibility
125-
detection_threshold_dB += distribution(generator);
126+
detection_threshold_dB += distribution(generator);
126127
}
127-
bool is_detected = power_equivalent_value_db > detection_threshold_dB;
128+
bool is_detected = mean_vertex_position_of_current_object.distance() < profile.data_extraction_parameters.max_range_in_m &&
129+
power_equivalent_value_db > detection_threshold_dB;
128130

129131
if(is_detected) {
130132
transform_detections_to_logical_detections(sensor_data, detection_data_of_current_object, ego_data);

src/model/strategies/tracking-strategy/profile_LongRange_Radar.hpp.in

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
// 4 = mean dimension of current and historical point cloud segments with lower bounds, position as center of manipulated pcl segment;
1010
LongRange_Radar.tracking_parameters.minimum_object_dimension.set_length(0.8); // Minimum length in m for detected objects
1111
LongRange_Radar.tracking_parameters.minimum_object_dimension.set_width(0.5); // Minimum width in m for detected objects
12-
LongRange_Radar.tracking_parameters.minimum_object_dimension.set_height(2); // Minimum height in m for detected objects
12+
LongRange_Radar.tracking_parameters.minimum_object_dimension.set_height(2.0); // Minimum height in m for detected objects
1313
LongRange_Radar.tracking_parameters.historical_limit_dimension = 3; // Limits the historical data used for historical mean dimension calculation
1414
LongRange_Radar.tracking_parameters.velocity_flag = 1; // 0 = from ground truth; 1 = derivation of position
1515
LongRange_Radar.tracking_parameters.historical_limit_velocity = 10; // Limits the historical data used for velocity calculation by position differentiation
1616
LongRange_Radar.tracking_parameters.tracking_flag = 1; // 0 = ideal (track all ground truth objects); 1 = realistic lidar tracking behaviour
1717
LongRange_Radar.tracking_parameters.existence_probability_threshold_for_tracking = 0.5; // Threshold for existence probability, tracking is enabled above threshold
1818
LongRange_Radar.tracking_parameters.min_detections_in_segment_for_tracking = 3; // Minimum no. of detections per segment to track it
1919
LongRange_Radar.tracking_parameters.existence_probability_increment = 0.2; // Increment for existence probability
20-
LongRange_Radar.tracking_parameters.existence_probability_decrement = 0.055; // Decrement for existence probability
20+
LongRange_Radar.tracking_parameters.existence_probability_decrement = 0.2; // Decrement for existence probability

src/model/strategies/tracking-strategy/profile_MidRange_Radar.hpp.in

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
// 4 = mean dimension of current and historical point cloud segments with lower bounds, position as center of manipulated pcl segment;
1010
MidRange_Radar.tracking_parameters.minimum_object_dimension.set_length(0.8); // Minimum length in m for detected objects
1111
MidRange_Radar.tracking_parameters.minimum_object_dimension.set_width(0.5); // Minimum width in m for detected objects
12-
MidRange_Radar.tracking_parameters.minimum_object_dimension.set_height(2); // Minimum height in m for detected objects
12+
MidRange_Radar.tracking_parameters.minimum_object_dimension.set_height(2.0); // Minimum height in m for detected objects
1313
MidRange_Radar.tracking_parameters.historical_limit_dimension = 3; // Limits the historical data used for historical mean dimension calculation
1414
MidRange_Radar.tracking_parameters.velocity_flag = 1; // 0 = from ground truth; 1 = derivation of position
1515
MidRange_Radar.tracking_parameters.historical_limit_velocity = 10; // Limits the historical data used for velocity calculation by position differentiation
1616
MidRange_Radar.tracking_parameters.tracking_flag = 1; // 0 = ideal (track all ground truth objects); 1 = realistic lidar tracking behaviour
1717
MidRange_Radar.tracking_parameters.existence_probability_threshold_for_tracking = 0.5; // Threshold for existence probability, tracking is enabled above threshold
1818
MidRange_Radar.tracking_parameters.min_detections_in_segment_for_tracking = 3; // Minimum no. of detections per segment to track it
1919
MidRange_Radar.tracking_parameters.existence_probability_increment = 0.2; // Increment for existence probability
20-
MidRange_Radar.tracking_parameters.existence_probability_decrement = 0.055; // Decrement for existence probability
20+
MidRange_Radar.tracking_parameters.existence_probability_decrement = 0.2; // Decrement for existence probability

src/model/strategies/tracking-strategy/profile_struct.hpp.in

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11

22
struct tracking_parameters {
3-
bool is_radar; // true = radar tracking; false = lidar tracking
43
uint64_t classification_flag; // 0 = from ground truth; 1 = all "UNKNOWN"
54
uint64_t orientation_flag; // 0 = from ground truth; 1 = from current point cloud segment;
65
uint64_t dimension_and_position_flag; // 0 = from ground truth;

0 commit comments

Comments
 (0)