Files
TweinStein/RTOS_SensorBoard/Model.h
2026-06-12 02:55:04 -07:00

51 lines
1.4 KiB
C

#ifndef MODEL_H
#define MODEL_H
#include "stdint.h"
#define CAP_IR 305 // mm
#define CAP_TFLUNA 1000 // mm
#define CAP_THROTTLE 9999 // pwm
#define CAP_STEERING 35 // degrees
#define CAP_ANGLE 64 // degrees
#define CAP_ANGLE_POW 6 // 2^6 = 64
#define CAP_DELTA_STEERING 10
#define CAP_DELTA_THROTTLE 2000
#define CAP_YAW 16384 // raw LSB, ~125 deg/s at 131 LSB/(deg/s)
#define CAP_ACCEL 8192 // raw LSB, ~0.5g at 16384 LSB/g
typedef int32_t fixed_t;
typedef enum { ir_right,
ir_left,
tf_left,
tf_middle,
tf_right,
throttle_left_prev,
throttle_right_prev,
steering_prev,
angle_left,
angle_right,
yaw_rate,
accel_lat,
accel_long,
NUM_INPUTS } input_t;
typedef enum { throttle_left,
throttle_right,
steering,
NUM_OUTPUTS} output_t;
extern fixed_t Model_Inputs[NUM_INPUTS];
extern fixed_t Model_Outputs[NUM_OUTPUTS];
extern const fixed_t Model_Weights[NUM_OUTPUTS][NUM_INPUTS];
extern const fixed_t Model_Bias[NUM_OUTPUTS];
void Model_Inference(void);
fixed_t Model_Normalize(int32_t input, int32_t cap);
fixed_t Model_NormalizeSigned(int32_t input, int32_t cap);
void Model_ApplyResidual(uint16_t* throttle_l, uint16_t* throttle_r, int32_t* steering_angle);
#endif