Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
sonar_pwm.c
Go to the documentation of this file.
1/*
2* Copyright (C) 2020 OpenuAS
3*
4* Thanks to Jean-François Erdelyi & Gautier Hattenberger for ADC one
5*
6* This file is part of paparazzi
7*
8* paparazzi is free software; you can redistribute it and/or modify
9* it under the terms of the GNU General Public License as published by
10* the Free Software Foundation; either version 2, or (at your option)
11* any later version.
12*
13* paparazzi is distributed in the hope that it will be useful,
14* but WITHOUT ANY WARRANTY; without even the implied warranty of
15* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16* GNU General Public License for more details.
17*
18* You should have received a copy of the GNU General Public License
19* along with paparazzi; see the file COPYING. If not, see
20* <http://www.gnu.org/licenses/>.
21*/
22
39#include "modules/core/abi.h"
40
42
43#if PERIODIC_TELEMETRY
45#include "pprzlink/messages.h"
46#endif
47#ifdef SENSOR_SYNC_SEND_SONAR
49#endif
50#include "generated/airframe.h"
51#ifdef SITL
52#include "state.h"
53#endif
54
55#ifdef SONAR_USE_PWM_FILTER
57#endif
58
59/* Config parameters for sensor */
60
62#ifndef SONAR_PWM_CHANNEL
63#error "No SONAR_PWM_CHANNEL defined to use sonar_pwm module, add a line like define=SONAR_PWM_CHANNEL value=PWM_INPUT1"
64#endif
65
67#ifndef SONAR_OFFSET
68#define SONAR_OFFSET 0
69#endif
70
72#ifndef SONAR_PWM_PERIOD
73#define SONAR_PWM_PERIOD 4096
74#endif
75
77#ifndef SONAR_SCALE
78#define SONAR_SCALE SONAR_PWM_PERIOD
79#endif
80
82#ifndef SONAR_MEDIAN_SIZE
83#define SONAR_MEDIAN_SIZE 7 //Good for a noisy sonar
84#endif
85
87#ifndef SONAR_MIN_RANGE
88#define SONAR_MIN_RANGE 0.15f //Default is a common value for regular sonars. Cannot measure closer than that
89#endif
90
92#ifndef SONAR_MAX_RANGE
93#define SONAR_MAX_RANGE 7.0f //Reasonable maximum value for regular sonars.
94#endif
95
97#ifndef SONAR_PWM_OFFSET
98#define SONAR_PWM_OFFSET 820 //822
99#endif
100
101// Enable telemetry report
102#ifndef SENSOR_SYNC_SEND_SONAR
103#define SENSOR_SYNC_SEND_SONAR TRUE
104#endif
105
107
108/* Set the default values at initialization */
110{
113 sonar_pwm.raw = 0.0f;
114 #ifdef SONAR_USE_PWM_FILTER
116 #endif
117}
118
119/* Read the sensor current measured value */
120void sonar_pwm_read(void) {
121
122#ifndef SITL
123 // raw duty cycle in usec
125
126 // remove PWM offset where needed
128
129#ifdef SONAR_USE_PWM_FILTER
131#else
133#endif
134
136
137#if SONAR_COMPENSATE_ROTATION
138 float phi = stateGetNedToBodyEulers_f()->phi;
139 float theta = stateGetNedToBodyEulers_f()->theta;
140 float gain = (float)fabs( (double) (cosf(phi) * cosf(theta)));
142#endif
143
144#else // SITL
146#endif // SITL
147
148#if USE_SONAR
151#endif
152
153#ifdef SENSOR_SYNC_SEND_SONAR
155#endif
156}
Main include for ABI (AirBorneInterface).
#define AGL_SONAR_PWM_ID
uint32_t get_sys_time_usec(void)
Get the time in microseconds since startup.
float phi
in radians
float theta
in radians
static struct FloatEulers * stateGetNedToBodyEulers_f(void)
Get vehicle body attitude euler angles (float).
Definition state.h:1306
static struct EnuCoor_f * stateGetPositionEnu_f(void)
Get position in local ENU coordinates (float).
Definition state.h:848
uint16_t foo
Definition main_demo5.c:58
static float update_median_filter_f(struct MedianFilterFloat *filter, float new_data)
static void init_median_filter_f(struct MedianFilterFloat *filter, uint8_t size)
float z
in meters
uint32_t get_pwm_input_duty_in_usec(uint32_t channel)
Definition pwm_input.c:39
arch independent PWM input capture API
struct SonarAdc sonar_adc
Definition sonar_adc.c:50
float distance
Distance measured in meters.
Definition sonar_adc.h:35
struct MedianFilterFloat sonar_filt
Definition sonar_bebop.c:47
void sonar_pwm_init(void)
Definition sonar_pwm.c:109
#define SONAR_SCALE
Ranger scale or sensitivity as you wish.
Definition sonar_pwm.c:78
#define SONAR_PWM_OFFSET
Some sensor may need an initial PWM offset (823 usec in the case of an EZ1 sensor)
Definition sonar_pwm.c:98
void sonar_pwm_read(void)
Definition sonar_pwm.c:120
#define SONAR_MAX_RANGE
The maximum range for the device to be able to measure.
Definition sonar_pwm.c:93
#define SONAR_MIN_RANGE
The minimum range for the device to be able to measure.
Definition sonar_pwm.c:88
struct SonarPwm sonar_pwm
Definition sonar_pwm.c:106
#define SONAR_OFFSET
The input channel of the PWM based sensor.
Definition sonar_pwm.c:68
#define SONAR_MEDIAN_SIZE
The Median Filter strength.
Definition sonar_pwm.c:83
float scale
scale to convert raw to a real distance
Definition sonar_pwm.h:45
uint16_t raw
raw PWM value
Definition sonar_pwm.h:43
float offset
offset
Definition sonar_pwm.h:44
float distance
Distance measured.
Definition sonar_pwm.h:46
API to get/set the generic vehicle states.
Periodic telemetry system header (includes downlink utility and generated code).
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.