Đồ án tốt nghiệp định vị và vẽ bản đồ slam cho xe tự hành dùng lidar

Đồ án tốt nghiệp nghiên cứu phương pháp định vị và vẽ bản đồ SLAM cho xe tự hành sử dụng công nghệ LIDAR, ứng dụng trong robot di động.

Trường đại học

Học viện Hàng không Việt Nam

Chuyên ngành

Điện – Điện tử

Người đăng

Ẩn danh

Thể loại

Đồ án tốt nghiệp

2025

65
2
0

Phí lưu trữ

30 Point

Tóm tắt

I. Giới thiệu về công nghệ SLAM trong xe tự hành

SLAM (Simultaneous Localization and Mapping) là một công nghệ tiên tiến cho phép xe tự hành định vị vị trí của mình đồng thời vẽ bản đồ môi trường xung quanh một cách tự động. Đây là nền tảng quan trọng cho việc tự động hóa và robot học. Công nghệ SLAM sử dụng Lidar cho phép xe tự hành hoạt động độc lập trong các môi trường không quen thuộc mà không cần dựa vào GPS hay bản đồ được xác định trước. Lidar (Light Detection and Ranging) phát ra tia laser để đo khoảng cách tới các vật thể, từ đó tạo nên bản đồ 3D chi tiết của môi trường. Công nghệ này được ứng dụng rộng rãi trong các lĩnh vực như xe tuyển, robot phục vụ, và hệ thống giám sát tự động.

1.1. Khái niệm cơ bản về SLAM

SLAM là viết tắt của Simultaneous Localization and Mapping, cho phép robot xác định vị trí thực tế trong không gian đồng thời xây dựng bản đồ của khu vực xung quanh. Quá trình này xảy ra song song, giúp robot tự động thích ứng với môi trường mới. Định vị (Localization) xác định vị trí chính xác của robot trong bản đồ, trong khi vẽ bản đồ (Mapping) tạo ra biểu diễn không gian của môi trường. Kết hợp hai quá trình này, robot có thể tự do di chuyển và khám phá khu vực mới mà không cần hỗ trợ bên ngoài.

1.2. Vai trò của Lidar trong định vị và vẽ bản đồ

Lidar RPLIDAR A1M8 là cảm biến đo khoảng cách bằng tia laser, cung cấp dữ liệu chính xác về môi trường 360 độ quanh xe tự hành. Lidar hoạt động bằng cách phát tia laser và đo thời gian phản hồi, cho phép định vị chính xác các vật thể. Dữ liệu từ Lidar được xử lý bởi các thuật toán SLAM để tạo bản đồ chi tiếtxác định vị trí robot trong bản đồ đó.

II. Hệ thống ROS Robot Operating System

ROS (Robot Operating System) là một nền tảng phần mềm linh hoạt được thiết kế đặc biệt cho phát triển robot và các ứng dụng tự động hóa. ROS cung cấp các công cụ và thư viện giúp đơn giản hóa việc xây dựng các hệ thống robot phức tạp. Hệ thống ROS cho phép các thành phần khác nhau của robot giao tiếp với nhau thông qua một kiến trúc pub-sub (publish-subscribe). ROS hỗ trợ nhiều ngôn ngữ lập trình như Python, C++, và có thể chạy trên nhiều hệ điều hành khác nhau. Với ROS, các nhà phát triển có thể tái sử dụng code, tích hợp các thư viện SLAM có sẵn như gmapping hoặc Cartographer để tạo bản đồ cho xe tự hành một cách hiệu quả.

2.1. Cấu trúc và thành phần của ROS

ROS được chia thành ba cấp độ: Filesystem Level quản lý các package và file; Computation Graph Level bao gồm các node, topic, và service; và Community Level cung cấp hỗ trợ từ cộng đồng. Node là các chương trình độc lập chạy song song, topic cho phép giao tiếp giữa các node thông qua publish-subscribe. Service cho phép giao tiếp request-reply giữa các thành phần. Parameter Server lưu trữ các tham số cấu hình toàn cục, giúp điều khiển xe tự hành linh hoạt.

2.2. Ứng dụng ROS trong SLAM

ROS tích hợp các thư viện SLAM mạnh mẽ như gmappingCartographer cho định vị và vẽ bản đồ. Robot State Publisher cung cấp thông tin về tình trạng robot, trong khi Twist to Motor chuyển đổi lệnh vận tốc thành điều khiển động cơ. ROS bag ghi lại dữ liệu từ cảm biến Lidar để tạo bản đồ chi tiết. tf (transform) quản lý các hệ tọa độ khác nhau, cho phép tính toán vị trí robot chính xác trong bản đồ môi trường.

III. Thiết kế phần cứng xe tự hành

Phần cứng xe tự hành bao gồm các thành phần chính như vi điều khiển ESP32, Raspberry Pi 4, cảm biến Lidar RPLIDAR A1M8, động cơ DC giảm tốc GA25, và mạch cầu H L298. Tổng quan phần cứng robot cho thấy một kiến trúc rõ ràng: Raspberry Pi 4 đóng vai trò máy tính chính chạy ROS để xử lý dữ liệu SLAMđịnh vị xe. Vi điều khiển ESP32 điều khiển các động cơ thông qua mạch cầu H L298. Cảm biến Lidar RPLIDAR A1M8 được kết nối với Raspberry Pi để cung cấp dữ liệu vẽ bản đồ môi trường trong thời gian thực. Pin sạc Li-on 18650 cung cấp nguồn điện cho toàn bộ hệ thống. Mạch hạ áp LM2596 điều chỉnh điện áp phù hợp cho các thiết bị.

3.1. Các thành phần chủ yếu của mô hình xe

Raspberry Pi 4 là bộ xử lý chính chạy hệ điều hành ROS để thực hiện thuật toán SLAM. Vi điều khiển ESP32 điều khiển các hoạt động của động cơ DC thông qua giao tiếp UART. Cảm biến Lidar RPLIDAR A1M8 phát tia laser 360 độ định vịtạo bản đồ môi trường xung quanh. Động cơ GA25 cung cấp lực kéo cho bánh xe. Bánh đa hướng cho phép xe di chuyển linh hoạt trong các hướng khác nhau, hỗ trợ định vị chính xác.

3.2. Sơ đồ nguyên lí và mạch điều khiển

Sơ đồ nguyên lí mạch điều khiển được thiết kế trên Kicad, cho phép giao tiếp UART giữa Raspberry PiESP32. Mạch cầu H L298 điều khiển hướng quay động cơ DC, nhận tín hiệu PWM từ vi điều khiển. Mạch hạ áp LM2596 chuyển đổi điện áp pin 18650 thành các mức điện áp khác nhau cho các thiết bị khác nhau. PCB được thi công dựa trên thiết kế, đảm bảo các kết nối điện chính xác cho xe tự hành định vị hiệu quả.

IV. Lập bản đồ môi trường và kết quả thực nghiệm

Lập bản đồ môi trường là bước quan trọng cuối cùng trong quá trình SLAM cho xe tự hành. Sau khi xe tự hành khám phá khu vực xung quanh bằng cảm biến Lidar, dữ liệu được xử lý bằng thuật toán SLAM để tạo bản đồ chi tiết của môi trường. Quá trình vẽ bản đồ sử dụng các thư viện như gmapping hoặc Cartographer chạy trên ROS, kết hợp với PID controller để điều khiển động cơ chính xác. Kết quả bản đồ hiển thị các vật thể cố định, tường, và các vật cản trong môi trường. Xe tự hành định vị vị trí của mình trong bản đồ này, cho phép lập kế hoạch đường đi tối ưu. Các kết quả thực nghiệm chứng minh hiệu quả của hệ thống SLAM được xây dựng, với độ chính xác định vị cao và bản đồ môi trường rõ ràng.

4.1. Quá trình lập bản đồ thực tế

Xe tự hành được điều khiển để khám phá từng khu vực của môi trường, cảm biến Lidar liên tục quét và thu thập dữ liệu khoảng cách. Thuật toán SLAM xử lý dữ liệu này để định vị chính xác vị trí hiện tại của xe và cập nhật bản đồ môi trường. Điều khiển PID đảm bảo xe tự hành theo dõi chính xác các lệnh vận tốc. Kết quả bản đồ được lưu dưới dạng grid occupancy, nơi mỗi ô vuông biểu thị liệu khu vực đó có được chiếm dụng hay không.

4.2. Đánh giá kết quả và hướng phát triển

Kết quả thực nghiệm cho thấy xe tự hành có khả năng định vị chính xác trong phạm vi ±5cm và tạo bản đồ môi trường với độ phân giải cao. Hệ thống SLAM hoạt động ổn định trong các không gian khép kín có đặc trưng rõ ràng. Hướng phát triển trong tương lai bao gồm cải thiện thuật toán SLAM để hoạt động ngoài trời, tích hợp GPS cho định vị tuyệt đối, và nâng cao tốc độ xử lý bằng GPU acceleration.

11/12/2025

Trích đoạn nội dung tài liệu

CHƯƠNG 1: GIỚI THIỆU Giới thiệu về đề tài nghiên cứu, mục tiêu của đề tài, giới hạn đề tài, đối tượng nghiên cứu. CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 3 Giới thiệu hệ điều hành ROS, khái niệm về các gói dữ liệu trong ROS cần sử dụng khi điều khiển robot, giới thiệu về các cách truyền dữ liệu và PID CHƯƠNG 3: NỘI DUNG VÀ THIẾT KẾ MÔ HÌNH Vẽ thiết kế phần cứng cho robot trên solidworks, các linh kiện cần dùng để xây dựng phần cứng robot CHƯƠNG 4: THIẾT KẾ CHƯƠNG TRÌNH ĐIỀU KHIỂN Xây dựng chương trình điều khiển cho robot, nghiên cứu thiết lập các thông số để cho việc tạo bản đồ ngoài thực tế CHƯƠNG 5: KẾT QUẢ THỰC NGHIỆM VÀ ĐÁNH GIÁ Trình bày kết quả từ thực nghiệm của robot của phần cứng và phần mềm. CHƯƠNG 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Kết luận và hướng phát triển 4 CHƯƠNG 2. Giới thiệu về hệ thống ROS 2.

Giới thiệu về hệ điều hành ROS Robot Operating System – ROS là hệ điều hành mã nguồn mở dành cho robot, là một framework được dùng rất rộng rãi trong lĩnh vực robotic với nhiều ưu điểm. Nó tạo ra một nền tảng phần mềm có thể hoạt động trên rất nhiều robot khác nhau mà không cần sự thay đổi quá nhiều trong chương trình phần mềm. ROS được bắt đầu với ý tưởng tạo ra sự thuận tiện là có thể chia sẻ dễ dàng và có thể được sử dụng lại trên những phần cứng robot khác nhau mà không cần phải xây dựng lại từ đầu. Việc xây dựng lại từ đầu cho một nền tảng robot riêng biệt sẽ tốn rất nhiều thời gian và công sức; bên cạnh đó, việc ứng dụng lại những thành quả của việc nghiên cứu trước đó để xây dựng những thuật toán cao hơn cũng gặp rất nhiều khó khăn.

Từ những lợi ích của ROS mang lại, những tổ chức nghiên cứu phát triển trên thế giới về ROS góp phần mang lại nguồn thông tin dồi dào về cả phần cứng lẫn phần mềm. Trên thế giới, cũng có rất nhiều công ty và tổ chức đã bắt đầu ứng dụng nền tảng này vào ứng dụng của họ để tạo ra những sản phẩm có chất lượng tốt hơn. Nhờ vào đó, hiện nay trên thế giới có rất nhiều thiết bị được hỗ trợ framework này. 5 Hình 1: Một số Robot được chế tạo trên nền tảng ROS 6 Hiện nay ROS chỉ chạy trên nền tảng Unix.

Phần mềm cho ROS chủ yếu được thử nghiệm trên Ubuntu và Mac OS X. Cho đến nay cộng đồng ROS cũng đã bắt đầu xây dựng cho Fedora, Gentoo, Arch Linux và các nền tảng Linux khác. ROS chưa hỗ trợ trên Microsoft Windows Hình 2: ROS2 Foxy Hệ điều hành ROS cùng với các công cụ và thư viện hỗ trợ thường được phát hành ở dạng ROS Distribution, tương tự như Linux distribution, cung cấp một bộ phần mềm để người dùng sử dụng, xây dựng và phát triển 2. Cấu trúc ROS: Kiến trúc ROS có ba cấp khái niệm: Filesystem, Computation Graph và Community.

Cấp thứ nhất – Filesystem: giải thích về các dạng hình thức bên trong, cấu trúc thư mục và các tập tin tối thiểu để ROS hoạt động. Nó chủ yếu là các tài nguyên của ROS và được thực hiện trên đĩa cứng. Cấp thứ hai – Computation Graph: nơi giao tiếp giữa các quá trình và hệ thống. Trong cấp khái niệm này, ta sẽ phải thiết lập hệ thống, quản lý các quá trình, giao tiếp giữa nhiều máy tính với nhau,.

Cấp thứ ba – Community: giải thích/ hướng dẫn các công cụ và các khái niệm để chia sẻ kiến thức, thuật toán chương trình từ bất kỳ nhà phát triển nào. Đây là cấp độ quan trọng vì nó ảnh hưởng đến sự phát triển lớn mạnh của cộng đồng ROS. ROS Filesystem Level: Filesystem chủ yếu là các nguồn tài nguyên ROS được thực thi trên bộ nhớ lưu trữ hệ thống, bao gồm: Packages: là đơn vị chính để tổ chức phần mềm trên ROS. Một package có thể chứa các nodes (ROS runtime processes), các thư viện đặc thù của ROS, các file cài đặt hoặc bất cứ file nào cho việc tổ chức.

Mục đích của package là để tạo ra tập hợp chương trình có kích thước nhỏ nhất để có thể dễ dàng sử dụng lại. Hình 3: Cấu trúc Package trong ROS Metapackages: là một package chuyên biệt, dùng để phục vụ cho việc thể hiện mối quan hệ một nhóm các package khác với nhau. Metapackage thường được dùng như nơi để giữ các tương thích ngược cho việc chuyển đổi sang rosbuild Stacks. Package Manifests: là một bảng mô tả về một package như tên, version, mô tả, thông tin license, … Manifests được quản lý bởi một file tên là manifests.

Stacks: khi chúng ta kết hợp các package với nhau với một vài chức năng thì được gọi là Stack. Trong ROS, có rất nhiều stack với công dụng khác nhau. Tương tự Package, nơi chứa thông tin về stack gọi là Stack Manifests. 8 Hình 4: Cấu trúc Stack trong ROS Mục tiêu của việc dùng Stack là để đơn giản hóa cho quá trình chia sẻ chương trình ứng dụng.

Message types: là mô tả của một thông điệp được gửi qua lại giữ các quá trình, được lưu trữ dưới dạng my_package/msg/MyMessageType. Message định nghĩa cấu trúc dữ liệu cho các thông điệp được gửi đi. Trong ROS, có rất nhiều loại message tiêu chuẩn phục vụ cho quá trình giao tiếp giữa các node với nhau. Ngoài ra, ta cũng có thể tự định nghĩa lại một kiểu message theo nhu cầu sử dụng của chúng ta.

Service types: là mô tả một service, được lưu trữ dưới dạng my_package/ msg/MyServiceType. Service định nghĩa cấu trúc dữ liệu request và response giữa các node trong ROS. Để gọi một service, ta cần phải sử dụng tên của service cùng với tên của package chứa service đó. Hình 5: Mô hình giao tiếp giữa các Node 2.

ROS Computation Graph Level Computation Graph là một mạng nơi các quy trình trong ROS được kết nối với nhau. Bất kỳ một node nào trong hệ thống cũng có thể truy cập vào mạng này, tương 9 tác với 10 các node khác, trao đổi các dữ liệu nằm trong mạng. Các khái niệm cơ bản của Computation Graph là nodes, Master, Parameter Server, messages, services và topics. Nodes: là một quy trình dùng để tính toán, điều khiển.

Một node có thể được tạo ra khi biên dịch một package thành công và trong cùng một package có thể tạo nhiều node. Khi một node muốn giao tiếp, tương tác các node khác thì bản thân node đó phải được kết nối với mạng ROS. Trong một hệ thống, mỗi node sẽ có một chức năng khác nhau. Để tạo ra sự dễ dàng trong quản lý và chuyên biệt hóa trong một chương trình, chúng ta nên tạo ra nhiều node với mỗi node có một chức năng riêng biệt; không nên để một node quản lý quá nhiều tác vụ sẽ gây khó khăn trong lập trình và bảo trì.

Master: ROS Master cung cấp một tên đăng ký và tra cứu phần còn lại của Computation Graph. Nếu không có ROS Master thì các node không thể tìm thấy nhau, trao đổi các message hay gọi các service. Parameter Server: Parameter Server cho phép dữ liệu được lưu trữ bởi các từ khóa trong một vị trí trung tâm. Nó là một phần của Master.

Với các biến này, nó có thể được cấu hình các node trong khi nó đang hoạt động hoặc để thay đổi hoat động của node. Messages: các node giao tiếp với nhau thông qua messages. Một message đơn giản là một cấu trúc dữ liệu, bao gồm các trường được định nghĩa như integer, floating point, boolean, … Messages có thể bao gồm các kiểu cấu trúc và mảng lồng nhau (giống kiểu struct trong C). Chúng ta cũng có thể tự phát triển kiểu message dựa trên các message chuẩn.

Topics: messages được định tuyến thông qua hệ thống vận chuyển, trong đó được phân loại thành publish và subscribe. Một node sẽ gửi một messages bằng việc publishing message đó lên một topic định trước. Topic chỉ là một cái tên để nhận dạng nội dung của message. Một node chỉ có thể subscribe một topic có tên và kiểu dữ liệu được khai báo.

Trong cùng một thời điểm, có thể nhiều publishers và subscribers cùng truy cập vô cùng một topic, và một node có thể publish và subscribe nhiều topic. Nhìn chung, publishers và subscriber sẽ không thể nhận thức được sự tồn tại của nhau. Ý tưởng xây dựng trao đổi thông tin ở ROS nhằm tách rời giữa nguồn tạo thông tin và 11 nơi sử dụng thông tin. 12 Tên của topic phải là duy nhất để tránh các vấn đề và xung đột giữa các topic có cùng tên với nhau.

Services: mô hình publish/subscribe thì rất linh hoạt trong việc giao tiếp nhưng đặc điểm là truyền được đa đối tượng và một chiều. Nhưng đôi khi lại không thích hợp cho việc truyền theo dạng request/reply, thường được dùng trong kiểu hệ thống phân bổ. Do đó, việc truyền nhận theo dạng request/reply được dùng thông qua services. Service được định nghĩa một cặp cấu trúc dữ liệu: một cho request và một cho reply.

Một node cung cấp một service thông qua một thuộc tính name, và một client sử dụng service bằng việc gửi một request message và đợi phản hồi. Hình 6: Quan hệ giữa các Node trong ROS 2. ROS Community Level Các khái niệm về ROS Community Level là các nguồn tài nguyên của ROS được cộng đồng người dùng trao đổi với nhau về phần mềm và kiến thức. Các nguồn tài nguyên đó là: Distributions: là tổng hợp các phiên bản của stack mà chúng ta có thể cài đặt.

ROS Distributions có vai trò tương tự như Linux Distributions. 13 Hình 7: Một số phiên bản ROS Respositories: là nguồn tài nguyên dựa trên cộng đồng mạng lưới các tổ chức khác nhau phát triển và phát hành những mô hình riêng của họ. The ROS Wiki: gồm nhiều tài liệu về ROS. Bất cứ ai cũng có thể chia sẻ tài liệu, cung cấp các bản cập nhật, viết các bài hướng dẫn, … bằng tài khoản mà họ đã đăng ký.

Áp dụng mô hình ROS Sử dụng ROS để phát triển xe tự hành trong nhà xưởng. Mô hình xe tự hành với khả năng tạo bản đồ và định vị vị trí, nó được chia thành các node khác nhau. Mỗi node đảm nhận một chức năng riêng biệt và có một địa chỉ. Khi các node gửi dữ liệu đến nhau sẽ kết nối với một Master.

Master sẽ thực hiện cho 2 node giao tiếp trao đổi dữ liệu với nhau thông qua một Topic 14 2. Key Teleop Node Key Teleop nhận thông tin điều khiển từ người dùng để chuyển thành vận tốc góc và vận tốc tuyến tính của robot. Đầu vào là thông tin điều khiển từ người dung, đầu ra là giá trị vận tốc tuyến tính v (m/s) và vận tốc góc w (m/s) Bảng 1. Bảng vận tốc điều khiển 2.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ