4 คะแนน โดย GN⁺ 20 일 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Kalman Filter คือ อัลกอริทึมประมาณค่าสถานะที่เหมาะสมที่สุด สำหรับประเมินสถานะของระบบและคาดการณ์อนาคตในสภาพแวดล้อมที่มีสัญญาณรบกวนสูง
  • อธิบายกระบวนการเพิ่มความแม่นยำด้วยการ ทำซ้ำขั้นตอนการคาดการณ์และการอัปเดต โดยใช้ค่าที่วัดได้ของระยะทางและความเร็ว ผ่านตัวอย่างเรดาร์ติดตามเครื่องบิน
  • ในแต่ละขั้นตอนจะคำนวณ เวกเตอร์สถานะ, เมทริกซ์โคเวเรียนซ์, Kalman Gain เพื่อรวมค่าที่วัดได้และค่าที่คาดการณ์แบบถ่วงน้ำหนัก
  • แสดงเชิงตัวเลขว่าค่า ความคลาดเคลื่อนของการประมาณ (ความไม่แน่นอน) ลดลง เมื่อเวลาผ่านไป โดยพิจารณาทั้งความไม่แน่นอนของการวัดและของแบบจำลองร่วมกัน
  • มอบพื้นฐานความเข้าใจที่ช่วยให้ ออกแบบและนำฟิลเตอร์ไปใช้งานได้ด้วยตนเอง ผ่านตัวอย่างเชิงตัวเลขที่เข้าใจง่ายและการคำนวณทีละขั้นตอน

แนะนำ Kalman Filter

  • Kalman Filterคืออัลกอริทึมประมาณค่าสถานะที่ใช้ประเมินและคาดการณ์สถานะของระบบในสภาพแวดล้อมที่มีความไม่แน่นอน เช่น สัญญาณรบกวนจากการวัดหรือปัจจัยภายนอก

    • ใช้เป็นเครื่องมือสำคัญในหลายสาขา เช่น การติดตามวัตถุ การนำทาง วิทยาการหุ่นยนต์ และการควบคุม
    • ตัวอย่างเช่น ใช้ลด noise ของเส้นทางเมาส์เพื่อให้การเคลื่อนไหวลื่นขึ้น หรือนำไปใช้ตรวจจับแนวโน้มของข้อมูลการเงินและการพยากรณ์อากาศ
    • ชี้ให้เห็นว่าสื่อการสอนจำนวนมากเน้นการพิสูจน์ทางคณิตศาสตร์มากเกินไปจนขาดตัวอย่างใช้งานจริง ขณะที่เนื้อหานี้ให้ คำอธิบายเชิงสัญชาตญาณที่เน้นตัวอย่างเชิงตัวเลข
    • กล่าวถึงกรณีที่ฟิลเตอร์ออกแบบไม่ดีจนติดตามเป้าหมายล้มเหลว พร้อมเสนอวิธีแก้ไข
    • เป้าหมายคือช่วยให้ผู้อ่าน สร้างความเข้าใจจนสามารถออกแบบและนำ Kalman Filter ไปใช้งานได้เอง

เส้นทางการเรียนรู้

  • ภาพรวมหน้าเดียว: แนะนำแนวคิดหลักและสมการสำคัญแบบกระชับ โดยต้องมีเพียงความรู้พื้นฐานด้านสถิติและพีชคณิตเชิงเส้น
  • เว็บทิวทอเรียลฟรี: ทิวทอเรียลออนไลน์ที่สร้างความเข้าใจแบบเป็นขั้นตอนด้วยตัวอย่างเชิงตัวเลข โดยไม่ต้องมีความรู้ล่วงหน้า
  • Kalman Filter from the Ground Up (หนังสือ): มีตัวอย่างเชิงตัวเลขครบถ้วน 14 ตัวอย่าง ครอบคลุมฟิลเตอร์ไม่เชิงเส้น (Extended/Unscented) และการรวมข้อมูลจากหลายเซ็นเซอร์ พร้อมโค้ด Python·MATLAB

ความจำเป็นของการคาดการณ์

  • อธิบายความจำเป็นของการประมาณสถานะและการคาดการณ์ผ่าน ตัวอย่างเรดาร์ติดตามเครื่องบิน
    • สถานะของระบบคือ ตำแหน่งของเครื่องบิน (ระยะทาง (r)) และเรดาร์คำนวณระยะทางจากเวลาสะท้อนกลับของพัลส์
    • ความเร็ว (v) สามารถวัดได้จากปรากฏการณ์ Doppler
  • การคาดการณ์ตำแหน่งหลังช่วงเวลา (\Delta t) ทำผ่าน แบบจำลองพลวัต
    • ตัวอย่าง: (r_{t_1} = r_{t_0} + v \cdot \Delta t)
    • (\Delta t = 5s), (r_{t_0}=10,000m), (v=200m/s) → (r_{t_1}=11,000m)
  • ในสภาพแวดล้อมจริงมีทั้งสัญญาณรบกวนจากการวัด (Measurement Noise) และความไม่แน่นอนของแบบจำลอง (Process Noise)
    • แม้จะมีเรดาร์หลายตัววัดพร้อมกัน ผลลัพธ์ก็อาจต่างกันเล็กน้อย
    • สมมติฐานว่าความเร็วคงที่อาจพังทลายลงได้จากปัจจัยภายนอก เช่น ลม
  • Kalman Filter ทำทั้งการประมาณสถานะปัจจุบันและการคาดการณ์สถานะในอนาคตพร้อมกัน และให้ ค่าความไม่แน่นอน (ความแปรปรวน) ของการประมาณแต่ละครั้งควบคู่กัน
    • เป็น อัลกอริทึมที่เหมาะสมที่สุด สำหรับลดความไม่แน่นอนของการประมาณสถานะ

ตัวอย่าง Kalman Filter

  • เรดาร์ 1 มิติวัดระยะทาง (r) และความเร็ว (v) ของเครื่องบิน

    • เวกเตอร์สถานะ (\boldsymbol{x} = [r, v]^T)
    • ใช้เวกเตอร์และเมทริกซ์ในการอธิบายระบบ
  • Iteration 0 — การกำหนดค่าเริ่มต้นและการคาดการณ์

  • การกำหนดค่าเริ่มต้น

    • กำหนดค่าเริ่มต้นของฟิลเตอร์ด้วยค่าที่วัดได้ครั้งแรก (\boldsymbol{z}_0 = [10{,}000, 200]^T)
    • ความไม่แน่นอนของการวัด (ส่วนเบี่ยงเบนมาตรฐาน): ระยะทาง 4m, ความเร็ว 0.5m/s (\boldsymbol{R}_0 = \begin{bmatrix}16 & 0 \ 0 & 0.25\end{bmatrix})
    • ค่าประมาณสถานะเริ่มต้น (\hat{\boldsymbol{x}}_{0,0} = \boldsymbol{z}_0)
    • โคเวเรียนซ์เริ่มต้น (\boldsymbol{P}_{0,0} = \boldsymbol{R}_0)
  • ขั้นตอนการคาดการณ์

    • ช่วงเวลา (\Delta t = 5s)
    • เมทริกซ์การเปลี่ยนผ่านสถานะ (\boldsymbol{F} = \begin{bmatrix}1 & 5 \ 0 & 1\end{bmatrix})
    • สถานะที่คาดการณ์ (\hat{\boldsymbol{x}}{1,0} = \boldsymbol{F}\hat{\boldsymbol{x}}{0,0} = [11{,}000, 200]^T)
    • การคาดการณ์โคเวเรียนซ์ (ไม่รวม process noise): (\boldsymbol{P}{1,0} = \boldsymbol{F}\boldsymbol{P}{0,0}\boldsymbol{F}^T = \begin{bmatrix}22.25 & 1.25 \ 1.25 & 0.25\end{bmatrix})
    • เพิ่ม process noise ((\sigma_a = 0.2m/s^2)): (\boldsymbol{Q} = \begin{bmatrix}6.25 & 2.5 \ 2.5 & 1\end{bmatrix})
    • โคเวเรียนซ์ของการคาดการณ์ขั้นสุดท้าย: (\boldsymbol{P}_{1,0} = \begin{bmatrix}28.5 & 3.75 \ 3.75 & 1.25\end{bmatrix})
  • สรุป Iteration 0

    • ใช้การวัดครั้งแรกเพื่อกำหนดค่าเริ่มต้นของสถานะและโคเวเรียนซ์
    • ใช้แบบจำลองการเปลี่ยนผ่านสถานะเพื่อคาดการณ์สถานะถัดไปและความไม่แน่นอน
    • สมการคาดการณ์
      • การคาดการณ์สถานะ: (\hat{\boldsymbol{x}}{n+1,n} = \boldsymbol{F}\hat{\boldsymbol{x}}{n,n} + \boldsymbol{G}\boldsymbol{u}_n)
      • การคาดการณ์โคเวเรียนซ์: (\boldsymbol{P}{n+1,n} = \boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T + \boldsymbol{Q})
  • Iteration 1 — การอัปเดตและการคาดการณ์

  • การอัปเดตฟิลเตอร์

    • การวัดครั้งที่สอง: (\boldsymbol{z}_1 = [11{,}020, 202]^T)
    • ความไม่แน่นอนของการวัดเพิ่มขึ้น (ส่วนเบี่ยงเบนมาตรฐาน: ระยะทาง 6m, ความเร็ว 1.5m/s) (\boldsymbol{R}_1 = \begin{bmatrix}36 & 0 \ 0 & 2.25\end{bmatrix})
    • เมื่อเทียบกับโคเวเรียนซ์การคาดการณ์ (\boldsymbol{P}_{1,0}) พบว่าความไม่แน่นอนของการคาดการณ์ต่ำกว่า
    • Kalman Filter รวมค่าที่วัดได้กับค่าที่คาดการณ์ด้วยค่าเฉลี่ยถ่วงน้ำหนัก
      • น้ำหนัก (K_1): Kalman Gain
      • สมการอัปเดตสถานะ: (\hat{\boldsymbol{x}}{1,1} = \hat{\boldsymbol{x}}{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1 - \boldsymbol{H}\hat{\boldsymbol{x}}{1,0}))
      • เมทริกซ์การสังเกต (\boldsymbol{H} = \boldsymbol{I})
    • การคำนวณ Kalman Gain: (\boldsymbol{K}1 = \boldsymbol{P}{1,0}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{1,0}\boldsymbol{H}^T + \boldsymbol{R}_1)^{-1}) ผลลัพธ์: (\boldsymbol{K}_1 = \begin{bmatrix}0.4048 & 0.6377 \ 0.0399 & 0.3144\end{bmatrix})
    • innovation: (\boldsymbol{z}1 - \hat{\boldsymbol{x}}{1,0} = [20, 2]^T)
    • ค่าชดเชย: (\boldsymbol{K}_1[20, 2]^T = [9.37, 1.43]^T)
    • สถานะหลังอัปเดต: (\hat{\boldsymbol{x}}_{1,1} = [11{,}009.37, 201.43]^T)
  • การอัปเดตโคเวเรียนซ์

    • ใช้รูปแบบแบบย่อ: (\boldsymbol{P}_{1,1} = (\boldsymbol{I} - \boldsymbol{K}1)\boldsymbol{P}{1,0})
    • ผลลัพธ์: (\boldsymbol{P}_{1,1} = \begin{bmatrix}14.57 & 1.43 \ 1.43 & 0.71\end{bmatrix})
    • หลังอัปเดต ความไม่แน่นอนต่ำกว่าทั้งความไม่แน่นอนของการคาดการณ์และของการวัด → เมื่อรวมการวัดกับการคาดการณ์ ความไม่แน่นอนจะลดลงเสมอ
  • ขั้นตอนการคาดการณ์

    • คาดการณ์เวลา (t_2) ถัดไป
      • การคาดการณ์สถานะ: (\hat{\boldsymbol{x}}{2,1} = \boldsymbol{F}\hat{\boldsymbol{x}}{1,1} = [12{,}016.5, 201.43]^T)
      • การคาดการณ์โคเวเรียนซ์: (\boldsymbol{P}{2,1} = \boldsymbol{F}\boldsymbol{P}{1,1}\boldsymbol{F}^T + \boldsymbol{Q} = \begin{bmatrix}52.86 & 7.47 \ 7.47 & 1.71\end{bmatrix})
    • หากเวลาผ่านไปโดยไม่มีการวัด ความไม่แน่นอนจะเพิ่มขึ้นอีกครั้ง
  • สรุป Iteration 1

    • ขั้นตอนการอัปเดต: รวมการคาดการณ์กับการวัดด้วย Kalman Gain
    • ขั้นตอนการคาดการณ์: ส่งต่อสถานะที่อัปเดตแล้วไปยังเวลาถัดไป
    • สมการสำคัญ
      • การอัปเดตสถานะ: (\hat{\boldsymbol{x}}{n,n} = \hat{\boldsymbol{x}}{n,n-1} + \boldsymbol{K}_n(\boldsymbol{z}n - \boldsymbol{H}\hat{\boldsymbol{x}}{n,n-1}))
      • การอัปเดตโคเวเรียนซ์ (Joseph form): (\boldsymbol{P}_{n,n} = (\boldsymbol{I} - \boldsymbol{K}n\boldsymbol{H})\boldsymbol{P}{n,n-1}(\boldsymbol{I} - \boldsymbol{K}_n\boldsymbol{H})^T + \boldsymbol{K}_n\boldsymbol{R}_n\boldsymbol{K}_n^T)
      • Kalman Gain: (\boldsymbol{K}n = \boldsymbol{P}{n,n-1}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{n,n-1}\boldsymbol{H}^T + \boldsymbol{R}_n)^{-1})

สรุปตัวอย่าง

  • Kalman Filter มีสามขั้นตอน: กำหนดค่าเริ่มต้น → คาดการณ์ → อัปเดต
  • หลังจากนั้นจะทำซ้ำ ลูปคาดการณ์-อัปเดต ต่อเนื่อง
  • ทุกครั้งที่มีการวัดใหม่เข้ามา ความไม่แน่นอนจะลดลง และการประมาณสถานะของระบบจะละเอียดแม่นยำขึ้นเรื่อย ๆ
  • แหล่งเรียนรู้เพิ่มเติม
    • ทิวทอเรียล ออนไลน์ฟรี: มีตัวอย่างเชิงตัวเลขแบบเป็นขั้นตอน
    • หนังสือ Kalman Filter from the Ground Up: ครอบคลุมฟิลเตอร์เชิงเส้น·ไม่เชิงเส้น แนวทางการนำไปใช้จริง และโค้ด Python/MATLAB

1 ความคิดเห็น

 
GN⁺ 20 일 전
ความคิดเห็นจาก Hacker News
  • ผมเป็นผู้เขียนเอง เพิ่งอัปเดตหน้าโฮมของ Kalman Filter tutorial ของผมเมื่อไม่นานนี้ เพิ่ม ตัวอย่างการติดตามด้วยเรดาร์ แบบง่าย ๆ เข้าไป เพื่อให้คนที่มีพื้นฐานแค่สถิติและพีชคณิตเชิงเส้นก็พอจะเข้าใจได้
    ผมพยายามลดการไล่อนุมานสมการให้น้อยที่สุด แต่ยังคงแสดงให้เห็นอย่างเป็นสัญชาตญาณถึง noise ของการวัด, โมเดลการพยากรณ์, และกระบวนการรวมกันของฟิลเตอร์ อยากได้ฟีดแบ็กเกี่ยวกับระดับคณิตศาสตร์และความชัดเจนของคำอธิบาย

    • ผมลองไล่ดูคร่าว ๆ แล้วรู้สึกว่า process noise matrix Q โผล่มาค่อนข้างกะทันหัน คิดว่าในหนังสือน่าจะมีคำอธิบายอยู่ แต่ถ้ามีเหตุผลแบบสั้น ๆ ว่าทำไมถึงได้ค่านั้นก็น่าจะดี
    • โดยรวมชัดเจนดี แค่ช่วงต้น ๆ ความแตกต่างระหว่าง system model กับตัว Kalman filter เองยังค่อนข้างคลุมเครือนิดหน่อย ตอนที่อธิบายการสร้าง state matrix ผมนึกว่ายังอยู่ในส่วนอธิบายโมเดล แต่แล้วมันก็เชื่อมไปเป็นสมการของฟิลเตอร์ทันที เลยทำให้งงเล็กน้อย
    • ผมชอบเมนู accessibility มาก ปรับการอ่านของหน้าได้ง่ายจริง ๆ
    • เมื่อราว 6 เดือนก่อนผมเคยพยายาม implement Kalman filter เอง แต่โครงสร้างมันต่างกันพอสมควรตามโดเมนการใช้งาน เลยหยุดไปกลางทาง ครั้งนี้หวังว่าเนื้อหาชุดนี้จะช่วยให้ผมเรียนจนจบได้มากทีเดียว
    • คำว่า “optimal algorithm” ในช่วงต้นของ tutorial รู้สึกค่อนข้างนามธรรมไปหน่อย ถ้าช่วยขยายความสั้น ๆ ก่อนจะลงคณิตศาสตร์ก็น่าจะดี
  • ไกด์เชิงสัญชาตญาณ ที่ผมคิดไว้มีดังนี้

    1. เข้าใจ weighted least squares และเรียนรู้วิธีอัปเดตค่าประมาณเดิมด้วยค่าที่วัดใหม่และความไม่แน่นอนของมัน
    2. ถ้าสมมติว่าค่าเฉลี่ยจริงไม่เปลี่ยน วิธีนี้จะทำงานได้ดี
    3. แต่ถ้าค่าเฉลี่ยเปลี่ยนไป Kalman filter จะใช้โมเดลที่ทำนายการเปลี่ยนแปลงนั้น
    4. หลังจากพยากรณ์แล้ว ก็จะกลับมาเป็นปัญหาแบบเดียวกับข้อ (1) อีกครั้ง
      สุดท้ายแล้วแก่นสำคัญคือ least squares และภายใต้สมมติฐานบางอย่างก็สามารถพิสูจน์ได้ว่านี่คือวิธีที่เหมาะที่สุด
  • บทความ “How a Kalman Filter Works in Pictures” ดีมากจริง ๆ

    • ผมเองก็ชอบ แนวอธิบายด้วยภาพ ของบทความนั้นเหมือนกัน แต่ tutorial ของผมตั้งใจจะเน้น ตัวอย่างเรดาร์ แบบเป็นขั้นเป็นตอน เพื่ออธิบายทั้งสัญชาตญาณและจุดที่มักพลาดกัน
    • แต่บางครั้งแม้แต่คำอธิบาย “แบบง่าย” พวกนี้ก็ยังรู้สึกซับซ้อนเกินไปอยู่ดี โดยแก่นแท้แล้ว Kalman filter เป็น estimator ชนิดหนึ่ง
      ตัวอย่างเช่น low-pass filter ก็ถือเป็น estimator แบบหนึ่งเหมือนกัน แต่ Kalman filter เพิ่ม process model และ การคำนวณ covariance เข้าไป ทำให้มันปรับตัวแบบไดนามิกได้
      มันสะท้อนความสัมพันธ์ระหว่างตัวแปรที่สัมพันธ์กัน เช่น ตำแหน่งและความเร็ว ทำให้ค่าที่วัดเพียงค่าเดียวส่งผลต่อการประมาณค่าของตัวแปรอื่นได้ด้วย
      อย่างไรก็ตาม เพราะมันอิงกับพีชคณิตเชิงเส้น จึงต้องสมมติ Gaussian noise และถ้าเป็นปัญหาไม่เชิงเส้นก็ต้องใช้ตัวแปรดัดแปลงอย่าง EKF หรือ UKF
  • ถ้าจะเข้าใจ Kalman filter ต้องรู้ 4 อย่างต่อไปนี้

    1. system model
    2. internal state
    3. ความหมายของ optimal estimation
    4. แนวคิดเรื่อง covariance
      ฟิลเตอร์นี้เป็นวิธีการทางคณิตศาสตร์สำหรับ ประมาณค่าอย่างเหมาะที่สุด ของสถานะภายในและ covariance ของระบบโดยอิงจากค่าที่วัดได้
      ผมคิดว่าหนังสือของ Alex Becker เป็นหนังสือเริ่มต้นที่ยอดเยี่ยมสำหรับหัวข้อนี้ มีตัวอย่างเยอะและช่วยสร้างสัญชาตญาณได้ดีมาก
    • ขอบคุณสำหรับฟีดแบ็ก ผมกำลังพิจารณา เล่ม 2 ที่จะไปแตะหัวข้อขั้นสูงกว่านี้ แต่ก็อยากทำให้ชัดเจนว่า EKF กับ UKF เป็นเพียงการประมาณ ดังนั้น ไม่ใช่คำตอบที่เหมาะที่สุดแบบสมบูรณ์
  • ตอนเรียน Kalman filter ผมรู้สึกว่า มันจะเข้าใจได้เป็นธรรมชาติมากขึ้นเมื่อมี อินพุตตั้งแต่สองตัวขึ้นไปที่มีคุณลักษณะของ noise ต่างกัน แต่ tutorial ส่วนใหญ่พูดถึงแค่อินพุตเดี่ยว

    • ในหนังสือของผมมีบทหนึ่งที่แนะนำแนวคิด sensor fusion ถ้าอยากศึกษาลึกขึ้น ผมแนะนำหนังสือของ Bar-Shalom หรือ Blackman
    • จริง ๆ แล้วแก่นของ Kalman filter คือ state estimation ส่วน sensor fusion เป็นเพียงหนึ่งในการประยุกต์ใช้เท่านั้น ถ้าเอาสองอย่างนี้มาเท่ากันจะทำให้เข้าใจผิดได้
  • Kalman filter ถูกใช้งานจริงเยอะมาก เช่นที่ Sendspin ก็ใช้มันเพื่อซิงก์ลำโพง
    สามารถดูได้จาก ไลฟ์เดโม และ เอกสารการพัฒนา

  • ผมสงสัยว่าแนวคิดของ Kalman filter จะเอาไปใช้กับ คำให้การของมนุษย์ ได้ไหม

    • เป็นไอเดียที่น่าสนใจ เราอาจมองการสังเกตของมนุษย์เป็น เซ็นเซอร์ที่มี noise ได้เหมือนกัน แต่ Kalman filter มาตรฐานตั้งอยู่บนสมมติฐานว่าเป็น noise แบบ Gaussian ที่ไม่มีอคติ ซึ่งในกรณีของมนุษย์ สมมติฐานนี้จะใช้ได้จริงหรือเปล่าก็น่าสงสัย
  • ที่ thekalmanfilter.com ก็มีคำอธิบายแบบง่าย ๆ ให้ดูเหมือนกัน

  • บทความนี้ดูเหมือน โฆษณาหนังสือราคาแพง มากกว่า ทั้งที่ก็มีแหล่งข้อมูลฟรีอยู่เยอะแล้ว เช่น Kalman and Bayesian Filters in Python อยากรู้ว่าหนังสือเล่มนี้มีจุดเด่นเฉพาะอะไร

    • เป็นคำถามที่ดี เนื้อหาหลักของ Kalman filter เปิดให้อ่านฟรีอยู่แล้ว ส่วนในหนังสือจะพูดถึง การจูน, ข้อพิจารณาด้านการออกแบบ, และตัวอย่างเพิ่มเติม มากกว่า
    • หนังสือของ Roger Labbe กับ Jupyter notebook นั้นยอดเยี่ยมมาก ไม่ใช่แค่เรื่อง Kalman filter แต่ยังช่วยให้เข้าใจวิธีเข้าหาปัญหาการประมาณค่าโดยทั่วไปได้ดีด้วย
    • ผมดูแหล่งข้อมูลอื่นมาเยอะเหมือนกัน แต่หนังสือเล่มนี้ อธิบายรายละเอียดได้ครบถ้วนมาก จึงน่าแนะนำ และยังมี tutorial ฟรีให้ดูได้ ที่นี่
    • แหล่งที่ลิงก์มานั้นเป็น งานคลาสสิกระดับตำนาน
    • แหล่งข้อมูลดี ๆ มีไม่มากนัก จากที่ผมเคยเห็น ของที่ทำออกมาดีจริง ๆ นับชิ้นได้เลย และชิ้นนี้ก็เป็นงานที่รู้สึกได้ถึงความพยายามจะอธิบาย Kalman filter ในมุมที่ทำให้เข้าใจได้ใหม่อีกครั้ง