scenario_simulator_v2 C++ API
lidar_noise_model_v1.hpp
Go to the documentation of this file.
1 // Copyright 2015 TIER IV, Inc. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef SIMPLE_SENSOR_SIMULATOR__SENSOR_SIMULATION__LIDAR__LIDAR_NOISE_MODEL_V1_HPP_
16 #define SIMPLE_SENSOR_SIMULATOR__SENSOR_SIMULATION__LIDAR__LIDAR_NOISE_MODEL_V1_HPP_
17 
18 #include <functional>
19 #include <geometry_msgs/msg/pose.hpp>
20 #include <optional>
21 #include <random>
23 #include <string>
24 #include <unordered_map>
25 #include <vector>
26 
28 {
29 
31 {
32 public:
33  struct Config
34  {
35  struct DistanceBin
36  {
38  std::bernoulli_distribution detection_distribution;
39  std::normal_distribution<double> radial_distribution;
40  std::normal_distribution<double> tangential_distribution;
41 
43  double ellipse_y_radius, double radial_mean, double radial_stddev, double tangential_mean,
44  double tangential_stddev, double true_positive_rate)
45  : ellipse_y_radius_squared(ellipse_y_radius * ellipse_y_radius),
46  detection_distribution(true_positive_rate),
47  radial_distribution(radial_mean, radial_stddev),
48  tangential_distribution(tangential_mean, tangential_stddev)
49  {
50  }
51  };
52 
54  std::vector<DistanceBin> distance_bins_;
55 
56  Config(const std::string & topic_name, const std::string & config_name);
57 
58  DistanceBin & getDistanceBin(double x, double y);
59  };
60 
61  explicit LidarNoiseModelV1(const std::string & topic_name, int seed);
62 
63  void applyNoise(Raycaster::RaycastResult & result, const geometry_msgs::msg::Pose & ego_pose);
64 
65 private:
66  std::unordered_map<std::string, Config> configs_;
67  std::unordered_map<std::string, std::optional<std::reference_wrapper<Config>>> entity_to_config_;
68  std::default_random_engine random_engine_;
69  std::string topic_name_;
70 
71  std::optional<std::reference_wrapper<Config>> getConfigFor(
72  const std::string & entity_name, const traffic_simulator_msgs::EntityStatus & entity_status);
73 
74  static void removeMarkedPoints(
75  pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud, const std::vector<bool> & points_to_remove);
76 };
77 
78 } // namespace simple_sensor_simulator
79 
80 #endif // SIMPLE_SENSOR_SIMULATOR__SENSOR_SIMULATION__LIDAR__LIDAR_NOISE_MODEL_V1_HPP_
Definition: lidar_noise_model_v1.hpp:31
LidarNoiseModelV1(const std::string &topic_name, int seed)
Definition: lidar_noise_model_v1.cpp:24
void applyNoise(Raycaster::RaycastResult &result, const geometry_msgs::msg::Pose &ego_pose)
Definition: lidar_noise_model_v1.cpp:115
Definition: constants.hpp:19
geometry_msgs::msg::Pose Pose
Definition: lanelet_wrapper.hpp:66
std::string string
Definition: junit5.hpp:26
traffic_simulator_msgs::EntityStatus EntityStatus
Definition: helper_functions.hpp:32
DistanceBin(double ellipse_y_radius, double radial_mean, double radial_stddev, double tangential_mean, double tangential_stddev, double true_positive_rate)
Definition: lidar_noise_model_v1.hpp:42
std::normal_distribution< double > radial_distribution
Definition: lidar_noise_model_v1.hpp:39
double ellipse_y_radius_squared
Definition: lidar_noise_model_v1.hpp:37
std::normal_distribution< double > tangential_distribution
Definition: lidar_noise_model_v1.hpp:40
std::bernoulli_distribution detection_distribution
Definition: lidar_noise_model_v1.hpp:38
Definition: lidar_noise_model_v1.hpp:34
const double true_positive_rate_ellipse_normalized_x_radius
Definition: lidar_noise_model_v1.hpp:53
Config(const std::string &topic_name, const std::string &config_name)
Definition: lidar_noise_model_v1.cpp:33
std::vector< DistanceBin > distance_bins_
Definition: lidar_noise_model_v1.hpp:54
DistanceBin & getDistanceBin(double x, double y)
Definition: lidar_noise_model_v1.cpp:67