CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1. Giới thiệu về Quadcopter Nguyên lí hoạt động Một chiếc Quadcopter bao gồm bốn động cơ cố định và mỗi động cơ sẽ gắn một cánh quạt. Khi cánh quạt quay sẽ tạo ra lực nâng giúp Quadcopter bay lên và di chuyển linh hoạt. Lực nâng sẽ phụ thuộc vào tốc độ của motor và kích thước của cánh quạt được sử dụng.
Một cặp motor - cánh quạt đối diện nhau sẽ quay cùng chiều kim đồng và cặp đối diện còn lại quay ngược chiều kim đồng hồ nhằm cân bằng moment xoắn được tạo ra bởi các cánh quạt trên khung. Và cả 4 cánh phải sinh ra cùng một lực đẩy bằng nhau khi Quadcopter cất cánh và hạ cánh.1 Cấu trúc cơ bản của Quadcopter Trong chuyển động sẽ có ba loại góc thay đổi trên Quadcopter, gồm Pitch (φ), Roll (θ), và Yaw (ψ) được thể hiện ở hình 1. Pitch - Đây là chuyển động của Quadcopter về phía trước hoặc phía sau. Góc Pitch được điều khiển bằng cách thay đổi tốc độ của phía sau (cánh quạt Sau Phải - Sau Trái) và phía trước (cánh quạt Trước Phải - Trước Trái), trong khi vẫn giữ được tổng lực đẩy.
Roll - Đây là chuyển động bay nghiêng của Quadcopter về một bên, hoặc sang trái hoặc phải. Góc Roll được điều khiển bằng cách thay đổi tốc độ giữa bên phải (cánh 2 Luan van quạt Trước-Phải và cánh quạt Sau-Phải) và bên trái (Trước-trái - Sau-Trái), sao cho tổng lực đẩy do 4 rotor tạo ra không thay đổi. Yaw - Đây là góc xoay của Quadcopter hoặc sang phải sang trái. Góc Yaw được điều khiển bằng cách thay đổi tốc độ giữa cặp Trước-Phải - Cánh quạt sau bên trái và cặp cánh quạt Trước-Trái - Sau-Phải sao cho tổng lực đẩy của bốn rotor vẫn không thay đổi.2 Các chuyển động cơ bản của Quadcopter 1.
Hệ điều hành của Robot (ROS) – Robot Operation System 1. Tổng quan ROS không chỉ cung cấp các dịch vụ hệ điều hành tiêu chuẩn (trừu tượng hóa phần cứng, quản lý tranh chấp, quản lý quy trình) mà còn cung cấp các chức năng cấp cao (các cuộc gọi không đồng bộ và đồng bộ, cơ sở dữ liệu tập trung, hệ thống cấu hình robot…). Nó là một hệ điều hành mã nguồn mở, dùng cho các ứng dụng trên robot. Cũng giống như các hệ điều hành cho PC, máy chủ hoặc thiết bị độc lập, ROS là một hệ điều hành đầy đủ cho robot dịch vụ.
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 3 Luan van trong robot và tự động hóa), Carmen (Robot Navigation Toolkit), Orca (các đối tượng cho robot)… 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. Hệ điều hành ROS cùng với các công cụ và thư viện hỗ trợ thường phát hành dưới dạng ROS Distribution, tương tự Linux Distribution, cung cấp những bộ phần mềm ổn định để người dùng sử dụng và phát triển thêm. ROS là một hệ điều hành mã nguồn mở, cho nên thu hút được sự quan tâm và đóng góp của cộng đồng trên khắp thế giới để xây dựng phát triển các dự án robotics, các công cụ và thư viện kèm theo.
Có rất nhiều mô hình robot đã được xây dựng thành công với hệ điều hành ROS này. Nao Peoplebot Baxter Qbo AscTec Lego NXT AR Drone Hình 1.3 Các Robot có sử dụng hệ thống ROS Hiện nay ROS chỉ chạy trên hệ điều hành Ubuntu và Mac OS X. Cộng đồng ROS đang thử nghiệm hỗ trợ cho các nền tảng khác như Windows, ARM Linux, Fedora và Gentoo. 4 Luan van Ư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ư hình 1. Required Engineering Core Research Worst Case With ROS 0 100 Hình 1.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 đủ.
- 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 trên thế giới. 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à: - Đồ họa – Visualization. - Nhận diện vật thể – Object recognition.
- Định hướng di động – Navigation. - Thao tác/Thu giữ – Manipulation/Grasping. Cấu trúc của ROS ROS có 3 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ả… 1. ROS Filesystem Level Filesystem là source code ROS được lưu trữ trên bộ nhớ hệ thống, nó gồm các khái niệm: Package: 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, 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) … Manifest: là bảng kê khai thông tin mô tả một packages, cung cấp các cơ sở dữ liệu về package đó, bao gồm điều kiện thực thi 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. Stacks: là tập hợp các packages phối hợp để thực hiện một chức năng cụ thể. Stack còn mô tả cách thức biên dịch ROS và thông tin về phiên bản ROS tương thích (gọi là distro, ví dụ như các phiên bản ROS hydro, groovy hay fuerte). Ví dụ pcl_ros là một stack chứa các package có chức năng cung cấp các bộ lọc cho point cloud như bọc lọc PassThrough (giới hạn point cloud theo các chiều x, y, z), VoxelGrid (lượng tử hóa point cloud thành các ô 3 chiều), Inlier/Outlier (tìm các điểm trong/ngoài một mặt theo các thông số của mặt đó trong point cloud).5 Mối quan hệ giữa Stack và các Packages Stack Manifests (.xml): cung cấp mô tả cơ sở dữ liệu về một stack, gồm điều kiện cho phép và thông tin về các stack dependency khác.
6 Luan van Dependency: là mô tả trong manifest của một package hoặc stack về các file system ngang cấp (stack hoặc package khác) mà stack hay package kế thừa.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. Ví dụ ta có mô tả của message PointCloud2 được mô tả trong file sensor_msgs/PointCloud2.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.launch): là các file .launch dùng để khởi tạo một tập hợp các node cùng lúc và gán giá trị cho các parameter và gán các topic liên kết các node bằng lệnh roslaunch. ROS Computation Graph Computation Graph hay còn được 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.
Node: là đơn vị thực hiện một tác vụ xử lý, 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 thường có nhiều node. Ví dụ một node điều motor, một node thực hiện tác vụ xử lý, một node nhận giá trị từ cảm biến.
Master: ROS Master cung cấp tên đăng ký và tìm kiếm đến phần còn lại của Computation Graph. Nhờ có Master, các nodes mới liên kết với nhau để trao đổi thọng tin hay còn gọi là services. Parameter Server: là một phần của Master, cho phép dữ liệu được lưu trữ trong một tại vị trí trung tâm và cho phép các node truy cứu tới.6 Mô tả cơ chế quản lý Parameter trên Master 7 Luan van Message: các nodes trao đổi 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, Boolean… và array (mảng) với kiểu chuẩn đều được hỗ trợ. Cùng với đó, message cũng có thể gồm các cấu trúc và các mảng lồng nhau như trong ngôn ngữ C. Các node khi nhận Message cần phải xác định queue đệm để xử lý dữ liệu đã nhận được. 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à subcribe (đăng ký nhận tin).
Một node gửi đi một message qua việc gửi thông tin tới một topic (chủ đề). Một topic có tên và kiểu message được xác định. Một node chỉ subscribe đến duy nhất topic có tên và kiểu dữ liệu đã được khai báo.