CS機(jī)器人29999端口的使用
1. 端口介紹
29999 端口支持大量的查詢、設(shè)置及控制命令,允許用戶或者高級開發(fā)人員通過 TcpSocket 發(fā)送字符串命令來對 EliRobot 機(jī)器人平臺進(jìn)行控制。命令默認(rèn)需以“\n”作為結(jié)束輸入標(biāo)識符,因此在發(fā)送命令時(shí)要以“\n”結(jié)尾,否則將被認(rèn)為未完成輸入,不會被響應(yīng)。
2. 連接機(jī)器人
以 socket 助手為例,只需要知道機(jī)器人的 ip,端口填寫 29999。連接成功后機(jī)器人返回如下數(shù)據(jù):
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端口
下圖是加載任務(wù)指令,例如我需要加載wdqw.task任務(wù),如下圖所示,切記需要加換行。

發(fā)送成功后,助手返回如下圖,并且機(jī)器人日志也會顯示加載任務(wù)wdqw


4. 端口指令 (python)
以下是使用python控制29999端口的所有指令(版本v1.0),關(guān)于命令詳解可查看 CS 手冊附件中的 EliRobot Dashboard 教程。技術(shù)資料_機(jī)器人技術(shù)-艾利特機(jī)器人用戶手冊附件
dict = {'上電': 'robotControl -on',
'釋放抱閘': 'brakeRelease',
'關(guān)閉正在顯示的安全模式彈出框并清除報(bào)警':'closeSafetyDialog',
'檢驗(yàn)當(dāng)前連接狀態(tài)':'echo',
'獲取 configuration和task 兩個(gè)命令的用法示例':'help configuration task',
'添加日志信息':'log -a CS系列',
'彈出消息框':'popup -s CS系列',
'關(guān)閉彈出框':'popup -c',
'斷開連接':'quit',
'重啟':'reboot',
'下電':'robotControl -off',
'獲取機(jī)器人模式':'robotMode',
'獲取機(jī)器人類型':'robot -t',
'關(guān)機(jī)':'shutdown',
'獲取機(jī)器人當(dāng)前狀態(tài)信息':'status',
'解除機(jī)器人保護(hù)性停止':'unlockProtectiveStop',
'獲取popup命令的用法示例':'usage popup',
'獲取版本':'version',
'help configuration task':'help configuration task' ,
'暫停':'pause',
'運(yùn)行當(dāng)前任務(wù)':'play',
'安全狀態(tài)':'safety -s',
'安全模式':'safety -m',
'重啟安全系統(tǒng)':'safety -r',
'獲取速度':'speed',
'設(shè)置速度 50%':'speed -v 50',
'停止':'stop',
'加載任務(wù)':'task -p 1.task',
'獲取任務(wù)狀態(tài)':'task -s',
'獲取任務(wù)是否在運(yùn)行':'task -r',
'獲取任務(wù)保存狀態(tài)':'task -ss',
'加載配置文件':'configuration -p cs1.configuration',
'查看當(dāng)前配置文件修改狀態(tài)':'configuration -s'
5. Python 連接示例
import socket import time
while True:
sk = socket.socket()#建立socket通訊
sk.connect(('機(jī)器人ip',29999))#連接ip和端口
send_data = input('>>>') # 輸入命令
send_data = str(send_data + '\n') # 命令轉(zhuǎn)字符串加換行
sk.sendall(bytes(send_data, "utf-8"))#發(fā)送給機(jī)器人
time.sleep(0.2)
recvData = sk.recv ( 4096 )#接受機(jī)器人返回信息
recvData =str(recvData)
print ( recvData )#打印返回信息
sk.close()#通訊關(guān)閉
6. 注意事項(xiàng)
6.1 時(shí)序依賴命令功能結(jié)果異常
dashboard shell 命令服務(wù)器在接收到命令請求進(jìn)行相關(guān)處理后,調(diào)用相關(guān)資源運(yùn)行命令對應(yīng)的功能,但是對應(yīng)的功能執(zhí)行通常不是瞬時(shí)執(zhí)行完畢的,而 dashboard shell 命令服務(wù)器只負(fù)責(zé)執(zhí)行對應(yīng)的功能,不負(fù)責(zé)等待功能執(zhí)行完畢,也不對執(zhí)行結(jié)果負(fù)責(zé),因此當(dāng)時(shí)命令請求間隔時(shí)間較短同時(shí)又有時(shí)序上的依賴,就會出現(xiàn)功能執(zhí)行結(jié)果異常。
如 popup -s 是用于在 EliRobot 上彈出一個(gè)消息框,而 popup -c 則用于關(guān)閉最近由 popup 命令彈出的消息框,若在一個(gè)命令請求中組合使用多個(gè)命令請求(如下圖所示),其結(jié)果是難以保證是預(yù)期的結(jié)果。因?yàn)榻M合命令的預(yù)期是對應(yīng)功能執(zhí)行完成的先后順序同命令請求中的先后順序一致,然后實(shí)際中不同命令的功能大小,執(zhí)行時(shí)長不同,因此功能執(zhí)行完成的先后順序同命令請求中的先后順序不是必然相同的。
因此不建議有時(shí)序依賴的多個(gè)命令請求寫在一個(gè)命令請求中。

6.2 狀態(tài)依賴命令功能結(jié)果異常
有些命令有狀態(tài)依賴,即后者正常執(zhí)行需要前者命令對應(yīng)的功能正常執(zhí)行后的結(jié)果如機(jī)器人釋放抱閘需要依賴機(jī)器人上電狀態(tài),未上電不能釋放抱閘。這類有狀態(tài)依賴的命令若被寫入到一個(gè)命令請求中,也會因?yàn)樗蕾嚨臓顟B(tài)未能及時(shí)被滿足從而導(dǎo)致命令執(zhí)行失敗。 如下圖所示將機(jī)器人下電、上電及釋放抱閘命令請求寫在一個(gè)命令請求中,期望dashboard shell 服務(wù)器能夠一次給機(jī)器人下電、上電及釋放抱閘,然后實(shí)則三個(gè)命令請求近乎同時(shí)執(zhí)行,因此釋放抱閘所依賴的機(jī)器人上電狀態(tài)時(shí)不能得到滿足的,因而導(dǎo)致執(zhí)行結(jié)果并不能達(dá)到期望結(jié)果。
