Tổng quan về ROS: Kiến trúc, Khái niệm cốt lõi và Công cụ dòng lệnh

1. ROS là gì?

ROS = Cơ chế giao tiếp + Công cụ phát triển + Chức năng ứng dụng + Hệ sinh thái

Mục tiêu: Nâng cao khả năng tái sử dụng phần mềm trong lĩnh vực robot.

1.1 Cơ chế giao tiếp trong ROS

ROS sử dụng kiến trúc giao tiếp phân tán với tính liên kết lỏng lẻo (loosely coupled).

Khái niệm về coupling (tính liên kết)

Coupling là mức độ phụ thuộc lẫn nhau giữa các module. Trong kỹ thuật phần mềm, coupling càng cao thì chi phí bảo trì càng lớn. Vì vậy, khi thiết kế hệ thống, cần giảm thiểu coupling giữa các module để tăng tính bảo trì.

Tight coupling (liên kết chặt)

Kiến trúc tight coupling về cơ bản là mô hình Client/Server.

  • Ưu điểm: Kiến trúc đơn giản, thiết kế dễ dàng, thời gian phát triển ngắn, có thể nhanh chóng triển khai và ứng dụng.
  • Nhược điểm: Khi quy mô hệ thống mở rộng, độ ổn định giảm dần do:
    • Thao tác đồng bộ (synchronous) tiêu tốn nhiều tài nguyên mạng. Khoảng thời gian chờ giữa gửi và nhận dữ liệu là lãng phí.
    • Khả năng kiểm soát bảo mật kém vì máy chủ bị lộ trực tiếp với máy khách, dễ bị tấn công mạng.
    • Mã nguồn giữa các chương trình có sự phụ thuộc cao, khó module hóa.

Loose coupling (liên kết lỏng)

Kiến trúc loose coupling về cơ bản thêm một proxy (agent) vào giữa mô hình Client/Server, biến nó thành mô hình Client/Agent/Server (CAS).

  • Ưu điểm:
    • Khả năng xử lý đa nhiệm được cải thiện đáng kể.
    • Có cơ chế tự thích ứng tải (load adaptive): dựa trên môi trường hoạt động, kiến trúc loose coupling phân bổ tác vụ song song, tránh quá tải.
    • Hầu như loại bỏ được các cuộc tấn công mạng vào Server nhờ proxy cách ly và sàng lọc.
    • Thao tác bất đồng bộ (asynchronous) giảm tiêu tốn tài nguyên mạng và sự phụ thuộc giữa các thao tác.
    • Tăng tính bảo trì của hệ thống.

1.2 Công cụ phát triển trong ROS

  • Dòng lệnh & Trình biên dịch
  • Thư viện TF (Transform) - chuyển đổi hệ tọa độ
  • Bộ công cụ Qt (rqt)
  • Rviz - công cụ trực quan hóa
  • Gazebo - trình mô phỏng

1.3 Chức năng ứng dụng

  • Navigation (Điều hướng)
  • SLAM (Bản đồ hóa và định vị đồng thời)
  • MoveIt! (Lập kế hoạch chuyển động cho tay máy)

1.4 Hệ sinh thái ROS

2. Các khái niệm cốt lõi trong ROS

  • Cơ chế giao tiếp
  • Node (Nút) và Node Master (Bộ quản lý nút)
  • Topic (Chủ đề) giao tiếp
  • Service (Dịch vụ) giao tiếp
  • So sánh Topic và Service
  • Parameter (Tham số)
  • File System (Hệ thống tệp)

3. Sử dụng công cụ dòng lệnh ROS

Các lệnh thường dùng: rqt_graph, rostopic, rosservice, rosnode, rosparam, rosmsg, rossrv.

Ví dụ với rùa nhỏ (turtlesim):

Đầu tiên, khởi động ROS Master:

roscore

Sau đó, chạy bộ mô phỏng rùa:

rosrun turtlesim turtlesim_node

Cuối cùng, chạy node điều khiển rùa:

rosrun turtlesim turtle_teleop_key

Lưu ý: rosrun dùng để chạy một node cụ thể. Cú pháp: rosrun <package_name> <node_name>. Ví dụ, turtlesim là gói tính năng có sẵn để học tập. Nhấn Tab hai lần sau khi gõ tên gói để xem danh sách các node.

3.1 rqt_graph

Lệnh: rqt_graph

Chức năng: Hiển thị sơ đồ xử lý tính toán của hệ thống. Nó cho thấy các node và topic đang hoạt động, cũng như mối quan hệ giữa chúng.

3.2 rostopic

Lệnh: rostopic list

Chức năng: Liệt kê tất cả các topic đang hoạt động.

Ví dụ lệnh publish dữ liệu lên topic:

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 1.8"

Giải thích: pub là lệnh publish dữ liệu; /turtle1/cmd_vel là tên topic; nội dung sau đó là cấu trúc message (có thể dùng Tab để tự động hoàn thành). linear là vận tốc dài, angular là vận tốc góc.

Do dữ liệu chỉ được gửi một lần, rùa sẽ chỉ di chuyển trong thời gian ngắn. Để di chuyển liên tục, cần thiết lập tần suất gửi:

rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 1.8"

Tham số -r 10 thiết lập tần suất gửi là 10Hz.

3.3 rosservice

Lệnh: rosservice list

Chức năng: Liệt kê tất cả các service (dịch vụ) khả dụng.

Để gửi một yêu cầu (request) tới service, sử dụng lệnh rosservice call.

Ví dụ: Tạo một con rùa mới:

rosservice call /spawn "x: 3.0
y: 3.0
theta: 0.0
name: 'turtle2'"

Kết quả trả về (response) sẽ bao gồm tên của rùa mới được tạo.

3.4 rosnode

Lệnh: rosnode list

Chức năng: Liệt kê tất cả các node đang chạy. rosout là node mặc định được khởi động cùng roscore, dùng để thu thập thông tin log từ tất cả các node.

Để xem thông tin chi tiết về một node:

rosnode info /turtlesim

Lệnh này hiển thị các topic mà node đó publish/subscribe, service mà nó cung cấp, cũng như PID (Process Identification) của nó.

3.5 rosparam

Lệnh: rosparam

Chức năng: Thao tác với Parameter Server (một "cơ sở dữ liệu trung tâm" dạng key-value). Có thể thực hiện các thao tác CRUD (Create, Read, Update, Delete) trên tham số.

3.6 rosmsg

Lệnh: rosmsg show <message_type>

Chức năng: Hiển thị cấu trúc của một kiểu message ROS. Ví dụ: rosmsg show geometry_msgs/Twist.

3.7 rossrv

Lệnh: rossrv

Chức năng: Hiển thị cấu trúc của một kiểu service ROS. Ví dụ: rossrv show turtlesim/Spawn.

3.8 Công cụ bổ sung: rosbag

Để ghi lại toàn bộ dữ liệu topic vào một file bag:

rosbag record -a -O cmd_record

Giải thích: -a ghi lại tất cả topic; -O chỉ định tên file đầu ra (ở đây là cmd_record.bag).

Để phát lại dữ liệu đã ghi:

rosbag play cmd_record.bag

Lệnh này sẽ tái tạo lại chuyển động của rùa dựa trên dữ liệu đã ghi.

Thẻ: ROS turtlesim rostopic rosservice rosnode

Đăng vào ngày 24 tháng 5 lúc 09:02