ROS如何查找包的所有可执行文件?

时间:2016-07-03 13:51:58

标签: ros

我想问一下如何在ROS(机器人操作系统)中找到包的所有可执行文件名?例如,在spawn_model包中找到gazebo_ros。当我在我的系统中检查包时,它只显示一些.xml.cmake文件,没有任何可执行文件。但我可以运行它,例如:rosrun gazebo_ros spawn_model

谢谢!

2 个答案:

答案 0 :(得分:2)

一种简单的方法是键入:" rosrun name_of_package"然后按Tab键两次,它应该显示所有构建的可执行文件。

答案 1 :(得分:2)

查看rosrun的bash自动完成脚本后,看起来命令catkin_find用于查找包的可执行文件的位置,可执行文件使用{{1命令。

如果要创建脚本以提供可执行文件列表,请按照以下说明操作:

将以下脚本保存在名为find的文件中:

rospack-list-executables

然后使#!/bin/bash if [[ $# -lt 1 ]]; then echo "usage: $(basename $0) <pkg_name>" echo "" echo " To get a list of all package names use the command" echo " 'rospack list-names'" exit fi pkgname=${1} pkgdir="$(catkin_find --first-only --without-underlays --libexec ${pkgname})" if [[ -n "${pkgdir}" ]]; then find -L "${pkgdir}" -executable -type f ! -regex ".*/[.].*" ! -regex ".*${pkgdir}\/build\/.*" -print0 | tr '\000' '\n' | sed -e "s/.*\/\(.*\)/\1/g" | sort else echo "Cannot find executables for package '${pkgname}'." >&2 exit 1 fi 脚本可执行文件(rospack-list-executables)并将其放在可以在chmod +x rospack-list-executables环境变量中找到的目录中。

运行脚本:

$PATH

当您输入$ rospack-list-executables gazebo_ros debug gazebo gdbrun gzclient gzserver libcommon.sh perf spawn_model 命令并按 Tab 时,您应该得到相同的结果:

rosrun <pkgname>

您可以使用以下bash代码检查所有包的可执行文件:

$ rosrun gazebo_ros 
debug         gazebo        gdbrun        gzclient      gzserver      libcommon.sh  perf          spawn_model

要为新创建的命令启用程序包自动完成,请键入以下内容:

rospack list-names | while read pkgname; do
    echo "Executables for package '${pkgname}':";
    rospack-list-executables $pkgname; echo "";
done

如果您不想在每次登录时都输入complete -F _roscomplete rospack-list-executables 命令,可以将其附加到complete文件中:

.bashrc

现在,当您键入命令echo "complete -F _roscomplete rospack-list-executables" >> ~/.bashrc 并按 Tab 键时,您应该会获得所有可用包的列表供您选择。