Update of /cvsroot/playerstage/code/player/utils
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26107

Modified Files:
      Tag: release-2-0-patches
        Makefile.am 
Added Files:
      Tag: release-2-0-patches
        playerlog2carmenlog.py 
Log Message:
added player log converter

--- NEW FILE: playerlog2carmenlog.py ---
#!/usr/bin/env python

# Simple parser to convert Player-format logfiles to CARMEN-format
# logfiles.
#    Brian Gerkey <[EMAIL PROTECTED]>
#    Hauke Strasdat

# NOTES:
#   - So far, this parser handles only position (ODOM) and laser (FLASER)
#     messages.  This is sufficient for most mapping tasks.
#  
#   - Both 1-degree and 0.5-degree laser scans are handled (downsampled to
#     CARMEN's 1-degree format).
#
#   - Only a 180-degree FOV is allowed.
#
#   - I have guessed at some details of the CARMEN log format, but I'm
#     pretty sure that I got the data correct
#
#   - x-offset of the laser is handled correctly now. A warning appears if
#     a y/yaw offset is uded in the player logfile


import string
import sys
import fileinput
import math

USAGE = 'USAGE: playerlog2carmenlog.y <player.log> <carmen.log>'

if __name__ == '__main__':

  if len(sys.argv) != 3:
    print USAGE
    sys.exit(-1)

  infilename = sys.argv[1]
  outfilename = sys.argv[2]

  # Read in the entire file
  instream = fileinput.input(infilename)

  outfile = open(outfilename, 'w+')

  x = 0.000000
  y = 0.000000
  theta = 0.000000

  offset_x = 0.0 

  host = 'nohost'

  for line in instream:
    if line[0] == '#':
      continue
    lsplit = string.split(line)
    if len(lsplit) < 6:
      print 'Discarding invalid line: ' + line
      continue

    type = lsplit[3]
    msgtype = int(lsplit[5])
    msgsubtype = int(lsplit[6])

    # only want data messages
    if type == 'laser' and msgtype == 4:

      offset_x = float(lsplit[7])
      offset_y = float(lsplit[8])
      offset_theta = float(lsplit[9])
      print "laser offset:", offset_x, offset_y, offset_theta
      if offset_y != 0 or offset_theta != 0:
        print "WARNING: Can not deal with y or theta offset! Values ignored!"

      continue
        

    elif msgtype != 1:
      print 'Skipping message with type ' + `msgtype`
      continue


    # we're interested in odometry
    if type == 'position2d':
      if msgsubtype != 1:
        print 'Skipping position2d message with subtype ' + `msgsubtype`
        continue
      header = 'ODOM'
      time = lsplit[0]
      x = float(lsplit[7])
      y = float(lsplit[8])
      theta = float(lsplit[9])
      tv = lsplit[10]
      rv = lsplit[11]
      accel = '0.000'
      outfile.write(header + ' ' + str(x) + ' ' + str(y) + ' ' + str(theta) + ' 
' + tv + ' ' + rv + ' ' + accel + ' ' + time + ' ' + host + ' ' + time + '\n')
    # we're also interested in laser scans
    elif type == 'laser':
        
      if msgsubtype != 1:
        print 'Skipping laser message with subtype ' + `msgsubtype`
        continue
      header = 'FLASER'
      time = lsplit[0]
      min_angle = lsplit[8]
      max_angle = lsplit[9]
      if (min_angle != '-1.5708') or (max_angle != '+1.5708'):
        print 'Sorry, CARMEN requires 180-degree FOV for laser'
        sys.exit(-1)
      num_readings = int(lsplit[12])
      if (num_readings != 181) and (num_readings != 361):
        print 'Sorry, I can only convert 1-deg and 0.5-deg resolution logs'
        sys.exit(-1)
      i = 0
      scanstr = ''
      while i < (num_readings - 1):
        range = lsplit[13 + 2*i]
        scanstr += range + ' '
        i += num_readings/180



      l_x = x + offset_x*math.cos(theta)
      l_y = y + offset_x*math.sin(theta)

      outfile.write(header + ' 180 ' + scanstr +
                    str(l_x) + ' ' + str(l_y) + ' ' + str(theta) + ' ' +
                    str(x) + ' ' + str(y) + ' ' + str(theta) + ' ' +
                    time + ' ' + host + ' ' + time + '\n')
    else:
      #print 'Ignoring line of type ' + type
      pass 


Index: Makefile.am
===================================================================
RCS file: /cvsroot/playerstage/code/player/utils/Makefile.am,v
retrieving revision 1.27.2.1
retrieving revision 1.27.2.2
diff -C2 -d -r1.27.2.1 -r1.27.2.2
*** Makefile.am 7 Jun 2006 16:12:55 -0000       1.27.2.1
--- Makefile.am 2 Nov 2007 00:25:05 -0000       1.27.2.2
***************
*** 1,4 ****
--- 1,7 ----
  
  SUBDIRS = playervcr playernav playercam playerprint playerjoy playerwritemap 
playerv dgps_server pmap
+ 
+ dist_bin_SCRIPTS = playerlog2carmenlog.py
+ 
  #barcodes
  #playermap


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to