/software/bring_up/harvest_try1/src/harvest.py

https://github.com/Sam-Wang/FarmHarvestBot · Python · 70 lines · 54 code · 14 blank · 2 comment · 10 complexity · 1ab4bd45cfdd13feb8622d16da17aa0e MD5 · raw file

  1. #!/usr/bin/env python
  2. import rospy
  3. from harvest_try1.msg import FruitCnt
  4. from harvest_try1.srv import *
  5. import time
  6. fruit_cnt=0
  7. def harvest_package_init():
  8. rospy.set_param('/mode', 'debug')
  9. def vision_client(x, y):
  10. rospy.wait_for_service('fruit_pos')
  11. try:
  12. fruit_pos1 = rospy.ServiceProxy('fruit_pos', fruit_pos)
  13. resp1 = fruit_pos1(x, y)
  14. return resp1.pos_idx
  15. except rospy.ServiceException, e:
  16. rospy.loginfo( "Service call failed: %s"%e)
  17. def vision_sub_callback(data):
  18. global fruit_cnt
  19. fruit_cnt = data.fruit_cnt
  20. rospy.loginfo("I heard fruit_cnt=%i", fruit_cnt)
  21. def vision_sub():
  22. #rospy.init_node('vision_sub')
  23. rospy.Subscriber('vision_fruit_cnt', FruitCnt, vision_sub_callback)
  24. def car_client(x, y):
  25. rospy.wait_for_service('car_move')
  26. try:
  27. car_move1 = rospy.ServiceProxy('car_move', CarMove)
  28. resp = car_move1(x, y)
  29. return resp
  30. except rospy.ServiceException, e:
  31. print "Car Service call failed: %s"%e
  32. def task():
  33. global fruit_cnt
  34. vision_sub()
  35. rate = rospy.Rate(10) # 10hz
  36. while not rospy.is_shutdown():
  37. if fruit_cnt==1:
  38. rospy.loginfo("fruit found!")
  39. fruit_pos_idx = vision_client(0,0)
  40. rospy.loginfo("ask vision to find the position of fruit, position index result=%i" %( fruit_pos_idx))
  41. rospy.loginfo("ask robot to pick that one!")
  42. time.sleep(2.5)
  43. else:
  44. resp = car_client(10,0)
  45. rospy.loginfo("car move to diff_x = %s, diff_y= %s, cur_x=%s, cur_y=%s" %(10,0,resp.cur_x,resp.cur_y))
  46. rate.sleep()
  47. if __name__ == '__main__':
  48. try:
  49. harvest_package_init()
  50. rospy.init_node('harvest')
  51. mode = rospy.get_param("/mode")
  52. rospy.loginfo("current running mode=%s" %(mode))
  53. task()
  54. rospy.spin()
  55. except rospy.ROSInterruptException:
  56. pass