Пример #1
0
    def move_relative(self,
                      robot_id: str,
                      end_effector_id: str,
                      pose: Pose,
                      rel_pose: RelativePose,
                      move_type: MoveTypeEnum,
                      speed: float = 0.5) -> None:
        """
        Moves the robot's end-effector to a specific pose.
        :param robot_id: Unique robot id.
        :param end_effector_id: Unique end-effector id.
        :param pose: Target pose.
        :param rel_pose: Relative pose.
        :param move_type: Type of move.
        :param speed: Speed of move.
        :return:
        """

        assert 0.0 <= speed <= 1.0

        body = MoveRelativeParameters(pose, rel_pose.position,
                                      rel_pose.orientation)
        rest.put(
            f"{URL}/robots/{robot_id}/endeffectors/{end_effector_id}/moveRelative",
            body, {
                "moveType": move_type.value,
                "speed": speed
            })
Пример #2
0
    def move_to_joints(self, robot_id: str, target_joints: List[Joint],
                       speed: float) -> None:

        rest.put(f"{URL}/robots/{robot_id}/joints", target_joints, {
            "moveType": MoveTypeEnum.AVOID_COLLISIONS.value,
            "speed": speed
        })
Пример #3
0
    def move_relative_joints(self,
                             robot_id: str,
                             end_effector_id: str,
                             joints: ProjectRobotJoints,
                             rel_pose: RelativePose,
                             move_type: MoveTypeEnum,
                             speed: float = 0.5) -> None:
        """
        Moves the robot's end-effector relatively to specific joint values.
        :param robot_id: Unique robot id.
        :param end_effector_id: Unique end-effector id.
        :param joints: Target joints.
        :param rel_pose: Relative pose.
        :param move_type: Type of move.
        :param speed: Speed of move.
        :return:
        """

        assert 0.0 <= speed <= 1.0

        body = MoveRelativeJointsParameters(joints.joints, rel_pose.position,
                                            rel_pose.orientation)
        rest.put(
            f"{URL}/robots/{robot_id}/endeffectors/{end_effector_id}/moveRelativeJoints",
            body, {
                "moveType": move_type.value,
                "speed": speed
            })
Пример #4
0
    def set_output(self, robot_id: str, output_id: str, value: float) -> None:

        assert 0.0 <= value <= 1.0

        super(RestRobotService, self).set_output(robot_id, output_id, value)
        rest.put(f"{URL}/robots/{robot_id}/outputs/{output_id}",
                 params={"value": value})
Пример #5
0
    def add_collision_model(self, model: Models, pose: Pose) -> None:
        """
        Adds arbitrary collision model to the collision scene.
        :param model: Box, Sphere, Cylinder, Mesh
        :param pose: Pose of the collision object.
        :return:

        Example usage:

        >>> from arcor2.data.object_type import Box
        >>> from arcor2.data.common import Pose, Position. Orientation
        >>> box = Box("UniqueBoxId", 0.1, 0.1, 0.1)
        >>> robot_service.add_collision_model(box, Pose(Position(1, 0, 0), Orientation(0, 0, 0, 1)))

        """

        model_id = model.id
        params = model.to_dict()
        del params["id"]
        params[model.__class__.__name__.lower() + "Id"] = model_id

        # TODO temporary hack
        if model.type() == Model3dType.MESH:
            params["mesh_scale_x"] = 1.0
            params["mesh_scale_y"] = 1.0
            params["mesh_scale_z"] = 1.0
            params["transform_id"] = "world"

        rest.put(f"{URL}/collisions/{model.type().value}", pose, params)
Пример #6
0
    def set_search_parameters(self, parameters: SearchEngineParameters) -> None:
        """
        Sets the search parameters.
        :param parameters:
        :return:
        """

        rest.put(f"{URL}/search", parameters)
Пример #7
0
    def add_dialog_resolve(self, option: str) -> None:
        """
        Logs value with the specified group and name.
        :param option:
        :return:
        """

        rest.put(f"{URL}/dialog/resolve", params={"option": option})
Пример #8
0
 def put_suction_configuration(self, item_id: str, tool_id: str, poses: List[Pose]) -> None:
     """
     Adds or updates suction pick configuration.
     :param item_id:
     :param tool_id:
     :param poses:
     :return:
     """
     rest.put(f"{URL}/pick/suctions", poses, {"item_id": item_id, "tool_id": tool_id})
Пример #9
0
    def add_notification(self, message: str, level: NotificationLevelEnum) -> None:
        """
        Logs value with the specified group and name.
        :param message:
        :param level:
        :return:
        """

        rest.put(f"{URL}/notification", params={"message": message, "level": level})
Пример #10
0
    def move_to_pose(self, robot_id: str, end_effector_id: str,
                     target_pose: Pose, speed: float) -> None:

        rest.put(
            f"{URL}/robots/{robot_id}/endeffectors/{end_effector_id}/move",
            target_pose, {
                "moveType": MoveTypeEnum.AVOID_COLLISIONS.value,
                "speed": speed
            })
Пример #11
0
    def add_dialog(self, title: str, content: str, options: List[str]) -> None:
        """
        Logs value with the specified group and name.
        :param title:
        :param content:
        :param options:
        :return:
        """

        rest.put(f"{URL}/dialog", params={"title": title, "content": content}, data=options)
Пример #12
0
    def put_gripper_configuration(self, item_id: str, tool_id: str, gripper_setup: List[GripperSetup]) -> None:
        """
        Adds or updates gripper definitions for tool and item.
        :param item_id:
        :param tool_id:
        :param gripper_setup:
        :return:
        """

        rest.put(f"{URL}/pick/grippers", gripper_setup, {"item_id": item_id, "tool_id": tool_id})
Пример #13
0
    def add_value(self, group_id: str, name: str, value: float) -> None:
        """
        Logs value with the specified group and name.
        :param group_id:
        :param name:
        :param value:
        :return:
        """

        rest.put(f"{URL}/values", params={"group_id": group_id, "name": name, "value": value})
Пример #14
0
    def set_joints(self,
                   robot_id: str,
                   joints: ProjectRobotJoints,
                   move_type: MoveTypeEnum,
                   speed: float = 0.5) -> None:

        assert 0.0 <= speed <= 1.0
        assert robot_id == joints.robot_id
        rest.put(f"{URL}/robots/{robot_id}/joints", joints.joints, {
            "moveType": move_type.value,
            "speed": speed
        })
Пример #15
0
    def grip(self, robot_id: str, gripper_id: str, position: float = 0.0, speed: float = 0.5, force: float = 0.5) -> \
            None:

        assert 0.0 <= position <= 1.0
        assert 0.0 <= speed <= 1.0
        assert 0.0 <= force <= 1.0

        rest.put(f"{URL}/robots/{robot_id}/grippers/{gripper_id}/grip",
                 params={
                     "position": position,
                     "speed": speed,
                     "force": force
                 })
Пример #16
0
    def set_opening(self,
                    robot_id: str,
                    gripper_id: str,
                    position: float = 1.0,
                    speed: float = 0.5) -> None:

        assert 0.0 <= position <= 1.0
        assert 0.0 <= speed <= 1.0

        rest.put(f"{URL}/robots/{robot_id}/grippers/{gripper_id}/opening",
                 params={
                     "position": position,
                     "speed": speed
                 })
Пример #17
0
    def add_collision(self, obj: Generic) -> None:
        if not obj.collision_model or obj.collision_model.type(
        ) == Model3dType.NONE:
            return
        params = obj.collision_model.to_dict()
        del params["id"]
        params[obj.collision_model.__class__.__name__.lower() +
               "Id"] = collision_id(obj)

        # TODO temporary hack
        if obj.collision_model.type() == Model3dType.MESH:
            params["mesh_scale_x"] = 1.0
            params["mesh_scale_y"] = 1.0
            params["mesh_scale_z"] = 1.0
            params["transform_id"] = "world"

        rest.put(f"{URL}/collisions/{obj.collision_model.type().value}",
                 obj.pose, params)
Пример #18
0
    def move(self,
             robot_id: str,
             end_effector_id: str,
             pose: Pose,
             move_type: MoveTypeEnum,
             speed: float = 0.5) -> None:
        """
        Moves the robot's end-effector to a specific pose.
        :param robot_id: Unique robot id.
        :param end_effector_id: Unique end-effector id.
        :param pose: Target pose.
        :param move_type: Type of move.
        :param speed: Speed of move.
        :return:
        """

        assert 0.0 <= speed <= 1.0

        rest.put(
            f"{URL}/robots/{robot_id}/endeffectors/{end_effector_id}/move",
            pose, {
                "moveType": move_type.value,
                "speed": speed
            })
Пример #19
0
 def stop(self, robot_id: str) -> None:
     rest.put(f"{URL}/robots/{robot_id}/stop")
Пример #20
0
 def release(self, robot_id: str, suction_id: str) -> None:
     rest.put(f"{URL}/robots/{robot_id}/suctions/{suction_id}/release")
Пример #21
0
 def suck(self, robot_id: str, suction_id: str) -> None:
     rest.put(f"{URL}/robots/{robot_id}/suctions/{suction_id}/suck")
Пример #22
0
 def focus(self, mfa: MeshFocusAction) -> Pose:
     return rest.put(f"{URL}/utils/focus", mfa, data_cls=Pose)
Пример #23
0
def update_project(project: Project) -> None:

    assert project.id
    rest.put(f"{URL}/project", project)
Пример #24
0
def create(url: str, srv: Service) -> None:
    rest.put(f"{url}/systems/{srv.configuration_id}/create")
Пример #25
0
 def grab_image(self) -> None:
     """
     Grabs image and stores to internal cache.
     :return:
     """
     rest.put(f"{URL}/capture/grab")
Пример #26
0
def update_scene(scene: Scene) -> None:

    assert scene.id
    rest.put(f"{URL}/scene", scene)
Пример #27
0
def update_object_type(object_type: ObjectType) -> None:

    assert object_type.id
    rest.put(f"{URL}/object_type", object_type)
Пример #28
0
def update_service_type(service_type: ServiceType) -> None:

    assert service_type.id
    rest.put(f"{URL}/service_type", service_type)
Пример #29
0
def destroy(url: str) -> None:
    rest.put(f"{url}/systems/destroy")
Пример #30
0
def put_model(model: Models) -> None:
    rest.put(f"{URL}/models/{model.__class__.__name__.lower()}", model)