如果你建立了一個 ROS 2 套件,但在執行 ros2 pkg list
時卻 找不到你自己的套件,
這通常是因為以下幾個常見錯誤:
🧱 1. 沒有正確建構 (colcon build
)
即使你在 src/
底下放好了套件,如果沒有跑 colcon build
且 source install/setup.bash
,ROS 2 是無法辨識該套件的。
🔍 檢查方式:
bashcd ~/ros2_ws
colcon build
source install/setup.bash
📦 2. 缺少 package.xml
或內容錯誤
ROS 2 認定某個資料夾是套件的最根本依據是它是否含有有效的 package.xml
。
常見錯誤包含:
-
沒有
package.xml
-
<name>
標籤缺失或與資料夾名稱不一致 -
XML 語法錯誤(漏了
</...>
、或錯誤引號)
✅ 正確範例:
xml<?xml version="1.0"?>
<package format="3">
<name>my_robot_pkg</name>
<version>0.0.1</version>
<description>My robot package</description>
<maintainer email="you@example.com">Your Name</maintainer>
<license>Apache License 2.0</license>
<buildtool_depend>ament_cmake</buildtool_depend>
</package>
📁 3. 缺少 resource/<package_name>
檔案
這個小細節 常被手動建立者忽略。
在 ROS 2 中,ament_index
需要 resource/套件名
的空檔案來識別。
✅ 修正方式:
bashmkdir -p resource
touch resource/my_robot_pkg
⚙️ 4. setup.py
/ CMakeLists.txt
缺失或格式錯誤
如果你用的是:
-
ament_python
→ 要有setup.py
,setup.cfg
-
ament_cmake
→ 要有CMakeLists.txt
少了這些檔案,即使 package.xml
存在也會被跳過。
🚫 5. 套件放錯位置(不在 src/
目錄下)
ROS 2 的 colcon build
只會在你工作區中指定的 src/
目錄中尋找套件。
✅ 正確結構:
cssros2_ws/
├── src/
│ └── my_robot_pkg/
│ └── package.xml
如果你誤放到 ros2_ws/
根目錄下,會完全被忽略。
❗ 6. 沒有正確 source install/setup.bash
即使 build 成功,若你沒有下列指令,ROS 環境不會知道有哪些套件可以用:
bashsource ~/ros2_ws/install/setup.bash
💡 Tip: 可以加進
~/.bashrc
自動執行。
🔍 7. 使用不同 Terminal 或 Workspace 忘記切換
-
你在 A 終端機 build,但在 B 終端沒
source
-
或你有多個 workspace,卻
source
錯誤的install/setup.bash
🔧 8. 套件名字衝突 / 多個同名套件
-
如果有多個同名套件,ROS 2 只會認其中之一(最後被 source 的)
-
如果某個舊版在
/opt/ros/humble/
中,可能會蓋掉你的自製版本
✅ 如何檢查你的套件是否被找到?
bashros2 pkg prefix my_robot_pkg
能成功顯示出安裝路徑表示該套件已經正確註冊
(例如 /home/ubuntu/ros2_ws/install/my_robot_pkg
)
📌 總結:常見原因快速對照表
問題描述 | 影響 | 解法 |
---|---|---|
缺少 package.xml | 完全不會被視為套件 | 加上有效的 package.xml |
少 resource/<pkg> | 無法索引套件 | 建立空檔案 touch resource/<pkg> |
少 CMakeLists.txt /setup.py | 無法編譯 | 根據 build type 補上 |
沒有 colcon build | install/ 不會產生 | 執行 colcon build |
沒有 source install/setup.bash | 環境中找不到套件 | 下 source 或加到 ~/.bashrc |
放錯目錄(非 src/ ) | 套件無法被掃到 | 移動到 src/ 底下 |
如果你不確定某個套件「為什麼找不到」,
你也可以貼出你的目錄結構 (tree
)、package.xml
,
我可以幫你診斷具體問題。
沒有留言:
張貼留言