Mech-Vision 인터페이스

현재 버전 (1.8.1)에 대한 매뉴얼을 보고 계십니다. 다른 버전에 액세스하려면 페이지 오른쪽 상단 모서리에 있는 '버전 전환' 버튼을 클릭하세요.

■ 최신 버전의 소프트웨어를 사용하려면 Mech-Mind 다운로드 센터를 방문하여 다운로드하세요.

■ 현재 사용하고 있는 제품의 버전이 확실하지 않은 경우에는 언제든지 당사 기술 지원팀에 문의하시기 바랍니다.

이 부분에서 아래와 같이 Mech-Vision과 관련된 인터페이스를 소개하겠습니다.

비전 목표점을 획득하기

아래와 같이 adapter.py 중의 find_vision_pose()함수를 통해 Mech-Vision비전 결과를 획득합니다.

def find_vision_pose(self, project_name=None, timeout=default_vision_timeout):
    vision_result = self.call_vision("findPoses", project_name=project_name, timeout=timeout)
    logging.info("Find vision result: {}".format(vision_result))
    return vision_result

Mech-Vision 중의 비전 목표점은 보통 사원수 형식으로 출력된 물체 포즈(obj_pose)입니다. TCP 포즈 형식으로 출력될 수도 있지만 Mech-Vision 프로젝트에서 변환되어야 합니다.

예시

Adapter는 TCP 포즈(tcp_pose)로 변환할 수 있는 함수를 생성해야 하며 때로는 사원수를 오일러 각으로 변환하거나 라디안을 각도로 변환하고 로봇 측에 전송해야 합니다 (변환 여부는 로봇 측과 일치해야 함). 또는 Adapter는 Mech-Vision에서 출력한 비전 포인트를 체크할 수도 있습니다. 예를 들어:

def check_vision_result(self, vision_result):
    if vision_result["noCloudInRoi"]:                      # Determine whether it is an empty bin
    logging.info("Layer has no objects")
    self.send(pack('>2B6i', CODE_NO_CLOUD, vision_num, *EMPTY_PLACEHOLDER))
    return
    poses = vision_result.get("poses", [])                 # Get pose
    if len(poses) = 0:                                  # Determine whether there is a vision point
        logging.warning("No pose from vision")
        self.send(pack('>2B6i', CODE_NO_POSE, vision_num, *EMPTY_PLACEHOLDER))
        return
    self.send(pack_pose(poses[0], vision_num))       # Send after format conversion

여기서 vision_result는 find_vision_pose()에서 가져온 것이며, 다음과 같이 호출됩니다.

self.check_vision_result(json.loads(self.find_vision_pose().decode()))

vision_result가 함수에 전송되면 ROI와 관련된 프로젝트에 대해 먼저 비어있는 빈인지 확인한 다음 비전 포즈를 얻습니다. 비전 포즈가 정상인 경우 비전 포즈를 변환 함수 (pack_pose ())로 전달하고 전송합니다.

스텝 파라미터를 설정하기

Mech-Vision의 스텝에 대한 동적 파라미터 를 설정할 때는 일반적으로 adapter.py의 set_step_property()를 호출하기만 하면됩니다.

def set_step_property(self, msg, project_name=None, timeout=None):
    return self.call_vision("setStepProperties", msg, project_name, timeout)

여기서 msg는 구체적인 스텝의 이름과 구성해야 하는 파라미터를 결정합니다.

예시

공작물 종류에 따라 동적으로 Mech-Vision 매칭 모델을 설정해야 하는 경우, 다음과 같은 함수를 생성하여 msg를 설정할 수 있습니다.

def _step_matching_model_cell(step_name, model_type):
    msg = {"name": step_name,
            "values":
           {"modelFile": model_type["ply"],
         "pickPointFilePath": model_type["json"]}}
    return msg

여기서 step_name은 설정해야 하는 Mech-Vision 스텝의 이름이며 model_type은 해당 종류의 공작물과 대응하는 파일 경로입니다. “ply” 및 “json”을 통해 .ply 및 .json으로 끝나는 모델 파일의 경로를 획득하여 Mech-Vision에서 각각 해당 스텝의 파라미터에 입력할 수 있습니다.

step_name은 “Local Matching”인 경우 다음과 같이 호출하면 됩니다.

msg = _step_matching_model_cell("Local Matching", model_type)
self.set_step_property(msg)

스텝 파라미터를 읽어내기

특정한 Mech-Vision 스텝의 파라미터를 획득하려면 adapter.py의 read_step_property()을 호출할 수 있습니다.

def read_step_property(self, msg):
     result = self.call_vision("readStepProperties", msg)
     logging.info("Property result: {}".format(result))
     return result

여기서 msg는 스텝의 이름과 획득할 파라미터의 값을 결정하며, 함수를 생성하여 msg를 다시 작성할 수 있습니다.

예시

카메라 IP를 획득하려면 다음과 같은 예제 코드를 사용할 수 있습니다.

def read_camera_property(self):
     msg = {"type": "Camera",
            "properties": ["MechEye"]}
     property_results = json.loads(self.read_step_property(msg).decode())
     camera_ip = property_results["MechEye"]["NetCamIp"]

Mech-Vision 프로젝트에 카메라가 하나만 있는 경우 유형(type)에 따라 스텝을 찾을 수 있습니다. 만약 Mech-Vision에 동일한 스텝이 여러 개 있지만 특정 스텝의 파라미터만 획득하거나 설정하려면 이름(name)으로 스텝을 찾을 수 있습니다. read_step_property() 함수를 호출하고 json 형식으로 변환하여 카메라의 모든 파라미터 값(json 형식)을 획득할 수 있습니다. 다음과 같습니다.

Property result:
{
  "MechEye": {
    "NetCamIp": "127.0.0.1",
    "TimeOut": "10",
    "configGroup": "",
  }
}

이 예시에서 구체적인 파라미터의 필드("MechEye" 및 "NetCamIp")에 따라 최종적으로 카메라의 IP 주소(127.0.0.1)를 획득합니다.

파라미터 레시피를 전환하기

Mech-Vision을 사용할 때 일부 프로젝트의 프로세스가 동일하지만 일부 파라미터가 다른 경우, 파라미터 레시피를 구성하면 다른 프로젝트에 대해 해당하는 파라미터를 전환할 수 있습니다. 즉, adapter.py의 select_parameter_group()을 호출합니다.

def select_parameter_group(self, project_name, group_index, timeout=None):
    msg = {"parameter_group_idx": group_index}
    result = self.call_vision("selectParameterGroup", msg, project_name, timeout)
    logging.info("selectParameterGroup result: {}".format(result))
    return result

여기서 project_name 파라미터는 Mech-Vision 프로젝트의 이름이며 group_index 파라미터는 레시피의 번호입니다.

예시

프로젝트에서 레시피를 전환해야 하는 경우 다음과 같은 예제 코드를 사용하여 select_parameter_group() 함수를 호출하고 예외 처리를 수행하십시오.

try:
   result = self.select_parameter_group(self.vision_project_name, model_code-1)
   if result:
      result = result.decode()
      if result.startswith("CV-E0401"):
            return -1
      elif result.startswith("CV-E0403"):
            return -1
      raise RuntimeError(result)
   except Exception as e:
      logging.exception('Exception when switch model: {}'.format(e))
      return -1
   return 0

여기서 self.vision_project_name은 Mech-Vision 프로젝트의 이름이고 model_code-1은 레시피의 번호입니다.

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

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