ドローンの開発
動画が安定して送れるようになったころ、ふと思った。
「『ドローン』とか作れんじゃね?」
自動車が動かせる。
恐らく馬力としては最大で数馬力。
常時でも一馬力程度は出せると思われる。
ならば、スマホを浮かせるくらいできるはずだ。
スマホは百グラムもないし。
浮かせるのは簡単だろう。
力をかける方向を上にすればいいだけだ。
「問題は、制御方法だね」
GPSが無いから自分の位置を計測して指定航路通りに飛ばすのは難しいだろう。
風に流されてもGPSがないと位置が把握できないからね。
USBメモリクラスの重さだとあっさり流されそうな気がする。
「ホバリングさせるためには位置固定する必要があるが制御できるだろうか?」
動画が送信できるならカメラの映像を見ながら操作すればまあ、なんとかなるか?
とりあえず、ドローン操作用のプログラムを作り始める。
ドローン側は動画送信アプリと、ドローン制御用アプリ。
コントローラ側は動画受信ソフトとドローン遠隔コントロール用アプリ。
並列して動かさないといけないから厄介だな。
まあ、動画の方は毎秒送る枚数が決まっているから、いつも処理能力を使っているわけではない。
圧縮というのは基本的に圧縮率が小さい、つまり圧縮後のファイルの比率が大きいほど処理に時間がかかる。
圧縮に失敗するケースが多くなるからね。
つまり動画の場合最初の一枚に一番時間がかかり、それ以降の差分データはそれほどかからないことになる。
まあ、データ抜けが起こったときのために、何回かに一回はフルデータを送り、その後指定回数分は差分データを送る。
動画データはエラー訂正や再送機能は停止して送るようにしたからね。
リトライを繰り返していたらデータがとてつもなく遅れてしまう場合がある。
それよりだったら抜けたほうがマシということで、UDP方式で垂れ流しだ。
処理が間に合わない場合もフレーム抜いて送信、あるいは展開する。
「とはいえわずかながら遅延があるんだよなぁ」
一枚の画像を圧縮送信する場合一枚毎に圧縮率が違うため処理時間にムラが出る。
時には早く終わり、時には遅く終わるが、処理時間が規定を上回ったときに遅延が起こる。
その遅延を抑えるために画像は一秒程度わざと遅れて送信開始するのだ。
時間のかかったページを早く処理が終わったページの処理で補うことで、常に最低一秒分バッファに残るようにする。
なので送信初めは一秒分の処理が終わるまでバッファに残ってしまう。
その後送信を始めるので常に最低一秒の遅延が生じる。
この辺は他のインターネットベースの会議システムも同じようなものだろう。
隣で同じ会議に出席している人がいると実際の会話とヘッドホンから聞こえる声がずれて聞こえるしね。
しかし会議くらいなら問題ないだろうが、ドローンでこの遅延は致命傷になりかねない。
「少なくとも歩いている人の間を縫ってとかは無理だろうな」
まあ、普通に飛ばすくらいならなんとかなるか。
まあやってみて駄目なら遅延を少なくするよう調整すればいいよね。
「次は実際の飛ばす方だが、とりあえず魔石のある方を上にすればいいか」
魔導線をつなげばいい話なのだが、今回はスマホそのままを飛ばすので、改造はなしだ。
なら魔石に近いほうが力を効率的に使える。
「カメラは真下か少し前方か? ズームも欲しいし」
それならコントローラからカメラ機能を弄れるようにすればいいか。
実質リモート操作ってことになる。
「まずはカメラ操作を実装して、その後は浮遊操作だな」
カメラが制御できないとラジコンのように見える範囲しか操作できないし。
USBメモリを下手に飛ばしたらあっという間に見えなくなるから、カメラ機能は必須だ。
まあ、凧の足のように目立つ紐でもつけておけば見失うこともないとは思うが。
すでにカメラ機能はあるからそれを制御するプログラムを書いていく。
注意すべきなのはカメラはメインアプリであるため、制御プログラムは常駐型にする必要があるという点だ。
制御プログラムはディスプレイもキーボード操作もリモート側から確認するから、ドローンの方には必要ない。
常駐させるのに問題はないはずだ。
僕は二日ほどかけてリモートでカメラ操作を出来るようにする。
「次は『ドローン』機能だが、いきなりやって失敗すると、どっかに飛んで行ったっきり帰ってこないという事態もありえるので慎重に行こう」
まずはプログラムの最大稼働時間を十秒に設定する。
これで暴走しても十秒後には止まるはずだ。
それからいきなり飛ばしたりはしない。
まずは上下前後左右を光らせるプログラムを作る。
それと対応するキーを割り当てれば、とりあえず指定の方向に光るはずだ。
「操作がけっこう面倒くさいな」
なにせ、カメラが左右ロールに上下ロール。
これだけで四つのキーを操作しないといけない。
ズームを入れると六つ?
その他姿勢制御だけでも、上下前後左右で六キーだ。
まあ一度に複数のキーを押さなければ操作は問題ないか。
だけどキー入力だとアナログ的な操作が難しいんだよねぇ。
ゆっくり下に降りるとか、急速上昇とか。
押している長さで決めるしかないだろうな。
「だけど『ジョイスティック』が猛烈に欲しい」
しかしそんなのすぐには作れないから、とりあえずキーボードでなんとかする他ないか。
「まてよ。キーボードをアナログ的に検知すればいいんじゃね?」
メカニカルキーのように接点の位置が決まっているわけじゃないからな。
押す深さによって変化率の大きさを決めればいいじゃん。
精霊コンピュータバンザイだね。
ハードとソフトが同一だとこんな事ができる。
今回はハードも使うけど。
「えっと、BIOSのキー入力は切って『ドローンコントローラ』でキーの制御を行うようにしてっと」
うんうん、こんなもんかな。
ざっとプログラム組んで起動させる。
「ぽちっとな」
上昇キーを軽く押すと魔石の上側がほのかに光る。
最後まで押し切ると更に光が強くなった。
「うん、うん。ちゃんと出力調整されているね。じゃあ、右行って左行って、前後ろ、で着地」
ちゃんと思ったほうが思ったように光る。
次はカメラだ。
「右回りー、左回りー、クルッと回ってにゃんこの目」
おおー。
パソコンに映るカメラ映像が自由自在に方向を変える。
「ズームもバッチリだ」
あっ、感度調整忘れてた。
部屋の中なので画面が少し暗い。
「もう二つキーを追加してっと」
カメラだけで八個かよ。
めんどくさいから後にしよう。
まあ仕方ないか。
いつまでもカメラに時間を取られるわけにはいかないし。
ドローンなんだから、ちゃんと飛ばないと話にならない。
そっちの調整を先にやってしまおう。
とはいえどうするか。
例えば上昇キーを押すと、それに同期してパワーを上げればいいのか?
「しかしそれだと、ホバリングする時大変な気がする」
スマホの重さとちょうど釣り合う力の大きさにキーを押し続けないといけないからね。
考えてみれば下キーはいらないんじゃない?
パワー落とせば勝手に落ちてくるし。
だが、これは駄目だ。
飛んでいる間、上昇キーを押し続けていなければならない。
ジョイスティックならともかく、キーのストロークなんて大して深くないからね。
微妙な押し加減で止め続けることなんて出来っこない。
詰んだ。
別の方向から考えてみよう。
ドローンで重要なのはホバリング機能だ。
しかし、ホバリングするためには重量とパワーのバランスを取り続ける必要がある。
しかしそれを手動で行うのは結構めんどいぞ。
指先の微妙な感覚だよりだからね。
なら自動でやるか。地面との距離は測れる。
FCSなんかでも使っているからね。
地面との距離を測って一定になるようにパワーを調整すればホバリング出来るはずだ。
「そうだ。キーでパワーを変えるんじゃなくて高さを変えればいいんじゃね?」
上昇キーで高さ設置を増やす。
下降キーで高さを減らす。
キーを離せばその高さでホバリング。
押し方でその増加率を変えればいい。
「うん、いけそうだ」
上昇下降はそれでいいとして、前後左右はどうするか。
こっちは素直にパワー指定でいいか。
キーを押している間はその方向にパワーがかかり続け、強く押すとその分パワーが上がる。
離せば空気抵抗で勝手に止まるし、逆方向にかければより早く止まる。
「『FCS』から高さ判定のプログラムコピペしてっと」
内部に高さ変数を用意して、キーが押されたらこれをプラスマイナスする。
高さ判定でこの高さ変数より小さかったらパワーをかける。
低かったらパワーを下げる。
どれだけパワーを掛けるかは差分の大きさ依存させればいいだろう。
設定上の高さと、実際の高さの差が大きい程その方向にパワーを上げて小さいほどパワーを落とす。
これでちょうど釣り合ったところで止まるはずだ。
ちょっとやってみよう。
と言ってもまだパワーを掛けない。
光の強さで、パワーのかけ方を確認するのだ。
「高さ一メートルに設定し、『スマホ』を手で上下させると明るさが変わるはずだ」
まずはスマホを床に置くとスマホの上部が強く光る。
ゆっくり上げていくと、その光はゆっくり弱くなっていき、一メートルのところで消灯。
更に上げていくと次第に光は強くなっていく。
「うーん。一メートルのときに光が消えるということは、出力ゼロ。つまりまた落ちて、距離が基準点より開いたらまたパワーオンになるってことか」
これだとホバリング中に上下運動を繰り返しそうだな。
どうにかピタッと止められないかな?
「指定の高さに達したら、ちょうど釣り合う力加減で上昇パワーをかければいいんだけどそんな事ができるか?」
まてよ。
光だからゼロ地点で消えちゃうけど、常に重力とパワーが均衡している状態だと、均衡している状態より大きなパワーをかけないと上昇しないわけだし、ゼロ地点に達しても均衡するためのパワーは残っているんじゃないか?
例えば均衡している状態を一〇とした場合、上昇するには一〇を少しでも超えるパワーが必要で、速度ゼロに近づくほどパワーは一〇に近づいていくはず?
一〇を下回ると下降しちゃうから再びパワーは一〇以上に上がっていくはず。
ん~。これもなんかガクガクしそうだねぇ。
「最初にキャリブレーションすればどうだろう?」
つまり最初にホバリングの初期値を決めてあげる。
例えばまず一メートルまで上昇して、高度が上がればパワーを落とす、下がればパワーを上げるを繰り返して、上下しなくなったところを基準パワーに設定する。
上昇するときは基準パワー+上昇パワーをかけて、基準点に達したら上昇パワーを止める。
高度設定はあまりぴったりにすると、やはり上下動が発生しそうだから、少し余裕を持って、数センチ程度の誤差なら基準パワーだけでホバリングする。
魔石による上昇の場合、向こうのドローンのように揚力を使っているわけじゃないから、空気の密度とか温度気圧なんかの要素には左右されないはず。
純粋に重さだけが影響を与えるはずだから最初に基準値を設定すればあとは、重量が変わらない限り変更しなくていいはず。
この線で調整してみるか。
ウクライナ戦争で今話題のドローンですが、この小説の第1稿を書き上げたときはまだ侵攻は始まっていませんでした。
ホビーとしての面だけでなく、元々軍事面でも注目されていたこの技術。
作中では割と簡単に作っていますけど、ハード面ソフト面ともに最新の技術が詰まった装置です。
中には安い中国製などで、カメラがブレブレだったり、まともに操縦できなかったりといった粗悪品もあるようですが、主人公の作ったドローンも精々そのくらいですw
ブレ補正といったアナログ的技術は経験とノウハウが必要ですからねぇ。
一朝一夕に作れるようなものではありません。
とはいえ、これでも異世界では未知の超未来的技術。
しかも、USBメモリくらいしか無い上、音もなく忍び寄るドローン。
その航続距離はほぼ無限大!
これは流石に現代技術でも再現不可能です。
今後の活躍に期待しましょう。




