Mech-Vision接口

您正在查看V1.8.1版本的文档。如果您想查阅其他版本的文档,可以点击页面右上角“切换版本”按钮进行切换。

■ 如果您想使用最新版本,可以从梅卡曼德下载中心下载。

■ 如果您不确定当前使用的产品是哪个版本,请随时联系梅卡曼德技术支持。

本节介绍使用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)且以四元数格式输出(也可以工具位姿输出,需要在 Mech-Vision 工程中做转换)。

示例

Adapter 需要构建函数将其转换为工具位姿(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是传入的配方编号。

我们重视您的隐私

我们使用 cookie 为您在我们的网站上提供最佳体验。继续使用该网站即表示您同意使用 cookie。如果您拒绝,将使用一个单独的 cookie 来确保您在访问本网站时不会被跟踪或记住。