我正在为 AR Drone(四旋翼无人机)设计一个 3 DOF 控制应用程序。我正在使用多个 PID 控制器来控制无人机 ..这些控制器是通过使用调度程序计时器类实现的 .. 例如在程序开始时我像这样初始化调度程序计时器:
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