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:
$ ls
my_packagee você usa
AMENT_PREFIX_PATH=$(pwd) ros2 launch my_package my.launch.pycom 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
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:
/home/user/
└── share
└── ament_index
└── resource_index
└── packages
└── my_packageA 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.
cd my_package
colcon buildDepois disso, carregue o pacote usando o nome do pacote:
source install/local_setup.shIsso definirá
COLCON_PREFIX_PATH=/home/user/my_package/installque 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:
mkdir -p share/ament_index/resource_index/packages
touch share/ament_index/resource_index/packages/my_packageIsso 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.