Difference between revisions of "Module/Airspeed ETS"

From PaparazziUAV
Jump to navigation Jump to search
m (added warnings (pitfalls); fixed a type)
m
 
(14 intermediate revisions by 4 users not shown)
Line 1: Line 1:
__NOTOC__
= Introduction =
 
[[Image:Ets_airspeed_v3.jpg|thumb|right|Eagletree Airspeed v3]]
[[Image:Ets_airspeed_v3.jpg|thumb|right|Eagletree Airspeed v3]]
<categorytree style="float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;" mode=pages>Modules</categorytree>
<categorytree style="float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;" mode=pages>Modules</categorytree>
== Overview ==


The EagleTree Airspeed Sensor is a low cost module and comes with a good pitot tube (Prandtl style, pitot-static tube) that includes static and dynamic ports. It has an I²C interface that connects directly to the Autopilot I²C port. The paparazzi autopilot code is able to regulate the throttle in order to keep the airspeed constant (and a minimum ground speed).
The EagleTree Airspeed Sensor is a low cost module and comes with a good [http://en.wikipedia.org/wiki/Pitot_tube pitot tube] (Prandtl style, pitot-static tube) that includes static and dynamic ports. It has an I²C interface that connects directly to the Autopilot I²C port.
 
NOTE: the sensor has two operating modes which determine what value is sent to the autopilot. In the default mode the pressure diference between the 2 ends of the pitot is sent. Supposedly this could be used to calculate airspeed but in reality temperature must also be taken into account. The rest of this page assumes that a temperature reading is not needed and the usefullness is in question. Do not use it for any serious stuff.<BR>
In the other mode, called "third party mode", the actual speed value is sent as shown in the sensor. The sensor is said by the manufacturer to take temperature into account to arrive at this value so this should be used as the correct speed. Unfortunately the Paparazzi code does not work in this mode and additional hardware (an EagleTree elogger) is needed to put the sensor in this mode.
 


{|border="1"
{|border="1"
Line 28: Line 32:
[http://www.eagletreesystems.com/Support/manuals/airspeed-v3.pdf Product data sheet]
[http://www.eagletreesystems.com/Support/manuals/airspeed-v3.pdf Product data sheet]


== Hardware ==
= Hardware =


The sensor directly interfaces to the 3.3V I2C port of the autopilots and is supplied by +5V.  
The sensor can directly be connected to an I2C port of and autopilot. The + supply voltage can be between 3V and 16V.  


When you buy the airspeed sensor it is set to operate in the default mode.  
When you buy the airspeed sensor it is set to operate in the default mode.  
Line 36: Line 40:
<span style="color:#FF0000">'''Caution!'''</span> Make sure you did not set it somehow to 3rd party mode.
<span style="color:#FF0000">'''Caution!'''</span> Make sure you did not set it somehow to 3rd party mode.


=== Wiring ===
== Wiring ==


The ETS Airspeed sensor has an I2C cable with the following layout:
The ETS Airspeed sensor has an I2C cable with the following layout:
{|border="1"
|-valign="top"
||'''Autopilot I2C'''||'''ETS Airspeed wire colour'''
|-
|GND
|white
|-
| +5V
|red
|-
|SDA
|yellow
|-
|SCL
|brown
|}
Please refer to your boards documentation to find out the correct pinout on your board (which cable to connect to which pin).
Below an example for the TWOG v1.0 is given.
==== Example: TWOG v1.0 ====
This is the wiring for the TWOG v1.0 and the Eagle Tree Airspeed sensor on/for the I2C connector and serves as an example.


{|border="1"
{|border="1"
|-valign="top"
|-valign="top"
||'''Autopilot I2C pin'''||'''Autopilot I2C'''||'''ETS Airspeed wire colour'''
||'''Tiny/TWOG I2C pin'''||'''Autopilot I2C'''||'''ETS Airspeed wire colour'''
|-
|-
|1
|1
Line 77: Line 58:
|3
|3
| +3.3V
| +3.3V
| do not connect
|  
|-
|-
|4
|4
Line 88: Line 69:
|}
|}


Please refer to your boards documentation to find out the correct pinout on your board (which cable to connect to which pin).
As an example the correct pinout for the TWOG v1.0 and Tiny has been given in the table above.
= Usage =


== Usage ==
'''Please refer to the generated docs for the exact configuration options of the version you are using!'''
http://docs.paparazziuav.org/latest/module__airspeed_ets.html


To use it load the ''airspeed_ets'' module:
To use it load the ''airspeed_ets'' module:
Line 96: Line 82:
   <modules>
   <modules>
     ...
     ...
    <load name="airspeed_ets.xml" />
    <module name="airspeed_ets">
     ...
     ...
   </modules>
   </modules>
Line 102: Line 88:
}}
}}


<div class="toccolours mw-collapsible mw-collapsed" style="width:800px">
For versions older than v5.8
<div class="mw-collapsible-content">For versions older than v5.8, also define the used I2C device:
Depending on your board and the I2C interface you are using, you may need to
Depending on your board and the I2C interface you are using, you may need to
enable I2CX, where X is 0,1,2,etc., if you are not using it already:
enable I2CX, where X is 0,1,2,etc., if you are not using it already:
Line 115: Line 104:
</source>
</source>
}}
}}
</div></div>


 
== Configuration ==
=== Configuration ===


You can also set some '''optional parameters to change the default configuration'''.  
You can also set some '''optional parameters to change the default configuration'''.  
For example to use I2C1 instead of I2C0, a scale of 2 (default is 1.8) and offset of 50 (default is 0) is needed:
For example to use I2C1 instead of I2C0, a scale of 1.44 (default is 1.8) and offset of 50 (default is 0) is needed:
{{Box Code|conf/airframes/myplane.xml|
{{Box Code|conf/airframes/myplane.xml|
<source lang="xml">
<source lang="xml">
   <modules>
   <modules>
     <load name="airspeed_ets.xml">
     <module name="airspeed_ets">
       <!-- Applies if another I2C interface than IC20 is used -->
       <!-- Applies if another I2C interface than IC20 is used -->
       <define name="AIRSPEED_ETS_SCALE"  value="2"/>  
       <define name="AIRSPEED_ETS_SCALE"  value="1.44"/>  
       <define name="AIRSPEED_ETS_OFFSET"  value="50"/>
       <define name="AIRSPEED_ETS_OFFSET"  value="50"/>
       <define name="AIRSPEED_ETS_I2C_DEV" value="i2c1"/>  
       <configure name="AIRSPEED_ETS_I2C_DEV" value="i2c1"/>  
     </load>
     </module>
   </modules>
   </modules>
</source>
</source>
}}
}}


== Usage as sensor for speed control ==
== Usage as sensor for speed control ==
Line 140: Line 128:
{{Box Code|conf/airframes/myplane.xml|
{{Box Code|conf/airframes/myplane.xml|
<source lang="xml">
<source lang="xml">
   <target name="ap" board="twog_1.0">
   <target name="ap" board="px4fmu_4.0_chibios">
     <define name="AGR_CLIMB"/>
     <define name="AGR_CLIMB"/>
    <define name="USE_I2C0"/>    <!-- Details: see above -->
     <define name="USE_AIRSPEED"/> <!-- Use the airspeed sensor in the control loop -->
     <define name="USE_AIRSPEED"/> <!-- Use the airspeed sensor in the control loop -->
   </target>
   </target>
</source>
</source>
}}
}}
Where ofcourse the board value is just an example here, use the name of the hardware you use.


=== Airframe configuration ===
=== Airframe configuration ===
   
   
Now to use real airspeed values for adjusting your aircrafts autopilot behavior, add the following to the end of the "VERTICAL CONTROL" section of your airframe file:
Now to use real airspeed values for adjusting your aircraft autopilot behavior there are several way to accomplish this. A simple classic way is to add the following to the end of the "VERTICAL CONTROL" section of your airframe file:
{{Box Code|conf/airframes/myplane.xml|
{{Box Code|conf/airframes/myplane.xml|
<source lang="xml">
<source lang="xml">
Line 172: Line 161:


See paparazzi/conf/airframes/easystar_ets_example.xml for an example airframe configuration.
See paparazzi/conf/airframes/easystar_ets_example.xml for an example airframe configuration.
Better even is to start using ETECS, '''E'''nhanced '''T'''otal '''E'''nergy '''C'''ontrol '''S'''ystem
Take a look at See ~/paparazzi/conf/airframes/examples/MentorEnergy.xml for an example airframe configuration.


=== Debugging and logging the airspeed values ===
=== Debugging and logging the airspeed values ===


To debug or log the raw values from the ETS airspeed sensor define SENSOR_SYNC_SEND in your airframe file to send the message AIRSPEED_ETS on every sensor reading.  
To debug or log the raw values from the ETS airspeed sensor define AIRSPEED_ETS_SYNC_SEND in your airframe file to send the message AIRSPEED_ETS on every sensor reading.  
Note that defining this sends the AIRSPEED_ETS message at the sensor read rate as defined in conf/modules/airspeed_ets.xml.  
Note that defining this sends the AIRSPEED_ETS message at the sensor read rate as defined in conf/modules/airspeed_ets.xml.  
This does not have any bearing on the AIRSPEED message (if both SENSOR_SYNC_SEND and USE_AIRSPEED are defined, then both messages are sent).  
This does not have any bearing on the AIRSPEED message (if both AIRSPEED_ETS_SYNC_SEND and USE_AIRSPEED are defined, then both messages are sent).  


<span style="color:#FF0000">'''Caution!'''</span> ''Please note: if you are using the master branch and have merged commits on or later than July 16, 2013, please replace SENSOR_SYNC_SEND with AIRSPEED_ETS_SYNC_SEND''
<span style="color:#FF0000">'''Caution!'''</span> ''Please note: if you are using and old branch of before July 16, 2013, please replace AIRSPEED_ETS_SYNC_SEND with SENSOR_SYNC_SEND''
 
Also note that as of 15 Oct 2023 the default debug message is no longer available in the PPRZlink messages.xml file.
Therefore to determine your possible sensor offset add this temporary debug message to the ~/paparazzi/sw/ext/pprzlink/message_definitions/v1.0/messages.xml
 
<source lang="xml">
 
    <message name="AIRSPEED_ETS" id="57">
      <field name="adc" type="uint16"/>
      <field name="offset" type="uint16"/>
      <field name="scaled" type="float"/>
    </message>
 
</source>
 
After adding that don't forget that this is needed before you upload you firmware to the flightcontroller to make sure changes are included:
 
make clean && make


{{Box Code|conf/airframes/myplane.xml|
{{Box Code|conf/airframes/myplane.xml|
<source lang="xml">
<source lang="xml">
   <modules>
   <modules>
    <load name="airspeed_ets.xml">
 
      <define name="SENSOR_SYNC_SEND"/>
      ...
    </load>
 
      <module name="airspeed_ets">
        <configure name="AIRSPEED_ETS_I2C_DEV" value="i2c1"/>     
        <define name="AIRSPEED_ETS_START_DELAY" value="0.7"/>
        <define name="AIRSPEED_ETS_SCALE" value="1.76"/>
        <!--<define name="AIRSPEED_ETS_OFFSET" value="2"/>-->
        <define name="AIRSPEED_ETS_3RD_PARTY_MODE" value="FALSE"/><!-- The default out of the box is ETS mode-->
        <define name="AIRSPEED_ETS_USE_FILTER" value="TRUE"/>
        <define name="AIRSPEED_ETS_LOWPASS_TAU" value=".20"/>
       
        <define name="AIRSPEED_ETS_SYNC_SEND"/> <!-- Can be disabled after full validation after testflight -->
      </module>
 
    ...
 
   </modules>
   </modules>
</source>
</source>
Line 201: Line 225:
}}
}}


The AIRSPEED_ETS message does NOT need to be added to the telemetry configuration since it is sent directly by the module if SENSOR_SYNC_SEND is defined.
The AIRSPEED_ETS message does NOT need to be added to the telemetry configuration since it is sent directly by the module if AIRSPEED_ETS_SYNC_SEND is defined.


=== NOTES ===
=== NOTES ===
Line 209: Line 233:
== Measurement only ==
== Measurement only ==


To use the  sensor for airspeed measurement is also possible. This Measurement only mode does thus not imput to the control loops to have effect to the aircraft behaviour.
To use the  sensor for airspeed measurement is also possible. This Measurement only mode does thus not input to the control loops to have effect to the aircraft behavior.


To see the sensors data in the log file set the SENSOR_SYNC_SEND in your airframe file. Every time new data is available it will be sent directly.
To see the sensors data in the log file set the SENSOR_SYNC_SEND in your airframe file. Every time new data is available it will be sent directly.
Line 215: Line 239:
<source lang="xml">
<source lang="xml">
   <modules>
   <modules>
    <load name="airspeed_ets.xml">
    <module name="airspeed_ets">
       <define name="SENSOR_SYNC_SEND"/>
       <define name="AIRSPEED_ETS_SYNC_SEND"/>
     </load>
     </module>
   </modules>
   </modules>
</source>
</source>
}}
}}


<span style="color:#FF0000">'''Caution!'''</span> ''Please note: if you are using the master branch and have merged commits on or later than July 16, 2013, please replace SENSOR_SYNC_SEND with AIRSPEED_ETS_SYNC_SEND''
<span style="color:#FF0000">'''Caution!'''</span>''Please note: if you are using and old branch of before July 16, 2013, please replace AIRSPEED_ETS_SYNC_SEND with SENSOR_SYNC_SEND''


===Result message===
===Result message===
Line 243: Line 267:
  149.730 123 AIRSPEED_ETS 1627 1606 7.942226
  149.730 123 AIRSPEED_ETS 1627 1606 7.942226
  149.841 123 AIRSPEED_ETS 1628 1606 7.942226
  149.841 123 AIRSPEED_ETS 1628 1606 7.942226
=Issues=
Some people report that the sensor only works after a fresh upload, not after a regular power on. Adding a AIRSPEED_ETS_START_DELAY setting could help getting it to work. For this to work need at least version 5.2 of Paparazzi.
Add the following to your module part in your airframe XML document. Where ''value'' can be anything from 0.01 to 4seconds. Some users report that a value of 1 fixes the issue for them.
<source lang="xml">
  <module name="airspeed_ets">
  ...
  <define name="AIRSPEED_ETS_START_DELAY" value="1"/>
  ...
</module>
</source>


[[Category:User_Documentation]] [[Category:Modules]]
[[Category:User_Documentation]] [[Category:Modules]]

Latest revision as of 07:00, 8 November 2023

Introduction

Eagletree Airspeed v3

The EagleTree Airspeed Sensor is a low cost module and comes with a good pitot tube (Prandtl style, pitot-static tube) that includes static and dynamic ports. It has an I²C interface that connects directly to the Autopilot I²C port.

NOTE: the sensor has two operating modes which determine what value is sent to the autopilot. In the default mode the pressure diference between the 2 ends of the pitot is sent. Supposedly this could be used to calculate airspeed but in reality temperature must also be taken into account. The rest of this page assumes that a temperature reading is not needed and the usefullness is in question. Do not use it for any serious stuff.
In the other mode, called "third party mode", the actual speed value is sent as shown in the sensor. The sensor is said by the manufacturer to take temperature into account to arrive at this value so this should be used as the correct speed. Unfortunately the Paparazzi code does not work in this mode and additional hardware (an EagleTree elogger) is needed to put the sensor in this mode.


Module name sensors/airspeed_ets
Sensor type air speed
Range 4m/s .. 150m/s
Resolution 0.3m/s
Refresh rate 10Hz
I2C address 0xEA

Product data sheet

Hardware

The sensor can directly be connected to an I2C port of and autopilot. The + supply voltage can be between 3V and 16V.

When you buy the airspeed sensor it is set to operate in the default mode.

Caution! Make sure you did not set it somehow to 3rd party mode.

Wiring

The ETS Airspeed sensor has an I2C cable with the following layout:

Tiny/TWOG I2C pin Autopilot I2C ETS Airspeed wire colour
1 GND white
2 +5V red
3 +3.3V
4 SDA yellow
5 SCL brown

Please refer to your boards documentation to find out the correct pinout on your board (which cable to connect to which pin). As an example the correct pinout for the TWOG v1.0 and Tiny has been given in the table above.

Usage

Please refer to the generated docs for the exact configuration options of the version you are using! http://docs.paparazziuav.org/latest/module__airspeed_ets.html

To use it load the airspeed_ets module:

File: conf/airframes/myplane.xml
  <modules>
    ...
     <module name="airspeed_ets">
    ...
  </modules>

For versions older than v5.8

For versions older than v5.8, also define the used I2C device:

Depending on your board and the I2C interface you are using, you may need to enable I2CX, where X is 0,1,2,etc., if you are not using it already:

File: conf/airframes/myplane.xml
  <firmware>
    ...
    <define name="USE_I2C0" /> <!-- In case you attached the ETS module to I2C0 -->
    <define name="USE_I2C1" /> <!-- In case you attached the ETS module to I2C1 -->
    <define name="USE_I2C2" /> <!-- In case you attached the ETS module to I2C2 -->
    <define name="USE_I2C3" /> <!-- In case you attached the ETS module to I2C3 -->
  </firmware>

Configuration

You can also set some optional parameters to change the default configuration. For example to use I2C1 instead of I2C0, a scale of 1.44 (default is 1.8) and offset of 50 (default is 0) is needed:

File: conf/airframes/myplane.xml
  <modules>
    <module name="airspeed_ets">
      <!-- Applies if another I2C interface than IC20 is used -->
      <define name="AIRSPEED_ETS_SCALE"   value="1.44"/> 
      <define name="AIRSPEED_ETS_OFFSET"  value="50"/>
      <configure name="AIRSPEED_ETS_I2C_DEV" value="i2c1"/> 
    </module>
  </modules>

Usage as sensor for speed control

To use the sensor to control the speed of your aircraft add the aggressive climb flag, define which I2C device you are enabling and enable airspeed control:

File: conf/airframes/myplane.xml
  <target name="ap" board="px4fmu_4.0_chibios">
    <define name="AGR_CLIMB"/>
    <define name="USE_AIRSPEED"/> <!-- Use the airspeed sensor in the control loop -->
  </target>

Where ofcourse the board value is just an example here, use the name of the hardware you use.

Airframe configuration

Now to use real airspeed values for adjusting your aircraft autopilot behavior there are several way to accomplish this. A simple classic way is to add the following to the end of the "VERTICAL CONTROL" section of your airframe file:

File: conf/airframes/myplane.xml
  <section name="VERTICAL_CONTROL" prefix="V_CTL_">
    ....
    <!-- auto airspeed and altitude inner loop (for airspeed sensor) -->
    <define name="AUTO_AIRSPEED_SETPOINT" value="13.0"  unit="m/s" /> <!-- SETPOINT values may need to be adjusted to suit your aircraft -->
    <define name="AUTO_AIRSPEED_PGAIN"    value="0.060" />
    <define name="AUTO_AIRSPEED_IGAIN"    value="0.050" /> 
  
    <define name="AUTO_GROUNDSPEED_SETPOINT" value="7.0"  unit="m/s" /> <!-- SETPOINT values may need to be adjusted to suit your aircraft -->
    <define name="AUTO_GROUNDSPEED_PGAIN"    value="0.75" />
    <define name="AUTO_GROUNDSPEED_IGAIN"    value="0.25" />
  </section>

Note that the SETPOINT values may need to be adjusted to suit your aircraft.

Note that depending on whether you set the AIRSPEED setpoint or the GROUNDSPEED setpoint higher, either constant airspeed or constant groundspeed, respectively, will be the goal of the controller.

See paparazzi/conf/airframes/easystar_ets_example.xml for an example airframe configuration.

Better even is to start using ETECS, Enhanced Total Energy Control System

Take a look at See ~/paparazzi/conf/airframes/examples/MentorEnergy.xml for an example airframe configuration.

Debugging and logging the airspeed values

To debug or log the raw values from the ETS airspeed sensor define AIRSPEED_ETS_SYNC_SEND in your airframe file to send the message AIRSPEED_ETS on every sensor reading. Note that defining this sends the AIRSPEED_ETS message at the sensor read rate as defined in conf/modules/airspeed_ets.xml. This does not have any bearing on the AIRSPEED message (if both AIRSPEED_ETS_SYNC_SEND and USE_AIRSPEED are defined, then both messages are sent).

Caution! Please note: if you are using and old branch of before July 16, 2013, please replace AIRSPEED_ETS_SYNC_SEND with SENSOR_SYNC_SEND

Also note that as of 15 Oct 2023 the default debug message is no longer available in the PPRZlink messages.xml file. Therefore to determine your possible sensor offset add this temporary debug message to the ~/paparazzi/sw/ext/pprzlink/message_definitions/v1.0/messages.xml

    <message name="AIRSPEED_ETS" id="57">
      <field name="adc" type="uint16"/>
      <field name="offset" type="uint16"/>
      <field name="scaled" type="float"/>
    </message>

After adding that don't forget that this is needed before you upload you firmware to the flightcontroller to make sure changes are included:

make clean && make


File: conf/airframes/myplane.xml
  <modules>

      ...

      <module name="airspeed_ets">
        <configure name="AIRSPEED_ETS_I2C_DEV" value="i2c1"/>       
        <define name="AIRSPEED_ETS_START_DELAY" value="0.7"/>
        <define name="AIRSPEED_ETS_SCALE" value="1.76"/>
        <!--<define name="AIRSPEED_ETS_OFFSET" value="2"/>-->
        <define name="AIRSPEED_ETS_3RD_PARTY_MODE" value="FALSE"/><!-- The default out of the box is ETS mode-->
        <define name="AIRSPEED_ETS_USE_FILTER" value="TRUE"/> 
        <define name="AIRSPEED_ETS_LOWPASS_TAU" value=".20"/>
        
        <define name="AIRSPEED_ETS_SYNC_SEND"/> <!-- Can be disabled after full validation after testflight -->
      </module>

     ...

  </modules>

The general airspeed can be displayed in the Messages tool by adding the AIRSPEED message to the telemetry file as follows:

File: conf/telemetry/default.xml
  <process name="Ap">
    <mode name="default">
      <message name="AIRSPEED" period="1.0"/>
      ...

The AIRSPEED_ETS message does NOT need to be added to the telemetry configuration since it is sent directly by the module if AIRSPEED_ETS_SYNC_SEND is defined.

NOTES

  1. In the GCS, the strip displays ground speed and not airspeed by default. In order to display airspeed, drag-and-drop the airspeed message field from the Messages tool onto the 2D map of the GCS.
  2. The telemetry name AIRSPEED" should actually be called SPEED and contains Groundspeed and airspeed return values.

Measurement only

To use the sensor for airspeed measurement is also possible. This Measurement only mode does thus not input to the control loops to have effect to the aircraft behavior.

To see the sensors data in the log file set the SENSOR_SYNC_SEND in your airframe file. Every time new data is available it will be sent directly.

File: conf/airframes/myplane.xml
  <modules>
     <module name="airspeed_ets">
      <define name="AIRSPEED_ETS_SYNC_SEND"/>
    </module>
  </modules>

Caution!Please note: if you are using and old branch of before July 16, 2013, please replace AIRSPEED_ETS_SYNC_SEND with SENSOR_SYNC_SEND

Result message

The raw data (adc), estimated offset at init time (offset) and the converted result (scaled) is written to the log file.

File: conf/messages.xml
 <message name="AIRSPEED_ETS" id="57">
   <field name="adc"    type="uint16" />
   <field name="offset" type="uint16" />
   <field name="scaled" type="float"  />
 </message>


Sample log file lines

149.529 123 AIRSPEED_ETS 1626 1606 8.024844
149.633 123 AIRSPEED_ETS 1626 1606 8.024844
149.730 123 AIRSPEED_ETS 1627 1606 7.942226
149.841 123 AIRSPEED_ETS 1628 1606 7.942226

Issues

Some people report that the sensor only works after a fresh upload, not after a regular power on. Adding a AIRSPEED_ETS_START_DELAY setting could help getting it to work. For this to work need at least version 5.2 of Paparazzi.

Add the following to your module part in your airframe XML document. Where value can be anything from 0.01 to 4seconds. Some users report that a value of 1 fixes the issue for them.

  <module name="airspeed_ets">
 
   ...
   <define name="AIRSPEED_ETS_START_DELAY" value="1"/>
   ...
 
 </module>