Ayrıntılı Bilgiler
PID Temel Örneğine baktığımda, her bir tekerlek, kodlayıcı ve pwm için bir tane olmak üzere PID denetleyicisinin iki kopyasını başlatmanız gerektiğini düşünüyorum:
PID leftPID(&InputLeft, &OutputLeft, &SetpointLeft,2,5,1, DIRECT);
PID rightPID(&InputRight, &OutputRight, &SetpointRight,2,5,1, DIRECT);
Daha sonra, loop()
eşdeğerinizde, her iki kodlayıcıyı da okur, her bir kodlayıcı değerini ilgili PID
olana iletir ve son olarak her iki PWM değerini yazarsınız.
Şimdilik SetpointLeft
ve SetpointRight
aslında aynı değere işaret edebilir, ancak bunları ayrı ayrı tanımlamak, daha sonra dönme yeteneğini eklemenizi sağlar.
Kavramlar
Bu temel durum için işe yarayabilir, ancak yeterli olup olmadığı gerçekten düz çizginizin ne kadar doğru olması gerektiğine bağlıdır.
Her tekerlekte kodlayıcılarınız olduğu göz önüne alındığında, iki PID döngüsü çalıştırır ve her bir tekerleğin aşağıdaki hatasını karşılaştırırsanız, tekerleklerinizin kaymadığı varsayılarak, mesafe üzerindeki maksimum abbe hatasını hesaplayabilirsiniz . Bu hata gereksinimlerinizden daha küçükse, ihtiyacınız olan tek şey ölü hesaplaşmadır .
Ancak tekerlekleriniz kaymaya eğilimliyse, kontrol sisteminizin algılayamadığı gizli bir hataya sahip olabilirsiniz ve tekerlek enkoderlerinizden bağımsız olarak bir kayma algılamanız veya konumu hesaplamanız ve daha sonra düzeltmek için daha yüksek seviye yazılım kullanmanız gerekebilir. düz bir çizgiyi korumak için gerekli tekerlek konumları / hızları.
Göreceli konum belirleme
As John anlaşılacağı , sen konumunu belirlemek için bir ivme kullanabilmek için, ama onların doğruluğunu ve zaman içinde biriken hataların etkisini verilen edebilir, algılayabilir ve tekerlek kayma için doğru için ivmeölçer verileri kullanarak daha iyi olabilir.
Mobil robotikte, mevcut pozisyonu daha iyi belirlemek için bir ivmeölçer ve tekerlek kodlayıcılar gibi birden çok kaynaktan verileri birleştirmek için Kalman filtreleme teknikleri yaygın olarak kullanılır.
Zaman içinde, ancak nispi pozisyon kararlılıkla kendinizi ettiğine inandığımız pozisyonu ne yaparsanız edecektir gerçek fiziksel konumdan sürüklenip.
Mutlak konum belirleme
Bu sorunu aşmanın tek yolu, araçlarınızın referans çerçevesinin dışında bir referans noktasına sahip olmaktır.
Örneğin, bir odaba, bir odanın etrafında hareket etmek için ölü hesaplaşma kullanır, ancak bağlantıya ihtiyaç duyduğunda, şarj istasyonu tarafından gönderilen kızıl ötesi bir ışık demeti arar. Roomba bu ışın boyunca rastgele hareket ettiğinde, onu algılar, ışın üzerine kilitler ve kaynağına geri takip eder. Yumru sensörleri ile birlikte, kendini şarj kontaklarına doğru bir şekilde yerleştirebilir.
Robotunuz için, geri dönüp bilinen bir konumda olduğunu algılayabileceği bir ev konumu olabilir. Bu noktada tam olarak nerede olduğunu bilir ve hesaplanan konumun gerçek konumundan ne kadar uzakta olduğunu rapor edebilir.
Başka bir seçenek, robotunuzun yüzlerce metrenin üzerinde düz bir çizgide seyahat etmesi gerekiyorsa, Arduino GPS kalkanı eklemek gibi farklı bir tekniğe geçmek olacaktır .
Tekniklerin bir kombinasyonu
Sonuç olarak, doğruluk gereksinimlerinize bağlı olarak, bu tekniklerin bir kombinasyonunu kullanmanız gerekebilir.
Bir kılavuz ışını mümkünse, görünmez bir çizgi takip tekniği ile istediğinizi çok basit bir şekilde yapabilirsiniz . Kısıtlı bir alanda herhangi bir keyfi düz çizgide hareket etmeniz gerekiyorsa, o zaman roomba gibi, bir Kartezyen ekseninde sentezlenmiş konumunuzu düzeltmenize izin vermek için bir çift kılavuz kiriş kullanabilirsiniz (birbirlerine dik açılarla). robot her bir kirişten geçtiğinde.
Burada birçok seçenek var ve seçtiğiniz şey neye ihtiyacınız olduğuna bağlı olacaktır.