|
|
@ -1,6 +1,6 @@
|
|
|
|
#!python
|
|
|
|
#!python
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# 2021 Zhengyu Peng
|
|
|
|
# 2021 - PRESENT Zhengyu Peng
|
|
|
|
# Website: https://zpeng.me
|
|
|
|
# Website: https://zpeng.me
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# ` `
|
|
|
|
# ` `
|
|
|
@ -51,6 +51,29 @@ from btserver import BluetoothServer
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Hexapod(Thread):
|
|
|
|
class Hexapod(Thread):
|
|
|
|
|
|
|
|
CMD_STANDBY = 'standby'
|
|
|
|
|
|
|
|
CMD_LAYDOWN = 'laydown'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CMD_FORWARD = 'forward'
|
|
|
|
|
|
|
|
CMD_BACKWARD = 'backward'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CMD_FASTFORWARD = 'fastforward'
|
|
|
|
|
|
|
|
CMD_FASTBACKWARD = 'fastbackward'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CMD_SHIFTLEFT = 'shiftleft'
|
|
|
|
|
|
|
|
CMD_SHIFTRIGHT = 'shiftright'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CMD_TURNLEFT = 'turnleft'
|
|
|
|
|
|
|
|
CMD_TURNRIGHT = 'turnright'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CMD_CLIMBFORWARD = 'climbforward'
|
|
|
|
|
|
|
|
CMD_CLIMBBACKWARD = 'climbbackward'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CMD_ROTATEX = 'rotatex'
|
|
|
|
|
|
|
|
CMD_ROTATEY = 'rotatey'
|
|
|
|
|
|
|
|
CMD_ROTATEZ = 'rotatez'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CMD_TWIST = 'twist'
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, in_cmd_queue):
|
|
|
|
def __init__(self, in_cmd_queue):
|
|
|
|
Thread.__init__(self)
|
|
|
|
Thread.__init__(self)
|
|
|
@ -231,13 +254,14 @@ class Hexapod(Thread):
|
|
|
|
self.leg_3.move_junctions(angles[3, :])
|
|
|
|
self.leg_3.move_junctions(angles[3, :])
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
data = self.cmd_queue.get(block=False)
|
|
|
|
cmd_string = self.cmd_queue.get(block=False)
|
|
|
|
print('interrput')
|
|
|
|
print('interrput')
|
|
|
|
print(data)
|
|
|
|
print(cmd_string)
|
|
|
|
except Empty:
|
|
|
|
except Empty:
|
|
|
|
time.sleep(self.interval)
|
|
|
|
time.sleep(self.interval)
|
|
|
|
pass
|
|
|
|
pass
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
|
|
|
|
data = cmd_string.split(':')[-2]
|
|
|
|
if data == 'standby':
|
|
|
|
if data == 'standby':
|
|
|
|
self.current_motion = None
|
|
|
|
self.current_motion = None
|
|
|
|
self.standby()
|
|
|
|
self.standby()
|
|
|
@ -330,16 +354,54 @@ class Hexapod(Thread):
|
|
|
|
|
|
|
|
|
|
|
|
return angles
|
|
|
|
return angles
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def cmd_handler(self, cmd_string):
|
|
|
|
|
|
|
|
data = cmd_string.split(':')[-2]
|
|
|
|
|
|
|
|
if data == self.CMD_STANDBY:
|
|
|
|
|
|
|
|
self.current_motion = None
|
|
|
|
|
|
|
|
self.standby()
|
|
|
|
|
|
|
|
elif data == self.CMD_FORWARD:
|
|
|
|
|
|
|
|
self.current_motion = self.forward_path
|
|
|
|
|
|
|
|
elif data == self.CMD_BACKWARD:
|
|
|
|
|
|
|
|
self.current_motion = self.backward_path
|
|
|
|
|
|
|
|
elif data == self.CMD_FASTFORWARD:
|
|
|
|
|
|
|
|
self.current_motion = self.fastforward_path
|
|
|
|
|
|
|
|
elif data == self.CMD_FASTBACKWARD:
|
|
|
|
|
|
|
|
self.current_motion = self.fastbackward_path
|
|
|
|
|
|
|
|
elif data == self.CMD_TURNLEFT:
|
|
|
|
|
|
|
|
self.current_motion = self.leftturn_path
|
|
|
|
|
|
|
|
elif data == self.CMD_TURNRIGHT:
|
|
|
|
|
|
|
|
self.current_motion = self.rightturn_path
|
|
|
|
|
|
|
|
elif data == self.CMD_SHIFTLEFT:
|
|
|
|
|
|
|
|
self.current_motion = self.shiftleft_path
|
|
|
|
|
|
|
|
elif data == self.CMD_SHIFTRIGHT:
|
|
|
|
|
|
|
|
self.current_motion = self.shiftright_path
|
|
|
|
|
|
|
|
elif data == self.CMD_CLIMBFORWARD:
|
|
|
|
|
|
|
|
self.current_motion = self.climb_path
|
|
|
|
|
|
|
|
elif data == self.CMD_CLIMBBACKWARD:
|
|
|
|
|
|
|
|
self.current_motion = self.climb_path
|
|
|
|
|
|
|
|
elif data == self.CMD_ROTATEX:
|
|
|
|
|
|
|
|
self.current_motion = self.rotatex_path
|
|
|
|
|
|
|
|
elif data == self.CMD_ROTATEY:
|
|
|
|
|
|
|
|
self.current_motion = self.rotatey_path
|
|
|
|
|
|
|
|
elif data == self.CMD_ROTATEZ:
|
|
|
|
|
|
|
|
self.current_motion = self.rotatez_path
|
|
|
|
|
|
|
|
elif data == self.CMD_TWIST:
|
|
|
|
|
|
|
|
self.current_motion = self.twist_path
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
self.current_motion = None
|
|
|
|
|
|
|
|
self.cmd_queue.task_done()
|
|
|
|
|
|
|
|
|
|
|
|
def run(self):
|
|
|
|
def run(self):
|
|
|
|
while True:
|
|
|
|
while True:
|
|
|
|
if self.current_motion is None:
|
|
|
|
if self.current_motion is None:
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
data = self.cmd_queue.get(block=False)
|
|
|
|
cmd_string = self.cmd_queue.get(block=False)
|
|
|
|
print(data)
|
|
|
|
print(cmd_string)
|
|
|
|
except Empty:
|
|
|
|
except Empty:
|
|
|
|
time.sleep(self.interval)
|
|
|
|
time.sleep(self.interval)
|
|
|
|
pass
|
|
|
|
pass
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
|
|
|
|
data = cmd_string.split(':')[-2]
|
|
|
|
if data == 'standby':
|
|
|
|
if data == 'standby':
|
|
|
|
self.current_motion = None
|
|
|
|
self.current_motion = None
|
|
|
|
self.standby()
|
|
|
|
self.standby()
|
|
|
|