Atlas Robotics
Bài 7/9 · khoảng 8 phút

Launch file

Một hệ thống robot thật thường chạy đồng thời hàng chục node, mỗi node với tham số và cấu hình riêng — chạy từng cái bằng tay qua ros2 run nhanh chóng trở nên bất khả thi.

Launch file (viết bằng Python, dùng launch và launch_ros) mô tả cả hệ thống trong một chỗ: node nào cần chạy, tham số gì, remap topic ra sao, khởi động theo thứ tự nào — rồi chạy tất cả bằng một lệnh ros2 launch duy nhất. Đây cũng là cách đóng gói một cấu hình phức tạp (ví dụ "mô phỏng Atlas đầy đủ") thành một đơn vị tái sử dụng được, gọi lại từ launch file khác.

Khởi động không đồng thời

Launch gọi tất cả node gần như cùng lúc. Nhưng mỗi node cần thời gian để sẵn sàng. Nếu node B cần node A đã chạy xong, bạn phải đặt độ trễ. Mô hình dưới cho thấy điều gì xảy ra khi không đặt độ trễ.

Cấu trúc tối thiểu

from launch import LaunchDescription
from launch.actions import TimerAction
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(package='ros2_basics', executable='sensor_publisher'),
        TimerAction(period=2.0, actions=[
            Node(package='ros2_basics', executable='data_logger'),
        ]),
    ])
NodeMột tiến trình cần chạy
TimerActionChờ period giây rồi mới chạy nội dung bên trong
DeclareLaunchArgumentTham số truyền từ dòng lệnh
IncludeLaunchDescriptionGọi một launch file khác vào trong

Trong Atlas, atlas_bringup/launch/bringup.launch.py gọi nhiều launch file con qua IncludeLaunchDescription. Đọc nó từ trên xuống để thấy cả hệ thống được ghép như thế nào.

Thử ngay

Hai lệnh dưới đây là hai ví dụ ĐỘC LẬP (mỗi lệnh chạy mãi, giữ terminal) — thử lệnh này, Ctrl+C, rồi mới thử lệnh kia, không chạy cùng lúc trong một terminal:

# Ví dụ nhẹ: 2 node Python đơn giản, không cần Gazebo
ros2 launch ros2_basics demo.launch.py
# Ví dụ đầy đủ: mô phỏng Atlas trong Gazebo (nặng hơn, mở cửa sổ 3D)
ros2 launch atlas_bringup bringup.launch.py