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 })
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 })
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 })
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})
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)
def set_search_parameters(self, parameters: SearchEngineParameters) -> None: """ Sets the search parameters. :param parameters: :return: """ rest.put(f"{URL}/search", parameters)
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})
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})
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})
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 })
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)
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})
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})
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 })
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 })
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 })
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)
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 })
def stop(self, robot_id: str) -> None: rest.put(f"{URL}/robots/{robot_id}/stop")
def release(self, robot_id: str, suction_id: str) -> None: rest.put(f"{URL}/robots/{robot_id}/suctions/{suction_id}/release")
def suck(self, robot_id: str, suction_id: str) -> None: rest.put(f"{URL}/robots/{robot_id}/suctions/{suction_id}/suck")
def focus(self, mfa: MeshFocusAction) -> Pose: return rest.put(f"{URL}/utils/focus", mfa, data_cls=Pose)
def update_project(project: Project) -> None: assert project.id rest.put(f"{URL}/project", project)
def create(url: str, srv: Service) -> None: rest.put(f"{url}/systems/{srv.configuration_id}/create")
def grab_image(self) -> None: """ Grabs image and stores to internal cache. :return: """ rest.put(f"{URL}/capture/grab")
def update_scene(scene: Scene) -> None: assert scene.id rest.put(f"{URL}/scene", scene)
def update_object_type(object_type: ObjectType) -> None: assert object_type.id rest.put(f"{URL}/object_type", object_type)
def update_service_type(service_type: ServiceType) -> None: assert service_type.id rest.put(f"{URL}/service_type", service_type)
def destroy(url: str) -> None: rest.put(f"{url}/systems/destroy")
def put_model(model: Models) -> None: rest.put(f"{URL}/models/{model.__class__.__name__.lower()}", model)