Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions config/perception/vehicle.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@ perception:

#FOV trimming
apply_rotation: false
rotation: 2.736
rotation: 90.0
apply_fov_trimming: false
fov: 180.0 #ATTENTION: If fov trimming not applied, leave at 180 degrees
min_range: 2.0
max_height: 3.0
is_raining: false
minimum_intensity: 1.0 # Only aplied when is_raining is true

#TRACKDRIVE/AUTOCROSS TRIMMING
max_range: 40.0
Expand All @@ -28,7 +30,6 @@ perception:

#SKIDPAD TRIMMING
skid_max_range: 40.0

#Ground Grid
ground_grid_range: 40.0 #ATTENTION: Should be >= all max_ranges
ground_grid_angle: 4.5
Expand Down Expand Up @@ -72,7 +73,7 @@ perception:
max_distance_from_ground_max: 0.90 # max distance form the ground of the highest point in the cluster
n_points_intial_max: 50
n_points_intial_min: 4
n_points_max_distance_reduction: 1.5
n_points_max_distance_reduction: 1.0
n_points_min_distance_reduction: 0.15

#ICP
Expand Down
2 changes: 1 addition & 1 deletion ext/gtsam
Submodule gtsam updated 2700 files
9 changes: 3 additions & 6 deletions src/common_lib/include/common_lib/communication/marker.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@

#include "common_lib/structures/cone.hpp"
#include "common_lib/structures/path_point.hpp"
#include "common_lib/structures/position.hpp"
#include "rclcpp/clock.hpp"
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/color_rgba.hpp"
#include "visualization_msgs/msg/marker.hpp"
#include "visualization_msgs/msg/marker_array.hpp"
#include "common_lib/structures/position.hpp"

using K = CGAL::Exact_predicates_inexact_constructions_kernel;
using Point = K::Point_2;
Expand Down Expand Up @@ -250,9 +250,6 @@ visualization_msgs::msg::Marker lines_marker_from_triangulations(
* @return visualization_msgs::msg::MarkerArray
*/
visualization_msgs::msg::MarkerArray velocity_hover_markers(
const std::vector<common_lib::structures::PathPoint>& path_array,
const std::string& name_space,
const std::string& frame_id,
float scale = 0.2f,
int every_nth = 1);
const std::vector<common_lib::structures::PathPoint>& path_array, const std::string& name_space,
const std::string& frame_id, float scale = 0.2f, int every_nth = 1);
} // namespace common_lib::communication
2 changes: 1 addition & 1 deletion src/perception/include/fov_trimming/fov_trimming.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class FovTrimming {
virtual void fov_trimming(const sensor_msgs::msg::PointCloud2::SharedPtr& point_cloud,
sensor_msgs::msg::PointCloud2::SharedPtr& trimmed_cloud) const = 0;

bool within_limits(float x, float y, float z, const TrimmingParameters& params,
bool within_limits(float x, float y, float z, float intensity, const TrimmingParameters& params,
const double max_range) const;

protected:
Expand Down
16 changes: 9 additions & 7 deletions src/perception/include/utils/trimming_parameters.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,16 @@ struct TrimmingParameters {
double lidar_vertical_resolution; ///< LIDAR vertical resolution.
bool apply_rotation; ///< Whether to apply rotation to the point cloud.
double rotation; ///< Rotation angle to be applied to the point cloud.
bool apply_fov_trimming; ///< Whether to apply field of view trimming.
bool apply_fov_trimming; ///< Whether to apply field of view trimming.
double fov; ///< Field of view.
double max_height; ///< Maximum point cloud height after trimming.
double min_range; ///< Maximum point cloud distance after trimming.
double max_range; ///< Minimum point cloud distance after trimming.
double acc_max_range; ///< (Acceleration Only) Maximum distance after trimming.
double acc_max_y; ///< (Acceleration Only) Maximum lateral distance after trimming.
double skid_max_range; ///< (Skidpad Only) Maximum distance after trimming.
bool is_raining; ///< Whether it is raining.
float minimum_intensity; ///< Minimum intensity for point to be considered valid in rain.
double max_height; ///< Maximum point cloud height after trimming.
double min_range; ///< Maximum point cloud distance after trimming.
double max_range; ///< Minimum point cloud distance after trimming.
double acc_max_range; ///< (Acceleration Only) Maximum distance after trimming.
double acc_max_y; ///< (Acceleration Only) Maximum lateral distance after trimming.
double skid_max_range; ///< (Skidpad Only) Maximum distance after trimming.

TrimmingParameters() = default;
};
3 changes: 2 additions & 1 deletion src/perception/src/fov_trimming/acceleration_trimming.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ void AccelerationTrimming::fov_trimming(
const float x = *reinterpret_cast<const float*>(&data[LidarPoint::PointX(i)]);
const float y = *reinterpret_cast<const float*>(&data[LidarPoint::PointY(i)]);
const float z = *reinterpret_cast<const float*>(&data[LidarPoint::PointZ(i)]);
const float intensity = *reinterpret_cast<const float*>(&data[LidarPoint::PointIntensity(i)]);

if (x == 0.0f && y == 0.0f && z == 0.0f) {
continue;
Expand All @@ -49,7 +50,7 @@ void AccelerationTrimming::fov_trimming(
}

if (ry < params_.acc_max_y && ry > -params_.acc_max_y &&
within_limits(rx, ry, z, params_, params_.acc_max_range)) {
within_limits(rx, ry, z, intensity, params_, params_.acc_max_range)) {
uint8_t* out = &trimmed_cloud->data[trimmed_cloud->width * LidarPoint::POINT_STEP];

std::memcpy(out, &data[LidarPoint::PointX(i)], LidarPoint::POINT_STEP);
Expand Down
3 changes: 2 additions & 1 deletion src/perception/src/fov_trimming/cut_trimming.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ void CutTrimming::fov_trimming(const sensor_msgs::msg::PointCloud2::SharedPtr& c
const float x = *reinterpret_cast<const float*>(&data[LidarPoint::PointX(i)]);
const float y = *reinterpret_cast<const float*>(&data[LidarPoint::PointY(i)]);
const float z = *reinterpret_cast<const float*>(&data[LidarPoint::PointZ(i)]);
const float intensity = *reinterpret_cast<const float*>(&data[LidarPoint::PointIntensity(i)]);

// Skip invalid points
if (x == 0.0f && y == 0.0f && z == 0.0f) {
Expand All @@ -47,7 +48,7 @@ void CutTrimming::fov_trimming(const sensor_msgs::msg::PointCloud2::SharedPtr& c
ry = static_cast<float>(x * sin_t + y * cos_t);
}

if (within_limits(rx, ry, z, params_, params_.max_range)) {
if (within_limits(rx, ry, z, intensity, params_, params_.max_range)) {
uint8_t* out = &trimmed_cloud->data[trimmed_cloud->width * LidarPoint::POINT_STEP];

std::memcpy(out, &data[LidarPoint::PointX(i)], LidarPoint::POINT_STEP);
Expand Down
11 changes: 9 additions & 2 deletions src/perception/src/fov_trimming/fov_trimming.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include "fov_trimming/fov_trimming.hpp"

bool FovTrimming::within_limits(float x, float y, float z, const TrimmingParameters& params,
const double max_range) const {
bool FovTrimming::within_limits(float x, float y, float z, float intensity,
const TrimmingParameters& params, const double max_range) const {
bool ret = true;

if (params.apply_fov_trimming) {
Expand All @@ -18,5 +18,12 @@ bool FovTrimming::within_limits(float x, float y, float z, const TrimmingParamet
ret &= (distance_squared > params.min_range * params.min_range) &&
(distance_squared <= max_range * max_range);

if (params.is_raining) {
// In rainy conditions, the intensity must be at greater or equal to 1 to be considered valid,
// as the water droplets cause 0 intensity points. It is not applied in normal conditions to
// preserve more points, as a lot of cone points have low intensity.
ret &= intensity >= params.minimum_intensity;
}

return ret;
}
3 changes: 2 additions & 1 deletion src/perception/src/fov_trimming/skidpad_trimming.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ void SkidpadTrimming::fov_trimming(const sensor_msgs::msg::PointCloud2::SharedPt
const float x = *reinterpret_cast<const float*>(&data[LidarPoint::PointX(i)]);
const float y = *reinterpret_cast<const float*>(&data[LidarPoint::PointY(i)]);
const float z = *reinterpret_cast<const float*>(&data[LidarPoint::PointZ(i)]);
const float intensity = *reinterpret_cast<const float*>(&data[LidarPoint::PointIntensity(i)]);

// Skip invalid points
if (x == 0.0f && y == 0.0f && z == 0.0f) {
Expand All @@ -45,7 +46,7 @@ void SkidpadTrimming::fov_trimming(const sensor_msgs::msg::PointCloud2::SharedPt
ry = static_cast<float>(x * sin_t + y * cos_t);
}

if (within_limits(rx, ry, z, params_, params_.skid_max_range)) {
if (within_limits(rx, ry, z, intensity, params_, params_.skid_max_range)) {
uint8_t* out = &trimmed_cloud->data[trimmed_cloud->width * LidarPoint::POINT_STEP];

std::memcpy(out, &data[LidarPoint::PointX(i)], LidarPoint::POINT_STEP);
Expand Down
9 changes: 5 additions & 4 deletions src/perception/src/ground_removal/himmelsbach.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,11 @@ void Himmelsbach::process_slice(

float current_ground_point_distance = std::hypot(pt_x, pt_y);

if (current_ground_point_distance - previous_ground_point_distance <
(-5 - (0.15 * ring_idx)) ||
current_ground_point_distance - previous_ground_point_distance >
(5 + (0.15 * ring_idx))) {
if (!this->trim_params_.is_raining &&
(current_ground_point_distance - previous_ground_point_distance <
(-5 - (0.15 * ring_idx)) ||
current_ground_point_distance - previous_ground_point_distance >
(5 + (0.15 * ring_idx)))) {
// It is noise, ignore
continue;
} else if (current_ground_point_distance <= previous_ground_point_distance) {
Expand Down
2 changes: 2 additions & 0 deletions src/perception/src/perception/perception_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ PerceptionParameters Perception::load_config() {
trim_params.rotation = perception_config["rotation"].as<double>();
trim_params.apply_fov_trimming = perception_config["apply_fov_trimming"].as<bool>();
trim_params.fov = perception_config["fov"].as<double>();
trim_params.is_raining = perception_config["is_raining"].as<bool>();
trim_params.minimum_intensity = perception_config["minimum_intensity"].as<float>();

auto acceleration_trimming = std::make_shared<AccelerationTrimming>(trim_params);
auto skidpad_trimming = std::make_shared<SkidpadTrimming>(trim_params);
Expand Down