自行註冊Self Registration

前言大綱

此目錄中的文件作為一個示例,說明外掛載荷如何註冊自身、註冊服務以及通過機器人與服務通信。

外掛載荷註冊

負載能夠自行註冊,無需將用戶憑據存儲在負載上。 外掛載荷註冊客戶端可用於將外掛載荷的詳細信息傳達給機器人,而無需授權或身份驗證。 以這種方式註冊的所有外掛載荷稍後必須由管理員通過 Spot Web UI 手動授權。 如果外掛載荷附加到機器人上,它也應該在網頁上啟用。

一旦負載獲得授權,其唯一的 GUID 和秘密組合就可以用作憑據來請求訪問權限受限的用戶令牌,該令牌將授予對身份驗證、目錄和目錄註冊服務的權限。 授予的用戶令牌的有效期為 12 小時。

負載註冊和授權只需進行一次,因為負載定義將在重新啟動後保留在機器人上。

服務註冊

可以在機器人目錄中註冊新服務,這需要包含目錄權限的用戶令牌。 可以使用授權負載的 GUID 和機密來請求用戶令牌。 目錄註冊客戶端可用於將服務的實現和路由細節傳達給機器人。

每次重啟後都需要進行服務註冊,因為當機器人斷電時機器人目錄會被重置。

客戶與服務之間的溝通

應在服務註冊時提供將請求路由到服務的所有端點詳細信息。 當任何客戶端向具有與註冊服務匹配的權限和服務類型的機器人發出請求時,該請求將被轉發到關聯的端點。 假設服務將在給定端點運行並可用以處理請求。 響應將自動路由回調用客戶端。 如果沒有可用的服務,請求將超時。

Spot Core 核心

如果您使用的是 Spot CORE,此示例演示如何在 Spot CORE 上設置簡單服務並通過客戶端與其通信。 將這些示例文件複製到 Spot CORE,並在那裡設置負載註冊、服務創建和服務註冊。 然後在連接到機器人的筆記本電腦上運行客戶端。

設置

proto 定義文件需要編譯成python文件才能用於本系統。 按照 gRPC documentation,可以通過 python3 -m pip install grpcio-tools  安裝 grpcio 工具,然後運行 python3 -m grpc_tools.protoc -I  --python_out=. --grpc_python_out=. announce.protoannounce_service.proto  來生成這些文件。

演示

該目錄下的文件可用於將當前計算機設置為payload,啟動公告服務,註冊公告服務,以及運行客戶端通過機器人訪問公告服務。 本節將引導用戶完成該過程。

此解釋將遵循  initialize_payload script 中以編程方式佈置的過程,該腳本可自動執行此過程。 建議您先手動完成該過程以了解該過程。

選擇值

設置負載和板載服務需要定義至少一個負載、服務和端點。 這些定義需要多條信息正確地表示概念。 在開始之前,選擇並記錄要用於填充這些對象的值。 可以在 initialize_payload script 中看到有效值的示例。

機器人Robot

  • ROBOT_IP - 可以訪問機器人的 IP 地址。

外掛載荷Payload

  • GUID - GUID 應該是特定於外掛負載實例的唯一生成的 GUID。
  • Secret - Secret 應該是任意字符串。人類可讀性不是必需的。
  • Name - Name名稱 是一個人類可讀的字符串,用於識別負載。
  • Description - Description描述是對外掛載荷的人類可讀解釋。
  • Label_prefix - Label_prefix標籤前綴用於識別外掛載荷的類型。

服務Service

  • Name - Name名稱 ,此服務實例的唯一名稱。
  • Type - Type類型 - 用於定義與此服務​​的通信的 RPC 服務。
  • Authority - Authority權限 - 將請求定向到的權限。
  • User_token_required - 訪問此服務是否需要用戶擁有令牌。

端點Endpoint

ENDPOINT_IP - 運行服務的系統的 IP 地址。請注意,命令行實用程序提供了一個幫助函數來確定正確的 IP 地址。此命令必須在將運行該服務的同一台計算機上運行:
python3 -m bosdyn.client --username {USER} --password {PASSWORD} {ROBOT_IP} self-ip

Port端口 - 系統上用於訪問服務的空閒端口。

註冊外掛載荷

self_register_payload.py 可用於註冊單個外掛負載。 註冊的外掛負載將自動設置為未授權和禁用,直到管理員在 Web 控制台中更新它。 Python 腳本將等待退出,直到註冊的外掛負載獲得授權。 如果負載 GUID 已經註冊,它不會被其他註冊請求覆蓋。 self_registered_payload.py 腳本添加的外掛載荷添加了具有預設配置的外掛載荷。 在admin頁面授權payload時,admin用戶可以選擇默認配置,或者預設配置。 有關詳細信息,請參閱有關 負載軟件配置 configuration of payload software  的文檔。

python3 self_register_payload.py --guid <payload_guid> --secret <payload_secret> --name <payload_name> --description <payload_description> ROBOT_IP

啟動公告服務

announce_service.py 可用於啟動(和維護)一個非常簡單的 Python gRPC 服務。 該服務將接受帶有消息的通告請求,並通過通告響應以全部大寫形式返回消息。 該服務將繼續運行,直到用戶發出鍵盤中斷或終止 PID。 

警告:配置的端口不得被服務託管設備上的防火牆阻止。

python3 announce_service.py --port <endpoint_port>

註冊公告服務

self_register_service.py 可用於向機器人註冊公告服務。註冊該服務將告訴機器人將通知請求路由到哪裡。在這種情況下,我們希望將這些請求路由到外掛負載。
python3 self_register_service.py --guid <payload_guid> --secret <payload_secret> --host-ip <endpoint_ip> --port <endpoint_port> ROBOT_IP

使用客戶端訪問公告服務

announce_client.py 可用於創建一個announce 客戶端並向announce 服務發送一個簡單的請求。 如果一切設置正確,發送到服務的消息應該完全大寫。 請求將通過機器人路由,機器人將使用註冊的服務描述將請求轉發到外掛負載。 如果服務名稱、類型或權限不正確,則請求將無法routed路由。

python3 announce_client.py --guid <payload_guid> --secret <payload_secret> --message <string_message> ROBOT_IP

演示腳本

initialize_payload.sh 腳本將自動嘗試執行上面列出的所有步驟,以及 protobuf 文件的編譯。 為便於入門,演示腳本中的大多數字段都填充了足夠的默認值。 但是,運行演示仍需要手動設置機器人 ip、端點 ip、端點主機host和外掛負載機密secret。

要使用範例,請運行

initialize_payload.sh <robot_ip> <endpoint_ip> <endpoint_port> <payload_secret>

  • robots_ip - 可以從當前系統訪問機器人的 IP 地址
  • endpoint_ip - 可以從機器人訪問當前系統的 IP 地址
  • endpoint_port - 當前系統上的開放端口,供服務通過
  • payload_secret - 此外掛負載實例獨有的私有 16 字符字符串


參考資料

特色、摘要,Feature、Summary:

關鍵字、標籤,Keyword、Tag:

留言

這個網誌中的熱門文章

Ubuntu 常用指令、分類與簡介

iptables的觀念與使用

網路設定必要參數IP、netmask(遮罩)、Gateway(閘道)、DNS

了解、分析登錄檔 - log

Python 與SQLite 資料庫

Blogger文章排版範本

Pandas 模組

如何撰寫Shell Script

查詢指令或設定 -Linux 線上手冊 - man

下載網頁使用 requests 模組