Wie man ROS2 "Package '...' not found: package '...' not found, searching ..." behebt

Problem

Sie möchten ein Paket aus einem lokalen Verzeichnis statt aus einem globalen ROS2-Suchverzeichnis laden.

Sagen wir, Sie möchten my_package laden:

fix_ros2_package_not_found.sh
$ ls
my_package

und Sie verwenden

ros2_launch_with_prefix.sh
AMENT_PREFIX_PATH=$(pwd) ros2 launch my_package my.launch.py

mit dem Prefix-Pfad auf das aktuelle Verzeichnis gesetzt, in der Erwartung, dass ROS2 ./my_package im aktuellen Verzeichnis findet.

Sie sehen jedoch einen Fehler wie

ros2_package_not_found_error.txt
Package 'my_package' not found: "package 'my_package' not found, searching: ['/home/user/']"

Lösung

Wenn Sie AMENT_PREFIX_PATH beispielsweise auf /home/user setzen, wird ROS2 nicht nach ./my_package in /home/user suchen.

Stattdessen wird es in /home/user/share/ament_index/resource_index/packages nach einer (potenziell leeren) Datei namens my_package suchen.

Mit anderen Worten, ROS2 erwartet, dass der Index in einer spezifischen Verzeichnisstruktur vorliegt:

ament_index_tree.txt
/home/user/
└── share
  └── ament_index
    └── resource_index
      └── packages
        └── my_package

Der offizielle Weg, das ROS2-Paket zu verwenden

Sie müssen my_package bauen und die automatisch generierten setup-Skripte verwenden, um die korrekten Umgebungsvariablen zu setzen! ROS2 unterstützt offiziell kein Herumhacken mit einem benutzerdefinierten AMENT_PREFIX_PATH wie diesem.

colcon_build.sh
cd my_package
colcon build

Danach laden Sie das Paket mit dem Paketnamen:

source_install_setup.sh
source install/local_setup.sh

Dies wird setzen

colcon_prefix_path.sh
COLCON_PREFIX_PATH=/home/user/my_package/install

was die korrekte ament-Index-Verzeichnisstruktur enthält.

Workaround

Falls Sie das Paket nicht bauen möchten, können Sie einen Symlink zum Paket im erwarteten Verzeichnis erstellen:

create_ament_index.sh
mkdir -p share/ament_index/resource_index/packages
touch share/ament_index/resource_index/packages/my_package

Dies wird ROS2 dazu bringen, das Paket zu finden. Das korrekte share-Verzeichnis wird jedoch immer noch nicht vorhanden sein, daher wird dies nicht empfohlen. In Zukunft könnte ich Informationen hinzufügen, wie man dies umgehen kann.


Check out similar posts by category: ROS