Coder Social home page Coder Social logo

thunderfly-aerospace / tfunipayload01 Goto Github PK

View Code? Open in Web Editor NEW
1.0 4.0 1.0 293 KB

Reference design of a interface for TF-ATMON payload.

License: GNU General Public License v3.0

C++ 80.82% Jupyter Notebook 19.18%
airborne-remote-sensing mavlink-protocol sensor sensor-integration sensor-interfaces tf-atmon uav

tfunipayload01's Introduction

TFUNIPAYLOAD - universal interface for atmospheric sensor payload

Reference design of PX4 interface for generic TF-ATMON compatible payload detector. The purpose of this design is to connect a sensor to the TF-ATMON system despite the fact the sensor does not have any driver in flight stack (autopilot firmware) but at the same time, it is suitable for atmospheric measurement.

TFUNIPAYLOAD block-schematics

The sensor is connected to the TFUNIPAYLOAD board using a serial port. ATmega in TFUNIPAYLOAD01 runs the Arduino firmware, which prepares MAVLink messages to be logged and transported to GCS running TF-ATMON software.

Example of wiring

PX4 is capable of logging MAVLink data from the UART (Telemetry Port) port. Pixhawk standard connector pinout is as follows:

Pin Signal Voltage levels Read/Write Write
1 (red) Vcc +5V Optional Optional
2 (blk) TX (OUT) +3.3 V PX4 -> Payload --
3 (blk) RX (IN) +3.3 V Payload -> PX4 Payload -> PX4
4 (blk) CTS (IN) +3.3 V -- --
5 (blk) RTS (OUT) +3.3 V -- --
6 (blk) GND GND GND GND

For data to be received by PX4 autopilot, it must have a specific form. Explicitly, it needs to use a serial link with MAVLink v2 packets. In that case, the Tunnel (#385) packets will be stored in autopilot's log file and forwarded to the GCS. The TFUSBSERIAL01 hardware could be used to easily check for correct wiring.

The following library c_library_v2, which is automatically generated from message definition files, could be used.

Firmware examples

There are multiple Arduino-based firmware examples for different use cases.

TFUNIPAYLOAD

TFUNIPAYLOAD.ino contains a basic example, which listens to MAVLink messages from autopilot and sends tunnel packets with random data to the autopilot.

TFUNIPAYLOAD_MINIMAL

Since message parsing requires a lot of memory, we have prepared an example, where only HEARTBEAT and TUNNEL messages are sent. This example does not require a connected TX (from autopilot) and it is, therefore, suitable for MCUs with less memory.

Source code: TFUNIPAYLOAD_MINIMAL.ino

Tunnel packet sending function

Tunnel packet sending function

mav.SendTunnelData(data, sizeof(data), 0, 1, 0); This function enables sending tunnel data to autopilot. It takes the following as its arguments:

  • data in uint8_t [127] format
  • data length
  • data type (every type of logged data will have its ID - it serves for easy differentiation of different sensors
  • target sysid
  • target compid

If the data only needs to be logged, the target sysid and compid must match the autopilot’s address, which is usually sysid: 1, compid: 1. If the data has to be logged and sent to GCS, broadcast must be set: sysid: 1, compid: 0 or better sysid: 0, compid: 0.

The autopilot only has a limited amount of storage memory (SD card) and it is therefore necessary to ensure, on the payload’s side, that it does not fill up during the flight. Alternatively, a maximum bandwidth on the MAVLink interface can be set in the autopilot. It is not tested what happens when the level set is exceeded[2021/09].

Autopilot configuration

In the autopilot’s PX4 firmware, it is necessary to correctly set the following parameters (MAV_1_FORWARD and others will be visible only after setting the parameter MAV_1_CONFIG and rebooting the PX4):

Parametr Value Description
MAV_1_CONFIG TELEM 2 The port on which MAVLink packets will be expected. Any free, TELEM port, can be set
MAV_1_FORWARD 1 Enable message forwarding from this port
MAV_1_RADIO_CTL 0
MAV_1_RATE 0 B/s
SER_TEL2_BAUD 57600 It is necessary to configure the port that is set in MAV_1_CONFIG parameter. The setting of the baud rate port.

How to set the parameters in PX4 is described in manual.

How to check, that the autopilot correctly receives MAVLink messages?

There are several options to find out whether the message sending is working correctly.

Using the QGC

The message can be easily viewed live in QGC. For this procedure to function, two conditions must be fulfilled.

  1. The message must be broadcasted, meaning the message must have set its target sysid and compid to 0, 0.
  2. The computer must be connected via a MAVLink instance that supports message forwarding (e.g. via TELEM1 port using modem or UART-USB converter), autopilot's USB does not support it.

Warning, this procedure will not work if the autopilot is connected via a USB cable to the Pixhawk's USB port.

After opening QGC connect the autopilot to the computer (via RF modem or an external USB converter connected to the serial port). Once the autopilot is connected live data (such as autopilot attitude) will become visible. A subsequent click on the QGC logo in the top left corner will open a menu where you select Analyze tools and then open MAVLink inspector in order to see a list of all messages.

listener mavlin tunnel

The list of messages, when functioning correctly, should contain TUNNEL messages.

Using the MAVLink PX4 console

An advantage of connecting via PX4 console lies in its independence on broadcasting setting and the possibility of checking whether the message is received and parsed by the autopilot. If the message is visible here (and the logging is enabled) it is at the same time already logged. With this procedure, a USB cable connection to the autopilot can be used.

Autopilot console can be entered using the following python script or using QGC.

  • In the case of using Python script it is enough to run the python3 script with a parameter of the chosen serial link to which the autopilot/modem is connected.
  • In the case of using QGC, the QGC must be opened in the autopilot console by clicking on the QGC logo (on the top), choosing Analyze tools, and choosing a console.

The received message can be then retrieved using the following command:

listener mavlink_tunnel

The command displays the current tunnel message. Adding the -n 100` parameter will cause a listing of 100 messages (and the new message will display by itself).

If the communication is working properly, the output should look like this:

mavlink tunnel uorb message

From an uLog file

The tunnel message can be logged into autopilot in a standard uLog format. However, because tools like Flight review are unable to display such data format, it is necessary to overcome this problem using a suitable tool. One option is using the PlotJuggler. Another possibility for opening the log is the jupiter notebook.

Known limitations

  • Avoiding overloading the autopilot's memory with messages must be ensured on the payload side
  • A maximum of 2 devices + modem or 3 devices without modem can be connected in this way. The limitation is caused by the Mavlink driver that is only able to connect a maximum of 3 instances of Mavlink devices and also due to a limited number of UART interfaces of the autopilot.
  • It is not possible for the input of payload messages and output to sik modem to have the same type of MAVLink messages (stream) that would differ only in the number of messages per second. This means that it is not possible to simply select a data stream to be transmitted to the ground from the data stream intended for logging. If it is necessary to log more detailed data (with higher frequency) another MAVLink message must be logged.

tfunipayload01's People

Contributors

fluktuacia avatar kaklik avatar roman-dvorak avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar

tfunipayload01's Issues

Aplikace měření ionizujícího záření

Pro základní měření radiace třeba pod bouřkovým mrakem asi bude jednodušší a levnější použít místo AIRDOSu GM trubici. Airdos by pak mohl být využíván pro preciznější identifikaci zdroje a typu ionizujícího záření.

GM trubice zřejmě jde opakovaně kupovat i na ebay.

K této trubici je ještě potřeba připojit zdroj vysokého napětí a rezistorovou síť. Zbytek elektroniky dokáže obstarat arduino například v realizaci #2
Toto měření už bylo realizováno na balonu FIK-5 a FIK-6 modulem dataloggeru.

Problém s napájecím napětím

Autopilot má jako palubní napětí až 5.4V (měřené na autopilotu CUAV NANO s jejich powermodulem). To se ukazuje, že může pro procesor ATmega působit problémy. Procesor má podle dokumentace napájecí napětí do 5.5V. Při provozování v nízké teplotě (cca -5 - -10C) procesor přestane správně fungovat.

Zřejmě by unipayload měl obsahovat nějaký stabilizátor napětí na vstupu. Také se určitě budou používat senzory, které mají napájecí napětí jen 3.3V. Takže by bylo vhodné mít možnost připojení i takových senzorů.

Podle dronecode standardu tam má být 5V
obrazek

Tento problém byl na prototypovém kusu (z MLAB modulu) dočasně vyřešen vložením křemíkové diody do série s napájením způsobující úbytek napětí 0.7V.

Základní snímače - pomocné měření

Je pravděpodobné, že pro většinu měření bude potřebné snímat některé pomocné atmosférické veličiny. Napadá mě:

  • Tlak vzduchu (aktuálně měřeno uvnitř autopilota)
  • Teplota vzduchu (Nějak měří autopilot, nepřímo, teplotou různých jiných čidel, IMU, barometr a podobně)
  • Relativní vlhkost - aktuálně není měřeno vůbec.

Tyto parametry budou potřeba pro jiná měřění jako:

  • Měření ionizujícího záření #4
  • Měření elektrického pole
  • Měření koncentrace iontů

Měření relativní vlhkosti a teploty

Měření těchto dvou veličin je poměrně provázané protože relativní vlhkost se přímo mění s teplotou. Dále je to čidlo, které je velmi běžně rozšířené.
V našem případě by asi bylo vhodné použít sht31, SHT40, SHT40
Vzniká tak otázka zda se tohle čidlo snažit zabudovat do TFUNIPAYLOAD, nebo spíše postupovat tak, že bychom měli separátní PCB, optimalizované pro přímé připojení do autopilota. S tím, že v autopilotovi by byl driver pro čtení přímo takového snímače.

Například podle tohoto článku relativní vlhkost často interferuje s měřením koncentrace pevných částic. Většina snímačů pevných částic dává relevantní hodnoty pouze při relativní vlhkosti menší než 85%.

Výhody:

  • Čidlo by šlo použít i mimo TFATMON měření
  • Měření může být přímo logováno autopilotem jako separátní zpráva měřená asynchronně s měřením z TFUNIPAYLOAD.
  • Mohlo by to být základní "demoaplikací", na které by si zákazníci snadno vyzkoušeli náš systém, v podsatě něco jako reklamní produkt.

Nevýhody:

  • Zákazník by teoreticky mohl částečně obejít náš systém a nepotřebovat ho v případě, že by mu tohle čidlo stačilo ke spokojenosti.
  • Měření bude asynchronní k TFUNIPAYLOAD měřením, na druhou stranu je tohle spíš teoretické omezení. Protože jednak reakční doba samotného snímače je poměrně pomalá a potom lze situaci vyřešít tím, že se bude logovat několikrát za sekundu v autopilotovi
  • Data ze senzoru nebudou do pozemní stanice posílána jako pro TF-ATMON standardní tunnel packety. Znamená to, pozemní stanici TF-ATMON naučit pracovat i s jinými telemetrickými daty z autopilota.

Dohledávání ztracených dronů

Pokud dron spadne někde uprostřed pole, je problém ho najít, pokud je telemetrické spojení přerušené. Pokud dron stále funguje alespoň autopilot a telemetrický vysílač, bylo by možné použít druhý dron jako opakovač signálu.

Teoreticky by mělo stačit připojit na vyhledávací dron druhý modem (nastavený na stejné netID jak hledaný dron) s anténou a druhý (telemetrický) modem pro spojení se zemí. Oba budou zapojené do autopliota. Autopilot by měl být schopný na základě sysID přeposlat mavlink pakety z hledaného dronu na zem přes druhý datový spoj.

Takovou konfiguraci je nutné otestovat v provozu. Asi by bylo vhodné omezit vlastní datový přenos dohledávacího dronu a nebo filtrovat forwardované packety.

Wireless connection

Pro některé aplikace by bylo výhodné, kdyby TFUNIPAYLOAD byl s autopilotem spojen bezdrátově. Příkladem je např. mlýnek elektrického pole.

Na takovou aplikaci by to ale zřejměchtělo mít něco jako bezdrátovou seriovou linku krátkého dosahu. Trochu se ale obávám, že nejbližším technicky realizovatelným řesením takového problému je SiK modem s nízkým nastaveným výkonem.

Modul pro připojování různých payloadů

Zřejmě by bylo užitečné, kdyby pro připojení senzorů, které jsou samostaným funčním celkem například SPS30, existoval modul, který by měl vhodné rozhraní pro připojení jak k payloadu tak i k autopilotovi.

Vzhledem k tomu že aktuálně létáme s modulem ATmegaTQ4401A osazeným stejným MCU jako je v DATALOGGER01A tedy ATMEGA1284P-AU. Ke kterému je přes I2C připojen snímač SPS30 viz konstrukce TFPM01.

Tohle celé je řešením, které neoplývá ani nízkou hmotností ani rozumnou mechanickou odolností.
Bylo by tak zřejmě vhodné modul překreslit do podoby univerzálního TFUNIPAYLOAD modulu podle níže uvedených klíčových vlastností.

Vhodným řešením zřejmě je použití Arduina/Labduina s těmito úpravami:

  • Přidání konektoru pro přímé připojení k TELEM portu autopilota (JST-GH)
  • Přidání konektoru k připojení na Payload port TFGPS01 (JST-GH)
  • I2C konektor (JST-GH)
  • SPI konektor (JST-GH)
  • Univerzální IO konektor (Nemám představu jak by měl vypadat)
  • Nadproudová ochrana vstupního napájení, aby případná porucha v připojeném payloadu nemohla ovlivnit autopilota.
  • Minimálně jedna indikační LED
  • Uživatelsky programovatelné tlačítko
  • ADC konektor viz standard pixhawk

Zbylé piny na MCU bude asi vhodné vyvést buď na hřebínek a nebo do nějakého JST-GHkonektoru, ze kterého se budou náhodně používat.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.