2025年6月26日 星期四

ROS2 for ros2 pkg list Fail !

如果你建立了一個 ROS 2 套件,但在執行 ros2 pkg list 時卻 找不到你自己的套件

這通常是因為以下幾個常見錯誤:


🧱 1. 沒有正確建構 (colcon build)

即使你在 src/ 底下放好了套件,如果沒有跑 colcon buildsource install/setup.bash,ROS 2 是無法辨識該套件的。

🔍 檢查方式:

bash
cd ~/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/套件名 的空檔案來識別。

✅ 修正方式:

bash
mkdir -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/ 目錄中尋找套件。

✅ 正確結構:

css
ros2_ws/ ├── src/ │ └── my_robot_pkg/ │ └── package.xml

如果你誤放到 ros2_ws/ 根目錄下,會完全被忽略。


❗ 6. 沒有正確 source install/setup.bash

即使 build 成功,若你沒有下列指令,ROS 環境不會知道有哪些套件可以用

bash
source ~/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/ 中,可能會蓋掉你的自製版本


✅ 如何檢查你的套件是否被找到?

bash
ros2 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 buildinstall/ 不會產生執行 colcon build
沒有 source install/setup.bash環境中找不到套件source 或加到 ~/.bashrc
放錯目錄(非 src/套件無法被掃到移動到 src/ 底下

如果你不確定某個套件「為什麼找不到」,

你也可以貼出你的目錄結構 (tree)、package.xml

我可以幫你診斷具體問題。

沒有留言:

張貼留言