Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Jupyter Notebook から rclpy を読み出す実験 その2:ロボットアーム UFactory Lite6の操作実験

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()