Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.70 KB | None | 0 0
  1. import utils
  2. sched = utils.Scheduler()
  3. import wws_lite
  4. from IPython.display import Image
  5. import pprint
  6. pp = pprint.PrettyPrinter(indent=4)
  7. import math
  8. from time import sleep
  9. import matplotlib.pyplot as plt
  10. import urllib.request
  11. import numpy as np
  12. import orspy
  13. import pickle
  14.  
  15.  
  16. class State:
  17. def __init__(self, sched, simulated=False):
  18. self.sched = sched
  19. # self.sched.add_robot('codebox1', utils.bottom_I_close2wall)
  20. self.waypoints = [
  21. {"coord": orspy.EulerPose(64, 96, 0, 0, 0, 0)},
  22. {"coord": orspy.EulerPose(69, 95, 0, 0, 0, 0)},
  23. {"coord": orspy.EulerPose(68.5, 104, 0, 0, 0, 0)},
  24. {"coord": orspy.EulerPose(65, 108, 0, 0, 0, 0)},
  25. {"coord": orspy.EulerPose(71, 113, 0, 0, 0, 0)},
  26. ] # list of positions
  27. self.simulated = simulated
  28. sched.use_simulated(simulated)
  29. self.poses = []
  30. self.images = []
  31. self.get_image = False
  32.  
  33. def navigate_to(self, location):
  34. return self.sched.goto(location,
  35. allowed_trans_error=0.5, allowed_rot_error=6.)
  36.  
  37. def rotate(self):
  38. steps = 4
  39. for _ in range(steps * 2):
  40. sched.rotate(speed=math.pi/8, maxrot=math.pi/steps)# - math.pi / (steps * 16))
  41.  
  42. def start(self):
  43. self.topic_img = "{}/object_img".format(self.sched.wws_topic_prefix())
  44. self.topic_pose = "{}/object_pose".format(self.sched.wws_topic_prefix())
  45. wws_lite.subscribe(self.topic_img, lambda x: self.wws_detect_img_cb(x))
  46. wws_lite.subscribe(self.topic_pose, lambda x: self.detect_cb_pose(x))
  47.  
  48. def clear_action(self):
  49. self.sched.stop_action(self.action)
  50.  
  51. def end(self):
  52. wws_lite.unsubscribe(self.topic_img)
  53. wws_lite.unsubscribe(self.topic_pose)
  54.  
  55. def detect_cb_pose(self, m):
  56. if self.simulated:
  57. if len(m['object']['payload']['objects']['detections']) > 0:
  58. # print(m['object']['payload']['objects']['detections'])
  59. self.class_name = m['object']['payload']['objects']['detections'][0]['class_name']
  60. self.poses.append(m)
  61. self.get_image = True
  62. else:
  63. if len(m['object']['payload']['detections']) > 0:
  64. self.class_name = m['object']['payload']['detections'][0]['class']['name']
  65. self.poses.append(m)
  66. self.get_image = True
  67. # print(f"object type- {m['object']['payload']['objects']['detections'][0]['class_name']}")
  68.  
  69. def wws_detect_img_cb(self, m):
  70. detect = m['image']['url']
  71. f = urllib.request.urlopen(detect)
  72. a = plt.imread(f, 0)
  73. # print(len(self.images), len(self.poses))
  74. if self.get_image:
  75. # print('adding image')
  76. self.images.append(a)
  77. self.get_image = False
  78.  
  79. def localize_all_objects(self):
  80. pass
  81.  
  82. def control_loop(self):
  83. self.start()
  84. count = 0
  85. for _ in range(1):
  86. for way in self.waypoints:
  87. loc = way["coord"]
  88. self.navigate_to(loc)
  89. pickle.dump((self.poses, self.images), open(f'/home/ros/spinachbots/jupyter/data_{count}.pickle', 'wb'))
  90. count += 1
  91. self.end()
  92.  
  93. sched = utils.Scheduler()
  94. # sched.add_robot('codebox1', utils.bottom_I_close2wall)
  95. state = State(sched, False)
  96.  
  97. # sched.goto(orspy.EulerPose(68.73, 105.66, 0, 0, 0, 0),
  98. # allowed_trans_error=0.3, allowed_rot_error=0.5)
  99. state.control_loop()
  100. print(state.poses)
  101. print(state.images)
  102. # for i in range(100):
  103. # state.sched.stop_action(i)
  104. # state.delete_state()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement