Bỏ qua

Xe tự lái

Xe tự lái là những hệ thống tự động tiên tiến nhất về mặt thương mại, tích hợp cảm biến, dự đoán, lập kế hoạch và điều khiển vào một phương tiện duy nhất. File này bao quát ngăn xếp lái xe tự động, bản đồ độ phân giải cao, dự đoán chuyển động, lập kế hoạch, lái xe đầu-cuối, mô phỏng, các tiêu chuẩn an toàn và các mức độ tự động hóa.

  • Xe tự lái có lẽ là bài toán robot khó nhất đang được thử sức ở quy mô lớn. Khác với một robot nhà máy hoạt động trong môi trường được kiểm soát, một chiếc xe tự lái phải xử lý một thế giới mở: những người lái xe con người khó đoán, người đi bộ băng qua đường bất thình lình, các khu thi công xuất hiện qua một đêm, và thời tiết thay đổi từng phút.

  • Cái giá cũng cao một cách đặc biệt. Một chiếc xe tự lái vận hành ở tốc độ cao tốc giữa những người tham gia giao thông dễ bị tổn thương. Dung sai lỗi cho các hỏng hóc an toàn tới tính mạng gần như bằng không.

Ngăn xếp lái xe tự động

  • Kiến trúc xe tự lái cổ điển là một đường ống mô-đun với bốn giai đoạn, mỗi giai đoạn cung cấp đầu vào cho giai đoạn tiếp theo:
\[\\text{Perception} \\to \\text{Prediction} \\to \\text{Planning} \\to \\text{Control}\]

Ngăn xếp lái xe tự động: cảm biến cung cấp cho cảm biến, thứ cung cấp cho dự đoán, lập kế hoạch và cuối cùng là điều khiển

  • Cảm biến (đã nói ở file 1 của chương này) xử lý dữ liệu cảm biến thô thành một biểu diễn cảnh có cấu trúc: các vật thể được phát hiện với vị trí 3D, vận tốc và nhãn lớp; vạch làn; đèn giao thông; ranh giới mặt đường có thể đi được.

  • Dự đoán (prediction) dự báo các tác tử khác (xe, người đi bộ, người đi xe đạp) sẽ di chuyển thế nào trong tương lai. Từ trạng thái hiện tại của cảnh, mô-đun dự đoán xuất ra các quỹ đạo cho mỗi tác tử trên một chân trời thời gian (thường 3-8 giây tới).

  • Lập kế hoạch (planning) quyết định xe tự thân (ego vehicle) nên làm gì: đi theo đường nào, khi nào đổi làn, khi nào nhường đường, khi nào tăng tốc hoặc phanh. Nó lấy cảnh đã dự đoán và sinh ra một quỹ đạo cho xe tự thân sao cho an toàn, thoải mái và tiến triển về đích.

  • Điều khiển (control) chuyển đổi quỹ đạo đã lập thành các lệnh cơ cấu chấp hành: góc lái, bướm ga và phanh. Đây là cấp thấp nhất, dịch quỹ đạo trừu tượng thành chuyển động vật lý.

  • Thiết kế mô-đun có những ưu điểm kỹ thuật rõ ràng: mỗi mô-đun có thể phát triển, thử nghiệm và cải thiện độc lập. Nhưng nó cũng có những điểm yếu: lỗi lan truyền xuống dưới (một phát hiện bị sót thì bộ lập kế hoạch không thấy), và thông tin bị mất tại mỗi giao diện (bộ lập kế hoạch thấy các hộp bao, chứ không phải dữ liệu cảm biến thô sinh ra chúng).

Bản đồ độ phân giải cao (HD Maps)

  • Bản đồ độ phân giải cao (HD maps) là các bản đồ số chi tiết, chính xác đến từng centimet, mã hóa cấu trúc đường: ranh giới làn, tính kết nối làn (làn nào nối làn nào tại một giao lộ), vị trí biển báo giao thông, giới hạn tốc độ, vị trí vạch sang đường, và độ cao mặt đường.

  • HD maps cung cấp một tiên nghiệm mạnh cho tác vụ lái. Mô-đun cảm biến không cần khám phá ranh giới làn từ đầu mỗi khung hình; nó chỉ cần định vị xe trong bản đồ và xác minh thực tế khớp với cấu trúc đã lưu. Điều này đơn giản hóa lập kế hoạch một cách đáng kể.

  • Xây dựng HD maps đòi hỏi các xe khảo sát chuyên dụng trang bị LiDAR cao cấp, camera và RTK-GPS. Các bản đồ phải được duy trì và cập nhật khi đường thay đổi. Việc này tốn kém và không dễ mở rộng sang mọi con đường trên Trái Đất.

  • Lái không cần bản đồ (mapless driving, còn gọi là "lập bản đồ trực tuyến") nhằm loại bỏ sự phụ thuộc vào các HD map được xây dựng trước. Thay vào đó, xe xây dựng một bản đồ cục bộ theo thời gian thực từ các cảm biến của nó. Các mô hình như MapTRMapTRv2 dùng các kiến trúc transformer để dự đoán các phần tử bản đồ dạng vector (tâm làn, ranh giới đường, đường sang bộ hành) trực tiếp từ ảnh camera, xuất ra các đường gấp khúc (polyline) như các chuỗi điểm có thứ tự.

  • Cách tiếp cận không bản đồ đánh đổi độ chính xác bản đồ lấy tính mở rộng: bất kỳ con đường nào xe có thể chạy trên đó, nó đều có thể lập bản đồ. Nhưng nó đòi hỏi hệ thống cảm biến đủ bền vững để phát hiện mọi cấu trúc đường liên quan theo thời gian thực, kể cả trong các giao lộ phức tạp, ramp cao tốc và khu thi công.

  • Trong thực tế, nhiều hệ thống dùng cách tiếp cận lai: một bản đồ nhẹ với tô-pô đường thô (từ các nhà cung cấp bản đồ hiện có), được làm giàu theo thời gian thực bởi cảm biến của xe.

Dự đoán chuyển động

  • Dự đoán nơi những người tham gia giao thông khác sẽ đi là một trong những bài toán con khó nhất của lái tự động. Con người khó đoán, ý định bị che giấu, và không gian các tương lai có thể có phân nhánh nhanh chóng.

  • Đầu vào của một mô hình dự đoán là bối cảnh cảnh (scene context): vị trí và vận tốc của tất cả các tác tử được phát hiện trong quá khứ gần đây (thường 1-2 giây lịch sử), cộng với bối cảnh tĩnh (hình học làn, tín hiệu giao thông, ranh giới đường).

  • Đầu ra là một tập các quỹ đạo dự đoán cho mỗi tác tử, thường bao phủ 3-8 giây tới. Vì tương lai không chắc chắn, các mô hình dự đoán tốt xuất ra nhiều quỹ đạo có thể có với các xác suất liên quan, chứ không phải một ước lượng điểm đơn.

  • Dự báo quỹ đạo như một bài toán hồi quy: dự đoán các tọa độ \((x, y)\) tương lai của mỗi tác tử tại các bước thời gian rời rạc. Hàm mất mát thường là sai số dịch chuyển trung bình tối thiểu (minADE) trên \(K\) quỹ đạo dự đoán:

\[\\text{minADE}_K = \\min_{k \\in \\{1, \\ldots, K\\}} \\frac{1}{T} \\sum_{t=1}^{T} \\| \\hat{\\mathbf{p}}_t^{(k)} - \\mathbf{p}_t \\|_2\]
  • Đây là một thước đo "tốt nhất trong \(K\)": mô hình được tính điểm nếu bất kỳ dự đoán nào trong \(K\) dự đoán gần với ground truth. Điều này khuyến khích các dự đoán đa phương thức, đa dạng.

  • Lực xã hội (social forces) mô hình hóa hành vi người đi bộ như một hệ động lực học, trong đó mỗi người trải nghiệm các lực hút (về phía mục tiêu) và các lực đẩy (tránh xa những người đi bộ và chướng ngại khác). Gia tốc của người \(i\) là:

\[\\mathbf{a}_i = \\frac{\\mathbf{v}_i^{\\text{desired}} - \\mathbf{v}_i}{\\tau} + \\sum_{j \\neq i} \\mathbf{f}_{ij}^{\\text{repulsive}} + \\sum_{\\text{walls}} \\mathbf{f}_{\\text{wall}}\]
  • Đây là một hệ các phương trình vi phân tương tự phương trình động lực học robot từ file 2 của chương này. Mô hình thanh lịch nhưng dựa vào các tham số lực được tinh chỉnh thủ công và chật vật với các tương tác đa tác tử phức tạp.

  • Mạng nơ-ron đồ thị (GNN) cho dự đoán mô hình hóa cảnh như một đồ thị: mỗi tác tử là một nút, và các cạnh biểu diễn các quan hệ không gian (gần nhau, chia sẻ làn). Truyền thông điệp giữa các nút nắm bắt các tương tác: "xe này đang nhường người đi bộ kia" hoặc "hai xe này đang nhập vào cùng một làn".

  • Các kiến trúc dự đoán hiện đại (ví dụ MTR, QCNet) dùng các mô hình dựa trên transformer cùng lý luận về lịch sử tác tử, bối cảnh bản đồ và tương tác tác tử-tác tử. Các tác tử chú ý đến các đặc trưng bản đồ liên quan (làn hiện tại, giao lộ phía trước) và đến các tác tử khác (xe phía trước, người đi bộ tại vạch sang đường) qua sự chú ý chéo. Đầu ra là một tập các giả thuyết quỹ đạo được sinh ra theo kiểu tự hồi quy hoặc qua một mô hình hỗn hợp.

  • Dự đoán có điều kiện mục tiêu trước tiên dự đoán nơi một tác tử có khả năng đi tới (một tập các điểm mục tiêu ứng viên, như điểm cuối làn hoặc lối ra giao lộ), rồi dự đoán quỹ đạo để đến mỗi mục tiêu. Điều này phân rã bài toán thành "ở đâu" (rời rạc, dễ quản lý) và "như thế nào" (đường đi liên tục cho trước mục tiêu), làm cho bài toán dự đoán đa phương thức dễ xử lý hơn.

Lập kế hoạch

  • Từ cảnh đã dự đoán, bộ lập kế hoạch phải sinh ra một quỹ đạo cho xe tự thân. Đây là một bài toán tối ưu có ràng buộc: tìm một quỹ đạo an toàn, thoải mái, hiệu quả và hợp pháp.

  • Các bộ lập kế hoạch dựa trên luật mã hóa hành vi lái dưới dạng một tập các luật nếu-thì: "nếu có người đi bộ trong vạch sang đường, hãy nhường", "nếu khoảng cách đến xe phía trước dưới 2 giây, đừng đổi làn", "nếu tới gần đèn đỏ, giảm tốc để dừng tại vạch dừng". Các luật này có thể diễn giải và kiểm toán, nhưng trở nên cồng kềnh với các tình huống phức tạp (hàng nghìn luật, nhiều trường hợp biên, tương tác giữa các luật).

  • Các bộ lập kế hoạch dựa trên tối ưu hóa thể chế hóa việc lái như tối ưu hóa quỹ đạo. Quỹ đạo tự thân được tham số hóa (ví dụ như một chuỗi các trạng thái \((x, y, \\theta, v)\) tại các bước thời gian tương lai) và một hàm mục tiêu được tối thiểu hóa:

\[\\min_{\\boldsymbol{\\xi}} \\underbrace{w_1 \\cdot J_{\\text{progress}}(\\boldsymbol{\\xi})}_{\\text{get to destination}} + \\underbrace{w_2 \\cdot J_{\\text{comfort}}(\\boldsymbol{\\xi})}_{\\text{smooth ride}} + \\underbrace{w_3 \\cdot J_{\\text{safety}}(\\boldsymbol{\\xi})}_{\\text{avoid collisions}}\]
\[\\text{subject to: } \\text{kinematic constraints, speed limits, lane boundaries}\]
  • Số hạng tiến triển phạt độ lệch so với tuyến đường mong muốn. Số hạng thoải mái phạt gia tốc ngang cao, độ giật (đạo hàm của gia tốc), và đánh lái gấp, vì hành khách cảm nhận những thứ này. Số hạng an toàn phạt sự gần gũi với các tác tử khác, dùng các quỹ đạo dự đoán để đánh giá rủi ro va chạm.

  • Đây là tối ưu hóa có ràng buộc (chương 3): tối thiểu hóa một hàm chi phí với các ràng buộc bất đẳng thức. Các trọng số \(w_1, w_2, w_3\) đánh đổi các mục tiêu mâu thuẫn (lái hung hăng thì nhanh hơn nhưng kém thoải mái và kém an toàn).

  • Các bộ lập kế hoạch dựa trên học dùng các mạng nơ-ron được huấn luyện trên dữ liệu lái của con người để sinh quỹ đạo. Mô hình quan sát cảnh và trực tiếp xuất ra một quỹ đạo đã lập, học các sự đánh đổi phức tạp một cách ngầm định từ các ví dụ về lái của con người chuyên gia.

  • Ưu điểm là hành vi lái của con người được nắm bắt một cách toàn diện, kể cả những khía cạnh tinh tế, khó hình thức hóa: nên nhập làn hung hăng đến mức nào, khi nào nên nhích lên tại một giao lộ, nên nhường một người đi xe đạp bao nhiêu không gian. Nhược điểm là cùng vấn đề dịch chuyển phân bố từ học bắt chước (file 2): mô hình có thể hành xử khó đoán trong các tình huống không được đại diện tốt trong dữ liệu huấn luyện.

Lái xe đầu-cuối

  • Lái xe đầu-cuối (end-to-end driving) loại bỏ hoàn toàn các ranh giới mô-đun. Một mạng nơ-ron duy nhất nhận đầu vào cảm biến thô (ảnh camera, đám mây điểm LiDAR) và trực tiếp xuất ra các lệnh lái (lái, ga, phanh) hoặc một quỹ đạo đã lập. Không có các mô-đun cảm biến, dự đoán hay lập kế hoạch riêng.

  • Sức hấp dẫn là toàn bộ hệ thống được tối ưu hóa chung cho tác vụ cuối (lái an toàn), nên không có thông tin nào bị mất tại các ranh giới mô-đun. Mô-đun cảm biến học cách trích xuất chính xác những đặc trưng mà bộ lập kế hoạch cần, thay vì các phát hiện vật thể chung chung có thể không nắm bắt được các chi tiết liên quan đến tác vụ.

  • UniAD (Unified Autonomous Driving — Lái tự động thống nhất) là một kiến trúc đầu-cuối mang tính mốc. Nó xử lý các ảnh đa camera qua một bộ mã hóa BEV, rồi áp dụng một chuỗi các mô-đun dựa trên transformer: theo dõi, lập bản đồ trực tuyến, dự đoán chuyển động, dự đoán chiếm dụng và lập kế hoạch. Dù có các mô-đun nội bộ, chúng đều có thể vi phân và được huấn luyện chung đầu-cuối, với hàm mất mát lập kế hoạch lan truyền ngược qua toàn bộ mạng.

  • Mô-đun lập kế hoạch trong UniAD sinh ra các điểm waypoint tự thân tương lai bằng cách chú ý đến các đặc trưng BEV đã dự đoán, các quỹ đạo tác tử đã dự đoán và chiếm dụng đã dự đoán. Đây là quy tắc dẫn hàm hàm (multivariate chain rule, chương 3) đang hoạt động: các gradient chảy từ hàm mất mát lập kế hoạch ngược về tận bộ mã hóa ảnh, cho các đặc trưng cảm biến biết cách trở nên hữu ích hơn cho lập kế hoạch.

  • Các cách tiếp cận đầu-cuối gần đây hơn dùng các kiến trúc kiểu VLA (file 3 của chương này). Các mô hình như DriveVLM nhận ảnh camera và một chỉ thị dẫn đường (hoặc tuyến đường), và sinh ra các hành động lái dùng một backbone VLM. Điều này mang những lợi ích của tiền huấn luyện quy mô lớn (hiểu thị giác, lập luận) trực tiếp vào ngăn xếp lái xe.

  • Sự căng thẳng trong lái đầu-cuối là khả năng diễn giải (interpretability). Một hệ thống mô-đun có thể báo cáo "tôi phát hiện một người đi bộ tại (x, y) và dự đoán họ sẽ băng qua" — chế độ hỏng có thể chẩn đoán được. Một hệ thống đầu-cuối là một hộp đen sinh ra một góc lái. Khi nó hỏng, việc chẩn đoán tại sao là khó khăn, một mối lo ngại nghiêm trọng cho chứng nhận an toàn.

Các mô hình thế giới cho lái xe

  • Một mô hình thế giới học cách dự đoán trạng thái tương lai của cảnh lái xe từ trạng thái hiện tại và các hành động của xe tự thân: \(p(s_{t+1} \\mid s_t, a_t)\) (như đã giới thiệu ở chương 10). Trong lái xe, điều này nghĩa là sinh các khung hình tương lai thực tế hoặc các bố cục BEV: "nếu tôi tăng tốc và lái sang trái, cảnh sẽ trông như thế này sau 3 giây".

  • Các mô hình thế giới mang lại hai năng lực mạnh mẽ cho lái tự động:

    • Lập kế hoạch dựa trên tưởng tượng: thay vì cam kết một hành động và xem chuyện gì xảy ra, bộ lập kế hoạch có thể "tưởng tượng" nhiều quỹ đạo ứng viên bằng cách triển khai chúng qua mô hình thế giới, đánh giá mỗi cái về độ an toàn và thoải mái, và chọn cái tốt nhất. Đây là RL dựa trên mô hình (đã nói ở file 2 của chương này) áp dụng cho lái.

    • Mô phỏng học được: một mô hình thế giới huấn luyện trên dữ liệu lái thực tế về cơ bản là một trình mô phỏng dựa trên dữ liệu. Nó sinh ra các kịch bản thực tế (kể cả các trường hợp biên hiếm) mà không cần nỗ lực thủ công xây dựng một trình mô phỏng tự tay. Quan trọng là, nó nắm bắt được các mẫu thống kê của lái thực tế: những tài xế khác thực sự hành xử ra sao, ánh sáng thay đổi thế nào, mưa ảnh hưởng tầm nhìn ra sao.

  • GAIA-1 (Wayve) là một mô hình thế giới sinh cho lái. Cho một chuỗi các khung hình camera quá khứ và các hành động xe tự thân, nó sinh ra các khung hình video tương lai theo kiểu tự hồi quy. Nó dùng một kiến trúc khuếch tán video có điều kiện trên các đầu vào hành động. Mô hình học cách sinh ra các tương lai hợp lý: những xe tuân thủ luật giao thông, người đi bộ đi trên vỉa hè, và đèn giao thông chuyển đổi đúng, tất cả nổi lên từ dữ liệu huấn luyện thay vì các luật được lập trình.

  • DriveDreamerGenAD theo cách tiếp cận tương tự nhưng hoạt động trong không gian BEV thay vì không gian điểm ảnh. Dự đoán các bố cục BEV tương lai nhỏ gọn hơn so với sinh toàn bộ khung hình video (tương tự cách DreamerV3 trong robot dự đoán trong không gian tiềm ẩn thay vì không gian điểm ảnh, như đã nói ở file 2). Mô hình thế giới BEV dự đoán tất cả các tác tử sẽ ở đâu, cấu trúc đường sẽ trông ra sao, và không gian tự do nằm ở đâu, và bộ lập kế hoạch dùng điều này trực tiếp.

  • Mô phỏng vòng kín thần kinh (neural closed-loop simulation) dùng các mô hình thế giới để thay thế các trình mô phỏng tự xây cho việc thử nghiệm. Cho một bản ghi lái thực làm điểm bắt đầu, mô hình thế giới sinh ra điều gì sẽ xảy ra nếu xe tự thân đã thực hiện một hành động khác. Điều này cho phép đánh giá phản thực tế (counterfactual): "điều gì nếu tôi đã phanh chậm hơn 0,5 giây?" mà không cần bao giờ tái tạo lại kịch bản đó về mặt vật lý.

  • Sự kết nối với khuôn khổ JEPA (chương 10) là tự nhiên ở đây. Các mô hình thế giới lái xe không cần dự đoán các tương lai hoàn hảo về điểm ảnh (giá trị RGB chính xác của mọi điểm ảnh). Chúng cần dự đoán những khía cạnh quan trọng cho lập kế hoạch: các tác tử ở đâu, chúng di chuyển nhanh thế nào, không gian tự do ở đâu. Dự đoán trong không gian embedding (kiểu JEPA) nắm bắt những thuộc tính có ý nghĩa ngữ nghĩa này mà không lãng phí dung lượng vào các chi tiết thị giác không liên quan như kết cấu đám mây chính xác.

  • Thách thức chính là độ trung thực chân trời dài (long-horizon fidelity). Các mô hình thế giới tích lũy lỗi theo thời gian: một sai sót nhỏ ở khung 2 làm lệch tất cả các khung tiếp theo. Với lái, một chân trời dự đoán 3 giây hữu ích cho các quyết định chiến thuật (tôi có nên nhập làn bây giờ không?), nhưng một chân trời 30 giây (cần cho các quyết định chiến lược như lập kế hoạch tuyến đường) vẫn chưa đáng tin. Công trình hiện tại giảm thiểu điều này bằng cách neo lại (định kỳ reset mô hình bằng các quan sát thực) và ước lượng độ bất định (đánh dấu khi các dự đoán trở nên không đáng tin).

Mô phỏng

  • Thử nghiệm một chiếc xe tự lái bằng cách lái trên đường thực là cần thiết nhưng chưa đủ. Các tình huống nguy hiểm (suýt va chạm, các trường hợp biên) thì hiếm, nên thử nghiệm bằng số dặm lái là kém hiệu quả. Một chiếc xe sẽ cần lái hàng trăm triệu dặm để chứng minh an toàn về mặt thống kê, điều bất khả thi.

  • Mô phỏng cung cấp thử nghiệm không giới hạn, có thể kiểm soát và an toàn. Các tình huống hiếm trong thế giới thực (một đứa trẻ lao ra đường, một lốp nổ, một chướng ngại đột ngột) có thể được thử nghiệm hàng triệu lần trong mô phỏng.

  • CARLA là một trình mô phỏng lái mã nguồn mở xây dựng trên Unreal Engine. Nó cung cấp các môi trường đô thị thực tế, thời tiết động, các tác tử giao thông và mô phỏng cảm biến (camera, LiDAR, radar). Các nhà nghiên cứu dùng CARLA để huấn luyện các tác tử lái dựa trên RL và đánh giá các thuật toán cảm biến.

  • nuPlan (Motional) là một chuẩn đánh giá lập kế hoạch vòng kín. Khác với đánh giá vòng hở (phát lại dữ liệu đã ghi và so sánh đầu ra của bộ lập kế hoạch với quỹ đạo thực tế của tài xế con người), đánh giá vòng kín cho phép các quyết định của bộ lập kế hoạch ảnh hưởng đến mô phỏng: nếu bộ lập kế hoạch quyết định đổi làn, mô phỏng tiến triển tương ứng. Điều này kiểm tra hành vi phản ứng, không chỉ sự tương đồng quỹ đạo.

Vòng hở phát lại bản ghi mà không tương tác; vòng kín cho phép hành động của mô hình thay đổi trạng thái mô phỏng

  • Sự phân biệt giữa đánh giá vòng hở (open-loop) và vòng kín (closed-loop) là cốt yếu:

    • Vòng hở: phát lại một kịch bản đã ghi, tính mô hình đầu ra giống với hành động của tài xế con người đến mức nào. Dễ thiết lập nhưng gây hiểu lầm: một mô hình luôn dự đoán "đi thẳng" có thể có lỗi thấp trên cao tốc nhưng sẽ đâm ở khúc cua đầu tiên.

    • Vòng kín: các hành động của mô hình thay đổi trạng thái mô phỏng, và mô phỏng tiến triển để phản ứng lại. Điều này kiểm tra khả năng phục hồi từ chính những lỗi của mô hình và phản ứng với các tình huống động. Nó đắt đỏ hơn nhiều nhưng có ý nghĩa hơn hẳn.

  • Sinh kịch bản tạo ra các ca kiểm thử làm căng hệ thống. Các kịch bản đối kháng (một xe phanh gấp đột ngột, một người đi bộ núp sau một xe đỗ) được sinh ra bằng cách tối ưu hóa cho các tình huống mà hệ thống tự lái hoạt động tệ nhất. Điều này liên quan đến huấn luyện đối kháng trong ML (chương 6): tìm các đầu vào tối đa hóa hàm mất mát.

An toàn

  • An toàn trong lái tự động được chi phối bởi các tiêu chuẩn kỹ thuật, không chỉ các thước đo ML.

  • ISO 26262 (An toàn chức năng) là tiêu chuẩn ô tô cho các hệ thống điện tử tới tính mạng. Nó định nghĩa Các mức toàn vẹn an toàn ô tô (ASIL) từ A (thấp nhất) đến D (cao nhất), dựa trên mức độ nghiêm trọng, tiếp xúc và khả năng kiểm soát của các mối nguy tiềm tàng. Các thành phần cảm biến và lập kế hoạch của một hệ thống tự lái thường là ASIL-D, mức cao nhất, đòi hỏi xác minh, dự phòng và thiết kế fail-safe rộng rãi.

  • SOTIF (Safety of the Intended Functionality — An toàn của chức năng dự định, ISO 21448) giải quyết một lớp mối nguy khác: không phải hỏng phần cứng (thứ ISO 26262 bao phủ), mà là các tình huống hệ thống hoạt động đúng thiết kế nhưng vẫn sinh ra kết quả không an toàn. Một mô hình cảm biến phân loại nhầm một chiếc xe tải trắng thành bầu trời (một sự cố có thật) là một vấn đề SOTIF: phần cứng hoạt động tốt, nhưng giới hạn của thuật toán gây ra một mối nguy.

  • Miền thiết kế vận hành (ODD) định nghĩa các điều kiện mà hệ thống tự lái được thiết kế để vận hành: các khu vực địa lý cụ thể, loại đường (chỉ cao tốc, đô thị, cả hai), điều kiện thời tiết (không có tuyết dày), dải tốc độ, và thời gian trong ngày. Vận hành ngoài ODD là không được phép: nếu hệ thống không xử lý được tuyết, nó không được lái trong tuyết.

  • Fail-safe so với fail-operational:

    • Fail-safe: khi phát hiện lỗi, hệ thống chuyển sang một trạng thái an toàn (ví dụ tấp vào lề và dừng). Đây là yêu cầu tối thiểu.
    • Fail-operational: hệ thống tiếp tục vận hành an toàn bất chấp lỗi, dùng các thành phần dự phòng. Một chiếc xe tự lái với vô lăng, phanh và tính toán dự phòng có thể sống sót qua một lỗi thành phần đơn và vẫn lái đến một vị trí an toàn.
  • Dự phòng (redundancy) là nền tảng. Các cảm biến cảm biến trọng yếu được nhân đôi: nhiều camera bao phủ các trường nhìn chồng lấp, cả LiDAR và radar cung cấp các phép đo độ sâu độc lập, các nền tảng tính toán kép chạy cùng một phần mềm. Nếu bất kỳ thành phần đơn lẻ nào hỏng, các thành phần khác cung cấp đủ thông tin để lái an toàn.

Các mức độ tự động hóa

Các mức tự động hóa SAE từ L0 (không tự động) đến L5 (tự động đầy đủ), cho thấy nơi trách nhiệm chuyển từ con người sang hệ thống

  • Tiêu chuẩn SAE J3016 định nghĩa sáu mức độ tự động hóa lái, từ 0 (không tự động) đến 5 (tự động đầy đủ):

    • Mức 0 (Không tự động): con người làm mọi thứ. Hệ thống có thể đưa ra cảnh báo (cảnh báo lệch làn) nhưng không điều khiển phương tiện.
    • Mức 1 (Hỗ trợ lái): hệ thống điều khiển hoặc lái hoặc tốc độ, nhưng không cả hai. Kiểm soát hành trình thích ứng (duy trì tốc độ và khoảng cách bám sát) hoặc hỗ trợ giữ làn (giữ xe ở giữa làn) là Mức 1.
    • Mức 2 (Tự động một phần): hệ thống điều khiển cả lái và tốc độ đồng thời, nhưng con người phải giám sát mọi lúc và sẵn sàng tiếp quản. Tesla Autopilot, GM Super Cruise và hầu hết các tính năng "tự lái" hiện nay là Mức 2. Con người vẫn là người lái chịu trách nhiệm.
    • Mức 3 (Tự động có điều kiện): hệ thống lái và giám sát môi trường, nhưng chỉ trong các điều kiện cụ thể (ODD). Con người có thể rời tay nhưng phải sẵn sàng tiếp quản khi hệ thống yêu cầu (với một bộ đệm thời gian, thường 10+ giây). Mercedes Drive Pilot (trên một số cao tốc, dưới 60 km/h) là hệ thống Mức 3 đầu tiên được chứng nhận.
    • Mức 4 (Tự động cao): hệ thống lái và xử lý mọi tình huống trong ODD của nó, không cần can thiệp con người. Nếu gặp một tình huống ngoài ODD, nó có thể dừng an toàn. Dịch vụ robotaxi của Waymo vận hành ở Mức 4 trong các khu vực địa lý cụ thể.
    • Mức 5 (Tự động đầy đủ): hệ thống lái mọi nơi một con người có thể, trong mọi điều kiện. Không cần vô lăng hay bàn đạp. Điều này chưa tồn tại.
  • Sự phân biệt then chốt là ai chịu trách nhiệm an toàn. Ở Mức 0-2, con người chịu trách nhiệm. Ở Mức 3-5, hệ thống chịu trách nhiệm (trong ODD của nó). Điều này có những hệ lụy sâu sắc về pháp lý, bảo hiểm và đạo đức.

  • Trạng thái ngành hiện tại là sự pha trộn của Mức 2 (triển khai rộng rãi), Mức 3 (bắt đầu triển khai) và Mức 4 (triển khai địa lý hạn chế). Mức 5 vẫn là một mục tiêu nghiên cứu dài hạn.

Bài tập lập trình (dùng CoLab hoặc notebook)

  1. Triển khai một bộ lập kế hoạch tối ưu hóa quỹ đạo đơn giản. Cho một vị trí bắt đầu, mục tiêu và một chướng ngại, tìm đường tránh va chạm mượt mà nhất dùng hạ gradient.

    import jax
    import jax.numpy as jnp
    import matplotlib.pyplot as plt
    
    # Trajectory: N waypoints, each (x, y)
    N = 20
    start = jnp.array([0.0, 0.0])
    goal = jnp.array([10.0, 0.0])
    obstacle = jnp.array([5.0, 0.0])
    obs_radius = 1.5
    
    # Initialise: straight line from start to goal
    waypoints_init = jnp.linspace(start, goal, N)
    
    def cost(waypoints):
        wp = jnp.concatenate([start[None], waypoints, goal[None]], axis=0)
    
        # Smoothness: penalise acceleration (second differences)
        accel = wp[2:] - 2 * wp[1:-1] + wp[:-2]
        smooth_cost = jnp.sum(accel ** 2)
    
        # Obstacle avoidance: penalise proximity
        dists = jnp.linalg.norm(wp - obstacle, axis=1)
        collision_cost = jnp.sum(jnp.maximum(0, obs_radius + 0.5 - dists) ** 2)
    
        return 10 * smooth_cost + 100 * collision_cost
    
    grad_cost = jax.grad(cost)
    
    # Optimise the interior waypoints
    waypoints = waypoints_init[1:-1]
    lr = 0.01
    for _ in range(500):
        g = grad_cost(waypoints)
        waypoints = waypoints - lr * g
    
    # Plot
    full_path = jnp.concatenate([start[None], waypoints, goal[None]], axis=0)
    theta = jnp.linspace(0, 2 * jnp.pi, 100)
    
    plt.figure(figsize=(10, 4))
    plt.plot(full_path[:, 0], full_path[:, 1], "b.-", label="Optimised path")
    plt.plot(waypoints_init[:, 0], waypoints_init[:, 1], "r--", alpha=0.5, label="Initial (straight)")
    plt.fill(obstacle[0] + obs_radius * jnp.cos(theta),
             obstacle[1] + obs_radius * jnp.sin(theta), alpha=0.3, color="red", label="Obstacle")
    plt.plot(*start, "go", markersize=10); plt.plot(*goal, "g*", markersize=15)
    plt.legend(); plt.axis("equal"); plt.grid(True)
    plt.title("Trajectory Optimisation: Smooth Collision-Free Path")
    plt.show()
    

  2. Mô phỏng một mô hình dự đoán chuyển động vận tốc không đổi và so sánh với ground truth cho một xe đang rẽ.

    import jax.numpy as jnp
    import matplotlib.pyplot as plt
    
    # Ground truth: vehicle turning right
    dt = 0.1
    T = 40  # 4 seconds
    v = 10.0  # m/s
    omega = 0.3  # rad/s (turning rate)
    
    # True trajectory (constant turn rate)
    t = jnp.arange(T) * dt
    theta = omega * t
    gt_x = (v / omega) * jnp.sin(theta)
    gt_y = (v / omega) * (1 - jnp.cos(theta))
    
    # Constant velocity prediction from t=0
    # Assumes the car continues straight at its current heading
    obs_steps = 10  # observe first 1 second
    vx0 = v * jnp.cos(theta[obs_steps - 1])
    vy0 = v * jnp.sin(theta[obs_steps - 1])
    pred_t = jnp.arange(T - obs_steps) * dt
    pred_x = gt_x[obs_steps - 1] + vx0 * pred_t
    pred_y = gt_y[obs_steps - 1] + vy0 * pred_t
    
    plt.figure(figsize=(8, 6))
    plt.plot(gt_x[:obs_steps], gt_y[:obs_steps], "ko-", label="Observed")
    plt.plot(gt_x[obs_steps:], gt_y[obs_steps:], "g-", linewidth=2, label="True future")
    plt.plot(pred_x, pred_y, "r--", linewidth=2, label="Constant velocity prediction")
    plt.legend(); plt.axis("equal"); plt.grid(True)
    plt.xlabel("x (m)"); plt.ylabel("y (m)")
    plt.title("Constant Velocity Prediction vs Turning Vehicle")
    plt.show()
    

  3. Triển khai một bộ lập kế hoạch đơn giản dựa trên luật quyết định giữa giữ làn và dừng dựa trên các chướng ngại được phát hiện.

    import jax.numpy as jnp
    
    def rule_based_planner(ego_speed, obstacles, speed_limit=13.9):
        """
        Simple rule-based planner.
        ego_speed: current speed (m/s)
        obstacles: list of (distance, speed) tuples for vehicles ahead
        speed_limit: max allowed speed (m/s), default ~50 km/h
    
        Returns: (target_speed, action_label)
        """
        min_following_distance = 2.0 * ego_speed  # 2-second rule
        emergency_distance = 5.0  # metres
    
        if not obstacles:
            return speed_limit, "cruise"
    
        # Find closest obstacle ahead
        closest_dist, closest_speed = min(obstacles, key=lambda o: o[0])
    
        if closest_dist < emergency_distance:
            return 0.0, "EMERGENCY STOP"
        elif closest_dist < min_following_distance:
            # Match speed of vehicle ahead
            target = min(closest_speed, speed_limit)
            return target, "following"
        else:
            return speed_limit, "cruise"
    
    # Test scenarios
    scenarios = [
        (13.9, [], "Empty road"),
        (13.9, [(30.0, 10.0)], "Slower car ahead"),
        (13.9, [(3.0, 0.0)], "Stopped car very close"),
        (13.9, [(50.0, 13.9)], "Car ahead at same speed"),
    ]
    
    for speed, obs, desc in scenarios:
        target, action = rule_based_planner(speed, obs)
        print(f"{desc:30s}{action:15s} target_speed={target:.1f} m/s ({target*3.6:.0f} km/h)")