概要
Trailmakersの上級要素である論理回路とセンサーによる制御を解説します。
難しい要素ですが、使いこなせば非常にビルドの幅が広がる要素です。
基本的なことは難しくないので、気構えないようにしましょう
論理回路を使うと何ができるか
簡単にいうと、一つのブロックに複数の操作を流し込めます。
もうこれだけで様々なことができるようになります。
例えば、曲がるときだけスポイラーの角度を強くする車、戦車のように超信地旋回するような動き、ピッチとロールを尾翼だけでコントロールする飛行機など、できることの幅がぐんと広がります。
そしてセンサーと組み合わせることにより、ブロックに対して自動で動作するよう設定できます。
これにより、自立するバイク、自動で高度と傾きを維持するヘリコプター、二足歩行するロボなどその自由度は更に広がります。
貴方のビルドをより羽ばたかせる、強力な要素です。
1つのブロックに複数の操作を設定する
こう思ったことはないでしょうか。「このサーボ、スティクだけじゃなくてL,Rボタンでも動かしたいな」。
論理回路を使えば解決できます。
通常、1つのサーボにはプラスとマイナスに1キーしか登録できません。そこで、OR回路をひとつ置き、それにLRキーを設定、サーボに繋いで見てください。
LRボタンでもサーボが動くようになります。
画像
ORには出力の設定もできます。試しに0.5にしてみましょう。
画像
サーボの角度が変わりました。
これはサーボ設定の最大角度の半分(0.5)の角度です。
このように押したキーによる角度の調整も可能です。1つのサーボに複数の役割を持たせることができます。
ブロック解説
論理ゲート
- or、and、xor、norの4種類があり組み合わせによって様々な制御ができます。
- 出力の最大値は1で、それ以前の回路で1000の値を流し込んでも1になって出力します。ですが1以下であれば複数の回路からの足し算された値が出力します。
- 回路は1つ伝達するごとに遅延が発生します。いわゆるtickがあり、約0.016秒です。回路が10個挟まれば0.16秒の遅延が発生し、制御に影響が出ることがあります。
OR論理ゲート
- 「どれか1つでも入力があれば出力する」動きをします。
- 複数の信号が入力された場合、合算されて出力されますが最大値は1です。
- 単純な動きなのでボタンだけを設定する場合に活躍します。
AND論理ゲート
- 「全ての入力信号がONの場合のみ出力する」ブロックです。
- 全ての信号がONのという特性上、信号が出力される時は複数の信号が足し算されています。
- ボタン同時押しで動作する設定や、モード切り替え回路で活躍します。
XOR論理ゲート
- 「どれか一つだけ信号があれば出力する」動きをします。
- つまり複数の信号が入力されるとOFFになります。
- 確実にOFFにしたい場合、OFFにするための信号を2つにして流し込むことで絶対にOFFにできる。
- センサーによる制御や複雑な回路を構築する際に重要なブロックです。
NOR論理ゲート
- 「信号が無いとON、あるとOFF」となる動きをします。
- つまり信号の状態を逆転させる回路です。
- 放っておくと常にONなので、常時ONにしたい時に使えます
センサー
- 周囲の状況を測定し、ON-OFFの信号を発します。
- ビルドの自動制御に役立ちます。
- アップデートにより、センサーは測定値を数値で出力できるようになりました。より高度な制御ができるようになりました。
- トリガー:従来通りの一定数値からON-OFFをするモードです
- 測定値:センサーがONの間、センサーが測定した数値を出力します
- 標準化:測定した数値を0~1の割合で出力します
距離センサー
- 指定した距離内にものがあれば信号を出します。
- 反応するものは、人、地面、他ビルド、自ビルト内のパーツなどおおよそ全てのもの。しかし水面には反応しない。
- センサが反応している時は、センサ面が光る。
- 測定にすると、反応した距離をmで出力する
- センサ相殺は、黒い面のどこに反応位置があるかを調整します
角度センサー
- 一定の角度以上または以下で信号を出すセンサー
- センサーの矢印は常に上方向を向いており、この矢印が設定した角度と幅に入っている時に反応する
- ヘリエンジンやスピンサーボと組み合わせる事で、ビルドを常に水平に保つような動きができる
- 矢印は常に上を向くので飛行機のコックピットに置いて水平器のように使うこともできる。
- 測定にすると、現在の角度を度で出力します。最大角度は180度でこれを超すと-180度になります。
速度センサー
- 一定の速度を検知すると信号を出すセンサー
- 矢印の向いている方向の速度を検知します。
- どの方向でも良いので落下や上昇も感知できます。
- このセンサーで移動方向を感知して反対向きに推進させるような動きをすれば、空中でもその場に留まり続けるようになる。外洋マップの風が吹く環境に強くなる。
- 測定にすると、現在の速度をm/sで出力します。km/hではないので注意。
高度センサー
- ある一定の高度に達した時に信号を出す動きをするセンサーです。
- 高度の基準は海面からで、海面下ではマイナスになります。
- 常に海面からの絶対高度なので、ホバリングの高度維持には使いにくいでしょう。
- 高度をマイナスの最大値に設定すると、常に信号を発することができるようになります。
- 制御上、ずっとONの信号が欲しい場面が多く出てきます。その際にこのセンサーが役に立ちます。
- センサ面には現在の高度が表示されるので飛行機の計器にも使える
- 測定にすると現在の高度をmで出力します。
コンパス
- 一定の方位以上または以下で信号を出す動きをする。
- 角度センサの水平版。
- 矢印は常に北を向く。
- インテリアにも良い。
- 測定にすると、北を0として現在の方位を度で出力します。最大方位は180度でこれを超すと-180度になります。
算術ブロック
- アップデートによって追加された、数値の計算を行うブロック。
- 工夫次第で複雑な計算が可能で、様々な制御ができるようになります。
- 反面、回路が大規模化してしまい、回路の遅延が問題になります。即応性の求められることは苦手となります。
累積
- 変数を保存しておけるブロックです。
- 増減は1秒にいくつ累積が増加するかを調整するものです。
1であれば、1を1秒入力すれば累積は1増加します。
1でも100入力すれば、1秒で100増えます。 - ステップ入力を有効にすると、入力している秒数に関わらず増減の値だけ累積されます。入力回数をカウントする際に便利です。
算術論理ゲート
- 定数との簡単な計算ができるブロックです。
- 足し算、引き算、掛け算、割り算、剰余、累乗を求めることができます。
- 計算式
- 足し算、引き算、掛け算、割り算
(定数) (+,-,×,÷) [(入力値1)+(入力値2)+…+(入力値n)]
定数が先に来るため割り算、引き算には注意が必要です。 - 剰余
[(入力値1)+(入力値2)+…+(入力値n)] % (定数) - 累乗
[(入力値1)+(入力値2)+…+(入力値n)]^(定数)
(定数)^[(入力値1)+(入力値2)+…+(入力値n)]
- 足し算、引き算、掛け算、割り算
- 入力値がない場合、定数と0の計算となり、足し算であれば定数がそのまま出力されます。定数は1000まで設定できるので、他の計算で定数を使いたい場合に利用できます。
- 定数を1にして割り算をすると入力値の逆数が出力されます。集約算術ゲートにおける割り算をする際に利用できます。
集約論理ブロック
- 複数の入力同士を計算できるゲートです。
- 計算の順番を指定できないので、計算順序で値が変わる計算はできません。
- 足し算、掛け算、最大、最小ができます。
- 計算式
- 足し算、掛け算
(入力値1)+(入力値2)+…+(入力値n)
(入力値1)×(入力値2)×…×(入力値n) - 最大、最小は入力された値の中で最大または最小の値を返します。
- 足し算、掛け算
- 割り算は算術論理ゲートで逆数を作ってから入力することで計算できます。
- 引き算も算術論理ゲートで符号を逆転させてから入力することで計算できます。
- なぜかこのブロックから出力される信号は遅延が発生しません。
比較論理ゲート
- 入力された信号と定数を比較して、条件が合致した場合に出力します。簡単な条件分岐を作成できます。
- 比較できるのは「等しい(=)」「等しくない(≠)」「~よりも大きい(<)」「~よりも小さい(>)」「以上(≦)」「以下(≧)」
- 計算式
(入力値)(比較演算子)(定数)
例として入力を0.5、定数を0.5、比較演算子を<、としたとき、0.5<0.5は偽となり出力は出ません。
関数論理ブロック
- 入力値に対して特殊な計算を実行するゲートです。
- 絶対値、符号、三角関数(sin,cos,tan)、逆三角関数(asin,acos,atan),平方根、切り捨て、四捨五入、切り上げができます。
- 絶対値
入力値の正負の符号を全て正にして返します。 - 符号
入力された値の符号が正なら+1,負なら-1を返します。 - 三角関数
入力値をθとして三角比の計算値を返します。θは度です。 - 逆三角関数
入力値をXとして角度を度で返します。 - 平方根
入力値の平方根を返します。 - 切り捨て(切り上げ)
切り捨てと切り上げの挙動が逆になっているようです
小数点1位が0よりも大きい場合、切り上げます。 - 切り上げ(切り捨て)
切り捨てと切り上げの挙動が逆になっているようです
小数点1位を切り捨てて0にします。 - 四捨五入
四捨五入というのは嘘で、実際の挙動は「偶数丸め」です。
0.5が出た際に偶数側に丸める手法です。詳しくは検索してください。四捨五入よりも正確な値が出る丸め方です。
- 絶対値
数値ディスプレイ
- 動作中の回路につなぐことによって、信号の強度を数値で表示します。
- 小数1桁までしか表示されません。
- 複数の入力があった場合、加算されて表示されます。
- ディスプレイから他のブロックに信号を伝達することもできます。
ランダマイザー
テクニック
1つのヒンジに複数のボタンを割り当てる
本来、ヒンジに限らずメカニックなパーツは+と-にそれぞれ1つしかキーを登録できません。論理ゲートを使うことによって1つのヒンジにいくつもの操作キーを割り当てることができます。
- ORゲートを用意します
- ゲートにキーを登録します
- ゲートをヒンジに繋ぎます。これで動くようになります。
- ゲートの出力を変えることで、ヒンジの角度を調整できます
水平維持
幅を180度、角度を91度に設定した角度センサを2つ背中合わせに配置することで、ビルドが倒れた方向を検知できます。倒れる方向と逆にヘリコプターエンジンやスピンサーボ等でビルドを回転させればビルドは水平を保つことができます。
角度は91度からより狭く設定することで即応性のある水平維持になります。
高度維持
下向きに速度センサを配置し、落下を感知したら上昇するように設定すれば、ビルドが一定の高度を保つようになります。
ただし降下できなくなるので、センサと動力の間にXORを挟むなどで、降下のボタンを押している間は速度センサによる制御を切る必要があります。
常にONが欲しい場合
フィールドに出した瞬間からONが欲しい時があります。例えば戦闘機のキャノピーを閉じるとかいったことです。制御を扱う上でも必要になる時があります。
- NORを使う
もっとも簡単な方法です。そのまま繋ぐだけで常にONを出力します。入力すればOFFにもできます。 - 高度センサーを使う
設定高度をマイナスの最大値に設定すれば常にONを出力します。
外乱に強く、切り離しブロックで切り離しても信号を発し続けます。 - 距離センサーを使う
古い方法です。距離センサーの反応面にブロックを隣接させることで常に反応させます。特にメリットはありません。
XORの確実な遮断
XORは2つ以上の入力があると遮断されます。つまり2つの入力を同時に注げばどんな状況でも遮断ができます。
これはセンサーからの入力をオンオフする際に利用できます。
遮断のために注いだ入力がそのまま機体の動作になってしまうことを防ぎます。
モード切替
例えば、車が人型になるようなビルドを使った時、車と人型では全く操作が変わります。車と人型では同じボタンを押しても、アクションを全く変える必要があります。そのような際に使える回路です。
概要としては、上記で説明していたXORの確実な遮断を利用したものとなります。XORにボタン設定をしておいて、一方のモード用のXORを遮断することでボタン操作を無効化するという方法となります。
- モード切り替えをするボタンをだけ登録し、トグルをONにしたORを用意します。
- 新たにORを2個、NORを2個おきます。1.のORをこの4つに繋ぎます。ORは切り替え前、NORは切り替え後用です。
- 切り替えて操作を変えたいボタンを登録したXOR回路を2個用意します。それぞれ切り替え前用と切り替え後用です。
- 3.で用意した2つのXORの一方には2.のORをもう一方には2.のXORを繋ぎます。
- 3.のXORを動かしたいものに繋ぎます。切り替え前のXORと後のXORで出力の値を変えてたり、繋ぎ先のパーツを変えたりすると変化がわかりやすくなります。
- フィールドに出して動かしてみます。切り替えボタンを押す前と後では違う挙動になっていることを確認してください。
値の保存回路
ディスプレイを使った変数を保存する回路です。
役割としては累積ブロックとほとんど同じですが、代入の挙動が違うので場合によってはこちらの方が使いやすい場面もあります。
- ディプレイを2個用意します。
- 2つのディスプレイ同士を繋ぎます。
- 代入
一方のディスプレイに保存したい値を入力します。 - 毎フレーム加算
一方のディスプレイに加算したい値を入力し続けます。
特徴としては
- 代入値がそのまま保存される
累積では1を得るために1を1秒間入力するといった動作が必要ですがこちらにはありません。 - 0.02秒以下の入力はうまく保存できない
2つのディスプレイの両方に値が入力されないとうまく保存されません。