編集時Ver3.1.2.4
Bread Boardの基礎的な部分の補足です。
1.ブレッドボードができること
ACBが 情報入力→機器に出力 をするブロックだとすると、
ブレッドボードは 情報入力→計算→命令を出力 ができるブロック。
例えばビークルの高度を取得し、低ければ船首を上げ、高ければ船首を下げることなどができる。
数値の扱いにとても長けていて、ややこしい条件分岐などもこなす。
複数のACBの機能をひとまとめに代替することもできるので便利。
2.ブレッドボードにできないこと
出力が貧弱で、ACBのように機器を直接動かすことはできず、ドライブ値しか出力できない。
このため、スピンブロックやジェットなどのようにスラスタ用のドライブ値を受け取ることができるブロックしか操作できないことに注意する。*1
入力情報はかなり豊富に取れる。
AIの目指しているヨー・ピッチ・ロールが取得できないので、原則AIPIDの代替はできない。
3.各部名称
四角いものがコンポーネント。*2
これらをリンク*3で左から右に情報をつないで渡していく。
Maths Evaluatorが万能なのでMultiply・Switch・Sum・Clampは無理して使わなくてもよい。
PropulsionはDrivesの機能も持っている。
4.操作方法
- 右のボタンをクリックで新規コンポーネントが左上に出現する。
- コンポーネントを左クリックで選択し、
- 右クリックで指定した位置に移動する。
- 右上のボタンをクリックで削除できる(Delキーでも可)。
- コンポーネントの右上のアウトプットを選択し、
- 他のコンポーネントの左上のインプットをクリックでリンクをつなぐ。
- 右上のボタンをクリックで削除できる(Delキーでも可)。
5.Maths Evaluatorの使い方
足し算、かけ算からベクトル解析までこなす最強のコンポーネント。
計算式一覧
Bread Boad
Pi | 説明 | 円周率(3.14) |
Right | 説明 | x方向のベクトル成分(1をセット) 例:Right*10 出力(10.0 0.0 0.0) |
Up | 説明 | y方向のベクトル成分(1をセット)例:Right*10 出力(0.0 10.0 0.0) |
Forward | 説明 | z方向のベクトル成分(1をセット)例:Right*10 出力(0.0 10.0 0.0) |
a | 説明 | 第一入力末端入力値 |
b | 説明 | 第二入力末端入力値 |
c | 説明 | 第三入力末端入力値 |
d | 説明 | 第四入力末端入力値 |
e | 説明 | 第五入力末端入力値 |
Operators | 説明 | 以下演算子(オペレータ)例はa=10 b=10とするnumberは数値、vectorはそのベクトル成分値Maths evaluator documentation内のx,yは数字、v,wはベクトルですが今回は全部x,y値とします。 |
vectorとnumber対象の共通演算子 | ||
number x + number y | 説明 | 数加算 例 式:a + b 出力: 20 |
vector x + vector y | 説明 | ベクトル加算 例 式:Right-Rgiht 出力: 20.0(x方向ベクトル成分) |
number x - number y | 説明 | 数減算 例 式:a - b 出力: 0 |
vector x - vector y | 説明 | ベクトル減算 例 式:a - b 出力: 0.0(x方向ベクトル成分) |
number x * number y | 説明 | 数乗算 例 式:a * b 出力: 100 |
vector x * vector y | 説明 | ベクトル乗算 例 式:Right * Rgiht 出力: 100.0(x方向ベクトル成分) |
number x / number y | 説明 | 数除算 例 式:a / b 出力: 1 |
vector x / vector y | 説明 | ベクトル除算 例 式:Right / Rgiht 出力: 1.0(x方向ベクトル成分) |
number x % number y | 説明 | 数除算余り 例 式:a % b 出力: 0 |
vector x % vector y | 説明 | ベクトル除算余り 例 式:Right % Rgiht 出力: 0.0(x方向ベクトル成分) |
number x ^ number y | 説明 | 数冪 例 式:a = b 出力: 1E+10(10,000,000,000) |
vector x ^ number y | 説明 | ベクトル冪乗 例 式:a ^ b 出力: 1E+10(10,000,000,000) |
number x = number y | 説明 | aイコールb数比較 (正なら1,偽なら0) |
vector x = vector y | 説明 | aイコールbベクトル比較 (正なら1,偽なら0) |
number x != number y | 説明 | aノットイコールb数比較 (正なら1,偽なら0) |
vector x != vector y | 説明 | aイコールbベクトル比較 (正なら1,偽なら0) |
number x < number y | 説明 | a小なりb数比較 (正なら1,偽なら0) |
vector x < vector y | 説明 | a小なりbベクトル比較 (正なら1,偽なら0) |
number x > number y | 説明 | a大なりb数比較 (正なら1,偽なら0) |
vector x > vector y | 説明 | a大なりbベクトル比較 (正なら1,偽なら0) |
number x <= number y | 説明 | a小なりイコールb数比較 (正なら1,偽なら0) |
vector x <= vector y | 説明 | a小なりイコールbベクトル比較 (正なら1,偽なら0) |
number x >= number y | 説明 | a大なりイコールb数比較 (正なら1,偽なら0) |
vector x >= vector y | 説明 | a大なりbイコールベクトル比較 (正なら1,偽なら0) |
number -(x) | 説明 | 数に-符号を付与 |
vector -(x) | 説明 | 指定ベクトルに-符号を付与 |
number +(x) | 説明 | 数値が返ってくる |
vector +(x) | 説明 | 指定ベクトル値が返ってくる |
vectorのみ対象の演算子(numberを入れると0を出力) | ||
vector x x vector y | 説明 | ベクトル外積 例 式:Foward x Up 出力: -1.0(x方向ベクトル成分) |
numberのみ対象の演算子(vectorを入れると0を出力) | ||
number x │ number y | 説明 | aかbが-1以下又は1以上の時1を出力する |
number x & number y | 説明 | aとbが-1以下又は1以上の時1を出力する |
number x or number y | 説明 | aが0の時bの値を出力する。aが-1以下又は1以上の時aの値を出力する |
number x and number y | 説明 | aが-1以下又は1以上の時bの値を出力する |
number !x | 説明 | aが0の時1を出力、-1以下又は1以上の時0を出力する |
Properties | 説明 | ベクトルの構成要素 |
vector x.x | 説明 | ベクトルのx成分 例 a.x |
vector x.y | 説明 | ベクトルのy成分 例 a.y |
vector x.z | 説明 | ベクトルのz成分 例 a.z |
vector x.magnitude | 説明 | ベクトルの大きさ 例 a.magnitude |
vector x.sqrMagnitude | 説明 | 空間ベクトルの大きさ 例 a.sqrMagnitude |
Functions | 説明 | 関数処理 |
number Sqrt(x) | 説明 | 平方根 |
number Sin(x) | 説明 | サイン |
number Cos(x) | 説明 | コサイン |
number Tan(x) | 説明 | タンジェント |
number Asin(x) | 説明 | アークサイン |
number Acos(x) | 説明 | アークコサイン |
number Atan(x) | 説明 | アークタンジェント |
number Atan2(x,y) | 説明 | 空間軸とベクトルの角度アークタンジェント2 |
number Exp(x) | 説明 | ネイピア数 |
number Log(x) | 説明 | 自然対数 |
number Pow(x,y) | 説明 | xのy剰 |
number Abs(x) | 説明 | 絶対値 |
vector Abs(x) | 説明 | ベクトルの絶対値 |
number Round(x) | 説明 | 四捨五入 |
number Floor(x) | 説明 | 小数点切り捨て |
number Ceil(x) | 説明 | 小数点切り上げ |
number Max(x,y) | 説明 | xかyの最大値 |
number Max(x,y,z) | 説明 | xかyかzの最大値 |
number Min(x,y) | 説明 | xかyの最小値 |
number Min(x,y,z) | 説明 | xかyかzの最小値 |
vector Max(x) | 説明 | ベクトルxの最大成分値 |
vector Min(x) | 説明 | ベクトルxの最小成分値 |
構文系 | ||
If(式,true時,false時) | 説明 | If文 例 IF(a>0,10,3) aが0より大きいとき10,小さいときは3 |
vector Vector(x,y,z) | 説明 | ベクトル成分の設定 例 Vector(a,b,c) |
vector FromToRot(x,y) | 説明 | ベクトルの二点間の距離 |
number FromEuler(x,y,z) | 説明 | Pitch(x),Roll(y),Yaw(z)の角度からオイラー角を求める。x,y,zはOrientation inputから取得しなくても問題ない |
vector FromEuler(x) | 説明 | ベクトルのx,y,z成分からオイラー角を求める |
vector ToEuler(x) | 説明 | オイラー角からx,y,zの角度を求める |
vector setX(vector x,number y) | 説明 | ベクトルxのx成分をy値に置き換える |
vector setY(vector x,number y) | 説明 | ベクトルxのy成分をy値に置き換える |
vector setZ(vector x,number y) | 説明 | ベクトルxのz成分をy値に置き換える |
5-1.a,b,c,d,eって何?
インプットの左上から順にa,b,c,d,eの数値に代入されて計算される。
5-2.if文の使い方
if(条件, 真のときの値, 偽のときの値) というふうに使う。Switchよりも使いやすい。
下は水深によってピッチを調整してみた例。
5-3.output()の使い方
Bread Board本家ページに詳しく書いてある。
output(1)+1はビークル出現からのフレーム*4数をカウントできて特に便利なので覚えておこう。
6.作成例
6-1.後進ハイドロフォイル
3.2.9にて後進にも対応しました
まず、ブレッドボードを介してハイドロフォイルを操作してみよう。
ハイドロフォイルをロール用に設定し、
Orientation/Maths Evaluatorコンポーネントを使って条件分岐を書く。
if文を入れ子にして左ロール・右ロール・何もしないの3つの状態を切り替えている。
if(条件1, 条件1のときの値, if(条件2, 条件2のときの値, どちらでもないときの値)) のように書いている。
ここからさらに後進の場合に対応していこう。
ふつうハイドロフォイルはバックの場合に逆向きの力が出てしまい船のバランスを崩してしまう。
符号を求める関数sign()を使って、
後進の場合はハイドロフォイルを逆に操作するようにかけ算をしてやるとうまくいく。
Propulsion(入力版)とPropulsion(出力版)の見た目が紛らわしいので気を付けて。
6-2.PIDの代わり
AIPIDの代わりはできないが、General Purpose PIDの代わりはできる。
GPPIDでのロール制御をブレッドボードで行うときは、
PID/Orientation/Constantコンポーネントを用いてこのように書くことができる。
ブレッドボードでは出力値が反転することがあるため、そんなときは設定を左右逆にしておくとよい。
さらに計算を加えていくこともできる。
速度が小さいときに、エルロンの効きを強めるように書いた例。
Constantの目指す値の部分にも計算式を入れればより変幻自在に制御をすることができる。
敵の高度に合わせてこちらの高度を調整したり、色々と試してみよう。
コメント
- 個人的に必要だと思う部分を全力で捕捉しました。分かりやすさのため元ページと書き方がちがう部分がありますのでご注意ください。 -- sosu2357? 2020-12-15 (火) 01:28:36
- 見やすい!わかりやすい!たのしい!ステキ! -- EMR? 2020-12-15 (火) 21:50:47