แอป Transit ติดตามตำแหน่งรถไฟใต้ดินได้โดยไม่ต้องใช้ GPS
(blog.transitapp.com)- แม้อยู่ในอุโมงค์ที่ GPS·เซลลูลาร์·Wi‑Fi ใช้งานไม่ได้ GO trip ของ Transit ก็ยังแสดงตำแหน่งคาดการณ์ จำนวนสถานีที่เหลือ และ ETA ต่อไปได้
- หัวใจสำคัญคือการใช้ สัญญาณการสั่นจากมาตรความเร่ง ของโทรศัพท์เพื่อจำแนกว่าผู้ใช้อยู่บนรถไฟที่กำลังเคลื่อนที่หรือไม่ แล้วคำนวณร่วมกับตำแหน่งยืนยันล่าสุดและตารางเวลาเดินรถ
- ทีม Transit รวบรวมข้อมูลการติดป้ายกำกับด้วยมือจากการเดินทางหลายร้อยครั้งและจากหลายเมือง และในรถไฟใต้ดิน New York City ก็ขึ้นทุกสายเพื่อบันทึกการสั่นของรถไฟ บันไดเลื่อน และลิฟต์
- โมเดลทำนายตำแหน่งสุดท้าย The Mixer ทายตำแหน่งปัจจุบันได้ถูกต้องด้วยความน่าจะเป็น 90% และในการทดสอบช่วงแรก รองรับการตรวจจับสถานีใต้ดิน 1.5 ล้านครั้งจากการเดินทางราว 400,000 ครั้ง
- โมเดลทั้งสองถูกบีบอัดเป็นไฟล์ขนาดเล็กและรันบนโทรศัพท์ จึงสามารถ นับสถานีแบบออฟไลน์ ได้ และข้อมูลการสั่นจะไม่ถูกส่งไปยังเซิร์ฟเวอร์ของ Transit
ทำไมการระบุตำแหน่งใต้ดินจึงยาก
- ภายในอุโมงค์รถไฟใต้ดิน, metro, U-Bahn มักมีกรณีที่ บริการเซลลูลาร์, Wi‑Fi, GPS ทำงานได้ไม่เสถียร
- ก่อนหน้านี้ หากต้องการดูสถานีที่กำลังจอดหรือ ETA ระหว่างอยู่ใต้ดิน ผู้ใช้ต้องพึ่งป้ายบนชานชาลา เสียงประกาศสถานี หรือจอดิจิทัลภายในขบวนรถ
- Transit ไม่ได้สร้างดาวเทียม GPS ที่ทะลุพื้นดินได้ แต่ใช้ แพตเทิร์นการสั่น ของโทรศัพท์เพื่อทำนายตำแหน่งรถไฟในอุโมงค์แทน
ข้อมูลที่แสดงใน GO trip
- ผู้ใช้เพียงเริ่ม GO trip ใน Transit
- เริ่มได้ทันทีจากหน้ารายละเอียดเส้นทาง
- เริ่มจากแผนการเดินทางที่วางไว้ก็ได้
- แม้แอปจะไม่รู้พิกัด GPS ก็ยังแสดงข้อมูลต่อไปนี้ได้
- ตำแหน่งคาดการณ์ บนแผนที่
- การนับถอยหลังจำนวนสถานีที่เหลือ
- ETA ที่อัปเดตแล้ว
ขั้นที่ 1: จำแนกการเคลื่อนไหวบนรถไฟ
- เมื่อเข้าอุโมงค์ที่ GPS ใช้งานได้ไม่ดี ขั้นแรกคือต้องตัดสินว่าผู้ใช้อยู่บน รถไฟที่กำลังเคลื่อนที่ หรือไม่
- Stephen พนักงานของ Transit บันทึกข้อมูลจากมาตรความเร่งด้วยโทรศัพท์ระหว่างเดินทางไปออฟฟิศที่ Montreal และติดป้ายกำกับแต่ละช่วงของการเดินทาง
- ช่วงที่เริ่มเดิน
- ช่วงที่ลงบันได
- ช่วงที่รอบนชานชาลา
- ช่วงที่รถไฟออกตัวและหยุด
- ข้อมูลความเร่งถูกจัดระเบียบด้วยวิธีที่ได้แรงบันดาลใจจาก Fourier transform แล้วแปลงเป็น ข้อมูลความถี่
- บนรถไฟที่กำลังเคลื่อนที่ โทรศัพท์สั่นที่ประมาณ 5Hz ขณะที่ตอนเดินจะอยู่ที่ประมาณ 2Hz
- เนื่องจากมีทั้งสัญญาณรบกวนแบบสุ่มและความถี่ฮาร์มอนิก จึงอาศัยเพียงแพตเทิร์นง่าย ๆ ไม่พอ ต้องใช้โมเดลแมชชีนเลิร์นนิงที่จำแนกประเภทการเคลื่อนไหวและต้องมีข้อมูลฝึกจำนวนมาก
ขั้นที่ 2: เก็บข้อมูลคำตอบจริง
- ทีม Transit ติดป้ายกำกับข้อมูลจากการเดินทางหลายร้อยครั้งและจากหลายสิบเมือง เพื่อสร้าง โมเดลทั่วไป ที่สามารถตัดสินว่าเป็น “รถไฟที่กำลังเคลื่อนที่” ได้โดยไม่ขึ้นกับชนิดของรถไฟหรือราง
- Étienne และ Elijah เก็บข้อมูลการสั่นจากรถไฟใต้ดิน New York City ซึ่งเป็นระบบใต้ดินที่ได้รับความนิยมสูงสุดในแอป
- ทั้งคู่ถือ iPhone, Android และ MetroCard ขึ้นรถบัสและรถไฟของ MTA ตลอดหนึ่งสัปดาห์ พร้อมติดป้ายกำกับแต่ละขั้นของการเดินทาง
- เป้าหมายคือหาสัญญาณบอกใบ้ที่แยกการสั่นบนรถไฟออกจากการสั่นประเภทอื่นภายในสถานี
- พวกเขาขึ้นลงบันไดเลื่อนและลิฟต์ พร้อมใส่คำอธิบายประกอบจนถึงจังหวะที่หยุดนิ่ง
- พวกเขาโดยสารทุกสายของรถไฟใต้ดิน New York ตั้งแต่ Bronx ถึง Brighton Beach รวมทั้ง Manhattan Bridge, Williamsburg Bridge และ Canarsie Tunnel
ขั้นที่ 3: ฝึกตัวจำแนกการเคลื่อนไหว
- จากข้อมูลเซ็นเซอร์ที่จัดระเบียบและประมวลผลแล้ว motion classifier ถูกฝึกให้แยกความต่างระหว่าง “รถไฟที่กำลังเคลื่อนที่” กับ “ไม่ใช่รถไฟที่กำลังเคลื่อนที่”
- โมเดลรับข้อมูลเซ็นเซอร์ที่ไม่มีการติดป้ายกำกับ แล้วประเมินว่าโทรศัพท์อยู่ในรถไฟที่กำลังวิ่ง รถไฟที่หยุดนิ่ง ระหว่างเดิน หรือกำลังใช้บันไดเลื่อน
- Transit นำผลประเมินนี้ไปเทียบกับ ground truth ที่สร้างจากการใส่คำอธิบายประกอบด้วยมือ แล้วปรับตรรกะเพื่อให้ทำนายได้แม่นยำขึ้น
- หลังการปรับแต่ง โมเดลสามารถแยกได้ว่าผู้ใช้อยู่บนรถไฟที่กำลังเคลื่อนที่จริง หรือเป็นเพียงกรณีที่โทรศัพท์สั่นเฉย ๆ
ขั้นที่ 4: โมเดลทำนายตำแหน่ง The Mixer
- หลังรู้แล้วว่ากำลังเคลื่อนที่หรือไม่ ขั้นต่อไปคือต้องทำนายให้ได้ว่ารถไฟของผู้ใช้อยู่ตรงไหนกันแน่
- โมเดลสุดท้าย The Mixer คำนวณตำแหน่งปัจจุบันโดยถ่วงน้ำหนักองค์ประกอบต่อไปนี้
- การทำนายประเภทการเคลื่อนไหว ว่าผู้ใช้อยู่บนรถไฟที่กำลังเคลื่อนที่หรือไม่
- ตำแหน่งยืนยันล่าสุดของผู้ใช้
- ตำแหน่งยืนยันล่าสุดนั้นเพิ่งเกิดขึ้นไม่นานหรือเกิดมานานแล้ว
- ตารางเวลาเดินรถ
- The Mixer ทำนายตำแหน่งปัจจุบันได้ถูกต้องด้วยความน่าจะเป็น 90%
- ในตัวอย่างการเดินทางด้วย Paris RER มีการอัปเดตตำแหน่งเป็นระยะผ่าน GPS และการสแกน Bluetooth/Wi‑Fi ระหว่างช่วงใต้ดิน และอัปเดตเหล่านี้ใช้ช่วยปรับแก้การทำนายตำแหน่งใต้ดินในช่วงที่ไม่มีการเชื่อมต่อ
- เมื่อผู้ใช้กลับขึ้นสู่พื้นดินและเข้าสู่พื้นที่ที่มีบริการเซลลูลาร์ แอปจะกลับไปใช้ ตำแหน่ง GPS มาตรฐานอีกครั้ง
การทำงานแบบออฟไลน์และการจัดการข้อมูลส่วนตัว
- เมื่อทำนายตำแหน่งได้แล้ว ก็สามารถอัปเดต ETA ของผู้ใช้ได้แม้อยู่ใต้ดิน
- ผู้ใช้สามารถนับสถานีได้โดยไม่ต้องพึ่ง GPS ที่ไม่เสถียรหรือคอยมองจอภายในขบวนรถ
- การนับสถานีทำงานแบบ ออฟไลน์ ทั้งหมด
- motion classifier และ The Mixer ถูกบีบอัดเป็นไฟล์ขนาดเล็กและทำงานบนโทรศัพท์
- ข้อมูลการสั่นจะไม่ถูกส่งไปยังเซิร์ฟเวอร์ของ Transit
- ไม่มีการติดตาม
- ไม่มีคุกกี้
- ข้อมูลการสั่นจะอยู่ในอุปกรณ์ของผู้ใช้
วิธีใช้และขนาดของการทดสอบช่วงแรก
- ผู้ใช้เพียงค้นหารถไฟใต้ดิน เปิด Transit และเริ่มการเดินทางด้วย GO ก็จะเห็นจำนวนสถานีลดลงทีละสถานี
- ระหว่างการทดสอบช่วงแรก Transit รองรับการตรวจจับสถานีใต้ดิน 1.5 ล้านครั้ง จาก การเดินทางราว 400,000 ครั้ง
- ระบบนำทางแบบทีละขั้นของ GO มีผู้เดินทางบนพื้นดินหลายล้านคนใช้งานอยู่แล้วใน มากกว่า 600 เมือง
- หลังจากเปิดตัว GO Bike เมื่อเดือนที่แล้ว ผู้ใช้จักรยานก็ใช้งาน GO เช่นกัน
- ด้วยฟีเจอร์นี้ ผู้โดยสารรถไฟใต้ดินจะเชื่อถือ GO ได้มากขึ้นแม้อยู่ในช่วงที่สัญญาณสื่อสารไม่ดี
- แอปใช้งานได้จาก หน้าดาวน์โหลด Transit
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ราว 10 ปีก่อนผมเคยอ่านบล็อกโพสต์ของบริษัทฝรั่งเศสชื่อ snips ซึ่งเป็นวิธีที่แอปใช้เซ็นเซอร์วัดความกดอากาศเพื่อตรวจจับช่วงที่รถไฟกำลังเข้าออกสถานี
เขาบอกว่าเมื่อรถไฟเข้าหรือออกจากอุโมงค์ระหว่างสถานี จะเกิดความกดอากาศเพิ่มขึ้น/ลดลงแบบฉับพลัน ทำให้ได้สัญญาณที่ค่อนข้างชัดเจน
เจอแล้ว: https://medium.com/snips-ai/underground-location-tracking-3e...
ท่อนี้ตรวจจับแรงดันที่พุ่งขึ้นเพื่อดูว่าประตูกำลังหนีบมือคนอยู่หรือไม่ และยังใช้ลดเอฟเฟกต์เสียง “ปัง” ที่เกิดจากความต่างของแรงดันตอนเข้าอุโมงค์ด้วย
ไม่ใช่มือถือทุกเครื่องจะมีเซ็นเซอร์วัดความกดอากาศ และคุณภาพการวัดก็แตกต่างกันมากตามรุ่น เช่น บางเครื่องแค่จับมือถือแน่นเหมือนบีบ ค่าเซ็นเซอร์ก็กระโดดแล้ว
Transit ไม่มีสิทธิ์อ่านค่าเซ็นเซอร์วัดความกดอากาศด้วย และสำหรับการใช้งานของเรา ก็ยากจะให้เหตุผลเพียงพอในการขอสิทธิ์นั้น
แต่ดูเหมือนความแม่นยำจะขึ้นกับว่ากระแสในระบบไฟฟ้าเป็น DC หรือ AC และถึงขั้นขึ้นกับอายุของตู้โดยสารด้วย
ตัวอาคารสร้างเสร็จแล้วแต่ยังไม่ได้เปิดใช้งาน ดังนั้นเกือบ 10 ปี บริษัทเดินรถไฟท้องถิ่นจึงต้องเดินรถเข้าออกอาคาร
เจ๋งมากจริง ๆ
ตอนนี้ผมกำลังทำโปรเจกต์ บันทึกเสียง London Underground ที่วิ่งผ่านอยู่ใต้ตัวผมจริง ๆ
ได้ยิน Northern Line ที่วิ่งผ่านใต้เราอย่างชัดเจนมาก และลึกไม่ถึง 30 เมตร
ผมหมกมุ่นกับการบันทึกเสียงความถี่ต่ำคุณภาพสูงเพื่อจับเสียงรถไฟวิ่งผ่าน ไม่รู้เหมือนกันว่าทำไม แต่มันค้างอยู่ในหัวไม่ยอมไปไหน
ตัวอย่างเช่น มีอุโมงค์สองเส้นคือขาขึ้นเหนือ/ขาลงใต้ ผมสงสัยว่าจะเชื่อมโยงกับข้อมูลจริงของ TfL แล้วแยกลายเซ็นเสียงของแต่ละเส้นได้ไหม
ที่น่าสนใจกว่านั้นคือ หลังปิดให้บริการแล้ว เราจะ “จับ” รถซ่อมบำรุงที่วิ่งอยู่ใต้เราได้หรือไม่
ผมไม่รู้ว่าโปรเจกต์นี้จะเอาไปทำอะไรต่อได้อีก แต่ผมถูกตรึงใจกับความคิดเรื่องการจับเสียงของสิ่งมีชีวิตกึ่งเลือนรางที่กำลังเคลื่อนไหวอยู่ใต้ตัวผม
ผมสนใจการสั่นสะเทือนความถี่สูงที่อ่อนมาก ๆ จากวัตถุทั่วไปที่อยู่นิ่ง ซึ่งน่าจะเป็นเป้าหมายที่แทบจะตรงข้ามกันเลย ยังไม่ค่อยคืบหน้าในการหาเซ็นเซอร์เท่าไร
อยากได้เครื่องวัดการสั่นแบบเลเซอร์ดอปเปลอร์ แต่ราคาแพง
เดี๋ยวจะลองหาดูว่าใครเป็นคนทำ
[0] https://lamont.columbia.edu/
ไม่รู้ว่าเป็นเสียงหลงเหลือจากทางออกฉุกเฉินบนทางเท้า หรือพื้นดินสั่นเหมือนระฆังกันแน่
อยากขอชื่นชมสั้น ๆ ว่า โทนภาษาคุยกันเอง ของบทความดีมากจริง ๆ
แม้จะลงรายละเอียดพอสมควรอย่างกราฟความถี่ ก็ยังอ่านสนุก ผมอ่านฉบับภาษาอังกฤษ
คนเขียนทำได้ยอดเยี่ยมจริง ๆ
Transit App เป็นแอปที่เหมือนอัญมณี
คำว่า “ตัวจำแนกประเภท” ฟังแล้วอบอุ่นดี น่าประทับใจที่ทั้งบทความไม่พูดคำว่า AI เลยแม้แต่ครั้งเดียว
บางเมืองติดตั้ง BLE beacon ในอุโมงค์เพื่อส่งตำแหน่ง แล้วให้หาตำแหน่งปัจจุบันจากสัญญาณบีคอนที่แรงที่สุด
วิธีนี้ดูดีตรงที่หาคำตอบได้โดยไม่ต้องติดตั้งฮาร์ดแวร์
แต่พูดอย่างเป็นธรรม หน้าจอพวกนั้นผิดบ่อยจนน่าขำ และยังวนแสดงข้อความไร้ประโยชน์อย่าง “อย่าลืมสัมภาระของคุณ” ทำให้ต้องรอประมาณ 20 วินาทีถึงจะเห็นข้อมูลที่ต้องการ บนรถไฟนี่แย่สุด ๆ
ความคืบหน้าระหว่างสถานีน่าจะติดตามได้ดีกว่าถ้าตรวจจับ ลายเซ็นความเร่ง ของแต่ละช่วงราง
โดยเฉพาะถ้ารางไม่ได้ตรงและราบเรียบอย่างสมบูรณ์ และดูคล้ายระบบนำทางในรถยนต์ยุคแรกก่อนมี GPS ตอนนั้นใช้การนำทางแบบเดดเรกคอนนิง แล้วจับคู่รูปทรงของเส้นทางที่วัดได้กับข้อมูลแผนที่เพื่อแก้ดริฟต์
วิธีที่น่าเชื่อถือกว่าน่าจะเป็นการใช้มาตรความเร่งเพื่อตรวจสอบลักษณะของราง เช่น ความชัน การเลี้ยว ความขรุขระ หรือการผสมกันของสิ่งเหล่านี้
เสียงตอนเข้าโค้ง การเปลี่ยนของเสียงพื้นหลังบริเวณที่อุโมงค์มาบรรจบกัน ฯลฯ ก็ใช้ได้ ความเร่งที่อินทิเกรตแล้วให้ความเร็วของรถไฟ จึงมีประโยชน์เมื่อใช้ร่วมกับอินพุตอื่น
ถ้าเก็บลายเซ็นได้ก็คงเจ๋ง แต่ถ้าจะครอบคลุมเมืองและมือถือจำนวนมาก นั่นเป็นงานมหาศาล บริษัทอย่าง Google หรือ Apple อาจมีข้อมูลและศักยภาพ แต่บริษัทเล็ก ๆ ไม่น่าจะทำได้
มันมีเสียงหึ่งที่เป็นเอกลักษณ์มากซึ่งสัมพันธ์กับรอบหมุนของล้อ ผมเคยทำมาตรวัดความเร็วแบบหยาบ ๆ ด้วย SFT, การตรวจจับพีค และการกรองคาลมาน
ในฐานะผู้ใช้ Transit ขอบคุณที่ทำแอปเจ๋ง ๆ แบบนี้ขึ้นมา และนี่เป็นหนึ่งในเรื่องที่น่าหงุดหงิดที่สุดมาตลอด
ไม่ใช่แค่ Transit เท่านั้น แต่แอปไหนก็ตามที่รองรับการนำทางด้วยขนส่งสาธารณะก็เป็นเหมือนกัน และ Apple Maps ก็ไม่ใช่ข้อยกเว้น
เคยคิดอยู่ว่าต้องมีใครสักคนกำลังทำเรื่องนี้อยู่แน่ ๆ แต่พอได้อ่านถึงความคิดที่ใส่ลงไปในการออกแบบและระดับของรายละเอียดแล้วรู้สึกสดชื่นจริง ๆ เป็นงานที่ต้องใช้ความพยายามมหาศาล
ทีม Transit ควรภูมิใจได้เลยที่แก้หนึ่งใน ความไม่พอใจเล็ก ๆ แต่ใหญ่ ของแอปขนส่งสาธารณะได้
เจ๋งมาก ๆ ผมนั่ง BART บ่อย และคิดมาตลอดว่าน่าจะสนุกถ้าสร้างตัวจำแนกตำแหน่งจาก เสียงเอี๊ยดอ๊าด ที่ต่างกันไปในแต่ละตำแหน่งของอุโมงค์
แต่การใช้ข้อมูลจากมาตรวัดความเร่งน่าจะใช้งานได้จริงกว่ามาก
อาจอัดเสียงรบกวนตอนรถไฟวิ่งเพื่อดูการเคลื่อนไหวได้ แต่ผู้ใช้คงสงสัยว่าแอปกำลังแอบฟังตัวเองอยู่
ถ้าเพิ่มการ นำทางแบบประมาณตำแหน่งจากการเคลื่อนที่ ด้วยมาตรวัดความเร่งและไจโรสโคปเข้าไปกับแมชชีนเลิร์นนิง จะไม่ดีขึ้นมากเหรอ?
เช่น ตอนอยู่ในรถไฟที่กำลังวิ่ง ก็จำกัดให้เคลื่อนที่ไปตามเส้นทางอุโมงค์ที่รู้จัก และเมื่อพบว่ารถไฟออกตัว ก็จำกัดว่าผู้ใช้อยู่ภายในสี่เหลี่ยมพื้นที่จอดของขบวนนั้น
หรือว่าต่อให้มีข้อมูลเพิ่มเติม ฮาร์ดแวร์สมาร์ตโฟนก็ยังคลาดเคลื่อนเกินไป?
ถ้าใช้ไจโรสโคปอย่างเดียว มันทำงานได้ดีมากในระยะสั้น แต่แทบไร้ประโยชน์กับโค้งยาว ๆ ที่ค่อย ๆ เลี้ยว ไจโรสโคปแบบ MEMS จะดริฟต์ไปค่อนข้างมากในช่วงหลายสิบวินาที
ถ้าทำ sensor fusion ด้วยแมกนีโตมิเตอร์กับมาตรวัดความเร่งได้ ปัญหาก็จะน้อยลง แต่ในรถไฟความเร็วสูง แรงจากการเร่ง/ชะลอและแรงในโค้งทำให้หา “ทิศลง” ได้ยาก และก็ไม่รู้ว่าเข็มทิศจะทำงานได้ดีแค่ไหนในอุโมงค์รถไฟใต้ดิน
ผมมีแค่ประสบการณ์ใช้แอป “ขอบฟ้าเทียม” บนเครื่องบิน ซึ่งที่นั่นมาตรวัดความเร่งไร้ประโยชน์โดยสิ้นเชิงในการหา “ทิศลง” แค่มีการบินผาดแผลงที่เกิดแรงหลาย G ครั้งเดียว ขอบฟ้าก็ไม่รู้มุม pitch เลย ถ้าสภาพแวดล้อมแม่เหล็กมีสัญญาณรบกวนมากและ GPS ก็ปิดอยู่ ก็ไม่รู้ด้วยซ้ำว่ากำลังไปทางไหน
เพียงแต่ การนำทางแบบประมาณตำแหน่งจากการเคลื่อนที่ โดยทั่วไปไม่แม่นยำมาก ดังนั้นถ้ารู้ได้ว่าขึ้นรถไฟแล้ว ก็จะรู้ได้อย่างแม่นยำว่ารถไฟอยู่ที่ไหน และเพิ่มความแม่นยำได้มาก
ถ้าผู้ใช้ยืนนิ่งหรือนั่งนิ่งพอทุกครั้งที่รถไฟหยุด ก็คงปรับแก้ bias ของ IMU ได้ แต่ถึงอย่างนั้นการนำทางแบบประมาณตำแหน่งจากการเคลื่อนที่ก็น่าจะดริฟต์ไปมากอยู่ดี
แค่ประมาณความเร็วปัจจุบันเทียบกับบันทึกในอดีตและคาดการณ์เวลาถึง ดังนั้นควรโฟกัสที่ความเร็วมากกว่าความเร่ง
สัปดาห์ที่แล้วได้ลองใช้ฟีเจอร์นี้ใน New York subway ไม่รู้เลยว่าเป็นฟีเจอร์ใหม่
ไอเดียดีมาก แต่สำหรับผมมันไม่ทำงาน แอปแสดงว่ารถไฟอยู่หลังตำแหน่งจริงไปหลายสถานี