Skip to content

Commit c7345dc

Browse files
committed
refactor orientation_filter and sensor_data_receiver roll_pitch filter
1 parent 447a1af commit c7345dc

File tree

2 files changed

+22
-30
lines changed

2 files changed

+22
-30
lines changed

crates/control/src/orientation_filter.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,11 @@ impl OrientationFilter {
6262
.sensor_data
6363
.inertial_measurement_unit
6464
.linear_acceleration;
65+
let angular_velocity_sum = measured_angular_velocity.abs().inner.sum();
6566

6667
match &mut self.state {
6768
State::WaitingForSteady => {
68-
if measured_angular_velocity.abs().inner.sum()
69-
< *context.calibration_steady_threshold
70-
{
69+
if angular_velocity_sum < *context.calibration_steady_threshold {
7170
self.state = State::CalibratingGravity {
7271
filtered_gravity: LowPassFilter::with_smoothing_factor(
7372
measured_acceleration,
@@ -81,9 +80,9 @@ impl OrientationFilter {
8180
filtered_gravity,
8281
remaining_cycles,
8382
} => {
84-
if measured_angular_velocity.abs().inner.sum()
85-
< *context.calibration_steady_threshold
86-
{
83+
if angular_velocity_sum > *context.calibration_steady_threshold {
84+
self.state = State::WaitingForSteady;
85+
} else {
8786
filtered_gravity.update(measured_acceleration);
8887
*remaining_cycles -= 1;
8988
if *remaining_cycles == 0 {
@@ -92,8 +91,6 @@ impl OrientationFilter {
9291
let orientation = UnitQuaternion::look_at_rh(&gravity, &up);
9392
self.state = State::Filtering { state: orientation };
9493
}
95-
} else {
96-
self.state = State::WaitingForSteady;
9794
}
9895
}
9996
State::Filtering { state } => {

crates/control/src/sensor_data_receiver.rs

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)