12 #include "mf_farm_simulator/FarmSimulatorConfig.h" 13 #include "mf_farm_simulator/Algae.h" 14 #include <dynamic_reconfigure/server.h> 15 #include <visualization_msgs/MarkerArray.h> 16 #include <visualization_msgs/Marker.h> 17 #include <geometry_msgs/Point.h> 18 #include <geometry_msgs/Point32.h> 19 #include <std_msgs/ColorRGBA.h> 20 #include <pluginlib/class_list_macros.h> 21 #include <tf2_geometry_msgs/tf2_geometry_msgs.h> 22 #include <geometry_msgs/Point.h> 38 sig_atomic_t
volatile FarmNodelet::b_sigint_ = 0;
39 ros::Timer FarmNodelet::init_timer_ = ros::Timer();
40 ros::Timer FarmNodelet::main_timer_ = ros::Timer();
45 FarmNodelet::FarmNodelet() {}
46 FarmNodelet::~FarmNodelet() {}
48 void FarmNodelet::onInit()
50 nh_ = getNodeHandle();
51 private_nh_ = getPrivateNodeHandle();
54 struct sigaction sigIntHandler;
55 sigIntHandler.sa_handler = FarmNodelet::sigint_handler;
56 sigemptyset(&sigIntHandler.sa_mask);
57 sigIntHandler.sa_flags = 0;
58 sigaction(SIGINT, &sigIntHandler, NULL);
61 reconfigure_initialised_ =
false;
62 dynamic_reconfigure::Server<mf_farm_simulator::FarmSimulatorConfig>::CallbackType cb;
63 cb = boost::bind(&FarmNodelet::reconfigure_cb,
this, _1, _2);
64 reconf_srv_.setCallback(cb);
67 private_nh_.param<
float>(
"main_loop_freq", main_loop_freq_, 1.0);
68 private_nh_.param<
int>(
"random_seed", random_seed_, 0);
69 private_nh_.param<
int>(
"nbr_lines", nbr_lines_, 1);
70 private_nh_.param<
float>(
"offset_lines", offset_lines_, 1.0);
71 private_nh_.param<
float>(
"length_lines", length_lines_, 100.0);
72 private_nh_.param<
float>(
"thickness_ropes", thickness_ropes_, 0.1);
73 private_nh_.param<
float>(
"depth_lines", depth_lines_, 1.0);
74 private_nh_.param<
float>(
"depth_water", depth_water_, 5.0);
75 private_nh_.param<
float>(
"anchors_diameter", anchors_diameter_, 0.5);
76 private_nh_.param<
float>(
"anchors_height", anchors_height_, 0.5);
77 private_nh_.param<
int>(
"nbr_buoys", nbr_buoys_, 2);
78 private_nh_.param<
float>(
"buoys_diameter", buoys_diameter_, 0.6);
80 private_nh_.param<
bool>(
"randomise_lines", randomise_lines_,
false);
81 private_nh_.param<
float>(
"alga_miss_rate", alga_miss_rate_, 0.0);
82 private_nh_.param<
float>(
"phi_lines", phi_lines_, 0.0);
83 private_nh_.param<
float>(
"theta_lines", theta_lines_, 0.0);
84 private_nh_.param<
float>(
"bnd_phi_lines", bnd_phi_lines_, 0.3);
85 private_nh_.param<
float>(
"bnd_theta_lines", bnd_theta_lines_, 0.3);
86 private_nh_.param<
float>(
"bnd_gamma_lines", bnd_gamma_lines_, 0.3);
88 private_nh_.param<
bool>(
"randomise_algae", randomise_algae_,
false);
89 private_nh_.param<
int>(
"nbr_algae", nbr_algae_, 1);
90 private_nh_.param<
float>(
"width_algae", width_algae_, 0.2);
91 private_nh_.param<
float>(
"length_algae", length_algae_, 1.0);
92 private_nh_.param<
float>(
"thickness_algae", thickness_algae_, 0.01);
93 private_nh_.param<
float>(
"psi_algae", psi_algae_, 0.0);
94 private_nh_.param<
float>(
"std_width_algae", std_width_algae_, 0.05);
95 private_nh_.param<
float>(
"std_length_algae", std_length_algae_, 0.2);
96 private_nh_.param<
float>(
"std_psi_algae", std_psi_algae_, 0.1);
98 private_nh_.param<
bool>(
"disp_disease", disp_disease_,
false);
99 private_nh_.param<
float>(
"disease_ratio", disease_ratio_, 0.5);
100 private_nh_.param<
int>(
"height_disease_heatmap", height_disease_heatmap_, 30);
101 private_nh_.param<
int>(
"width_disease_heatmap", width_disease_heatmap_, 10);
102 private_nh_.param<
int>(
"height_grid_heatmap", height_grid_heatmap_, 6);
103 private_nh_.param<
int>(
"width_grid_heatmap", width_grid_heatmap_, 2);
108 if (random_seed_ == 0)
109 random_generator_ = mt19937(random_device_());
112 random_generator_ = mt19937(random_seed_);
116 algae_pub_ = private_nh_.advertise<mf_farm_simulator::Algae>(
"algae", 0);
117 rviz_pub_ = nh_.advertise<visualization_msgs::MarkerArray>(
"farm_markers", 0);
120 init_timer_ = private_nh_.createTimer(
121 ros::Duration(0), &FarmNodelet::init_cb,
this,
true 126 main_timer_ = private_nh_.createTimer(
127 ros::Duration(1/main_loop_freq_), &FarmNodelet::main_cb,
this 132 void FarmNodelet::main_cb(
const ros::TimerEvent &timer_event)
134 if (!ros::ok() || ros::isShuttingDown() || b_sigint_)
138 pub_rviz_markers(1/main_loop_freq_);
144 void FarmNodelet::sigint_handler(
int s) {
153 void FarmNodelet::reconfigure_cb(mf_farm_simulator::FarmSimulatorConfig &config,
156 if (reconfigure_initialised_) {
157 randomise_lines_ = config.randomise_lines;
158 phi_lines_ = config.phi_lines;
159 theta_lines_ = config.theta_lines;
160 bnd_phi_lines_ = config.bnd_phi_lines;
161 bnd_theta_lines_ = config.bnd_theta_lines;
162 bnd_gamma_lines_ = config.bnd_gamma_lines;
163 disp_disease_ = config.disp_disease;
167 reconfigure_initialised_ =
true;
171 void FarmNodelet::init_cb(
const ros::TimerEvent &timer_event)
178 void FarmNodelet::init_algae_lines()
180 algae_lines_.resize(0);
181 algae_lines_.reserve(nbr_lines_);
183 for (
unsigned int i = 0; i < nbr_lines_; i++) {
186 init_anchors(line, i);
192 algae_lines_.emplace_back(line);
float buoys_diameter
Diameter of a buoy.
Declaration of common structures and functions for farm simulator.
Declaration of common Rviz display functions.
Declaration of nodelet for managing the farm simulation.
unsigned int nbr_buoys
Number of buoys on the floating rope.
Line on which algae grow.
Nodelet class for farm simulation.