मैं वर्तमान में स्कूल के लिए एक प्रोजेक्ट पर काम कर रहा हूं, जहां मुझे लेजर स्कैनर के साथ एक पॉइंट रोबोट के लिए विस्तारित कलमन फ़िल्टर लागू करने की आवश्यकता है। रोबोट 0 डिग्री टर्न त्रिज्या के साथ घूम सकता है और आगे बढ़ सकता है। सभी गतियों के टुकड़े-टुकड़े रैखिक (ड्राइव, घुमाव, ड्राइव) हैं।
जिस सिम्युलेटर का हम उपयोग कर रहे हैं वह त्वरण का समर्थन नहीं करता है, सभी गति तात्कालिक है।
हमारे पास एक ज्ञात मानचित्र (पीएनजी छवि) है जिसे हमें स्थानीयकृत करने की आवश्यकता है। हम लेजर स्कैन को अनुकरण करने के लिए छवि में किरणों का पता लगा सकते हैं।
मेरे साथी और मैं गति और सेंसर मॉडल के रूप में थोड़ा भ्रमित हैं जिसका हमें उपयोग करने की आवश्यकता होगी।
अब तक हम राज्य को एक वेक्टर रूप में मॉडलिंग कर रहे हैं ।
हम निम्नानुसार अद्यतन समीकरणों का उपयोग कर रहे हैं
void kalman::predict(const nav_msgs::Odometry msg){
this->X[0] += linear * dt * cos( X[2] ); //x
this->X[1] += linear * dt * sin( X[2] ); //y
this->X[2] += angular * dt; //theta
this->F(0,2) = -linear * dt * sin( X[2] ); //t+1 ?
this->F(1,2) = linear * dt * cos( X[2] ); //t+1 ?
P = F * P * F.t() + Q;
this->linear = msg.twist.twist.linear.x;
this->angular = msg.twist.twist.angular.z;
return;
}
हमने सोचा कि हमारे पास काम करने के लिए सब कुछ था जब तक कि हमने देखा कि हम शुरू करना भूल गए थे P
और यह शून्य था, जिसका अर्थ था कि कोई सुधार नहीं हो रहा था। जाहिर तौर पर हमारा प्रचार बहुत सटीक था क्योंकि हमने अभी तक सिस्टम में शोर नहीं किया है।
मोशन मॉडल के लिए हम F के लिए निम्नलिखित मैट्रिक्स का उपयोग कर रहे हैं:
जैसा कि हमारे अद्यतन सूत्रों का जैकबियन है। क्या ये सही है?
सेंसर मॉडल के लिए हम रोबोट , और और रे ट्रेसिंग के बारीक अंतर को ध्यान में रखकर जैकबियन (H) का अनुमान लगा रहे हैं । हमने टीए से बात की जिन्होंने कहा कि यह काम करेगा लेकिन मैं अभी भी अनिश्चित हूं। हमारे प्रोफेसर दूर हैं इसलिए हम उनसे दुर्भाग्य से नहीं पूछ सकते। हम 3 लेजर माप प्रति सुधार कदम का उपयोग कर रहे हैं इसलिए एच एक 3x3 है।
दूसरा मुद्दा जहां पी को कैसे इनिशियलाइज़ किया जाए, हमने 1,10,100 की कोशिश की और वे सभी रोबोट को मैप के बाहर (-90, -70) में रखते हैं, जब मैप केवल 50x50 होता है।
हमारे प्रोजेक्ट का कोड यहां पाया जा सकता है: https://github.com/en4bz/kalman/blob/master/src/kalman.cpp
किसी भी सलाह की काफी सराहना की जाती है।
संपादित करें:
इस बिंदु पर मैंने मूल आंदोलन शोर के साथ स्थिर करने के लिए फ़िल्टर प्राप्त किया है, लेकिन कोई वास्तविक आंदोलन नहीं है। जैसे ही रोबोट फ़िल्टर डायवर्ज को बहुत तेज़ी से स्थानांतरित करना शुरू करता है और मानचित्र से बाहर निकलता है।