[Rock-dev] Generating one gnuplot data file from different logs

Alexander Duda Alexander.Duda at dfki.de
Tue Jun 18 14:12:39 CEST 2013


On 06/18/2013 01:19 PM, Leif Christensen wrote:
> Hi,
>
> I'm generating my own (gnuplot) data file from different orocos log
> files using this script:
>
>     1 #! /usr/bin/env ruby
>     2 require 'orocos/log'
>     3 include Orocos
>     4
>     5 replay = Log::Replay::open("xsens_imu.0.log", "sysmon.0.log")
>     6
>     7 replay.sysmon.system_status.tracked = true
>     8 replay.xsens_imu.calibrated_sensors.tracked = true
>     9
>    10 #reader1 = replay.xsens_imu.calibrated_sensors.reader
>    11 #reader2 = replay.sysmon.system_status.reader
>    12
>    13 replay.align
>    14
>    15 replay.run do |port,data|
>    16 #  puts reader1.read
>    17 #  puts reader2.read
>    18   t     = data.time if port.name == 'system_status' or
> 'calibrated_sensors'
>    19   enc   = data.asguardJointEncoder if port.name == 'system_status'
>    20   magx  = data.mag[0] if port.name == 'calibrated_sensors'
>    21   if magx.nil?
>    22      puts "magx nil!"
>    23   elsif t.nil?
>    24     puts "t nil"
>    25   elsif enc.nil?
>    26     puts "enc nil"
>    27   else
>    28     printf "%016.4f %6.4f %6.4f\n", t.to_f, enc, magx
>    29   end
>    30 end
>
> Writing the script, several questions pop up:
>
> a) is the replay.align call necessary or already done inside open/load?

if you are not calling it Replay will do it for you the first time you 
call step or run

> b) is this call doing what I hope, sorting the samples of the different
> streams for the replay

yes, you will get the samples ordered after the time they were logged

> c) if so, is it using logical/writing or sample time (if the sample
> provides a time) to sort

you can configure Replay to use the time field of the sample but this is 
not the default behaviour

> d) When accessing 'data' in the replay.run loop, one of the values is
> always nil:
>
>   >...
>   >magx nil!
>   >enc nil
>   >magx nil!
>   >enc nil
>   >...
>
> I guess that is because of the two streams are interleaved now and there
> is no reader defined providing always the last valid reading. But the
> value should't be nil, since it is asigned only in case of the right
> port being read ('... if port.name == ...')

"if" returns always nil if the expression is false and no else is specified
>
> e) What would be your suggestion to come up with a simple data file
> combining streams from different locations preserving the original
> sampling time and order? Tried using the pocolog tool, but wasn't able
> to give multiple stream arguments for the -s option
I would use Replay and would read all ports every time a new sample was 
replayed.

Greets
Alex



-- 
Dipl.-Ing. Alexander Duda
Unterwasserrobotik

DFKI Bremen
Robotics Innovation Center
Robert-Hooke-Straße 5
28359 Bremen, Germany

Phone: +49 (0)421 178-456620
Fax:   +49 (0)421 178-454150
E-Mail: alexander.duda at dfki.de

Weitere Informationen: http://www.dfki.de/robotik
-----------------------------------------------------------------------
Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH
Firmensitz: Trippstadter Straße 122, D-67663 Kaiserslautern
Geschaeftsfuehrung: Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster
(Vorsitzender) Dr. Walter Olthoff
Vorsitzender des Aufsichtsrats: Prof. Dr. h.c. Hans A. Aukes
Amtsgericht Kaiserslautern, HRB 2313
Sitz der Gesellschaft: Kaiserslautern (HRB 2313)
USt-Id.Nr.:    DE 148646973
Steuernummer:  19/673/0060/3



More information about the Rock-dev mailing list