Implements a particle filter for tracking multiple targets.
More...
#include <particle_filter.hpp>
|
| | MultiTargetParticleFilter (size_t num_particles=500, double initial_max_speed=20.0) |
| | Construct a new Multi Target Particle Filter object.
|
| |
| void | initialize (std::shared_ptr< grid_map::GridMap > map_ptr) |
| | Initialize multi-target particle filter.
|
| |
| void | predict (double dt) |
| | Predict the new (x,y) position and course of each particle.
|
| |
| void | updateWeights (std::shared_ptr< grid_map::GridMap > map_ptr, std::shared_ptr< grid_map::GridMap > stats_ptr, double dt) |
| | Update particle weights using the Euclidean distance transform, exponential decay, and density feedback.
|
| |
| void | addResampleNoise (Target &particle) |
| | Add Gaussian noise to a particle's position, yaw, yaw rate, and speed.
|
| |
| void | resample (std::shared_ptr< grid_map::GridMap > map_ptr, std::shared_ptr< grid_map::GridMap > stats_ptr, double dt) |
| | Perform systematic resampling of existing particles and inject new random particles.
|
| |
| std::vector< grid_map::Position > | getValidPositionsFromMap (const std::shared_ptr< grid_map::GridMap > &map_ptr) |
| | Get valid positions from the grid map.
|
| |
| void | seedUniform (const std::vector< grid_map::Position > &valid_positions, size_t n_seed, std::vector< Target > &output_particles) |
| | Seeds particles uniformly from a list of valid positions in the grid map.
|
| |
| void | seedWeighted (const std::vector< grid_map::Position > &valid_positions, size_t n_seed, const std::shared_ptr< grid_map::GridMap > &stats_ptr, std::vector< Target > &output_particles) |
| | Seed particles weighted by grid map particle density.
|
| |
| void | updateNoiseDistributions () |
| | Update the noise distributions for particle motion used in the predict step.
|
| |
| const std::vector< Target > & | getParticles () |
| | Get particles.
|
| |
Implements a particle filter for tracking multiple targets.
◆ MultiTargetParticleFilter()
| NS_HEAD MultiTargetParticleFilter::MultiTargetParticleFilter |
( |
size_t | num_particles = 500, |
|
|
double | initial_max_speed = 20.0 ) |
|
explicit |
Construct a new Multi Target Particle Filter object.
- Parameters
-
| num_particles | Number of particles to use to initialize the particle filter (default: 500 particles). |
| initial_max_speed | Initial maximum speed of particles (default: 20.0 m/s). |
Copyright © 2025 Seaward Science.
◆ addResampleNoise()
| void MultiTargetParticleFilter::addResampleNoise |
( |
Target & | particle | ) |
|
Add Gaussian noise to a particle's position, yaw, yaw rate, and speed.
This function modifies the particle in place by adding Gaussian noise to its position, yaw angle, yaw rate, and speed based on the defined noise distributions.
- Parameters
-
| particle | Reference to the particle to which noise will be added. |
◆ getParticles()
| const std::vector< Target > & MultiTargetParticleFilter::getParticles |
( |
| ) |
|
Get particles.
- Returns
- const std::vector<Target>& Vector of particles on target.
◆ getValidPositionsFromMap()
| std::vector< grid_map::Position > MultiTargetParticleFilter::getValidPositionsFromMap |
( |
const std::shared_ptr< grid_map::GridMap > & | map_ptr | ) |
|
Get valid positions from the grid map.
Returns a vector of positions where the grid map has valid data (i.e., where radar intensity > 0). This is used for seeding new particles.
- Parameters
-
| map_ptr | Shared pointer to GridMap with radar intensity-based targets to track. |
- Returns
- std::vector<grid_map::Position> Vector of valid positions.
◆ initialize()
| void MultiTargetParticleFilter::initialize |
( |
std::shared_ptr< grid_map::GridMap > | map_ptr | ) |
|
Initialize multi-target particle filter.
Spawns particles with random positions and course angles around radar returns (i.e. anywhere in grid map where radar intensity > 0).
- Parameters
-
| map_ptr | Shared pointer to GridMap with radar intensity-based targets to track. |
◆ predict()
| void MultiTargetParticleFilter::predict |
( |
double | dt | ) |
|
Predict the new (x,y) position and course of each particle.
- Parameters
-
| dt | Time interval (delta t) from last particle filter update step. |
◆ resample()
| void MultiTargetParticleFilter::resample |
( |
std::shared_ptr< grid_map::GridMap > | map_ptr, |
|
|
std::shared_ptr< grid_map::GridMap > | stats_ptr, |
|
|
double | dt ) |
Perform systematic resampling of existing particles and inject new random particles.
This method replaces the current particle set by:
- Systematic resampling of (N - M) particles, drawn proportional to their weights, adding Gaussian noise to position, heading and speed (via addResampleNoise), preserving each particle’s age, and resetting its weight to (1/N).
- Injection of new particles at valid positions from
map_ptr. Positions are chosen with probability proportional to the inverse local density (from the “particles_per_cell” layer of stats_ptr) to encourage seeding in less crowded areas i.e. new radar targets.
- New particles receive:
- random speed ∈ [0, initial_max_speed_]
- random course ∈ [0, 2π)
- zero yaw_rate
- weight = (1/N)
- age = 0
- Parameters
-
| map_ptr | Shared pointer to GridMap with radar intensity-based targets to track. |
| stats_ptr | Shared pointer to GridMap with particle statistics. |
| dt | Time interval (delta t) from last particle filter update step. |
◆ seedUniform()
| void MultiTargetParticleFilter::seedUniform |
( |
const std::vector< grid_map::Position > & | valid_positions, |
|
|
size_t | n_seed, |
|
|
std::vector< Target > & | output_particles ) |
Seeds particles uniformly from a list of valid positions in the grid map.
- Parameters
-
| valid_positions | List of valid positions from the grid map where particles can be seeded. |
| n_seed | Number of particles to seed. |
| output_particles | Vector to store the seeded particles. |
◆ seedWeighted()
| void MultiTargetParticleFilter::seedWeighted |
( |
const std::vector< grid_map::Position > & | valid_positions, |
|
|
size_t | n_seed, |
|
|
const std::shared_ptr< grid_map::GridMap > & | stats_ptr, |
|
|
std::vector< Target > & | output_particles ) |
Seed particles weighted by grid map particle density.
Preferentially seeds particles in areas of lower density using an inverse weight function for particle density.
- Parameters
-
| valid_positions | List of valid positions from the grid map where particles can be seeded. |
| n_seed | Number of particles to seed. |
| stats_ptr | Shared pointer to the grid map containing statistics for particle density. |
| output_particles | Vector to store the seeded particles. |
◆ updateNoiseDistributions()
| void MultiTargetParticleFilter::updateNoiseDistributions |
( |
| ) |
|
Update the noise distributions for particle motion used in the predict step.
◆ updateWeights()
| void MultiTargetParticleFilter::updateWeights |
( |
std::shared_ptr< grid_map::GridMap > | map_ptr, |
|
|
std::shared_ptr< grid_map::GridMap > | stats_ptr, |
|
|
double | dt ) |
Update particle weights using the Euclidean distance transform, exponential decay, and density feedback.
For each particle:
- Computes a new observation likelihood from the "edt" layer of
map_ptr: If outside the map or missing layer, a small baseline of 1e-6 is used.
- Updates
particle.obs_likelihood:
- If the new likelihood exceeds the previous, it is replaced.
- Otherwise, the previous likelihood is multiplied by the decay factor
- Sets
particle.weight = std::max(particle.obs_likelihood, 1e-8).
- Retrieves local density from the "particles_per_cell" layer and applies a logistic penalty multiplying
particle.weight by this factor. After processing all particles, normalizes their weights so that their sum equals 1.
- Parameters
-
| map_ptr | Shared pointer to GridMap with radar intensity-based targets to track. |
| stats_ptr | Shared pointer to GridMap with particle statistics. |
| dt | Time interval (delta t) from last particle filter update step. |
◆ density_feedback_factor_
| double echoflow::MultiTargetParticleFilter::density_feedback_factor_ |
Density (particles/m^2) at which the weight of a particle will be reduced by half.
◆ noise_std_position_
| double echoflow::MultiTargetParticleFilter::noise_std_position_ |
Standard deviation for position noise.
◆ noise_std_speed_
| double echoflow::MultiTargetParticleFilter::noise_std_speed_ |
Standard deviation for speed noise.
◆ noise_std_yaw_
| double echoflow::MultiTargetParticleFilter::noise_std_yaw_ |
Standard deviation for yaw noise.
◆ noise_std_yaw_rate_
| double echoflow::MultiTargetParticleFilter::noise_std_yaw_rate_ |
Standard deviation for yaw rate noise.
◆ observation_sigma_
| double echoflow::MultiTargetParticleFilter::observation_sigma_ |
Standard deviation for Gaussian weight function.
◆ seed_fraction_
| double echoflow::MultiTargetParticleFilter::seed_fraction_ |
Fraction of particles to be seeded with random positions.
◆ weight_decay_half_life_
| double echoflow::MultiTargetParticleFilter::weight_decay_half_life_ |
Half-life for exponential decay of particle weights.
The documentation for this class was generated from the following files: