วันพุธที่ 28 มกราคม พ.ศ. 2552

เจ็บใจ Gimbal lock

นึกว่าจะสำเร็จเสร็จแล้วเชียว สวรรค์ล่มเพราะเจ้า Gimbal lock นี่เอง ต้องมานั่งรื้อใหม่หมด ถ้าทำแค่ Tilt Sensor ก็ไม่มีปัญหา แต่พอคิดถึงว่ามันจะกลายเป็นก้างชิ้นใหญ่ในอนาคต สู้ลงมือเปลี่ยนซะตอนนี้เลยดีกว่า เหนื่อยจริงๆกลับไปอ่านเลขอีกมากมาย...

วันจันทร์ที่ 12 มกราคม พ.ศ. 2552

พายเรือวนอยู่ในอ่าง kalman

หายไปนาน เอาเวลาไปทุ่มกับ imu ทั้งวันทั้งคืนมาร่วมสองเดือน ยังไปไม่ถึงไหนเท่าไรเลย เนื่องด้วยความยากและการต้องเคาะสนิมเลขออกมาใช้

ความยาก มันมาจากไหนเหรอ อย่างแรก จากความผิดพลาดของค่าที่อ่านได้จาก sensor แต่ละตัว อันนี้ก็ขึ้นอยู่กับความถูกแพงของ sensor ที่เราใช้ด้วย

1. accelerator ชื่อมันบอกว่าเป็นการวัดความเร่ง (dynamics) ก็ดีพอใช้ได้สำหรับค่าความเร่ง ในแนว xy ซึ่งสมมติว่าไม่มีแรง g เข้ามาเกี่ยวนะ แต่ที่เราอยากได้มันคือค่า position (ทำไมต้องเขียนเป็นภาษาอังกฤษด้วยนะ) ลองดุว่า ค่า a ที่เราได้จาก sensor จริงๆมันคือ

a_sensor = a_real + a_bias + a_noise

พอ integrate สองครั้งเพื่อให้ได้ค่า position ค่า bias และ noise จึงเข้ามามีผลอย่างมากมาย ถ้าเราไม่มีการวัดค่า position จริงๆ เข้ามาเป็น input ป้อนกลับ เพื่อไว้แก้ค่า error เพื่อใช้ในการทำนายค่าล่วงหน้าใน kalman filter มันก็ช่วยอะไรไม่ได้มาก ใช้วิธีการเขียนโปรแกรมธรรมดา ทำ low pass filter เอาก็พอแล้ว ที่ว่า พอแล้ว หมายถึงมันได้ดีที่สุดเท่านี้แหละ

ผลจากการที่มันสามารถวัดความเร่งได้ แน่นอนว่ามันต้อง sense แรง g (ที่เป็น bias ในสภาวะ dynamics) ได้ กลายเป็นประโยชน์เมื่อทำให้เราสามารถวัดมุมเอียงได้จากการแตกแรง g ในสภาวะ static เรียกว่ามันกลายเป็น tilt sensor ไป แป่ว

2. gyroscope เป็น sensor วัดความเร็วเชิงมุม อันนี้ง่ายขึ้นมาหน่อยเพราะ อินทิเกรตทีเดียว ก็ได้ ค่ามุมแล้ว เรียกว่าเราสามารถรู้ว่าเราหมุนไปกี่องศาในแต่ละแกนเมื่อเวลาผ่านไป เรียกว่าเรารู้ orientation ของตัวเราได้ ข้อเสียมันมี(ทำไมต้องมีด้วยนะ) มันสามารถวัดอย่างถูกต้องได้เพียงช่วงเวลาสั้นๆ หลังจากนั้นแล้วค่าที่วัดได้จะมี bias เรียกว่า drift จะต้องมีกระบวนการขจัดเจ้าสิ่งนี้ออกปาย

3. magnetometer เค้าเปรียบเทียบว่า ถ้าไม่มี ทิศทางก็เหมือนเราอยู่ในห้องมืด ค่าที่ได้จาก sensor ทั้งสองตัวข้างบน ไม่สามารถบอกได้ว่าเราอยู่ตรงไหน(อ้างอิงกับสิ่งหนึ่งสิ่งใดภายนอก) เจ้า sensor ตัวนี้มีดีตรงมัน sense สนามแม่เหล็กโลกได้ เหมือนเข็มทิศนั่นเอง ข้อเสียของมันก็คืออะไรที่มีคุณสมบัติแม่เหล็กมันก็ sense ได้ทั้งนั้น แปลว่ามันไม่ทนต่อสัญญาณรบกวนนั่นเอง แป่ว(อีกที)

เมื่อเอาเจ้าพวกนี้มายำรวมๆกันเรียกให่เท่ห์ว่า fusion ก็จะได้ sensor ที่บอกได้ทั้ง orientation และ positioning ถ้าใช้ร่วมกับ GPS ก็จะได้ localization ด้วย แต่มันก็ต้องมีศิลปะในการยำไม่ใช้น้อย

ประโยชน์ของมันนั้นมีมากหลาย ถ้ามันเวิร์คอะนะ ทั้งเรื่อง motion capture ที่ตัวผมเองสนใจ และนั่งหน้าดำคร่ำเครียดพัฒนาอยู่, uav (อากาศยานไร้คนขับ), camera match moving สำหรับทำ realtime video composite นี่เอาแค่หย่ายๆนะ