// 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.