Atlas Robotics
ROS2 cơ bảnCơ bản

ROS2 Workspace là gì?

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

ROS2 Workspace là gì?
Cấu trúc thư mục workspace ROS2

Trước khi viết node ROS2 đầu tiên, việc cần làm luôn là tạo một workspace — thư mục làm việc có cấu trúc chuẩn, nơi mã nguồn các package của bạn được đặt vào, biên dịch, và cài đặt để dùng được trong hệ thống.

Khái niệm chính

Một workspace ROS2 tối thiểu chỉ cần một thư mục src/ chứa mã nguồn các package. Sau khi build bằng công cụ colcon, ba thư mục khác được tự động sinh ra:

ros2_ws/
├── src/       ← mã nguồn package (bạn viết/clone vào đây)
├── build/     ← file trung gian sinh ra khi biên dịch
├── install/   ← package đã build xong, sẵn sàng dùng
└── log/       ← log của lần build gần nhất

Chỉ có src/ là thứ bạn thực sự chỉnh sửa bằng tay — build/, install/, log/ đều do colcon build tự sinh ra và có thể xoá đi build lại bất cứ lúc nào mà không mất mã nguồn.

Underlay và Overlay

ROS2 hệ thống (cài qua apt install ros-humble-desktop) cũng là một dạng workspace đã build sẵn, gọi là underlay. Workspace bạn tự tạo để phát triển package riêng gọi là overlay — khi "source" (nạp môi trường) cả hai theo đúng thứ tự, overlay sẽ ưu tiên đè lên underlay nếu có package trùng tên, cho phép vừa dùng package hệ thống có sẵn vừa phát triển package của riêng mình song song.

Tóm lại: Workspace không phải khái niệm ROS2 đặc thù khó hiểu — nó chỉ là một thư mục theo đúng quy ước để colcon biết đâu là mã nguồn cần build, và đâu là kết quả build ra để dùng.

Nguyên lý hoạt động

mkdir -p ~/ros2_ws/src        # Tạo workspace, chỉ cần thư mục src
cd ~/ros2_ws
colcon build                  # Build toàn bộ package trong src/
source install/setup.bash     # Nạp môi trường overlay vào shell hiện tại

Sau bước source, các package vừa build (và mọi node bên trong chúng) trở thành "nhìn thấy được" với ros2 run, ros2 launch trong đúng terminal đó.

Kiến thức kỹ thuật

Thông số

Một số tuỳ chọn colcon build hay dùng nhất trong thực tế phát triển:

Tuỳ chọnTác dụng
--symlink-installTạo symlink thay vì copy file khi cài đặt — sửa code Python không cần build lại
--packages-select <tên>Chỉ build đúng 1 hoặc vài package chỉ định, tiết kiệm thời gian
--parallel-workers NGiới hạn số package build song song, hữu ích khi máy yếu RAM

colcon cũng tự theo dõi đồ thị phụ thuộc giữa các package (dựa vào khai báo trong package.xml) — chạy lại colcon build sau khi chỉ sửa 1 package thường chỉ build lại đúng package đó và các package phụ thuộc nó, không build lại toàn bộ workspace từ đầu.

Ứng dụng thực tế

Trong một đội phát triển robot, mô hình nhiều lớp overlay thường dùng là: underlay hệ thống (ROS2 cài qua apt) → overlay chung (các package driver/thư viện dùng chung cho cả đội, build 1 lần, ít thay đổi) → overlay cá nhân (workspace riêng mỗi người đang phát triển tính năng mới). Cách tổ chức này cho phép mỗi thành viên chỉ cần build lại phần code họ đang sửa, không phải build lại toàn bộ hệ thống driver dùng chung mỗi lần thử nghiệm.

Ví dụ thực tế

$ colcon build --symlink-install
Output:
Starting >>> my_robot_msgs
Starting >>> my_robot_driver
Finished <<< my_robot_msgs [3.21s]
Starting >>> my_robot_navigation
Finished <<< my_robot_driver [8.45s]
Finished <<< my_robot_navigation [5.02s]

Summary: 3 packages finished [9.87s]

colcon tự nhận ra my_robot_navigation phụ thuộc my_robot_msgs (chứa định nghĩa message tuỳ chỉnh) nên build package đó trước — thứ tự build không cần khai báo tay, hoàn toàn suy ra từ khai báo <depend> trong package.xml của từng package.

Lỗi thường gặp

  • Quên source install/setup.bash sau mỗi terminal mới hoặc sau mỗi lần build lại — node build xong nhưng ros2 run báo "không tìm thấy package" vì terminal đó chưa nạp lại overlay mới nhất — đây là lỗi phổ biến nhất với người mới, luôn kiểm tra bước source trước khi nghi ngờ code sai.
  • Cùng tên package tồn tại ở nhiều workspace khác nhau — nếu overlay và underlay (hoặc 2 overlay chồng nhau) có package trùng tên, workspace source sau cùng sẽ "thắng" — dễ gây debug nhầm khi tưởng đang chạy code mới sửa nhưng thực ra vẫn chạy bản cũ từ workspace khác.
  • Không dọn build//install/ sau khi đổi cấu trúc package lớn — đổi tên file, đổi CMakeLists.txt đáng kể đôi khi để lại artifact cũ gây lỗi build khó hiểu — xoá build/ và install/ rồi build lại từ đầu (rm -rf build install log && colcon build) là cách chẩn đoán nhanh khi nghi ngờ lỗi build "vô lý".
  • Source nhầm underlay khác phiên bản ROS2 distro — VD: máy có cài cả Humble lẫn Jazzy, source nhầm setup.bash của distro khác với workspace đang dùng gây lỗi phụ thuộc phiên bản khó chẩn đoán.

Kết luận

Workspace chỉ là một thư mục theo quy ước src/build/install/log, nhưng hiểu đúng cơ chế underlay/overlay và luôn nhớ source sau mỗi lần build là kỹ năng nền tảng dùng hàng ngày khi phát triển với ROS2. Bài tiếp theo trong chuyên mục nói về Package — đơn vị tổ chức code nhỏ nhất mà workspace chứa đựng.

ROS2 Workspace là gì? — Atlasbot