MapCar

Tính năng

Những gì hiện trên màn hình lái, những gì app nói ra, và những gì chỉnh được trong Cài đặt.

Màn hình lái

Những gì hiện ra trong lúc bạn đang chạy

Toàn bộ vòng lặp lái xe nằm trong một foreground service chứ không nằm ở Activity — trên head unit, Activity bị dừng bất cứ lúc nào: cài số lùi thì camera de chiếm màn hình, có cuộc gọi thì app điện thoại nhảy lên. Chuyến đi và cảnh báo phải sống qua những lần đó.

Số tốc độ đổi màu theo mức

Trắng khi trong giới hạn, vàng khi vào biên an toàn, cam khi vượt, đỏ khi vượt nhiều. Nhìn một cái là biết, không cần đọc chữ.

Biển giới hạn giống biển thật

Nền trắng viền đỏ như biển P.127 ngoài đường. Giá trị do app suy ra thì mờ hơn và có chữ ~ ước tính bên dưới.

Trạng thái GPS luôn hiển thị

Đang chờ GPS, GPS tốt, tốc độ tính từ GPS thay vì lấy từ driver, hay tốc độ lấy từ xe qua OBD — bạn luôn biết con số đang dựa trên cái gì.

Bám đường theo khung hình đang vẽ

RoadMatcher đọc các đối tượng đường đang được render để biết bạn đang ở đoạn nào, tên đường gì và cấp đường nào. Ngưỡng tính bằng mét và nới theo sai số GPS máy báo về.

Biển báo phía trước

Bảng biển báo dựng sẵn nằm trong app: tốc độ, cấm rẽ, cấm vượt, đường hầm, cầu thấp, camera. Tấm biển sắp tới hiện to ở góc màn hình kèm khoảng cách. Biển do cộng đồng báo vẽ chồng lên.

Trạm xăng, trạm sạc phía trước

Đọc thẳng từ tile bản đồ đã tải nên không cần mạng. Chỉ hiện địa điểm nằm phía trước xe — biết trước 2 km có trạm xăng thì mới kịp đổi làn.

Sửa giới hạn ngay trên xe

Chạm vào biển để mở lưới 30–120 km/h, chọn đúng con số và app ghi nhớ cho khu vực quanh đó. Muốn bỏ thì bấm ‘dùng lại mặc định’.

Chuyến đi tính liên tục và được lưu

Quãng đường, thời gian chạy, tốc độ trung bình / cao nhất và số lần vượt tốc, cộng dồn suốt hành trình rồi ghi vào lịch sử khi kết thúc. Chuyến dưới 300 m không ghi.

Thanh nhạc ngay dưới bản đồ

Hiện bài đang phát ở Zing, Spotify, YouTube Music hay radio của máy, kèm nút phát/tạm dừng và chuyển bài. MapCar không phát nhạc — nó chỉ bấm hộ, để đổi bài không phải rời bản đồ.

Dẫn đường

Tìm là đi, mất sóng vẫn đi

Chọn một kết quả tìm kiếm là dẫn đường luôn, không hỏi lại — bấm vào một địa điểm thì ý định đã rõ, thêm một bước xác nhận chỉ tốn thêm một lần rời mắt khỏi đường.

Tìm địa điểm gõ tới đâu ra tới đó

Tìm ngay khi gõ, hoãn 400 ms, gõ không dấu vẫn ra. Có sóng thì hỏi MapVina qua máy chủ của chúng tôi; mất sóng thì dùng chỉ mục địa điểm Việt Nam đã tải trên máy. Địa điểm hay tới và nơi đã lưu hiện lên trước.

Chỉ dẫn rẽ bằng giọng nói

Còn bao nhiêu mét, rẽ hướng nào, vào đường gì. Đi chệch tuyến thì tự tính lại. Có sóng dùng Valhalla; mất sóng thì BRouter tính ngay trên máy với dữ liệu đã tải — khi đó chỉ dẫn không có tên đường.

Nhớ lối bạn hay đi

Khi bạn tự đi khác tuyến máy chủ gợi ý mà vẫn tới đúng nơi, app ghi lại đường bạn đã đi. Lần sau cùng cung đường đó, tuyến dựng bám theo lối cũ của bạn. Chỉ lưu trên máy.

Ra lệnh bằng giọng nói

Bấm micro rồi nói tên nơi cần đến. Có sóng dùng bộ nhận dạng của máy; mất sóng thì dùng model Vosk tiếng Việt tải sẵn (32 MB), chạy hoàn toàn trên máy.

Có hồ sơ cho xe máy

Chọn xe máy trong Xe của tôi thì tuyến tính theo hồ sơ riêng và bảng giới hạn tốc độ đổi theo — hồ sơ mặc định của BRouter cho xe hai bánh tự ghi là không dùng để dẫn đường thật.

Bản đồ ngoại tuyến toàn Việt Nam

Một gói PMTiles 145 MB, một chỉ mục địa điểm 43 MB và các đoạn dữ liệu BRouter theo vùng, tải trong Cài đặt → Dữ liệu ngoại tuyến. Có bản mới thì app báo, không phải cài lại.

Cảnh báo

Chỉ mở miệng khi có việc

Một app nói nhiều thì tài xế tắt trong mười phút. Mọi câu đi qua đúng một hàng đợi, một câu tại một thời điểm; câu quá hạn thì bỏ chứ không đọc bù, vì “còn 300 mét nữa rẽ phải” đọc muộn bốn giây là đã sai.

Vượt tốc

Độ trễ 3 km/h, chu kỳ nguội 30/20/12 giây theo mức, biên an toàn mặc định +5 km/h — nhưng leo thang lên mức nặng hơn thì báo ngay. Giọng tiếng Việt là MP3 thu sẵn nên head unit nào cũng nghe được.

Khoảng cách xe trước

Camera đo khoảng cách tới xe liền trước và nhắc khi bám gần hơn mức Điều 11 Thông tư 31/2019 (35 m ở 60 km/h, 55 m ở 80, 70 m ở 100, 100 m ở 120). Dưới 60 km/h dùng quy tắc 2 giây, dưới 20 km/h thì im. Cảnh báo này cắt ngang mọi câu khác.

Đèn tín hiệu

Vị trí đèn từ OpenStreetMap, đóng sẵn trong app. Nói “còn 200 mét nữa tới đèn tín hiệu” khi xe đang lao tới mà chưa nhả ga; mỗi đèn nói nhiều nhất một lần, chạy dưới 25 km/h thì im. App không biết đèn đang xanh hay đỏ — đây là lời nhắc quan sát.

Nhắc nghỉ sau 4 giờ

Luật không cho lái liên tục quá 4 giờ. App đếm thời gian xe thực sự lăn bánh; dừng từ 15 phút trở lên thì đồng hồ về 0, tắt máy đổ xăng hai phút rồi đi tiếp vẫn tính là liên tục.

Im lặng có chủ ý

Lời chào đầu chuyến nói đúng một lần. Ca dao trên đường vắng (mặc định tắt) chỉ đọc sau 12 phút không có bất kỳ cảnh báo nào — trong phố gần như không bao giờ nghe thấy, và bị cắt ngay khi có cảnh báo thật.

Ba ngôn ngữ

Tiếng Việt, English, 日本語 — đổi cả chữ trên màn hình lẫn tiếng đọc. Cảnh báo tiếng Việt phát bằng file thu sẵn; tiếng Anh và Nhật đọc bằng giọng của máy, máy không có giọng đó thì còn tiếng bíp.

Bản đồ cộng đồng

Người đi trước báo cho người đi sau

Bật mặc định, tắt được trong Cài đặt. Gửi lên máy chủ: loại báo cáo, toạ độ lúc bấm, hướng xe và một mã ngẫu nhiên của máy — không có hành trình, không có gì nhận ra bạn.

21 loại báo cáo

Biển tốc độ, cấm rẽ, cấm vượt, cấm đi ngược, hạn chế chiều cao / tải trọng, đầu và cuối khu đông dân cư, camera phạt, đường hầm, phà — và sự cố: tắc đường, tai nạn, đường đóng, sạt lở — cùng trạm xăng, trạm sạc, trạm dừng nghỉ.

Biển chỉ hiện khi đủ người xác nhận

Một biển tốc độ chỉ được công bố khi ba máy khác nhau cùng báo trong bán kính 25 m. Sự cố tạm thời hiện ngay và tự hết hạn sau 30–60 phút. Ba lượt “không còn” nhiều hơn số “còn” thì ẩn.

Nhận ngay khi có người báo

Xe đang chạy giữ một kết nối thời gian thực theo ô lưới 5 km — ai báo tắc đường phía trước là bạn thấy trong vài giây, không phải đợi tới lần tải kế tiếp.

Xe của bạn

Số từ xe thật, và loại xe quyết định bảng giới hạn

Xe của tôi

Ô tô con, xe tải nặng hay xe máy — loại xe đổi cả bảng giới hạn tốc độ theo Điều 7 Thông tư 31/2019: xe tải nặng ngoài khu đông dân cư chỉ được 80/70 chứ không phải 90/80. Mặc định ai cũng là xe con thì tài xế xe tải bị cảnh báo muộn 10 km/h.

Hộp OBD-II — gói Lifetime

Cắm hộp ELM327 vào cổng dưới vô lăng, ghép cặp Bluetooth (hoặc nối WiFi của hộp). Tốc độ lấy thẳng từ xe thay cho GPS, đồng hồ vòng tua có số, đọc được nhiệt nước, nhiệt dầu, điện áp và mã lỗi. Nước quá nóng hay Check Engine bật thì app nói, mỗi lỗi một lần cho mỗi mức.

Cảm biến áp suất lốp

Dành cho bộ van TPMS lắp thêm loại Bluetooth. Hiện kPa / bar / psi tuỳ bạn quen đọc, chỉ nói khi có lốp ngoài mức bình thường. Không đọc được cảm biến zin của xe — áp suất lốp không nằm trong bộ dữ liệu chuẩn OBD-II.

Logo hãng xe tự chọn — gói Lifetime

Tải ảnh của riêng bạn vào ô giữa hai mặt số. Cùng gói với OBD-II; mọi thứ liên quan tới an toàn — cảnh báo tốc độ, nhắc nghỉ, khoảng cách, dẫn đường, đèn — nằm ngoài gói và miễn phí mãi.

Bản Android Auto cho điện thoại

App thứ hai, vn.com.zsoft.mapcar.phone, chiếu bản đồ lên màn hình sẵn có của xe qua Android Auto, kèm cảnh báo khoảng cách bằng camera điện thoại. Cùng phần lõi, khác giao diện.

Chủ quyền biển đảo

Tile công cộng ghi tên đơn vị hành chính nước ngoài ở Hoàng Sa. App lọc các nhãn đó và vẽ bộ tên đảo Việt Nam từ dữ liệu đóng trong APK. Đây là yêu cầu của Luật Đo đạc và Bản đồ, không phải lựa chọn thiết kế.

Cài đặt

Chỉnh cho hợp với xe và thói quen lái

Mọi hàng cao tối thiểu 64 dp và chữ từ 16 sp — cảm ứng head unit kém chính xác hơn điện thoại nhiều. Thay đổi ghi ngay khi chạm, không có nút Lưu.

Biên an toàn

Chỉ cảnh báo khi vượt quá giới hạn cộng thêm mức này. Mặc định +5 km/h vì GPS sai số vài km/h, để 0 sẽ kêu oan.

Bật / tắt phần ước tính giới hạn

Tắt đi thì những đoạn đường không có dữ liệu giới hạn sẽ không cảnh báo gì cả, thay vì cảnh báo theo số suy ra.

Kiểu bản đồ

Theo máy (tự đổi sáng/tối), Liberty đầy đủ chi tiết, Dark cho lái đêm, Positron nhạt, và Night 3D nghiêng 60° với nhà dựng khối. Head unit Android 9 trở xuống không có chế độ tối hệ thống thì app tự tối từ 18h đến 6h.

Bố cục màn chính

Màn chính chia ba cột: đồng hồ, camera, bản đồ. Cột nào tắt thì phần màn hình chia lại cho cột còn lại. Thêm giữ màn hình luôn sáng, luôn hướng Bắc, khởi động cùng xe.

Camera lùi

Đa số head unit tự chuyển camera de ở mức phần cứng, không cần bật gì. Chỉ dành cho máy phát tín hiệu số lùi cho ứng dụng tự xử — điền tên tín hiệu của hãng, app nhường màn hình khi cài số lùi.

Tự cập nhật

Bản cài bằng APK không có Play Store báo bản mới, nên app tự hỏi máy chủ mỗi ngày một lần, chỉ hỏi khi xe đang dừng. Bản tải từ Google Play thì nhánh này tự tắt theo đúng chính sách của Google.

Hai chỗ là suy đoán của app, không phải luật

Ghi rõ ở đây vì hai chỗ này ảnh hưởng trực tiếp tới con số bạn nhìn thấy trên biển khi đoạn đường không có maxspeed thật.

  • Khu vực đông dân cư suy từ lớp landuse của bản đồ, vì OSM không đánh dấu biển R.420 / R.421. Lớp này phủ không đều — chạy thử ở Thủ Đức cho ra “ngoài đô thị” giữa khu dân cư dày.
  • Trần theo cấp đường. Luật cho phép 80 km/h trên mọi đường hai chiều ngoài đô thị, kể cả đường làng bê tông rộng 3 m. App kẹp trần theo cấp đường nên kết quả có thể thấp hơn mức luật cho phép — cố ý, vì cảnh báo sớm an toàn hơn cảnh báo muộn.

Ba vấn đề thật

Những chỗ khó nhất, và cách đã xử lý

01

Head unit báo tốc độ 0 dù xe đang chạy

Nhiều module GPS chỉ parse $GPGGA, không có $GPRMC — Location.hasSpeed() trả true nhưng giá trị luôn bằng 0. Tin thẳng vào nó thì đồng hồ đứng im vĩnh viễn.

SpeedEstimator chạy song song hai nguồn: số driver báo và số tự tính từ hai fix liên tiếp. Sau khoảng 8 mẫu ‘đang chạy’ mà driver vẫn báo 0 thì kết luận driver hỏng và chuyển hẳn sang tự tính. Có unit test cho đúng ca này.

location/SpeedEstimator.kt

02

Tile công cộng không mang tag maxspeed

Schema OpenMapTiles không chứa maxspeed, kể cả với đoạn đường đã có tag trong OSM gốc. Chỉ dựa vào tile miễn phí thì gần như 100% giới hạn tốc độ phải suy ra.

Dữ liệu dẫn đường ngoại tuyến của BRouter thì có mang maxspeed, nên máy đã tải dữ liệu là đọc được giới hạn thật: đo trên 15 km Thủ Đức – Bến Thành, 58% quãng đường có số thật, quốc lộ 79%. Chỗ không có thì VietnamSpeedRules suy theo Thông tư 31/2019 và loại xe, hiện kèm chữ ~ ước tính.

speedlimit/OfflineMaxspeed.kt · speedlimit/VietnamSpeedRules.kt

03

Hai giọng nói chồng lên nhau

Cảnh báo tốc độ phát bằng MP3 Vbee, chỉ dẫn rẽ đọc bằng TTS của máy — hai đường không biết gì về nhau, nên trên xe nghe ra “tiếng Anh lẫn tiếng Việt” câu nọ cắt câu kia.

VoiceQueue: mọi câu đi qua đúng một hàng đợi, một câu tại một thời điểm. Câu mới cùng nhóm thay chỗ câu cũ còn đang đợi; câu quá hạn bị bỏ chứ không đọc bù (chỉ dẫn rẽ 8 s, cảnh báo tốc độ 4 s). Ngoại lệ duy nhất là cảnh báo va chạm: cắt ngang và xoá sạch hàng đợi.

alert/VoiceQueue.kt

Thử trên xe của bạn

Cài APK là chạy, mọi tính năng an toàn đều miễn phí

APK tách theo kiến trúc chip, bản nhỏ nhất 25 MB. Gói Lifetime chỉ mở OBD-II và logo hãng xe, dùng thử 30 ngày không cần Google Play.