A partir du logiciel qgroundcontrol il est possible de faire l'enregistrement des trames mavlink reçues depuis le "kitedrone".
Les trames sont enregistrées de manière brute dans un "bag".
Les versions précédentes du logiciel permettaient de rejouer ces enregistrements, puis de les convertir dans un fichier CSV (mais cette fois encore une ligne par message reçu). Je n'ai pas retrouvé cette fonctionnalité dans la version actuelle du logiciel.
Il est par contre de faire ce même postraitement avec le script mavlogdump de pymavlink.
Je suis parti d'enregistrements réalisés sur le terrain de rugby de l'ECN (et téléchargeable ici)
Une fois pymavlink installé, mavlogdump se trouve dans le répertoire mavlink/pymavlink/tools
python mavlogdump.py ~/kites/robokite/robokite/FlightData/ECN_2202_1.mavlink -o ECN_2202_1.txt
Le fichier texte résultant peut facilement être ouvert. Pas facile cependant de faire un tracé.
Une autre alternative est d'utilisé mavtomfile.py qui génère un fichier .m (ensemble de commande matlab) permettant de recréer le jeu de données, cette fois sous la forme de matrices.
python mavtomfile.py ~/kites/robokite/robokite/FlightData/ECN_2202_1.mavlink
Le fichier de sortie est généré dans le répertoire du fichier d'entrée avec l'extension .m au lieu de .mavlink.
Il peut-être ouvert en lançant octave, puis en exécutant
run ECN_2002_2.m
Les données présentes peuvent-être listées en tappant
octave:8> who
Variables in the current scope:
ATTITUDE HEARTBEAT SCALED_PRESSURE2
Il est ensuite possible de voir les champs correspondants à chaque trame
octave:9> SCALED_PRESSURE2
SCALED_PRESSURE2 =
ATTITUDE HEARTBEAT SCALED_PRESSURE2
scalar structure containing the fields:
columns =
{
[1,1] = timestamp
[1,2] = time_boot_ms
[1,3] = press_abs
[1,4] = press_diff
[1,5] = temperature
}
data =
1.4561e+09 1.8920e+06 8.1669e+06 7.0620e+01 0.0000e+00
1.4561e+09 1.8920e+06 8.1681e+06 6.2570e+01 0.0000e+00
Il est ensuite possible de faire des tracés par exemple l'angle d'élévation (pitch) en fonction de la tension dans la ligne (rangé dans SCALED_PRESSURE2)
plot(ATTITUDE.data(:,2), ATTITUDE.data(:,4)*180/3.1415,SCALED_PRESSURE2.data(:,2), SCALED_PRESSURE2.data(:,4))
Aucun commentaire:
Enregistrer un commentaire