anandvgeorge

servo.py

May 6th, 2016
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.05 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import rospy
  4. import roslib
  5. import sys
  6. import RPi.GPIO as GPIO
  7. import time
  8. from std_msgs.msg import Int8
  9.  
  10. STATE = 1 # pick -- initial state
  11. SERVO_DOWN = 2.5 + 10 * 60 / 180 # servo angles
  12. SERVO_UP = 2.5 + 10 * 160 / 180
  13.  
  14. MOTOR1 = 20
  15. MOTOR2 = 21
  16.  
  17. COUNT = 0
  18. DATA_PRV = 1#"data: 0"
  19.  
  20. def callback(data):
  21.     global STATE
  22.     global COUNT
  23.     global DATA_PRV
  24.     print("\nrobot moving:")
  25.     pub = rospy.Publisher('robot_state', Int8, queue_size = 10)
  26.     pub.publish(STATE)
  27.     data = str(data)
  28.     print(data)
  29.     print "prev: %d" % DATA_PRV
  30.     print "Count: %d" % COUNT
  31.     if data == "data: 0" or data == 0: # robot not moving
  32.         print "data: 0 ckeck OK!"
  33.         if DATA_PRV == int(data[6]):
  34.             COUNT += 1
  35.         if COUNT == 3:
  36.             COUNT = 0
  37.             # actuate servo to move down
  38.             p.start(SERVO_DOWN)
  39.             time.sleep(2) # sleep 2 second
  40.             if STATE == 1: #gripper control
  41.                 # pick
  42.                 GPIO.output(MOTOR1, 1)
  43.                 GPIO.output(MOTOR2, 0)
  44.                 print("PICK")
  45.                 time.sleep(5)
  46.                 GPIO.output(MOTOR1, 0)
  47.             else:
  48.                 # drop
  49.                 print("DROP")
  50.                 time.sleep(5)
  51.             # actuate servo to move up
  52.             p.start(SERVO_UP)
  53.             time.sleep(2) # sleep 2 second
  54.             STATE =  not STATE
  55.     else:
  56.         COUNT = 0
  57.     DATA_PRV = int(data[6])
  58.     return
  59. def listener():
  60.     rospy.Subscriber("stop", Int8, callback)
  61.     print("\ntest_servo")
  62.  
  63.     # spin() simply keeps python from exiting until this node is stopped
  64.     rospy.spin()
  65.  
  66. if __name__ == '__main__':
  67.     # Initialize to use BCM numbering.
  68.     GPIO.setmode(GPIO.BCM)
  69.  
  70.     GPIO.setup(12, GPIO.OUT)
  71.     GPIO.setup(MOTOR1, GPIO.OUT)
  72.     GPIO.setup(MOTOR2, GPIO.OUT)
  73.     p = GPIO.PWM(12, 50)
  74.  
  75.     print("setting initial angle")
  76.     # Setting servo's initial angle as 90 degree
  77.    # p.start(9)
  78.    
  79.     rospy.init_node('servo', anonymous=True)
  80.     listener()
Add Comment
Please, Sign In to add comment