128 lines
3.0 KiB
Python
128 lines
3.0 KiB
Python
import requests
|
|
import uuid
|
|
import sys
|
|
|
|
###
|
|
# GLOBALS
|
|
###
|
|
|
|
class ResponseStatus():
|
|
Ok = 0
|
|
Error = 1
|
|
Offline = 2
|
|
|
|
max_job_name_length = 30
|
|
|
|
class ToolHead():
|
|
Gripper = 0
|
|
|
|
###
|
|
# CLASSES
|
|
###
|
|
|
|
# TODO: add oriention left or right
|
|
# TODO: bei jeder Positionsangabe (einmal bei XY und einmal bei Z) geben wir eine Zahl an als Kraft, die normalerweise nicht überschritten werden soll
|
|
|
|
class Rex:
|
|
"""
|
|
This class represents a rex robot.
|
|
"""
|
|
def __init__(self, robot_name, job_name, address='http://localhost:50055'):
|
|
self.robot_name = robot_name
|
|
self.job_id = uuid.uuid4().__str__()
|
|
self.job_name = job_name[:max_job_name_length]
|
|
self.address = address
|
|
self.x = 0
|
|
self.y = 0
|
|
self.z = 0
|
|
self.tool_head = 0
|
|
|
|
def _request_data(self):
|
|
return {
|
|
'robotName': self.robot_name,
|
|
'jobId': self.job_id,
|
|
'jobName': self.job_name
|
|
}
|
|
|
|
def _post_request(self, json):
|
|
obj = {}
|
|
|
|
obj = self._request_data()
|
|
obj['task'] = json
|
|
|
|
res = requests.post(self.address + '/v1/control/1', json=obj)
|
|
|
|
if res.status_code != 200:
|
|
print("status code", res.status_code)
|
|
sys.exit(1)
|
|
|
|
json = res.json()
|
|
|
|
status = json['Status']
|
|
|
|
if status == ResponseStatus.Offline:
|
|
print("robot offline")
|
|
sys.exit(1)
|
|
|
|
if status == ResponseStatus.Error:
|
|
print("robot error")
|
|
sys.exit(1)
|
|
|
|
if status != ResponseStatus.Ok:
|
|
print("robot some other error")
|
|
sys.exit(1)
|
|
|
|
def move_to(self, x = None, y = None, z = None, AprilTagId = None):
|
|
"""
|
|
Move the robot to the new position.
|
|
"""
|
|
data = {}
|
|
|
|
if x != None:
|
|
self.x = x
|
|
data['x'] = self.x
|
|
|
|
if y != None:
|
|
self.y = y
|
|
data['y'] = self.y
|
|
|
|
if z != None:
|
|
self.z = z
|
|
data['z'] = self.z
|
|
|
|
if len(data) == 0:
|
|
print("No data provided for move_to")
|
|
return
|
|
|
|
if AprilTagId != None:
|
|
data['AprilTagId'] = AprilTagId
|
|
|
|
print('Robot: ' + self.robot_name + ' moved to ' + str(data))
|
|
|
|
self._post_request(data)
|
|
|
|
def change_tool_head(self, tool_head = int):
|
|
"""
|
|
Change the tool head.
|
|
"""
|
|
print('Robot: ' + self.robot_name + ' changed tool head to ' + str(tool_head))
|
|
|
|
data = {'ToolHead': tool_head}
|
|
|
|
self._post_request(data)
|
|
|
|
def finish(self):
|
|
"""
|
|
Finish the robot.
|
|
This will update the robot status to idle.
|
|
"""
|
|
print('Robot finished')
|
|
|
|
# TODO: request to the server to finish the robot and update the robot status to idle
|
|
|
|
res = requests.post(self.address + '/v1/control/1/finish', json={
|
|
'robotName': self.robot_name,
|
|
'jobId': self.job_id
|
|
})
|
|
|
|
print("status code", res.status_code) |