CHƯƠNG 1. TỔNG QUAN ĐỀ TÀI 1.1 Định hướng cho đề tài Robot tự hành là robot có khả năng tự di chuyển, tự vận động theo một quỹ đạo được xác định trước hoặc chưa biết trước và được thực hiện một công việc được giao. Robot có thể hoạt động ở nhiều môi trường khác nhau như trên không, trên mặt đất, dưới nước hay thậm chí là ngoài vũ trụ. Đây là một hướng đi có tính ứng dụng rất lớn trên nhiều lĩnh vực từ dân sự, quân sự, vũ trụ và đang được nghiên cứu phát triển rộng rãi từ các công ty lớn, những phòng nghiên cứu ở khắp nơi thế giới.
Một trong những yếu tố quan trọng của robot phải đảm bảo về mặt năng lượng cho nó hoạt động đủ lâu trong thời gian thực hiện nhiệm vụ và có thể tự giải quyết các vấn đề nằm ngoài dự tính như khả năng nhận diện, phát hiện và tránh vật cản hoặc đi vào môi trường chưa biết. Robot tự hành được thiết kế dựa trên hệ điều hành dành cho robot (Robot Operating System, là nền tảng cho việc thiết kế phần mềm dành cho robot). Bằng việc ứng dụng ROS cho robot, ta có thể điều khiển robot một cách dễ dàng hơn so với việc chúng ta tự xây dựng thuật toán điều khiển cho robot, giúp cho robot có thể tự định vị và xử lý được các tình huống trong môi trường thực tế. Robot có thể tự định hướng và xác định vị trí hiện tại, ta cần phải mô phỏng lại bản đồ khoảng không gian di chuyển của robot – việc này ta gọi là mapping.
Từ việc có được bản đồ của khoảng không gian di chuyển, ta cần phải xác định vị trí của nó trong khoảng không gian ấy – việc này gọi là localization. Sau những công việc trên, ta sẽ xác định đường đi cho robot và điều khiển để robot đi theo đúng quỹ đạo của đường đi mà ta sẽ vẽ - việc này gọi là path-planning. Bài toán cho vấn đề trên thực hiện dựa trên bài toán Simultaneous Localization and Mapping – SLAM đang được nghiên cứu rộng rãi và tạo ra một cộng đồng phát triển rất mạnh. Để xây dựng một hệ thống hoàn thiện thì đây là một đề tài khá rộng và cần có những chuyên gia có kiến thức, kinh nghiệm để có thể phát triển một hệ thống ổn định, hoạt động trôi chảy trên nhiều điều kiện môi trường khác nhau.
Vì tính ứng dụng rộng lớn và tính phức tạp của vấn đề, luận văn chỉ ở mức tìm hiểu thuật toán và ứng dụng các thuật toán cơ bản để có thể xây dựng được mô hình hoạt động hoàn thiện.2 Mục tiêu của đề tài • Hiểu được cơ bản các thuật toán trong điều hướng cho xe tự hành dựa trên bản đồ đã dựng từ môi trường thực tế. • Thiết lập được một robot di động để nhận tín hiệu điều khiển và thực thi đúng với yêu cầu do phần mềm điều hướng điều khiển. • Ứng dụng được chương trình phần mềm trên máy tính và dùng cảm biến lidar A1 để xây dựng bản đồ và phát hiện vật cản. • Hiểu và thực hiện các quá trình để xây dựng một xe tự hành hoàn chỉnh từ công việc dựng bản đồ, hoạch định đường đi ngắn nhất, đi theo đường đi đã hoạch định đồng thời phát hiện và tránh các vật cản.3 Đối tượng và phạm vi nghiên cứu • Thiết xe tự hành có thể mang được máy tính cá nhân cảm biến lidar A1 và hoạt động trong môi trường trong nhà.
• Nghiên cứu thuật toán hoạch định đường đi ngắn nhất và di chuyển theo đường đi đã hoạch định. • Thiết lập và xây dựng ứng dụng dựa trên các gói phần mềm có sẵn trên cộng đồng ROS. Bên cạnh đó, tự xây dựng các gói phần mềm khác để phù hợp với yêu cầu bài toán của luận văn đưa ra.4 Các bước thực hiện đề tài • Tìm hiểu hệ điều hành ROS. • Nghiên cứu và mô phỏng quá trình xây dựng bản đồ và điều hướng trên bản đồ có sẵn thông qua Gazabo kết hợp với ROS.
• Thiết lập phần cứng di động cho hệ thống dùng vi điều khiển PIC32MK. • Thiết lập hệ điều hành Ubuntu, ROS trên máy tính cá nhân • Đọc cảm biến lidar A1 và giao tiếp với phần cứng di động • Tích hợp hệ thống để xây dựng bản đồ và điều hướng trên bản đồ đã dựng dựa trên hệ thống đã xây dựng. • Hiệu chỉnh các thông số của gói ứng dụng đã thiết lập trong môi trường ROS.1 Hệ điều hành ROS (Robot Operating System) Giới thiệu tổng quan hệ điều hành ROS ROS là gì? ROS là một hệ điều hành mã nguồn mở dùng cho các ứng dụng robot ,về cơ bản ROS có đặc trưng của một hệ điều hành như khả năng thực hiễn các tác vụ (task) song song, giao tiếp, trao đổi dữ liệu với nhau giữa các tác vụ, quản lý dữ liệu,… Hơn thế nữa, ROS có thể ứng dụng trong lĩnh vực robotics, ROS còn được phát triển riêng biệt về các thư viện, công cụ dành cho việc thu thập, xử lý, hiển thị, điều khiển,… ROS có thể kết hợp, tương tác với nhiều robot framework khác như Player, YARP, Orocos, CARMEN, Orca, Moos và Microsoft Robotics Studio.1 Biểu tượng của ROS ROS là hệ điều hành được phát triển chuyên dụng cho các ứng dụng điều khiển robot, với ROS ta có thể lập trình, biên dịch, chạy thực thi chương trình điều khiển qua nhiều máy tính và nhiều hệ thống robot khác nhau. Graph trong ROS có thể được hiểu như cây (tree graph) biểu diễn quan hệ giữa các thành phần trong hệ điều hành này như nodes, topics, messages, services v.v (các khái niệm này sẽ được giải thích rõ hơn trong mục 2.
Về mặt trao đổi dữ liệu và giao tiếp trong ROS: ROS tích hợp một vài chuẩn giao tiếp khác nhau, bao gồm giao tiếp đồng bộ theo chuẩn RPC qua các services, truyền dữ liệu bất đồng bộ qua topics và lưu trữ dữ liệu trên các Parameter Server. Ưu điểm của ROS: Xây dựng ứng dụng robotics trên nền tảng ROS sẽ giảm đi một lượng đáng kể các công việc lập trình, thiết kế hệ thống. Nhưng phần này có thể tận dụng nguồn tài nguyên mã nguồn mở vô cùng phong phú của cộng đồng. Theo [ROS5], ta có thể so sánh khối lượng công việc kỹ thuật cơ bản (required engineering) và khối lượng nghiên cứu khoa học nòng cốt (Core Research) như sau: Từ đó ta thấy rằng, với sự hiệu quả từ ROS, thời gian dành cho các công việc kỹ thuật cơ bản sẽ được giảm xuống rất đáng kể, và do đó, tăng thời gian cho công việc nghiên cứu chuyên sâu, hàm lượng khoa học đạt được trong đề tài sẽ lớn hơn nhiều lần.
3 Một số đặc điểm làm cho ROS là một hệ điều hành nên được sử dụng: • ROS là hệ điều hành mã nguồn mở. • Các tài liệu kỹ thuật, tài liệu hướng dẫn và các kênh hỗ trợ đầy đủ. Một trong những vấn đề cốt lõi nhất khiến ROS trở nên mạnh mẽ đó là tính cộng đồng rất lớn. Nguồn tài nguyên được cộng đồng đóng góp hầu như được xây dựng, phát triển từ những viện nghiên cứu và những trường đại học hàng đầu.
Những tài nguyên được cung cấp từ ROS thể hiện được sức mạnh trong các lĩnh vực robotics như là: ✓ Visualization ✓ Object recognition ✓ Navigation ✓ Manipulation/ grasping ✓ Plugging in Các thông tin khác ROS 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 hiện nay đã được hỗ trợ trên Microsoft Windows nhưng có phần chưa được tối ưu.
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. ROS là hệ điều hành mã nguồn mở, do đó thu hút được sự quan tâm đóng góp của cộng đồng để phát triển hệ thống cũng như các công cụ và thư viện kèm theo. Cộng đồng ROS tham gia đóng góp mã nguồn ngày càng phát triển, tuy vậy vẫn tập trung chủ yếu ở Hoa Kỳ, Tây Âu, ngoài ra còn có Nhật Bản. Mô hình ROS Mô hình ROS gồm có 3 tầng: Filesystem, Computation Graph, và Community.
Bên cạnh đó, ROS định nghĩa hai kiểu đặt tên (Names): Package Resource Names và Graph Resource Names. Tầng ROS Filesystem Filesystem là nguồn tài nguyên ROS được lưu trữ trên bộ nhớ hệ thống, bao gồm những thành phần như: 4 Hình 2.2 Cấu trúc Filesystem của ROS • Packages: gói dữ liệu là đơn vị chính trong tổ chức phần mềm của hệ điều hành ROS. Một package có thể chứa các lệnh thực thi của ROS (các nodes), một thư viện phụ thuộc ROS, tập dữ liệu, các file cấu hình, hoặc các dữ liệu cần thiết khác trong hệ thống, 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.3 Cấu trúc chung của ROS packages Cấu trúc điển hình của ROS packages : Hình 2.3 mô tả các file và thư mục cơ bản bên trong một package: - config: Tất cả các file cấu hình được sử dụng trong ROS packages được giữ trong thư mục này. Thư mục này được tạo bởi người dùng và cũng là thủ tục chung đặt tên cho thư mục config để giữ các tệp cấu hình trong đó.
- include / package_name: Thư mục này bao gồm các tiêu đề và thư viện cần sử dụng bên trong package. - scripts: Thư mục này lưu giữ các script Python thực thi. - src: Thư mục này lưu trữ các srouce code C ++. - launch: Thư mục này giữ các launch file được sử dụng để khởi chạy một hoặc nhiều node ROS.
5 - msg: Thư mục này chứa các định nghĩa message. - srv: Thư mục này chứa các định nghĩa service. - Action: Thư mục này chứa các định nghĩa hành động.xml: Đây là package manifest file của gói này.txt: Đây là build Cmake file của gói này. • Manifests: là bảng kê khai thông tin dữ liệu package (manifest.xml), cung cấp cơ sở dữ liệu về package đó, bao gồm điều kiện cho phép (license) và những yếu tố phụ thuộc của gói dữ liệu đó.
Manifest còn chứa thông tin về đặc trưng của ngôn ngữ lập trình ví dụ như các cờ báo (flags) của trình biên dịch. • 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ể, chẳng hạn như “navigation stack” là tập hợp các package dẫn hướng cho robot. Stack còn mô tả cách thức phần mềm ROS được xây dựng và chứa thông tin về phiên bản ROS đang sử dụng.