開發 API 服務(DEVELOPING API SERVICES)
前言大綱
為了擴展 Spot 的功能,可能需要在 Spot 附帶的板載服務之外提供服務。附加服務可以從第三方傳感器收集數據,觸發機器人外部的動作,或實時處理收集的數據。
界面Interface
開發的服務應符合所有 Spot 服務使用的相同服務接口標準。
機器人目錄Robot Directory
客戶端可以通過 Spot 發出請求來與第三方服務進行通信。 服務應該在機器人目錄中註冊自己,這將使機器人能夠將任何請求重新路由到託管服務的網絡位置。 在註冊時,服務需要聲明其服務名稱、權限、類型和網絡位置。
gRPC
服務應設計為處理在相應的 gRPC protobuf 服務定義中定義的所有可能的 RPC。可以使用 Spot SDK 中包含的相同 protobuf 服務定義或定義全新的服務定義。相同類型的客戶端請求將根據服務名稱和權限路由到適當的服務,每個服務這兩者都必須是唯一的。
基本結構Basic Structure
服務商Servicers
gRPC 文檔中概述了編寫基本 gRPC 服務所需的所有信息,此處不再贅述。
基礎設施Infrastructure
建立服務有兩個組成部分:啟動服務器和向機器人註冊服務。
啟動服務器Starting a Server
服務器本身可以使用 Python grpc 函式庫啟動。 Spot Python SDK 提供了函式庫的幫助程序,使管理服務器變得更容易。下面顯示了運行 gRPC 服務的代碼示例。
# Proto service specific function used to attach a servicer to a server.
add_servicer_to_server_fn = image_service_pb2_grpc.add_ImageServiceServicer_to_server
# Instance of the servicer to be run.
service_servicer = WebCamImageServicer()
service_runner = GrpcServiceRunner(service_servicer, add_servicer_to_server_fn, port, logger=logger)
# Run the server until a SIGINT is received.
service_runner.run_until_interrupt()
image_service_pb2_grpc.add_ImageServiceServicer_to_server 是一個從 protobuf 服務定義自動生成的函數。該函數將一個服務程序鏈接到一個服務器,並為每個編譯的 protobuf 服務器生成。WebCamImageServicer 是一個自定義類,它繼承自 protobuf 服務定義自動生成的服務類。它定義了響應所有可能的服務請求的方法。 GrpcServiceRunner 類別將創建並運行與傳入的服務程序關聯的服務器物件。它將監視給定端口上的請求。 run_until_interrupt() 方法 可用於使服務器保持活動狀態,直到它收到 SIGINT。
註冊服務Registering a Service
註冊服務需要與機器人通信。服務可以通過 Python SDK 提供的目錄註冊客戶端註冊自己。每個服務實例都應該有一個唯一的服務名稱、服務權限和與之關聯的服務類型,這些都在註冊時提供。這些詳細信息將使 Spot 能夠將客戶端請求路由到適當的服務。註冊服務的首選方法如下所示。請注意,它註冊了一個目錄保持活動,並將啟用活動監控。
dir_reg_client = robot.ensure_client(DirectoryRegistrationClient.default_service_name)
keep_alive = DirectoryRegistrationKeepAlive(dir_reg_client)
keep_alive.start({DIRECTORY_NAME}, {SERVICE_TYPE}, {SERVICE_AUTHORITY}, {SERVICE_IP}, {SERVICE_PORT})
with keep_alive:
# More code
範例Examples
Spot SDK 提供了無數範例,展示瞭如何開發機器人外 Python gRPC 服務。
- 網絡攝像頭圖像服務(Web Cam Image Service)
- 理光 Theta 影像服務(Ricoh Theta Image Service)
- 遠程任務服務(Remote Mission Services)
- 數據採集插件(Data Acquisition Plugins)
參考資料
- DEVELOPING API SERVICES
- myriad : 五花八門
留言
張貼留言
Aron阿龍,謝謝您的留言互動!