API 说明 ============================ nachi 工控机主控支持的 API ++++++++++++++++++++++++++++++++++++++++++ +-----+-------------------------+--------+ | 100 | 获取机械臂程序版本号 | 支持 | +-----+-------------------------+--------+ | 101 | 发送速度数据 | 不支持 | +-----+-------------------------+--------+ | 102 | 发送加速度数据 | 不支持 | +-----+-------------------------+--------+ | 103 | 发送圆滑过渡参数 | 不支持 | +-----+-------------------------+--------+ | 104 | 发送工具坐标系(TCP)参数 | 不支持 | +-----+-------------------------+--------+ | 105 | 设置数字量输出 | 支持 | +-----+-------------------------+--------+ | 106 | SetJointsMovej | 支持 | +-----+-------------------------+--------+ | 107 | SetCartMovel | 支持 | +-----+-------------------------+--------+ | 108 | SetJoinsMovel | 支持 | +-----+-------------------------+--------+ | 109 | SetCartMovej | 支持 | +-----+-------------------------+--------+ | 110 | MovejSequence | 不支持 | +-----+-------------------------+--------+ | 111 | MovelSequence | 不支持 | +-----+-------------------------+--------+ | 112 | SetJointsMovejDo | 不支持 | +-----+-------------------------+--------+ | 113 | SetCartMovelDo | 不支持 | +-----+-------------------------+--------+ | 114 | SetJointsMovelDo | 不支持 | +-----+-------------------------+--------+ | 115 | SetJointsMovejGroupDo | 不支持 | +-----+-------------------------+--------+ | 116 | SetCartMovelGroupDo | 不支持 | +-----+-------------------------+--------+ | 117 | SetJointsMovelGroupDo | 不支持 | +-----+-------------------------+--------+ | 118 | MovelUntil | 不支持 | +-----+-------------------------+--------+ | 119 | 获取数字量输入状态 | 支持 | +-----+-------------------------+--------+ | 120 | 获取数字量输出状态 | 支持 | +-----+-------------------------+--------+ | 121 | 获取模拟量输入口数值 | 不支持 | +-----+-------------------------+--------+ | 122 | 获取机械臂当前角度 | 支持 | +-----+-------------------------+--------+ | 123 | 获取机械臂当前位姿 | 支持 | +-----+-------------------------+--------+ | 200 | 机械臂后台发送状态 | 支持 | +-----+-------------------------+--------+ 那智工控机主控定义了一些全局变量,这些变量都放在 ``XYZSETUP.INC`` 不允许用户使用。 整体占用如下变量,请勿使用: - 整数变量:V%[1~90] - 实数变量:V![1~100] - 字符串变量:V$[1~35] nachi 机械臂主控支持的 API +++++++++++++++++++++++++++++++++++ ``PUBLIC.INC`` 中定义了全局的分隔符、结束符、版本、接收字符串等变量。 ``XYZSETUP.INC`` 中定义了全局变量的占用情况,请不要占用如下地址: - 整数变量:V%[1~90] - 实数变量:V![1~80], V![301~480](用于TrajMove) - 字符串变量:V$[1~35] 具体占用情况如下: +----------------------------------------------------------------------------------------------------------+ | 整数变量V% | +------------+----------------------------+-------------------------------------------+--------------------+ | 地址 | 别名 | 含义 | 说明(用户是否可写) | +------------+----------------------------+-------------------------------------------+--------------------+ | V1% | MST_CONNECT_TRIG | 通讯连接标志位 | x | +------------+----------------------------+-------------------------------------------+--------------------+ | V2% | MST_COMMAND_TRIG | 发送命令标志位 | x | +------------+----------------------------+-------------------------------------------+--------------------+ | V3% | MST_IP | 服务端的ip地址 | 可写 | +------------+----------------------------+-------------------------------------------+--------------------+ | V4% | MST_PORT | 服务端端口号 | 可写 | +------------+----------------------------+-------------------------------------------+--------------------+ | V5% | MST_CNN_ERR_ALL | 发生连接错误 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ | V6% | MST_CNN_ERR1 | socket报错1 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ | V7% | MST_CNN_ERR2 | socket报错2 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ | V8% | MST_SKT_SEND_SIZE | 内部使用 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ | V9% | MST_SKT_RECV_SIZE_ONE_TIME | 内部使用 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ | V10% | MST_TOTAL_RECV_VSTR_CNT | 内部使用 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ | V11% | MST_HB_VALUE | 当前分钟 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ | V12% | MST_FRONT_COMMAND | 命令号 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ | V13% | MST_TOOL_ID | 工具id | 可写 | +------------+----------------------------+-------------------------------------------+--------------------+ | V14% | MST_VS_ID | 视觉服务id | 可写 | +------------+----------------------------+-------------------------------------------+--------------------+ | V15% | MST_SET_TOKEN | 设置的token值 | 可写 | +------------+----------------------------+-------------------------------------------+--------------------+ | V16% | | 系统预留,请勿使用 | x | +------------+----------------------------+-------------------------------------------+--------------------+ | V17%~V19% | | 内部使用 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ | V20% | | 系统预留,请勿使用 | x | +------------+----------------------------+-------------------------------------------+--------------------+ | V21% ~V30% | MST_USR_IN_IN1 | xyzUsrCommand()的10个int输入参数 | 可写 | | | | | | | | MST_USR_IN_IN2 | | | | | | | | | | MST_USR_IN_IN9 | | | | | | | | | | ... | | | | | | | | | | MST_USR_IN_IN_10 | | | +------------+----------------------------+-------------------------------------------+--------------------+ | V31% | MST_ERR_CODE | Max返回的错误代码 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ | V32% | MST_OUT_TOKEN | Max返回的token值 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ | V33% | MST_POSE_NUM | (grasp_pose/object_pose/轨迹等)的点位数量 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ | V34% | MST_PIPELINE_NUM | 运动流程编号 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ | V35% | MST_REGISTER_NUM | 抓取序号 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ | V36%~V41% | MST_OUT_INT1 | 指令xyzCalculateGraspPose() | read only | | | | | | | | ... | xyzCalculateObjectPose()的6个int输出值 | | | | | | | | | MST_OUT_INT6 | | | +------------+----------------------------+-------------------------------------------+--------------------+ | V42%~V51% | MST_USR_OUT_IN1 | xyzUsrCommand()的10个int输出值 | read only | | | | | | | | MST_USR_OUT_IN9 | | | | | | | | | | ... | | | | | | | | | | MST_USR_OUT_IN_10 | | | +------------+----------------------------+-------------------------------------------+--------------------+ | V52% | MST_HB_FLAG | 内部使用,心跳标志位 | x | +------------+----------------------------+-------------------------------------------+--------------------+ | V53%~V60% | | 系统预留,请勿使用 | x | +------------+----------------------------+-------------------------------------------+--------------------+ | V61%~V90% | | TrajMove中各轨迹点类型 | read only | +------------+----------------------------+-------------------------------------------+--------------------+ +-------------------------------------------------------------------------------------------+ | 字符串变量V$ | +-----------+---------------------+------------------------------------+--------------------+ | 地址 | 别名 | 含义 | 说明(用户是否可写) | +-----------+---------------------+------------------------------------+--------------------+ | V1$~V15$ | | 内部使用 | x | +-----------+---------------------+------------------------------------+--------------------+ | V16$ | | 系统预留,请勿使用 | x | +-----------+---------------------+------------------------------------+--------------------+ | V17$ | MST_TASK_CODENAME | 任务代号 | 可写 | +-----------+---------------------+------------------------------------+--------------------+ | V18$ | MST_VISION_CODENAME | 视觉命令代号 | 可写 | +-----------+---------------------+------------------------------------+--------------------+ | V19$ | MST_ITEM_CODENAME | 工件代号 | 可写 | +-----------+---------------------+------------------------------------+--------------------+ | V20$ | MST_OBJ_NAME | 物体名称 | read only | +-----------+---------------------+------------------------------------+--------------------+ | V21$~V25$ | MST_USR_IN_STR1 | xyzUsrCommand()的5个字符串输入参数 | 可写 | | | | | | | | ... | | | | | | | | | | MST_USR_IN_STR5 | | | +-----------+---------------------+------------------------------------+--------------------+ | V26$~V30$ | MST_USR_OUT_STR1 | xyzUsrCommand()的5个字符串输出值 | read only | | | | | | | | ... | | | | | | | | | | MST_USR_OUT_STR5 | | | +-----------+---------------------+------------------------------------+--------------------+ | V31$~V35$ | | 系统预留,请勿使用 | x | +-----------+---------------------+------------------------------------+--------------------+ +--------------------------------------------------------------------------------------------------------+ | 实数变量V! | +-------------+-------------------------+-------------------------------------------+--------------------+ | 地址 | 别名 | 含义 | 说明(用户是否可写) | +-------------+-------------------------+-------------------------------------------+--------------------+ | V1! | MST_POSE_X | grasp_pose/object_pose/place_pose中的点位 | read only | +-------------+-------------------------+ | | | V2! | MST_POSE_Y | | | +-------------+-------------------------+ | | | V3! | MST_POSE_Z | | | +-------------+-------------------------+ | | | V4! | MST_POSE_A | | | +-------------+-------------------------+ | | | V5! | MST_POSE_B | | | +-------------+-------------------------+ | | | V6! | MST_POSE_C | | | +-------------+-------------------------+-------------------------------------------+--------------------+ | V7!~V10! | | 系统预留,请勿使用 | x | +-------------+-------------------------+-------------------------------------------+--------------------+ | V11!~V20! | MST_USR_IN_FLT1 | xyzUsrCommand()的10个实数输入值 | 可写 | | | | | | | | … | | | | | | | | | | MST_USR_IN_FLT_10 | | | +-------------+-------------------------+-------------------------------------------+--------------------+ | V21!~V30! | MST_USR_OUT_FLT1 | xyzUsrCommand()的10个实数输出值 | read only | | | | | | | | … | | | | | | | | | | MST_USR_OUT_FLT_10 | | | +-------------+-------------------------+-------------------------------------------+--------------------+ | V31!~V36! | MST_USR_IN_CART_POSE_X | xyzUsrCommand()的1个笛卡尔坐标输入值 | 可写 | | | | | | | | MST_USR_IN_CART_POSE_Y | | | | | | | | | | MST_USR_IN_CART_POSE_Z | | | | | | | | | | MST_USR_IN_CART_POSE_A | | | | | | | | | | MST_USR_IN_CART_POSE_B | | | | | | | | | | MST_USR_IN_CART_POSE_C | | | +-------------+-------------------------+-------------------------------------------+--------------------+ | V37!~V42! | MST_USR_OUT_CART_POSE_X | xyzUsrCommand()的1个笛卡尔坐标输出值 | read only | | | | | | | | MST_USR_OUT_CART_POSE_Y | | | | | | | | | | MST_USR_OUT_CART_POSE_Z | | | | | | | | | | MST_USR_OUT_CART_POSE_A | | | | | | | | | | MST_USR_OUT_CART_POSE_B | | | | | | | | | | MST_USR_OUT_CART_POSE_C | | | +-------------+-------------------------+-------------------------------------------+--------------------+ | V43!~V48! | MST_USR_IN_J1 | xyzUsrCommand()的1个关节坐标输入值 | 可写 | | | | | | | | … | | | | | | | | | | MST_USR_IN_J6 | | | +-------------+-------------------------+-------------------------------------------+--------------------+ | V49!~V54! | MST_USR_OUT_J1 | xyzUsrCommand()的1个关节坐标输出值 | read only | | | | | | | | ... | | | | | | | | | | MST_USR_OUT_J6 | | | +-------------+-------------------------+-------------------------------------------+--------------------+ | V55!~V62! | | 内部使用 | x | +-------------+-------------------------+-------------------------------------------+--------------------+ | V63!~V70! | | 内部使用 | x | +-------------+-------------------------+-------------------------------------------+--------------------+ | V71!~V80! | | 系统预留,请勿使用 | x | +-------------+-------------------------+-------------------------------------------+--------------------+ | V301!~V480! | | 轨迹移动中的轨迹点坐标 | x | +-------------+-------------------------+-------------------------------------------+--------------------+ 机械臂主控支持的api定义在 ``USRPROC.INC``。 各指令可能涉及到输入输出参数,在使用时既可以直接用api描述中的变量地址,也可以用上述表格中给出的变量别名。如使用到视觉服务id这个参数,在程序中既可以用 ``V14%`` 表示,也可以用别名 ``MST_VS_ID`` 表示。 .. function:: MasterInit() :noindex: 初始化各变量 .. function:: xyzMasterConnect() :noindex: 连接到server :param ip: ip地址 :type ip: V3% :param port: ip地址 :type port: V4% .. function:: xyzSwitchTask() :noindex: 切换任务 :param task_codename: 任务代号 :type task_codename: V17$ :return: err_code(V31%) .. function:: xyzSwitchTool() :noindex: 切换工具 :param tool_id: 工具id :type tool_id: V13% :return: err_code(V31%) .. function:: xyzCallVisionCommand() :noindex: 呼叫视觉 :param vs_id: 视觉服务id :type vs_id: V14% :param vision_codename: 呼叫视觉的命令代号 :type vision_codename: V18$ :return: err_code(V31%) .. function:: xyzReqGraspPose() :noindex: 请求抓取目标点位 :param vs_id: 视觉服务id :type vs_id: V14% :return: err_code(V31%) :return: token(V32%): 在执行"获取抓取目标点位"时使用到 .. function:: xyzGetGraspPose() :noindex: 获取抓取目标点位 :param token: “请求抓取目标点位”中返回的token :type token: V15% :return: err_code(V31%) :return: pose_num(V33%): 当前可供抓取的点位数量 :return: pipeline_num(V34%): 运动流程编号 :return: register_num(V35%): 抓取序号 :return: grasp_pose: 抓取位姿,xyzabc分别保存在V1!~V6! :return: ints: 自定义的6个int输出值(V36%~V41%),可在Task中自定义含义 .. function:: xyzReqObjPose() :noindex: 请求物体位姿 :param vs_id: 视觉服务id :type vs_id: V14% :return: err_code(V31%) :return: token(V32%): 在执行”获取物体位姿“时使用到 .. function:: xyzGetObjPose() :noindex: 获取抓取目标点位 :param token: “请求物体位姿”中返回的token :type token: V15% :return: err_code(V31%) :return: pose_num(V33%): 当前物体位姿个数 :return: object_name(V20$): 物体名称 :return: object_pose: 物体位姿,xyzabc分别保存在V1!~V6! :return: ints: 自定义的6个int输出值(V36%~V41%),可在Task中自定义含义 .. function:: xyzResetTask() :noindex: 重置任务 :return: err_code(V31%) .. function:: xyzSendCurrentJoints() :noindex: 发送机器人当前关节角 :return: err_code(V31%) .. function:: xyzSendCurrentCartPose() :noindex: 发送机器人当前笛卡尔坐标值 :return: err_code(V31%) .. function:: xyzSendCurrentExtJoints() :noindex: 发送机器人当前扩展轴坐标,该指令暂不支持! :return: err_code(V31%) .. function:: xyzReqPickPlace() :noindex: 请求抓放规划 :param vs_id: 视觉服务id :type vs_id: V14% :return: err_code(V31%) .. function:: xyzGetPickIn() :noindex: 获取取料入框轨迹 :param vs_id: 视觉服务id :type vs_id: V14% :return: err_code(V31%) :return: pose_num(V33%): 轨迹中的点位数量 :return: pipeline_num(V34%): 运动流程编号 :return: register_num(V35%): 抓取序号 :return: 轨迹点: 轨迹点类型保存在V61%~V90%,具体的轨迹坐标保存在V301!~V480!。可以调用xyzExecGeneralTraj()、xyzExecPickInTraj()或者xyzExecPickOutTraj()来执行轨迹。 .. function:: xyzGetPickOut() :noindex: 获取取料出框轨迹 :param vs_id: 视觉服务id :type vs_id: V14% :return: err_code(V31%) :return: pose_num(V33%): 轨迹中的点位数量 :return: pipeline_num(V34%): 运动流程编号 :return: register_num(V35%): 抓取序号 :return: 轨迹点: 轨迹点类型保存在V61%~V90%,具体的轨迹坐标保存在V301!~V480!。可以调用xyzExecGeneralTraj()、xyzExecPickInTraj()或者xyzExecPickOutTraj()来执行轨迹。 .. function:: xyzGetPlaceIn() :noindex: 获取放料入框轨迹 :param vs_id: 视觉服务id :type vs_id: V14% :return: err_code(V31%) :return: pose_num(V33%): 轨迹中的点位数量 :return: pipeline_num(V34%): 运动流程编号 :return: register_num(V35%): 抓取序号 :return: 轨迹点: 轨迹点类型保存在V61%~V90%,具体的轨迹坐标保存在V301!~V480!。可以调用xyzExecGeneralTraj()、xyzExecPickInTraj()或者xyzExecPickOutTraj()来执行轨迹。 .. function:: xyzGetPlaceOut() :noindex: 获取放料出框轨迹 :param vs_id: 视觉服务id :type vs_id: V14% :return: err_code(V31%) :return: pose_num(V33%): 轨迹中的点位数量 :return: pipeline_num(V34%): 运动流程编号 :return: register_num(V35%): 抓取序号 :return: 轨迹点: 轨迹点类型保存在V61%~V90%,具体的轨迹坐标保存在V301!~V480!。可以调用xyzExecGeneralTraj()、xyzExecPickInTraj()或者xyzExecPickOutTraj()来执行轨迹。 .. function:: xyzUpdateTotePose() :noindex: 料箱重定位 :param vs_id: 视觉服务id :type vs_id: V14% :return: err_code(V31%) .. function:: xyzUpdateObjPoseInHand() :noindex: 工件在手上的二次定位 :return: err_code(V31%) :return: place_pose: 放置位姿,xyzabc分别保存在V1!~V6! .. function:: xyzSwitchItem() :noindex: 切换工件 :param vs_id: 视觉服务id :type vs_id: V14% :param item_codename: 工件代号 :type item_codename: V19$ :return: err_code(V31%) .. function:: xyzCalculateGraspPose() :noindex: 计算抓取目标点位,该指令等价于 xyzReqGraspPose() +xyzGetGraspPose() :param vs_id: 视觉服务id :type vs_id: V14% :return: err_code(V31%) :return: pose_num(V33%): 当前可供抓取的点位数量 :return: pipeline_num(V34%): 运动流程编号 :return: register_num(V35%): 抓取序号 :return: grasp_pose: 抓取位姿,xyzabc分别保存在V1!~V6! :return: ints: 自定义的6个int输出值(V36%~V41%),可在Task中自定义含义 .. function:: xyzCalculateObjectPose() :noindex: 计算物体位姿,该指令等价于 xyzReqObjPose() + xyzGetObjPose() :param vs_id: 视觉服务id :type vs_id: V14% :return: err_code(V31%) :return: pose_num(V33%): 当前物体位姿个数 :return: object_name(V20$): 物体名称 :return: object_pose: 物体位姿,xyzabc分别保存在V1!~V6! :return: ints: 自定义的6个int输出值(V36%~V41%),可在Task中自定义含义 .. function:: xyzUsrCommand() :noindex: 用户自定义指令,用于基础指令不支持的情况下,配合任务流图完成用户特定功能。各个参数的含义取决于任务流图中设定的输入输出。 该指令不直接带参数,所有输入输出均直接读写寄存器。 指令输入: - 5个字符串输入:V$[21~25],没用到的值请初始化为空或者"0"。使用时V$[21] + V$[22]的字符串总长度不允许超过180个字节;V$[23] + V$[24] + V$[25]总长度不要超过180个字节! - 10个int输入:V%[21~30],没用到的值请初始化为0。 - 10个real输入:V![11~20],没用到的值请初始化为0。 - 1个关节输入:xyzabc的值分别存在V![31~36],xyz单位是mm,abc得是deg - 1个笛卡尔输入:j1~j6的值分别存储在V![43~48],单位是deg 指令返回: - err_code(V31%) - 5个字符串输出:V$[26~30] - 10个int输出:V%[42~51] - 10个real输出:V![21~30] - 1个关节输出:xyzabc的值分别存在V![37~42],xyz单位是mm,abc得是deg - 1个笛卡尔输出:j1~j6的值分别存储在V![49~54],单位是deg .. function:: CheckErrorCode() :noindex: 检查err_code(V31%)是否有错误,如果有错则停止 .. function:: xyzExecGeneralTraj() :noindex: 用于执行TrajMove中的轨迹 .. function:: xyzExecPickInTraj() :noindex: 用于执行TrajMove中的轨迹,特点是执行最后一个点的时候速度比较慢 .. function:: xyzExecPickOutTraj() :noindex: 用于执行TrajMove中的轨迹,特点是执行第一个点的时候速度比较慢