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_api_schema.pb.h>
20 #include <agnocast_wrapper/agnocast_wrapper.hpp>
24 #include <rclcpp/rclcpp.hpp>
25 #include <sensor_msgs/msg/point_cloud2.hpp>
43 const double current_simulation_time,
44 const simulation_api_schema::LidarConfiguration & configuration)
53 const double current_simulation_time,
const std::vector<traffic_simulator_msgs::EntityStatus> &,
54 const rclcpp::Time & current_ros_time) ->
void = 0;
62 const agnocast_wrapper::PublisherPtr<T> publisher_ptr_;
64 std::queue<std::pair<sensor_msgs::msg::PointCloud2, double>> queue_pointcloud_;
66 auto raycast(
const std::vector<traffic_simulator_msgs::EntityStatus> &,
const rclcpp::Time &)
71 const double current_simulation_time,
72 const simulation_api_schema::LidarConfiguration & configuration,
73 const agnocast_wrapper::PublisherPtr<T> & publisher_ptr)
74 :
LidarSensorBase(current_simulation_time, configuration), publisher_ptr_(publisher_ptr)
80 const double current_simulation_time,
81 const std::vector<traffic_simulator_msgs::EntityStatus> & status,
82 const rclcpp::Time & current_ros_time) ->
void override
88 queue_pointcloud_.push(
89 std::make_pair(raycast(status, current_ros_time), current_simulation_time));
95 not queue_pointcloud_.empty() and
96 current_simulation_time - queue_pointcloud_.front().second >=
98 auto pointcloud = agnocast_wrapper::create_message(publisher_ptr_);
99 *pointcloud = queue_pointcloud_.front().first;
100 queue_pointcloud_.pop();
101 publisher_ptr_->publish(std::move(pointcloud));
111 auto LidarSensor<sensor_msgs::msg::PointCloud2>::raycast(
112 const std::vector<traffic_simulator_msgs::EntityStatus> &,
const rclcpp::Time &)
113 -> sensor_msgs::msg::PointCloud2;
Definition: lidar_sensor.hpp:33
LidarSensorBase(const double current_simulation_time, const simulation_api_schema::LidarConfiguration &configuration)
Definition: lidar_sensor.hpp:42
std::vector< std::string > detected_objects_
Definition: lidar_sensor.hpp:40
Raycaster raycaster_
Definition: lidar_sensor.hpp:39
virtual auto update(const double current_simulation_time, const std::vector< traffic_simulator_msgs::EntityStatus > &, const rclcpp::Time ¤t_ros_time) -> void=0
auto getDetectedObjects() const -> const std::vector< std::string > &
Definition: lidar_sensor.hpp:56
virtual ~LidarSensorBase()=default
simulation_api_schema::LidarConfiguration configuration_
Definition: lidar_sensor.hpp:37
double previous_simulation_time_
Definition: lidar_sensor.hpp:35
Definition: lidar_sensor.hpp:61
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:79
LidarSensor(const double current_simulation_time, const simulation_api_schema::LidarConfiguration &configuration, const agnocast_wrapper::PublisherPtr< T > &publisher_ptr)
Definition: lidar_sensor.hpp:70
Definition: raycaster.hpp:38
void setDirection(const simulation_api_schema::LidarConfiguration &configuration, double horizontal_angle_start=0, double horizontal_angle_end=2 *M_PI)
Definition: raycaster.cpp:48
Definition: constants.hpp:19
Definition: lanelet_wrapper.hpp:40