请求消息
从机器人发送到DaoAI Vision Pilot的指令消息长度为48个字节,由以下字段组成:
字段 |
类型 |
长度 |
描述 |
Position/位置字段 |
int32[3] |
12 bytes |
机器人法兰位置 (XYZ,以毫米为单位) 用右手机器人底座表示。每个字段都必须乘以MULT系数. |
Orientation/旋转字段 |
int32[4] |
16 bytes |
机器人法兰方向用右手机器人底座框架表示。方向编码和单位取决于所选的方向约定。每个字段都必须乘以 MULT系数. |
command/指令字段 |
int32[4] |
16 bytes |
请求指令 |
payload/载荷字段 |
int32[2] |
8 bytes |
可选的有效载荷字段。 |
meta |
int32[2] |
8 bytes |
meta_1,即消息的倒数第二个字段,应发送机器人的类型,meta_2,即消息的最后一个字段,应发送机器人协议版本。详细信息请参阅本文Meta消息说明。 |
所有字段都是必填的,并且必须为每个请求设置合理的值。有效载荷字段只对某写流程和指令有效。无效的字段请赋予零。
指令字段command可以控制DaoAI Vision Pilot执行不同的流程。下面将更详细地解释可能的指令及其对应的回应消息。
回应消息
除姿势更新请求外,所有请求指令都使用64字节长的回应消息进行应答,其结构如下:
字段 |
类型 |
长度 |
描述 |
Position/位置字段 |
int32[3] |
12 bytes |
物体位置或拾取点偏移平移(XYZ,单位为毫米),具体取决于回应状态。另请参阅更详细的指令说明。每个值都必须除以MULT。 |
Orientation/旋转字段 |
int32[4] |
16 bytes |
物体方向或拾取点偏移旋转,具体取决于回应状态。另请参阅更详细的指令说明。编码和单位取决于所选的定向约定,并且必须用MULT除以。 |
payload/载荷字段 |
int32[6] |
24 bytes |
可选的有效载荷字段。编码和单位取决于所选的定向约定,并且必须用MULT除以。 |
status/状态字段 |
int32 |
4 bytes |
定义的状态值之一。 |
meta |
int32[2] |
8 bytes |
meta_1,即消息的倒数第二个字段,应发送机器人的类型,meta_2,即消息的最后一个字段,应发送机器人协议版本。详细信息请参阅本文Meta消息说明。 |
可用指令(Command)和状态(status)
以下是 DaoAI Vision Pilot 使用的指令,和该指令所等待的状态回复详情。
警告
在 DaoAI Vision Pilot 通讯协议中,如果返回的状态并不是协议中该指令期望的回复,系统会默认回复不正确,停止流程。
机器人发送指令常量
RC_DAOAI_NO_COMMAND = -1
# Manual Calibration/ Guidance Calibration
RC_START_MANUAL_CALIBRATION = 1
RC_STOP_MANUAL_CALIBRATION = 2
RC_MANUAL_ACCUMULATE_POSE = 6
# Auto Calibration
RC_START_AUTO_CALIBRATION = 4
RC_AUTO_ACCUMULATE_POSE = 7
RC_GUIDANCE_CALIBRATION = 10
RC_START_2D_AUTO_CALIBRATION = 11
RC_AUTO_ACCUMULATE_2D_POSE = 12
# Picking
RC_DAOAI_CAPTURE_AND_PROCESS_ASYNC = 19
RC_DAOAI_CAPTURE_AND_PROCESS = 20
RC_DAOAI_PICK_POSE = 21
#Teach
RC_SEND_POSE = 30
#Check empty box
RC_CHECK_EMPTY_BOX = 40
#Check robot driftting
RC_PRECISION_CHECK = 50
#Camera Config
RC_SWITCH_CONFIG = 69
DaoAI Vision Pilot回应常量
DAOAI_UNKNOWN_COMMAND = -1
#DaoAI Vision Pilot抓取校准流程
DAOAI_OBJECTS_FOUND = 2
DAOAI_NO_OBJECT_FOUND = 3
DAOAI_NO_COLLISION_FREE_POSE = 4
DAOAI_CAPTURE_SUCCESS = 5
DAOAI_DROP_OFF_POSE = 6
DAOAI_CAPTURE_FAIL = 9
#DaoAI Vision Pilot处于手动校准流程
DAOAI_MODE_CALIBRATION = 10
#DaoAI Vision Pilot处于自动校准流程
DAOAI_MODE_AUTO_CALIBRATION = 11
DAOAI_MODE_2D_AUTO_CALIBRATION = 14
#终止指令
DAOAI_DONE_CALIBRATION = 33
DAOAI_DONE_2D_AUTO_CALIBRATION = 34
#check empty box
DAOAI_BOX_EMPTY = 41
DAOAI_BOX_NOT_EMPTY = 42
#Robot drift check
DAOAI_PRECISION_CHECK_SUCCESS = 51
DAOAI_PRECISION_CHECK_FAIL = 52
#相机配置更换
DAOAI_SWITCH_CONFIG_SUCCESS = 66
DAOAI_SWITCH_CONFIG_FAIL = 67
RC_NO_COMMAND = -1 (机器人姿势更新)
将当前的机器人法兰姿势发送给DaoAI Vision Pilot。DaoAI Vision Pilot使用此信息来确定机器人是否仍处于连接状态,以及更新DaoAI Vision Pilot网络界面中的3D视图。
RC_START_MANUAL_CALIBRATION = 1
发送校准模式开始指令到视觉,此指令属于机器人和DaoAI Vision Pilot的握手。DaoAI Vision Pilot可以处于CALIBRATION 模式
当视觉发送的指令并非以下的指令时,视觉所在的流程与机器人不符,机器人需重新发送 RC_START_MANUAL_CALIBRATION = 1 ,并重新进行此握手。
回应
字段
模式
描述
状态
DAOAI_MODE_CALIBRATION= 10
DaoAI Vision Pilot处于手动、引导校准流程
RC_STOP_MANUAL_CALIBRATION = 2
触发DaoAI Vision Pilot停止校准板图像采集和累积流程。请注意,发送此指令时,DaoAI Vision Pilot必须处于校准模式。
回应
字段
模式
描述
状态
DAOAI_DONE_CALIBRATION = 33
DaoAI Vision Pilot终止校准模式
RC_START_AUTO_CALIBRATION = 4
发送校准模式开始指令到视觉,此指令属于机器人和DaoAI Vision Pilot的握手。DaoAI Vision Pilot可以处于自动校准模式。
当视觉发送的指令并非以下的指令时,视觉所在的流程与机器人不符,机器人需重新发送 此指令进行握手。
回应
字段
模式
描述
状态
DAOAI_MODE_AUTO_CALIBRATION = 11
DaoAI Vision Pilot处于自动校准图像采集和累计流程。
RC_MANUAL_ACCUMULATE_POSE = 6
请求DaoAI Vision Pilot进入图像采集和累计流程,进行校准。若视觉发送的指令非以下指令,则机器人与视觉处于不同的模式/流程,机器人将发送 RC_START_MANUAL_CALIBRATION = 1(手动校准),并重新回到校准流程的握手状态。
回应
字段
模式
描述
状态
DAOAI_MODE_CALIBRATION = 10
DaoAI Vision Pilot处于手动校准模式
RC_AUTO_ACCUMULATE_POSE = 7
请求DaoAI Vision Pilot进入图像采集和累计流程,进行校准。若视觉发送的指令非以下指令,则机器人与视觉处于不同的模式/流程,机器人将发送 RC_START_AUTO_CALIBRATION = 4(自动校准),并重新回到校准流程的握手状态。
回应
字段
模式
描述
状态
DAOAI_MODE_AUTO_CALIBRATION = 11
DaoAI Vision Pilot处于自动校准图像采集和累计流程。
状态
DAOAI_DONE_AUTO_CALIBRATION = 33
DaoAI Vision Pilot以获得足够多的校准点位,回馈机器人停止校准
RC_GUIDANCE_CALIBRATION = 10
机器人发送此指令到视觉用以发送引导校准的位姿,视觉会接收位姿信息,不会给予回应。
RC_START_2D_AUTO_CALIBRATION = 11
发送2D校准模式开始指令到视觉,此指令属于机器人和DaoAI Vision Pilot的握手。DaoAI Vision Pilot可以处于自动校准模式。
当视觉发送的指令并非以下的指令时,视觉所在的流程与机器人不符,机器人需重新发送 此指令进行握手。
回应
字段
模式
描述
状态
DAOAI_MODE_2D_AUTO_CALIBRATION = 14
DaoAI Vision Pilot处于2D自动校准模式,并发送下一个校准点位至机器人,使机器人移动到该点位
状态
DAOAI_DONE_2D_AUTO_CALIBRATION = 34
DaoAI Vision Pilot以获得足够多的校准点位,回馈机器人停止校准
RC_AUTO_ACCUMULATE_2D_POSE = 12
请求DaoAI Vision Pilot进入图像采集和累计流程,进行校准。若视觉发送的指令非以下指令,则机器人与视觉处于不同的模式/流程,机器人将发送 RC_START_2D_AUTO_CALIBRATION = 11(2D自动校准),并重新回到校准流程的握手状态。
回应
字段
模式
描述
状态
DAOAI_MODE_2D_AUTO_CALIBRATION = 14
DaoAI Vision Pilot处于2D自动校准模式,并发送下一个校准点位至机器人,使机器人移动到该点位
状态
DAOAI_DONE_2D_AUTO_CALIBRATION = 34
DaoAI Vision Pilot以获得足够多的校准点位,回馈机器人停止校准
RC_DAOAI_CAPTURE_AND_PROCESS_ASYNC = 19
请求DaoAI Vision Pilot进行探测流程,让视觉拍照并识别流程,不会阻塞机器人。此消息必须含有机器人目前的位姿信息。
回应
字段
模式
描述
状态
DAOAI_DETECTION_MODE = 5
DaoAI Vision Pilot回馈握手信息,认知目前处于拍照并识别流程。
RC_DAOAI_CAPTURE_AND_PROCESS = 20
请求DaoAI Vision Pilot进行探测流程,让视觉拍照并识别流程,会阻塞机器人至拍照结束。此消息必须含有机器人目前的位姿信息。
回应
字段
模式
描述
状态
DAOAI_DETECTION_MODE = 5
DaoAI Vision Pilot回馈握手信息,认知目前处于拍照并识别流程。
RC_DAOAI_PICK_POSE = 21
请求DaoAI Vision Pilot发送物体位姿;此指令只出现在 DAOAI_DETECTION = 5 之后。当视觉探测并发送了位姿给机器人后,机器人进行抓取,然后重复回复视觉 RC_DAOAI_PICK_POSE = 21 请求下一个物体的位姿。
回应
字段
模式
描述
状态
DAOAI_OBJECTS_FOUND = 2
DaoAI Vision Pilot探测到物体并把物体抓取位姿回复到机器人,机器人将根据位姿进行抓取。
状态
DAOAI_NO_OBJECT_FOUND = 3
DaoAI Vision Pilot探测不到物体回复到机器人,机器人将根据当前脚本进入下一阶段。
状态
DAOAI_NO_COLLISION_FREE_POSE= 4
DaoAI Vision Pilot回馈错误信息,避碰模块无法找到任何安全位姿,机器人将根据脚本进入不同的阶段。
状态
DAOAI_CAPTURE_FAIL = 9
DaoAI Vision Pilot回馈拍照失败信息,机器人将根据脚本进入不同的阶段。
RC_DAOAI_DROP_POSE = 22
请求视觉认知系统发送物体位姿;此指令只出现在 DAOAI_DETECTION = 5 之后。当视觉探测并发送了位姿给机器人后,机器人进行抓取,然后回复视觉 RC_DAOAI_GET_NEXT_OBJECT = 21 请求下一个物体的位姿。
回应
字段
模式
描述
状态
DAOAI_OBJECTS_FOUND = 2
DaoAI Vision Pilot探测到物体并把物体抓取位姿回复到机器人,机器人将根据位姿进行抓取。
状态
DAOAI_NO_OBJECT_FOUND = 3
DaoAI Vision Pilot探测不到物体回复到机器人,机器人将根据当前脚本进入下一阶段。
状态
DAOAI_NO_COLLISION_FREE_POSE= 4
DaoAI Vision Pilot回馈错误信息,避碰模块无法找到任何安全位姿,机器人将根据脚本进入不同的阶段。
状态
DAOAI_CAPTURE_FAIL = 9
DaoAI Vision Pilot回馈拍照失败信息,机器人将根据脚本进入不同的阶段。
RC_SEND_POSE = 30
机器人发送此指令到视觉用以发送示教位姿,视觉会接收位姿信息,不会给予回应。
RC_CHECK_EMPTY_BOX = 40
请求DaoAI Vision Pilot检查箱体(ROI)区域是否为空,通常在收到 DAOAI_NO_OBJECT_FOUND = 3 之后使用。使用时 要使用payload_1 指定要进行检测的task id, 或者使用daoai_switch_task(id)函数来指定。
如果箱体不为空,但是无法检测到物体,那么就可以考虑使用机器人去晃动箱体再尝试检测。
回应
字段
模式
描述
状态
DAOAI_BOX_EMPTY = 41
视觉检测ROI区域为空,判断条件为 ROI区域<2000个点 和 检测流程没有检测到物体.
状态
DAOAI_BOX_NOT_EMPTY= 42
视觉检测ROI区域仍有存在物体,判断条件为 ROI区域>2000个点 或 检测流程有检测到至少一个物体.
RC_PRECISION_CHECK= 50
请求视觉运行precision check。使用时 要使用payload_1 指定已创建的precision check task id, 或者使用daoai_switch_task(id)函数来指定。
回应
字段
模式
描述
状态
DAOAI_PRECISION_CHECK_SUCCESS= 51
检测成功,返回值的payload_1为计算出的误差。
状态
DAOAI_PRECISION_CHECK_FAIL= 52
检测失败,通常是因为无法检测到精度验证图形码
RC_SWITCH_CONFIG = 69
请求DaoAI Vision Pilot切换相机配置;此指令发送到视觉端时,视觉会根据消息中的载荷字段1(payload_1)的整数,切换相机配置。此相机配置会在视觉端上设置好,根据整数切换用户预设的配置。如:payload_1 = 1, 切换 config_1;payload_1 = 3, 切换 config_3等。
回应
字段
模式
描述
状态
DAOAI_SWITCH_CONFIG_SUCCESS = 66
切换相机配置成功
状态
DAOAI_SWITCH_CONFIG_FAIL = 67
切换相机配置失败
载荷字段 Payload
载荷字段在抓和放时,所表示的意思并不相同:payload_1会被用作基本的抓放信息交换,抓的时候payload_1 代表的是剩余物体数量:如在场景中探测到了5个物体,第一个位姿发送时payload_1 = 5;放的时候payload_1 代表的是物体的种类(在没有分类时此payload可被忽略或者用于其他用途):如在场景中会出现5类物体,此次抓取到的是第四类物体 payload_1 = 4。
警告
在抓取时:
DaoAI Vision Pilot 给机器人发送的payload_1:代表 物体的剩余数量。
机器人给 DaoAI Vision Pilot 发送的payload_1:代表 执行task的id。
例:DaoAI Vision Pilot 有2个task; task_1 的id 为0,task_2的id为1。想要执行task_1时,机器人的payload_1就应该为0。 想要执行task_2时,机器人的payload_1就应该为1。
其他的payload可根据用户具体案例自由使用。
消息元数据/Message metadata
为保证机器人和DaoAI Vision Pilot之间对数据的正确解读,以下元数据始终与请求和回应消息一起发送:
字段 |
值/描述 |
meta_1 |
|
meta_2 |
meta_2,即最后一个字段,代表机器人的版本和DaoAI Vision Pilot之间的协议版本号. 目前的版本号 = 2 |