Skip to content

Commit c1687b6

Browse files
authored
Dynamic line measurement noise (#2071)
1 parent 6ff1737 commit c1687b6

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

crates/control/src/localization.rs

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ use types::{
2828
multivariate_normal_distribution::MultivariateNormalDistribution,
2929
players::Players,
3030
primary_state::PrimaryState,
31+
sensor_data::SensorData,
3132
stand_up::RemainingStandUpDuration,
3233
support_foot::Side,
3334
};
@@ -57,6 +58,7 @@ pub struct CycleContext {
5758
AdditionalOutput<Vec<LineSegment<Field>>, "localization.measured_lines_in_field">,
5859
pose_hypotheses: AdditionalOutput<Vec<ScoredPose>, "localization.pose_hypotheses">,
5960
updates: AdditionalOutput<Vec<Vec<Update>>, "localization.updates">,
61+
gyro_movement: AdditionalOutput<f32, "localization.gyro_movement">,
6062

6163
current_odometry_to_last_odometry:
6264
HistoricInput<Option<nalgebra::Isometry2<f32>>, "current_odometry_to_last_odometry?">,
@@ -66,6 +68,7 @@ pub struct CycleContext {
6668
has_ground_contact: Input<bool, "has_ground_contact">,
6769
primary_state: Input<PrimaryState, "primary_state">,
6870
fall_state: Input<FallState, "fall_state">,
71+
sensor_data: Input<SensorData, "sensor_data">,
6972

7073
circle_measurement_noise: Parameter<Vector2<f32>, "localization.circle_measurement_noise">,
7174
field_dimensions: Parameter<FieldDimensions, "field_dimensions">,
@@ -82,6 +85,10 @@ pub struct CycleContext {
8285
initial_poses: Parameter<Players<InitialPose>, "localization.initial_poses">,
8386
line_length_acceptance_factor: Parameter<f32, "localization.line_length_acceptance_factor">,
8487
line_measurement_noise: Parameter<Vector2<f32>, "localization.line_measurement_noise">,
88+
additional_moving_noise_line:
89+
Parameter<Vector2<f32>, "localization.additional_moving_noise_line">,
90+
additional_moving_noise_circle:
91+
Parameter<Vector2<f32>, "localization.additional_moving_noise_circle">,
8592
maximum_amount_of_gradient_descent_iterations:
8693
Parameter<usize, "localization.maximum_amount_of_gradient_descent_iterations">,
8794
maximum_amount_of_outer_iterations:
@@ -320,6 +327,21 @@ impl Localization {
320327
.updates
321328
.fill_if_subscribed(|| vec![vec![]; self.hypotheses.len()]);
322329

330+
let gyro_movement = context
331+
.sensor_data
332+
.inertial_measurement_unit
333+
.angular_velocity
334+
.norm();
335+
context.gyro_movement.fill_if_subscribed(|| gyro_movement);
336+
let line_measurement_noise = Matrix::from_diagonal(
337+
&(context.line_measurement_noise
338+
+ context.additional_moving_noise_line * gyro_movement),
339+
);
340+
let circle_measurement_noise = Matrix::from_diagonal(
341+
&(context.circle_measurement_noise
342+
+ context.additional_moving_noise_circle * gyro_movement),
343+
);
344+
323345
let line_data = context
324346
.line_data_top
325347
.persistent
@@ -491,8 +513,7 @@ impl Localization {
491513
.state
492514
.update_with_1d_translation_and_rotation(
493515
update,
494-
Matrix::from_diagonal(context.line_measurement_noise)
495-
* uncertainty_weight,
516+
line_measurement_noise * uncertainty_weight,
496517
|state| match direction {
497518
Direction::PositiveX => {
498519
nalgebra::vector![state.y, state.z]
@@ -507,8 +528,7 @@ impl Localization {
507528
.state
508529
.update_with_2d_translation(
509530
update,
510-
Matrix::from_diagonal(context.circle_measurement_noise)
511-
* uncertainty_weight,
531+
circle_measurement_noise * uncertainty_weight,
512532
|state| nalgebra::vector![state.x, state.y],
513533
)
514534
.context("Failed to update pose filter")?,

etc/parameters/default.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,8 @@
686686
]
687687
},
688688
"localization": {
689-
"circle_measurement_noise": [1000.0, 1000.0],
689+
"circle_measurement_noise": [600.0, 600.0],
690+
"additional_moving_noise_circle": [600.0, 600.0],
690691
"gradient_convergence_threshold": 1e-2,
691692
"gradient_descent_step_size": 0.01,
692693
"hypothesis_prediction_score_reduction_factor": 0.9,
@@ -726,7 +727,8 @@
726727
}
727728
},
728729
"line_length_acceptance_factor": 1.5,
729-
"line_measurement_noise": [800.0, 320.0],
730+
"line_measurement_noise": [600.0, 100.0],
731+
"additional_moving_noise_line": [600.0, 200.0],
730732
"maximum_amount_of_gradient_descent_iterations": 20,
731733
"maximum_amount_of_outer_iterations": 10,
732734
"minimum_fit_error": 0.001,

0 commit comments

Comments
 (0)