chương I Trong chương này tác giả đã trình bày được các đặc điểm cơ bản của robot tự hành, ý nghĩa và phạm vi ứng dụng của robot tự hành trong cuộc sống, cũng như tính cấp thiết của đề tài.1 Robot Operation System – ROS và ứng dụng trong mô phỏng robot Phần này mô tả tổng quan về hệ điều hành ROS, các khái niệm, thành phần trong ROS cũng như ý nghĩa và tầm quan trọng của ROS trong việc mô phỏng robot 2.1 Tổng quan hệ điều hành ROS ROS là một hệ điều hành mã nguồn mở, dùng cho các ứng dụng trên robot. Về cơ bản, ROS cũng có những khả năng cần thiết cho một hệ điều hành cơ bản như khả năng thực hiện các tác vụ (task) song song, giao tiếp, trao đổi dữ liệu giữa các tác vụ bằng thông điệp và quản lý dữ liệu. Bên cạnh đó, để có thể ứng dụng trong lĩnh vực robotics, ROS đã phát triển các khái niệm, thư viện và công cụ chuyên biệt dành cho việc thu thập dữ liệu, xử lý, hiển thị và điều khiển. Ngoài ra, ROS còn có thể tương tác và kết hợp với nhiều framework khác như player (một software tool cho robot và các ứng dụng về cảm biến), Orocos (điều khiển thông minh trong robot và tự động hóa), Carmen (Robot Navigation Toolkit), Orca (các đối tượng cho robot) [7].
ROS có nhiều khái niệm dựa trên graph, biểu diễn mối quan hệ giữa các thành phần trong hệ điều hành như stack, package, node, topic, message, service, cũng như các khái niệm hệ tọa độ và phép chuyển đổi hệ tọa độ. Về khía cạnh trao đổi dữ liệu và giao tiếp, ROS có tích hợp sẵn một vài chuẩn 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 Parameter Server.1 mô tả sơ đồ truyền tin trong ROS Hình 2.1: Sơ đồ truyền tin trong ROS [1] ROS cũng được sử dụng rộng rãi trong các trường đại học và có rất nhiều đóng góp. ROS có một cộng đồng rộng lớn, có rất nhiều dự án được hỗ trợ, có một môi trường hệ thống thân thiện với hệ thống phát triển robot khác.2: Cộng đồng các trung tâm tham gia, đóng góp phát triển ROS trên thế giới [2] ROS hoàn toàn tương thích với hệ điều hành Linux, mà cụ thể ở đây là hệ điều hành Ubuntu. Tuy nhiên, ROS cũng được phát triển để tương thích với một số hệ điều hành khác như ARM, Debian, Gentoo, Mac OSX, Android, Window và Open Embeded Hình 2.3: Các hệ điều hành hỗ trợ ROS [2] Ưu điểm của ROS Xây dựng ứng dụng robotics trên nền ROS sẽ giảm đi một lượng đáng kể các công việc lập trình, thiết lập hệ thống, tận dụng nguồn tài nguyên mã nguồn mở vô cùng phong phú của cộng đồng.
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: 13 Hình 2.4: So sánh khối lượng công việc phải làm khi dùng và không dùng ROS 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. Một số đặc điểm giúp cho ROS trở thành một hệ điều hành nên được sử dụng khi nghiên cứu phát triển một ứng dụng robot là: - 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 đủ, phong phú - Vấn đề cốt lõi nhất khiến ROS trở lê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à đại học hàng đầu thế giới 2.2 Cấu trúc trong ROS ROS có 3 cấp khái niệm: Filesystem, Computation Graph và Community. Ngoài ra ROS còn có một số khái niệm cấp cao đặc trưng cho các ứng dụng robot như hệ tọa độ, phép chuyển đổi, thông điệp mô tả.
File ROS system Filesystem là nguồn tài nguyên source code ROS được lưu trữ trên bộ nhớ hệ thống, nó bao gồm các khái niệm: 14 Hình 2.5: Cấu trúc file hệ thống ROS [3] Package: Gói ứng dụng là đơn vị cơ bản trong tổ chức phần mềm của ROS, một gói chứa source code cho một tác vụ thực thi một chức năng đặc thù, danh mục các mã nguồn kế thừa (dependency, là các filesystem ngang cấp được đơn vị này dựa trên), các file cấu hình (như file CMakeList.txt chứa các lệnh hướng dẫn biên dịch, yêu cầu tạo file thực thi .bin; hay chọn version cho các thư viện) [3]. MetaPackage: Metapackage là một nhóm bao gồm nhiều các package. Ví dụ như trong ROS có một metapackage được gọi là navigation trong việc điều hướng robot tự hành. Nó lưu giữ thông tin các package và hỗ trợ trong việc cài đặt [3].
Manifest: là bảng kê khai thông tin mô tả một packages (manifest.xml), cung cấp các cơ sở dữ liệu về package đó, bao gồm điều kiện thực thi (license) và các dependency của package đó. Ngoài ra, manifests còn chứa những thông tin về đặc trưng của ngôn ngữ lập trình như cờ báo (flags) của trình biên dịch [3].msg): thông tin mô tả message, được lưu trữ trong file có dạng my_package/msg/MyMessageType.msg, định nghĩa các cấu trúc dữ liệu của messages được gửi trong ROS [3].srv): thông tin mô tả các services, được lưu trữ trong my_package/srv/MyServiceType.srv, đị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 [3] 2. ROS Computation Graph Computation Graph, tạm gọi là lược đồ tính toán, là mạng peer-to-peer các tác vụ khi thực thi của ROS, trong đó các dữ liệu được trao đổi và xử lý giữa các node. Các khái niệm cơ bản của computation graph của ROS là các node, Master, Parameter Sever, Message, Service, topics và bags [2].6: Sơ đồ ROS computation graph [3] Node: là đơn vị thực hiện một tác vụ tính toán, điều khiển.
Một node có thể được khởi tạo khi biên dịch thành công một package và có thể được khởi tạo nhiều node từ cùng một package. Một hệ thống điều khiển thường bao gồm nhiều node. Ví dụ một node điều khiển động cơ, một node thực hiện tác vụ định vị, một node vẽ quỹ đạo đường đi [3]. Master: ROS Master cung cấp tên đăng ký và tra cứu đến phần còn lại của Computation Graph.
Nếu không có Master, các nodes sẽ không tìm thấy nhau để trao đổi thông tin hay gọi services [3].7: Trao đổi thông tin giữa ROS Master và các Node [2] Message: các nodes giao tiếp với nhau thông qua các messages. Một message trong computation graph là dữ liệu cụ thể có cấu trúc như trong khai báo của file .msg tương ứng. Các kiểu dữ liệu chuẩn như integer, floating, point, Boolean… và mảng (array) với kiểu chuẩn đều được hỗ trợ. Bên cạnh đó, message cũng có thể bao gồm các cấu trúc và các mảng lồng nhau như cấu trúc trong ngôn ngữ C.
Các node khi nhận Message cần phải xác định kiểu đệm để xử lý dữ liệu nhận được [2]. Topic: Messages được định tuyến thông qua một hệ thống vận chuyển (transport system), trong đó phân loại thành hai công việc chính: publish (đăng tin) và 16 subcribe (đăng ký nhận tin). Một node gửi đi một message bằng việc đưa thông tin tới một topic (chủ đề). Một topic có tên và kiểu message xác định.
Một node chỉ subscribe đến đúng topic có tên và kiểu dữ liệu như đã khai báo. Một topic có thể có nhiều đối tượng đưa tin (publishers) và cũng có thể có nhiều đối tượng đăng ký nhận tin (subcribers). Mỗi node cũng có thể truyền tin trên nhiều topic khác nhau, cũng như có thể nhận tin từ nhiều topic khác nhau. Các nguồn truyền tin và các đối tượng nhận tin nhìn chung không cần phải biết về sự tồn tại của nhau.
Ý tưởng xây dựng ROS ở đây là tách biệt nguồn tạo ra thông tin với bộ phận sử dụng thông tin đó. Topic được xem như là một kênh truyền các thông điệp được định kiểu. Mỗi kênh truyền này có một tên riêng, và node nào cũng có thể kết nối với kênh này để gửi/nhận thông điệp, miễn là thông điệp cùng kiểu với topic đó [2].8: Trao đổi thông tin giữa các topic [2] Service: Mô hình truyền thông theo mẫu publish/subcribe như trình bày ở trên là một mô hình rất linh hoạt, tuy vậy, đặc điểm của nó là thông tin được truyền đa đối tượng, một chiều (many-to-many, one-way) đôi khi lại không phù hợp với các trường hợp cần tương tác theo kiểu request/reply (yêu cầu/đáp ứng), kiểu tương tác này thường gặp trong các hệ thống phân phối. Do vậy, cần có thêm một thành phần nữa trong ROS Graph, đó là service, nhằm thực hiện được các yêu cầu tương tác theo kiểu request/reply.
Service là một cặp cấu trúc thông điệp, một thông điệp để gửi yêu cầu và một thông điệp dành cho đáp ứng. Một node cung ứng một service với một thuộc tính name, một client sử dụng service đó bằng cách gửi đi một thông điệp yêu cầu (request message) rồi đợi phản hồi. Trong thư viện client của ROS, phương thức tương tác này thường được cung cấp như một hàm được gọi từ xa [2] 17 Hình 2.9: Mô hình truyền tin trong service [2] Bag: Là một định dạng để lưu trữ và phát lại dữ liệu từ ROS message. Bags là một cơ chế quan trọng để lưu dữ liệu.
Cách xây dựng hệ thống trong ROS cho phép nguồn cung cấp tin và đối tượng nhận tin có thể tách rời nhau, và mối liên hệ được thực hiện thông qua thuộc tính name. Name là thuộc tính đóng vai trò rất quan trọng trong ROS: các nodes, topics, services, và các parameters đều được đặt tên. Mỗi thư viện ROS Client đều hỗ trợ command-line để liên kết các tên này (remapping names), nhờ đó mà chương trình đã đuọc biên dịch có thể cấu hình lại được khi chạy ngay cả khi hoạt động trong một cấu trúc Computation Graph khác [2].10: Mô hình giao tiếp cơ bản trong ROS [3]. Ros Community Level ROS Community được định nghĩa là nguồn tài nguyên ROS mà các đơn vị nghiên cứu có thể trao đổi phần mềm và kiến thức.
Các nguồn tài nguyên bao gồm Distribution: ROS Distributions là bộ phiên bản các stack tương thích mà người dùng có thể cài đặt. Phiên bản mới nhất hiện nay là phiên bản thứ bảy Hydro Medusa.