Lập trình robot với ROS - Phần 4: Các khái niệm (tiếp theo)

21 Tháng Ba 2021

Thời gian qua có một vài bạn quan tâm đến series này đã nhắn tin với mình qua fanpage nên mình quyết định sẽ thực hiện series này nhiều hơn. Trong bài trước mình đã tìm hiểu về ROS Graph và roscore. Tiếp theo trong loạt bài này chúng ta sẽ tìm hiểu về catkin, Workspaces, và ROS Packages

Lập trình robot với ROS - Phần 4: Các khái niệm (tiếp theo)

Catkin, Workspaces, và ROS Packages

catkin là hệ thống build của ROS: tập hợp các công cụ mà ROS sử dụng để tạo ra các chương trình thực thi, thư viện, tập lệnh và giao diện mà những ngôn ngữ lập trình khác có thể sử dụng. Nếu bạn sử dụng C ++ để viết code ROS của mình, bạn cần biết một chút về catkin. Vì chúng ta sẽ sử dụng Python cho các ví dụ trong loạt bài tìm hiểu về ROS, chúng ta có thể hiểu rõ mà không cần đi sâu vào tất cả các chi tiết. Tuy nhiên, chúng ta sẽ phải tương tác với nó một chút, vì vậy chúng ta sẽ dành một chút thời gian để nói về cách hoạt động của nó. Nếu bạn muốn tìm hiểu thêm, trang catkin wiki là một nơi tốt để tìm hiểu. Nếu bạn muốn biết lý do tại sao ROS có hệ thống build riêng ngay từ đầu, có một cuộc thảo luận tốt trên trang wiki tổng quan về khái niệm catkin.

catkin

catkin bao gồm một tập hợp các macro CMake và các tập lệnh Python tùy chỉnh để cung cấp thêm chức năng cho quy trình làm việc CMake thông thường. CMake là một hệ thống build mã nguồn mở được sử dụng phổ biến. Nếu bạn muốn trở thành master về catkin, thì việc bạn biết một chút về CMake sẽ thực sự hữu ích. Tuy nhiên, đối với người dùng catkin thông thường hơn, tất cả những gì bạn thực sự cần biết là có hai tệp, CMakeLists.txt và package.xml, mà bạn cần thêm một số thông tin cụ thể để mọi thứ hoạt động bình thường. Sau đó, bạn gọi các công cụ catkin khác nhau để tạo các thư mục và tệp bạn sẽ cần khi lập trình cho rô bốt của mình. Những công cụ này sẽ được giới thiệu khi chúng ta cần chúng trong loạt bài này. Tuy nhiên, trước khi tiếp cận với điều này, chúng tôi cần giới thiệu với bạn về workspaces

Workspaces

Trước khi bắt đầu viết bất kỳ đoạn code ROS nào, bạn cần thiết lập workspaces (không gian làm việc) để code này tồn tại. Workspaces chỉ đơn giản là một tập hợp các thư mục trong đó tập hợp các code ROS liên quan tồn tại. Bạn có thể có nhiều workspaces ROS, nhưng bạn chỉ có thể làm việc trong một trong số chúng bất kỳ lúc nào. Cách đơn giản để nghĩ về điều này là bạn chỉ có thể thấy code nằm trong workspaces hiện tại của bạn.

Bây giờ, chúng ta sẽ tạo một không gian làm việc catkin và khởi tạo nó:

user@hostname$ mkdir -p ~/catkin_ws/src

user@hostname$ cd ~/catkin_ws/src

user@hostname$ catkin_init_workspace

ROS Packages

ROS Software được tổ chức thành các package, mỗi package chứa một số tổ hợp code, dữ liệu và tài liệu. Hệ sinh thái ROS bao gồm hàng nghìn gói có sẵn công được public trong các thư viện mã nguồn mở và hàng nghìn gói khác được các tổ chức phát triển. Các package nằm bên trong workspaces, trong thư mục src. Mỗi thư mục package phải bao gồm tệp CMakeLists.txt và tệp package.xml mô tả nội dung của package và cách catkin tương tác với nó. Bạn có thể tạo mới 1 package theo các câu lệnh sau:

user@hostname$ cd ~/catkin_ws/src

user@hostname$ catkin_create_pkg my_awesome_code rospy

Thao tác này tác động đến thư mục src (nơi các package hoạt động) và gọi catkin_create_pkg để tạo gói mới có tên my_awesome_code, điều này phụ thuộc vào gói rospy (đã tồn tại). Nếu package mới của bạn phụ thuộc vào các package hiện có khác, bạn cũng có thể liệt kê chúng trên dòng lệnh. Chúng ta sẽ nói về sự phụ thuộc của gói ở phần sau, vì vậy đừng lo lắng nếu điều đó không có ý nghĩa nhiều với bạn.

rosrun

Vì ROS có một cộng đồng lớn, phân tán, phần mềm của nó được tổ chức thành các package do các thành viên cộng đồng phát triển độc lập. Khái niệm về package trong ROS sẽ được mô tả chi tiết hơn trong các bài tiếp theo, nhưng một package có thể được coi như một tập hợp các tài nguyên được xây dựng và phân phối cùng nhau. Các package chỉ là các vị trí trong hệ thống tệp và bởi vì các nút ROS thường là các chương trình thực thi, người ta có thể cd theo cách thủ công xung quanh hệ thống tệp để khởi động tất cả các nút ROS quan tâm.

Ví dụ: chương trình talker nằm trong một package có tên là rospy_tutorials và các chương trình thực thi của nó được tìm thấy trong /opt/ros/indigo/share/rospy_tutorials. Tuy nhiên, việc theo đuổi những con đường dài này sẽ trở nên mệt mỏi trong các hệ thống tệp lớn, vì các nút có thể bị chôn vùi sâu trong các cấu trúc phân cấp thư mục lớn. Để tự động hóa tác vụ này, ROS cung cấp một tiện ích dòng lệnh có tên là rosrun để tìm kiếm một gói chương trình được yêu cầu và truyền cho nó bất kỳ tham số nào được cung cấp trên dòng lệnh. Cú pháp như sau:

user@hostname$ rosrun PACKAGE EXECUTABLE [ARGS]

Tóm tắt

Trong bài viết này mình đã giới thiệu về các khái niệm thứ hai trong ROS. Chúc bạn đọc vui vẻ

 

Bình luận