기타 인터페이스

이 부분에서는 Adapter를 사용하는 기타 인터페이스에 대해 소개하겠습니다. 구체적으로 다음 인터페이스를 포함합니다.

알림 서비스

Mech-Viz 프로젝트가 특정 분기 또는 특정 스텝으로 실행될 때 Adapter 프로그램의 해당 함수를 호출하려는 경우 Mech-Viz에 알림 스텝을 추가할 수 있습니다.

예시

예를 들어, Adapter에서 이미 하역된 파렛트의 수량을 1씩 증가시키는 함수를 작성한다면, 디팔레타이징 과정의 마지막 스텝 뒤에 “알림” 스텝을 추가하여 여기에 도달하면 Adapter를 트리거하고 해당 함수를 호출할 수 있습니다. 이 기능을 구현하는 예시는 다음과 같습니다.

  1. NotifyService를 상속하는 클래스를 작성하십시오.

    from interface.services import NotifyService, register_service
    
    class NotifyService(NotifyService):
        service_type = "notify"
        service_name = "FANUC_M410IC_185_COMPACT"
    
        def __init__(self, update_success_num, update_fail_num):
            self.update_success_num = update_success_num
            self.update_fail_num = update_fail_num
    
        def handle_message(self, msg):
            if msg == "Success":
                self.update_success_num()
            elif msg == "Fail":
                self.update_fail_num()

    이 알림은 다음 기능을 수행할 수 있습니다. Mech-Viz가 "Success"를 보내는 알림 스텝까지 실행되면 Adapter는 update_success_num() 함수를 호출하며 "Fail" 을 보내는 알림 스텝까지 실행되면 Adapter는 update_fail_num() 함수를 호출합니다.

  2. Mech-Viz 메인 프로그램을 컨트롤하는 클래스에서 NotifyService 클래스를 인스턴스화하고 이 서비스를 등록합니다.

    class MyClient(TcpClientAdapter):
    
         def __init__(self, host_address):
             super().__init__(host_address)
             self._register_service()
    
         def _register_service(self):
             self.robot_service = NotifyService(self.update_success_num, self.update_fail_num)
             self.server, port = register_service(self.hub_caller, self.robot_service)
    
         def update_success_num(self):
             # the num of unstack successfully plus 1
             self.success_num += 1
    
         def update_fail_num(self):
             # the num of unstack fiplus 1
             self.fail_num += 1
  3. Mech-Viz의 적당한 위치에 대응하는 “알림” 스텝을 추가하십시오.

    “알림” 스텝에 대해 가장 중요한 것은 Adapter 명칭 및 *메시지*를 입력하는 것입니다. 이 두 파라미터의 값은 NotifyService 클래스 중의 service_name 및 msg 값과 일치해야 합니다.

    프로그램이 실행되면 Mech-Center 인터페이스에 service_type 및 service_name이 나타납니다. 이는 알림 서비스 등록이 성공했음을 나타냅니다.

VisionWatcher 서비스

Mech-Vision 실행 과정이 완료되면 결과가 출력됩니다. 예를 들면: vision result:{‘noCloudInRoi’: False, ‘function’: ‘posesFound’, ‘vision_name’: ‘TJTvision-3’}. 일부 비정상적인 상황의 경우 Adapter는 VisionWatcher 서비스를 통해 오류 메시지를 보낼 수 있습니다.

예시

  1. VisionResultSelectedAtService를 상속하는 클래스를 작성하십시오.

    from interface.services import VisionResultSelectedAtService, register_service
    
    class VisionWatcher(VisionResultSelectedAtService):
        def __init__(self, send_err_no_cloud):
            super().__init__()
            self.send_err_no_cloud = send_err_no_cloud
    
        def poses_found(self,result):
            has_cloud_in_roi = not result.get("noCloudInRoi", False)
    
            if not has_cloud_in_roi:
                time.sleep(2)
                self.send_err_no_cloud()

    하위 클래스 VisionWatcher는 상위 클래스의 poses_found() 함수를 다시 작성해야 하므로 Adapter에서 send_err_no_cloud()(오류 정보를 전송하는 함수)호출하는 논리가 poses_found() 에서 변할 것입니다. 실행 시 Mech-Vision이 반환한 포즈의 값은 poses_found()의 result 파라미터로 전송됩니다.

  2. Mech-Viz 메인 프로그램을 컨트롤하는 클래스에서 VisionWatcher를 인스턴스화하십시오.

    class MyClient(TcpClientAdapter):
        def __init__(self, host_address):
            super().__init__(host_address)
            self._register_service()
        def _register_service(self):
            self.robot_service = VisionWatcher(self.send_err_no_cloud)
            self.server, port = register_service(self.hub_caller, self.robot_service)
    
        def send_err_no_cloud(self):
            # send no cloud error message
            self.send("12,NoCloudErr,done".encode())

    VisionWatcher 클래스를 인스턴스화하는 과정에 send_err_no_cloud() 함수를 파라미터로 VisionWatcher()에 전송합니다. 포인트 클라우드가 표시되지 않으면 poses_found()의 논리에 따라 오류 메시지를 보내는 함수가 호출됩니다.

    프로그램이 실행되면 등록된 서비스가 Mech-Center 인터페이스에 나타납니다. 그러면 Adapter가 VisionWatcher 서비스를 성공적으로 등록했음을 나타냅니다.

저희는 귀하의 개인 정보를 소중하게 생각합니다.

당사 웹사이트는 귀하에게 최상의 경험을 제공하기 위해 쿠키를 사용합니다. "모두 수락"을 클릭하시는 경우, 귀하는 사의 쿠키 사용에 동의하게 됩니다. "모두 거부"를 클릭하시는 경우, 귀하가 이 웹사이트를 방문할 때 추적되거나 기억되지 않도록 하기 위해 단일 쿠키가 사용됩니다.