[airspeed] reduce number of airspeed raw messages: (#3094)

* [airspeed] reduce number of airspeed raw messages: ETS, MS45xx, SDP3x, UAVCAN -> RAW

* compile warning

* typo

* Update sw/airborne/modules/sensors/airspeed_ms45xx_i2c.h

* warning

* UAVCAN -> RAW

* ETS register airspeed

* AIRSPEED_RAW in telemetry

* cleanup SYNC-SEND but use register-telemetry instead

* [ardrone] Fix values variable

* [sim] Fix compile warnings discaring const

* [modules] Fix airspeed ETS

---------

Co-authored-by: Freek van Tienen <freek.v.tienen@gmail.com>
This commit is contained in:
Christophe De Wagter
2023-09-22 12:04:13 +02:00
committed by GitHub
parent ca1c1dbe8f
commit 609241add3
27 changed files with 72 additions and 33 deletions
@@ -370,7 +370,6 @@
<!--Use an airspeed sensor and get the measured airspeed in the messages-->
<!-- <module name="airspeed_ets">
<define name="AIRSPEED_ETS_SYNC_SEND"/>
</module>-->
<module name="logger_spi_link"/>
@@ -93,7 +93,6 @@ NOTES:
<define name="AIRSPEED_ETS_OFFSET" value="5"/> <!-- default 0 -->
<!--<define name="AIRSPEED_ETS_USE_FILTER" value="TRUE"/>
<define name="AIRSPEED_ETS_LOWPASS_TAU" value=".20"/>-->
<define name="AIRSPEED_ETS_SYNC_SEND"/> <!-- TODO Disable after first 10 test flights -->
</module>
<!--<module name="filter_1euro_imu"/>-->
@@ -101,7 +101,6 @@ NOTES:
<define name="AIRSPEED_ETS_OFFSET" value="0"/>
<define name="AIRSPEED_ETS_USE_FILTER" value="TRUE"/>
<define name="AIRSPEED_ETS_LOWPASS_TAU" value=".20"/>
<define name="AIRSPEED_ETS_SYNC_SEND"/> <!-- TODO Disable after first 10 test flights -->
</module>
<!--<module name="filter_1euro_imu"/>-->
@@ -78,7 +78,6 @@ NOTES:
<module name="gps" type="ubx_ucenter"/>
<module name="airspeed_ets">
<define name="AIRSPEED_ETS_SYNC_SEND"/> <!-- TODO Disable after first 10 test flights -->
<configure name="AIRSPEED_ETS_I2C_DEV" value="i2c1"/>
<!-- <define name="AIRSPEED_ETS_SCALE" value="1.44"/>--> <!-- default 1.8-->
<!-- <define name="AIRSPEED_ETS_OFFSET" value="50"/> --> <!-- default 0 -->
@@ -84,7 +84,6 @@ NOTES:
<define name="AIRSPEED_ETS_START_DELAY" value="1"/>
<define name="AIRSPEED_ETS_SCALE" value="1.44"/> <!-- default 1.8-->
<define name="AIRSPEED_ETS_OFFSET" value="5"/> <!-- default 0 -->
<define name="AIRSPEED_ETS_SYNC_SEND"/> <!-- TODO Disable after first 10 test flights -->
</module>
<configure name="USE_ADC_2" value="TRUE"/> <!-- For external PowerBrick Voltage measure-->
@@ -86,7 +86,6 @@ NOTES:
<define name="AIRSPEED_ETS_START_DELAY" value="1"/>
<define name="AIRSPEED_ETS_SCALE" value="1.44"/> <!-- default 1.8-->
<define name="AIRSPEED_ETS_OFFSET" value="5"/> <!-- default 0 -->
<define name="AIRSPEED_ETS_SYNC_SEND"/> <!-- TODO Disable after first 10 test flights -->
</module>
<configure name="USE_ADC_2" value="TRUE"/> <!-- For external PowerBrick Voltage measure-->
@@ -83,7 +83,6 @@
<!--Use an airspeed sensor and get the measured airspeed in the messages-->
<!--
<module name="airspeed_ets.xml">
<define name="AIRSPEED_ETS_SYNC_SEND"/>
</module>
-->
<!-- If you want raw data on SPI logger -->
-1
View File
@@ -55,7 +55,6 @@
<module name="geo_mag"/>
<module name="gps" type="ubx_ucenter"/>
<module name="airspeed_ets">
<define name="AIRSPEED_ETS_SYNC_SEND"/>
<configure name="AIRSPEED_ETS_I2C_DEV" value="i2c2"/>
</module>
<module name="adc_generic">
@@ -371,7 +371,6 @@
<!--Use an airspeed sensor and get the measured airspeed in the messages-->
<!-- <load name="airspeed_ets.xml">
<define name="AIRSPEED_ETS_SYNC_SEND"/>
</load>-->
<module name="logger_spi_link"/>
@@ -364,7 +364,6 @@
<!--Use an airspeed sensor and get the measured airspeed in the messages-->
<!-- <load name="airspeed_ets.xml">
<define name="AIRSPEED_ETS_SYNC_SEND"/>
</load>-->
<module name="logger_spi_link"/>
@@ -250,7 +250,6 @@
<!--Use an airspeed sensor and get the measured airspeed in the messages-->
<module name="airspeed_ets">
<configure name="AIRSPEED_ETS_I2C_DEV" value="i2c2"/>
<define name="AIRSPEED_ETS_SYNC_SEND"/>
</module>
<!-- Load this module to use multiple gain sets, which have to be specified in the gain sets section -->
+3 -1
View File
@@ -22,7 +22,6 @@
<define name="AIRSPEED_ETS_OFFSET" value="offset" description="sensor reading offset for sensor in proprietary mode (default: 0)"/>
<define name="AIRSPEED_ETS_SCALE" value="scale" description="sensor scale factor for sensor in proprietary mode (default: 1.8)"/>
<define name="AIRSPEED_ETS_START_DELAY" value="delay" description="set initial start delay in seconds"/>
<define name="AIRSPEED_ETS_SYNC_SEND" description="flag to transmit the data as it is acquired"/>
<define name="USE_AIRSPEED_ETS" value="TRUE|FALSE" description="set airspeed in state interface"/>
<define name="AIRSPEED_ETS_3RD_PARTY_MODE" description="read raw value for sensor in third-party mode"/>
<define name="AIRSPEED_ETS_SDLOG" value="TRUE|FALSE" description="start logging to SD card"/>
@@ -47,6 +46,9 @@
<test>
<define name="USE_I2C0"/>
<define name="USE_AIRSPEED_ETS"/>
<define name="DOWNLINK_TRANSPORT" value="pprz_tp"/>
<define name="DOWNLINK_DEVICE" value="uart0"/>
<define name="USE_UART0"/>
</test>
</makefile>
+1
View File
@@ -72,6 +72,7 @@
<message name="BARO_RAW" period="0.5"/>
<message name="IR_SENSORS" period="0.5"/>
<message name="IMU_GYRO_RAW" period="0.1"/>
<message name="AIRSPEED_RAW" period="0.5"/>
</mode>
</process>
<process name="Fbw">
+1
View File
@@ -60,6 +60,7 @@
<message name="BARO_RAW" period=".1"/>
<message name="IMU_MAG_CURRENT_CALIBRATION" period=".05"/>
<message name="ARDRONE_NAVDATA" period=".05"/>
<message name="AIRSPEED_RAW" period="0.1"/>
</mode>
<mode name="scaled_sensors">
+2 -1
View File
@@ -51,7 +51,8 @@
<message name="IMU_GYRO_RAW" period=".05"/>
<message name="IMU_MAG_RAW" period=".05"/>
<message name="BARO_RAW" period=".1"/>
<message name="ARDRONE_NAVDATA" period=".05"/>
<message name="ARDRONE_NAVDATA" period=".05"/>
<message name="AIRSPEED_RAW" period="0.2"/>
</mode>
<mode name="scaled_sensors">
+2 -1
View File
@@ -50,7 +50,8 @@
<message name="IMU_GYRO_RAW" period=".05"/>
<message name="IMU_MAG_RAW" period=".05"/>
<message name="BARO_RAW" period=".1"/>
<message name="ARDRONE_NAVDATA" period=".05"/>
<message name="ARDRONE_NAVDATA" period=".05"/>
<message name="AIRSPEED_RAW" period=".1"/>
</mode>
<mode name="scaled_sensors">
+1 -1
View File
@@ -10,7 +10,7 @@ bool led_disabled = false;
value register_leds_cb(value cb_name)
{
leds_closure = caml_named_value(String_val(cb_name));
leds_closure = (value *)caml_named_value(String_val(cb_name));
return Val_unit;
}
+1 -1
View File
@@ -107,7 +107,7 @@ value get_commands(value val_commands)
value set_datalink_message(value s)
{
int n = string_length(s);
char *ss = String_val(s);
char *ss = (char *)String_val(s);
assert(n <= MSG_SIZE);
int i;
+1
View File
@@ -66,6 +66,7 @@ int actuator_ardrone2_fd; /**< File descriptor for the port */
#define ARDRONE_GPIO_PIN_IRQ_INPUT 176
uint32_t led_hw_values;
uint16_t actuators_pwm_values[ACTUATORS_ARDRONE_NB];
static inline void actuators_ardrone_reset_flipflop(void)
{
+1 -1
View File
@@ -48,7 +48,7 @@
#define MOT_LEDGREEN 2
#define MOT_LEDORANGE 3
uint16_t actuators_pwm_values[ACTUATORS_ARDRONE_NB];
extern uint16_t actuators_pwm_values[ACTUATORS_ARDRONE_NB];
extern void actuators_ardrone_commit(void);
extern void actuators_ardrone_init(void);
+27 -5
View File
@@ -49,6 +49,10 @@
#include "modules/datalink/downlink.h"
#include <math.h>
#if PERIODIC_TELEMETRY
#include "modules/datalink/telemetry.h"
#endif
#ifndef USE_AIRSPEED_ETS
#if USE_AIRSPEED
#define USE_AIRSPEED_ETS TRUE
@@ -56,8 +60,8 @@ PRINT_CONFIG_MSG("USE_AIRSPEED_ETS automatically set to TRUE")
#endif
#endif
#if !USE_AIRSPEED_ETS && !AIRSPEED_ETS_SYNC_SEND
#warning either set USE_AIRSPEED_ETS or AIRSPEED_ETS_SYNC_SEND to use airspeed_ets
#if !USE_AIRSPEED_ETS
PRINT_CONFIG_MSG("AIRSPEED_ETS not used")
#endif
#define AIRSPEED_ETS_ADDR 0xEA
@@ -93,6 +97,7 @@ bool log_airspeed_ets_started;
#endif
// Global variables
uint16_t airspeed_ets_raw;
uint16_t airspeed_ets_offset;
@@ -111,6 +116,21 @@ uint16_t airspeed_ets_cnt;
uint32_t airspeed_ets_delay_time;
bool airspeed_ets_delay_done;
static void airspeed_ets_downlink(struct transport_tx *trans, struct link_device *dev)
{
uint8_t dev_id = AIRSPEED_ETS_ID;
float press = 0;
float temp = 0;
float offset = airspeed_ets_offset;
pprz_msg_send_AIRSPEED_RAW(trans,dev,AC_ID,
&dev_id,
&airspeed_ets_raw,
&offset,
&press,
&temp,
&airspeed_ets);
}
void airspeed_ets_init(void)
{
int n;
@@ -133,6 +153,11 @@ void airspeed_ets_init(void)
airspeed_ets_delay_done = false;
SysTimeTimerStart(airspeed_ets_delay_time);
#if PERIODIC_TELEMETRY
register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_AIRSPEED_RAW, airspeed_ets_downlink);
#endif
#ifndef SITL
#if AIRSPEED_ETS_SDLOG
log_airspeed_ets_started = false;
@@ -232,9 +257,6 @@ void airspeed_ets_read_event(void)
#if USE_AIRSPEED_ETS
stateSetAirspeed_f(airspeed_ets);
#endif
#if AIRSPEED_ETS_SYNC_SEND
DOWNLINK_SEND_AIRSPEED_ETS(DefaultChannel, DefaultDevice, &airspeed_ets_raw, &airspeed_ets_offset, &airspeed_ets);
#endif
} else {
airspeed_ets = 0.0;
@@ -175,9 +175,14 @@ static Butterworth2LowPass ms45xx_filter;
static void ms45xx_downlink(struct transport_tx *trans, struct link_device *dev)
{
pprz_msg_send_AIRSPEED_MS45XX(trans,dev,AC_ID,
uint8_t dev_id = MS45XX_SENDER_ID;
float temp = ((float)ms45xx.temperature) * 0.1f;
pprz_msg_send_AIRSPEED_RAW(trans,dev,AC_ID,
&dev_id,
&ms45xx.raw_p,
&ms45xx.pressure_offset,
&ms45xx.pressure,
&ms45xx.temperature,
&temp,
&ms45xx.airspeed);
}
@@ -186,6 +191,7 @@ void ms45xx_i2c_init(void)
ms45xx.pressure = 0.;
ms45xx.temperature = 0;
ms45xx.airspeed = 0.;
ms45xx.raw_p = 0;
ms45xx.pressure_type = MS45XX_PRESSURE_TYPE;
ms45xx.pressure_scale = MS45XX_PRESSURE_SCALE;
ms45xx.pressure_offset = MS45XX_PRESSURE_OFFSET;
@@ -200,7 +206,7 @@ void ms45xx_i2c_init(void)
#endif
#if PERIODIC_TELEMETRY
register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_AIRSPEED_MS45XX, ms45xx_downlink);
register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_AIRSPEED_RAW, ms45xx_downlink);
#endif
}
@@ -228,6 +234,7 @@ void ms45xx_i2c_event(void)
if (status == 0) {
/* 14bit raw pressure */
uint16_t p_raw = 0x3FFF & (((uint16_t)(ms45xx_trans.buf[0]) << 8) | (uint16_t)(ms45xx_trans.buf[1]));
ms45xx.raw_p = p_raw;
/* 11bit raw temperature, 5 LSB bits not used */
uint16_t temp_raw = 0xFFE0 & (((uint16_t)(ms45xx_trans.buf[2]) << 8) |
@@ -31,6 +31,7 @@
struct AirspeedMs45xx {
float pressure; ///< (differential) pressure in Pascal
int16_t temperature; ///< Temperature in 0.1 deg Celcius
uint16_t raw_p; ///< Raw pressure
float airspeed; ///< Airspeed in m/s estimated from (differential) pressure.
bool pressure_type; ///< Pressure type Differential of Gauge
float airspeed_scale; ///< Quadratic scale factor to convert (differential) pressure to airspeed
+8 -4
View File
@@ -143,10 +143,13 @@ static bool sdp3x_crc(const uint8_t data[], unsigned size, uint8_t checksum)
static void sdp3x_downlink(struct transport_tx *trans, struct link_device *dev)
{
int16_t temp = (int16_t)(sdp3x.temperature * 10.f);
pprz_msg_send_AIRSPEED_MS45XX(trans,dev,AC_ID,
uint8_t dev_id = SDP3X_SENDER_ID;
pprz_msg_send_AIRSPEED_RAW(trans,dev,AC_ID,
&dev_id,
&sdp3x.raw_p,
&sdp3x.pressure_offset,
&sdp3x.pressure,
&temp,
&sdp3x.temperature,
&sdp3x.airspeed);
}
@@ -170,7 +173,7 @@ void sdp3x_init(void)
#endif
#if PERIODIC_TELEMETRY
register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_AIRSPEED_MS45XX, sdp3x_downlink); // FIXME
register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_AIRSPEED_RAW, sdp3x_downlink); // FIXME
#endif
}
@@ -216,6 +219,7 @@ void sdp3x_event(void)
}
int16_t p_raw = ((int16_t)(buf[0]) << 8) | (int16_t)(buf[1]);
sdp3x.raw_p = (uint16_t) p_raw;
float p_out = ((float)p_raw / sdp3x.pressure_scale) - sdp3x.pressure_offset;
@@ -37,6 +37,7 @@ struct AirspeedSdp3x {
bool autoset_offset; ///< Set offset value from current filtered value
bool sync_send; ///< Flag to enable sending every new measurement via telemetry for debugging purpose
bool initialized; ///< init flag
uint16_t raw_p; ///< raw value from chip
};
extern struct AirspeedSdp3x sdp3x;
+11 -3
View File
@@ -61,9 +61,17 @@ struct airspeed_uavcan_s airspeed_uavcan;
static void airspeed_uavcan_downlink(struct transport_tx *trans, struct link_device *dev)
{
pprz_msg_send_AIRSPEED_UAVCAN(trans,dev,AC_ID,
uint8_t dev_id = UAVCAN_SENDER_ID;
uint16_t raw = 0;
float offset = 0;
float airspeed = 0;
pprz_msg_send_AIRSPEED_RAW(trans,dev,AC_ID,
&dev_id,
&raw,
&offset,
&airspeed_uavcan.diff_p,
&airspeed_uavcan.temperature);
&airspeed_uavcan.temperature,
&airspeed);
}
static void airspeed_uavcan_cb(struct uavcan_iface_t *iface __attribute__((unused)), CanardRxTransfer *transfer) {
@@ -118,6 +126,6 @@ void airspeed_uavcan_init(void)
uavcan_bind(UAVCAN_EQUIPMENT_AIR_DATA_RAWAIRDATA_ID, UAVCAN_EQUIPMENT_AIR_DATA_RAWAIRDATA_SIGNATURE, &airspeed_uavcan_ev, &airspeed_uavcan_cb);
#if PERIODIC_TELEMETRY
register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_AIRSPEED_UAVCAN, airspeed_uavcan_downlink);
register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_AIRSPEED_RAW, airspeed_uavcan_downlink);
#endif
}