2017-08-20 2 views
1

J'essaie de tracer des données à partir de deux fichiers rosbag différents en utilisant gnuplot. J'essaie d'automatiser cela car j'ai un certain nombre de fichiers qui devront être exécutés.Script Gnuplot shell Données ROS provenant de plusieurs fichiers

Je dois prendre le premier élément de la première colonne de chaque fichier et décaler les données de la colonne w.r.t. cela (et ensuite diviser par 10^9) pour obtenir le temps en secondes. Mon problème est que mon script renvoie quelque chose de différent lorsque je l'exécute plusieurs fois. Il retournera alors, soit le premier, le deuxième ou (parfois) la troisième commande de la parcelle, qui est ce que je suis intéressé par

Le code que j'ai bricolé est ci-dessous.

#!/bin/bash 
gnuplot -persist <<-EOFMarker 
    set autoscale 
    set datafile separator "," 
    set key autotitle columnhead 
    plot "bag1" using (\$1):2 with linespoints 
    first=GPVAL_DATA_X_MIN 
    plot "bag2" using (\$1):3 with linespoints 
    second=GPVAL_DATA_X_MIN 
    plot "bag1" using ((\$1-first)/10**9):2, "bag2" using ((\$1-second)/10**9):3 
EOFMarker 

Une exemple de l'ensemble de données est:

%time,field.1,field.2,field.3 
1.50317427276591E+018,23,64,64 
1.50317427281556E+018,232,74,64 
1.50317427285689E+018,216,76,64 
1.50317427287325E+018,183,85,64 
1.50317427292519E+018,165,89,64 
1.50317427298662E+018,129,96,64 
1.50317427300161E+018,115,101,64 
1.50317427309547E+018,102,112,64 

Et le second fichier d'entrée est:

%time,field.1,field.2,field.3,field.4 
1.50317425501603E+018,55,45,229,98755 
1.50317425501843E+018,55,45,229,98752 
1.5031742550235E+018,51,43,229,98758 
1.50317425502979E+018,51,43,229,98761 
1.50317425504176E+018,55,41,231,98764 
1.50317425504579E+018,55,41,231,98770 
1.50317425504728E+018,50,42,232,98773 
1.50317425504855E+018,50,42,232,98773 
1.50317425505353E+018,55,41,229,98770 
1.50317425506442E+018,55,41,229,98770 

Je ne l'ai jamais vécu code où plusieurs passages produisent des résultats différents. Quelqu'un peut-il me diriger dans la bonne direction pour réparer ce gâchis? Les sorties sont les trois graphiques ci-dessous. Aucun message d'erreur n'est généré à partir du script à tout moment.

sortie Première:

enter image description here

troisième (et souhaitée) sortie:

enter image description here

+0

Quelle est la sortie différente que vous obtenez? – tima

+0

Donc, je suis nouveau à ce sujet, pas sûr que je peux poster des captures d'écran. Mais essentiellement deux fois cela me donne la sortie de: "plot" bag1 "en utilisant (\ $ 1): 2 avec linespoints", puis une fois il me donne la sortie de "plot" bag2 "en utilisant (\ $ 1): 3 avec des linespoints". Et aléatoirement, il donne le troisième, "intrigue" bag1 "en utilisant (($ 1-first)/10 ** 9): 2," bag2 "en utilisant (($ 1-seconde)/10 ** 9): 3" – airborne

+0

vous pouvez intégrer les captures d'écran dans votre message, ou simplement mettre à jour votre message avec la sortie dans un bloc de code – tima

Répondre

0

Je ne sais pas pourquoi vous obtenez parfois des résultats différents; Je reçois toujours la sortie de la dernière commande plot. Cependant, vous semblez utiliser les deux premières commandes plot uniquement pour obtenir la valeur minimale de la première colonne pour chacun des deux fichiers. Une meilleure façon de ne générer aucune parcelle serait

set datafile separator "," 
set key autotitle columnhead 
stats "bag1" using 1 
first=STATS_min 
stats "bag2" using 1 
second=STATS_min 
plot "bag1" using (($1-first)/10**9):2, "bag2" using (($1-second)/10**9):3 
+0

J'ai essayé ce code et ça ne semble pas fonctionner. À la fin, la première fois qu'il fonctionne comme un script shell, il fonctionne très bien, et donc je peux toujours redémarrer mon shell. L'autre option est que cela fonctionne bien sur la ligne de commande. – airborne