Search code examples
gnuplot

Gnuplot shell script ROS data from multiple files


I'm trying to plot data from two different rosbag files using gnuplot. I'm trying to automate this as I have quite a few files that will need to be run.

I need to take the first element of the first column of each file and offset the data of the column w.r.t. that (and then divide by 10^9) to get the time in seconds. My issue is my script returns something different when I run it multiple times. It will either return the first, the second, or (occasionally) the third plot command, which is what I'm interested in.

The code I've cobbled together is below:

#!/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

An example of the dataset is:

%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

And the second input file is:

%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

I've never experienced code where multiple runs produces different results. Can anyone point me in the right direction to fix this mess? The outputs are the three plots below. No error message is output from the script at any time.

First output:

enter image description here

Third (and desired) output:

enter image description here


Solution

  • I don't know why you are sometimes getting different results; I always get the output of the last plot command. However, you seem to be using the first two plot commands only to get the minimum value of the first column for each of the two files. A better way that doesn't generate any plots would be

    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