1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Nghiên cứu và xây dựng mô hình mô phỏng hệ thống lái thi sát hạch b1

103 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 103
Dung lượng 8,81 MB

Cấu trúc

  • CHƯƠNG 1: TỔNG QUAN (21)
    • 1.1. Mục đích đề tài (21)
    • 1.2. Thực trạng hiện tại (22)
      • 1.2.1. Tình hình trong nước (22)
      • 1.2.2. Tình hình nước ngoài (22)
    • 1.3. Đối tượng và phạm vi nghiên cứu (23)
      • 1.3.1. Đối tượng nghiên cứu (23)
      • 1.3.2. Phạm vi nghiên cứu (24)
    • 1.4. Phương pháp tiếp cận và nghiên cứu (24)
      • 1.4.1. Phương pháp tiếp cận (24)
      • 1.4.2. Phương pháp nghiên cứu (24)
    • 1.5. Nội dung nghiên cứu (24)
    • 1.6. Các nội dung chính trong đề tài (24)
  • CHƯƠNG 2: CƠ SỞ LÝ THUYẾT VỀ VISUAL STUDIO, ARDUINO, VÀ CÁC THIẾT BỊ KHÁC (26)
    • 2.1. Visual studio (26)
    • 2.2. Unity (27)
      • 2.2.1. Khái niệm Unity (27)
      • 2.2.2. Các chức năng cơ bản của Unity (28)
      • 2.2.3. Ưu và nhược điểm của Unity (28)
      • 2.2.4. Tìm hiểu về Unity Engine (31)
    • 2.3. Arduino (36)
      • 2.3.1. Arduino IDE (36)
      • 2.3.2. Arduino Uno (36)
    • 2.4. Các linh kiện để mô phỏng (39)
      • 2.4.1. Biến trở - Mô phỏng tín hiệu bàn đạp ga và phanh (39)
      • 2.4.2. Mạch điện khiểu góc quay Encoder – Mô phỏng tín hiệu vô lăng (40)
      • 2.4.3. Công tắc xoay nhả 3 tay số - Mô phỏng tín hiệu tay số trên xe (41)
      • 2.4.4. Công tắc gạt – Mô phỏng tín hiệu xi nhan (43)
  • CHƯƠNG 3: MÔ HÌNH HÓA HỆ THỐNG TRÊN UNITY (44)
    • 3.1. Tổng quan các bước mô hình hóa (44)
      • 3.1.1. Thiết kế các model (44)
      • 3.1.2. Xử lý va chạm (46)
      • 3.1.3. Xử lý các UI và camera (49)
    • 3.2. Lập trình điều khiển (52)
      • 3.2.1. Lập trình xử lý UI (52)
      • 3.2.2. Lập trình xử lý bài thi (55)
      • 3.2.3. Lập trình xử lý camera (58)
  • CHƯƠNG 4: LIÊN KẾT UNITY VÀ ARDUINO (63)
    • 4.1. Thu tín hiệu Arduino (63)
      • 4.1.1. Sơ đồ liên kết biến trở với Arduino (64)
      • 4.1.2. Sơ đồ liên kết mạch điều khiển góc quay Encoder với Arduino (64)
      • 4.1.3. Sơ đồ liên kết công tắc gạt với Arduino (65)
      • 4.1.4. Sơ đồ liên kết công tắc 3 tay số với Arduino (65)
      • 4.1.4. Tín hiệu Arduino nhận được (65)
    • 4.2. Kết nối với Unity (71)
      • 4.2.1. Tín hiệu đánh lái (71)
      • 4.2.2. Tín hiệu khi xe ở tay số N (72)
      • 4.2.3. Tín hiệu khi xe ở tay số D (73)
      • 4.2.4. Tín hiệu khi xe ở tay số R (75)
      • 4.2.5. Tín hiệu xi nhan trái (76)
      • 4.2.6. Tín hiệu xi nhan phải (77)
  • CHƯƠNG 5: KẾT QUẢ VÀ KẾT LUẬN (78)
    • 5.1. Kết quả (78)
      • 5.1.1. Lý thuyết (78)
      • 5.1.2. Sản phẩm (78)
      • 5.1.3 Hướng dẫn sử dụng mô hình (84)
    • 5.2. Kết luận (92)
      • 5.2.1. Đánh giá (92)

Nội dung

Nhìn thấy được điều này, nhóm quyết định thực hiện đồ án “NGHIÊN CỨU VÀ XÂY DỰNG MƠ HÌNH MÔ PHỎNG HỆ THỐNG THI SÁT HẠCH LÁI XE B1”.. Trong quá trình thực hiện, nhóm đã tìm hiểu phần mềm

TỔNG QUAN

Mục đích đề tài

Trong thời đại công nghiệp hóa, hiện đại hóa trên toàn cầu hiện nay, ngành công nghiệp ô tô trên toàn thế giới cũng như ở nước ta cũng đang tăng trưởng rất ấn tượng, số lượng phương tiện được sản xuất ra hằng năm cũng tăng theo từng năm Nền kinh tế của thế giới nói chung và nước ta nói riêng cũng đang khá ổn định nên đời sống của người dân càng đủ đầy, ô tô bắt đầu trở thành sản phẩm được chú ý và chi tiêu với nhiều người hơn Bên cạnh đó ô tô không chỉ là phương tiện di chuyển cho cá nhân nữa, nó còn là phương tiện phục vụ công việc của các công ty để di chuyển hàng hóa, tạo thêm công việc cho xã hội như tài xế, các kĩ thuật viên… Do đó bằng lái xe ô tô dần được quan trọng hóa trong xã hội ngày nay Tuy nhiên không phải ai cũng có thể dễ dàng vượt qua kì sát hạch lái xe, đặc biệt là ở bài thi sa hình Đối với những người không có xe từ trước hoặc không có cơ hội tập quá thường xuyên thì sẽ gặp khó khăn trong thời gian đầu tiếp xúc với xe và sa hình Nhìn thấy được điều này, nhóm quyết định thực hiện đồ án “ NGHIÊN CỨU VÀ

XÂY DỰNG MÔ HÌNH MÔ PHỎNG HỆ THỐNG THI SÁT HẠCH LÁI XE ”

Phần mềm “Visual Studio” là phần mềm được thiết kế bởi Microsoft với mục đích trong việc hỗ trợ lập trình website Còn Unity là một công cụ phát triển game đa nền tảng được phát triển bởi Unity Technologies Việc áp dụng hai phần mềm này là phương án tốt nhất cho đồ án này bởi tính thân thiện của cả hai ứng dụng Visual studio hỗ trợ về phần viết code, scripts cho đồ án còn Unity thì giúp cho việc thiết kế các model hay việc xử lí các va chạm được mượt mà hơn, sát với trải nghiệm lái xe ngoài đời thật nhất có thể

Trong bài báo cáo này, nhóm tập trung vào việc nghiên cứu phần mềm Visual Studio, Unity và từ đó tiến hành xây dựng hệ thống mô phỏng nhằm giúp cho những người mới tiếp xúc với ô tô có thể tiếp cận một cách dễ dàng hơn trong việc điều khiển ô tô một cách mô phỏng thông qua hệ thống trên trước khi được điều khiển trên xe thực tế Mục tiêu chính của đề tài gồm:

• Tìm hiểu cơ sở lý thuyết phần mềm Visual Studio

• Tìm hiểu cơ sở lý thuyết phần mềm Unity

• Nghiên cứu tổng quan về phần cứng cần thiết để điều khiển

• Xây dựng và mô phỏng đề tài trên Unity và Visual Studio

• Đánh giá kết quả mô phỏng

Thực trạng hiện tại

Cuối năm 2020, Thông tư 38/2019/TT-BGTVT đã được ban hành bởi bộ Giao Thông Vận Tải Trong thông tư này, bộ có đề cập đến vấn đề bắt đầu từ ngày 1/1/2021, nhiều quyết định quan trọng về đào tạo và thi sát hạch cấp giấy phép lái xe ô tô các hạng sẽ chính thức có hiệu lực

Trong những quy định trong thông tư thì quy định về thực hiện nội dung sử dụng thiết bị mô phỏng trong chương trình đào tạo và bài thi sát hạch được quan tâm hơn cả

Cụ thể, Thông tư 38/2019/TT-BGTVT đã nêu rõ: “Kể từ ngày 1/1/2021, tất cả các trung tâm đào tạo và sát hạch lái xe ô tô phải thêm nội dung đào tạo lái xe trên thiết bị mô phỏng vào chương trình đào tạo” [1]

Do đó, học viên lái xe sẽ phải tham gia bài luyện tập kỹ thuật lái xe bao gồm học trên “phần mềm mô phỏng 120 tình huống giao thông” và học thực hành lái xe trên ca bin mô phỏng thực tế ô tô

Sau đó, bắt đầu từ ngày 01/07/2022, quy trình thi sát hạch lái xe ô tô sẽ có sự thay đổi bằng việc áp dụng thi mô phỏng vào quy trình sát hạch Các phần thi do vậy sẽ gồm có:

• Thi sát hạch lý thuyết lái xe

• Thi sát hạch lái xe trên phần mềm mô phỏng

• Thi sát hạch lái xe trong cabin

• Thi sát hạch lái xe trong hình (thi sa hình)

• Thi sát hạch lái xe đường trường

Các cabin mô phỏng lái xe đã ra đời khá sớm ở nước ngoài Không dừng lại ở việc là chỉ có thể nhìn bằng mắt thường và đánh giá, thì họ còn trang bị thêm một công nghệ rất nổi tiếng thời điểm hiện nay – công nghệ 3D Sự kết hợp này giúp cho người điều khiển cảm nhận vô cùng chân thật, giúp cho họ có cảm giác như đang điều khiển ngoài trời từ đó giúp họ có cái nhìn, cảm giác chân thật nhất khi sử dụng mô phỏng

Năm 2012, giáo sư Zsolt Szalay cùng các cộng sự đã nghiên cứu về dề tài

“Development of a Vehicle Simulator Based on a Real Car for Research and Education Purposes”, đề tài này được in trong volumn 8 của cuốn sách “Proceedings of the FISITA

2012 World Automotive Congress” được xuất bản năm 2013 Đây là đề tài nghiên cứu và chế tạo phần mềm mô phỏng trên một chiếc ô tô thật nhằm mục đích nghiên cứu và học tập Đề tài đã sử dụng mạch Can để đọc các tín hiệu trong thời gian thực, nhằm tạo vùng dữ liệu cho chương trình mô phỏng Chương trình mô phỏng này chủ yếu sử dụng các thuật toàn và các công cụ trên phần mềm Carsim Đó là nền tảng cho các chương trình mô phỏng ngày càng được chú trọng và phát triển đầu tiên là cho mục đích học tập và nghiên cứu [2]

Mặc dù, trên thế giới đã phát triển những hệ thống mô phỏng phương tiện này được một thời gian khá dài nhưng không vì thế mà tính quan trong của các hệ thống này bị coi nhẹ Các hệ thống mô phỏng vẫn luôn được quan tâm nâng cấp và thảo luận trên các diễn đàn và các hội nghị khoa học

Vào năm 2021, ông ERFAN DANESHPAJOOH với sự giúp đỡ của các giáo sư tại

“Central de Nantes”- một trường kỹ thuật ở Pháp đã có một bài báo cáo đề cập đến vấn đề

“Simulation in Automotive research and development” Bài báo cáo đã nêu bật lên tầm quan trọng của việc mô phỏng trong nhiều phương diện của ngành ô tô như động lực học, khí đông học, điện…Đề tài đã sử dụng SIMULINK để thực hiện chương trình mô phỏng của họ [3]

Ngoài đó ra, ở một số nước thì ngoài hệ thống mô phỏng lái xe trên cabin thì còn có một số trò chơi điện tử giúp họ có thể tự trải nghiệm tại nhà mà không cần đi đến trung tâm lái xe để sử dụng mô phỏng Từ đó, người điều khiển có thể tự tin hơn nhiều khi tiếp xúc đến với xe thật ngoài đời và họ có thể điều khiển xe một cách dễ dàng và an toàn hơn trước.

Đối tượng và phạm vi nghiên cứu

Trong đề tài này nhóm tập trung nghiên cứu:

• Adruino và các thiết bị điều khiển phần cứng (vô lăng, chân ga, chân phanh…)

• Cách thức giao tiếp liên kết giữa phần mềm và phần cứng (Unity và Adruino)

Do thời gian thực hiện đề tài và kinh phí không nhiều nên nhóm chỉ tập trung vào việc phát triển phần mềm, mô phỏng những tín hiệu điều khiển, các bài thi sa hình dựa trên những số liệu sát với bài thi sa hình thực tế nhất và một phần nhỏ hệ thống phần cứng như: biến trở (mô phỏng bàn đạp ga, bàn đạp phanh), công tắc 3 tay số (mô phỏng tay số), mạch điều khiển góc quay encoder (mô phỏng vô lăng), công tắc gạt( mô phỏng công tắc điều khiển xi nhan) để người dùng điều khiển xe có được cảm giác chân thực hơn.

Phương pháp tiếp cận và nghiên cứu

Tiếp cận từ những kiến thức cơ bản về lập trình C# và Adruino, cách sử dụng phần mềm Visual Studio, hiểu được cách thức hoạt động của phần mềm Unity, các linh kiện điều khiển phần cứng

Tìm hiểu về các thông tư, quyết định về vấn đề áp dụng bài thi mô phỏng cho các cuộc thi sát hạch giấy phép lái xe

Tìm hiều về các quy định về kích thước của sân thi sa hình, các quy định tính điểm ở các bài thi sa hình

Sử dụng các tài liệu hướng dẫn về phần mềm có sẵn khi tải phần mềm, các tài liệu hướng dẫn trên Internet, các bài báo khoa học có liên quan.

Nội dung nghiên cứu

• Cơ sở lý thuyết về phần mềm Visual Studio

• Cơ sở lý thuyết về phần mềm Unity

• Cơ sở lý thuyết về Arduino

• Cách giao tiếp giữa Unity và Adruino

• Mô phỏng hệ thống trên Unity

• Phân tích và đánh giá kết quả đạt được so với hệ thống thực tế và xe đời thật.

Các nội dung chính trong đề tài

Chương 2 : Cơ sở lý thuyết về Visual Studio, Unity, Adruino và các thiết bị khác

Chương 3 : Mô hình hóa hệ thống trên Unity

Chương 4 : Liên kết Unity và Adruino

Chương 5: Kết quả và kết luận

CƠ SỞ LÝ THUYẾT VỀ VISUAL STUDIO, ARDUINO, VÀ CÁC THIẾT BỊ KHÁC

Visual studio

Visual Studio (VS) là một phần mềm được phát hành bởi Microsoft- một trong những tập đoàn về phát triển phần mềm công nghệ nổi tiếng Nó hỗ trợ trong việc lập trình, nghiên cứu và phát triển websites, ứng dụng Phần mềm này là tập hợp hầu như toàn bộ những gì liên quan đến việc phát triển ứng dụng như là trình thiết kế, chỉnh sửa mã, gỡ lỗi Nói một cách đơn giản thì ta có thể viết code, chỉnh sửa thiết kể ứng dụng một cách dễ dàng chỉ với một phần mềm là Visual Studio [4]

Hiện nay, Visual Studio có 2 phiên bản chính là VS Enterprise và VS Professional Đây là những phiên bản cao cấp được yêu cầu trả phí và được sử dụng nhiều bởi các công ty chuyên về lập trình và phát triển chương trình Ngoài ra, đối với đối tương người dùng chỉ để nghiên cứu và tiếp cận bước đầu với lập trình thì còn có thể sử dụng một phiên bản Community là phiên bản miễn phí cung cấp cho người dùng những tính năng cơ bản nhất

Visual Studio được đánh giá là phần mềm lập trình hàng đầu bởi các tính năng hấp dẫn sau:

• Đa nền tảng: Người dùng có thể viết code trên nhiều nền tảng khác nhau như Windows, Linux và Mac Systems khi sử dụng VS

Hình 2.1: Giao diện cơ bản của một chương trình Visual Studio

• Đa ngôn ngữ lập trình: VS sử dụng nhiều ngôn ngữ lập trình khác nhau như C#, C/C++, Visual Basic, Arduino, …

• Kho tiện ích mở rộng phong phú: VS hỗ trợ người dùng tải các tiện ích mở rộng khi muốn sử dụng một ngôn ngữ khác trong khi lập trình mà không ảnh hưởng đến hiệu năng của phần mềm

• Lưu trữ phân cấp: các tệp dữ liệu mã nguồn đều được lưu trữ trong thư mục tương tự nhau

• Kho lưu trữ an toàn: phần mềm được kết nối với kho lưu trữ an toàn được sử dụng nhiều hiện nay – GIT

• Màn hình đa nhiệm: cung cấp khả năng giúp người dùng cùng lúc mở nhiều thư mục, tập tin không liên quan với nhau

• Hỗ trợ viết code: xuất hiện các đề xuất khi viết code, một số tùy chọn để thay thế về code cho lập trình viên thuận tiện và nhanh chóng hơn

• Hỗ trợ thiết bị đầu cuối: hỗ trợ người sử dụng không nhất thiết phải chuyển liên tục giữa các màn hình trong quá trình sử dụng

• Hỗ trợ Git: các mã code có thể thay đổi và lưu lại trên phền mềm cho các công việc phát triển sau

• Intellisense: thông báo khi xuất hiện những đoạn mã thiếu, nhắc nhở lập trình viên, gợi ý cách sửa đổi, khai báo biến tự động, giúp bổ sung cú pháp chưa đầy đủ, …

• Tính năng comment: cho phép người lập trình để lại ghi chú, giúp họ có thể ghi nhớ công việc cần thiết một cách dễ dàng hơn, không bỏ quên bất kỳ bước quan trọng nào Đồng thời cũng giúp người phát triển sau có thể dễ dàng đọc hiểu code.

Unity

Unity là một công cụ được sản xuất và phát triển bởi Unity Technologies, ta có thể tạm hiểu nó là công cụ phát triển game đa nền tảng- “cross- flatform game engine” Game engine này được sử dụng để phát trển game, phần mềm mô phỏng trên PC, consoles, thiết bị di động và trên websites [5]

Unity có khả năng giúp đỡ lập trình viên làm ra những phần mềm 3D hoặc 2D được lập trình dựa trên ba ngôn ngữ chủ yếu là Boo, UnityScript và C# Trong đó, ngôn ngữ được các nhà phát triển ưu tiên sử dụng hơn cả là C#

2.2.2 Các chức năng cơ bản của Unity

• Unity hỗ trợ tạo các giao diện người dùng (UI) của chương trình như textbox, drop bar…

• Cung cấp công cụ hỗ trợ thiết kế đồ họa cho các hình ảnh, vật thể 2D và 3D

• Networking: giúp đỡ nhà phát triển tạo cộng đồng, khuyến khích có nhiều Users sử dụng cùng lúc, tăng tính kết nối cho chương trình

• Hỗ trợ kết nối và sử dụng với các nền tảng hiện đại và thú vị như AR (Augmented reality) và VR (Virtual reality)

• Trí tuệ nhân tạo (AI) – cung cấp trợ lý ảo trong màn hình chương trình và công cụ để tạo nên nó dễ dàng hơn

• Cho phép hiển thị văn bản bằng nhiều kiểu chữ đặc biệt nhằm phù hợp với các yêu cầu thiết kế giao diện chương trình

• Hỗ trợ phân luồng, tạo dòng dữ liệu, quản lý bộ nhớ

Với tất cả những tính năng của phần mềm Unity như trên, nó đã trở thành phần mềm cực kỳ thân thiện với người dùng Đặc biết với giao diện của Unity Editor luôn được chú ý và sử dụng nhiều hơn cả Với hàng loạt tính năng hiện đại và thiết thực để giúp đỡ các công việc phát triển chương trình gồm thiết kế các model vật lý, thiết kế ánh sáng, viết Script hỗ trợ lập trình…chỉ phải thực hiện với những thao tác đơn giản là nắm và thả các file, hình ảnh, đoạn mã code [5]

2.2.3 Ưu và nhược điểm của Unity Ưu điểm:

• Tính năng cốt lõi phong phú gồm: Cung cấp những hỗ trợ thiết kế đồ họa cho các hình ảnh, vật thể ba chiều hoặc hai chiều, hỗ trợ tạo các UI, tạo cộng đồng để dễ dàng kết nối người dùng, dễ dàng thêm và sửa âm thanh, hình ảnh, code, hiệu ứng, phân luồng, quản lý dữ liệu, bộ nhớ, kết nối mạng Nhờ có lượng lớn các công cụ như trên đã khiến việc tạo ra phần mềm ít tốn kinh phí, thời gian và dễ dàng hơn

• Multi-platform: Một trong những ưu điểm nổi bật của Unity chính là khả năng kết nối và sử dụng trên hầu hết các nền tảng đang có trên thị trường gồm: Xbox

360, PlayStation 3, iOS, Wii U, Android, Blackberry 10, Windows, Linux, OS X, trên cả Flash và trình duyệt Web Nói cách khác, chỉ với một công cụ này, các công ty phát hành hoặc các phòng nghiên cứu có thể làm chương trình, phần mềm cho bất kỳ platform nào và dễ dàng chuyển đổi nó sang những platform khác nhau Nhờ đó, đây cũng là cách mà các game online đa nền tảng có thể hoạt động đồng thời trên nhiều platforms hay hardwares khác nhau như PC, Web, Mobile …

• Dễ sử dụng: Unity được xây dựng dựa trên một môi trường phát triển tích hợp, cung cấp một công cụ toàn diện cho các lập trình viên, từ thiết kế đồ họa, viết code, phát triển những tính năng tự động hóa đến trình phát hiện và sửa lỗi Do định hướng phát hành bao gồm đồng thời công ty chuyên môn, phòng nghiên cứu, sinh viên, lập trình viên không chuyên và cả các công ty khác nhau, nên Unity3D khá thân thiện và dễ để học cách sử dung Hơn nữa, đây là một trong những chương trình được dùng nhiều nhất trên thế giới hiện nay, do đó người dùng có thể dễ dàng tìm kiếm các bài giảng cũng như kinh nghiệm sử dụng của những chuyên gia trên các diễn đàn kỹ thuật hay các trang mạng xã hội

• Tính kinh tế cao: Unity Technologies hiện cung cấp bản miễn phí engine Unity3D cho người dùng cá nhân và các doanh nghiệp có doanh thu dưới 100.000 USD/năm Với bản Pro, người dùng phải trả 1.500 USD/năm – một con số rất khiêm tốn so với những gì công cụ này mang lại

• Unity có một cồng đồng rất lớn về asset và plugin – trong đó có rất nhiều resources miễn phí và có nhiều thứ rất đáng bỏ tiền

• Unity có bộ công cụ rất trực quan và editor có thể mở rộng bằng plugins

Ngoài việc sở hữu nhiều thế mạnh đặc biết như vậy nhưng Unity vẫn có một số nhược điểm riêng của nó

• Dung lượng game được phát triển bởi Unity khá lớn: Khi ta thực hiện so sánh với những công cụ phát triển phần mềm mô phỏng khác, chương trình được thực hiện bằng Unity có điểm hạn chế lớn là dung lượng khá nặng Theo các chuyên gia, một game chỉ nên nặng không quá 100MB là tốt nhất, tuy nhiên phần mềm được sản xuất dựa trên Unity thường có dung lượng lớn hơn con số trên nên việc hoạt động không được mượt mà là thường xuyên xảy ra

• Unity thường xuyên ra mắt nhiều phiên bản cập nâng cấp, cập nhật trong cùng năm và liên tục trong nhiều năm Với trường hợp các người dùng sử dụng các phiên bản khác nhau trong cùng một nhóm hoặc giữa các nhóm khác nhau và khách hàng, thì khi liên kết, trao đổi thuật toán giữa các team dễ xuất hiện tình trạng lỗi model, hình ảnh, thuật toán, script… trường hợp xấu hơn là gây chậm tiến độ và mất dữ liệu

• Việc hợp tác trên Unity thật sự không quá thuận lợi Mặc dù Unity có chung một server khá hoàn thiện để giúp cho các team khác nhau có thể thuận tiên hơn trong việc kết hợp với nhau Tuy nhiên, nếu có người dùng, hoặc team phát triển nào không sử dụng unity thì việc chia sẻ tài nguyên giữa các thành viên trong cùng một team hoặc ở những team khác nhau có thể xảy ra những sự cố đặc biệt nguy hiểm cho tiến độ cũng như kết quả dự án Lựa chọn khả quan nhất trong tình huống này là ta sẽ dùng một số công cụ quản lý tài nguyên bên ngoài Nhưng như vậy cũng có thể xuất hiện trường hợp một số Binary file không thể kết hợp được với nhau và việc trao đổi tài nguyên có thể gây nên nhiều rắc rối trong việc lập trình, mất kết nối đến mã nguồn hoặc các đối tượng khác

• Không hợp với những dự án lớn: không thể quá đi sâu vừa được xem là điểm lợi cũng vừa được xem là hạn chế Một mặt, unity hỗ trợ quá trình phát triển được nhanh chóng, dễ thích nghi, tìm hiểu với những sinh viên hay người không chuyên, mặt khác điều đó cũng đồng nghĩa là đây không phải là công cụ nếu ta mong muốn sẽ tạo ra thứ gì đó thật mới lạ, độc quyền hay trong một quy mô lớn

• Mã nguồn của phần mềm sẽ không được public cho dù các tổ chức hoặc công ty, người sử dụng chấp nhận chi tiền Do đó nếu chúng ta gặp một lỗi từ nhà phát triển với Unity trong lúc sử dụng phần mềm thì chúng ta phải đợi những phiên bản vá lỗi từ nhà sản xuất Kết quả có thể xảy ra là việc chậm tiến độ trong những dự án của chúng ta

2.2.4 Tìm hiểu về Unity Engine

2.2.4.1 Các thành phần trong Unity Editor

Các đối tượng sẽ được hiển thị một cách trực quan ở trong cửa sổ này, ta được phép chọn lựa các đối tượng, thu nhỏ, phóng to, kéo thả, xoay các đối tượng một cách dễ dàng Chúng ta có tự tinh chỉnh một số thông số như hiển thị ánh sáng, âm thanh, cách nhìn 2D hay 3D theo nhu cầu dự án của từng người dùng - Khung nhìn Scene là nơi thiết lập vị

Hình 2.2: Giao diện cơ bản của một Unity Editor

12 trí, tọa độ, hướng nhìn các Game Objects như cây cối, cảnh quan, bản đồ, phương tiện, nhân vật, camera, … trong chương trình Sự sắp xếp model, terrain là một trong các tính năng cần thiết nhất của Unity

Arduino

2.3.1 Arduino IDE Để có thể viết và biên dịch mã vào module Arduino thì phần mềm Arduino IDE là phần mềm tốt nhất

Có rất nhiều loại module Arduino như Arduino Uno, Arduino Mega, Arduino Leonardo, Arduino Micro và nhiều module khác Mỗi module chứa một bộ vi điều khiển riêng, chúng được lập trình và chấp nhận thông tin dưới dạng mã Mã chính, còn được gọi là sketch, được tạo trên nền tảng IDE sẽ tạo ra một file Hex, sau đó được chuyển và tải lên trong bộ điều khiển trên bo Môi trường IDE chủ yếu chứa hai phần cơ bản: [6]

• Trình chỉnh sửa được sử dụng để viết mã được yêu cầu

• Trình biên dịch được sử dụng để biên dịch và tải mã lên module Arduino

Arduino Uno là một bo mạch vi điều khiển dựa trên chip Atmega328P Uno có 14 chân I/O digital (trong đó có 6 chân xuất xung PWM), 6 chân Input analog, 1 thạch anh 16MHz, 1 cổng USB, 1 jack nguồn DC, 1 nút reset [7]

Hình 2.8: Giao diện cơ bản lập trình Arduino

2.3.2.1 Sơ đồ chi tiết Arduino Uno

Bảng 2.1: Bảng thông số kỹ thuật của Arduino Uno R3 [7]

Vi điều khiển Atmega328P Điện áp hoạt động 5V Điện áp cấp (hoạt động tốt) 7 – 12V Điện áp cấp (giới hạn) 6 – 12V

Chân I/O digital 14 (có 6 chân xuất xung PWM)

Dòng điện mỗi chân I/O 20 mA

Bộ nhớ Flash 32 kB (Atmega328P) – trong đó 0.5 kB dùng cho bootloader

Hình 2.9: Sơ đồ chi tiết Arduino Uno R3

Tốc độ xung nhịp 16 MHz

 Digital: Các chân I/O digital (chân số 2 – 13) được sử dụng làm nhận, gữi tín hiệu số thông qua các hàm chính: pinMode(), digitalWrite(), digitalRead() Điện áp hoạt động là 5V, dòng điện qua các chân này bình thường là 20mA, cấp dòng quá 40mA sẽ phá hỏng vi điều khiển

 Analog: Uno có 6 chân Input analog (A0 – A5), độ phân giải mỗi chân là 10 bit (0 – 1023) Các chân này dùng để đọc tín hiệu điện áp 0 – 5V (mặc định) tương ứng với 1024 giá trị, sử dụng hàm analogRead()

 PWM: các chân được đánh số 3, 5, 6, 9, 10, 11; có chức năng cấp xung PWM

(8 bit) thông qua hàm analogWrite()

Hình 2.10: Sơ đồ chân Atmega328

 UART: Atmega328P cho phép truyền dữ liệu thông qua hai chân 0 (RX) và chân 1 (TX)

Có hai cách cấp nguồn chính cho bo mạch Uno: cổng USB và jack DC Giới hạn điện áp cấp cho Uno là 6 – 20V Tuy nhiên, dải điện áp khuyên dùng là 7 – 12 V (tốt nhất là 9V) Lý do là nếu nguồn cấp dưới 7V thì điện áp ở ‘chân 5V’ có thể thấp hơn 5V và mạch có thể hoạt động không ổn định; nếu nguồn cấp lớn hơn 12V có thể gấy nóng bo mạch hoặc phá hỏng Các chân nguồn trên Uno:

 Vin: chúng ta có thể cấp nguồn cho Uno thông qua chân này Cách cấp nguồn này ít được sử dụng

 5V: Chân này có thể cho nguồn 5V từ bo mạch Uno Việc cấp nguồn vào chân này hay chân 3.3 V đều có thể phá hỏng bo mạch

 3.3V: Chân này cho nguồn 3.3 V và dòng điện maximum là 50mA

Các linh kiện để mô phỏng

2.4.1 Biến trở - Mô phỏng tín hiệu bàn đạp ga và phanh

Cảm biến bàn đạp là bộ phận giúp đo vị trí và độ mở bàn đạp ga khi người lái nhấn vào bàn đạp Có 2 loại bàn đạp là: bàn đạp Hall và bàn đạp tuyến tính Đề tài sử dụng tín hiệu bàn đạp tuyến tính để mô phỏng

Cấu tạo cảm biến bàn đạp tuyến tính thường khá giống với cảm biến bướm ga, gồm các bộ phận: con trượt, một mạch trở than và một lưỡi quét trên mạch trở than Đề cao tính an toàn cũng như độ tin cậy về thông tin, hầu hết các dòng xe ô tô đều sử dụng 2 tín hiệu cảm biến bàn đạp để thông báo cho bộ phận ECU Nguyên lý hoạt động của cảm biến bàn đạp tuyến tính đa số làm việc dựa trên nguyên lý chiết áp Cảm biến được cấp nguồn với điện áp 5V, tín hiệu đến mô-đun điều khiển chiết áp 1 luôn nhiều gấp đôi so với chiết áp 2 Khi trục của bàn đạp thay đổi vị trí trên mạch trở than bằng cách xoay lưỡi quét, làm thay đổi điện áp đầu ra (chân signal), cuối cùng là báo về ECU để tăng độ tin cậy cho cảm biến

Xét theo nguyên lý của cảm biến bàn đạp tuyến tính, đề tài sử dụng biến trở để mô phỏng lại tín hiệu của cảm biến bàn đạp tuyến tính cho bàn đạp phanh và ga

2.4.2 Mạch điện khiểu góc quay Encoder – Mô phỏng tín hiệu vô lăng

Mạch Điều Khiển Góc Quay Encoder giống 1 module biến trở nhưng có ngõ ra dạng xung số Khi xoay núm vặn, ngõ ra xung của 2 kênh sẽ thay đổi 1 độ lệch pha xác định 90 độ giúp phân biệt được chiều xoay Góc xoay không giới hạn, chiều quay có thể được phân biệt theo dạng xung ngõ ra của 2 kênh Bằng cách đếm số lượng xung ngõ ra sẽ cho biết vị trí góc xoay, ngoài ra mạch cũng cung cấp 1 nút nhấn có thể được lập trình để trở thành 1 nút reset giá trị đếm [9]

Hình 2.12: Mạch điều khiển góc quay Encoder

2.4.3 Công tắc xoay nhả 3 tay số - Mô phỏng tín hiệu tay số trên xe

Hình 2.13: Vị trí công tắc tay số N

Hình 2.14: Vị trí công tắc tay số D

Hình 2.15: Vị trí công tắc tay số R

Với từng vị trí của công tắc, theo hình phía trên vị trí chính giữa là tay số N, vị trí bên trái là tay số D và vị trí bên phải là tay số R

2.4.4 Công tắc gạt – Mô phỏng tín hiệu xi nhan

Công tắc ở vị trí giữa sẽ ở tay số chờ, khi gạt qua trái sẽ gửi tín hiệu cho biết là xi nhan trái, khi gạt qua phải sẽ gửi tín hiệu cho biết là xi nhan phải

MÔ HÌNH HÓA HỆ THỐNG TRÊN UNITY

Tổng quan các bước mô hình hóa

Tiến hành tìm hiểu các thông số kĩ thuật của xe và mô hình sa hình thực tế nhằm thiết kế được một mô hình với tỉ lệ của phương tiện và sân thi được trực quan nhất có thể Với các thông số kĩ thuật như sau: [10]

• B1: Chiều rộng bánh sau xe bên lái phụ của xe ô tô sát hạch, đơn vị tính là mét

• a: Chiều dài của toàn bộ của ô tô sát hạch, đơn vị được tính là mét

• b: Chiều rộng toàn bộ của ô tô sát hạch, đơn vị được tính là mét

• d Rqv: Bán kính quay vòng nhỏ nhất của ô tô sát hạch theo vết bánh xe trước phía ngoài, đơn vị được tính bằng mét

Một số yêu cầu cơ bản của sân thi cần được đáp ứng là:

❖ Bài thi qua vệt bánh xe và đường hẹp vuông góc

Hình vệt bánh xe nằm phía bên phải cùng chiều theo chiều xe chạy, gồm 02 vạch dọc đồng thời với nhau và đồng thời với trục dọc của đường; sau hình vệt bánh xe kẻ 02 hình vuông góc nối tiếp với nhau theo chiều trái lại, có:

Bvb (m) là chiều rộng vệt bánh xe: Bvb = B1 + 0,2 (m);

Lvb (m) là chiều dài vệt bánh xe tập lái: Lvb = a;

Sv (m) là chiều sâu đường vuông góc sân tập: Sv = 1,5a

Lv (m) là chiều dài đường vuông góc sân tập: Lv = 2,0a

Bv (m) là chiều rộng làn đường vuông góc sân tập: Bv = 2,2b

❖ Bài thi qua đường vòng quanh co

Mỗi hạng xe sát hạch phải bố trí ít ra 01 hình qua đường vòng quanh co Hình gồm

02 nửa hình vòng tròn tiếp nối với nhau ngược chiều, tạo thành hình chữ S, có:

Bqc(m): Chiều rộng đường vòng quanh co: Bqc = 2,2b

RN(m) là bán kính cong của vòng tròn phía ngoài: RN = Rqv + 1,2 m

Rtr (m) là bán kính cong của vòng tròn sa hình phía trong: Rtr = RN – Bqc

Sqc(m) là khoảng cách thức tâm của 02 nửa hình vòng tròn: Sqc = RN + Rtr

❖ Bài thi ghép xe dọc

Mỗi hạng xe sát hạch (hạng B, C) phải sắp xếp ít nhất 01 hình ghép xe dọc vào nơi đỗ Hình bố trí sắp xếp bên cạnh làn đường xe chạy, có:

Ld (m) là chiều dài nơi ghép xe dọc: Ld = a + 1,0 (m)

Rd (m) là chiều rộng nơi ghép xe dọc: Rd = b + 0,6 (m)

Ed (m) là khoảng trống để lùi vào nơi ghép xe dọc: Ed = 1,2a

❖ Bài thi ghép xe ngang

Phải sắp xếp tối thiểu 01 hình ghép xe ngang vào nơi đỗ Hình sắp đặt phía bên phải làn đường (theo hướng xe chạy), có:

Lg (m) là chiều dài nơi đỗ xe ghép ngang: Lg = 3a/2

Rg (m) là chiều rộng nơi đỗ xe ghép ngang: Rg = 5b/4

Chúng ta có thể thiết kế model của xe và sa hình bằng bất cứ công cụ thiết kế 3d nào như solidworks, catia…Trong đồ án này, nhóm thiết kế các model bằng các công cụ trực tiếp trên Unity

3.1.2 Xử lý va chạm Đầu tiên chúng ta phải hiểu va chạm trong Unity là sự kiện xảy ra khi hai vật thể (object) đi vào không gian của nhau, là một trong những sự kiện thường gặp nhất khi lập trình game Đụng quái vật, đụng bom, đụng tường, trúng mũi tên, đi qua mốc, đi tới đích,

… đều cần sự kiện va chạm và xử lý va chạm

Có 2 loại va chạm phổ biến là Collision và Trigger: [11]

Hình 3.2: Mô hình sa hình

• Colision: là va chạm mà hai project không đi xuyên qua được, hay nói cách khác là “đụng”, khi object này đụng object thì bị cản lại

• Trigger: là va chạm mà object này có thể đi xuyên qua object kia

Các bước cơ bản để xử lý va chạm:

Bước 1: Tạo không gian Collider

- Vào Menu Component rồi vào Physics (hoặc nhấn Add Component, search “Collider”) và chọn một kiểu Collider trong số các kiểu sau:

• Box collider: không gian va chạm bao quanh object là hình khối vuông

• Sphere collider: không gian va chạm bao quanh object là hình khối cầu

• Capsule collider: không gian va chạm bao quanh object là hình viên nhộng

• Mesh collider: không gian va chạm bao quanh object là hình dạng tương ứng với hình dạng của vật thể, do đó cũng làm nặng game nhất

• Wheel collider: không gian va chạm bao quanh object là hình đĩa tròn

• Terrain collider: không gian va chạm bao quanh object là hình bề mặt, thường dùng cho mặt đất, mặt cỏ, mặt nước…

- Lúc này object sẽ xuất hiện 1 component Collider tương ứng, và vật thể cũng sẽ có 1 khung màu xanh lá bao quanh tượng trưng cho không gian Collider (gọi tắt là Collider)

- Các thông số trong Component Collider:

• Is Trigger: xác định là loại va chạm nào, giá trị True là va chạm Trigger, False là va chạm Collision

Hình 3.3: Công cụ để tạo collider

• Material: bề mặt va chạm để tạo hiệu ứng vật lý, ví dụ như hiệu ứng đàn hồi cần có bề mặt đàn hồi… chúng ta có thể bỏ qua mục này

• Center: vị trí tương đối của một collider so với object

Ngoài ra mỗi loại Collider sẽ có một vài thông số riêng như: Box có size, Sphere có Radius (bán kính), Capsule có Height và Direction…

Bước 2: Viết code xử lý va chạm

Hàm sự kiện va chạm phải được đặt trong đoạn script là component của object có Collider

Bước 3: Chạy thử phần mềm

3.1.3 Xử lý các UI và camera

Giao diện người dùng (User Interface – UI) là thành phần không thể thiếu đối với bất kỳ phần mềm Unity nào, UI cung cấp các thông tin trực quan cần thiết cho người dùng, giúp người dùng có cái nhìn toàn diện về các khả năng của mình, các thông báo trong quá trình sử dụng phần mềm [12]

Thiết kế giao diện người dùng đơn giản là sử dụng các assets có sẵn (hình ảnh, font chữ, các hiệu ứng, ), sắp xếp chúng theo 1 bố cục được Designer thiết kế, các assets này

Hình 3.4: Thông số trong component Collinder

30 có thể tìm thấy trên các website, Assets Store của Unity, hoặc do chính các Designer, Artist trong dự án thiết kế

Các thành phần cơ bản trong thiết kế UI bao gồm: Canvas, Text, Imagine, Button,… Trong đồ án lần này nhóm đã sử dụng một vài UI như:

Hình 3.5: Pause and relay button

Hình 3.6: Signal Button( xi_nhan, Hazard)

Về Camera, trong đồ án này nhóm đã sử dụng 2 camera:

• Camera chính: nhìn toàn cảnh sân thi khi sử dụng

• Camera phụ: di chuyển theo phương tiện để tạo góc nhìn cho người sử dụng

• Clear Flag: quy định cách thức xoá các đối tượng Trong 3D game tuỳ chọn Skybox thường được sử dụng và tuỳ chọn Solid color đối với game 2D

• Background: màu nền sau khi các đối tượng đã được render

• Culling Mask: quy định các layer sẽ được vẽ hoặc ẩn đi

• Projection: chọn phép chiếu cho camera

• Size: kích thước của camera Tuỳ chọn này chỉ có khi phép chiếu được chọn là Orthographic

• Field of view: góc đo tính bằng độ, là góc đo chiều rộng góc nhìn của Camera

• Clipping Planes: bao gồm 2 thuộc tính Near và Far Là khung nhìn thấy của camera

• Viewport Rect: kích thước của camera và vị trí của nó trên màn hình Các giá trị này sử dụng hệ toạ độ Screen Coordinate.

Lập trình điều khiển

3.2.1 Lập trình xử lý UI

Trong đồ án nhóm đã tạo ra một sctipt riêng để chỉ chuyên xử lí các UI, dưới đây là code xử lí UI của nhóm:

Hình 3.10: Code xử lý UI (1)

Hình 3.11: Code xử lý UI (2)

Hình 3.12: Code xử lý UI (3)

Hình 3.13: Code xử lý UI (4) Nhóm đã tạo ra một class UIcontroller để lưu các hàm xử lý UI ra riêng Sau này khi xử lý code ở các bài thi phía sau, nếu cần điều khiển Ui nhóm chỉ cần gọi lại tên hàm chứ không cần viết code xử lý lại nữa

Hàm Start để khai báo trạng thái ban đầu của chương trình

Và sau đó là các hàm xử lý bao gồm:

• PressReplay: trả về trạng thái start khi người dùng ấn nút này

• UpdateScore: cập nhật điểm của bài thi theo thời gian

• ChangeStatusXiNhanTrai, ChangeStatusXiNhanPhai: bật tắt khi người dùng nhấn nút xi nhan

• PressTangToc, PressGiamToc: thay đổi tốc độ khi người dùng nhấn nút

3.2.2 Lập trình xử lý bài thi

Trong đồ án, việc xử lý các bài thi chủ yếu có ba công việc chính:

1 Kiểm tra tín hiệu: Các bài thi kiểm tra khi đi qua một vạch quy định, người dùng có thực hiện bật tắt một tín hiệu nào hay không Các bài thi 1,9 và 11 là thuộc dạng này Lưu đồ thuật toán của dạng này cơ bản như sau:

2 Kiểm tra dừng xe: Các bài thi này kiểm tra xem phương tiện có dừng đúng trước các vị trí của các bài thi hay không? Lưu đồ cơ bản của thuật toán này cũng được trình bày như sau:

Hình 3.14: Lưu đồ thuật toán giải quyết các bài thi kiểm tra tín hiệu

3 Kiểm tra va chạm: Các bài thi nay kiểm tra trong quá trình di chuyển phương tiện có va chạm vào những vạch kẻ không được phép hay không? Lưu đồ thuật toán này được trình bày như sau

Hình 3.15: Lưu đồ thuật toán giải quyết các bài kiểm tra dừng đỗ

3.2.3 Lập trình xử lý camera

Lập trình xử lý camera cũng tương tự như cấu trúc lập trình xử lý các objects khác trong Unity Trong lần này nhóm đã sử dụng hai hàm là Start() và Update()

Xử lý khi người dùng mới bắt đầu vào chương trình, nó khởi tạo các biến cũng quy xác định vị trí ban đầu của camera Hàm này chỉ được gọi một lần trong cả chương trình

Hình 3.16: Lưu đồ thuật toán giải quyết các bài kiểm tra va chạm

Hình 3.17: Lưu đồ xử lý trong hàm Start của camera

40 Đầu tiên khi vào hàm start chúng ta sẽ xử lý hàm “FindGameObjectWithTag()” để tìm vị trí của Player của chúng ta Ở đây player của chúng ta là chiếc xe, chúng ta tìm vị trí này là để gắn camera chính của chúng ta vào nó Trong cả quá trình thực hiện bài thi, camera của ta sẽ nhận vật chủ là chiếc xe và di chuyển theo nó nhằm tạo góc nhìn tốt nhất cho người dùng

Tiếp đó biến “originalSystem” là để giúp tạo camera ở góc nhìn thứ 3, giúp người dùng có một góc nhìn tổng quan hơn về bản đồ của mình trong khi thực hiện bài thi trên chương trình

Sau khi đã xử lý xong hàm Start() chương trình sẽ chuyển tới hàm Update()

Hàm được gọi mỗi lần vào mỗi frame và được xem như hàm xử lý chính của vòng lặp chương trình

Khi vào hàm Update chúng ta sẽ yêu câu chương trình vào hàm checkPosPlayer() để kiểm tra xem vị trí của camera và phương tiện có thay đổi hay không?

Nếu phương tiện đã di chuyển tương ứng với điều kiện “false” thì chúng ta sẽ cập nhật lại vị trí của phương tiện và camera bằng câu lệnh “transform.position”

Sau đó chúng ta lại vào hàm transform.eulerAngles Đây là hàm giúp xử lý camera ở các bài mà yêu cầu camera phải thay đổi góc quay liên tục như bài dừng xe và khởi hành ngang dốc, đường vòng quanh co…

Hình 3.18: Lưu đồ xử lý hàm Update của camera

Còn nếu điều kiện “true” thì chương trình sẽ kết thúc Frame này và tiếp tục vòng lặp vào một frame kế tiếp

LIÊN KẾT UNITY VÀ ARDUINO

Thu tín hiệu Arduino

Hình 4.1: Sơ đồ mô phỏng phần cứng

Hình 4.2: Sơ đồ liên kết các chân

4.1.1 Sơ đồ liên kết biến trở với Arduino

Hai biến trở liên kết với Arduino theo hình phía trên Biến trở tín hiệu chân ga sẽ gửi tín hiệu về chân A0 của Arduino, biến trở tín hiệu chân phanh sẽ gửi tín hiệu về chân A2 của Arduino

4.1.2 Sơ đồ liên kết mạch điều khiển góc quay Encoder với Arduino

Mạch Encoder có 5 chân lần lượt là GND, +, MS, DT, CLK Chân DT gửi tín hiệu về chân IO8 của Arduino và chân CLK gửi tín hiệu về chân IO7 của Arduino

Hình 4.3: Sơ đồ liên kết biến trở với Arduino

Hình 4.4: Sơ đồ liên kết mạch điều khiển góc quay Encoder với Arduino

4.1.3 Sơ đồ liên kết công tắc gạt với Arduino

Với 2 chân số 1 và 3 của công tắc sẽ gửi tín hiệu về chân IO5 và IO0 của Arduino Chân số 2 nối Mass Khi tín hiệu rẽ phải chân số 3 sẽ thông với chân số 2 và ngược lại khi rẽ trái chân số 1 và 2 sẽ thông nhau

4.1.4 Sơ đồ liên kết công tắc 3 tay số với Arduino

Khi ở tay số D của công tắc chân 14 sẽ thông với chân 23, gửi tín hiệu về chân IO7 Khi ở tay số R chân 24 sẽ thông với chân 23, gửi tín hiệu về chân IO4

4.1.4 Tín hiệu Arduino nhận được

Các tín hiệu gửi về Arduino được xắp sếp thành một mãng gồm 7 giá trị lần lượt là: data[0] là dữ liệu cho chân ga, data[1] là dữ liệu cho chân phanh, data[2] là dữ liệu cho xi nhan trái, data[3] là dữ liệu cho xi nhan phải, data[4] là dữ liệu cho tay số của xe, data[5] là dữ liệu cho tín hiệu hazard, data[6] là dữ liệu cho tín hiệu góc đánh lái

Hình 4.5: Sơ đồ liên kết công tắc gạt với Arduino

Hình 4.6: Sơ đồ liên kết công tắc 3 tay số với Arduino

4.1.4.1 Arduino nhận tín hiệu thay đổi tay số xe

Khi công tắc thay đổi vị trí, tín hiệu gửi về Arduino theo dạng Analog Khi công tắc ở tay số số N thì data[4] = 2, ở tay số D thì data[4] = 3, ở tay số R data[4] = 1

Hình 4.8: Lưu đồ thuật toán xử lý tín hiệu tay số N

Hình 4.10: Lưu đồ thuật toán xử lý tín hiệu tay số D

Hình 4.12: Lưu đồ thuật toán xử lý tín hiệu tay số R

4.1.4.2 Arduino nhận tín hiệu xi nhan

Khi công tắc gạt gửi về Arduino tín hiệu Digital Khi công tắc gạt trái data[2] = 1, khi công tắc gạt phải data[3] = 1

4.1.4.3 Arduino nhận tín hiệu giá trị chân ga và phanh

Tín hiệu gửi về Arduino dưới dạng Analog, với giá trị thay đổi từ 0 tới 100 khi đạp chân ga/phanh

Hình 4.13: Tín hiệu xi nhan trái

Hình 4.14: Tín hiệu xi nhan phải

4.1.4.4 Arduino nhận tín hiệu thay đổi góc lái

Tín hiệu gửi về Arduino dưới dạng Analog, khi tay xoay một vòng núm xoay giá trị gửi về thay đổi từ 0 tới 360

Hình 4.15: Tín hiệu chân ga

Hình 4.16: Tín hiệu chân phanh

Kết nối với Unity

Dữ liệu từ Arduino chuyển vào Unity theo kiểu mãng 7 giá trị lần lượt là: datas[0] là dữ liệu cho chân ga, datas[1] là dữ liệu cho chân phanh, datas[2] là dữ liệu cho xi nhan trái, datas[3] là dữ liệu cho xi nhan phải, datas[4] là dữ liệu cho tay số của xe, datas[5] là dữ liệu cho tín hiệu hazard, datas[6] là dữ liệu cho tín hiệu góc đánh lái

Trong phần mềm Unity, để đánh lái xe phải tạo một lực xoay quanh trục Y với câu lệnh Transform.Rotate có giá trị xoay thay đổi theo giá trị datas[6]/180

Hình 4.17: Tín hiệu thay đổi góc quay

Hình 4.18: Chuyển đổi tính hiệu góc đánh lái

4.2.2 Tín hiệu khi xe ở tay số N

Khi công tắc ở tay số N, datas[4]=2, biến IsMovese xe sẽ không di chuyển

Hình 4.19: Lưu đồ thuật toán xử lý tín hiệu khi xe ở tay số N

4.2.3 Tín hiệu khi xe ở tay số D

Khi xe ở tay số D, datas[4]=3 Biến IsMove=true xe sẽ di chuyển với một lực đẩy lên phía trước với câu lệnh Transform.Translate có giá trị theo biến speedO Đồng thời ở

Hình 4.20: Lưu đồ thuật toán xử lý tín hiệu khi xe ở tay số D

54 tay số này khi có thêm giá trị tín hiệu datas[0] > 0, xe sẽ có thêm một lực đẩy lên phía trước với giá trị bằng tổng giá trị biến speed và datas[0]/25 Ngoài ra, khi có giá trị tín hiệu datas[1] 50 lực cản đó sẽ bằng giá trị lực đẩy ban đầu khiến xe dừng tại chỗ

4.2.4 Tín hiệu khi xe ở tay số R

Khi xe ở tay số R, datas[4]=1 Biến IsMove=true xe sẽ di chuyển với một lực đẩy về sau với câu lệnh Transform.Translate có giá trị theo biến speedO Đồng thời ở tay số

Hình 4.21: Lưu đồ thuật toán xử lý tín hiệu khi xe ở tay số R

56 này khi có thêm giá trị tín hiệu datas[0] > 0, xe sẽ có thêm một lực đẩy về sau với giá trị bằng tổng giá trị biến speed và datas[0]/25 Ngoài ra, khi có giá trị tín hiệu datas[1] 50 lực cản đó sẽ bằng giá trị lực đẩy ban đầu khiến xe dừng tại chỗ

4.2.5 Tín hiệu xi nhan trái

Khi xi nhan trái bật, datas[2]=1, biến ObjectXiNhanTrai.SetActive(true) sẽ được xuất ra, đèn xi nhan trái sẽ bật Ngược lại khi datas[2]=0, biến ObjectXiNhanTrai(false) sẽ được xuất ra, đèn xi nhan trái sẽ tắt

Hình 4.22: Lưu đồ thuật toán xử lý tín hiệu xi nhan trái

4.2.6 Tín hiệu xi nhan phải

Khi xi nhan phải bật, datas[3]=1, biến ObjectXiNhanPhai.SetActive(true) sẽ được xuất ra, đèn xi nhan phải sẽ bật Ngược lại khi datas[3]=0, biến ObjectXiNhanPhai(false) sẽ được xuất ra, đèn xi nhan phải sẽ tắt

Hình 4.23: Lưu đồ xử lý thuật toán tín hiệu xi nhan phải

KẾT QUẢ VÀ KẾT LUẬN

Kết quả

Trong thời gian thực hiện đồ án này, nhóm đã đạt được một số kết quả trên cả phương diện lý thuyết và sản phẩm

5.1.1 Lý thuyết Đề tài của nhóm đã mang lại một nguồn tổng hợp tài liệu một cách căn bản nhất về các phần mềm Visual Studio, Unity, Adruino, các cảm biến và thiết bị điều khiển cơ bản trên ô tô Đề tài cũng đã nêu ra các bước cần thực hiện để tạo ra một chương trình mô phỏng cơ bản trên Unity

Nhóm đã cố gắng hoàn thiện sản phẩm tốt nhất dựa trên các điều kiện về thời gian và tài chính Nhóm đã có được một phần mềm khá hoàn chỉnh, các model sa hình với tỉ lệ sát thực tế Đồng thời model sa hình của nhóm cũng đã thiết kế sẵn các khu vực cho các bài thi của bằng C, nếu sau này nhóm có cơ hội để phát triển đề tài này thì hoàn toàn có thể tích hợp thêm mô phỏng thi bằng C vô phần mềm của mình một cách dễ dàng hơn

Phần mềm của nhóm cũng đã có hầu như đầy đủ các chức năng cũng như các bài thi của một phần mềm mô phỏng Âm thanh của phần mềm cũng rất sinh động Từ những âm thanh báo bài thi, âm thanh báo hoàn thành bài thi đến những âm thanh cảnh báo đều giống hoàn toàn với bộ âm thanh mà người dùng có thể nghe được khi tham gia thi trên sa hình thật

Các bài thi từ phần mềm mô phỏng của nhóm:

59 Ở hình trên, người dùng đã mắc lỗi không tắt xi nhan trái khi đi qua vạch xuất phát nên bị trừ 5 điểm, phần mềm đã thông báo lên màn hình và điểm đã bị trừ

Người dùng trong trường hợp này đã dừng xe quá sớm khi chưa đến vạch ở dốc cầu nên cũng bị trừ 5 điểm Đồng thời ở góc phải mản hình, dưới ô Score cũng có tính thời

Hình 5.2: Bài thi dừng xe và khởi hành ngang dốc

Hình 5.1: Bài thi xuất phát

60 gian phải hoàn thành bài thi này Nếu người dùng không vượt qua bài thi này trong thời gian 30 giây thì cũng bị trừ điểm

Người dùng trong trường hợp này đã va chạm với lề đường khi đánh lái trong đường cong vuông góc Mỗi lần người dùng chạm lề đường trong một lần thi thì đều sẽ bị trừ 5 điểm

Hình 5.3: Bài thi đường vuông góc

Trong một lần thi, người dùng sẽ phải đi qua ngã tư có tín hiệu điều khiển giao thông bốn lần Bất cứ lần nào người dùng vượt đèn đỏ hoặc đèn vàng thì đều sẽ bị trừ điểm

Trong bài thi ở trên hoặc trong bất kỳ bài dừng xe nào, nếu người dùng dừng xe quá sớm khi chưa cán vào vạch chỉ định báo bài thì đều sẽ bị trừ điểm và thông báo lỗi dừng sớm

Hình 5.4: Bài thi qua ngã tư có tín hiệu điều khiển giao thông

Hình 5.5: Bài thi dừng xe nơi có đường sắt cắt ngang

62 Ở bài thi này, sẽ có 2 biển báo giới hạn tốc độ, khi gặp biển báo giới hạn tốc độ tối thiểu là 20km/h thì người dùng phải đạt được đúng tốc độ này ngay khi gặp biển báo trên, và sau đó chúng ta sẽ gặp biển báo giới hạn tốc độ tối đa là 20km/h thì tốc độ của phương tiện khi qua biển báo này không được quá 20km/h Hình trên thì người dùng lần này đã không giảm tốc độ khi đi qua biển giới hạn tốc độ

Hình 5.6: Bài thi tăng tốc

Trong các bài thi đưa xe vào nơi đỗ (ghép ngang, ghép dọc) nếu người dùng cán phải các vạch giới hạn khu vực đỗ xe thì đều sẽ bị trừ điểm như hình trên

Nếu người dùng có số điểm khi kết thúc bài thi lớn hơn hoặc bằng 80 thì sẽ được thông báo là đã thi đỗ Còn ngược lại sẽ bị thông báo thi trượt

Hình 5.8: Bài thi trượt Hình 5.7: Bài thi ghép ngang

5.1.3 Hướng dẫn sử dụng mô hình

5.1.3.1 Các thao tác điều khiển và những nội dung cần chú ý

Trước mỗi bài thi sẽ có một vạch để bắt đầu bài thi và cuối mỗi bài thi cũng sẽ có một vạch khi bánh xe chạm vào để biết đạt Đối với các bài thi dừng đỗ, người dùng phải dừng đúng trong khoảng giữa hai vạch này

Trước mỗi bài thi thì cũng sẽ có âm thanh báo chuẩn bị bài thi gì tiếp theo Khi hoàn thành bài thi cũng sẽ có âm thanh “tính tinh” để báo bài

Hình 5.10: Các vạch báo bài thi

+ Để xe có thể di chuyển, bật công tắc qua tay số D xe sẽ di chuyển

+ Để xe lùi, chuyển công tắc sang tay số R

Hình 5.11: Công tắc ở tay số D

Hình 5.12: Công tắc ở tay số R

+ Để xe giảm tốc hãy vặn biến trở phanh đồng nghĩa với việc đạp chân phanh, và muốn xe dừng lại hãy vặn biển trở về tối đa, xe sẽ dừng lại

+ Để xe tăng tốc hãy vặn biến trở ga đồng nghĩa với việc đạp chân ga

+ Để đánh lái vặn núm xoay mạch thay đổi góc Encoder

+ Hãy gạt công tắc gạt qua bên trái để có thể bật xi nhan trái, gạt công tắc gạt qua bên phải để có thể bật xi nhan phải

5.1.3.2 Những chú ý khi thực hiện bài thi

Có voice “Bắt đầu bài thi”

Các lý do trừ điểm: (trừ 5 điểm)

+ Không bật xi nhan khi qua vạch

+ Không tắt đèn xi nhan khi

2 Bài dừng xe nhường đường cho người đi bộ

Vị trí bài thi sẽ có biển báo như hình bên dưới để người dùng biết

Các lý do trừ điểm: (trừ 5 điểm)

+ dừng cách vạch vàng quá 10cm

+ dừng chưa tới vạch vàng

3 Bài thi dừng xe và khởi hành ngang dốc

Hình 5.14: Biển báo nơi có vạch qua đường cho người đi bộ

Hình 5.15: Vạch qua đường dành cho người đi bộ

Cách tính điểm cũng như các bài dừng đỗ khác Tuy nhiên người dùng phải vượt qua dốc trong 30s nếu không sẽ bị trừ 5 điểm

4 Bài qua vệt bánh xe và đường hẹp vuông góc

Bánh xe bên phải đi bên ngoài vệt bánh xe sẽ bị loại (đối với bài vệt bánh xe)

Hình 5.16: Biển báo đoạn đường dốc

5 Bài thi qua ngã tư có tín hiệu điều khiển giao thông

+ cách vạch trước đèn đỏ hoặc quá vạch 50cm

+ không xi nhan trái phải theo hiệu lệnh bảng hiệu

Hình 5.17: Biển báo vào qua vệt bánh xe

6 Bài thi ghép dọc, ghép ngang

Xe bắt đầu cua vào vùng phía trước chuồng là bắt đầu bài thi

Những lý do bị trừ điểm

+ qua biển báo đầu tiên tốc độ không quá 20km/h

+ qua biển báo thứ 2 tốc độ quá 20km/h

Hình 5.18: Biển báo nơi có tín hiệu đèn giao thông

Hình 5.19: Biển báo tốc độ tối thiểu

Hình 5.20: Biển báo giới hạn tốc độ

Khi kết thúc bài thi phải xi nhan phải

Trừ 5 điểm khi qua vạch không có tín hiệu xin nhan phải.

Kết luận

Qua những vấn đề nhóm trình bày ở trên, chúng ta đều thấy mô phỏng luôn là vấn đề cần thiết trong rất nhiều ngành công nghiệp Những sản phẩm mô hình mô phỏng như nhóm đã nghiên cứu và phát triển sẽ rất có ích trong việc luyện tập giúp người dùng có thể dễ dàng hơn trong việc vượt qua các kì thi sát hạch lái xe Đồng thời cũng giúp người dùng làm quen với việc điều khiển xe cơ bản một cách dễ dàng và an toàn hơn Những mô hình mô phỏng này còn có một vai trò to lớn trong môi trường học thuật và nghiên cứu, giúp cho sinh viên có thể thực hành các thí nghiệm trên các mô hình mô phỏng để tiết kiệm chi phí nhưng vẫn cho ra một kết quả sát với thực tế nhất

Phần mềm của nhóm hoạt động khá ổn định và mượt mà, hầu như đều đáp ứng được các nhu cầu của người dùng khi cần một phần mềm mô phỏng để tập luyện cho bài thi sa hình

Hình 5.21: Biển báo kết thúc

Nhóm cũng đã thực hiện liên kết phần cứng và điều khiển thành công phần mềm mô phỏng thông qua Adruino và các bộ điều khiển cơ bản như: tay số, chân ga, chân phanh, xi nhan, vô lăng Tuy nhiên việc điều khiển bằng phần cứng xuất hiện những sự tương tác không thật sự nhạy, khi ta tiến hành điều khiển phần cứng bên ngoài thì một khoảng thời gian khá dài khoảng 3-5 giây thì phần mềm mới nhận được tín hiệu Điều này thật sự sẽ gây cảm giác khó chịu cho người dùng và làm cho họ không thể trải nghiệm được phần mềm một cách mượt mà nhất

Như đã nói ở trên thì sản phẩm của nhóm gặp một sự không mượt mà ở việc truyền tín hiệu từ phần cứng đến phần mềm Sau nhiều phương pháp kiểm tra và thử nghiệm, nhóm đã phát hiện ra vấn đề là ở chất lượng của những linh kiện phần cứng

Hầu hết linh kiện phần cứng như chân ga, chân phanh, vô lăng của nhóm đều là những linh kiện cơ bản chỉ để phục vụ cho mục địch học tập, thử nghiệm nên độ nhạy cũng như độ chính xác không được cao cho lắm Dẫn đến tình trạng kém mượt mà khi sử dụng sản phẩm

Nhóm cũng hi vọng nếu tiếp tục có cơ hội phát triển sản phẩm, hoặc có một nhóm nghiên cứu nào sau này tiếp tục phát triển đề tài thì sẽ có điều kiện tài chính để sử dụng những linh kiện điều khiển có chất lượng tốt hơn Đồng thời đồ án của nhóm chủ yếu phát triển trên nền tảng điều khiển của xe sử dụng hộp số tự động để thi sa hình B1, nên chúng ta hoàn toàn có thể phát triển lên bài thi sa hình B2

[1] Huyền CONTENT, "Áp dụng thi mô phỏng lái xe để thi sát hạch bằng ô tô 2022," [Online] Available: https://hoclaixeb2hanoi.com/thi-mo-phong-lai- xe.html?fbclid=IwAR1E7_dbMc3g1knI_IA7PjoPBayt8q2be8hA5HJK0qJnHtq0DXSIAeuvN

[2] P G Z K Zsolt Szalay, Proceedings of the FISITA 2012 world automotive congress

[3] ERFAN DANESHPAJOOH, "Simulation in Automotive research and development,"

[4] VISUALCPP CỘNG ĐỒNG LẬP TRÌNH C++, "Visual studio là gì? Giới thiệu các tính năng phần mềm Visual Studio," [Online] Available: https://visualcpp.net/visual-studio-la-gi-gioi- thieu-phan-mem-visual- studio/?fbclid=IwAR3qYxeP799P2hfeRu7VkTarjPnArfgPyUBtatDZnamCZR3PxUq8Z2Qe3

[5] Chế Yến, "Unity là gì? Tìm hiểu tất tần tật về lập trình Unity," [Online] Available: https://muaban.net/blog/unity-la-gi-

133483/?gidzl=HHd345llpLL40CiNNVJ4Lqe3nXfAzSTQKWsK7qJ- m5rQ2fHC5wYLMG1RnXGR_CLM0GgGGM8kmJTqMU33LW&fbclid=IwAR3qYxeP799P2 hfeRu7VkTarjPnArfgPyUBtatDZnamCZR3PxUq8Z2Qe3FA [Accessed 24 May 2022]

[6] VINA FE, "Phần mềm lập trình Arduino IDE là gì," [Online] Available: https://dientutuonglai.com/arduino-ide-la-gi.html

[7] malab, "Học Arduino Bài 2 : Những điều cơ bản về Arduino," [Online] Available: https://mlab.vn/index.php?_route_609-hoc-arduino-bai-2-nhung-dieu-co-ban-ve- arduino.html#:~:text=Arduino%20Uno%20l%C3%A0%20m%E1%BB%99t%20bo,th%E1% BB%83%20b%E1%BA%AFt%20%C4%91%E1%BA%A7u%20l%C3%A0m%20vi%E1%B B%87c

[8] VATC, "Cảm biến vị trí bàn đạp ga: 9 điểm quan trọng, giải thích tất cả," [Online]

Available: https://oto.edu.vn/tim-hieu-chi-tiet-cam-bien-vi-tri-ban-dap-ga/ [Accessed 3 August 2018]

[9] thegioiic, "KY-040 Mạch Điều Khiển Góc Quay Encoder," [Online] Available: https://www.thegioiic.com/ky-040-mach-dieu-khien-goc-quay-encoder

[10] TNH, "Tiêu chuẩn sân tập lái - Thông số kích thước sa hình thi B1, B2, C, D," [Online] Available: https://taplai.com/tieu-chuan-san-tap-lai-thong-so-kich-thuoc-sa-hinh-thi-b1-b2- c- d.html?fbclid=IwAR28GbZRk_rL6UpqVnDW9bgXd3IKblLmhunafoCopd4_G20Nz3Xh5mN 8_Yw [Accessed 23 August 2022]

[11] JungJinHyuk, "Xử lý va chạm trong Unity (phần 1)," [Online] Available: https://hocunity.3dvietpro.vn/default.aspx?g=posts&tB&fbclid=IwAR0mHsyJfWL58Lx2H 0E6U5kx1GD9YhUz_sjxh1pD3C7Rfm6y_u6blLoqjrs [Accessed 14 September 2014]

[12] TRAN XUAN CHU, "Giới thiệu về Unity Engine - Game Engine phổ biến nhất hiện nay.," [Online] Available: https://viblo.asia/p/gioi-thieu-ve-unity-engine-game-engine-pho-bien-

75 nhat-hien-nay-V3m5WBj8lO7?fbclid=IwAR3rqlWQuVc-nTPD1- zq02rb1HkQIFzG9dba4Y3XMwLom0IQAs6glJ3wiz0 [Accessed 17 August 2018]

[13] RYE NGUYEN, "Cơ Bản về Camera trong Unity," [Online] Available: https://www.iostream.vn/lap-trinh-game/co-ban-ve-camera-trong-unity- p10g3U?fbclid=IwAR1j7PE9jPd- busVCacgb7SW87A4ok_r6cjMO5ZDmpRoCoqSDkveBHUv40I [Accessed 24 September

#include // Khai bao thu vien TimerOne de dung chuc nang timer ngat

#include // Khai bao thu vien Kalman loc nhieu bien tro

#define Pedal A0 // Khai bao chan AO doc tin hieu ban dap ga

#define Brake A2 // Khai bao chan A2 doc tin hieu ban dap phanh

/**/ int pedal,value_raw1,value_raw2,brake; bool sig_r,sig_l,hz,g_d,g_r; long angle=0,count=0; int data[7]={0,0,0,0,2,0,0}; // Tao mang 7 phan tu luu gia tri cua {ga, phanh, signal_L,signal_R,Gear,harzard,angle} Mac dinh xe o so 1 luc bat dau

/**/ void setup() { pinMode(Pedal, INPUT); //Thiet lap 2 chan o che do INPUT pinMode(Brake, INPUT); pinMode(Signal_L, INPUT_PULLUP); pinMode(Signal_R, INPUT_PULLUP); pinMode(Gear_R, INPUT_PULLUP); pinMode(Gear_D, INPUT_PULLUP); pinMode(cnA, INPUT);

77 pinMode(cnB,INPUT); pinMode(harzard,INPUT_PULLUP); attachInterrupt(1, Read_encoder,RISING);

Serial.begin(9600); // Thiet lap baudrate la 9600

} void Read_encoder(){ if (digitalRead(cnB)==0){ count++;

} else { count ;} angle=count*18; data[6]=angle;

} void GetState(){ value_raw1=loc_1.updateEstimate(analogRead(Pedal)); // Doc du lieu o chan ga, phanh chuyen ve dang % do mo pedal=map(value_raw1,0,1023,0,100); // Loc tin hieu nhieu tu doc analog (Kalman Filter) data[0]=pedal; value_raw2=loc_2.updateEstimate(analogRead(Brake)); // Doc du lieu o chan ga, phanh chuyen ve dang % do mo brake=map(value_raw2,0,1023,0,100); // Loc tin hieu nhieu tu doc analog (Kalman Filter) data[1]=brake; sig_l=digitalRead(Signal_L); data[2]=!sig_l; sig_r=digitalRead(Signal_R); data[3]=!sig_r; g_r=digitalRead(Gear_R); g_d=digitalRead(Gear_D); hz=digitalRead(harzard);data[5]=!hz; // 0 là on; 1 là off

* Ga luu o bien pedal,data[0] range 0-100 (%)

* Phanh luu o bien brake, data[1] range 0-1 (0-OFF; 1-ON)

* Signal-L o data[2], Signal-R o data[3] range 0-1 (0-OFF; 1-ON)

* Gear (so AT) luu o data[4] range 1-2-3 (1-R;2-P/N;3-D)

* Harzard luu o data[5] range 0-1 (0-OFF; 1-ON)

* Steering angle luu o data[6] tra ve gia tri goc +/-

GetState(); if(g_r==0){ data[4]=1; // Chuyển số R

} if(g_d==0)data[4]=3; // Chuyển số Số D if(g_r==1 and g_d==1){ data[4]=2; // Chuyển số P/N data[0]=0; // Dang o so P/N thi khong chay data[1]=0;

} for (int i = 0; i < 7; i = i + 1) // Dung vong lap for de gui du lieu trong mang data[] {

// Serial.print("Pedal: "); Serial.print(pedal);

// Serial.print(" Brake: "); Serial.println(brake);

Code kết nối Arduino với Unity using System.IO.Ports; using System.Collections; using System.Collections.Generic; using UnityEngine; public class ATCarController : MonoBehaviour

Ngày đăng: 20/03/2024, 14:50

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w