CS机器人29999端口的使用
1. 端口介绍
29999 端口支持大量的查询、设置及控制命令,允许用户或者高级开发人员通过 TcpSocket 发送字符串命令来对 EliRobot 机器人平台进行控制。命令默认需以“\n”作为结束输入标识符,因此在发送命令时要以“\n”结尾,否则将被认为未完成输入,不会被响应。
2. 连接机器人
以 socket 助手为例,只需要知道机器人的 ip,端口填写 29999。连接成功后机器人返回如下数据:
EliRobot dashboard shell, version 2.5.0.0.
These shell commands are defined internally. Type `help' to see this list.
Type `help name' to find out more about the function `name'.
3. Socket助手使用29999端口
下图是加载任务指令,例如我需要加载wdqw.task任务,如下图所示,切记需要加换行。
发送成功后,助手返回如下图,并且机器人日志也会显示加载任务wdqw
4. 端口指令 (python)
以下是使用python控制29999端口的所有指令(版本v1.0),关于命令详解可查看 CS 手册附件中的 EliRobot Dashboard 教程。技术资料_机器人技术-艾利特机器人用户手册附件
dict = {'上电': 'robotControl -on',
'释放抱闸': 'brakeRelease',
'关闭正在显示的安全模式弹出框并清除报警':'closeSafetyDialog',
'检验当前连接状态':'echo',
'获取 configuration和task 两个命令的用法示例':'help configuration task',
'添加日志信息':'log -a CS系列',
'弹出消息框':'popup -s CS系列',
'关闭弹出框':'popup -c',
'断开连接':'quit',
'重启':'reboot',
'下电':'robotControl -off',
'获取机器人模式':'robotMode',
'获取机器人类型':'robot -t',
'关机':'shutdown',
'获取机器人当前状态信息':'status',
'解除机器人保护性停止':'unlockProtectiveStop',
'获取popup命令的用法示例':'usage popup',
'获取版本':'version',
'help configuration task':'help configuration task' ,
'暂停':'pause',
'运行当前任务':'play',
'安全状态':'safety -s',
'安全模式':'safety -m',
'重启安全系统':'safety -r',
'获取速度':'speed',
'设置速度 50%':'speed -v 50',
'停止':'stop',
'加载任务':'task -p 1.task',
'获取任务状态':'task -s',
'获取任务是否在运行':'task -r',
'获取任务保存状态':'task -ss',
'加载配置文件':'configuration -p cs1.configuration',
'查看当前配置文件修改状态':'configuration -s'
5. Python 连接示例
import socket import time
while True:
sk = socket.socket()#建立socket通讯
sk.connect(('机器人ip',29999))#连接ip和端口
send_data = input('>>>') # 输入命令
send_data = str(send_data + '\n') # 命令转字符串加换行
sk.sendall(bytes(send_data, "utf-8"))#发送给机器人
time.sleep(0.2)
recvData = sk.recv ( 4096 )#接受机器人返回信息
recvData =str(recvData)
print ( recvData )#打印返回信息
sk.close()#通讯关闭
6. 注意事项
6.1 时序依赖命令功能结果异常
dashboard shell 命令服务器在接收到命令请求进行相关处理后,调用相关资源运行命令对应的功能,但是对应的功能执行通常不是瞬时执行完毕的,而 dashboard shell 命令服务器只负责执行对应的功能,不负责等待功能执行完毕,也不对执行结果负责,因此当时命令请求间隔时间较短同时又有时序上的依赖,就会出现功能执行结果异常。
如 popup -s 是用于在 EliRobot 上弹出一个消息框,而 popup -c 则用于关闭最近由 popup 命令弹出的消息框,若在一个命令请求中组合使用多个命令请求(如下图所示),其结果是难以保证是预期的结果。因为组合命令的预期是对应功能执行完成的先后顺序同命令请求中的先后顺序一致,然后实际中不同命令的功能大小,执行时长不同,因此功能执行完成的先后顺序同命令请求中的先后顺序不是必然相同的。
因此不建议有时序依赖的多个命令请求写在一个命令请求中。
6.2 状态依赖命令功能结果异常
有些命令有状态依赖,即后者正常执行需要前者命令对应的功能正常执行后的结果如机器人释放抱闸需要依赖机器人上电状态,未上电不能释放抱闸。这类有状态依赖的命令若被写入到一个命令请求中,也会因为所依赖的状态未能及时被满足从而导致命令执行失败。 如下图所示将机器人下电、上电及释放抱闸命令请求写在一个命令请求中,期望dashboard shell 服务器能够一次给机器人下电、上电及释放抱闸,然后实则三个命令请求近乎同时执行,因此释放抱闸所依赖的机器人上电状态时不能得到满足的,因而导致执行结果并不能达到期望结果。