mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-09 22:49:53 +08:00
[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:
committed by
GitHub
parent
ca1c1dbe8f
commit
609241add3
@@ -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 -->
|
||||
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
+1
-1
Submodule sw/ext/pprzlink updated: fa4a56b0b4...976ed5280e
Reference in New Issue
Block a user