Guest User

Untitled

a guest
Oct 20th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.14 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import os
  4. import sys
  5. import gzip
  6. import struct
  7. import numpy as np
  8. import zlib
  9. import sparse_pose_graph_pb2
  10. import matplotlib.pyplot as plt
  11.  
  12. def pbstreamreader(posefile):
  13. print "Reading .pbstream data"
  14. idnumber = '0x7b1d1f7b5bf501db'
  15. filehandle = open(posefile, 'rb')
  16. # make sure the data
  17. size = readthefile(filehandle)
  18. if idnumber!= size:
  19. print "unknown string"
  20. return
  21.  
  22. #get the total size of the data
  23. size = readsize(filehandle)
  24. #print size
  25. compressed_trajectory_data = readdatafromfile(filehandle,int(size))
  26.  
  27. trajectory_data = zlib.decompress(compressed_trajectory_data,16+zlib.MAX_WBITS)
  28.  
  29. # read the entire data of the file
  30. pose_graph=sparse_pose_graph_pb2.SparsePoseGraph()
  31. pose_graph.ParseFromString(trajectory_data)
  32. maptoddler_trajectory = []
  33. #print len(pose_graph.trajectory)
  34. for i in xrange(0,len(pose_graph.trajectory)):
  35. for j in xrange(0,len(pose_graph.trajectory[i].node)):
  36. maptoddler_trajectory.append(pose_graph.trajectory[i].node[j])
  37.  
  38. #plot_poses(maptoddler_trajectory)
  39.  
  40. filehandle.close()
  41. return maptoddler_trajectory
  42.  
  43. def plot_poses(trajectory):
  44.  
  45. x = []
  46. y = []
  47.  
  48. for i in xrange(0,len(trajectory)):
  49. x.append(trajectory[i].pose.translation.x)
  50. y.append(trajectory[i].pose.translation.y)
  51.  
  52. print len(x)
  53. print len(y)
  54. plt.plot(x,y,'r.')
  55. plt.axis([min(x), max(x), min(y), max(y)])
  56. plt.show()
  57.  
  58.  
  59. def readthefile(fileobj):
  60. size =0
  61. byte=None
  62. word = []
  63. for i in range(0,8):
  64. byte = fileobj.read(1).encode("hex")
  65. word.append(byte)
  66. word = word[::-1]
  67. word = '0x'+''.join(word)
  68. return word
  69. def readsize(fileobj):
  70. return struct.unpack_from("<Q", fileobj.read(8))[0]
  71.  
  72. def readdatafromfile(fileobj, size):
  73. return fileobj.read(size)
  74.  
  75. def main():
  76. if len(sys.argv)!=2:
  77. print "Incorrect usage. rosrun maptoddlerpostprocessing generateassetsfrombag.py <path/to/the/*.pbstream>"
  78. return
  79. trajectory = pbstreamreader(sys.argv[1])
  80.  
  81. if __name__=='__main__':
  82. main()
Add Comment
Please, Sign In to add comment