ตัวกรองคาลมานเหมาะสมกับการกรองตำแหน่งจุดที่คาดการณ์ไว้หรือไม่?


17

ระบบของฉันมีดังต่อไปนี้ ฉันใช้กล้องของอุปกรณ์มือถือเพื่อติดตามวัตถุ จากการติดตามนี้ฉันได้รับคะแนน 3D สามจุดที่ฉันฉายไว้บนหน้าจอเพื่อรับคะแนน 2D สี่คะแนน ค่า 8 ค่านี้มีเสียงดังเนื่องจากการตรวจจับดังนั้นฉันต้องการกรองค่าเหล่านี้เพื่อให้การเคลื่อนไหวราบรื่นและสมจริงยิ่งขึ้น เป็นการวัดครั้งที่สองฉันใช้การวัดการหมุนวนของอุปกรณ์ซึ่งมีมุมออยเลอร์สามมุม (เช่นทัศนคติของอุปกรณ์) สิ่งเหล่านี้มีความแม่นยำและความถี่สูงกว่า (สูงถึง 100 Hz) กว่าตำแหน่ง 2D (ประมาณ 20 Hz)

ความพยายามครั้งแรกของฉันคือการใช้ตัวกรอง low-pass แบบง่าย ๆ แต่ความล่าช้าเป็นสิ่งสำคัญดังนั้นตอนนี้ฉันจึงพยายามใช้ตัวกรอง Kalman โดยหวังว่ามันจะสามารถทำให้ตำแหน่งราบรื่นด้วยความล่าช้าเล็กน้อย ดังที่เห็นในคำถามก่อนหน้าประเด็นสำคัญหนึ่งจุดในตัวกรองคาลมานคือความสัมพันธ์ระหว่างการวัดและตัวแปรสถานะภายใน ที่นี่การวัดมีทั้งพิกัด 8 จุด 2D ของฉันและมุม 3 ออยเลอร์ แต่ฉันไม่แน่ใจเกี่ยวกับสิ่งที่ฉันควรใช้เป็นตัวแปรสถานะภายในและวิธีที่ฉันควรเชื่อมต่อมุมออยเลอร์กับจุด 2D ดังนั้นคำถามหลักตัวกรองคาลมานเหมาะกับปัญหานี้หรือไม่ และถ้าใช่เป็นอย่างไร


หากจุดประสงค์ทั้งหมดคือเพื่อทำให้ค่าราบรื่นขึ้นด้วยการหน่วงเวลาต่ำสุดคุณสามารถลองใช้ตัวกรองขั้นต่ำถ้าคุณยังไม่ได้ลอง ฉันจะแปลกใจถ้าตัวกรองคาลมานสามารถให้คุณดีกว่า 'ความล่าช้าขั้นต่ำ' สำหรับตัวกรองเชิงเส้นฉันคาดหวังว่าตัวกรองขั้นต่ำจะให้ความล่าช้าน้อยที่สุด
niaren

@ Niaren: ขอบคุณสำหรับความคิดเห็นฉันจะศึกษาเช่นนี้
StéphanePéchard

1
มันไม่ชัดเจนว่าการวัดของคุณคืออะไร ในกรอบตัวกรองคาลมาน "การวัด" หมายถึงปริมาณที่คุณสังเกตเห็นจริง หากคุณวัดจุดสามมิติสี่จุด (เช่นการรวมภาพจากกล้องหลาย ๆ ตัวเข้าด้วยกัน) นั่นคือการวัดของคุณ คุณต้องตัดสินใจว่าตัวแปรสถานะใดที่คุณพยายามประเมิน คุณพยายามติดตามตำแหน่งวัตถุ 3 มิติเมื่อเวลาผ่านไปหรือไม่? ถ้าเป็นเช่นนั้นนั่นคือตัวแปรสถานะของคุณ อาจเหมาะสมที่การแสดง 2D สามารถใช้เพื่อแสดงและไม่รวมเป็นส่วนหนึ่งของแบบจำลองของคุณ รายละเอียดเพิ่มเติมจะช่วยแนะนำวิธีการ
Jason R

ตามที่ Jsaon พูดว่าการวัดของคุณไม่ชัดเจน คุณพูดว่า: From this tracking, I get four 3D points that I project on a mobile device screen, to get four 2D points. These 8 values are kinda noisyแล้วคุณจะพูดในWhat's available to me is the device's gyroscope output, which provides three Euler angles (i.e. the device attitude).ภายหลัง มันคืออะไร คะแนน 2D สี่จุดหรือมุมออยเลอร์สามมุม? หรือรถไฟขบวนไปยังมุมออยเลอร์ -> จุด 3D -> จุด 2D?
Peter K.

ฉันมีการวัดสองชุดจริง ๆ : จุดที่ตรวจพบได้ตำแหน่งจากกล้องและมุมของออยเลอร์ แต่มันก็ไม่ได้เกี่ยวข้องอะไรเลย รวมทั้งฉันสนใจเฉพาะตำแหน่งที่ถูกกรองเป็นผลลัพธ์ ฉันจะแก้ไขคำถามเพื่อชี้แจง
StéphanePéchard

คำตอบ:


4

กรองผ่านต่ำ

มันเป็นการดีที่จะรู้ว่าคุณหมายถึงอะไรโดย "ตัวกรอง low pass ง่าย"

ตัวอย่างเช่นหากการวัดของคุณ ณ เวลาเป็นk

pk=[xkyk]

และค่าประมาณที่ผ่านการกรองต่ำของคุณคือ:

pkLPF=αpk1LPF+(1α)pk

จากนั้นคุณจะมีการหน่วงเวลากลุ่มใหญ่ค่อนข้างมากในตัวกรองประมาณ (สำหรับอัลฟาใกล้กับ 1) 1/(1α)

การสร้างแบบจำลองสัญญาณ: วิธีการที่ง่าย

ในการใช้ตัวกรองคาลมาน (หรือวิธีการที่คล้ายกัน) คุณต้องมีแบบจำลองสำหรับวิธีการวัดและการรับข้อมูลของคุณ

โดยปกติจะมีลักษณะดังนี้:

โดยที่ ϵ kเป็นเสียงรบกวนของกระบวนการ (การขับรถ) Aคือเมทริกซ์การเปลี่ยนสถานะและ Bคือเมทริกซ์อินพุตของคุณ

pk+1TRUE=ApkTRUE+Bϵk
ϵkAB

และจากนั้นวัดของคุณคือ: P k = C P T R U E k + D ν k ที่ν kคือผลลัพธ์ (วัด) เสียง Cเป็นเมทริกซ์การส่งออกและDคือเมทริกซ์เสียงรบกวนการวัดของคุณpk

pk=CpkTRUE+Dνk
νkCD

ที่นี่ "สถานะ" ของแบบจำลองถูกเลือกให้เป็นตำแหน่งที่แท้จริงและสิ่งที่คุณวัดได้คือผลลัพธ์

จากนั้นคุณสามารถใช้สมการตัวกรองคาลมานกับสิ่งนี้เพื่อรับค่าประมาณสถานะของตำแหน่งจริงpkTRUE^

อย่างไรก็ตามวิธีการนี้เป็นแบบง่ายๆเพราะมันไม่ได้ใช้ความรู้ใด ๆ ว่าจะย้ายจุดอย่างไร (และไม่ใช้ 4 คะแนนของคุณและความรู้ใด ๆ ที่คุณอาจมีเกี่ยวกับการเคลื่อนไหวร่วมกัน)

การสร้างแบบจำลองสัญญาณ: เริ่มต้นวิธีการที่ดีกว่า

หน้านี้แสดงวิธีการตั้งค่าปัญหาที่เกี่ยวข้องกับตำแหน่งและมุมออยเลอร์ มันกำลังทำสิ่งที่แตกต่างจากที่คุณต้องการ แต่รัฐคือ:

pkTRUE=[xk yk zk x˙k y˙k z˙k x¨k y¨k z¨k ϕ ψ θ ϕ˙ ψ˙ θ˙ ϕ¨ ψ¨ θ¨ ]T

และการวัด (เอาต์พุต) คือ

pk=[xk yk zk ϕ ψ θ ]T

xkTRUE=n=0kx˙nTRUEnΔt+12n=0kx¨nTRUE(nΔt)2
x,y,z

นี่เป็นเพียง "สมการการเคลื่อนที่" แบบคลาสสิก ดูสมการ (3) ที่นี่


pk=αpk1+(α1)pk

α

Δt;12(Δ2)

Δt1/fs

1
fsΔtΔt12Δt2

0

ตัวกรองความถี่ต่ำของคุณอาจเป็นเช่นนั้น

pk=αpk1+(1α)zk

zkkpkk

LPF สามารถเปลี่ยนรูปเป็นถัดไป:

pk=pk1+K(zkpk1)
K=(1α)

K

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.