next up previous contents index
Next: Replaying a log Up: Logs Previous: Creating logs

      
Extracting data from Logs

Two main functions are provided to extract/process data from a log:3.10
(read-log-data directory fileName foutput)
 // Apply foutput to each line of the log file directory/filename

(read-log-data-to-file directory logfileName datafileName foutput cr?)
  // The not #f results of applying foutput to each line of 
  // directory/logfileName are stored in directory/datafileName. 
  // By default a carriage-return is added to each line in the outputfile.
For each entry in the log-file of the form
timestamp entry-number time log-name value
a line
(time log-name value)
is passed to the function foutput above.

Example 2  

This example illustrates how to extract the odometry information from a log created as in Example 1.

(define (odometry-info directory logfileName volume outputFile )
  (read-log-data-to-file directory 
                (format #f "~a-vol~a.log" logfileName volume)
                outputFile
   (lambda (line)
     (let ((odo (assoc 'location (third line))))
       (if odo
         (format #f "~a ~a" (first (cdr odo)) (second (cdr odo)))
       )))
  )
)
end of example

Notice that the function passed to read-log-data-to-file takes one argument (line) and returns an string. (third line) denotes the value you store for a particular line (entry) in the log.

Next we illustrate a more complex example on how to manipulate data in a log. The example below defines a function that produces a file with the (x,y) coordinates associated with the different rangefinder readings logged in a file. Odometry information is used to transform the rangefinder points (in the wheelchair frame of reference) to the global frame of reference associated with the odometry.

Example 3  

(define (integrate-readings directory logfileName volume outputFile )
  (read-log-data-to-file 
     directory 
     (format #f "~a-vol~a.log" logfileName volume)
     outputFile
     (lambda (line)
       (let ((points (assoc 'points (third line)))
             (odo    (assoc 'location (third line)))
             (x0 #f) (y0 #f) (th0 #f) (lineout "")
             )
         (when (and odo points)
           (set! points (cdr points))
           (set! x0 (first (cdr odo)))
           (set! y0 (second (cdr odo)))
           (set! th0 (third (cdr odo)))
           (set! points 
             (map (lambda (p)
                    (set! p (rotate-point p (+ (- *pi/2*) th0)))
                    (list (+ x0 (first p)) (+ y0 (second p)))
                  )
                  points))
         (set! lineout "")
         (dolist (p points)
            (set! lineout
               (format #f "~a\n~a ~a" lineout (first p) (second p))))
         lineout
       )))
     #f ;;; don't add carriage return to lines
  )
)
end of example


next up previous contents index
Next: Replaying a log Up: Logs Previous: Creating logs
Emilio Remolina
2000-10-04