Chương 1 Giới thiệu: Giới thiệu đề tài đồ án, mục tiêu, phương pháp nghiên cứu, đối tượng và phạm vi nghiên cứu của đề tài. - Chương 2 Cơ sở lý thuyết: Trình bày lý thuyết những kiến thức được sử dụng trong đề tài. 6 - Chương 3 Nội dung thực hiện: Trình bày về các cách thức tiếp cận kiến thức về phần cứng và phần mềm được nghiên cứu. Đồng thời cũng mô tả chi tiết các giải pháp được áp dụng trong nghiên cứu.
- Chương 4 Thực nghiệm và đánh giá: Triển khai chạy thử sản phẩm, kiểm tra các chức năng và đưa ra đánh giá. - Chương 5 Kết luận và hướng phát triển: Kết luận về đề tài đồ án những kết quả đạt được, những ưu và nhược điểm, đồng thời đặt ra hướng phát triển cho sản phẩm trong tương lai. 7 CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 2.1 TỔNG QUAN VỀ ROS 2.1 Giới thiệu về ROS Trong lĩnh vực robot, ROS được xây dựng như một hệ thống đa dạng và chuyên sâu để lập trình và điều khiển robot. Được biểu diễn như một công cụ linh hoạt, ROS kết hợp đa dạng các phần mềm và công cụ hỗ trợ cho việc lập trình và điều khiển robot một cách hiệu quả.
Các thư viện, giao diện đồ họa, và hỗ trợ giao tiếp phần cứng trong ROS tỏ ra linh động, có khả năng thích nghi với nhiều yêu cầu khác nhau. Bên cạnh đó, ROS cung cấp các thư viện hỗ trợ cho việc thu thập dữ liệu từ cảm biến và các thuật toán lập trình điều khiển robot, giữ cho quá trình này trở nên mạnh mẽ và hiệu quả hơn. Về cơ bản, ROS vận hành với các tính năng quan trọng mà một hệ điều hành cần như khả năng thực hiện nhiều tác vụ song song, giao tiếp và chia sẻ dữ liệu giữa các tác vụ, và quản lý dữ liệu hiệu quả. Không chỉ vậy, ROS còn được mở rộng bằng các thư viện và công cụ chuyên biệt giúp vẽ đồ thị, thể hiện mô hình 3D của robot, cũng như là lưu trữ các dữ liệu.
Hệ thống này được tổ chức theo hình thức module, cho phép tập trung vào các mục tiêu rõ ràng như lập bản đồ hoặc định vị robot, trực tiếp hưởng lợi từ việc tái sử dụng các module đã phát triển trước đó để xây dựng một hệ thống robot toàn diện một cách linh hoạt và tiện ích.[2] Đề tài này chọn sử dụng ROS với khả năng triển khai việc điều khiển và lập bản đồ nhờ vào các tính năng sau: • ROS hỗ trợ nhiều module, cho phép tùy chỉnh hợp lý cho từng mục tiêu đề ra của việc phát triển robot. • Các module của ROS có khả năng thực hiện các công việc không phụ thuộc vào nhau và trao đổi thông tin thông qua các tệp dữ liệu, từ đó có thể hỗ trợ nhận biết và khắc phục lỗi cho các module riêng biệt. • ROS là một hệ thống mã nguồn mở và luôn được hỗ trợ phát triển liên tục bởi cộng đồng. Với sự tham gia của người dùng đông đảo, ROS ngày càng phong phú và đa 8 dạng về dữ liệu cũng như chức năng.
Bất kỳ lỗi nào được ghi nhận trong cộng đồng, sẽ được báo cáo và khắc phục ngay. Nhờ những đặc điểm và ưu điểm này, ROS trở thành một phương tiện không thể thiếu với các tính năng mạnh mẽ cho việc nâng cấp các hệ thống robot, nổi bật là các phạm trù về hoạt động yêu cầu cao về sự chính xác và khả năng tùy biến cao như vẽ bản đồ và định vị. ROS thực sự đã mang lại nhiều tiềm năng cho công cuộc nghiên cứu và ứng dụng trong thực tế.2 Cấu trúc mô hình ROS Cấu trúc của mô hình ROS được chia thành ba cấp độ khác nhau:[4] • Filesystem: Cấp độ này 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 cần thiết để ROS có thể hoạt động. Filesystem bao gồm các thành phần như gói (packages), các tập tin thực thi (executables), thư viện (libraries), thông số cấu hình (configuration files), và các tài liệu (documentation).
Đây là cấp độ cơ bản nhất, cung cấp nền tảng cho việc xây dựng và tổ chức các dự án ROS. • Computation Graph: Cấp độ này là nơi diễn ra giao tiếp giữa các quá trình trong hệ thống. Computation Graph bao gồm các thành phần như nodes, topics, services, và messages. Nodes là các quá trình độc lập có thể giao tiếp với nhau thông qua các topics (kênh truyền thông) và services (dịch vụ).
Tại đây, chúng ta thiết lập hệ thống, quản lý các quá trình và điều khiển việc giao tiếp giữa nhiều máy tính. Điều này cho phép các phần khác nhau của hệ thống có thể hoạt động đồng bộ và phối hợp chặt chẽ với nhau. • Community: Cấp độ này giải thích và hướng dẫn sử dụng các công cụ và khái niệm để chia sẻ kiến thức, thuật toán và chương trình từ bất kỳ nhà phát triển nào. Community bao gồm các diễn đàn, wiki, tài liệu hướng dẫn và các kho mã nguồn mở (repositories).
Đây là một cấp độ quan trọng vì nó không chỉ giúp cá nhân và nhóm phát triển có thể học hỏi và cải thiện kiến thức mà còn đóng góp vào sự phát triển mạnh mẽ của cộng đồng ROS. Tương tác và chia sẻ trong cộng đồng giúp giải quyết các vấn đề nhanh chóng và thúc đẩy sự tiến bộ trong lĩnh vực nghiên cứu và ứng dụng robot. Nhờ vào cấu trúc phân cấp rõ ràng này, ROS cung cấp một môi trường linh hoạt và hiệu quả cho việc phát triển và triển khai các hệ thống robot phức tạp. Từng cấp độ đóng vai trò quan trọng trong việc đảm bảo rằng các hệ thống robot được xây dựng trên 9 nền tảng vững chắc, có khả năng mở rộng và thích nghi với các yêu cầu và thách thức đa dạng trong thực tế.1 ROS Filesystem Hình 2.1: Mô hình ROS Filesystem Filesystem trong ROS là nguồn tài nguyên được lưu trữ trên bộ nhớ hệ thống và được bố trí hoạt động theo thứ tự từ trên xuống dưới.
Filesystem bao gồm các thành phần sau: • Packages: Đây là đơn vị cơ bản nhất trong ROS, chứa các lệnh thực thi của ROS (các nodes), các thư viện phụ thuộc, tập dữ liệu, các file cấu hình, và các dữ liệu cần thiết khác trong hệ thống. Packages giúp tổ chức và quản lý mã nguồn, tài liệu và các tài nguyên liên quan để phát triển các ứng dụng ROS.xml): Các tệp tin này cung cấp cơ sở dữ liệu về một package, bao gồm thông tin về giấy phép (license), các cờ biên dịch (build flags), và các thông số khác liên quan đến package đó. Manifests giúp quản lý và mô tả các đặc điểm và phụ thuộc của package. • Stacks: Stacks là tập hợp các packages phối hợp với nhau để thực hiện một chức năng cụ thể.
Ví dụ, Navigation stack bao gồm các packages cần thiết để thực hiện chức năng di chuyển của robot. Stacks giúp tổ chức các packages liên quan và cung cấp các giải pháp tích hợp cho các chức năng phức tạp. 10 • Stack Manifests (stack.xml): Tương tự như manifests cho packages, stack manifests cung cấp cơ sở dữ liệu về một stack, bao gồm thông tin về giấy phép và các thông số phụ thuộc vào những stack khác. Stack manifests giúp quản lý các stack và mô tả các đặc điểm và phụ thuộc của chúng.
• Message (msg): Messages là cấu trúc dữ liệu được sử dụng cho việc truyền nhận thông tin trong ROS. Chúng định nghĩa cách dữ liệu được định dạng và trao đổi giữa các nodes thông qua topics. Messages giúp các thành phần trong hệ thống ROS giao tiếp với nhau một cách nhất quán và có cấu trúc. • Service (srv): Services định nghĩa cấu trúc dữ liệu cho các lệnh truy cập (request) và các phản hồi (response) của các services trong ROS.
Services được sử dụng để thực hiện các tác vụ yêu cầu phản hồi tức thì, giúp nodes trong ROS có thể thực hiện các lệnh và nhận phản hồi một cách đồng bộ. Nhờ vào sự tổ chức và cấu trúc rõ ràng của Filesystem, ROS có thể quản lý và điều hành các tài nguyên hệ thống một cách hiệu quả. Mỗi thành phần trong Filesystem đóng vai trò quan trọng trong việc xây dựng và triển khai các ứng dụng robot phức tạp, đảm bảo rằng các phần của hệ thống có thể hoạt động đồng bộ và phối hợp chặt chẽ với nhau.2 ROS Computation Graph Computation Graph trong ROS là một mạng lưới phức tạp nơi các thành phần của hệ thống ROS được kết nối với nhau để thực hiện các nhiệm vụ cụ thể. Đây là nơi mà các quy trình ROS, gọi là nodes, có thể tương tác và giao tiếp với nhau một cách hiệu quả.
Bất kỳ node nào trong hệ thống đều có thể truy cập vào mạng này, cho phép chúng gửi và nhận dữ liệu từ các node khác. Computation Graph tạo ra một môi trường linh hoạt và mạnh mẽ, trong đó các node có thể thực hiện nhiều tác vụ song song, trao đổi thông tin và phối hợp hoạt động để hoàn thành các nhiệm vụ phức tạp. Các nodes có thể là các tiến trình chạy độc lập, nhưng khi được kết nối trong Computation Graph, chúng có thể chia sẻ dữ liệu, gọi các dịch vụ từ các nodes khác, và gửi nhận các thông điệp thông qua các topics, services, và actions. Điều này không chỉ giúp tối ưu hóa hiệu suất hệ thống mà còn tăng cường khả năng mở rộng và sửa lỗi, khi mỗi node có thể được phát triển, kiểm tra và thay thế một cách độc lập mà không ảnh hưởng đến toàn bộ hệ thống.2: Mô hình giao tiếp cơ bản trong ROS Các khái niệm cơ bản của Computation Graph trong ROS bao gồm nodes, Master, topics, Parameter Server và messages.
Mỗi khái niệm này đóng một vai trò quan trọng trong việc hình thành và vận hành hệ thống ROS. • Nodes: Nodes là các đơn vị thực hiện các lệnh tính toán và xử lý dữ liệu, giúp giao tiếp với các thành phần khác nhau của robot. Ví dụ, một robot có thể có các nodes như Laser Scanner để quét môi trường, Camera để thu thập hình ảnh, và nodes điều khiển vận tốc gửi lệnh đến các thiết bị điều khiển động cơ. Các nodes này có thể giao tiếp và tương tác với nhau thông qua Master.3: Giao tiếp giữa các node 12 • Master: Master cung cấp dịch vụ đăng ký và tra cứu tên cho các nodes, đóng vai trò kết nối các nodes với nhau.
Master là thành phần đầu tiên cần được khởi động trong hệ thống ROS, thông qua lệnh `roscore`. Sau khi Master khởi động, các nodes khác có thể được gọi và kết nối với nhau, cho phép chúng tương tác và trao đổi dữ liệu.