Como corrigir ROS2: package not found: package not found, searching

Problema

Você deseja carregar um pacote a partir de um diretório local em vez de um diretório de busca global do ROS2.

Digamos que você queira carregar my_package:

fix_ros2_package_not_found.sh
$ ls
my_package

e você usa

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

com o prefixo de caminho definido para o diretório atual, esperando que o ROS2 encontre ./my_package no diretório atual.

No entanto, você vê um erro como

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

Solução

Quando você define AMENT_PREFIX_PATH para, por exemplo, /home/user, o ROS2 não procurará por ./my_package em /home/user.

Em vez disso, ele procurará em /home/user/share/ament_index/resource_index/packages por um arquivo (potencialmente vazio) chamado my_package.

Em outras palavras, o ROS2 espera que o índice esteja em uma estrutura de diretório específica:

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

A maneira oficial de usar o pacote ROS2

Você deve compilar my_package e usar os scripts setup gerados automaticamente para definir as variáveis de ambiente corretas! O ROS2 não oferece suporte oficialmente a manipulações com um AMENT_PREFIX_PATH personalizado como este.

colcon_build.sh
cd my_package
colcon build

Depois disso, carregue o pacote usando o nome do pacote:

source_install_setup.sh
source install/local_setup.sh

Isso definirá

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

que contém a estrutura de diretório de índice ament correta.

Solução alternativa

Caso você não queira compilar o pacote, você pode criar um symlink para o pacote no diretório esperado:

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

Isso fará com que o ROS2 encontre o pacote. No entanto, o diretório share correto ainda não estará presente, portanto isso não é recomendado. No futuro, posso adicionar informações sobre como contornar isso.


Check out similar posts by category: ROS