TheLegace

Untitled

Apr 30th, 2013
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.75 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import serial
  3.  
  4. import roslib; roslib.load_manifest('yurt_base')
  5. import rospy
  6. from geometry_msgs.msg import Twist, Vector3
  7. from std_msgs.msg import String
  8.  
  9. class MotorController():
  10.    
  11.     #
  12.     def __init__(self, port='/dev/ttyUSB0', baud=115200):
  13.        
  14.         # Instructions
  15.         self.INST_READ = 1
  16.         self.INST_WRITE = 2
  17.         self.INST_RESET = 3
  18.  
  19.         # Parameters
  20.         self.SETPOINT1 = 0
  21.         self.SETPOINT2 = 1
  22.         self.SETPOINT3 = 2
  23.         self.SETPOINT4 = 3
  24.  
  25.         self.PROCESS_VAL1 = 4
  26.         self.PROCESS_VAL2 = 5
  27.         self.PROCESS_VAL3 = 6
  28.         self.PROCESS_VAL4 = 7
  29.  
  30.         self.DIRECTION1 = 8
  31.         self.DIRECTION2 = 9
  32.         self.DIRECTION3 = 10
  33.         self.DIRECTION4 = 11
  34.  
  35.         self.WATCHDOG_PARAM = 13
  36.        
  37.         # Serial Port
  38.         self.Serial = serial.Serial()
  39.         self.Serial.port = port
  40.         self.Serial.baudrate = baud
  41.  
  42.         # Buffer
  43.         self.Buffer = []
  44.         self.BufferStart = 0
  45.         self.BufferEnd = 0
  46.    
  47.     #  
  48.     def ParamSet(self, parameters):
  49.         checksum = 0
  50.         id = self.NextID()
  51.         self.TX(0xFF)
  52.         self.TX(0xFF)
  53.         self.TX(id)
  54.         self.TX(self.INST_WRITE)
  55.         self.TX(len(parameters))
  56.         for param in parameters:
  57.             self.TX(param)
  58.             checksum += param
  59.         checksum = 255 - ((id + self.INST_WRITE + len(parameters) + checksum) % 256)
  60.         self.TX(checksum)
  61.         print '0xFF', '0xFF', id, self.INST_WRITE, len(parameters), parameters, checksum
  62.    
  63.     #  
  64.     def ParamGet(self, parameters):
  65.         checksum = 0
  66.         id = self.NextID()
  67.         self.TX(0xFF)
  68.         self.TX(0xFF)
  69.         self.TX(id)
  70.         self.TX(self.INST_READ)
  71.         self.TX(len(parameters))
  72.         for param in parameters:
  73.             self.TX(param)
  74.             checksum += param
  75.         checksum = 255 - ((id + self.INST_READ + len(parameters) + checksum) % 256)
  76.         self.TX(checksum)
  77.         print '0xFF', '0xFF', id, self.INST_READ, len(parameters), parameters, checksum
  78.    
  79.     #
  80.     def NextID(self):
  81.         return 2
  82.        
  83.     #
  84.     def RX(self):
  85.         c = self.Serial.read()
  86.         self.BufferWrite(c)
  87.    
  88.     #  
  89.     def TX(self, c):
  90.         self.Serial.write(chr(c))
  91.    
  92.     #  
  93.     def BufferRead(self):
  94.         c = self.Buffer[:1]
  95.         self.Buffer = self.Buffer[1:]
  96.         return c
  97.    
  98.     #  
  99.     def BufferWrite(self, c):
  100.         self.Buffer.append(c)
  101.  
  102. import Wrapper
  103.  
  104. class Rover:
  105.  
  106.     def __init__(self):
  107.         rospy.init_node('yurt_base')
  108.         self.cmd_vel = rospy.Subscriber("cmd_vel", Twist, self.cmd_vel_handler)
  109.         self.cmd_msg = Twist()
  110.  
  111.         self.controller = MotorController(port='/dev/ttyUSB0', baud=115200)
  112.         self.controller.Serial.open()
  113.         self.wrapper = Wrapper.Wrapper()
  114.         self.run()
  115.  
  116.  
  117.     def cmd_vel_handler(self, msg):
  118.         """ Received command from ROS. Signal the main thread to send it to robot. """
  119.         self.cmd_msg = msg
  120.         # rospy.loginfo(self.cmd_msg.linear.x)
  121.         # rospy.loginfo(self.cmd_msg.angular.z)
  122.  
  123.    
  124.     def run(self):
  125.         while not rospy.is_shutdown():
  126.             try:
  127.                 # params = [self.controller.SETPOINT1, 0xFE,0xFE,self.controller.DIRECTION1, 0,1]
  128.                 # self.controller.ParamSet(params)
  129.                 decimal = self.wrapper.convertToHalf(self.cmd_msg.linear.x)
  130.                 self.wrapper.appendList(self.wrapper.setSpeed(2,decimal))
  131.                 self.wrapper.appendList(self.wrapper.setSpeed(1,decimal))
  132.                 # self.wrapper.appendList(self.wrapper.setSpeed(3,decimal))
  133.                 # self.wrapper.appendList(self.wrapper.setSpeed(4,decimal))
  134.                 # self.wrapper.appendList(self.wrapper.setSpeed(2,decimal))
  135.                 # print 'message',wrapper._finalMessage
  136.                 self.wrapper.sendMessages()
  137.                 self.wrapper.clearList()
  138.                 rospy.sleep(0.1)
  139.             except (KeyboardInterrupt, SystemExit):
  140.                 print "\nUser interrupted\n"
  141.                 self.controller.Serial.close()
  142.                 break
  143.  
  144.  
  145.  
  146. if __name__ == '__main__':
  147.     rover = Rover()
  148.     # self.controller = MotorController(port='/dev/ttyUSB0', baud=115200)
  149.     # self.controller.Serial.open()
  150.     # params = [self.controller.SETPOINT1, 0xFE,0xFE,self.controller.DIRECTION1, 0,1]
  151.     # self.controller.ParamSet(params)
  152.    
  153.     # self.controller.Serial.close()
  154.  
  155.     # rospy.sleep(0.1)
Advertisement
Add Comment
Please, Sign In to add comment