@@ -80,12 +80,11 @@ impl SensorDataReceiver {
8080 let measured_angular_velocity = sensor_data. inertial_measurement_unit . angular_velocity ;
8181 let measured_acceleration = sensor_data. inertial_measurement_unit . linear_acceleration ;
8282 let measured_roll_pitch = sensor_data. inertial_measurement_unit . roll_pitch ;
83+ let angular_velocity_sum = measured_angular_velocity. abs ( ) . inner . sum ( ) ;
8384
8485 match & mut self . calibration_state {
8586 State :: WaitingForSteady => {
86- if measured_angular_velocity. abs ( ) . inner . sum ( )
87- < * context. calibration_steady_threshold
88- {
87+ if angular_velocity_sum < * context. calibration_steady_threshold {
8988 self . calibration_state = State :: CalibratingGravity {
9089 filtered_gravity : LowPassFilter :: with_smoothing_factor (
9190 measured_acceleration,
@@ -104,9 +103,9 @@ impl SensorDataReceiver {
104103 filtered_roll_pitch,
105104 remaining_cycles,
106105 } => {
107- if measured_angular_velocity . abs ( ) . inner . sum ( )
108- < * context . calibration_steady_threshold
109- {
106+ if angular_velocity_sum < * context . calibration_steady_threshold {
107+ self . calibration_state = State :: WaitingForSteady ;
108+ } else {
110109 filtered_gravity. update ( measured_acceleration) ;
111110 filtered_roll_pitch. update ( measured_roll_pitch) ;
112111 * remaining_cycles -= 1 ;
@@ -129,27 +128,23 @@ impl SensorDataReceiver {
129128 calibration : roll_pitch_calibration,
130129 } ;
131130 }
132- } else {
133- self . calibration_state = State :: WaitingForSteady ;
134131 }
135132 }
136- State :: Calibrated { .. } => { }
137- }
138-
139- if let State :: Calibrated { calibration } = self . calibration_state {
140- let mut roll_pitch_orientation = Orientation3 :: < Robot > :: from_euler_angles (
141- -sensor_data. inertial_measurement_unit . roll_pitch . x ( ) ,
142- -sensor_data. inertial_measurement_unit . roll_pitch . y ( ) ,
143- 0.0 ,
144- )
145- . mirror ( ) ;
133+ State :: Calibrated { calibration } => {
134+ let mut roll_pitch_orientation = Orientation3 :: < Robot > :: from_euler_angles (
135+ -sensor_data. inertial_measurement_unit . roll_pitch . x ( ) ,
136+ -sensor_data. inertial_measurement_unit . roll_pitch . y ( ) ,
137+ 0.0 ,
138+ )
139+ . mirror ( ) ;
146140
147- roll_pitch_orientation. inner = calibration * roll_pitch_orientation. inner ;
141+ roll_pitch_orientation. inner = * calibration * roll_pitch_orientation. inner ;
148142
149- let ( roll, pitch, _) = roll_pitch_orientation. euler_angles ( ) ;
143+ let ( roll, pitch, _) = roll_pitch_orientation. euler_angles ( ) ;
150144
151- sensor_data. inertial_measurement_unit . roll_pitch . inner . x = roll;
152- sensor_data. inertial_measurement_unit . roll_pitch . inner . y = pitch;
145+ sensor_data. inertial_measurement_unit . roll_pitch . inner . x = roll;
146+ sensor_data. inertial_measurement_unit . roll_pitch . inner . y = pitch;
147+ }
153148 }
154149
155150 sensor_data. positions = sensor_data. positions - ( * context. joint_calibration_offsets ) ;
0 commit comments