遠程任務服務 Remote Mission Service

前言大綱

此示例演示如何

  • 運行一個實現 RemoteMissionService 服務定義的 gRPC 服務器。
  • 將 RemoteClient 直接連接到該服務器。
  • 建立一個與該服務器對話的任務。
  • 這是自動行走任務的“回調callback”動作所使用的新模式。

設置相依性

請參閱 requirements.txt 文件以獲取可以使用以下命令與 pip 一起安裝的 python 依賴項列表:

python3 -m pip install -r requirements.txt

運行示例

沒有機器人的情況下跑步

您可以在不涉及機器人的情況下測試示例服務器。啟動 hello world 服務

python3 hello_world_mission_service.py local --port {PORT}

成功後,您應該會在終端中看到如下所示的服務日誌:
2021-01-27 10:29:27,602 - INFO - Started the HelloWorldServicer server.
hello-world-callback service running.
Ctrl + C to shutdown.  

要啟動客戶端,請運行

python3 remote_mission_client.py --hello-world local --host-ip localhost --port {PORT}

其中 PORT 與提供給服務器應用程序的端口號匹配。 客戶端應該立即連接到本地服務器,服務器和客戶端都會打印出一些信息。

服務器輸出將如下所示:

2021-01-27 10:37:23,338 - INFO - EstablishSession unimplemented!
2021-01-27 10:37:23,339 - INFO - Hello World!
2021-01-27 10:37:23,340 - INFO - Stop unimplemented!
2021-01-27 10:37:23,340 - INFO - TeardownSession unimplemented!

客戶端輸出將如下所示:

Servicer stopped with status STATUS_SUCCESS

服務器將打印出“Hello Spot!”而不是“Hello World!”

和機器人一起跑步

還有另一個示例服務程序可以安全地關閉機器人電源。 要運行此示例,您需要在機器人和運行示例的計算機之間建立連接。

python3 power_off_mission_service.py ROBOT_IP --port {PORT} --host-ip {ENDPOINT_IP}  --username {USER} --password {PASSWORD}

可以使用 –port 參數指定服務的端口號。 可以繞過端口參數並允許選擇隨機端口號,但不鼓勵這樣做,因為重新啟動可能會導致服務偵聽端口發生意外更改。 此端口號將與主機 IP(“ENDPOINT_IP”)一起使用,以完全指定服務運行的位置。 該端口必須是開放的,並且不能被本地防火牆阻止。 如果端口被阻止,機器人和目錄註冊服務將無法訪問該服務。

此示例將兩個不同的 IP 地址作為參數。 --host-ip 參數描述將運行服務的計算機的 IP 地址。 存在幫助程序來嘗試確定正確的 IP 地址。 此命令必須在將運行遠程任務服務的同一台計算機上運行:

python3 -m bosdyn.client --username {USER} --password {PASSWORD} {ROBOT_IP} self-ip

機器人應該關閉,您將看到來自客戶端的以下輸出:

Servicer stopped with status STATUS_SUCCESS

要查看服務人員實際關閉機器人的電源,您必須執行以下步驟:
  • 使用 wasd 示例為機器人通電並使其站立起來。
  • 使用 [l] 鍵返回 wasd 的租約。
  • 運行客戶端。
  • 您必須在返回 wasd 的租約後 3 秒內運行客戶端,否則將啟動正常的通信丟失策略。 為避免通過平板電腦觸發回調時出現租約錯誤,請在確認操作之前選擇“第 3 方3rd Party”選項。

將示例用作 Autowalk 任務的一部分

任務服務示例將作為 Autowalk 任務的一部分工作,在 Spot 到達回調時執行其操作。

第一步:啟動遠程任務服務器

以下兩個命令行顯示在 CORE 或 wifi 筆記本電腦上啟動服務

(on core) python3 hello_world_mission_service.py robot --host-ip 192.168.50.5 --username {USER} --password {PASSWORD} 192.168.50.3
(on laptop over wifi) python3 hello_world_mission_service.py robot --host-ip {YOUR_IP} --port {OPEN_PORT} --username {USER} --password {PASSWORD} 192.168.80.3

這兩個命令都應該輸出如下內容:

2020-10-30 14:21:41,577 - INFO - Started the HelloWorldServicer server.
2020-10-30 14:21:41,585 - INFO - hello-world-callback service registered/updated.
2020-10-30 14:21:41,585 - INFO - Starting directory registration loop for hello-world-callback

請注意,這兩個命令都針對機器人,但也會通知機器人服務器本身運行的 IP 地址。您可能必須更改防火牆設置才能成功進行通信。

第二步:用回調記錄自動行走任務

  • 在錄製 Autowalk 任務之前,您必須啟動服務器(第一步)。
  • 在平板電腦上,從漢堡菜單中選擇操作。 您應該會看到列出的回調,例如“Hello World Callback”。 請注意,如果您沒有執行第一步,則不會出現此問題!
  • 如果單擊回調默認值,則可以命名回調並配置要發送到服務器的任何用戶變數。
  • Spot 站起來並選擇 Autowalk。
  • 稍微移動機器人,然後選擇 + 號以創建動作航點。
  • 選擇您的回調。
  • 完成錄製和播放,您應該會看到您的服務器打印出如下內容:
2020-11-04 14:00:24,695 - INFO - EstablishSession unimplemented!
2020-11-04 14:00:34,009 - INFO - Hello Hello World Callback - Hello World Callback - 1!
2020-11-04 14:00:34,109 - INFO - Stop unimplemented!

請注意“Hello Hello World Callback - Hello World Callback - 1!” 表明您確實收到了回調,因此您現在只需要在服務器中實現方法來執行您想要的工作、做出決定....等。


參考資料

特色、摘要,Feature、Summary:

關鍵字、標籤,Keyword、Tag:

留言

這個網誌中的熱門文章

Ubuntu 常用指令、分類與簡介

iptables的觀念與使用

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

了解、分析登錄檔 - log

Python 與SQLite 資料庫

Blogger文章排版範本

Pandas 模組

如何撰寫Shell Script

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

下載網頁使用 requests 模組