// Sarkacın başlangıç durumlarını ve sistem özelliklerini buradan değiştirebilirsiniz. // fiziksel özellikler m = 1.5; // sarkacın kütlesi (kg) M = 5; // aracın kütlesi (kg) L = 1.2; // sarkacı boyu (m) g = 9.8; // yerçekimi ivmesi (m/s/s) mars için 3.71 B = 1.5; // sarkacın viskoz sürtünme katsayısı N.m.s/rad fric = 1.5; // aracın viskoz sürtünme katsayısı (N.s/m) // başlangıç durumlarını aşağıdaki y0 vektörü ile değiştirebilirsiniz. y0 = [0, 0.5, Math.PI*20/180, 0]; // [m, m/s, rad, rad/s] // Aşağıdaki fonksiyonu değiştirerek, ters sarkacı kontrol etmek için istediğiniz bir kontrol // algoritmasını kullanabilirsiniz. Benzetimi yapan integratör, saniyede 60 defa "controller" // isimli fonksiyonu sistem durumlarını argüman olarak kullanarak çağıracak ve bu fonksiyonun // döndürdüğü kontrol sinyalini araca uygulayacaktır. function controller(y) { x = y[0]; // aracın konumu v = y[1]; // aracın hızı theta = y[2]; // sarkacın açısal konumu omega = y[3]; // sarkacın açısal hızı P = 100; D = 5; // PD kontrolcü katsayıları u = -theta*P + -omega*D; // kontrol sinyali (Newton) return u; } // Görebileceğiniz üzere yukarıdaki basit PD kontrolcü aracın konumunu ve hızını kontrol sinyalini // oluştururken kullanmamaktadır. Bu eksiği gidermek için kendi fonksiyonunuzu yazabilir ya da // yukarıdaki fonksiyonu değiştirebilirsiniz. Yaptığınız değişiklerin kaydedilmesi için aşağıdaki // "kaydet" butonuna basabileceğiniz gibi, aracın duvarlara çarpması da bunu tetikleyecektir. // uyarı: "kaydet" butonuna basmış olsanız bile sayfayı yenilerseniz yazdığınız kod silinecektir.