puma /

# Shuffleboard Puma robot server.
# Depends on being running
import socket
import threading
import time
import os
import re
import sys
import SocketServer
from Puma import Puma
from math import sqrt, pi, sin, cos

r = None

class ShuffleboardSocket(SocketServer.StreamRequestHandler):
	def handle(self):
		self.alive = True
		self.timeout = 1

		#self.rx_thread = threading.Thread(target = self.rx_loop)
		#self.rx_thread.daemon = True

		self.tx_thread = threading.Thread(target = self.tx_loop)
		self.tx_thread.daemon = True

		# why doesn't this work as a thread?

	def moveto(self,x,angle):
		# Compute approach vector based on the angle
		# For the swinging tool on the left side of the board,
		# the position is facing (approach) due X,
		# sliding in Z and the normal to Y
		angle = -angle * pi / 180
		a = [ cos(angle), sin(angle), 0]
		s = [ 0,          0,          1]
		n = [-sin(angle), cos(angle), 0]

		# todo: Compute the Z position based on the X distance
		r.move_ik(5000, [x,130,0], a, s, n)

	def rx_loop(self):
		while self.alive:
			line = self.rfile.readline().strip()
			if not line:
			print "Read line '" + line + "'"

			if line == "home":
			if line == "hold":

			g = re.match("^move ([0-9]+) (-?[0-9]+)", line)
			if g is not None:
				self.moveto(int(, int(
			g = re.match("^swing ([0-9]+)", line)
			if g is not None:


	def tx_loop(self):
		while self.alive:
			volts = r.volts
			pos = [str(round(x,2)) for x in]
			speed = str(r.counts[5])
			self.wfile.write(str(round(volts,1)) + ',' + ','.join(pos) + ',' + speed + '\n')

class ServerThread(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
	# Force SOREUSEADDR allways
	daemon_threads = True
	allow_reuse_address = True

if __name__ == "__main__":
	host = 'localhost'
	port = 27189
	server = ServerThread((host,port), ShuffleboardSocket)

	import PumaConfig
	r = Puma(("localhost", 31415), PumaConfig.joints)

Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.