ARドローン(クワッドローターUAV)用の3 DOF制御アプリケーションを設計しています..複数のPIDコントローラーを使用してUAVを制御しています..これらのコントローラーは、ディスパッチャータイマークラスを使用して実装されています..たとえば、プログラムの開始時に私はディスパッチャータイマーを次のように初期化します:
timer_yaw = new DispatcherTimer();
timer_yaw.Interval = new TimeSpan(0, 0, 0, 0, 45);
timer_yaw.Tick += new EventHandler(timer_yaw_tick);
ユーザーがGUIのボタンを押すとすぐに、このタイマーが起動します。
timer_yaw.Start();
timer_yaw_tickで私は少し処理をします:
private void timer_yaw_tick(object sender, EventArgs e)
{
// drone commands and stuff ... basically a PD controller
DroneData data = droneControl.NavigationData;
PV_yaw = data.Psi;
SP_yaw = angle;
Error_yaw = SP_yaw - PV_yaw;
if (Error_yaw >= 0)
yaw_pd = 0.5f;
else if (Error_yaw < 0)
yaw_pd = -0.5f;
Derivative_yaw = (Error_yaw - PreError_yaw) / Dt_yaw;
Output_yaw = (Kp_yaw * Error_yaw) + (Kd_yaw * Derivative_yaw);
PreError_yaw = Error_yaw;
Output_yaw = Math.Round(Output_yaw, 1, MidpointRounding.AwayFromZero);
Output_yaw = Output_yaw * 1000;
t_PD_yaw = Convert.ToInt32(Output_yaw);
// this t_PD_yaw is then sent to the drone via WiFi to make required adjustment
}
現在、私のアプリケーションでは、これらのタイマーのうち約7つが実行されており、さまざまな時間間隔でトリガーされます。...(タイマーの継続時間は、ほとんどすべてのタイマーのミリ秒単位です)
私が直面している問題は、コードが正常に実行されることもありますが、アプリケーションが完全にフリーズすることもあります。つまり、まったく応答がありません。仕事のためのタイマー???
助けていただければ幸いです。Thnx