Skip to content

Commit 6a250c9

Browse files
committed
docs: add bt.rst
1 parent 517ae95 commit 6a250c9

3 files changed

Lines changed: 282 additions & 0 deletions

File tree

source/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Iris
88

99
sm/main
1010
ckt/main
11+
toc/main
1112
ml/main
1213
robotics/main
1314
os/main

source/toc/bt.rst

Lines changed: 273 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,273 @@
1+
Behavior Tree
2+
==============
3+
4+
Behavior Tree(BT)を状態空間上の写像として捉え,効率性・ロバスト性・安全性を数理的に評価する考え方を示す.ここでいう効率性は目標達成までの時間上界,ロバスト性は吸引領域の大きさで評価され,安全性は障害領域を避け続けられることを意味する.
5+
6+
状態空間によるBTの定式化
7+
------------------------
8+
9+
BTを,状態更新則,返り値,時間刻みからなる三つ組として表す.
10+
11+
.. math::
12+
13+
\mathcal{T}_i=\{f_i,r_i, \Delta t\},
14+
15+
ここで, :math:`f_i: \mathbb{R}^n \rightarrow \mathbb{R}^n` は差分方程式の右辺,
16+
:math:`r_i: \mathbb{R}^n \rightarrow \{\mathcal{R},\mathcal{S},\mathcal{F}\}` は返り値であり,
17+
それぞれ Running,Success,Failure を表す.
18+
19+
返り値に応じて状態空間を次の 3 領域に分割する.
20+
21+
.. math::
22+
23+
R_i=\{x: r_i(x)=\mathcal{R} \}
24+
25+
S_i=\{x: r_i(x)=\mathcal{S} \}
26+
27+
F_i=\{x: r_i(x)=\mathcal{F} \}.
28+
29+
実行は通常の差分方程式として書ける.
30+
31+
.. math::
32+
33+
x_{k+1}=f_i( x_{k}),
34+
35+
t_{k+1}=t_{k}+\Delta t.
36+
37+
この表現を使うと,BT の合成が状態空間上でどのような性質を持つかを直接議論できる.
38+
39+
合成ノード
40+
-----------
41+
42+
Sequence と Fallback は,子BTの Success / Failure に応じて次に実行する部分木を切り替える.
43+
44+
Sequence 合成
45+
~~~~~~~~~~~~~
46+
47+
.. math::
48+
49+
\mathcal{T}_0=\mbox{Sequence}(\mathcal{T}_1,\mathcal{T}_2).
50+
51+
.. math::
52+
53+
\mbox{If }x_k\in S_1
54+
55+
r_0(x_k) = r_2(x_k)
56+
57+
f_0(x_k) = f_2(x_k)
58+
59+
\mbox{ else }
60+
61+
r_0(x_k) = r_1(x_k)
62+
63+
f_0(x_k) = f_1(x_k).
64+
65+
第1子が Success を返したときだけ第2子を実行するので,「前段の条件が満たされたら次へ進む」構造になる.
66+
67+
Fallback 合成
68+
~~~~~~~~~~~~~
69+
70+
.. math::
71+
72+
\mathcal{T}_0=\mbox{Fallback}(\mathcal{T}_1,\mathcal{T}_2).
73+
74+
.. math::
75+
76+
\mbox{If }x_k\in {F}_1
77+
78+
r_0(x_k) = r_2(x_k)
79+
80+
f_0(x_k) = f_2(x_k)
81+
82+
\mbox{ else }
83+
84+
r_0(x_k) = r_1(x_k)
85+
86+
f_0(x_k) = f_1(x_k).
87+
88+
第1子が Failure のときだけ第2子へフォールバックするため,「まず優先度の高い方を試し,だめなら代替手段へ移る」構造として解釈できる.
89+
90+
Parallel 合成
91+
~~~~~~~~~~~~~
92+
93+
状態空間を :math:`x=(x_1,x_2)` に分けて互いに別の部分を制御するなら,Parallel は同時実行として表せる.
94+
95+
.. math::
96+
97+
\mathcal{T}_0=\mbox{Parallel}(\mathcal{T}_1,\mathcal{T}_2).
98+
99+
このとき :math:`f_0(x)=(f_{11}(x),f_{22}(x))` であり,返り値は閾値 :math:`M` により決まる.
100+
101+
.. math::
102+
103+
\mbox{If } M=1
104+
105+
r_0(x) = \mathcal{S} \mbox{ If } r_1(x)=\mathcal{S} \vee r_2(x)=\mathcal{S}
106+
107+
r_0(x) = \mathcal{F} \mbox{ If } r_1(x)=\mathcal{F} \wedge r_2(x)=\mathcal{F}
108+
109+
r_0(x) = \mathcal{R} \mbox{ else }
110+
111+
\mbox{If } M=2
112+
113+
r_0(x) = \mathcal{S} \mbox{ If } r_1(x)=\mathcal{S} \wedge r_2(x)=\mathcal{S}
114+
115+
r_0(x) = \mathcal{F} \mbox{ If } r_1(x)=\mathcal{F} \vee r_2(x)=\mathcal{F}
116+
117+
r_0(x) = \mathcal{R} \mbox{ else }
118+
119+
効率性とロバスト性
120+
------------------
121+
122+
効率性を「有限時間で Success に到達するまでの時間上界 :math:`\tau`」,ロバスト性を「Success に到達できる初期値集合 :math:`R'` の大きさ」として定義する.
123+
124+
有限時間成功
125+
~~~~~~~~~~~~
126+
127+
.. math::
128+
129+
x(t)\in R' \ \mbox{for all } t\in [0,\tau')
130+
131+
x(t)\in S \ \mbox{for } t = \tau'
132+
133+
BT が吸引領域 :math:`R'` をもつ有限時間成功(FTS, Finite Time Successful)であるとは,任意の :math:`x(0)\in R'\subset R` に対して,
134+
ある一様上界 :math:`\tau` と到達時刻 :math:`\tau'(x(0))\leq \tau` が存在し,到達前は :math:`R'` から出ず,到達時刻で Success 領域 :math:`S` に入ることをいう.
135+
136+
Sequence の性質
137+
~~~~~~~~~~~~~~~
138+
139+
:math:`\mathcal{T}_1,\mathcal{T}_2` がともに FTS で,
140+
141+
.. math::
142+
143+
S_1=R_2' \cup S_2
144+
145+
を満たすなら,
146+
147+
.. math::
148+
149+
\mathcal{T}_0=\mbox{Sequence}(\mathcal{T}_1,\mathcal{T}_2)
150+
151+
も FTS であり,
152+
153+
.. math::
154+
155+
\tau_0 = \tau_1+\tau_2
156+
157+
R_0'= R_1' \cup R_2'
158+
159+
S_0=S_1 \cap S_2 = S_2.
160+
161+
つまり,前段の Success 領域が後段の吸引領域を十分に含んでいれば,逐次実行しても時間上界は加算され,吸引領域は合成により拡張される.
162+
163+
Fallback の性質
164+
~~~~~~~~~~~~~~~
165+
166+
:math:`\mathcal{T}_1,\mathcal{T}_2` がともに FTS で,
167+
168+
.. math::
169+
170+
S_2 \subset R_1'
171+
172+
を満たすなら,
173+
174+
.. math::
175+
176+
\mathcal{T}_0=\mbox{Fallback}(\mathcal{T}_1,\mathcal{T}_2)
177+
178+
も FTS であり,
179+
180+
.. math::
181+
182+
\tau_0 = \tau_1+\tau_2
183+
184+
R_0'= R_1' \cup R_2'
185+
186+
S_0=S_1.
187+
188+
これは,右側の代替行動が左側の主行動を「準備する」構造である.失敗したら別の行動で状態を整え,その後に本来の行動を再び成立させることで,BT 全体の吸引領域を広げられる.
189+
190+
Parallel の性質
191+
~~~~~~~~~~~~~~~
192+
193+
:math:`\mathcal{T}_1,\mathcal{T}_2` がともに FTS なら,Parallel 合成も FTS である.
194+
195+
.. math::
196+
197+
\mbox{If } M=1
198+
199+
R_0' = \{R_1' \cup R_2'\} \setminus \{S_1 \cup S_2\}
200+
201+
S_0 = S_1 \cup S_2
202+
203+
\tau_0 = \min(\tau_1,\tau_2)
204+
205+
\mbox{If } M=2
206+
207+
R_0' = \{R_1' \cap R_2'\} \setminus \{S_1 \cap S_2\}
208+
209+
S_0 = S_1 \cap S_2
210+
211+
\tau_0 = \max(\tau_1,\tau_2)
212+
213+
:math:`M=1` はどちらか一方が成功すれば十分な場合,:math:`M=2` は両方の成功が必要な場合に対応する.
214+
215+
安全性
216+
------
217+
218+
安全性は,障害領域 :math:`O \subset \mathbb{R}^n` を決して踏まないこととして定義する.
219+
220+
安全の定義
221+
~~~~~~~~~~~
222+
223+
初期化領域 :math:`I \subset R` に対し,任意の :math:`x(0)\in I` から出発してすべての :math:`t \geq 0` で :math:`x(t) \not \in O` が成り立つとき,その BT は安全である.
224+
225+
安全保証性の定義
226+
~~~~~~~~~~~~~~~~~~
227+
228+
さらに,BT が安全であるだけでなく,FTS であり,その Success 領域 :math:`S` を取り巻く初期化領域 :math:`I` が次を満たすとき,その BT は安全保証性をもつという.
229+
230+
.. math::
231+
232+
\{x\in X \subset \mathbb{R}^n: \inf_{s\in S} || x-s || \leq d \} \subset I,
233+
234+
ここで :math:`d` は,他の BT が 1 ステップで動ける最大距離,:math:`X` は到達可能な状態空間である.
235+
この条件があると,後段のBTが Success 領域 :math:`S` を出ても,ただちに安全マージン :math:`I` に入り,障害領域 :math:`O` に直接飛び込むことができない.
236+
237+
Sequence 合成の安全性
238+
~~~~~~~~~~~~~~~~~~~~
239+
240+
:math:`\mathcal{T}_1` が障害領域 :math:`O_1`,初期化領域 :math:`I_1`,マージン :math:`d` に関して安全保証性をもち,
241+
:math:`\mathcal{T}_2` が
242+
243+
.. math::
244+
245+
\max_x ||x-f_2(x)||<d
246+
247+
を満たす任意の BT なら,
248+
249+
.. math::
250+
251+
\mathcal{T}_0=\mbox{Sequence}(\mathcal{T}_1,\mathcal{T}_2)
252+
253+
:math:`O_1` と :math:`I_1` に関して安全である.
254+
255+
要するに,前段の BT を「安全監視器」として置いておけば,後段のタスクBTが多少自由に動いても,1 ステップで安全領域を飛び越えない限り,全体の安全性を保てる.
256+
257+
チャタリング
258+
-------------
259+
260+
BT の切替境界では,2 つの部分木が交互に選ばれてチャタリングが起こることがある.
261+
Sequence 合成 :math:`\mathcal{T}_0=\mbox{Sequence}(\mathcal{T}_1,\mathcal{T}_2)` に対し,境界関数 :math:`s(x)` を用いて
262+
263+
.. math::
264+
265+
\lambda_i(x)=\left(\frac{\partial s}{\partial x}\right)^\top (f_i(x)-x).
266+
267+
とおくと,十分小さい :math:`\Delta t` のもとで,境界上の点 :math:`x \in \delta S_1` が chatter free であるための十分条件は
268+
269+
.. math::
270+
271+
\lambda_1(x)<0 \ \mbox{or} \ \lambda_2(x)>0
272+
273+
である.これは,少なくとも片側のベクトル場が切替境界から外向きに向いていれば,不要な往復切替を避けやすいことを意味する.

source/toc/main.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
計算理論
2+
==================
3+
4+
.. toctree::
5+
:maxdepth: 2
6+
:caption: Contents:
7+
8+
bt

0 commit comments

Comments
 (0)