編舞服務Choreography Service

前言大綱

它是什麼?

Choreography 服務是一個用於生成精確腳本動作的框架,目前專注於舞蹈。

可以在 YouTube-UpTown Spot 上看到示例腳本。

編舞序列由一系列動作組成。我們可以通過以下方式從適度的可用移動列表中實現各種可能的行為:
  • 組合多個動作(參見 : 軌道/分層部分 tracks/layering section)。
  • 改變移動參數以改變移動行為。

可靠性注意事項

編排框架遠不如其他 Spot 行為健壯。它只應在具有足夠空間和良好牽引力的平坦地板上使用。某些動作組合將不兼容,並會導致機器人墜落。對於單個移動的某些參數組合也是如此。機器人會跌倒。生成一個看起來不錯並且可靠地成功的腳本可能需要一些 反複試驗trial-and-error

不建議與外掛負載一起使用。

編舞術語Choreography Terminology

Slices切片

我們把時間分成幾部分。在 Choreographer 的上下文中,切片是 1/4 拍(也是 4/4 音樂的 1/16 分音符)。例如,BPM 為 100 節拍/分鐘的舞蹈每分鐘會有 400 個切片。切片的持續時間可以調整,但在整個腳本中必須保持不變。

移動始終運行整數個切片。有些移動需要固定數量的切片,有些是可擴展的。有關更多詳細信息,請參閱 : 配置文件部分Config Files section

請注意,每分鐘可以選擇任意數量的切片,但是非常快或非常慢的切片會導致某些移動不可靠。許多動作在每分鐘 250-450 片的範圍內最可靠。

軌道/分層Tracks/Layering

我們將機器人的運動分為四個不同的軌跡:
  • Legs腿
  • Body身體
  • Arm手臂
  • Gripper夾爪

每個舞蹈動作都需要一個或多個這些曲目。使用不同軌跡的動作可以以任意組合同時運行。在 Choreographer 中,軌道在時間線視圖中表示為水平部分。例如,以下是 Choreographer 的屏幕截圖,該腳本結合了四個軌道中的所有三個動作:

由此產生的行為如下所示:

某些移動需要多個軌跡,例如使用身體和腿部軌跡的“跳過Skip”移動或使用手臂和抓手軌跡的“手臂移動相對Arm Move Relative”,如下例所示:

進入/退出條件Entry/Exit conditions

所有使用腿部軌跡的移動,都是將具有身體在移動之前/之後必須處於的邏輯進入和退出位置。這是為了防止無意義的編舞;例如,如果"不跪",則完成從 "膝蓋到站立的轉場kneel-to-stand transition ",或者直接從步進動作到 "跪拍動作 kneeling-clap move",中間沒有從站立到膝蓋的轉場transition 

為了表示和強制執行這些要求,所有使用腿部軌跡的移動都具有退出轉場狀態和進入轉場狀態。轉場狀態的選項是:

  • Stand站立
  • Sit坐
  • Kneel下跪
  • Sprawl爬行
第一個腿部軌跡移動可以有任何進入狀態,機器人將在開始編排序列之前自動轉場到該移動可接受的進入狀態。如果機器人尚未處於正確的起始姿勢,則它可能會延遲編排序列的開始,超出請求的開始時間。

所有後續的腿跟踪移動必須具有對應於前一條腿跟踪移動的退出狀態的進入狀態。違反此要求的腳本將被 API 拒絕並返回警告,指示哪些移動違反了進入/退出狀態。同樣,當進入狀態與前一條腿移動的退出狀態不匹配時,Choreographer 中的例程將突出顯示紅色移動,例如在此示例中:


API

API 通過唯一名稱、每分鐘切片數和重複動作列表定義編排序列。每個移動由移動的類型、其起始切片、持續時間(以切片為單位)和實際參數(MoveParams proto 消息)組成。MoveParams 消息描述了機器人在每次移動過程中的行為方式。例如,移動參數可以指定身體的位置。每個參數可能有由 MoveInfo proto 描述的特定限制/界限( limits/bounds );可以使用 ListAllMoves RPC 找到此信息。

創建編排序列後,UploadChoreography RPC 會將例程發送給機器人。編排服務將驗證和檢查例程的結構,以確保它是可行的並且在範圍內。

該服務將返回與上傳的編排序列相關的警告和失敗列表。故障是編排服務無法自動糾正的,必須在例程執行之前修復。警告是可以自動糾正的,並且在某些場景下不會阻止例程的執行。如果在 UploadChoreography RPC 中布林值 non_strict_parsing 設置為 true,則該服務將修復例程中的任何可糾正錯誤(例如,將值向下舍入最大允許值)並允許完成帶有警告的編排序列。

ExecuteChoreography RPC 將在機器人上運行編排序列以完成。編排序列由上傳到機器人的序列的唯一名稱標識。此外,開始時間(在機器人的時間)和開始切片將完全指定機器人何時開始編排序列以及移動。

編排服務有一個 python 客戶端函式庫,它為每個 RPC 提供幫助函數以及幫助將編排序列從 protobuf 消息轉換為二進制或文本文件的函數。

upload_choreographed_sequence example 演示如何從保存的文本文件中讀取現有例程,將其上傳到機器人,然後執行上傳的編排。

配置文件Config Files

有兩個配置文件描述了編舞者用來組成不同編舞序列的各個動作。

MoveInfoConfig.txt

MoveInfoConfig 可以由 protobuf 解析器解析到 ListAllMovesResponse proto 的每個移動字段。每個 MoveInfo proto 都提供有關特定移動的元數據。這些字段及其含義是:
  • name:這個動作的名稱。
  • move_length_slices:此移動的默認持續時間(以切片為單位)。
  • min_move_length_slices:此移動可以完成的絕對最小切片數。
  • is_extendable:這個動作是否可以延長到比平時更長的時間。如果 is_extendable 為真,則可以在 MoveParams 原型的 requests_slices 字段中指定所需的持續時間。
  • entry_state:機器人在進入此移動之前必須處於哪個過渡狀態。僅在 control_legs=true 時適用。結構可以支持多個允許的進入狀態,但所有當前的移動只接受一個進入狀態。
  • exit_state:機器人在完成這次移動後將處於哪個過渡狀態。僅在 control_legs=true 時適用。下一個腿部軌跡移動必須具有相同的 entry_state。
  • min_time:有些動作有最短持續時間,不能走得更快。對於指定了這一點的移動,如果切片持續時間很短(每分鐘切片非常高),它們可能需要比正常切片數量更多的切片。
  • max_time:有些動作有最長持續時間,不能再慢了。這適用於可擴展但不能任意長的移動。
  • control_arm:這個動作是否需要手臂軌跡。
  • control_legs:這個動作是否需要腿部軌跡。
  • control_body:這個動作是否需要身體軌跡。
  • control_gripper:此移動是否需要夾爪器軌跡。
  • display:關於 Choreographer 應該如何顯示動作的信息。
  • color:為時間線軌道中的移動繪製框的顏色。
  • markers:用於繪製小的灰色垂直線的切片。這些通常對應於觸地和起飛(touchdown and liftoff)等事件,並幫助用戶根據需要(例如在節拍上)排列這些事件。此處的負值表示移動結束前的切片。
  • description:移動的文本描述。
  • image:要為移動顯示的圖像的位置。
  • category:在 Choreographer 的移動選擇器中移動將被分類到的類別名稱。

MoveParamsConfig.txt

MoveParamsConfig 文件為與單個移動關聯的每個參數提供默認值。對於包含數字參數(例如 double、int32)的移動,配置文件還將指定最小值和最大值。

配置文件的格式如下。每個可用的移動都會有一個由空行分隔的文本塊。

每個塊的第一行將有兩個值:

  • 動作的名稱。
    • 此移動使用 MoveParams proto 中 one of params 字段中的哪個選項來指定其參數。對於沒有參數的移動,第一行中的第二個條目應該是 NONE,並且該文本塊中將沒有其他行。
  • 其餘行描述每行一個參數的默認值(可能還有最小值/最大值)。每行中的第一個字段將是參數的名稱。點(“.”)表示原型中的層次結構級別。對於 bool 或 Enum 類型的參數,該行將有兩個字段,第二個字段將是默認值。對於 double 或 int32 類型的參數,將有 4 個字段,按以下順序排列:
    • 參數名稱Parameter name
    • 最小值Minimum value
    • 默認值Default value
    • 最大值Maximum value
如果原型中沒有指定值,則使用默認值。超出允許範圍的值通常會導致腳本被拒絕。但是,如果啟用了 non_strict_parsing,該值將被強制進入所需的範圍並拋出警告。

參考資料

特色、摘要,Feature、Summary:

關鍵字、標籤,Keyword、Tag:

留言

這個網誌中的熱門文章

Ubuntu 常用指令、分類與簡介

iptables的觀念與使用

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

了解、分析登錄檔 - log

Python 與SQLite 資料庫

Blogger文章排版範本

Pandas 模組

如何撰寫Shell Script

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

下載網頁使用 requests 模組