나는 AR Drone (쿼드 로터 UAV)에 대한 3 DOF 제어 응용 프로그램을 설계하고 있습니다. UAV를 제어하기 위해 다중 PID 컨트롤러를 사용하고 있습니다.이 컨트롤러는 디스패처 타이머 클래스를 사용하여 구현됩니다. 즉시 사용자가이 타이머가 해고 된 GUI의 버튼을 누르면로Dispatcher 타이머 WP37을 동결
timer_yaw = new DispatcherTimer();
timer_yaw.Interval = new TimeSpan(0, 0, 0, 0, 45);
timer_yaw.Tick += new EventHandler(timer_yaw_tick);
: 프로그램의 시작 예를 들어 내가 좋아하는 디스패처 타이머를 초기화합니다. (.... 서로 다른 시간 간격으로 트리거되는이 타이머의 약 7 실행중인 내 응용 프로그램 지금 타이머 시간을
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
}
:
timer_yaw_tick에서 timer_yaw.Start();
내가 처리의 약간을 대부분 모든 타이머의 밀리 초 단위입니다.)
문제는 제가 직면하고있는 것은 제 코드가 때로는 잘 실행되지만 시간이 지나면 응용 프로그램이 완전히 멈 춥니 다. 즉 응답이 전혀 없기 때문입니다. 문제를 찾아 내면 ... 올바른 타이머 작업 ???
도움말 정말 감사하겠습니다 .. Thnx
동결시 코드에서 디버거가 멈 춥니 다. (여러 번 시도하십시오) 데이터에 대한 동시 액세스 문제가있을 수 있습니까? * 표시하는 코드는 읽기 전용 데이터에 액세스하는 것으로 보이지만 일부 다른 부분에있을 수 있습니다. 프레임 워크에 스레드 세이프 인 꽤 많은 데이터 타입이 있습니다. 체크 아웃하십시오. (http://msdn.microsoft.com/en-us/library/dd997305.aspx) 또는 뮤텍스를 사용하여 당신 자신. 하지만 먼저 System.Threading.Timer와 같은 다른 타이머를 시도해보십시오. 쉽게 :-) – GameAlchemist