rclpyからUFactory Lite6を操作してみます
実際のところ
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') # Enable all joints 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 # Set proper mode and state 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 # Cartesian linear motion 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 # Call services self.call_services() def call_services(self): # Enable all joints 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) # Set mode and state 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) # Set position 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()