2017年1月21日土曜日

線形回帰分析を用いたロケットの頂点時間の導出②[C言語,Arduino]

1. 概要

この記事は,時間と気圧高度のデータから水ロケットの軌道を推定し,頂点時間を計算する手法を解説したものです.
※前回の記事 線形回帰分析を用いたロケットの頂点時間の導出①[C言語,Arduino]

今回の記事では前回の反省を踏まえ,制約として \( a = -\frac{1}{2}g \) という条件を与えました.その結果,水ロケットを用いた実験で正常にパラシュートが開傘したことを確認しました.
今回得られた知見を共有することを目的としてこの記事を残します.

GitHubのリポジトリ作っときましたので参考までに.コードはここに投げていきます.

2.式の導出

 \( a=-\frac{1}{2}g \)という制約を加えることで,データ数の少ないケースでも妥当な値が推定できるようにします.
まず昨日のやつを読んでからのほうが良いかと思います.
評価関数は昨日のモデル同様,評価関数 \(J\)を極小とするようなパラメータを求めます. \[ J = \frac{1}{2} \sum_{i=1}^{n} (a t_i^2 + b t_i +c - y_i)^2 \]とすると,評価関数を極小とするためには  \(b,c\) で偏微分した値が0となるから,
\[ \begin{eqnarray*} \frac{\partial J}{\partial b} &=& \sum_{i=1}^n(a t_i^2 + bt_i + c - y_i )t_i = 0 \\ \frac{\partial J}{\partial c} &=& \sum_{i=1}^n(a t_i^2 + bt_i + c - y_i )= 0 \\ \end{eqnarray*} \] 
これを行列形式にすれば, \[ \begin{eqnarray*} ( \sum_{i=1}^n \left[ \begin{array}{rrr} t_i^2 & t_i \\ t_i & 1 \end{array} \right] ) \left[ \begin{array}{rrr} b \\ c \end{array} \right] &=& ( \sum_{i=1}^n\left[ \begin{array}{rrr} t_i y_i - at_i^3\\ y_i - at_i^2 \end{array} \right] )\\ &=& ( \sum_{i=1}^n\left[ \begin{array}{rrr} t_i y_i + \frac{1}{2}gt_i^3\\ y_i + \frac{1}{2}gt_i^2 \end{array} \right] ) \end{eqnarray*} \]
 を得ます.
頂点高度となる時間は, \[ t_{top} = \frac{b}{g} \] となります.

3.シミュレーション

プログラムのデバッグ及び水ロケットに搭載した場合パラシュートの開傘が可能であるかどうかを確認することを目的としてシミュレーションを行いました.

モデルは上の2で導出したモデルです.
ソースコードは長くなるのでGitHubのリポジトリに投げたやつを見てください.
シミュレーションでは高度のデータにノイズとして±0.5mの一様乱数を加えました.

また,実際のArduinoのプログラムではセンサーのサンプリング周期が約0.03秒であったので,それに従ってシミュレーションを行いました.

また,実際に飛行させた場合には抗力が発生するため重力加速度とは異なる値となる可能性があるため,その場合どの程度ズレが発生するかを確認するため,用意されたデータは \(a=-4.7\) として計算を行いました.

結果は次のようになりました.
(というかblogger機能少な過ぎやしませんかね,表も標準で入れられない……Google Siteならできるのに……面倒なので画像です)

今回使用したモデルでは,30個のデータでも頂点到達時間がまぁ許容できなくは無い程度の誤差(±1秒程度の誤差)で得ることができました.

水ロケットの飛行時間は非常に短いですが,1Lの水ロケットでは2~3秒程度は飛行するため,このモデルでも十分動作することが期待されます.

4.実機を用いた実験

Arduinoのコードはリポジトリに投げてあります.

 手投げで十分な結果が得られた後,水ロケットとして2回実験を行いました.2回行われた実験ではどちらも頂点付近で展開が確認されました.2回のうち1回はパラシュートが開かなかったものの,1回はパラシュートが正常に開き,十分終端速度に達した状態で落下させることに成功しました.

日没後一人でやってたので動画はないです><.ログを取ってない上,動画も無いので本当なのかと言われたら本当です(`・ω・´)って言うしかないので次からはログ取りたいです(今のところその予定はないです).

5.結論とか

一方○○はタイマーを使った……?