🛠箱庭ラボ日記──2025年7月9日


こんにちは。今日は7月9日、水曜日です。ホント、毎日暑くなりましたね。昨日はもう蝉の鳴き声が聞こえてきました。

季節はすっかり夏。暑さに負けず、箱庭ラボもコツコツ開発しています。

最近よく思い出すこと

ところで最近、よく思い出すことがあります。
20数年前、学生の頃のことです。Linuxを自作PCにインストールして楽しんでいた、懐かしきあの頃。
「そもそもOSって、どうやって複数のプログラムを同時に動かしてるんだろう?」
「スケジューラって何?プロセスってどう切り替わってるの?」
そんな素朴な思いがありました。

そして、福井の永和システムマネジメントという会社で、Linuxカーネルの仕事があるというので、そこで技術研鑽を続けていました。
でも、なんのことはない、「マルチプロセス=分身の術で、実は、時間が来たら違うプロセスに切り替えているだけ」 ってことなんですよね。
見た目は同時に動いているように見えるけど、早すぎてわからないだけ、というところを、
実装や理論を通して少しずつ理解していきました。

つまり、今の僕と同じってわけです(だから、最近よく思い出すのか、と合点がいきました)。

今月のお題目

今月やらないといけないことを羅列するとこんな感じです。

  • 箱庭ラボのホームページのアップデート
  • 箱庭のUnreal Engine対応
  • 箱庭ドローンの物理側のアップデート(気圧とプロペラ風の影響)
  • その他(GitHub issue とか PRTIMES 原稿書きとかとか)

…とまぁ、いろいろあるわけですが、
今日はこの中でも 「箱庭ドローンの物理側のアップデート」
とくに 「気圧」と「プロペラ風」 のシミュレーションについて、
悩んでいることを書いてみようかなと思います。

きっかけは?

そもそも、気圧やプロペラ風のシミュレーションをやり始めたきっかけは、
箱庭ラボでもお馴染みの DIT 岡田さん の一言でした。

岡田さん、実は最近 二等無人航空機操縦士 の免許を取得されたんですが、
その実技試験のときに、こんなことをおっしゃっていたんです。

岡田さん:「試験当日、いつもと環境が違っていて、雨のせいかめちゃくちゃ低気圧で、ATTIモードでのドローン操縦が重い、不安定でした」

え?気圧の影響って、
操縦のフィーリングにまで出るものなの?
これは面白いぞ!と思いまして。

すぐに箱庭ラボの平鍋さんに相談したところ、
「そりゃ推力計算、気圧に影響されるよねー」って話になり、
そこから平鍋さん、気圧を考慮した物理シミュレーションのコードを書き始めてしまった、というわけです。

さらに話は盛り上がり、
「そういえば、プロペラの風の影響で、ドローンが天井に吸い付いたりするんですけどね……」
とまた平鍋さんに相談したところ、
今度は地面効果(空気クッション効果)まで考慮したシミュレーションモデルをめっちゃ調べてくださいました。

そのときに共有してもらった図がこちら:

ドローンの下で発生するダウンウォッシュ(下向きの風)が、
地面や天井、壁などの「境界面」で反射し、
もう一度ドローンに戻ってくることで、追加の浮力や反力がかかる。

これをイメージ的に「鏡像のドローン」が作る風として計算する、という考え方です。
距離による効果の減衰は、ローター半径 R と距離 dを使って

という式で表されます。そして、先月、平鍋さんが一気に箱庭ドローンシミュレータの物理側のコーディングが一気に出来上がり…(ほんとすごい)、そのままデバッグ会へ突入していきました。

でもねー

でもねー、です。いつものことなんですが…、コードが動くようになったからといって、いきなり「期待した通りの動き」にはならないのですよね。そこには必ず、色んなパラメータや条件があるし、デモとしてみたい結果を見えるようにするまでには様々な工夫が必要になってくるのです。

例えば、雨天時の気圧を調べてみると、0.98とかなんですよね。通常は1気圧だから、物理的に見るとほぼ誤差みたいに見えるし、実際に箱庭ドローンを操縦してみるとほぼ影響なしで違いがわからない。

また、プロペラ風に至っては、天井近くに向かってドローンを移動させても、吸い付く現象は起きない…。

おかしいな?と思って、推力や風の影響をデバッグしてみると、数値的には計算結果通りになっている。「なぜ?」ってなるわけです。物理シミュレーションとしては正しく動いているけれど、現場の体験とは乖離した形なので、何が違うの?ってなっていくわけですよー。

こういうとき、技術者って悩むんですよね。
「計算上は正しい。でも、体験として違和感がある。」
これ、シミュレーション開発の永遠のテーマです。

現実世界では、
・人間の感覚のズレ
・ドローンの重心ズレ
・プロペラの個体差
・センサー誤差
とか、いろんな「計算外」の要素が積み重なって、
理論通りにはならない。

一方で、シミュレーションは「きれいな世界」で作っているから、
そのズレを再現しない限り、人間の体験とは違って見える。

だから、今、箱庭ラボでは
「ただ物理計算するだけじゃなくて、現実のズレも含めた“リアルな不安定さ”をどう作るか?もしくはその時の条件をちゃんと見極めていこう!」
そんなことも考えながらシミュレーションを作っています。

ちょっと見えてきた

そして、いつものことですが、試行錯誤の日々が積み重なっていきます。で、ここ最近、どうやら 箱庭ドローンのPID制御がそういう外乱影響を相殺した制御をやってくれているから、違いが見えないというのがわかってきました。

まずは、天井に吸い付く現象の件については、テスト条件を変えて、天井の下から上に浮上させるのではなく、天井の境界付近でドローンを移動させたら、「制御がびっくりするんじゃないか?」という仮説です。

これがその結果:

「いやー、ちゃんとびっくりしてくれました。」天井から抜ける時と、入る時とで、ドローンが一瞬上下しています。

そして、後から気づいたのですが、実は、このドローンの制御はGPSありモードでした。かなり高度を固定できる制御なので、変化が微小なんだとわかってきました。

さらに、箱庭ドローンの制御では、ちゃんとATTIモードもあり、GPSなし、つまり高度の速度制御だけで高度を維持するモードを作っていたのですが、これでやるとこんな感じで、下から上に上がって、1.9m付近でスロットルを止めると天井の方に吸い寄せられていきました。

ちょっと整理

というわけで、今のところわかってきたことはこんな感じです:

  • 気圧の影響は、PID制御がきれいに吸収してしまっていた
     → だから、シミュレーションとしては正しくても、操縦者には伝わりにくかった
  • 天井効果(プロペラ風の反射)は、制御条件によって見え方が変わる
     → GPSありではあまり動かないけど、ATTIモードだと吸い寄せられる現象がちゃんと出た

そんなことを集中的にやっていると

やった、わかってきたぞー!もっと実験しようー。
っと、そんなことを集中的にやっていると、issueで問い合わせが来る わけです。

実は、先週くらいから、海外の方が、
「箱庭ドローンシミュレータのライブラリを Java で動かしたい!」
という内容の問い合わせをしてくれていました。

▶ Issue: https://github.com/toppers/hakoniwa-drone-core/issues/25

これがまた、うれしい反面、ちょっと焦るやつでして……
ドキュメントをちゃんとまとめていなかったので、
「ここはどう動かすの?」「座標系どうなっているの?」みたいな細かい質問に、
ひとつひとつ返信していくことに。

数時間くらいの間隔でメールが飛んできて、
ダイナミクスと issue の間を行ったり来たり。
まさに「マルチプロセス的な頭の切り替え」ですね。

詳細は、このissueを追っていただけると細かなところがお分かりになるかと思いますが、なんと、JAVAで箱庭ドローンのビジュアライズができちゃってました。

まじすご!もう感動ですね。

はい、今日はここまで。また明日から頑張りますよー。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP