@@ -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" ) ?,
0 commit comments