ขณะนี้ฉันกำลังทำงานในโครงการสำหรับโรงเรียนที่ฉันจำเป็นต้องใช้ตัวกรองคาลมานเพิ่มเติมสำหรับหุ่นยนต์จุดด้วยเครื่องสแกนเลเซอร์ หุ่นยนต์สามารถหมุนได้ด้วยรัศมีวงเลี้ยว 0 องศาและขับไปข้างหน้า การเคลื่อนไหวทั้งหมดเป็นแบบเชิงเส้นเป็นชิ้น ๆ (ไดรฟ์, หมุน, ขับ)
เครื่องจำลองที่เราใช้ไม่รองรับการเร่งความเร็วการเคลื่อนที่ทั้งหมดเป็นแบบทันที
นอกจากนี้เรายังมีแผนที่ที่รู้จัก (ภาพ png) ที่เราต้องทำการแปลเราสามารถทำการติดตามรอยในภาพเพื่อจำลองการสแกนด้วยเลเซอร์
คู่ของฉันและฉันสับสนเล็กน้อยเกี่ยวกับรูปแบบการเคลื่อนไหวและเซ็นเซอร์ที่เราจะต้องใช้
จนถึงตอนนี้เรากำลังจำลองสถานะเป็นเวกเตอร์ .
เราใช้สมการการปรับปรุงดังนี้
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:
ในฐานะที่เป็น Jacobian ของสูตรการอัพเดทของเรา ถูกต้องหรือไม่
สำหรับโมเดลเซนเซอร์เราประมาณ Jacobian (H) ด้วยการรับตำแหน่งที่แตกต่างกันของหุ่นยนต์ ,และและการติดตามรังสีในแผนที่ เราคุยกับ TA ผู้ซึ่งกล่าวว่าสิ่งนี้จะได้ผล แต่ฉันก็ยังไม่แน่ใจ ศาสตราจารย์ของเราไม่อยู่ดังนั้นเราจึงไม่สามารถถามเขาได้อย่างน่าเสียดาย เราใช้การวัดเลเซอร์ 3 ครั้งต่อการแก้ไขดังนั้น H คือ 3x3
ปัญหาอื่น ๆ ที่มีวิธีการเตรียมใช้งาน P เราลอง 1,10,100 และพวกเขาทั้งหมดวางหุ่นยนต์นอกแผนที่ที่ (-90, -70) เมื่อแผนที่มีขนาด 50x50 เท่านั้น
รหัสสำหรับโครงการของเราสามารถพบได้ที่นี่: https://github.com/en4bz/kalman/blob/master/src/kalman.cpp
คำแนะนำใด ๆ ที่ชื่นชมอย่างมาก
แก้ไข:
ณ จุดนี้ฉันได้รับตัวกรองเพื่อทำให้เกิดความมั่นคงด้วยเสียงการเคลื่อนไหวขั้นพื้นฐาน แต่ไม่มีการเคลื่อนไหวจริง ทันทีที่หุ่นยนต์เริ่มเคลื่อนที่ตัวกรองจะเปลี่ยนทิศทางอย่างรวดเร็วและออกจากแผนที่