Skip to content

Commit 819b3bb

Browse files
Merge pull request #191 from ISSUIUC/feature/gnc-ext-kf-telemetry. Done!
Extended KF telemetry
2 parents 58453de + 1952250 commit 819b3bb

File tree

6 files changed

+27
-13
lines changed

6 files changed

+27
-13
lines changed

MIDAS/src/gnc/ekf.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ void EKF::priori(float dt, AngularKalmanData &orientation, FSMState fsm, Acceler
8282
sensor_accel_global_g(2, 0) = acceleration.az - 0.06f;
8383
euler_t angles_rad = orientation.getEuler();
8484
BodyToGlobal(angles_rad, sensor_accel_global_g);
85-
// Do not apply gravity if on pad
85+
// Do not apply acceleration if on pad
8686
float g_ms2 = (fsm > FSMState::STATE_IDLE) ? gravity_ms2 : 0.0f;
8787
u_control(0, 0) = sensor_accel_global_g(0, 0) * g_ms2;
8888
u_control(1, 0) = sensor_accel_global_g(1, 0) * g_ms2;

MIDAS/src/telemetry.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,9 @@ TelemetryPacket Telemetry::makePacket(RocketData& data) {
126126
packet.roll_rate = roll_rate_hz / MAX_ROLL_RATE_HZ * 0xFF;
127127

128128
// KF data
129-
packet.kf_px = inv_convert_range<int16_t>(kalman.position.px, MAX_KF_XPOSITION_M);
130-
131-
// Serial.println(kalman.position.px);
129+
packet.kf_px = inv_convert_range<int16_t>(kalman.position.px, MAX_KF_VPOSITION_M); // We should eventually switch this to unsigned, once we fix baro.
130+
packet.kf_py = inv_convert_range<int16_t>(kalman.position.py, MAX_KF_LPOSITION_M);
131+
packet.kf_pz = inv_convert_range<int16_t>(kalman.position.pz, MAX_KF_LPOSITION_M);
132132

133133
packet.kf_vx = inv_convert_range<int16_t>(kalman.velocity.vx, MAX_KF_XVELOCITY_MS);
134134

MIDAS/src/telemetry_packet.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
#define MAX_TELEM_VOLTAGE_V 6.0f
77
#define MAX_TELEM_CONT_I 0.2f
8-
#define MAX_KF_XPOSITION_M 20000.0f
8+
#define MAX_KF_VPOSITION_M 100000.0f // Max vertical position of KF data (m)
9+
#define MAX_KF_LPOSITION_M 100000.0f // Max lateral position of KF data (m)
910
#define MAX_ROLL_RATE_HZ 10.0f
1011
#define MAX_ABS_ACCEL_RANGE_G 64
1112
#define MAX_KF_XVELOCITY_MS 2000.0f
@@ -38,7 +39,9 @@ struct TelemetryPacket {
3839

3940
uint8_t callsign_gpsfix_satcount; //3 bits gpsfix, 4 bits sat count, 1 bit is_sustainer_callsign
4041
uint16_t kf_vx; // 16 bit meters/second
41-
uint16_t kf_px; // 16 bit meters
42+
uint16_t kf_px; // 16 bit meters
43+
uint16_t kf_py; // 16 bit meters
44+
uint16_t kf_pz; // 16 bit meters
4245

4346
uint32_t pyro; // 7 bit continuity x 4 channels, 4 bit unused
4447

@@ -68,4 +71,4 @@ struct TelemetryCommand {
6871
return verify == std::array<char, 3>{{'A','R','K'}};
6972
#endif
7073
}
71-
};
74+
};

ground/src/feather_duo/Output.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ void printJSONField(const char* name, const char* val, bool comma = true) {
3838
void printPacketJson(FullTelemetryData const& packet) {
3939
bool is_heartbeat = packet.FSM_State == static_cast<uint8_t>(-1);
4040
char buff[1024]{};
41-
int len = sprintf(buff, R"({"type": "data", "value": {"barometer_altitude": %f, "latitude": %f, "longitude": %f, "altitude": %i, "highG_ax": %f, "highG_ay": %f, "highG_az": %f, "battery_voltage": %f, "cam_battery_voltage": %f, "FSM_State": %i, "tilt_angle": %f, "frequency": %f, "RSSI": %f, "sat_count": %i, "kf_velocity": %f, "kf_position": %f, "is_sustainer": %i, "roll_rate": %f, "c_valid": %u, "c_on": %u, "c_rec": %u, "vtx_on": %u, "vmux_stat": %u, "cam_ack": %u, "cmd_ack": %i, "gps_fixtype": %i, "pyro_a": %f, "pyro_b": %f, "pyro_c": %f, "pyro_d": %f}})",
41+
int len = sprintf(buff, R"({"type": "data", "value": {"barometer_altitude": %f, "latitude": %f, "longitude": %f, "altitude": %i, "highG_ax": %f, "highG_ay": %f, "highG_az": %f, "battery_voltage": %f, "cam_battery_voltage": %f, "FSM_State": %i, "tilt_angle": %f, "frequency": %f, "RSSI": %f, "sat_count": %i, "kf_velocity": %f, "kf_positionX": %f, "kf_positionY": %f, "kf_positionZ": %f, "is_sustainer": %i, "roll_rate": %f, "c_valid": %u, "c_on": %u, "c_rec": %u, "vtx_on": %u, "vmux_stat": %u, "cam_ack": %u, "cmd_ack": %i, "gps_fixtype": %i, "pyro_a": %f, "pyro_b": %f, "pyro_c": %f, "pyro_d": %f}})",
4242

4343
// Barometer
4444
packet.barometer_altitude,
@@ -63,6 +63,8 @@ void printPacketJson(FullTelemetryData const& packet) {
6363
packet.sat_count,
6464
packet.kf_vx,
6565
packet.kf_px,
66+
packet.kf_py,
67+
packet.kf_pz,
6668
packet.is_sustainer,
6769
packet.roll_rate_hz,
6870

ground/src/feather_duo/Packet.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ FullTelemetryData DecodePacket(const TelemetryPacket& packet, float frequency) {
6060
data.pyros[3] = ((float) ((packet.pyro >> 24) & (0xFF)) / 255.) * MAX_TELEM_VOLTAGE_V;
6161

6262
// kalman filter
63-
data.kf_px = convert_range<int16_t>(packet.kf_px, MAX_KF_XPOSITION_M);
63+
data.kf_px = convert_range<int16_t>(packet.kf_px, MAX_KF_VPOSITION_M);
64+
data.kf_py = convert_range<int16_t>(packet.kf_py, MAX_KF_LPOSITION_M);
65+
data.kf_pz = convert_range<int16_t>(packet.kf_pz, MAX_KF_LPOSITION_M);
6466
data.kf_vx = convert_range<int16_t>(packet.kf_vx, MAX_KF_XVELOCITY_MS);
6567

6668
// Camera state

ground/src/feather_duo/Packet.h

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ typedef uint32_t systime_t;
55

66
#define MAX_TELEM_VOLTAGE_V 6.0f
77
#define MAX_TELEM_CONT_I 0.2f
8-
#define MAX_KF_XPOSITION_M 20000.0f
8+
#define MAX_KF_VPOSITION_M 100000.0f
9+
#define MAX_KF_LPOSITION_M 100000.0f
910
#define MAX_ROLL_RATE_HZ 10.0f
1011
#define MAX_ABS_ACCEL_RANGE_G 64
1112
#define MAX_KF_XVELOCITY_MS 2000.0f
@@ -38,16 +39,20 @@ struct TelemetryPacket {
3839

3940
uint8_t callsign_gpsfix_satcount; //3 bits gpsfix, 4 bits sat count, 1 bit is_sustainer_callsign
4041
uint16_t kf_vx; // 16 bit meters/second
41-
uint16_t kf_px; // 16 bit meters
42-
uint32_t pyro; // 7 bit continuity x 4 channels, 4 unused bits
42+
uint16_t kf_px; // 16 bit meters
43+
uint16_t kf_py; // 16 bit meters
44+
uint16_t kf_pz; // 16 bit meters
45+
46+
uint32_t pyro; // 7 bit continuity x 4 channels, 4 bit unused
4347

4448
uint8_t roll_rate;
4549
uint8_t camera_state;
4650
uint8_t camera_batt_volt;
47-
4851
};
4952

5053

54+
55+
5156
struct FullTelemetryData {
5257

5358
systime_t timestamp; //[0, 2^32]
@@ -78,6 +83,8 @@ struct FullTelemetryData {
7883

7984
float kf_vx; // kalman filter stuff
8085
float kf_px;
86+
float kf_py;
87+
float kf_pz;
8188

8289
bool cmd_ack;
8390

0 commit comments

Comments
 (0)