Bread Board初心者用補足

Last-modified: 2023-08-30 (水) 00:31:43

編集時Ver3.1.2.4
Bread Boardの基礎的な部分の補足です。

bread0.jpg

1.ブレッドボードができること

ACBが 情報入力→機器に出力 をするブロックだとすると、
ブレッドボードは 情報入力→計算→命令を出力 ができるブロック。
例えばビークルの高度を取得し、低ければ船首を上げ、高ければ船首を下げることなどができる。


数値の扱いにとても長けていて、ややこしい条件分岐などもこなす。
複数のACBの機能をひとまとめに代替することもできるので便利。

2.ブレッドボードにできないこと

出力が貧弱で、ACBのように機器を直接動かすことはできず、ドライブ値しか出力できない。
このため、スピンブロックやジェットなどのようにスラスタ用のドライブ値を受け取ることができるブロックしか操作できないことに注意する。*1
bread3_1.jpg
入力情報はかなり豊富に取れる。
AIの目指しているヨー・ピッチ・ロールが取得できないので、原則AIPIDの代替はできない。

3.各部名称

四角いものがコンポーネント。*2
これらをリンク*3で左から右に情報をつないで渡していく。
bread1_1.jpg
Maths Evaluatorが万能なのでMultiply・Switch・Sum・Clampは無理して使わなくてもよい。
PropulsionはDrivesの機能も持っている。

4.操作方法

bread4.jpg

  1. 右のボタンをクリックで新規コンポーネントが左上に出現する。
  2. コンポーネントを左クリックで選択し、
  3. 右クリックで指定した位置に移動する。
  4. 右上のボタンをクリックで削除できる(Delキーでも可)。

bread5.jpg

  1. コンポーネントの右上のアウトプットを選択し、
  2. 他のコンポーネントの左上のインプットをクリックでリンクをつなぐ。
  3. 右上のボタンをクリックで削除できる(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の数値に代入されて計算される。
bread6.jpg

5-2.if文の使い方

if(条件, 真のときの値, 偽のときの値) というふうに使う。Switchよりも使いやすい。
下は水深によってピッチを調整してみた例。
bread7_1.jpg

5-3.output()の使い方

Bread Board本家ページに詳しく書いてある。
output(1)+1はビークル出現からのフレーム*4数をカウントできて特に便利なので覚えておこう。

6.作成例

6-1.後進ハイドロフォイル

3.2.9にて後進にも対応しました
まず、ブレッドボードを介してハイドロフォイルを操作してみよう。
bread11.jpg
ハイドロフォイルをロール用に設定し、


bread12.jpg
Orientation/Maths Evaluatorコンポーネントを使って条件分岐を書く。
if文を入れ子にして左ロール・右ロール・何もしないの3つの状態を切り替えている。
if(条件1, 条件1のときの値, if(条件2, 条件2のときの値, どちらでもないときの値)) のように書いている。


ここからさらに後進の場合に対応していこう。
ふつうハイドロフォイルはバックの場合に逆向きの力が出てしまい船のバランスを崩してしまう。
bread13.jpg
符号を求める関数sign()を使って、
後進の場合はハイドロフォイルを逆に操作するようにかけ算をしてやるとうまくいく。
Propulsion(入力版)とPropulsion(出力版)の見た目が紛らわしいので気を付けて。

6-2.PIDの代わり

AIPIDの代わりはできないが、General Purpose PIDの代わりはできる。
bread8_1.jpg
GPPIDでのロール制御をブレッドボードで行うときは、
PID/Orientation/Constantコンポーネントを用いてこのように書くことができる。
bread9_1.jpg
ブレッドボードでは出力値が反転することがあるため、そんなときは設定を左右逆にしておくとよい。


bread10.jpg
さらに計算を加えていくこともできる。
速度が小さいときに、エルロンの効きを強めるように書いた例。


Constantの目指す値の部分にも計算式を入れればより変幻自在に制御をすることができる。
敵の高度に合わせてこちらの高度を調整したり、色々と試してみよう。

コメント

  • 個人的に必要だと思う部分を全力で捕捉しました。分かりやすさのため元ページと書き方がちがう部分がありますのでご注意ください。 -- sosu2357? 2020-12-15 (火) 01:28:36
  • 見やすい!わかりやすい!たのしい!ステキ! -- EMR? 2020-12-15 (火) 21:50:47

*1 AIブレッドボードはこれに加えマニューバとビヘイビアの切り替えができる
*2 元の記事ではノードと書いているところもある
*3 元の記事ではジャンパワイヤと書いているところもある
*4 フレームというのはFtDの最小時間で、1/40=0.025秒