CS機器人二次開發(fā)端口總結
1. 簡介
艾利特CS機器人為方便用戶二次開發(fā)而開放了一些機器人控制器端口,包括29999、30001、30004、30011、30020、40011等。本質都是TCP/IP協(xié)議,29999連接上位機(示教器界面),30001、30004、30011、30020、40011主要連接A9,原理都是通過socket通訊發(fā)送指定字符串或其它指定格式控制機器人或接收特定的格式數據進行解析,目前沒有動態(tài)鏈接庫連接對應的控制器端口,各通訊接口相互獨立,可以同時使用
2. 操作流程
2.0. 端口簡介

2.1. 端口選擇
● 29999(Dashboard)端口,可用于機器人的上下電操作、切換機器人的任務或配置、運行,停止,暫停程序等操作。
● 30001端口,可用于獲取機器人的各種狀態(tài)及數據,機器人會以10HZ的頻率向30001端口發(fā)送機器人的狀態(tài)數據,還可以往30001端口發(fā)送腳本命令,運動指令,控制機器人運動等。
● 30004(RTSI)端口,全稱為實時數據交互,可用于獲取機器人的各種狀態(tài)及數據,以及設置輸入訂閱(改變一下IO變量的值,調整速度滑塊等)與30001端口不同的是可按指定頻率訂閱用戶指定的數據返回,在返回速率方面最快可達250HZ。
● 30020(解釋器)端口,可用于實現一些動態(tài)的腳本排隊運行,比如用戶在自己的上位機程序,實時計算出一些運行點位,用戶在程序運行的過程中,將一些實時計算的腳本排隊到當前運行的任務后。
● 40011(明文狀態(tài)請求)端口,可用于獲取機器人的各種狀態(tài)及數據或者設置機器人相應的參數(運動指令和耗時指令除外),與其他獲取數據端口相比,屬于一問一答式數據回復類型,上位機發(fā)送對應的請求,機器人返回對應的數據。
● 端口詳細使用說明可查看對應的端口使用手冊技術資料_機器人技術-艾利特機器人。
2.2. 端口介紹及作用
2.2.1 29999端口介紹及作用
介紹:
29999端口描述的是 EliRobot 機器人平臺開放的 dashboard shell,允許用戶或開發(fā)者通過 TcpSocket 連接 EliRobot 的29999端口并對其進行訪問控制,其中讓包括機器人的上下電操作、切換機器人的任務或配置、運行,停止,暫停程序等操作。
作用:
EliRobot dashboard shell 提供了大量的命令,以便與 EliRobot 機器人平臺進行交互,創(chuàng)建 TcpSocket 客戶端并連接 dashboard shell 后,發(fā)送對應格式的字符至 EliRobot,即可控制機器人做出相應的命令 。(端口詳細使用教程請查看EliRobot Dashboard 手冊或29999端口使用文檔技術資料_機器人技術-艾利特機器人)
2.2.2 30001端口介紹及作用
介紹:
30001端口描述的是 EliRobot 機器人平臺開放的數據獲取端口,控制器會提供機器人的數據狀態(tài),例如關節(jié)角、溫度等等,這些數據都會通過 socket 打包以10HZ的頻率發(fā)送至連接的客戶端。
除了獲取機器人的狀態(tài)信息外,還可以通過30001端口發(fā)送腳本來控制機器人的各種操作。
作用:
EliRobot 提供了大量狀態(tài)獲取數據,以便與 EliRobot 機器人平臺進行監(jiān)測,創(chuàng)建 TcpSocket 客戶端并連接 30001端口后,系統(tǒng)會自動返回的對應格式的報文,可查詢機器人狀態(tài)報文表(30001端口詳細使用教程請查看機器人狀態(tài)報文示例或30001端口使用文檔技術資料_機器人技術-艾利特機器人)。
2.2.3 30004端口介紹及作用
介紹:
通過socket鏈接機器人的30004端口,可以按指定頻率訂閱用戶指定的數據,例如,用戶程序socket鏈接30004端口后告訴控制器,需要訂閱”payload”變量,以125HZ發(fā)送,然后控制器就開始按125HZ向用戶程序發(fā)送”payload”的值。這個功能叫做RTSI 全稱為實時數據交互(Real-Time Synchronization Interface), 該協(xié)議提供了標準的TCP/IP鏈接, 用于與外部程序進行實時的數據交互。
- 輸出:機器人輸出整型寄存器的值、末端負載等
- 輸入:機器人浮點輸入寄存器、數字輸入IO的狀態(tài)設置
作用:
- 輸出訂閱:客戶端向 RTSI 服務端發(fā)送輸出訂閱項并發(fā)送開始信號后,服務端將按照客戶端所指定的頻率周期性發(fā)送所訂閱的數據。
- 輸入訂閱:客戶端向 RTSI 服務端發(fā)送輸出訂閱項并發(fā)送開始信號后,客戶端可以向服務端發(fā)送訂閱的變量的值,服務端將會把這些值設置到機器人中。
- 消息傳輸:任何時刻,RTSI 的客戶端和服務端都可以向對方發(fā)送普通消息、警告消息、異常消息、錯誤消息。
- 客戶端運行環(huán)境:可以為任意的外部鏈接程序。
● 30004端口詳細使用教程請查看機器人RTSI使用說明或30004端口使用文檔技術資料_機器人技術-艾利特機器人。
2.2.4 30011端口介紹及作用
介紹:
30011端口描述的是 EliRobot 機器人平臺開放的數據獲取端口,控制器會提供機器人的數據狀態(tài),例如關節(jié)角、溫度等等,這些數據都會通過 socket 打包以10HZ的頻率發(fā)送至連接的客戶端,與30001不同的是不受機器人模式影響,無法向端口發(fā)送腳本。
作用:
EliRobot 提供了大量狀態(tài)獲取數據,以便與 EliRobot 機器人平臺進行監(jiān)測,創(chuàng)建 TcpSocket 客戶端并連接 30011端口后,系統(tǒng)會自動返回的對應格式的報文,可查詢機器人狀態(tài)報文表,可以在機器人任何模式下獲取對應的數據。
2.2.4 30020端口介紹及作用
介紹:
系統(tǒng)進入解釋器模式后,允許編程人員在任務運行時發(fā)送并排隊運行腳本語句,只需要腳本語句為有效的python語句即可,用戶可以將腳本語句通過30020端口,發(fā)送到控制器,控制器解收之后,會根據當前的狀態(tài),對語句進行編譯運行。發(fā)送到30020端口的腳本語句,會以隊列的方式存儲在控制軟件內部,并按順序執(zhí)行。
腳本語句必須為單行語句,并以\n作為結束符,如 set_tcp([0,0,0,0,0,0])\n。
● 30020端口詳細使用教程請查看機器人解釋器模式使用說明或30020端口使用文檔技術資料_機器人技術-艾利特機器人。
作用:
用于實現一些動態(tài)的腳本插隊運行,比如用戶在自己的上位機程序,實時計算出一些運行點位,用戶在程序運行的過程中,將一些實時計算的腳本插隊到當前運行的任務當中,腳本語句為有效的python語句且必須為單行語句。
2.2.5 40011端口介紹及作用
介紹:
用于實現明文TCPIP狀態(tài)請求,客戶端可以連接到系統(tǒng)的40011端口,通過下發(fā)固定格式的請求報文,獲取機器人的各種狀態(tài)及數據或者設置機器人相應的參數,屬于一問一答式數據回復類型,上位機發(fā)送對應的請求,機器人返回對應的數據。該端口與SEC命令相同,不支持運動指令、延時指令等耗時指令,僅支持不耗時指令執(zhí)行。
作用:
目前CS軟件目前30001端口無返回值,用戶有較多的獲取返回值的需求(比如請求逆解結果)實現起來不夠方便。根據該需求,系統(tǒng)增加40011端口,用于實現快速的明文數據請求功能。
40011端口類似于一問一答式與機器人交互。
2.3. 端口比較(獲取數據信息)
30001、30004、30011、40011端口對比(獲取數據信息)
● 30001和30011端口全數據獲取,頻率均為10HZ,區(qū)別30001可以響應外部腳本輸入,30011僅用于外部監(jiān)測機器人狀態(tài),可在任意機器人模式下獲取。
● 30001和30004端口,30001為全數據獲取,頻率為10HZ,30004可訂閱輸出,最高頻率250HZ,例如客戶只想獲取機器人的力值,可通過30004端口訂閱,只接收力值,相對于30001更簡便,無需考慮或者解析其他數據。
● 40011實現明文TCPIP狀態(tài)請求,下發(fā)固定格式的請求報文,可直接獲取機器人的各種狀態(tài)及數據,無需復雜的轉化解析,30001目前無返回值,相對于用戶有較多的獲取返回值的需求(比如請求逆解結果),30001實現起來不夠方便。
● 獲取數據各個端口選擇使用,可根據客戶現場實際應用來選擇對應端口。
2.4. 端口比較(控制運動)
● 30001端口無法實現一些動態(tài)的腳本排隊運行,只能保持當前的腳本運行,若第一個移動腳本沒有執(zhí)行完,下一個移動腳本已經下發(fā),第一個移動會直接停止,執(zhí)行下一個移動。
● 30020端口用于在一定的條件下,實現用戶腳本的排隊運行,比如用戶在自己的上位機程序,實時計算出一些運行點位腳本,第一個任務在運行的過程中,將一些實時計算的腳本排隊到當前運行的任務后。不會打斷第一個任務的執(zhí)行。
3. 常見問題解答
● CS系列支持Python腳本運行,并且腳本分為sec腳本與def腳本,def腳本為主程序腳本,一次僅支持一個def腳本運行,如果在第一個def腳本運行過程中,下發(fā)第二個def腳本,則會強制停止第一個運行中的def腳本,去執(zhí)行新收到的def腳本,sec腳本可以與def腳本同時運行,不會導致def腳本停止,但sec腳本不支持運動指令,并且不允許運行耗時指令(如sleep、串口、socket的超時操作等),存在一定的限制。
3.1. 29999端口相關問題
● 29999端口 EliRobot dashboard shell 的控制指令在執(zhí)行時,需要注意機器人的狀態(tài)是否是處于遠程模式,因為有一些指令需要機器人在遠程模式下才生效。
● dashboard命令以”\n”為結束輸入標志,但某些第三方Socket工具設計使用鼠標點擊按鍵提交輸入(不支持物理鍵盤的Enter提交),因此不會自動在輸入末尾添加”\n”,導致dashboard認為輸入未完成而不予響應,因此此類情況需在輸入末尾自行添加結束輸入標志”\n”。
3.2. 30001端口相關問題
● 遠程模式:此時機器人僅能通過外部控制源對機器人進行控制(比如外部連接30001后,發(fā)送控制腳本),示教器上,會鎖定,任務欄
● 本地模式:此時機器人僅能通過示教器對其進行控制,外部的控制源連接會被強制斷開(即連接到30001的服務均會被強制斷開),防止發(fā)生危險。
● 普通模式(非遠程與本地模式):如在系統(tǒng)設置中,禁用遠程控制模式,則此時系統(tǒng)會處于普通模式,該模式下不會對通過30001進行的外部控制源進行限制,可以理解為是遠程模式+本地模式的狀態(tài),但此時無法執(zhí)行IO的啟動程序的功能,并且無法執(zhí)行29999 Dashboard中的遠程模式生效的指令。
● tcp通信的連包現象(包含30011端口),這個不是咱們的特性,所有的tcp通信都可能有這個現象。(接收到的是不是完整報文,那是根據報文長度判斷的,比如報文長度是100,本次他直接收到了80,那就要等另外20上來一起解析)。
3.3. 30004端口相關問題
● RTSI 分為協(xié)議檢查、設置、同步循環(huán)三個步驟,當 RTSI客戶端接入時需要首先進行協(xié)議版本的校驗,以確定是否可以繼續(xù)進行通信
● 數據包都有統(tǒng)一的結構,都為報文頭+報文內容的形式(有的數據包不需要報文內容)
● 不同變量類型所占字節(jié)數不同
● 協(xié)議數據采用大端模式
● 訂閱輸入輸出需要注意(客戶搞反)
3.4. 30020端口相關問題
● 目前解釋中運行非運動類的耗時腳本(如sleep指令),會完整的等待sleep命令執(zhí)行結束后,才可以自動退出,中途即使調用了end_interpreter()命令,也不會強制停止耗時腳本運行。
● 任務運行狀態(tài)的控制,比如暫停、繼續(xù)、停止等,對解釋器模式同樣生效。
● 解釋器腳本隊列數量上限目前為8500條,腳本隊列數量超過該數量時,再次添加新的解釋器腳本,會返回discard信息,并拋棄新添加的腳本。
● 解釋器模式中目前不支持start_thread函數調用,下發(fā)的腳本中,如果包含了start_thread函數調用,會觸發(fā)對應的discard。
● V2版本的解釋器模式,如果運動指令后有轉接半徑設置,并且沒有在規(guī)定時間內,下發(fā)后續(xù)的運動指令,會出現咯噔急停的情況,該現象目前認為是正常情況。
● 請關注長時間運行,大量腳本隊列運行,內存是否存在異常的持續(xù)增加,并且通過停止運行任務等操作無法降低的情況。
● clear_interpreter()函數ack后,會停止新的腳本ack,此時新的腳本會處于等待狀態(tài),只有當clear_interpreter()執(zhí)行后,才會將等待狀態(tài)的腳本進行ack。
3.5. 40011端口相關問題
● 下發(fā)的id盡量每次不同,這樣便于管理,同時在一些同時請求的情況,可以區(qū)分返回值與請求之間的匹配關系,(如果沒有同時請求的情況,理論上來說id不變也沒問題,但并非一個好的請求習慣)。
● 該請求的調用函數規(guī)則與SEC函數相同,即不可以執(zhí)行運動指令(如movej命令)、不可以執(zhí)行耗時指令(如sleep等),不可以執(zhí)行無法退出的命令(如死循環(huán)等)。
● 與SEC命令類似,請求命令并不會打斷正在執(zhí)行的主函數(即def函數)。