実際のところ
import rclpy
from rclpy.node import Node
from xarm_msgs.srv import SetInt16ById, SetInt16, MoveCartesian
class XArmServiceClient(Node):
def __init__(self):
super().__init__('xarm_service_client')
self.motion_enable_client = self.create_client(SetInt16ById, '/ufactory/motion_enable')
self.motion_enable_request = SetInt16ById.Request()
self.motion_enable_request.id = 8
self.motion_enable_request.data = 1
self.set_mode_client = self.create_client(SetInt16, '/ufactory/set_mode')
self.set_mode_request = SetInt16.Request()
self.set_mode_request.data = 0
self.set_state_client = self.create_client(SetInt16, '/ufactory/set_state')
self.set_state_request = SetInt16.Request()
self.set_state_request.data = 0
self.set_position_client = self.create_client(MoveCartesian, '/ufactory/set_position')
self.set_position_request = MoveCartesian.Request()
self.set_position_request.pose = [200.0, 0.0, 200.0, 3.14, 0.0, 0.0]
self.set_position_request.speed = 50.0
self.set_position_request.acc = 500.0
self.set_position_request.mvtime = 0.0
self.call_services()
def call_services(self):
if not self.motion_enable_client.wait_for_service(timeout_sec=3.0):
self.get_logger().error('Service /ufactory/motion_enable is not available!')
return
self.motion_enable_client.call_async(self.motion_enable_request)
if not self.set_mode_client.wait_for_service(timeout_sec=3.0):
self.get_logger().error('Service /ufactory/set_mode is not available!')
return
self.set_mode_client.call_async(self.set_mode_request)
if not self.set_state_client.wait_for_service(timeout_sec=3.0):
self.get_logger().error('Service /ufactory/set_state is not available!')
return
self.set_state_client.call_async(self.set_state_request)
if not self.set_position_client.wait_for_service(timeout_sec=3.0):
self.get_logger().error('Service /ufactory/set_position is not available!')
return
self.set_position_client.call_async(self.set_position_request)
args=None
rclpy.init(args=args)
client = XArmServiceClient()
rclpy.spin(client)
rclpy.shutdown()