Atlas Robotics
ROS2 ToolsCơ bản

ros2 param — đọc và đổi parameter khi node đang chạy

Atlasbot · 17/8/2026 · 10 phút đọc

ros2 param — đọc và đổi parameter khi node đang chạy
ros2 param — đọc, ghi, sao lưu parameter

Bài Parameter trong ROS2 đã giải thích cách khai báo parameter trong code. Đây là bộ công cụ dòng lệnh thao tác với parameter đó sau khi node đã chạy — không cần sửa code hay restart.

Khái niệm chính

ros2 param list                          # node nào có parameter gì
ros2 param get /motor_node max_speed     # đọc giá trị hiện tại
ros2 param set /motor_node max_speed 1.2 # đổi giá trị ngay lập tức
ros2 param dump /motor_node              # xuất toàn bộ ra YAML
ros2 param load /motor_node config.yaml  # nạp lại từ file YAML

ros2 param set chỉ có tác dụng thật sự nếu node đã đăng ký add_on_set_parameters_callback() (xem bài Parameter) — với node không đăng ký callback này, giá trị parameter vẫn đổi trong hệ thống nhưng code node không hề hay biết để phản ứng, dễ gây hiểu lầm "đã set nhưng không có tác dụng gì".

Tóm lại: ros2 param set đổi giá trị ngay lập tức không cần restart node — nhưng chỉ hữu ích nếu node thực sự lắng nghe thay đổi đó trong code. Set xong không thấy hiệu ứng gì, việc đầu tiên cần kiểm tra là node có add_on_set_parameters_callback hay không, không phải nghi ngờ lệnh set sai.

Nguyên lý hoạt động

dump/load — sao lưu cấu hình đang chạy:

ros2 param dump /motor_node > motor_backup.yaml

Hữu ích khi đang tinh chỉnh nhiều parameter bằng set liên tục (ví dụ đang tune PID trực tiếp lúc robot chạy) và tìm được bộ giá trị ưng ý — dump xuất toàn bộ state hiện tại ra file YAML đúng định dạng dùng lại được trong launch file, không cần chép tay từng giá trị đã gõ qua set.

ros2 param load /motor_node motor_backup.yaml

Ngược lại, load nạp lại toàn bộ file YAML vào node đang chạy — nhanh hơn nhiều so với set từng parameter một khi cần khôi phục về một bộ cấu hình đã lưu trước đó.

Kiến thức kỹ thuật

Thông số

Lệnh bổ sung hữu ích để hiểu rõ ràng buộc của 1 parameter trước khi thao tác:

ros2 param describe /motor_node max_speed
Thông tin hiện raÝ nghĩa
TypeKiểu dữ liệu (double, bool, string...)
Read onlyCó cho phép set lúc runtime hay không
DescriptionMô tả (nếu node có khai khi declare_parameter)
ConstraintsGiới hạn giá trị (min/max, nếu có khai)

Ứng dụng thực tế

Quy trình tune PID trực tiếp trên robot thật là ứng dụng kinh điển nhất của ros2 param: vừa quan sát đồ thị tốc độ thực tế qua rqt_plot /odom, vừa liên tục gõ ros2 param set /motor_node kp 2.5 để thử các giá trị Kp/Ki/Kd khác nhau và xem phản ứng ngay lập tức mà không cần restart node giữa mỗi lần thử — tới khi tìm được bộ giá trị mượt nhất, chạy ros2 param dump một lần cuối để lấy đúng bộ giá trị đó, dán thẳng vào file YAML cấu hình cố định dùng trong launch file production, không cần nhớ và gõ tay lại từng con số đã thử qua nhiều lần set.

Ví dụ thực tế

$ ros2 param describe /motor_node max_speed
Output:
Parameter name: max_speed
  Type: double
  Description: Tốc độ tối đa cho phép (m/s)
  Constraints:
    Min value: 0.0
    Max value: 2.0
$ ros2 param set /motor_node max_speed 5.0
Output:
Setting parameter failed: Parameter 'max_speed' is out of range (max 2.0)

describe cho biết trước giới hạn hợp lệ (0.0 - 2.0), giải thích chính xác vì sao lệnh set giá trị 5.0 bị từ chối — không phải lỗi cú pháp lệnh, mà do vi phạm ràng buộc đã khai trong code node.

Lỗi thường gặp

  • set bị từ chối do parameter là read_only — kiểm tra bằng ros2 param describe trước khi nghi ngờ lỗi ở lệnh set — một số parameter (VD: địa chỉ phần cứng) cố tình khoá không cho đổi lúc runtime.
  • Gõ sai tên parameter (typo) khi set — ROS2 thường báo lỗi rõ ràng "parameter not declared", nhưng nếu không đọc kỹ output dễ nhầm tưởng lệnh đã chạy thành công.
  • File từ ros2 param dump không đúng cấu trúc khi dùng lại trong launch file — file dump ra đã có sẵn khung <tên_node>: ros__parameters: đúng chuẩn, nhưng nếu chỉnh sửa tay và làm sai thụt lề YAML, node sẽ không đọc được đúng giá trị khi launch.
  • ros2 param load ghi đè cả những parameter không định thay đổi — file YAML nạp vào áp dụng toàn bộ nội dung, nếu file đó có giá trị cũ không mong muốn ở các parameter khác, chúng cũng bị ghi đè theo — kiểm tra kỹ nội dung file trước khi load vào node đang chạy thật.

Kết luận

ros2 param là bộ công cụ hoàn chỉnh để đọc, đổi, sao lưu và khôi phục cấu hình node ngay khi đang chạy — đặc biệt giá trị trong quy trình tune PID trực tiếp trên phần cứng thật. Luôn dùng describe để hiểu ràng buộc trước khi set, và kiểm tra node có callback lắng nghe thay đổi hay không nếu set "không có tác dụng". Bài tiếp theo trong chuyên mục nói về ros2 bag — công cụ ghi lại toàn bộ dữ liệu topic để phát lại và phân tích sau này.

ros2 param — đọc và đổi parameter khi node đang chạy — Atlasbot