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 服務器能夠一次給機器人下電、上電及釋放抱閘,然后實則三個命令請求近乎同時執行,因此釋放抱閘所依賴的機器人上電狀態時不能得到滿足的,因而導致執行結果并不能達到期望結果。
