コード例 #1
0
ファイル: gym_robotic_arm.py プロジェクト: kwh44/robotic_arm
    def __start_arm_control(self):
        # nodes and publishers for six angle joints
        self.arm_cmd_nodes_pubs = []
        for x in range(1, 4):
            for y in range(1, 3):
                node = rclpy.create_node("mara_arm_cmd_" + str(x) + "_" +
                                         str(y))
                self.arm_cmd_nodes_pubs.append([
                    node,
                    node.create_publisher(
                        GoalRotaryServo,
                        '/hrim_actuator_rotaryservo_00000000000' + str(x) +
                        '/goal_axis' + str(y),
                        qos_profile=qos_profile_sensor_data)
                ])
        # declare joint angle messages
        self.arm_cmd_msgs = []
        for i in range(6):
            msg = GoalRotaryServo()
            msg.position = 0.0  # Position to rads
            msg.velocity = 30.  # Velocity in rads/s
            msg.control_type = 4  # Position and velocity control
            self.arm_cmd_msgs.append(msg)

        # gripper node and service client
        node = rclpy.create_node("mara_gripper_cmd")
        client = node.create_client(
            ControlFinger, "/hrim_actuator_gripper_000000000004/fingercontrol")
        self.arm_cmd_nodes_pubs.append([node, client])

        # declare gripper service request
        req = ControlFinger.Request()
        req.goal_velocity = 250.
        req.goal_angularposition = 0.0
        self.arm_cmd_msgs.append(req)
コード例 #2
0
    def __init__(self):
        super().__init__('mara_minimal_client')

        # Create a client for service "/hrim_actuation_gripper_000000000004/goal"
        self.client = self.create_client(ControlFinger, "/hrim_actuation_gripper_000000000004/goal")

        # Wait for service to be avaiable before calling it
        while not self.client.wait_for_service(timeout_sec=1.0):
            self.get_logger().info('service not available, waiting again...')

        # Create request with the same type as the service, ControlFinger
        self.req = ControlFinger.Request()
コード例 #3
0
    def moveGripper(self):
        print('moveGripper', self.vel, self.pos, self.effort)
        req = ControlFinger.Request()
        req.goal_velocity = self.vel  # velocity range: 30 -  250 mm/s
        req.goal_effort = self.effort  # forces range:   10 -  125 N
        req.goal_angularposition = self.pos  # position range   0 - 0.87 rad

        future = self.cli.call_async(req)
        rclpy.spin_until_future_complete(self.node, future)
        if future.result() is not None:
            self.node.get_logger().info('Goal accepted: %d: ' %
                                        future.result().goal_accepted)
        else:
            self.node.get_logger().error(
                'Exception while calling service: %r' % future.exception())
コード例 #4
0
    def initUI(self, gripper, gripperService):
        self.gripper = gripper

        self.msg = GoalRotaryServo()
        self.msg.velocity = 0.1
        self.msg.control_type = 4

        grid = QGridLayout()
        self.setLayout(grid)

        if self.gripper != 'None':
            self.client = self.node.create_client(ControlFinger,
                                                  gripperService)
            while not self.client.wait_for_service(timeout_sec=1.0):
                print(gripperService +
                      ' service not available, waiting again...')

            self.req = ControlFinger.Request()

            if self.gripper == '140':
                self.req.goal_velocity = 30.0
            else:
                self.req.goal_velocity = 20.0

            self.labelGripperPos = QLabel("Gripper: 0")
            self.sldGripperPos = QSlider(Qt.Horizontal, self)
            self.sldGripperPos.setMinimum(0)
            self.sldGripperPos.setMaximum(87)
            self.sldGripperPos.setFocusPolicy(Qt.NoFocus)
            self.sldGripperPos.setGeometry(30, 40, 100, 30)
            self.sldGripperPos.setTickInterval(1)
            self.sldGripperPos.valueChanged[int].connect(
                self.changePositionGripper)

            self.labelGripperVel = QLabel("Speed: 30")
            self.sldGripperVel = QSlider(Qt.Horizontal, self)

            if self.gripper == '140':
                self.sldGripperVel.setMinimum(300)
                self.sldGripperVel.setMaximum(2500)
            else:
                self.sldGripperVel.setMinimum(1500)
                self.sldGripperVel.setMaximum(200)

            self.sldGripperVel.setFocusPolicy(Qt.NoFocus)
            self.sldGripperVel.setGeometry(30, 40, 100, 30)
            self.sldGripperVel.setTickInterval(1)
            self.sldGripperVel.valueChanged[int].connect(
                self.changeVelocityGripper)

            grid.addWidget(self.labelGripperPos, 10, 0)
            grid.addWidget(self.sldGripperPos, 10, 1)
            grid.addWidget(self.labelGripperVel, 11, 0)
            grid.addWidget(self.sldGripperVel, 11, 1)

        self.labelJoint1 = QLabel("Joint 1: 0")
        self.sldJoint1 = QSlider(Qt.Horizontal, self)
        self.sldJoint1.setMinimum(-180)
        self.sldJoint1.setMaximum(180)
        self.sldJoint1.setFocusPolicy(Qt.NoFocus)
        self.sldJoint1.setGeometry(30, 40, 100, 30)
        self.sldJoint1.setTickInterval(0.1)
        self.sldJoint1.valueChanged[int].connect(self.changePositionJoint1)

        self.labelJoint2 = QLabel("Joint 2: 0")
        self.sldJoint2 = QSlider(Qt.Horizontal, self)
        self.sldJoint2.setMinimum(-180)
        self.sldJoint2.setMaximum(180)
        self.sldJoint2.setFocusPolicy(Qt.NoFocus)
        self.sldJoint2.setGeometry(30, 40, 100, 30)
        self.sldJoint2.setTickInterval(0.1)
        self.sldJoint2.valueChanged[int].connect(self.changePositionJoint2)

        self.labelJoint3 = QLabel("Joint 3: 0")
        self.sldJoint3 = QSlider(Qt.Horizontal, self)
        self.sldJoint3.setMaximum(180)
        self.sldJoint3.setMinimum(-180)
        self.sldJoint3.setFocusPolicy(Qt.NoFocus)
        self.sldJoint3.setGeometry(30, 40, 100, 30)
        self.sldJoint3.setTickInterval(0.1)
        self.sldJoint3.valueChanged[int].connect(self.changePositionJoint3)

        self.labelJoint4 = QLabel("Joint 4: 0")
        self.sldJoint4 = QSlider(Qt.Horizontal, self)
        self.sldJoint4.setMinimum(-180)
        self.sldJoint4.setMaximum(180)
        self.sldJoint4.setFocusPolicy(Qt.NoFocus)
        self.sldJoint4.setGeometry(30, 40, 100, 30)
        self.sldJoint4.setTickInterval(0.1)
        self.sldJoint4.valueChanged[int].connect(self.changePositionJoint4)

        self.labelJoint5 = QLabel("Joint 5: 0")
        self.sldJoint5 = QSlider(Qt.Horizontal, self)
        self.sldJoint5.setMinimum(-180)
        self.sldJoint5.setMaximum(180)
        self.sldJoint5.setFocusPolicy(Qt.NoFocus)
        self.sldJoint5.setGeometry(30, 40, 100, 30)
        self.sldJoint5.setTickInterval(0.1)
        self.sldJoint5.valueChanged[int].connect(self.changePositionJoint5)

        self.labelJoint6 = QLabel("Joint 6: 0")
        self.sldJoint6 = QSlider(Qt.Horizontal, self)
        self.sldJoint6.setMinimum(-180)
        self.sldJoint6.setMaximum(180)
        self.sldJoint6.setFocusPolicy(Qt.NoFocus)
        self.sldJoint6.setGeometry(30, 40, 100, 30)
        self.sldJoint6.setTickInterval(0.1)
        self.sldJoint6.valueChanged[int].connect(self.changePositionJoint6)

        self.labelVelocity = QLabel("Speed: 0.3")
        self.sldVelocity = QSlider(Qt.Horizontal, self)
        self.sldVelocity.setMinimum(10)
        self.sldVelocity.setMaximum(157)
        self.sldVelocity.setFocusPolicy(Qt.NoFocus)
        self.sldVelocity.setGeometry(30, 40, 100, 30)
        self.sldVelocity.setTickInterval(1)
        self.sldVelocity.valueChanged[int].connect(self.changeVelocity)

        grid.addWidget(self.labelJoint1, 0, 0)
        grid.addWidget(self.sldJoint1, 0, 1)
        grid.addWidget(self.labelJoint2, 1, 0)
        grid.addWidget(self.sldJoint2, 1, 1)
        grid.addWidget(self.labelJoint3, 2, 0)
        grid.addWidget(self.sldJoint3, 2, 1)
        grid.addWidget(self.labelJoint4, 3, 0)
        grid.addWidget(self.sldJoint4, 3, 1)
        grid.addWidget(self.labelJoint5, 4, 0)
        grid.addWidget(self.sldJoint5, 4, 1)
        grid.addWidget(self.labelJoint6, 5, 0)
        grid.addWidget(self.sldJoint6, 5, 1)
        grid.addWidget(self.labelVelocity, 6, 0)
        grid.addWidget(self.sldVelocity, 6, 1)

        self.buttonHome = QPushButton('Go Home', self)
        self.buttonHome.clicked.connect(self.goHome)
        self.buttonA = QPushButton('Go A', self)
        self.buttonA.clicked.connect(self.goA)
        self.buttonB = QPushButton('Go B', self)
        self.buttonB.clicked.connect(self.goB)

        grid.addWidget(self.buttonHome, 7, 0)
        grid.addWidget(self.buttonA, 8, 0)
        grid.addWidget(self.buttonB, 8, 1)

        self.setWindowTitle("MARA")
        self.show()
コード例 #5
0
from hrim_actuator_gripper_srvs.srv import ControlFinger

# -------- #

rclpy.init(args=None)

# Create Node with name "mara_minimal_client"
node = rclpy.create_node("mara_minimal_client")

# Create a client for service "/hrim_actuation_gripper_000000000004/goal"
client = node.create_client(ControlFinger,
                            "/hrim_actuation_gripper_000000000004/goal",
                            qos_profile=qos_profile_services_default)

# Create request with the same type as the service, ControlFinger
req = ControlFinger.Request()

# Position range 0 - 0.87 rad
# TODO: The range is wider for me (up to 9.0 sometimes)
req.goal_linearposition = 0.87

# Wait for service to be avaiable before calling it
while not client.wait_for_service(timeout_sec=1.0):
    node.get_logger().info('Service not available, waiting again...')

# Call service and spin
future = client.call_async(req)
rclpy.spin_until_future_complete(node, future)

# Analyze the result
if future.result() is not None: