202506 海康机器人与立库
一个两层楼多个立库的AGV项目。 使用海康4.2.6版本。
现场由MES发送入库任务。 由立库WMS下发出库任务。由立库Wcs来做升降平台的安全校验。
前期准备
-
安装Postman
-
禁用 SSL 验证
打开 Postman。
点击右上角的 Settings(设置) 图标。
在 General(常规) 选项卡中,找到 SSL certificate verification(SSL 证书验证)。
将其切换为 Off(关闭)。
-
注册海康rcs中白名单
调用海康RCS接口的ip地址需要录入系统中白名单。
打开Rcs-系统设置-应用注册
在左上角有一个IP白名单按钮。点击按钮之后将请求ip添加进去。
如果是postman测试,则添加本机ip,如果是wcs调用,则添加wcs服务器的ip地址。

-
测试
将以下curl 格式的导入到Postman中。 其中服务ip替换成你的。
curl --location 'https://10.110.10.13/rcs/rtas/api/robot/controller/task/submit' \--header 'X-lr-request-id: 1' \--header 'Content-Type: application/json' \--data '{"taskType":"PF-LMR-COMMON","targetRoute": [{"type": "SITE","code": "0130230AA0137740","seq": 0},{"type": "SITE","code": "0126079AA0151135","seq": 1}]}'以上的是默认的通用搬运流程, 默认会搬运一个货架,在调用之前请先维护号货架信息。
正常的返回结果。
{"code": "SUCCESS","message": "成功","data": {"robotTaskCode": "1989CFFA34513G6"},"errorCode": "0","success": false}
盲举测试
现场贴码工作还没有进行,需要盲举测试搬运货物。
-
创建货架结构
路径:搬运对象-货架结构管理-添加货架-开启盲举
-
创建载具类型
路径:搬运对象-载具类型管理-添加载具类型。
比如创建编号为“1”的载具类型,他的货架结构需要指定刚才设定的盲举货架结构
-
测试任务
将以下curl 格式的导入到Postman中。 其中服务ip替换成你的。
任务类型:TEST-AMR-BLIND 为 复制的 PF-AMR-BLIND-LIFT-CARRIER 模板,
extra:该参数用来指定盲举载具类型,就是刚才我们添加的“1”.
curl --location 'https://10.110.10.13/rcs/rtas/api/robot/controller/task/submit' \--header 'X-lr-request-id: 1' \--header 'Content-Type: application/json' \--data '{"taskType":"TEST-AMR-BLIND","targetRoute": [{"type": "SITE","code": "0130230AA0137740","seq": 0},{"type": "SITE","code": "0126079AA0151135","seq": 1}],"extra":{"carrierInfo": [{"carrierType":"1"}]}}'正常的返回结果。
{"code": "SUCCESS","message": "成功","data": {"robotTaskCode": "1989CFFA34513G6"},"errorCode": "0","success": false}
业务流程

A-B
A-B 流程是盲举,从2楼到1楼流程。
这个流程的要点是要将盲顶的流程替换成其中的默认的搬运流程(PF-LMR-COMMON)。
任务类型:A-B-1 复制标准的 PF-LMR-COMMON 流程。
curl --location 'https://10.110.10.13/rcs/rtas/api/robot/controller/task/submit' \
--header 'X-lr-request-id: 1' \
--header 'Content-Type: application/json' \
--data '{
"taskType":"A-B-1",
"targetRoute": [
{
"type": "SITE",
"code": "0130230AA0137740",
"seq": 0
},
{
"type": "SITE",
"code": "0126079AA0151135",
"seq": 1
}
]
}'
C-D
C-D的任务是在一楼搬运的,接口带入托盘参数,起点校验。
C-D-1
C-D-1 复制标准的 PF-LMR-INIT-CARRIER 流程名称。修改一些配置如下:
目标点获取:目标路径
目标点值:${routeInfoSdk.findPreRoute('SITE',submitParam.targetRoute[1].code,'BACK_OFF')}
放货申请:是
放货申请时机:最后一段路线
放货申请目标点:${submitParam.targetRoute[1].code}
接口参数中
extra.carrierInfo[0].carrierCode: 为现场的货架编号。
curl --location 'https://10.110.10.13/rcs/rtas/api/robot/controller/task/submit' \
--header 'X-lr-request-id: 1' \
--header 'Content-Type: application/json' \
--data '{
"taskType":"C-D-1",
"targetRoute": [
{
"type": "SITE",
"code": "0130230AA0137740",
"seq": 0
},
{
"type": "SITE",
"code": "0126079AA0151135",
"seq": 1
}
],
"extra":{
"carrierInfo": [
{
"carrierCode":"B2174"
}
]
}
}'
C-D-2
任务流程是类似C-D-1得流程,终点不进行设备交互。所以将C-D-1得终点放货申请关闭。
A-B-C-D组合
该任务流程是上面两个流程的合并,一个任务中传入四个站点。
分为 A-B-C-D-1 和 A-B-C-D-2 两个任务。
A-B-C-D-1 任务是搬运一个指定的C点托盘编号。 然后入库任务。
A-B-C-D-2 任务一个起点探测,然后入地面库
参数如下:
curl --location 'https://10.110.10.13/rcs/rtas/api/robot/controller/task/submit' \
--header 'X-lr-request-id: 1' \
--header 'Content-Type: application/json' \
--data '{
"taskType":"A-B-C-D-1",
"targetRoute": [
{
"type": "SITE",
"code": "0130230AA0137740",
"seq": 0
},
{
"type": "SITE",
"code": "0126079AA0151135",
"seq": 1
},
{
"type": "SITE",
"code": "0130230AA0137740",
"seq": 2
},
{
"type": "SITE",
"code": "0126079AA0151135",
"seq": 3
}
],
"extra":{
"carrierInfo": [
{
"carrierCode":"B2174"
}
]
}
}'
注册WMS回调
路径:系统设置-系统配置-应用注册
添加一个WMS回调地址,一般选择http格式回调。
相对url:填写/
端口号:填写WMS的端口号

记得将WMS服务IP添加到白名单中。
回调格式
可以参考文档中。 2.2.1 任务执行过程回馈接口
当任务指定到指定阶段会按照以下格式回调注册的应用。
重点关注以下参数:
- robotTaskCode:任务id
- method:流程中注册的method
POST /api/robot/reporter/task HTTP/1.1
Host: 10.10.10.10:1010
Authorization:
nonce="wab1tkh",method="HMAC-SHA256",timestamp="2021-01-01T00:0
0:00+08:00"
X-lr-appkey: 542a*****8b15
X-lr-version: v1.0
X-lr-trace-id: 605****8a0b
X-lr-request-id: 393****a6c1
Content-Type: application/json;charset=UTF-8
{
"robotTaskCode": "27e****ba08",
"singleRobotCode": "f81***653",
"extra": {
"async": "0",
"values": {
"mapCode": "RR",
"slotCategory": "SITE",
"slotCode": "0146975RR0088902",
"slotName": "0146975RR0088902",
"x": 146975.0,
"y": 88902.0,
"method": "notifyPodArr",
"carrierCategory": "POD",
"carrierType": "R7",
"carrierCode": "99013",
"amrCategory": "LMR",
"amrType": "5",
"amrCode": "8801",
"carrierName": "99013",
"carrierDir": "-90.0",
"layerNo": 1
}
}
}
任务编排中配置
在搬运任务中,扩展属性开启回调配置。
通知的触发是在任务完成时。
勾选我们注册的WMS应用。
方法名可以写如一个方法end。这个method时回调时RCS返回的方法名。
通知路径:你注册回调的具体url地址。 具体url是注册的ip地址+端口号+/+通知路径
我截图的示例最终拼接地址为:http:10.15.204.191:8000/api/v4_2/robot/report/task

A-B起点申请WCS
A-B 任务起点要向WCS申请立库允许进入。A-B 盲举流程配置WCS申请。
注册WCS回调
和WMS回调注册一致。
路径:系统设置-系统配置-应用注册
添加一个WCS回调地址,一般选择http格式回调。
相对url:填写/
端口号:填写WCS的端口号
配置任务
-
修改搬运任务的起点目标点获取方式为:目标路径。
参数:
${routeInfoSdk.findPreRoute('SITE',submitParam.targetRoute[0].code,'BACK_OFF')}(起点使用配置BACK_OFF的站点,也就是立库的前一个点)目标站点的获取方式还是指定编号:
${submitParam.targetRoute[1].code}。 -
取货向外设申请:开启
-
取货申请时机:提前最后一段路径。
-
取货申请目标点:
${submitParam.targetRoute[0].code}(允许之后从BACK_OFF再到目标点) -
点击搬运任务进去,取货前申请流程
-
外设控制-业务参数-第三方外设 :是
-
目标应用:填写我们刚才注册的。
-
申请路径:填写你用来接收RCS回调的地址。 我这边使用 "api/v4_2/robot/reporter/eqpt" 。 合起来RCS回请求 http://10.110.20.30:8000/api/v4_2/robot/reporter/eqpt
-

当任务运行的时候RCS会发送如下数据给配置地址:
eqptCode:外设编号 eqptName:外设名称 taskCode:该外设申请的任务,该任务后续需要回调时带入。 method:外设申请
{"eqptCode":"43","eqptName":"43","taskCode":"198E1AADF7C2CC2","subTaskCode":"198E1AADF902CC3_ECS","method":"APPLY_TO_AGV","carrierInfo":[],"extra":{"async":"0"}}
外设允许
调用RCS-WCS通知接口
eqptCode:外设编号 taskCode:刚才回调接口获取的任务id actionStatus:5为允许取货,6允许放货
curl --location 'https://10.110.10.13/rcs/rtas/spi/wcs/robot/eqpt/notify' \
--header 'X-lr-request-id: 2' \
--header 'Content-Type: application/json' \
--data '{
"eqptCode":"43",
"taskCode":"198E1AADF7C2CC2",
"actionStatus":"5"
}'