mycobot_ros/Mybuddy/mybuddy_communication/scripts/mybuddy_services.py
2022-06-17 19:51:22 +08:00

160 lines
3.3 KiB
Python
Executable file

#!/usr/bin/env python2
import time
import rospy
from mybuddy_communication.srv import *
from pymycobot.mybuddy import MyBuddy
mb = None
def create_handle():
global mb
rospy.init_node("mypal_services")
rospy.loginfo("start ...")
port = rospy.get_param("~port")
baud = rospy.get_param("~baud")
rospy.loginfo("%s,%s" % (port, baud))
mb = MyBuddy(port, baud)
def create_services():
rospy.Service("set_joint_angles", SetAngles, set_angles)
rospy.Service("get_joint_angles", GetAngles, get_angles)
rospy.Service("set_joint_coords", SetCoords, set_coords)
rospy.Service("get_joint_coords", GetCoords, get_coords)
rospy.Service("switch_gripper_status", GripperStatus, switch_status)
rospy.Service("switch_pump_status", PumpStatus, toggle_pump)
rospy.loginfo("ready")
rospy.spin()
def set_angles(req):
angles = [
# req.joint_1,
# req.joint_2,
# req.joint_3,
# req.joint_4,
# req.joint_5,
# req.joint_6,
req.joint_0,
req.joint_1,
req.joint_2,
req.joint_3,
req.joint_4,
req.joint_5,
req.joint_6,
req.joint_7,
req.joint_8,
req.joint_9,
req.joint_10,
req.joint_11,
req.joint_12,
]
sp = req.speed
if mb:
mb.send_angles(angles, sp)
return SetAnglesResponse(True)
def get_angles(req):
if mb:
angles = mb.get_angles()
return GetAnglesResponse(*angles)
def set_coords(req):
coords = [
req.x,
req.y,
req.z,
req.rx,
req.ry,
req.rz,
]
sp = req.speed
mod = req.model
if mb:
mb.send_coords(coords, sp, mod)
return SetCoordsResponse(True)
def get_coords(req):
if mb:
coords = mb.get_coords()
return GetCoordsResponse(*coords)
def switch_status(req):
"""Gripper switch,夹爪开关"""
if mb:
if req.Status:
mb.set_gripper_state(0, 80)
else:
mb.set_gripper_state(1, 80)
return GripperStatusResponse(True)
def toggle_pump(req):
if mb:
if req.Status:
mb.set_basic_output(req.Pin1, 0)
mb.set_basic_output(req.Pin2, 0)
else:
mb.set_basic_output(req.Pin1, 1)
mb.set_basic_output(req.Pin2, 1)
return PumpStatusResponse(True)
robot_msg = """
Mypalletizer Status
--------------------------------
Joint Limit:
joint 1: -160 ~ +160
joint 2: -0.87 ~ +100.01
joint 3: -17.13 ~ +60
joint 4: simple show
joint 5: -170 ~ +170
joint 6:...
Connect Status: %s
Servo Infomation: %s
Servo Temperature: %s
Atom Version: %s
"""
def output_robot_message():
connect_status = False
servo_infomation = "unknown"
servo_temperature = "unknown"
atom_version = "unknown"
if mb:
cn = mb.is_controller_connected()
if cn == 1:
connect_status = True
time.sleep(0.1)
si = mb.is_all_servo_enable()
if si == 1:
servo_infomation = "all connected"
print(
robot_msg % (connect_status, servo_infomation,
servo_temperature, atom_version)
)
if __name__ == "__main__":
# print(MyCobot.__dict__)
create_handle()
output_robot_message()
create_services()