Mech-Vision 인터페이스

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

■ 최신 버전의 소프트웨어를 사용하려면 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
python

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
python

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

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

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)
python

여기서 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
python

여기서 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)
python

스텝 파라미터를 읽어내기

특정한 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
python

여기서 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"]
python

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

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

이 예에서 구체적인 파라미터의 필드("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
python

여기서 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
python

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

이 페이지가 도움이 되었습니까?

다음 방법을 통해 피드백을 보내주실 수 있습니다:

저희는 귀하의 개인정보를 소중히 다룹니다.

당사 웹사이트는 최상의 사용자 경험을 제공하기 위해 쿠키를 사용하고 있습니다. "모두 수락"을 클릭하시면 쿠키 사용에 동의하시는 것이며, "모두 거부"를 클릭하시면 이 웹사이트 방문 시 귀하의 정보가 추적되거나 기억되지 않도록 단일 쿠키만 사용됩니다.