Skip to content

Commit 120636d

Browse files
committed
Changes due to Steven's review
1 parent ba3ab2d commit 120636d

3 files changed

Lines changed: 8 additions & 18 deletions

File tree

embedded-software/firmware/ulysses-flight-controller/Core/Inc/motor_drivers/servo_driver.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ typedef struct {
1212
float deg_min;
1313
float deg_max;
1414
float deg_bias;
15-
16-
bool reversed;
1715
} servo_config_t;
1816

1917
typedef struct {
@@ -42,14 +40,12 @@ typedef struct {
4240
#define SERVO1_US_MAX 2100
4341
#define SERVO1_DEG_BIAS 95.0f // Calibrated to center gimbal at 0° when both servos are at 1500µs
4442
#define SERVO1_DEG_RANGE_MAX 120.0f
45-
#define SERVO1_REVERSED false
4643

4744
/* Servo 2 (X-axis / roll): TIM3 CH3 / PB0 */
4845
#define SERVO2_US_MIN 900
4946
#define SERVO2_US_MAX 2100
5047
#define SERVO2_DEG_BIAS 50.0f // Calibrated to center gimbal at 0° when both servos are at 1500µs
5148
#define SERVO2_DEG_RANGE_MAX 120.0f
52-
#define SERVO2_REVERSED false
5349

5450
/* ── Gimbal angular limits ───────────────────────────────────────────── */
5551
#define SERVO_GIMBAL_DEG_MIN -30.0f
@@ -69,8 +65,8 @@ void set_servo_degree(servo_t *servo, float degree);
6965
/**
7066
* @brief Command gimbal angles by physical axis.
7167
* Handles servo axis mapping and sign convention internally.
72-
* @param x_deg Desired X-axis (roll) gimbal angle in degrees, clamped to ±SERVO_GIMBAL_HALF_RANGE_DEG.
73-
* @param y_deg Desired Y-axis (pitch) gimbal angle in degrees, clamped to ±SERVO_GIMBAL_HALF_RANGE_DEG.
68+
* @param x_deg Desired X-axis (roll) gimbal angle in degrees, clamped to bewteen SERVO_GIMBAL_DEG_MIN and SERVO_GIMBAL_DEG_MAX.
69+
* @param y_deg Desired Y-axis (pitch) gimbal angle in degrees, clamped to bewteen SERVO_GIMBAL_DEG_MIN and SERVO_GIMBAL_DEG_MAX.
7470
*/
7571
void set_gimbal_degrees(float x_deg, float y_deg);
7672

embedded-software/firmware/ulysses-flight-controller/Core/Src/motor_drivers/servo_driver.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ static servo_config_t s_servo1_config = {
2020
.deg_min = SERVO_GIMBAL_DEG_MIN,
2121
.deg_max = SERVO_GIMBAL_DEG_MAX,
2222
.deg_bias = SERVO1_DEG_BIAS,
23-
.reversed = SERVO1_REVERSED,
2423
};
2524

2625
static servo_config_t s_servo2_config = {
@@ -30,7 +29,6 @@ static servo_config_t s_servo2_config = {
3029
.deg_min = SERVO_GIMBAL_DEG_MIN,
3130
.deg_max = SERVO_GIMBAL_DEG_MAX,
3231
.deg_bias = SERVO2_DEG_BIAS,
33-
.reversed = SERVO2_REVERSED,
3432
};
3533

3634

@@ -162,11 +160,7 @@ static uint16_t degree_to_us(const servo_t *servo, float degree) {
162160
const servo_config_t *cfg = &servo->config;
163161

164162
float scale = (float)(cfg->us_max - cfg->us_min) / cfg->deg_range_max;
165-
166-
// float d = (cfg->reversed ? -degree : degree) + cfg->deg_bias;
167-
// float d_clamped = clamp_float(degree, cfg->deg_min, cfg->deg_max);
168-
169163
uint16_t us = cfg->us_min + (degree + cfg->deg_bias) * scale;
170-
// return clamp_u16(us, cfg->us_min, cfg->us_max);
164+
171165
return us;
172166
}

embedded-software/firmware/ulysses-flight-controller/Core/Src/tasks/controls.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@
2727
#include "timestamp.h"
2828
#include "utilities/clamp.h"
2929

30+
/* Utility macros */
3031
#define RAD_TO_DEG (180.0f / 3.14159265f)
32+
#define DEG_TO_RAD (3.14159265f / 180.0f);
33+
#define SQRT_2_2 (0.70710678f) /**< For 45 degree trim to stay within circular gimbal limits. */
3134

3235
#define CONTROLS_DT_S 0.00125f /**< Control period [s] (800 Hz via TIM4 CH2). */
3336
#define STALE_STATE_THRESHOLD_TICKS \
@@ -46,7 +49,6 @@
4649
#define ESC_HOLD_MS 500 /**< Hold at peak thrust (ms). */
4750

4851
/* Empirical times for the ESC power on sequence*/
49-
#define ESC_POWER_ON_TIME_MS (3000) /**< Delay before arming sequence begins */
5052
#define ESC_ARM_TIME_MS (3000) /**< Delay before PWM output */
5153

5254
/* Empirical values for a safe operational range of the gimbal */
@@ -126,8 +128,6 @@ void controls_task_start(void *argument)
126128
servo_pair_enable(false);
127129
esc_pair_set_armed(false);
128130

129-
osDelay(pdMS_TO_TICKS(ESC_POWER_ON_TIME_MS));
130-
131131
state_exchange_publish_startup_test_complete(true);
132132

133133
for (;;) {
@@ -246,8 +246,8 @@ void controls_task_start(void *argument)
246246
float theta_y_deg =
247247
clamp_float(control_output.theta_y_cmd * RAD_TO_DEG, SERVO_MIN_DEGREES, SERVO_MAX_DEGREES);
248248

249-
float calibrated_theta_x_deg = (1/sqrtf(2.0f)) * theta_x_deg + (1/sqrtf(2.0f)) * theta_y_deg; // Calibrated to match physical gimbal direction
250-
float calibrated_theta_y_deg = -(1/sqrtf(2.0f)) * theta_x_deg + (1/sqrtf(2.0f)) * theta_y_deg; // Calibrated to match physical gimbal direction
249+
float calibrated_theta_x_deg = (SQRT_2_2) * theta_x_deg + (SQRT_2_2) * theta_y_deg; // Calibrated to match physical gimbal direction
250+
float calibrated_theta_y_deg = -(SQRT_2_2) * theta_x_deg + (SQRT_2_2) * theta_y_deg; // Calibrated to match physical gimbal direction
251251

252252
set_gimbal_degrees(calibrated_theta_x_deg, calibrated_theta_y_deg);
253253
esc_pair_set_force(control_output.T_cmd, control_output.tau_thrust);

0 commit comments

Comments
 (0)