laser_simulator.h
Go to the documentation of this file.
1 #include "ros/ros.h"
2 #include "ros/console.h"
3 
4 #include "nav_msgs/OccupancyGrid.h"
5 #include "nav_msgs/GetMap.h"
6 #include "sensor_msgs/LaserScan.h"
7 
10 
11 #include <math.h>
12 #include <random>
13 
14 #ifndef LASER_SIMULATOR
15 #define LASER_SIMULATOR
16 
18 
19 public:
20 
23 
25  void set_laser_params(std::string frame_id, double fov, unsigned int beam_count, double max_range, double min_range, double l_frequency);
26 
28  void set_noise_params(bool use_model, double sigma_hit_reading, double lambda_short_reading, double z_hit, double z_short, double z_max, double z_rand);
29 
31  void start(); //
32 
34  void stop();
35 
36 
37 private:
38 
39  void update_loop(const ros::TimerEvent& event);
40 
42  void get_map();
43 
45  void get_params();
46 
48  void get_laser_pose(double * x, double * y, double * theta);
49 
51  void update_scan(double x, double y, double theta);
52 
54  double find_map_range(double x, double y, double theta);
55 
57  double apply_range_noise(double range_reading);
58 
60  void get_world2map_coordinates(double x, double y, int * map_x, int * map_y);
61 
63  void get_map2world_coordinates(int map_x, int map_y, double * x, double * y);
64 
66  int get_map_occupancy(int x, int y);
67 
68 
70  ros::Publisher laser_pub; // scan publisher
72 
73  ros::Timer loop_timer; // timer for the update loop
74  bool is_running;
75 
76  // map
77  std::string map_service;
78  nav_msgs::OccupancyGrid map; //map data
79  bool have_map;
80 
81  std::string l_scan_topic;
82 
83  // laser parameters
84  std::string l_frame;
85  double l_fov; // field of view, centered at pose of laser
86  int l_beams; // number of beams per scan
87  double l_max_range; // max range of the laser scan
88  double l_min_range; // min range of the laser scan
89  double l_frequency; // frequency of laser scans
90  tf::StampedTransform rob_laser_tf; // transform from robot to laser (assumed static)
91 
92  // noise model parameters (see Probabilistic Robotics eq. 6.12)
94  double sigma_hit; // stddev of measurement noise
95  double lambda_short; // intrinsic parameter for short readings (1/mu in exp pdf)
96  double z_mix[4]; // mixing coefficients of the noise model - [z_hit, z_short, z_max, z_rand]
97  // noise model distributions and generators
98  std::default_random_engine rand_gen; // generator
99  std::uniform_real_distribution<double> selector; // selector for which noise distribution to draw from
100  std::normal_distribution<double> p_hit; // gaussian noise on detection
101  std::exponential_distribution<double> p_short; // short readings
102  std::uniform_real_distribution<double> p_rand; // random, "phantom" readings
103 
104  // output
105  sensor_msgs::LaserScan output_scan;
106 
107 }; // end class
108 
109 #endif
LaserScannerSimulator::apply_range_noise
double apply_range_noise(double range_reading)
Definition: laser_simulator.cpp:263
LaserScannerSimulator::l_scan_topic
std::string l_scan_topic
Definition: laser_simulator.h:81
ros::Publisher
LaserScannerSimulator::use_noise_model
bool use_noise_model
Definition: laser_simulator.h:93
LaserScannerSimulator::get_params
void get_params()
Definition: laser_simulator.cpp:21
LaserScannerSimulator::get_map
void get_map()
Definition: laser_simulator.cpp:72
LaserScannerSimulator::laser_pub
ros::Publisher laser_pub
Definition: laser_simulator.h:70
ros.h
LaserScannerSimulator::start
void start()
Definition: laser_simulator.cpp:44
LaserScannerSimulator::lambda_short
double lambda_short
Definition: laser_simulator.h:95
LaserScannerSimulator::set_noise_params
void set_noise_params(bool use_model, double sigma_hit_reading, double lambda_short_reading, double z_hit, double z_short, double z_max, double z_rand)
Definition: laser_simulator.cpp:277
LaserScannerSimulator::update_loop
void update_loop(const ros::TimerEvent &event)
Definition: laser_simulator.cpp:59
LaserScannerSimulator::update_scan
void update_scan(double x, double y, double theta)
Definition: laser_simulator.cpp:120
LaserScannerSimulator::have_map
bool have_map
Definition: laser_simulator.h:79
LaserScannerSimulator::sigma_hit
double sigma_hit
Definition: laser_simulator.h:94
LaserScannerSimulator::get_map_occupancy
int get_map_occupancy(int x, int y)
Definition: laser_simulator.cpp:319
tf::StampedTransform
LaserScannerSimulator::find_map_range
double find_map_range(double x, double y, double theta)
Definition: laser_simulator.cpp:156
LaserScannerSimulator::nh_ptr
ros::NodeHandle * nh_ptr
Definition: laser_simulator.h:69
LaserScannerSimulator::output_scan
sensor_msgs::LaserScan output_scan
Definition: laser_simulator.h:105
LaserScannerSimulator::stop
void stop()
Definition: laser_simulator.cpp:52
LaserScannerSimulator::l_min_range
double l_min_range
Definition: laser_simulator.h:88
LaserScannerSimulator::l_beams
int l_beams
Definition: laser_simulator.h:86
console.h
LaserScannerSimulator::l_frequency
double l_frequency
Definition: laser_simulator.h:89
LaserScannerSimulator::loop_timer
ros::Timer loop_timer
Definition: laser_simulator.h:73
LaserScannerSimulator::p_short
std::exponential_distribution< double > p_short
Definition: laser_simulator.h:101
LaserScannerSimulator::get_laser_pose
void get_laser_pose(double *x, double *y, double *theta)
Definition: laser_simulator.cpp:100
LaserScannerSimulator::l_frame
std::string l_frame
Definition: laser_simulator.h:84
LaserScannerSimulator::map
nav_msgs::OccupancyGrid map
Definition: laser_simulator.h:78
LaserScannerSimulator::l_fov
double l_fov
Definition: laser_simulator.h:85
ros::TimerEvent
LaserScannerSimulator
Definition: laser_simulator.h:17
LaserScannerSimulator::is_running
bool is_running
Definition: laser_simulator.h:74
LaserScannerSimulator::~LaserScannerSimulator
~LaserScannerSimulator()
Definition: laser_simulator.cpp:16
LaserScannerSimulator::p_hit
std::normal_distribution< double > p_hit
Definition: laser_simulator.h:100
LaserScannerSimulator::set_laser_params
void set_laser_params(std::string frame_id, double fov, unsigned int beam_count, double max_range, double min_range, double l_frequency)
Definition: laser_simulator.cpp:89
LaserScannerSimulator::z_mix
double z_mix[4]
Definition: laser_simulator.h:96
transform_listener.h
transform_datatypes.h
LaserScannerSimulator::tl
tf::TransformListener tl
Definition: laser_simulator.h:71
LaserScannerSimulator::selector
std::uniform_real_distribution< double > selector
Definition: laser_simulator.h:99
tf::TransformListener
LaserScannerSimulator::get_map2world_coordinates
void get_map2world_coordinates(int map_x, int map_y, double *x, double *y)
Definition: laser_simulator.cpp:312
LaserScannerSimulator::map_service
std::string map_service
Definition: laser_simulator.h:77
LaserScannerSimulator::rand_gen
std::default_random_engine rand_gen
Definition: laser_simulator.h:98
LaserScannerSimulator::get_world2map_coordinates
void get_world2map_coordinates(double x, double y, int *map_x, int *map_y)
Definition: laser_simulator.cpp:305
ros::Timer
LaserScannerSimulator::LaserScannerSimulator
LaserScannerSimulator(ros::NodeHandle *nh)
Definition: laser_simulator.cpp:5
LaserScannerSimulator::p_rand
std::uniform_real_distribution< double > p_rand
Definition: laser_simulator.h:102
LaserScannerSimulator::rob_laser_tf
tf::StampedTransform rob_laser_tf
Definition: laser_simulator.h:90
ros::NodeHandle
LaserScannerSimulator::l_max_range
double l_max_range
Definition: laser_simulator.h:87


mobile_robot_simulator
Author(s): Mikkel Rath Pedersen
autogenerated on Thu Jun 2 2022 02:16:58