ros2 param — đọc và đổi parameter khi node đang chạy
Atlasbot · 17/8/2026 · 10 phút đọc
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_callbackhay không, không phải nghi ngờ lệnhsetsai.
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 |
|---|---|
| Type | Kiểu dữ liệu (double, bool, string...) |
| Read only | Có cho phép set lúc runtime hay không |
| Description | Mô tả (nếu node có khai khi declare_parameter) |
| Constraints | Giớ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
setbị từ chối do parameter làread_only— kiểm tra bằngros2 param describetrước khi nghi ngờ lỗi ở lệnhset— 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 dumpkhô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 loadghi đè 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 khiloadvà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.