15 #ifndef SIMPLE_SENSOR_SIMULATOR__SENSOR_SIMULATION__LIDAR__LIDAR_SENSOR_HPP_
16 #define SIMPLE_SENSOR_SIMULATOR__SENSOR_SIMULATION__LIDAR__LIDAR_SENSOR_HPP_
18 #include <simulation_interface/simulation_api_schema.pb.h>
20 #include <agnocast_wrapper/agnocast_wrapper.hpp>
21 #include <get_parameter/get_parameter.hpp>
24 #include <rclcpp/rclcpp.hpp>
26 #include <sensor_msgs/msg/point_cloud2.hpp>
45 const double current_simulation_time,
46 const simulation_api_schema::LidarConfiguration & configuration)
55 const double current_simulation_time,
const std::vector<traffic_simulator_msgs::EntityStatus> &,
56 const rclcpp::Time & current_ros_time) ->
void = 0;
64 const agnocast_wrapper::PublisherPtr<T> publisher_ptr_;
66 std::queue<std::pair<sensor_msgs::msg::PointCloud2, double>> queue_pointcloud_;
68 std::unique_ptr<LidarNoiseModelV1> noise_model_v1_ =
nullptr;
70 auto raycast(
const std::vector<traffic_simulator_msgs::EntityStatus> &,
const rclcpp::Time &)
75 const double current_simulation_time,
76 const simulation_api_schema::LidarConfiguration & configuration,
77 const agnocast_wrapper::PublisherPtr<T> & publisher_ptr)
78 :
LidarSensorBase(current_simulation_time, configuration), publisher_ptr_(publisher_ptr)
81 const std::string topic_name = publisher_ptr_->get_topic_name();
82 const std::string version_parameter_name = topic_name +
".noise.model.version";
84 if (
auto & parameter_node = common::getParameterNode();
85 parameter_node.has_parameter(version_parameter_name)) {
86 const auto version = common::getParameter<int>(version_parameter_name);
88 const auto seed = common::getParameter<int>(topic_name +
".seed");
89 noise_model_v1_ = std::make_unique<LidarNoiseModelV1>(topic_name, seed);
92 "Unexpected noise model version for LiDAR sensor: ", version,
93 ". Expected version is 1 for now.");
101 const double current_simulation_time,
102 const std::vector<traffic_simulator_msgs::EntityStatus> & status,
103 const rclcpp::Time & current_ros_time) ->
void override
109 queue_pointcloud_.push(
110 std::make_pair(raycast(status, current_ros_time), current_simulation_time));
116 not queue_pointcloud_.empty() and
117 current_simulation_time - queue_pointcloud_.front().second >=
119 auto pointcloud = agnocast_wrapper::create_message(publisher_ptr_);
120 *pointcloud = queue_pointcloud_.front().first;
121 queue_pointcloud_.pop();
122 publisher_ptr_->publish(std::move(pointcloud));
132 auto LidarSensor<sensor_msgs::msg::PointCloud2>::raycast(
133 const std::vector<traffic_simulator_msgs::EntityStatus> &,
const rclcpp::Time &)
134 -> sensor_msgs::msg::PointCloud2;
Definition: lidar_sensor.hpp:35
LidarSensorBase(const double current_simulation_time, const simulation_api_schema::LidarConfiguration &configuration)
Definition: lidar_sensor.hpp:44
std::set< std::string > detected_objects_
Definition: lidar_sensor.hpp:42
Raycaster raycaster_
Definition: lidar_sensor.hpp:41
virtual auto update(const double current_simulation_time, const std::vector< traffic_simulator_msgs::EntityStatus > &, const rclcpp::Time ¤t_ros_time) -> void=0
virtual ~LidarSensorBase()=default
simulation_api_schema::LidarConfiguration configuration_
Definition: lidar_sensor.hpp:39
auto getDetectedObjects() const -> const std::set< std::string > &
Definition: lidar_sensor.hpp:58
double previous_simulation_time_
Definition: lidar_sensor.hpp:37
Definition: lidar_sensor.hpp:63
auto update(const double current_simulation_time, const std::vector< traffic_simulator_msgs::EntityStatus > &status, const rclcpp::Time ¤t_ros_time) -> void override
Definition: lidar_sensor.hpp:100
LidarSensor(const double current_simulation_time, const simulation_api_schema::LidarConfiguration &configuration, const agnocast_wrapper::PublisherPtr< T > &publisher_ptr)
Definition: lidar_sensor.hpp:74
Definition: raycaster.hpp:36
void setDirection(const simulation_api_schema::LidarConfiguration &configuration, double horizontal_angle_start=0, double horizontal_angle_end=2 *M_PI)
Definition: raycaster.cpp:60
Definition: constants.hpp:19
Definition: lanelet_wrapper.hpp:40
std::string string
Definition: junit5.hpp:26
Definition: exception.hpp:27