Bread Board

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

編集時Ver 2.4.7.6

概要

本ページではブレッドボードの解説を行います。
ブレッドボードはACBでは入力/出力が1:1でしか行えない所を複数対複数で処理できるブロックです。
簡単に言うと内部にACB回路が組める集積回路ブロックです。
複雑な回路を1ブロックで賄えるため場所を取らないので内部構造に余裕が無い小型ビークル等に特に有用です。もちろん複雑すぎて普通にACBで制御したら混線する恐れがある物を一纏めにしてもいい。
ただし、たった一つのブロックで多くの機能を賄えるということは、それが何かしらの理由で機能停止に追い込まれた場合、賄っている全機能が一撃で全てダウンすることの裏返しでもあります。
考えなしに使うと急所を増やすことにも繋がるので、ご利用は計画的に。
ブレボ.jpg

使い方

まず基本操作としてデフォルトキー設定ならばShift+マウスホイールでそのカーソルがある部分を拡大移動します。
左クリックで選択した状態で任意のグリッドの十字位置に右クリックすることで一つ一つのノード(節)の移動が可能です。
接続端子部分は左クリックで選択して右クリックで出力のどの機能に対して接続するかを選択することで接続が可能になります。
消したい場合は接続端子を選択してリムーブリンクでそのリンクが外れます。

  • 出力としてDriveなら接続端子部分が3つ存在し、上からFirst,Second,Third Driveとなっています。
    また、Roll、Pitch、Yawの角度は以下の図通りです
    Roll.jpgPitch.jpgYaw.jpg

具体的な使用方法

BB1.jpg
まず大雑把な説明ですが右の欄には入力と出力(演算)が存在し、左の欄には実際にサーキットを組むためのサーキットボードが存在します。
BB2.jpg
ではためしにFirstDriveに出力を行ってみます。

  • 定常値はLUAをやっている方なら知っている方が多いと思いますがDriveFunctionの最大値が1なので1%として0.01とします。
  • ①Constantを配置し、0.01を入力、次にDriveを配置します。
  • ②今回はFirstDrive出力を行いたいのでConstantの接続端子からDriveの一番上の入力末端に接続します。※左クリックで選択で右クリック
  • ③こうすると接続が完了し、FirstDriveに対して出力が開始されます。
    さあこれでわかりましたね!!
    では味気ないので2秒に一回80%の出力を発生させて、50%の出力に下げてみましょう。

BB4.jpg

できましたでしょうか、分からなければもう一度上からお読みください

ノード説明

インプット

英名名称、説明
Constant名称定数
説明定数の設定、固定値
Altitude名称自機高度
Altitude above average sea level説明平均海面高からの自機高度を出力
Altitude above wave level説明波の高さからの自機高度を出力
Altitude above terrain説明地面からの自機高度を出力
Altitude above terrain and average sea level説明地面からかつ平均海面高からの自機高度(標高)を出力
Orientation input名称時機方位
Roll説明重心点のロール角度(左右の傾き)を出力
Pitch説明重心点のピッチ角度(前後の傾き)を出力
Yaw説明重心点のヨー角度(方位)を出力
Time名称時間
Total説明自ビークルが出現してからの総時間を出力
Delta説明FtDの1フレーム周期でON出力(常にONと一緒)
Timer説明設定したTimer reset time周期ごとにON出力
Propulsion名称推進(現ドライブ値を取得)
Main説明現在のMainのドライブ値を出力
Secondary説明現在のSecondaryのドライブ値を出力
Tertiary説明現在のTertiaryのドライブ値を出力
Forwards\Back説明現在の前進/後退のドライブ値を出力
Strafe Righ/Left説明現在の左側面/右側面移動のドライブ値を出力
Hover Up/Down説明現在の上面/下面移動のドライブ値を出力
Roll Right/Left説明現在の右/左ロールのドライブ値を出力
Pitch Up\Down説明現在の上/下ピッチのドライブ値を出力
Yaw Right/Left説明現在の右/左ヨーのドライブ値を出力
A説明現在のAのドライブ値を出力
B説明現在のBのドライブ値を出力
C説明現在のCのドライブ値を出力
D説明現在のDのドライブ値を出力
E説明現在のEのドライブ値を出力(※A~Eドライブってなんやねん!て方はビークルコントローラーを見てね!)
Complex Control名称コンプレックスコントロール
none説明どんな操作を受けてもON出力を出さない
T説明コンプレックスコントローラT入力時ON出力
G説明コンプレックスコントローラG入力時ON出力
Y説明コンプレックスコントローラY入力時ON出力
H説明コンプレックスコントローラH入力時ON出力
U説明コンプレックスコントローラU入力時ON出力
J説明コンプレックスコントローラJ入力時ON出力
I説明コンプレックスコントローラI入力時ON出力
K説明コンプレックスコントローラK入力時ON出力
O説明コンプレックスコントローラO入力時ON出力
L説明コンプレックスコントローラL入力時ON出力
up説明コンプレックスコントローラ↑入力時ON出力
down説明コンプレックスコントローラ↓入力時ON出力
left説明コンプレックスコントローラ←入力時ON出力
right説明コンプレックスコントローラ→入力時ON出力
Flagship info名称旗艦ビークル情報
第一出力末端説明自ビークルではなく他ビークルが旗艦なのか(そうならば1を出力,なければ0を出力)
第二出力末端説明旗艦ビークルとの自ビークル距離値を出力
第三出力末端説明旗艦ビークルの高度(ワールドの高度)値を出力
第四出力末端説明旗艦ビークルとの自ビークル相対方位を出力

コンポーネント

出力系

ノード名名称、説明
Printer英名プリンタ
説明第一入力末端の入力値を表示する。ノードの大きさはwidth*height、表示内容は入力値。出力末端は最大で5つですべて同じ値を出力する
width説明ノードの幅
height説明ノードの高さ
Display string説明"{0}"という記載をすると、入力値をテキストの間に挟むことができる。例:入力30の時、「現在"{0}"入力中」→現在30%入力中と表示される
Propulsion名称推進(ドライブ値を設定)
説明第一から第五入力末端の総和をドライブ値として設定する。Drive版と違うのは総和なのでノード、ボードを複数設けてもよい点(1つのボードにノードは140個までなのでボードを跨ぐこともあるv2.6.1で990個に増加)
Main説明Mainのドライブ値を設定
Secondary説明Secondaryのドライブ値を設定
Tertiary説明現在のTertiaryのドライブ値を設定
Forwards\Back説明現在の前進/後退のドライブ値を設定
Strafe Righ/Left説明現在の左側面/右側面移動のドライブ値を設定
Hover Up/Down説明現在の上面/下面移動のドライブ値を設定
Roll Right/Left説明現在の右/左ロールのドライブ値を設定
Pitch Up\Down説明現在の上/下ピッチのドライブ値を設定
Yaw Right/Left説明現在の右/左ヨーのドライブ値を設定
A説明現在のAのドライブ値を設定
B説明現在のBのドライブ値を設定
C説明現在のCのドライブ値を設定
D説明現在のDのドライブ値を設定
E説明現在のEのドライブ値を設定(※A~Eドライブってなんやねん!て方はビークルコントローラーを見てね!)
Drives英名ドライブ
説明第一入力末端の値をMain/Primaryのドライブ値、第二入力末端の値をSecondaryのドライブ値、第三入力末端の値をTertiaryのドライブ値を設定する。Propulsionと違うのは同時に3つ入力が一つのノードで出来るところ
第一入力末端説明入力値をMain/Primaryのドライブ値に設定
第二入力末端説明入力値をSecondaryのドライブ値に設定
第三入力末端説明入力値をTertiaryのドライブ値に設定

中間演算系

ノード名名称、説明
Multiply英名乗算
説明入力値を±10.0の範囲で乗算を行う。出力末端は最大2つですべて同じ値を出力する
Switch名称スイッチ
説明第二入力末端にON入力を受けた時、Open valueの値をThreshold秒間出力する。出力を受けていない時は第一入力末端の値を出力する。出力末端は最大5つ ※入力間隔と出力間隔を同期したい場合は設定しているThreshold秒以上の越える必要がある。
Open value説明出力値
Threshold説明閾値(出力時間)
Sum名称総和
説明第一から第五入力末端からの入力値を総和し、出力する。出力末端は最大5つですべて同じ値を出力する
PID Controller名称比例、積分、微分制御
説明第一入力末端に入力された入力値を第二入力末端の数値になるようPID制御する(出力値は0.00~1.00)。出力末端は最大で5つですべて同じ値を出力する
Gain説明目標値へ向かう強度
Integral time説明目標値へ向かう際の持続的なズレ補正強度
Derivative time説明目標値へ向かう際の瞬間的なズレ補正強度
Clamp名称絞り
説明第一入力末端に入力された入力値をMinimum valueからMaximum valueの範囲を越えないよう出力する。出力末端は最大で5つですべて同じ値を出力する
Minimum value説明最低値、これ以下の場合は設定した最低値を出力する
Maximum value説明最大値、これ以上の場合は設定した最大値を出力する
Differencer名称差異
説明入力値の1フレームあたりの変化速度を出力する。入力・出力末端は1つのみ
Maths Evaluator名称演算評価
説明第一入力末端から第五入力末端からの入力をExpession内に記述された式で演算し、その値を出力する。出力末端は最大で5つで、式が1個ならすべて同じ値を出力する
第一入力末端説明入力値は式の変数aとなる
第二入力末端説明入力値は式の変数bとなる
第三入力末端説明入力値は式の変数cとなる
第四入力末端説明入力値は式の変数dとなる
第五入力末端説明入力値は式の変数eとなる
Expression説明ここに記述された式の演算を行う 例:a=3 b=10 c=1の時、(a*b)/c → 出力値30  複数の式をまとめる時、(a*b)/c,a+b+c → 第一出力末端の出力値30、第二出力末端の出力値14
Icon width説明ノードの幅を0~200ピクセルの間で設定する
Show documentation説明ここに各演算子や入力変数名、関数などの説明がある内容については以下の通りである
Constants/Inputs説明以下定数と入力値(オペランド)
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値に置き換える
vector Angle(x,y)説明xベクトルとyベクトルの2点間の角度を求める
number output(x)説明ノードが前回出力した値を出力する。例:第一出力末端=10 第二出力末端=12の時、output(1)→10を返答 output(2)→12を返答

AI Breadboardにのみあるノード

インプット

ノード名名称、説明
Primary target info英名現照準中情報
説明今ターゲットにしている敵と自ビークルとの情報
第一出力末端説明目標が存在すれば1、なければ0を出力
第二出力末端説明目標との距離(m)を出力、なければ0を出力
第三出力末端説明目標の高度(m)を出力、なければ0を出力
第四出力末端説明自ビークルから見た目標の方位角度を出力
Steering point info英名操舵点情報
説明AIがvehicleの操作を始める点の情報
第一出力末端説明操舵点が存在していれば1、なければ0を出力(マニューバ設定の有無)
第二出力末端説明操舵を開始する目標との距離(m)を出力
第三出力末端説明操舵を開始する目標の高度を出力
第四出力末端説明操舵を開始する自ビークルから見た目標の方位角度を出力

コンポーネント

中間演算系

ノード名名称、説明
Behaviour selecto英名ビハーバ選択
説明現在AIに設定されているビハーバを選択する。-1以下又は1以上で指定したビハーバを稼働、0で停止。(ビハーバの追加/削除後は再度ノードを張り付ける必要がある。やらないとnoneかmissingに)稼働中は1を出力、停止中は0を出力する
Manoeuvre selector英名マニューバ選択
説明現在AIに設定されているマニューバを選択する。-1以下又は1以上で指定したマニューバを稼働、0で停止。(マニューバの追加/削除後は再度ノードを張り付ける必要がある。やらないとnoneかmissingに)稼働中は1を出力、停止中は0を出力する

実用例

output関数は数を覚えておける関数です。
ちょっと前のことが分かると言ったほうがいいかもしれません。"メモリ"として使うには一工夫必要です。
〇書き方とはたらき

書き方とはたらき

このように書きます。

output(1)

1式目にaを出力し、2式目の出力を見ます。
また|1+1,1-1|のようにカンマで式を区切ることで一つのノードで複数の式を共存させることが出来ます。
出口を式の数だけ増やすと、例の式なら一番目から2が、二番目から0が出力されます。
output(ア)のアは参照する出口を指定するものです。
1を入力

1.gif

出力は1でした。

 

入力する数が1,2,3…と増えていくとどうでしょうか。
1234.gif

一時停止で注意して見ると、出力が入力より一拍遅れています。

 

output関数は"出力の一瞬過去"の数字を出力しているのです。ですから、始めに1を入力した時も0が1に変わるのに一拍の遅れがありました。
具体的に一瞬とは、デルタタイムという時間の最小単位で約0.02秒程です。

〇メモリにするための一工夫

メモリにするための一工夫
 

記憶が一瞬では困るので、覚えていられるよう工夫してみましょう。
以下は作例です。
出口が複数あるものは最後の出口が目的の出力です

 
  • 覚えたり忘れたりを制御するために入力b増やしました。
     
    普段はaをそのまま出力、b入力でその時点のaを保持します。
    b?output(1):a
     
    普段はaをそのまま出力、b入力でその時点のaを保持します。
    入力入力の説明数式出力出力の説明
    a保持したい数b?output(1):aoutput(1)a⇔aを保持
    b保持と忘却(0か否か)
    普段は0を出力、b入力でその時点のaを保持します。bが0になると0に戻ります。
    入力入力の説明数式出力出力の説明
    a保持したい数b?output(1):a,b?output(1):0output(1)a(内部利用)
    b保持と忘却(0か否か)output(2)0⇔aを保持
    最初は0を出力、b入力でその時点のaを保持します。0経てbを再び入力すると、その時点のaに更新します。
    入力入力の説明数式出力出力の説明
    a保持したい数b?output(1):a,b?output(1):output(2)output(1)a(内部利用)
    b保持と忘却(0か否か)output(2)0⇒aを保持⇒保持内容を更新
     
  • 入力cを増やして"覚える"と"忘れる"を分けました。
     
    最初は0を出力、b入力でその時点のaを保持します。c入力で0に戻ります。(b優先)
    入力入力の説明数式出力出力の説明
    a保持したい数b?output(1):a,b?output(1):output(2)*!coutput(1)a(内部利用)
    b保持(0か否か)output(2)0⇔a
    c忘却(0か否か)
    最初は0を出力、b入力でその時点のaを保持します。c入力で0に戻ります。(c優先)
    入力入力の説明数式出力出力の説明
    a保持したい数b?output(1):a,b?output(1)*!c:output(2)output(1)a(内部利用)
    b保持(0か否か)output(2)0⇔a
    c忘却(0か否か)
    ↑の異式。(c優先)
    入力入力の説明数式出力出力の説明
    a保持したい数b?output(1):a,c?0:b?output(1):output(2)output(1)a(内部利用)
    b保持(0か否か)output(2)0⇔a
    c忘却(0か否か)
     
  • 入力は増やさず数の状態を条件にしました。
     
    aが0になると、aが0でなくなるまで0になる前のaを保持します。
    入力入力の説明数式出力出力の説明
    a0以外の保持したい数
    0で保持
    a+!a*output(1)output(1)a⇔aを保持
    普段は0を出力、aが0になると0になる前のaを保持します。
    入力入力の説明数式出力出力の説明
    a0以外の保持したい数
    0で保持
    a,!a*(output(1)+output(2))output(1)a(内部利用)
    output(2)0⇔aを保持
    aが変化すると変化前のaを次の変化まで保持します。
    入力入力の説明数式出力出力の説明
    a保持したい数
    数の変化で保持
    a,!(a=output(1))*output(1)+(a=output(1))*output(2)output(1)a(内部利用)
    output(2)0⇒aを保持⇒保持内容を更新
    aが前回より大きければ更新します。
    入力入力の説明数式出力出力の説明
    a保持したい数
    保持内容を上回ると更新
    a>output(1)?a:output(1)output(1)0⇒aを保持⇒保持内容を更新
    aが前回より大きければ更新します。b入力で0に戻ります。
    入力入力の説明数式出力出力の説明
    a保持したい数
    前回を超えると更新
    a>output(1)?a:output(1)*!boutput(1)0⇒aを保持⇒保持内容を更新
    b忘却(0か否か)

〇メモリを応用してタイマーを作ろう

メモリを応用してタイマーを作ってみよう

何秒から数え始めたかをメモリで覚えておけばタイマーが作れそうです。
以下は作例です。
出口が複数あるものは最後の出口が目的の出力です

 
a入力からc秒間1を出力。
入力入力の説明数式出力出力の説明
aタイマー開始(0か否か)a?b+c:output(1),output(1)>boutput(1)保持開始タイムに任意の秒数を足したもの(内部利用)
bTotal(Timeのタブにあります)output(2)0⇒1(C秒間)⇒0
c任意の秒数
a入力からc秒後に一瞬1を出力。
入力入力の説明数式出力出力の説明
aタイマー開始(0か否か)a?b+c:output(1),output(1)=boutput(1)保持開始タイムに任意の秒数を足したもの(内部利用)
bTotal(Timeのタブにあります)output(2)0(C秒間)⇒1(一瞬)⇒0
c任意の秒数
普段は1を出力、a入力からc秒間だけ0を出力。
入力入力の説明数式出力出力の説明
aタイマー開始(0か否か)a?b+c:output(1),output(1)<boutput(1)保持開始タイムに任意の秒数を足したもの(内部利用)
bTotal(Timeのタブにあります)output(2)1⇒0(C秒間)⇒1
c任意の秒数

〇ラッチを作ってみよう

ラッチを作ってみよう

スイッチを押している間だけしか部屋の明かりが点かなかったら大変不便ですね。a=1といった条件分岐だけではそんなスイッチになってしまいます。
ここまでは数字を覚える"メモリ"でしたが、次はONかOFFかだけのスイッチ、"ラッチ"です。
条件を満たしたことを覚えていられるよう工夫してみましょう。
以下は作例です。
出口が複数あるものは最後の出口が目的の出力です

 
a入力でON、aが0になってもONを保持します。bが入力でOFFにします。(OFF優先)
入力入力の説明数式出力出力の説明
aON(0か否か)(a+output(1))*!b>0output(1)0⇔1
bOFF(0か否か)
ON優先
入力入力の説明数式出力出力の説明
aON(0か否か)(a+!b*output(1))>0output(1)0⇔1
bOFF(0か否か)
OFF優先
入力入力の説明数式出力出力の説明
aON(0か否か)b?0:a?1:output(1)output(1)0⇔1
bOFF(0か否か)
ON優先
入力入力の説明数式出力出力の説明
aON(0か否か)a?1:b?0:output(1)output(1)0⇔1
bOFF(0か否か)
OFF優先
入力入力の説明数式出力出力の説明
aON(0か否か)b?0:a|output(1)output(1)0⇔1
bOFF(0か否か)
ON優先
入力入力の説明数式出力出力の説明
aON(0か否か)a?1:output(1)*!boutput(1)0⇔1
bOFF(0か否か)
 

メモリに似た機能ですが変化する数を保持せず済むのでメモリより短く書けます。
ONかOFFだけ保持するので、可否を0と1で表すタイプの演算子と相性が良いです。
ONは0でなければいいというのも楽チンです。

〇カウンタを作ろう。

カウンタを作ろう

output(1)+1と書くとどうなるのでしょうか。
鳥を数えるカチカチ、カウンタを作ってみましょう。

 
output(1)+1
 

前回の出力に1を足して出力すると書いてあるので、どんどん数が増えていきます。
これを一瞬だけ作動させて1づつ足そうと思います。
以下が作例です。
出口が複数あるものは最後の出口が目的の出力です

 
  • まず一瞬だけ作動する式を考えます。
    a入力で一瞬だけ1を出力します
    入力入力の説明数式出力出力の説明
    a作動(0か否か)!a,a?output(1):0output(1)aが0の間は1を出力します(内部利用)
    output(2)0⇒1(一瞬)⇒0
    ↑の異式
    入力入力の説明数式出力出力の説明
    a作動(0⇔1)a,a>output(1)output(1)aを出力します(内部利用)
    output(2)0⇒1(一瞬)⇒0
     
  • 次に入力中は数が増加し、入力が無いときは数を保持する式を考えます。
    a入力で出力がデルタタイムごとに+1し、a入力が0のときは現在の数を保持します。
    入力入力の説明数式出力出力の説明
    a開始(0か否か)a?output(1)+1:output(1)output(1)0,1,2,3…
    a入力で出力がデルタタイムごとに+1し、a入力が0のときは現在の数を保持します。b入力で0に戻ります。
    入力入力の説明数式出力出力の説明
    a開始(0か否か)b?0:a?output(1)+1:output(1)output(1)0⇔0,1,2,3…
    b忘却(0か否か)
     
  • 二つの式を繋ぐとカウンターになります。
    a,a>output(1)_output(2)を接続_a?output(1)+1:output(1)
     
  • 式を一つにまとめました。
    aが0から1に変わる度に+1します。
    入力入力の説明数式出力出力の説明
    aカウントする信号(0⇔1)a,(a>output(1))+output(2)output(1)aを出力(内部利用)
    output(2)0,1,2,3…
    aが0から1に変わる度に+1します。b入力で0に戻ります。
    入力入力の説明数式出力出力の説明
    aカウントする信号(0⇔1)a,b?0:(a>output(1))+output(2)output(1)aを出力(内部利用)
    b忘却(0か否か)output(2)0⇔0,1,2,3…
    aが0から1に変わる度に+1します。上限bに達すると0に戻ります。
    入力入力の説明数式出力出力の説明
    aカウントする信号(0⇔1)a,b=output(2)?0:(a>output(1))+output(2)output(1)aを出力(内部利用)
    bカウントの上限output(2)0⇒0,1,2,3…b⇒0
    aが変動する度に+1します。b入力で0に戻ります。
    入力入力の説明数式出力出力の説明
    aカウントする信号a,b?0:!(a=output(1))+output(2)output(1)aを出力(内部利用)
    b忘却(0か否か)output(2)0⇔0,1,2,3…

〇自機と敵機の高度を比較し、PIDへ出力。

自機と敵機の高度を比較し、PIDへ出力
  • AI接続タイプ
    高度を最低100m、敵機がそれ以上なら自機は+30mする動作です。例外処理はきついので無視してます。
    AIbrad_TargetAlt_sample_01.png

コメント

  • 乙です!わかりやすい素敵! -- EMR? 2019-10-14 (月) 17:08:25
    • DrivesとPropulsionに補足ですが、複数入力があった場合に前者は値を上書き(或は動作不良?)、後者は値を加算します。 -- EMR? 2019-10-14 (月) 17:17:35
    • Maths Evaluatorの出力末端は複数の式をカンマで区切って書き、式の数だけ末端を増やしてあげると前から順に出力されます。 -- EMR? 2019-10-14 (月) 17:23:53
      • "a+b,b+c"で1番目の末端からa+b、2番目からはb+cの結果が出力されます。 -- EMR? 2019-10-14 (月) 17:39:00
      • 関連して、number output(x)はどの末端から前回出力した値を出力するかを(x)に数字で書いて指定できます。 -- EMR? 2019-10-14 (月) 17:35:00
      • なので"a+b,b+c,output(2)"と書けば末端からは、1番a+b、2番b+c、3番1フレーム前までのb+cを出力となるそうで。 -- EMR? 2019-10-14 (月) 17:51:53
  • あじゃじゃいますうう! -- うぃれ? 2019-10-17 (木) 20:28:56
    • 編集できれば追加オナシャス!!( -- うぃべ? 2019-10-17 (木) 20:29:55
      • 編集経験と整った作文りょくがないのれす!!やるだけやってみます -- EMR? 2019-10-19 (土) 01:28:20
      • Propulsion、Maths EvaluatorとExpression、number output(x)の箇所に追加しました。やって実感、wikiを編集なさる方の尊さ…! -- EMR? 2019-10-19 (土) 03:38:18
      • アジャイマアアス!!さぁ仲間入りを( -- うぃべ? 2019-10-20 (日) 12:51:16
      • 調査ありがとうございます。参考例貼ってみました。もっときれいにしたいですが、ひとまず実例とか見れたら楽な人もいるかなと思って。もしかしたらツールで作成したほうよいのかもしれないですね。 -- 2019-10-21 (月) 23:55:13
      • 具体的な使用方法に移動させときますねー -- 2019-12-15 (日) 20:57:30
  • output関数についての解説を作ってみました。 -- EMR? 2019-12-31 (火) 04:10:55
    • 「便利なoutput関数」の作例にrubyさん作テンプレートを改変して適用しました。-- EMR? 2020-01-01 (水) 23:49:56
    • 式の誤りを修正しました。 -- EMR? 2020-01-01 (水) 23:52:40
    • 目次から飛べるように展開内の題だけ外に出しました。 -- EMR? 2020-01-01 (水) 23:54:15
  • 船底の左右にスクリューを取り付け、左舷側をroll_rightにし、右舷側をroll_leftに設定した場合、通常のPIDブロックでは問題なくroll角の制御が出来るのですが、bread_boadのPID機能を使用する場合、左舷と右舷のスクリューの設定を逆にしないと上手くいきません。バグなのでしょうか? -- 2020-01-03 (金) 22:27:51
    • たしかブレボではロールの扱いが逆だったと思います。 -- EMR? 2020-01-11 (土) 13:51:29
  • v2.6.1でノード制限が140から990になったため該当記述を修正。 -- EMR? 2020-06-24 (水) 20:12:01
  • 一部スタイルが崩れていたのと誤字脱字の修正、可読性が悪くなっていた部分を修正しました -- うぃべ? 2020-06-29 (月) 02:18:14
  • switch使って「普段はゼロでGキーが入力されたらn秒間1を出力するよ」というのを作りたいんですが、第二にゼロ入力してるはずなのに何故か1がずっと出力されっぱなしになってしまいます。Timerだと指定秒ごとに起動。コレ何をもってON入力と扱われるんですかね……? -- 2020-09-21 (月) 01:21:00