Đặt vấn đề Xã hội hiện đại, đời sống con ngƣời nâng cao. Việc robot tham gia vào đời sống con ngƣời không phải điều mới lạ. Robot phục vụ con ngƣời trong nhiều lĩnh vực từ hỗ trợ con ngƣời sản xuất đến các công việc mang tính dịch vụ nhƣ bƣng bê trong nhà hàng, đón tiếp khách hàng… Một trong những công việc có tính lặp đi lặp lại hàng ngày chính là việc dọn dẹp nhà cửa, cụ thể là việc hút bụi. Nếu có robot làm giúp công việc này, con ngƣời sẽ tiết kiệm đƣợc rất nhiều thời gian và công sức.
Với tính cấp thiết nhƣ vậy, tôi quyết định lựa chọn đề tài “Xây dựng chƣơng trình robot hút bụi iRobot trên môi trƣờng ROS” 1.1 Robot dịch vụ là gì? Robot dịch vụ là loại robot hỗ trợ, thực hiện thay con ngƣời trong các công việc; ví dụ nhƣ công việc có tính chất lặp đi lặp lại, các công việc trong nhà, công việc phải thực hiện ở những chỗ dơ bẩn, nguy hiểm [1],…. Những robot này thƣờng đƣợc điều khiển tự động bởi một hệ thống điều khiển tích hợp đƣợc cài đặt thủ công bên trong. Thuật ngữ “Robot dịch vụ” không có một định nghĩa chính xác. Liên đoàn Robot Quốc Tế (The International Federation of Robotics – IFR) [2] đã đề xuất một định nghĩa: Một robot dịch vụ là một robot mà hoạt động bán hoặc hoàn toàn tự động để thực hiện các dịch vụ hữu ích cho của con ngƣời và thiết bị, không bao gồm các hoạt động sản xuất.2 Các ứng dụng của robot dịch vụ Ứng dụng có thể có của robot chủ yếu là để hỗ trợ trong công việc của con ngƣời.
Hiện nay có các ứng dụng trong một số lĩnh vực nhƣ sau: - Ứng dụng trong công nghiệp: Robot dịch vụ công nghiệp có thể đƣợc sử dụng để thực hiện các nhiệm vụ đơn giản, chẳng hạn nhƣ kiểm tra hàn. Nó cũng có các nhiệm vụ phức tạp hơn, thực hiện trong các môi trƣờng khắc nghiệt, chẳng hạn nhƣ giúp đỡ trong việc tháo dỡ các nhà máy điện hạt nhân. Robot cũng có thể đƣợc dùng để thực hiện những hành động lặp đi lặp lại nhƣ lắp ráp, thực hiện các công việc tự động hóa khác. Nhƣng robot đƣợc sử dụng trong công nghiệp đƣợc gọi là "Robot công nghiệp".
1 - Ứng dụng trong các nhà hàng, quán bar, khách sạn: Hiện nay, nhiều nhà hàng, quán bar, khách sạn đã sử dụng robot dịch vụ. Các công việc mà robot có thể thực hiện ví dụ nhƣ dọn dẹp, pha chế các đồ uống phức tạp, hay thậm chí là tiếp đón khách hàng. - Ứng dụng trong gia đình: Robot trong gia đình thực hiện nhiệm vụ mà con ngƣời thƣờng xuyên thực hiện xung quanh nhà nhƣ lau chùi sàn nhà, cắt cỏ, dọn dẹp hồ bơi. Chúng cũng có thể đóng vai trò của một ngƣời quản gia trong gia đình.
- Ứng dụng trong khoa học: Hệ thống robot thực hiện nhiều chức năng nhƣ tiến hành các thao tác lặp đi lặp lại trong nghiên cứu. Những robot tự động cũng có thể thực hiện các nhiệm vụ khoa học mà con ngƣời khó hoặc không thể thực hiện, ví dụ nhƣ các vùng biển sâu, không gian bên ngoài Trái Đất.1 Một ứng dụng của robot dịch vụ 1.3 Một số robot hút bụi thƣơng mại hiện có trên thị trƣờng Hiện nay trên thị trƣờng cũng có rất nhiều loại robot hút bụi khác nhau về giá cả, mẫu mã, khả năng hút bụi, chức năng, cấu tạo phần cứng… Tuy nhiên ở đây, trong phạm vi nghiên cứu, tôi muốn phân tích sự khác nhau về hƣớng tiếp cận bài toán bao phủ. Các robot này đều có chung một nhiệm vụ là hút bụi tất cả các vị trí trong phòng. Trên thị trƣờng có một số mẫu robot nhƣ iLife V5S Pro, Eufy Robovac 11S, Ecovacs N79s [3]… dựa vào cảm biến để tránh vật cản, điều khiển robot đi theo hƣớng khác, đƣờng đi do robot này sinh ra là hoàn toàn ngẫu nhiên, do đó tỉ lệ lặp lại cao, tỉ lệ bỏ sót lớn.
Hƣớng tiếp cận thứ hai là quét bản đồ phạm vi cần quét sau đó cho robot di chuyển trên bản đồ này, đây là hƣớng tiếp cận phổ biến nhất áp dụng trên một số 2 mẫu nhƣ ILIFE X750, X787, V8s [3]… Hƣớng tiếp cận này cũng là hƣớng tiếp cận tác giả sử dụng để xây dựng hệ thống iRobot. Hƣớng tiếp cận thứ ba là điều hƣớng với camera trực quan. Robot đƣợc xây dựng trên hƣớng tiếp cận này là những robot khá hiện đại với trang bị nhiều cảm biến, sử dụng thuật toán VSLAM (Visual Simultaneous Location And Mapping). Các robot này không cần quét bản đồ trƣớc, có khả năng tạo bản đồ ngay trong khi dọn dẹp nhờ đó hiệu quả công việc tăng đáng kể.
Một số mẫu robot thuộc loại này nhƣ Roomba i7, Roomba S9, Roomba 960, 980, X800 [3]… 3 1.2 Giới thiệu một số khái niệm 1.1 Giới thiệu về ROS a, Khái lƣợc về ROS ROS (Robot Operating System) là một tập hợp các framework cung cấp công cụ và thƣ viện giúp các nhà phát triển phần mềm có thể tạo đƣợc ứng dụng robot. ROS cung cấp trừu tƣợng hóa phần cứng, các trình điều khiến mức thấp, truyền thông điệp, quản lý các gói… [4] Các tiến trình trong ROS đƣợc triển khai theo cấu trúc đồ thị với mỗi tiến trình ứng với từng node có thể nhận, thông báo và kết hợp các cảm biến, bộ điều khiển, định mức hiện trạng, quy hoạch, bộ truyền động cùng nhiều thông điệp khác. Khả năng phản ứng nhanh và độ trễ thấp là những yêu cầu quan trọng với ứng dụng robot nhƣng cho dù vẫn có thể tƣơng tác với một số đoạn mã xử lý tức thời, bản thân ROS không phải là hệ điều hành thời gian thực. Các phần mềm trong ROS đƣợc chia làm 3 nhóm: - Các công cụ độc lập với ngôn ngữ lập trình và nền tảng phần cứng dùng để xây dựng và phân phối những phần mềm cơ bản cho ROS.
- Bộ thƣ viện áp dụng cho bên client để triển khai. - Các gói chứa mã hỗ trợ dùng cho một hoặc nhiều thƣ viện. Các công cụ và thƣ viện chính viết bằng C++, Python hoặc LISP, đƣợc phát hành theo bản quyền của BSD và đều là mã nguồn mở, miễn phí cho sử dụng trong nghiên cứu hoặc ngay cả với mục đích thƣơng mại. Đa phần những gói công cụ còn lại phát hành dƣới nhiều bản quyền mã nguồn mở đa dạng, đóng vai trò triển khai các chức năng và ứng dụng dùng chung nhƣ trình điều khiển phần cứng, mô hình hóa robot, phân loại dữ liệu, quy hoạch, nhận thức, lập bản đồ, định vị đồng thời hay giả lập cùng nhiều giải thuật khác.
Những thƣ viện chính của ROS thiết kế hƣớng tới hệ thống tƣơng tự UNIX, chủ yếu vì phải phụ thuộc nhiều vào lƣợng lớn những phần mềm mã nguồn mở. Một trong số các hệ điều hành đƣợc hỗ trợ có thể kể đến nhƣ là Ubuntu Linux, còn nhiều hệ điều hành khác chẳng hạn Fedora, Mac OS X hay Microsoft Windows vẫn đang thử nghiệm. Trong khi đó thƣ viện rosjava viết bằng Java có thể cài đặt trên mọi nền tảng. 4 b, Các thành phần kiến trúc trong ROS Hình 1.2 Các thành phần kiến trúc trong ROS [4] Kiến trúc chung của ROS đƣợc phân chia thành 3 tầng: - File System Level: Là tầng tổ chức hệ thống file của ROS nhƣ cấu trúc thƣ mục, các tài nguyên.
- Computation Graph Level: Là nơi xử lý giao tiếp, dữ liệu giữa các tiến trình trong một hệ thống hoặc giữa các hệ thống với nhau. - Community Level: Là nơi cho phép các thành viên trong cộng đồng sử dụng ROS chia sẻ kinh nghiệm, hiểu biết, thuật toán. thông qua các module mã nguồn mở của mình. 5 - FileSystem Level Hình 1.3 Cấu trúc tầng FileSystem level [4] Package - Gói là đơn vị tổ chức mã phần mềm trong ROS.
Mỗi gói có thể chứa thƣ viện, tập tin thực thi (executables), tập tip kịch bản (scripts), hoặc những tập tin khác.xml): Manifest là một gói mô tả chứa đựng thông tin. Nó sẽ cung cấp thông tin về sự phụ thuộc giữa các gói và lƣu trữ thông tin (meta information) về gói đó nhƣ phiên bản, bảo trì, like version, maintainer, giấy phép, … ROS cung cấp hai công cụ có thể tạo gói tin đó là catkin và rosbuild. Cách tạo gói tin có thể xem tại: http://wiki.org/vn/ROS/Tutorials/CreatingPackage 6 Hình 1.4 Cấu trúc package của ROS sử dụng catkin [4] Message types Định nghĩa các message, đƣợc lƣu tại: my_package/msg/my_message.msg Định nghĩa dữ liệu gửi trong ROS, thành phần giao tiếp của ROS. Service types Mô tả dịch vụ, đƣợc lƣu tại: my_package/srv/my_service.srv Khai báo cấu trúc dữ liệu của request và response trong dịch vụ của ROS.
Code Source code của một package trong ROS đƣợc lƣu trong thƣ mục src bên trong thƣ mục chứa package, có thể tạo nhiều thƣ mục bên trong thƣ mục src này để tiện quản lý source code theo mục đích sử dụng. Các file script sẽ đƣợc lƣu riêng trong thƣ mục scripts. Ngoài bên trong thƣ mục chứa package còn có thêm thƣ mục include, bên trong thƣ mục này là các thƣ mục tƣơng ứng với các package_name chứa các header của các package mà package đang xây dựng cần dùng đến giống nhƣ khái niệm sử dụng thƣ viện(library) của ngôn ngữ C. Stacks Stack đƣợc sử dụng để đơn giản quá trình chia sẻ code.
Một stack là một thƣ mục chứa một hoặc nhiều package. Bên trong stack cũng chứa một file 7 manifest gọi là stack manifest cung cấp mô tả cơ sở dữ liệu về một stack, bao gồm điều kiện cho phép (license) và thông tin về các stack/package khác mà stack kế thừa.5 Mối liên hệ giữa Stack và Package [4] - Computation Graph Level Hình 1.6 Các thành phần trong tầng Computation Graph [4] Node Node (nút) là một tập tin thực thi, nó dùng ROS để giao tiếp với các nút khác. Có thể nói node là tế bào cấu tạo nên chƣơng trình ROS. Master 8 Là một nút, nó có nhiệm vụ giúp các nút có thể tìm thấy nhau.
Hay nói cách khác, nó quản lý các nút. Master cung cấp tên đăng ký và tra cứu đến các node khác. 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.7 Mô hình quản lý của master với các node [4] Parameter server Parameter Server là một phần của Master, cho phép dữ liệu về các node đƣợc lƣu trữ trong một vị trí trung tâm và cho phép các node truy cập đến để tìm kiếm thông tin. Messages Là một loại dữ liệu để các nút có thể dùng thông qua ROS để giao tiếp với các nút khác.Trong ROS, tệp tin tin nhắn là các tập tin văn bản đơn giản mô tả các trƣờng của một thông điệp ROS.
Các kiểu dữ liệu trong tin nhắn là các kiểu dữ liệu nguyên thủy.