Skip to content

Commit 97a1c03

Browse files
authored
Merge pull request #11628 from breadoven/abo_common_3Dspeed
Add common 3D speed
2 parents 70af840 + 6a9066d commit 97a1c03

7 files changed

Lines changed: 20 additions & 33 deletions

File tree

src/main/io/osd.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1984,7 +1984,7 @@ static bool osdDrawSingleElement(uint8_t item)
19841984
break;
19851985

19861986
case OSD_3D_SPEED:
1987-
osdFormatVelocityStr(buff, osdGet3DSpeed(), OSD_SPEED_TYPE_3D, false);
1987+
osdFormatVelocityStr(buff, posControl.actualState.vel3D, OSD_SPEED_TYPE_3D, false);
19881988
break;
19891989

19901990
case OSD_3D_MAX_SPEED:
@@ -4862,7 +4862,7 @@ static void osdUpdateStats(void)
48624862
int32_t value;
48634863

48644864
if (feature(FEATURE_GPS)) {
4865-
value = osdGet3DSpeed();
4865+
value = posControl.actualState.vel3D;
48664866
const float airspeed_estimate = getAirspeedEstimate();
48674867

48684868
if (stats.max_3D_speed < value) stats.max_3D_speed = value;

src/main/io/osd_common.c

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
#include "io/osd_grid.h"
4343

4444
#include "navigation/navigation.h"
45+
#include "navigation/navigation_private.h"
46+
4547
#include "sensors/pitotmeter.h"
4648

4749
#if defined(USE_OSD) || defined(USE_DJI_HD_OSD)
@@ -59,7 +61,7 @@ int16_t osdGetSpeedFromSelectedSource(void) {
5961
speed = gpsSol.groundSpeed;
6062
break;
6163
case OSD_SPEED_SOURCE_3D:
62-
speed = osdGet3DSpeed();
64+
speed = posControl.actualState.vel3D;
6365
break;
6466
case OSD_SPEED_SOURCE_AIR:
6567
#ifdef USE_PITOT
@@ -164,7 +166,7 @@ void osdDrawArtificialHorizon(displayPort_t *display, displayCanvas_t *canvas, c
164166
{
165167
uint8_t gx;
166168
uint8_t gy;
167-
169+
168170
#if defined(USE_CANVAS)
169171
if (canvas) {
170172
osdCanvasDrawArtificialHorizon(display, canvas, p, pitchAngle, rollAngle);
@@ -209,17 +211,4 @@ void osdDrawSidebars(displayPort_t *display, displayCanvas_t *canvas)
209211
#endif
210212
osdGridDrawSidebars(display);
211213
}
212-
213-
#endif
214-
215-
#ifdef USE_GPS
216-
/*
217-
* 3D speed in cm/s
218-
*/
219-
int16_t osdGet3DSpeed(void)
220-
{
221-
float vert_speed = getEstimatedActualVelocity(Z);
222-
float hor_speed = (float)gpsSol.groundSpeed;
223-
return (int16_t)calc_length_pythagorean_2D(hor_speed, vert_speed);
224-
}
225214
#endif

src/main/io/osd_common.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,3 @@ void osdDrawArtificialHorizon(displayPort_t *display, displayCanvas_t *canvas, c
105105
// grid slots.
106106
void osdDrawHeadingGraph(displayPort_t *display, displayCanvas_t *canvas, const osdDrawPoint_t *p, int heading);
107107
void osdDrawSidebars(displayPort_t *display, displayCanvas_t *canvas);
108-
109-
#ifdef USE_GPS
110-
int16_t osdGet3DSpeed(void);
111-
#endif

src/main/io/osd_dji_hd.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,7 @@ void osdDJIFormatVelocityStr(char* buff)
681681
break;
682682
case OSD_SPEED_SOURCE_3D:
683683
strcpy(sourceBuf, "3D");
684-
vel = osdGet3DSpeed();
684+
vel = posControl.actualState.vel3D;
685685
break;
686686
case OSD_SPEED_SOURCE_AIR:
687687
strcpy(sourceBuf, "AIR");

src/main/navigation/navigation.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2852,6 +2852,8 @@ void updateActualAltitudeAndClimbRate(bool estimateValid, float newAltitude, flo
28522852
posControl.actualState.agl.pos.z = surfaceDistance;
28532853
posControl.actualState.agl.vel.z = surfaceVelocity;
28542854

2855+
posControl.actualState.vel3D = calc_length_pythagorean_2D(posControl.actualState.velXY, posControl.actualState.abs.vel.z);
2856+
28552857
// Update altitude that would be used when executing RTH
28562858
if (estimateValid) {
28572859
updateDesiredRTHAltitude();
@@ -3874,10 +3876,10 @@ void getWaypoint(uint8_t wpNumber, navWaypoint_t * wpData)
38743876

38753877
int isGCSValid(void)
38763878
{
3877-
return (ARMING_FLAG(ARMED) &&
3878-
(posControl.flags.estPosStatus >= EST_TRUSTED) &&
3879-
posControl.gpsOrigin.valid &&
3880-
posControl.flags.isGCSAssistedNavigationEnabled &&
3879+
return (ARMING_FLAG(ARMED) &&
3880+
(posControl.flags.estPosStatus >= EST_TRUSTED) &&
3881+
posControl.gpsOrigin.valid &&
3882+
posControl.flags.isGCSAssistedNavigationEnabled &&
38813883
(posControl.navState == NAV_STATE_POSHOLD_3D_IN_PROGRESS));
38823884
}
38833885

src/main/navigation/navigation_private.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ typedef struct {
137137
float cosYaw;
138138
float surfaceMin;
139139
float velXY;
140+
float vel3D;
140141
} navigationEstimatedState_t;
141142

142143
typedef struct {

src/main/programming/logic_condition.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -747,9 +747,8 @@ static int logicConditionGetFlightOperandValue(int operand) {
747747
return getMinGroundSpeed(navConfig()->general.min_ground_speed);
748748
break;
749749

750-
//FIXME align with osdGet3DSpeed
751750
case LOGIC_CONDITION_OPERAND_FLIGHT_3D_SPEED: // cm/s
752-
return osdGet3DSpeed();
751+
return posControl.actualState.vel3D;
753752
break;
754753

755754
case LOGIC_CONDITION_OPERAND_FLIGHT_AIR_SPEED: // cm/s
@@ -781,7 +780,7 @@ static int logicConditionGetFlightOperandValue(int operand) {
781780
uint16_t windAngle;
782781
getEstimatedHorizontalWindSpeed(&windAngle);
783782
int32_t windHeading = (int32_t)windAngle + 18000; // Correct heading to display correctly.
784-
783+
785784
while (windHeading < 0) windHeading += 36000;
786785
while (windHeading >= 36000) windHeading -= 36000;
787786

@@ -801,10 +800,10 @@ static int logicConditionGetFlightOperandValue(int operand) {
801800
uint16_t windAngle;
802801
getEstimatedHorizontalWindSpeed(&windAngle);
803802
int32_t relativeWindHeading = (int32_t)windAngle + 18000 - DECIDEGREES_TO_CENTIDEGREES(attitude.values.yaw);
804-
803+
805804
while (relativeWindHeading < 0) relativeWindHeading += 36000;
806805
while (relativeWindHeading >= 36000) relativeWindHeading -= 36000;
807-
806+
808807
relativeWindHeading = -relativeWindHeading;
809808
if (relativeWindHeading <= -18000)
810809
relativeWindHeading = 18000 + (relativeWindHeading + 18000);
@@ -816,7 +815,7 @@ static int logicConditionGetFlightOperandValue(int operand) {
816815
#else
817816
return 0;
818817
#endif
819-
break;
818+
break;
820819

821820
case LOGIC_CONDITION_OPERAND_FLIGHT_ALTITUDE: // cm
822821
return constrain(getEstimatedActualPosition(Z), INT32_MIN, INT32_MAX);
@@ -908,7 +907,7 @@ static int logicConditionGetFlightOperandValue(int operand) {
908907
return rxLinkStatistics.uplinkRSSI;
909908
#else
910909
return 0;
911-
#endif
910+
#endif
912911
break;
913912

914913
case LOGIC_CONDITION_OPERAND_FLIGHT_LQ_DOWNLINK:

0 commit comments

Comments
 (0)