BTs in Robotics學習筆記(一) 什麼是行爲樹

FSMs有什麼問題?對反應性和模塊化的需求

  • 模塊化(一個系統的組件可以被劃分成不同的模塊,並重新組合成的能力):如果刪除了一個組件,則需要修改到該組件的每個轉換

  • 反應性(對變化做出快速有效反應的能力):組件之間需要進行許多轉換,而許多轉換意味着許多單向控制傳輸

行爲樹的運行

  • BT是一種有向根樹,其中內部節點稱爲控制流節點,葉節點稱爲執行節點。對於每個連接節點,我們使用父節點和子節點的通用術語。根是沒有父節點的節點;所有其他節點都有一個父節點。控制流節點至少有一個子節點。

  • BT從根節點開始執行,根節點生成一個有一定頻率的允許節點執行的信號,這個信號可以稱爲滴嗒,該信號被髮送給它的子節點。當且僅當節點接收到信號時才執行節點。如果正在執行,則子進程立即返回到父進程,如果已經達到目標,則返回成功,否則返回失敗。

  • 經典行爲樹框架:四類控制節點(Sequence、Selector、Parallel和Decorator)和兩類執行節點(Action和Condition)。

  • 序列節點執行算法,將信號從左邊傳到它的子節點,直到它找到一個返回Failure或Running的子節點,然後它返回Failure或Running到它自己的父節點。當且僅當它的所有子元素都返回成功時,它才返回成功。注意,當一個子節點返回Running或Failure時,序列節點不會將信號傳到下一個子節點(如果有的話)。

	for i←1 to N do
		childStatus ← Tick(child(i)) 
		if childStatus = Running then
				return Running
		else if childStatus = Failure then
				return Failure 
	return Success
  • 回退節點執行算法,將信號從左邊路由到它的子節點,直到它找到一個返回成功或正在運行的子節點,然後它返回Success或Running到它自己的父節點。當且僅當它的所有子元素都返回Failure時,它才返回Failure。注意,當一個子節點返回Running或Success時,回退節點不會將信號路傳到下一個子節點(如果有的話)。
	for i←1 to N do
		childStatus ← Tick(child(i)) 
		if childStatus = Running then
			return Running
		else if childStatus = Success then
			return Success 
	return Failure
  • 並行節點執行算法,將信號傳給所有子節點;它返回Success如果M個子節點返回Success;它將返回Failure如果N−M + 1個子節點返回Failure;否則返回Running。其中N是子節點數量,M≤N是一個用戶定義的閾值。
	for i←1 to N do
		childStatus(i) ← Tick(child(i))
		if Σi:childStatus(i)=Success1 ≥ M then 
			return Success
		else if Σi:childStatus(i)=Failure1 > N − M then 
			return Failure
	return Running
  • 行爲節點當接收到信號時,執行一個命令。如果執行正確完成,則返回Success;如果執行失敗,則返回Failure。當行爲正在進行時,它返回Running。

  • 條件節點當接收到信號時,檢查命題。根據條件的成立與否返回成功或失敗。注意,條件節點從不返回Running。

  • 裝飾節點是一個控制流節點,有一個單獨的子節點。該節點根據用戶定義的規則操作子節點的返回狀態,並根據一些預定義的規則有選擇地標記子節點。

  • 舉例說明:球的抓取行爲樹
    球的抓取行爲樹設計

  • 具有內存的節點,爲了避免不必要的某些節點的重新執行。帶有內存的控制流節點始終記住子節點是否返回了Success或Failure,避免子節點的重新執行,直到整個序列節點或回退節點以Success或Failure告終。當父節點返回成功或失敗時,內存將被清除,以便在下一次激活時考慮所有的子節點。

  • 舉例說明:機器人抓取綠色木塊放到制定地點
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章