Cấu trúc package
Package là đơn vị đóng gói và phân phối nhỏ nhất của ROS 2: code, launch file, file cấu hình (YAML), và một file metadata package.xml khai báo tên, phiên bản, dependency, đi cùng nhau trong một thư mục.
Mỗi package build và cài đặt độc lập qua colcon, và có thể được package khác khai báo làm dependency (như atlas_control phụ thuộc atlas_description) mà không cần biết bên trong cài đặt ra sao — chỉ cần biết nó cung cấp executable, launch file hay interface gì. ROS 2 có 2 kiểu package chính: ament_python (code Python thuần, như ros2_basics) và ament_cmake (C++ hoặc hỗn hợp); bài này tập trung vào ament_python vì đó là loại bạn viết nhiều nhất khi mới học.
Cây thư mục của ros2_basics
Bấm vào tên thư mục để mở/đóng, giống panel Explorer trong VS Code:
ros2_basics/
- package.xml # tên, phiên bản, phụ thuộc
- setup.py # khai báo executable (console_scripts)
- setup.cfg
-
resource/
- ros2_basics # file rỗng, chỉ để đánh dấu cho ament
-
ros2_basics/ — code Python thật
- sensor_publisher.py
- data_logger.py
-
launch/
- demo.launch.py
Điểm then chốt: executable phải khai báo
Viết xong file Python chưa đủ. ros2 run chỉ tìm được thứ có khai báo trong setup.py:
entry_points={
'console_scripts': [
'sensor_publisher = ros2_basics.sensor_publisher:main',
],
},
Thêm node mới mà quên dòng này, ros2 run sẽ báo không tìm thấy executable, dù file vẫn nằm đó. Đây là lỗi rất hay gặp khi mới bắt đầu.
Quy trình làm việc
cd ~/atlas_sim
colcon build --packages-select ros2_basics
source install/setup.bash
ros2 run ros2_basics sensor_publisher
colcon build đưa code vào thư mục install/. Lệnh source install/setup.bash cho terminal biết package nằm ở đâu. Quên bước source là lỗi thường gặp nhất.