Trên thực tế, lập trình Robot và thiết kế có nghĩa dễ hiểu là thực hiện việc quản lý phần cứng bằng cách viết ra các trình điều khiển, quản lý bộ nhớ và các quy trình thực hiện, quản lý
GIỚI THIỆU
Tổng quan về hệ điều hành dành cho robot – ROS
Robot Operating System – ROS là hệ điều hành mã nguồn mở dành cho robot, là một framework được dùng rất rộng rãi trong lĩnh vực robotic với nhiều ưu điểm Nó tạo ra một nền tảng phần mềm có thể hoạt động trên rất nhiều robot khác nhau mà không cần sự thay đổi quá nhiều trong chương trình phần mềm
ROS được bắt đầu với ý tưởng tạo ra sự thuận tiện là có thể chia sẻ dễ dàng và có thể được sử dụng lại trên những phần cứng robot khác nhau mà không cần phải xây dựng lại từ đầu Việc xây dựng lại từ đầu cho một nền tảng robot riêng biệt sẽ tốn rất nhiều thời gian và công sức; bên cạnh đó, việc ứng dụng lại những thành quả của việc nghiên cứu trước đó để xây dựng những thuật toán cao hơn cũng gặp rất nhiều khó khăn
Từ những lợi ích của ROS mang lại, những tổ chức nghiên cứu phát triển trên thế giới về ROS góp phần mang lại nguồn thông tin dồi dào về cả phần cứng lẫn phần mềm Trên thế giới, cũng có rất nhiều công ty và tổ chức đã bắt đầu ứng dụng nền tảng này vào ứng dụng của họ để tạo ra những sản phẩm có chất lượng tốt hơn
Nhờ vào đó, hiện nay trên thế giới có rất nhiều thiết bị được hỗ trợ framework này
Hình 1.1 Một số robot được chế tạo trên nền tảng ROS ROS cung cấp, hỗ trợ các dịch vụ (services) như một hệ điều hành như phần cứng trừu tượng (hardware abtraction), kiểm soát các thiết bị cấp thấp (low-level device control), thực thi (implementation) các chức năng phổ biến, tin nhắn (message) qua lại giữa các quá trình, và quản lý gói Ngoài ra, nó cũng cung cấp nhiều công cụ và thư viện cho việc tham khảo, biên dịch, viết và chạy chương trình trên nhiều máy khác nhau
Việc chạy các chuỗi quy trình (processes) dựa trên ROS được thể hiện dưới kiến trúc graph, biểu diễn mối quan hệ của các thành phần trong hệ điều hành
ROS thực thi một số loại giao tiếp khác nhau như giao tiếp kiểu RPC dạng đồng bộ thông qua services, truyền dữ liệu bất đồng bộ thông qua topics và lưu trữ dữ liệu trên Parameter Server
ROS không phải là một framework thời gian thực, nhưng thông qua nó ta có thể viết chương trình thời gian thực
ROS là một hệ điều hành mã nguồn mở nên thu hút sự quan tâm của cộng đồng, đồng nghĩa với các công cụ, thư viện sẽ được xây dựng và phát triển phong phú Hiện nay, mô hình robot đã và đang được xây dựng trên hệ điều hành này với nhiều ứng dụng có tính thực tiễn cao
Hiện nay, ROS chỉ chạy trên nền tảng Unix Các phần mềm được chạy trên ROS chủ yếu được thử nghiệm trên hệ điều hành Ubuntu và Mac OS X Bên cạnh đó, thông qua cộng đồng này, nó còn đang được xây dựng để hỗ trợ cho các nền tảng khác như Fedora, Gentoo, Arch Linux và các nền tảng Linux khác
Chương trình cốt lõi của ROS, các công cụ tiện ích và các thư viện cũng được phát hành các phiên bản mới được gọi là ROS Distribution Những
Distribution này giống như Linux Distribution và đồng thời cung cấp chuỗi các phần mềm tương thích
Khi ROS được ứng dụng cho robotic thì khối lượng công việc kỹ thuật cơ bản sẽ giảm, bên cạnh đó khối lượng công việc dành cho xây dựng hệ thống tăng một cách đáng kể Do đó, chúng ta có thể dành thời gian cho việc nghiên cứu các ứng dụng chuyên sâu, đạt hàm lượng khoa học cao hơn trong dự án.
Thuật ngữ sử dụng trong ROS
- Master hoạt động như một máy chủ có chức năng kết nối giữa các node và" đường dẫn" trong truyền thông tin tức
- Câu lệnh để thi hành Master là:
- Master giao tiếp với các slavers bằng việc sử dụng XMLRPC ( XML- Remote Procedure Call), là một tính năng truyền tải dữ liệu của Wordpress Khi thao tác với master, nó sẽ được cấu hình với địa chỉ URI và một cổng được cấu hình trong ROS_MASTER_URI Mặc định, địa chỉ URI chính là địa chỉ IP của máy, còn cổng được đặt là 11311
- Node là một phần tử nhỏ nhất trong ROS, nó thường được xem như một chương trình để thực thi một chức năng hoặc một nhiệm vụ nào đó
- Để một node có thể hoạt động, nó phải có các thông tin cơ bản như: tên, kiểu message, địa chỉ URI, cổng Node có thể đóng vai trò như publisher, subscriber, service server hoặc service client tùy thuộc vào thông tin mà nó đăng ký lên master Các nodes có thể giao tiếp với nhau bằng cách sử dụng topics và services
- Node sử dụng XMLRPC khi giao tiếp với master và sử dụng XMLRCP hoặc TCPROS của giao thức TCP/IP khi giao tiếp với các nodes khác
- Package là một phần tử cơ bản trong ROS Trong package chứa các file cấu hình, các nodes và nó có chức năng thi hành các node đó
- Package chứa nhiều files cần thiết cho việc thi hành package, các gói, thư viện, các phụ thuộc
- Cách tạo ra một gói:
- Sau khi tạo xong một gói, cần phải catkin_make lại workspace:
- Là một package chuyên biệt, dùng để phục vụ cho việc thể hiện mối quan hệ một nhóm các package khác với nhau Metapackage thường được dùng như nơi để giữ các tương thích ngược cho việc chuyển đổi sang rosbuild Stacks
Ví dụ như: Navigation chứa 10 packages bao gồm ACML, DWA, EKF và map_server
➢Package Manifests: là một bảng mô tả về một package như tên, version, mô tả, thông tin license,… Manifests được quản lý bởi một file tên là manifests.xml
➢Stacks: khi chúng ta kết hợp các package với nhau với một vài chức năng thì được gọi là Stack Trong ROS, có rất nhiều stack với công dụng khác nhau Tương tự Package, nơi chứa thông tin về stack gọi là Stack Manifests
Mục tiêu của việc dùng Stack là để đơn giản hóa cho quá trình chia sẻ chương trình ứng dụng
➢Message types: là mô tả của một thông điệp được gửi qua lại giữ các quá trình, được lưu trữ dưới dạng my_package/msg/MyMessageType.msg Message định nghĩa cấu trúc dữ liệu cho các thông điệp được gửi đi Trong ROS, có rất nhiều loại message tiêu chuẩn phục vụ cho quá trình giao tiếp giữa các node với nhau Ngoài ra, ta cũng có thể tự định nghĩa lại một kiểu message theo nhu cầu sử dụng của chúng ta
➢Service types: là mô tả một service, được lưu trữ dưới dạng my_package- /msg/MyServiceType.srv Service định nghĩa cấu trúc dữ liệu request và response giữa các node trong ROS Để gọi một service, ta cần phải sử dụng tên của service cùng với tên của package chứa service đó
- Message chính là nội dung thông tin, dữ liệu trao đổi giữa các nodes Có rất nhiều kiểu message khác nhau được thực hiện trên các biến cơ bản như int, boolean, string
- Message là một "bó" dữ liệu để trao đổi giữa các nodes Các topics, service, action đều sử dụng message để giao tiếp Cấu trúc của một kiểu message như sau: fieldtype1 fieldname1 fieldtype2 fieldname2 fieldtype3 fieldname3
- Topic là chủ đề để các nodes có thể giao tiếp được với nhau Bởi vì trong một hệ thống của chúng ta có rất nhiều nodes, các nodes giao tiếp được với nhau nếu chúng có cùng topic
$ rostopic bw: display bandwidth used by topic
$ rostopic delay: display delay for topic which has header
$ rostopic echo: print messages to screen
$ rostopic find: find topics by type
$ rostopic hz: display publishing rate of topic
$ rostopic info: print information about active topic
$ rostopic list: print information about active topics
$ rostopic pub: publish data to topic
$ rostopic type: print topic type
- Đây là hai thuật ngữ dùng để cho biết đâu là node truyền thông tin và đâu là node nhận thông tin Một node vừa có thể truyền thông tin và vừa có thể nhận thông tin
Sử dụng Publish để truyền thông tin tới Master và Subcriber để nhận thông tin từ Master
- Service là một giao tiếp đồng bộ 2 chiều giữa dịch vụ máy khách (service client) và dịch vụ máy chủ (service server)
- Ros wiki hướng dẫn cụ thể cách viết một service client và service server
- Service server: là một server trong dịch vụ giao tiếp tin nhắn Nó tiếp nhận các yêu cầu từ dịch vụ máy khách và hồi đáp lại yêu cầu đó Nó được thi hành trong node mà nhận được và thi hành một yêu cầu
- Service client: là một client trong dịch vụ giao tiếp tin nhắn Nó gửi yêu cầu tới
8 server và sau đó nhận hồi đáp
- Action là một phương pháp giao tiếp đồng bộ hai chiều Nó được thực hiện khi mà quá trình phản hồi diến ra lâu, khi thực hiện action thì phản hồi sẽ được yêu cầu liên tục cho đến khi kết quả được trả về
- Cấu trúc của một file action giống với service Tuy nhiên, phần phản hồi dữ liệu cho sự hồi đáp ngay lập tức được thêm vào cùng với dữ liệu đích và kết quả, cái mà được mô tả như yêu cầu và hổi đáp ở service
- Action server: phụ trách việc nhận mục tiêu từ client sau đó đáp trả lại với phản hồi và kết quả
- Action client: phụ trách việc truyền mục tiêu tới server và nhận lại kết quả và phản hồi như là đầu vào từ action server
Trên ros.wiki.org hướng dẫn đầy đủ cách tạo và sử dụng Action server cũng như action client
Roslaunch được tạo ra để :
- Thi hành nhiều nodes một lúc Ví dụ: