29 super().
__init__(
"data_infrastructure_node")
31 self.get_logger().info(
"Subscribing the publishers.")
33 self.create_subscription(
36 self.create_subscription(
40 self.create_subscription(
43 self.create_subscription(
46 self.create_subscription(
49 self.create_subscription(
53 self.create_subscription(
56 self.create_subscription(
59 self.create_subscription(
62 self.create_subscription(
64 "/state_estimation/visualization_map_perception",
68 self.create_subscription(
71 self.create_subscription(
73 "/state_estimation/slam_execution_time",
77 self.create_subscription(
79 "/state_estimation/slam_covariance",
83 self.create_subscription(
87 self.create_subscription(
93 ControlParameters,
"data_infrastructure/control_parameters", 10
96 PerceptionParameters,
"data_infrastructure/perception_parameters", 10
99 PlanningParameters,
"data_infrastructure/planning_parameters", 10
102 SlamParameters,
"data_infrastructure/slam_parameters", 10
105 VelocityEstimationParameters,
106 "data_infrastructure/velocity_estimation_parameters",
120 control_msg = ControlParameters()
121 parameters = self.
load_yaml(CONTROL_PATH,
"control")
122 control_msg.lookahead_gain = float(parameters.get(
"lookahead_gain", 0.0))
123 control_msg.pid_kp = float(parameters.get(
"pid_kp", 0.0))
124 control_msg.pid_ki = float(parameters.get(
"pid_ki", 0.0))
125 control_msg.pid_kd = float(parameters.get(
"pid_kd", 0.0))
126 control_msg.pid_tau = float(parameters.get(
"pid_tau", 0.0))
127 control_msg.pid_t = float(parameters.get(
"pid_t", 0.0))
128 control_msg.pid_lim_min = float(parameters.get(
"pid_lim_min", 0.0))
129 control_msg.pid_lim_max = float(parameters.get(
"pid_lim_max", 0.0))
130 control_msg.pid_anti_windup = float(parameters.get(
"pid_anti_windup", 0.0))
131 control_msg.lpf_alpha = float(parameters.get(
"lpf_alpha", 0.0))
132 control_msg.lpf_initial_value = float(parameters.get(
"lpf_initial_value", 0.0))
136 perception_msg = PerceptionParameters()
137 parameters = self.
load_yaml(PERCEPTION_PATH,
"perception")
140 perception_msg.horizontal_resolution = float(
141 parameters.get(
"horizontal_resolution", 0.0)
143 perception_msg.vertical_resolution = float(
144 parameters.get(
"vertical_resolution", 0.0)
146 perception_msg.default_mission = parameters.get(
"default_mission",
"")
149 perception_msg.lidar_height = float(parameters.get(
"lidar_height", 0.0))
150 perception_msg.lidar_rotation = float(parameters.get(
"lidar_rotation", 0.0))
151 perception_msg.lidar_pitch = float(parameters.get(
"lidar_pitch", 0.0))
152 perception_msg.min_range = float(parameters.get(
"min_range", 0.0))
153 perception_msg.max_height = float(parameters.get(
"max_height", 0.0))
156 perception_msg.max_range = float(parameters.get(
"max_range", 0.0))
157 perception_msg.fov_trim_angle = float(parameters.get(
"fov_trim_angle", 0.0))
160 perception_msg.acc_max_range = float(parameters.get(
"acc_max_range", 0.0))
161 perception_msg.acc_fov_trim_angle = float(
162 parameters.get(
"acc_fov_trim_angle", 0.0)
164 perception_msg.acc_max_y = float(parameters.get(
"acc_max_y", 0.0))
167 perception_msg.skid_max_range = float(parameters.get(
"skid_max_range", 0.0))
168 perception_msg.skid_min_distance_to_cone = float(
169 parameters.get(
"skid_min_distance_to_cone", 0.0)
173 perception_msg.ground_removal = parameters.get(
"ground_removal",
"")
174 perception_msg.ransac_epsilon = float(parameters.get(
"ransac_epsilon", 0.0))
175 perception_msg.ransac_iterations = int(parameters.get(
"ransac_iterations", 0))
178 perception_msg.n_angular_grids = int(parameters.get(
"n_angular_grids", 0))
179 perception_msg.radius_resolution = float(
180 parameters.get(
"radius_resolution", 0.0)
184 perception_msg.acc_n_angular_grids = int(
185 parameters.get(
"acc_n_angular_grids", 0)
187 perception_msg.acc_radius_resolution = float(
188 parameters.get(
"acc_radius_resolution", 0.0)
192 perception_msg.skid_n_angular_grids = int(
193 parameters.get(
"skid_n_angular_grids", 0)
195 perception_msg.skid_radius_resolution = float(
196 parameters.get(
"skid_radius_resolution", 0.0)
200 perception_msg.clustering_n_neighbours = int(
201 parameters.get(
"clustering_n_neighbours", 0)
203 perception_msg.clustering_epsilon = float(
204 parameters.get(
"clustering_epsilon", 0.0)
208 perception_msg.min_height = float(parameters.get(
"min_height", 0.0))
209 perception_msg.large_max_height = float(parameters.get(
"large_max_height", 0.0))
210 perception_msg.small_max_height = float(parameters.get(
"small_max_height", 0.0))
211 perception_msg.height_cap = float(parameters.get(
"height_cap", 0.0))
212 perception_msg.min_xoy = float(parameters.get(
"min_xoy", 0.0))
213 perception_msg.max_xoy = float(parameters.get(
"max_xoy", 0.0))
214 perception_msg.min_z = float(parameters.get(
"min_z", 0.0))
215 perception_msg.max_z = float(parameters.get(
"max_z", 0.0))
216 perception_msg.min_z_score_x = float(parameters.get(
"min_z_score_x", 0.0))
217 perception_msg.max_z_score_x = float(parameters.get(
"max_z_score_x", 0.0))
218 perception_msg.min_z_score_y = float(parameters.get(
"min_z_score_y", 0.0))
219 perception_msg.max_z_score_y = float(parameters.get(
"max_z_score_y", 0.0))
220 perception_msg.out_distance_cap = float(parameters.get(
"out_distance_cap", 0.0))
221 perception_msg.min_distance_x = float(parameters.get(
"min_distance_x", 0.0))
222 perception_msg.min_distance_y = float(parameters.get(
"min_distance_y", 0.0))
223 perception_msg.min_distance_z = float(parameters.get(
"min_distance_z", 0.0))
224 perception_msg.min_n_points = int(parameters.get(
"min_n_points", 0))
225 perception_msg.min_confidence = float(parameters.get(
"min_confidence", 0.0))
226 perception_msg.height_out_weight = float(
227 parameters.get(
"height_out_weight", 0.0)
229 perception_msg.height_in_weight = float(parameters.get(
"height_in_weight", 0.0))
230 perception_msg.cylinder_radius_weight = float(
231 parameters.get(
"cylinder_radius_weight", 0.0)
233 perception_msg.cylinder_height_weight = float(
234 parameters.get(
"cylinder_height_weight", 0.0)
236 perception_msg.cylinder_npoints_weight = float(
237 parameters.get(
"cylinder_npoints_weight", 0.0)
239 perception_msg.npoints_weight = float(parameters.get(
"npoints_weight", 0.0))
240 perception_msg.displacement_x_weight = float(
241 parameters.get(
"displacement_x_weight", 0.0)
243 perception_msg.displacement_y_weight = float(
244 parameters.get(
"displacement_y_weight", 0.0)
246 perception_msg.displacement_z_weight = float(
247 parameters.get(
"displacement_z_weight", 0.0)
249 perception_msg.deviation_xoy_weight = float(
250 parameters.get(
"deviation_xoy_weight", 0.0)
252 perception_msg.deviation_z_weight = float(
253 parameters.get(
"deviation_z_weight", 0.0)
258 planning_msg = PlanningParameters()
259 parameters = self.
load_yaml(PLANNING_PATH,
"planning")
260 planning_msg.nc_angle_gain = float(parameters.get(
"nc_angle_gain", 0.0))
261 planning_msg.nc_distance_gain = float(parameters.get(
"nc_distance_gain", 0.0))
262 planning_msg.nc_angle_exponent = float(parameters.get(
"nc_angle_exponent", 0.0))
263 planning_msg.nc_distance_exponent = float(
264 parameters.get(
"nc_distance_exponent", 0.0)
266 planning_msg.nc_max_cost = float(parameters.get(
"nc_max_cost", 0.0))
267 planning_msg.nc_search_depth = int(parameters.get(
"nc_search_depth", 0))
268 planning_msg.nc_max_points = int(parameters.get(
"nc_max_points", 0))
269 planning_msg.outliers_spline_order = int(
270 parameters.get(
"outliers_spline_order", 0)
272 planning_msg.outliers_spline_coeffs_ratio = float(
273 parameters.get(
"outliers_spline_coeffs_ratio", 0.0)
275 planning_msg.outliers_spline_precision = int(
276 parameters.get(
"outliers_spline_precision", 0)
278 planning_msg.path_calculation_dist_threshold = float(
279 parameters.get(
"path_calculation_dist_threshold", 0.0)
281 planning_msg.smoothing_spline_order = int(
282 parameters.get(
"smoothing_spline_order", 0)
284 planning_msg.smoothing_spline_coeffs_ratio = float(
285 parameters.get(
"smoothing_spline_coeffs_ratio", 0.0)
287 planning_msg.smoothing_spline_precision = int(
288 parameters.get(
"smoothing_spline_precision", 0)
290 planning_msg.publishing_visualization_msg = bool(
291 parameters.get(
"publishing_visualization_msg",
False)
293 planning_msg.desired_velocity = float(parameters.get(
"desired_velocity", 0.0))
294 planning_msg.use_outlier_removal = bool(
295 parameters.get(
"use_outlier_removal",
False)
297 planning_msg.use_path_smoothing = bool(
298 parameters.get(
"use_path_smoothing",
False)
300 planning_msg.minimum_velocity = float(parameters.get(
"minimum_velocity", 0.0))
301 planning_msg.braking_acceleration = float(
302 parameters.get(
"braking_acceleration", 0.0)
304 planning_msg.normal_acceleration = float(
305 parameters.get(
"normal_acceleration", 0.0)
307 planning_msg.use_velocity_planning = bool(
308 parameters.get(
"use_velocity_planning",
False)
313 slam_msg = SlamParameters()
314 parameters = self.
load_yaml(SLAM_PATH,
"slam")
315 slam_msg.motion_model_name = parameters.get(
"motion_model_name",
"")
316 slam_msg.landmark_filter_name = parameters.get(
"landmark_filter_name",
"")
317 slam_msg.data_association_model_name = parameters.get(
318 "data_association_model_name",
""
320 slam_msg.data_association_limit_distance = float(
321 parameters.get(
"data_association_limit_distance", 0.0)
323 slam_msg.data_association_gate = float(
324 parameters.get(
"data_association_gate", 0.0)
326 slam_msg.new_landmark_confidence_gate = float(
327 parameters.get(
"new_landmark_confidence_gate", 0.0)
329 slam_msg.observation_x_noise = float(parameters.get(
"observation_x_noise", 0.0))
330 slam_msg.observation_y_noise = float(parameters.get(
"observation_y_noise", 0.0))
331 slam_msg.velocity_x_noise = float(parameters.get(
"velocity_x_noise", 0.0))
332 slam_msg.velocity_y_noise = float(parameters.get(
"velocity_y_noise", 0.0))
333 slam_msg.angular_velocity_noise = float(
334 parameters.get(
"angular_velocity_noise", 0.0)
336 slam_msg.pose_x_initial_noise = float(
337 parameters.get(
"pose_x_initial_noise", 0.0)
339 slam_msg.pose_y_initial_noise = float(
340 parameters.get(
"pose_y_initial_noise", 0.0)
342 slam_msg.pose_theta_initial_noise = float(
343 parameters.get(
"pose_theta_initial_noise", 0.0)
345 slam_msg.slam_solver_name = parameters.get(
"slam_solver_name",
"")
346 slam_msg.minimum_observation_count = int(
347 parameters.get(
"minimum_observation_count", 0)
349 slam_msg.minimum_frequency_of_detections = int(
350 parameters.get(
"minimum_frequency_of_detections", 0)
352 slam_msg.slam_min_pose_difference = float(
353 parameters.get(
"slam_min_pose_difference", 0.0)
355 slam_msg.slam_optimization_mode = parameters.get(
"slam_optimization_mode",
"")
356 slam_msg.slam_optimization_type = parameters.get(
"slam_optimization_type",
"")
357 slam_msg.preloaded_map_noise = float(parameters.get(
"preloaded_map_noise", 0.0))
358 slam_msg.slam_optimization_period = float(
359 parameters.get(
"slam_optimization_period", 0.0)
361 slam_msg.slam_isam2_relinearize_threshold = float(
362 parameters.get(
"slam_isam2_relinearize_threshold", 0.0)
364 slam_msg.slam_isam2_relinearize_skip = int(
365 parameters.get(
"slam_isam2_relinearize_skip", 0)
367 slam_msg.slam_isam2_factorization = parameters.get(
368 "slam_isam2_factorization",
""
370 slam_msg.sliding_window_size = int(parameters.get(
"sliding_window_size", 0))
374 velocity_msg = VelocityEstimationParameters()
375 parameters = self.
load_yaml(VELOCITY_ESTIMATION_PATH,
"velocity_estimation")
376 velocity_msg.estimation_method = parameters.get(
"estimation_method",
"")
377 velocity_msg.ve_observation_model_name = parameters.get(
378 "ve_observation_model_name",
""
380 velocity_msg.process_model_name = parameters.get(
"process_model_name",
"")
381 velocity_msg.wheel_speed_noise = float(parameters.get(
"wheel_speed_noise", 0.0))
382 velocity_msg.motor_rpm_noise = float(parameters.get(
"motor_rpm_noise", 0.0))
383 velocity_msg.steering_angle_noise = float(
384 parameters.get(
"steering_angle_noise", 0.0)
386 velocity_msg.imu_acceleration_noise = float(
387 parameters.get(
"imu_acceleration_noise", 0.0)
389 velocity_msg.imu_rotational_noise = float(
390 parameters.get(
"imu_rotational_noise", 0.0)
392 velocity_msg.angular_velocity_process_noise = float(
393 parameters.get(
"angular_velocity_process_noise", 0.0)