編集時Ver 2.4.7.6
概要
本ページではブレッドボードの解説を行います。
ブレッドボードはACBでは入力/出力が1:1でしか行えない所を複数対複数で処理できるブロックです。
簡単に言うと内部にACB回路が組める集積回路ブロックです。
複雑な回路を1ブロックで賄えるため場所を取らないので内部構造に余裕が無い小型ビークル等に特に有用です。もちろん複雑すぎて普通にACBで制御したら混線する恐れがある物を一纏めにしてもいい。
ただし、たった一つのブロックで多くの機能を賄えるということは、それが何かしらの理由で機能停止に追い込まれた場合、賄っている全機能が一撃で全てダウンすることの裏返しでもあります。
考えなしに使うと急所を増やすことにも繋がるので、ご利用は計画的に。
使い方
まず基本操作としてデフォルトキー設定ならばShift+マウスホイールでそのカーソルがある部分を拡大移動します。
左クリックで選択した状態で任意のグリッドの十字位置に右クリックすることで一つ一つのノード(節)の移動が可能です。
接続端子部分は左クリックで選択して右クリックで出力のどの機能に対して接続するかを選択することで接続が可能になります。
消したい場合は接続端子を選択してリムーブリンクでそのリンクが外れます。
具体的な使用方法
まず大雑把な説明ですが右の欄には入力と出力(演算)が存在し、左の欄には実際にサーキットを組むためのサーキットボードが存在します。
ではためしにFirstDriveに出力を行ってみます。
- 定常値はLUAをやっている方なら知っている方が多いと思いますがDriveFunctionの最大値が1なので1%として0.01とします。
- ①Constantを配置し、0.01を入力、次にDriveを配置します。
- ②今回はFirstDrive出力を行いたいのでConstantの接続端子からDriveの一番上の入力末端に接続します。※左クリックで選択で右クリック
- ③こうすると接続が完了し、FirstDriveに対して出力が開始されます。
さあこれでわかりましたね!!
では味気ないので2秒に一回80%の出力を発生させて、50%の出力に下げてみましょう。
できましたでしょうか、分からなければもう一度上からお読みください
ノード説明
インプット
英名 | 名称、説明 | |
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版と違うのは総和なのでノード、ボードを複数設けてもよい点( | |
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でした。
一時停止で注意して見ると、出力が入力より一拍遅れています。
output関数は"出力の一瞬過去"の数字を出力しているのです。ですから、始めに1を入力した時も0が1に変わるのに一拍の遅れがありました。
具体的に一瞬とは、デルタタイムという時間の最小単位で約0.02秒程です。
〇メモリにするための一工夫
記憶が一瞬では困るので、覚えていられるよう工夫してみましょう。
以下は作例です。
出口が複数あるものは最後の出口が目的の出力です
- 覚えたり忘れたりを制御するために入力b増やしました。
b?output(1):a 普段はaをそのまま出力、b入力でその時点のaを保持します。 入力 入力の説明 数式 出力 出力の説明 a 保持したい数 b?output(1):a output(1) a⇔aを保持 b 保持と忘却(0か否か) 普段は0を出力、b入力でその時点のaを保持します。bが0になると0に戻ります。 入力 入力の説明 数式 出力 出力の説明 a 保持したい数 b?output(1):a,b?output(1):0 output(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)*!c output(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を保持します。 入力 入力の説明 数式 出力 出力の説明 a 0以外の保持したい数
0で保持a+!a*output(1) output(1) a⇔aを保持 普段は0を出力、aが0になると0になる前のaを保持します。 入力 入力の説明 数式 出力 出力の説明 a 0以外の保持したい数
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)*!b output(1) 0⇒aを保持⇒保持内容を更新 b 忘却(0か否か)
〇メモリを応用してタイマーを作ろう
何秒から数え始めたかをメモリで覚えておけばタイマーが作れそうです。
以下は作例です。
出口が複数あるものは最後の出口が目的の出力です
a入力からc秒間1を出力。 | ||||
---|---|---|---|---|
入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
a | タイマー開始(0か否か) | a?b+c:output(1),output(1)>b | output(1) | 保持開始タイムに任意の秒数を足したもの(内部利用) |
b | Total(Timeのタブにあります) | output(2) | 0⇒1(C秒間)⇒0 | |
c | 任意の秒数 | |||
a入力からc秒後に一瞬1を出力。 | ||||
入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
a | タイマー開始(0か否か) | a?b+c:output(1),output(1)=b | output(1) | 保持開始タイムに任意の秒数を足したもの(内部利用) |
b | Total(Timeのタブにあります) | output(2) | 0(C秒間)⇒1(一瞬)⇒0 | |
c | 任意の秒数 | |||
普段は1を出力、a入力からc秒間だけ0を出力。 | ||||
入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
a | タイマー開始(0か否か) | a?b+c:output(1),output(1)<b | output(1) | 保持開始タイムに任意の秒数を足したもの(内部利用) |
b | Total(Timeのタブにあります) | output(2) | 1⇒0(C秒間)⇒1 | |
c | 任意の秒数 | |||
〇ラッチを作ってみよう
スイッチを押している間だけしか部屋の明かりが点かなかったら大変不便ですね。a=1といった条件分岐だけではそんなスイッチになってしまいます。
ここまでは数字を覚える"メモリ"でしたが、次はONかOFFかだけのスイッチ、"ラッチ"です。
条件を満たしたことを覚えていられるよう工夫してみましょう。
以下は作例です。
出口が複数あるものは最後の出口が目的の出力です
a入力でON、aが0になってもONを保持します。bが入力でOFFにします。(OFF優先) | ||||
---|---|---|---|---|
入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
a | ON(0か否か) | (a+output(1))*!b>0 | output(1) | 0⇔1 |
b | OFF(0か否か) | |||
ON優先 | ||||
入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
a | ON(0か否か) | (a+!b*output(1))>0 | output(1) | 0⇔1 |
b | OFF(0か否か) | |||
OFF優先 | ||||
入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
a | ON(0か否か) | b?0:a?1:output(1) | output(1) | 0⇔1 |
b | OFF(0か否か) | |||
ON優先 | ||||
入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
a | ON(0か否か) | a?1:b?0:output(1) | output(1) | 0⇔1 |
b | OFF(0か否か) | |||
OFF優先 | ||||
入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
a | ON(0か否か) | b?0:a|output(1) | output(1) | 0⇔1 |
b | OFF(0か否か) | |||
ON優先 | ||||
入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
a | ON(0か否か) | a?1:output(1)*!b | output(1) | 0⇔1 |
b | OFF(0か否か) | |||
メモリに似た機能ですが変化する数を保持せず済むのでメモリより短く書けます。
ONかOFFだけ保持するので、可否を0と1で表すタイプの演算子と相性が良いです。
ONは0でなければいいというのも楽チンです。
〇カウンタを作ろう。
output(1)+1と書くとどうなるのでしょうか。
鳥を数えるカチカチ、カウンタを作ってみましょう。
output(1)+1 |
前回の出力に1を足して出力すると書いてあるので、どんどん数が増えていきます。
これを一瞬だけ作動させて1づつ足そうと思います。
以下が作例です。
出口が複数あるものは最後の出口が目的の出力です
- まず一瞬だけ作動する式を考えます。
a入力で一瞬だけ1を出力します 入力 入力の説明 数式 出力 出力の説明 a 作動(0か否か) !a,a?output(1):0 output(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へ出力。
コメント
- 乙です!わかりやすい素敵! -- 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
- 編集できれば追加オナシャス!!( -- うぃべ? 2019-10-17 (木) 20:29:55
- 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