ROS如何找到一个包的所有可执行文件?

Zhe*_*hao 6 ros

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

谢谢!

小智 5

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


Van*_*las 5

在查找 bash 自动完成脚本后rosrun,看起来该命令catkin_find用于查找包的可执行文件的位置,并且使用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
Run Code Online (Sandbox Code Playgroud)

然后使rospack-list-executables脚本可执行 ( chmod +x rospack-list-executables) 并将其放置在可以在您的$PATH环境变量中找到的目录中。

运行脚本:

$ rospack-list-executables gazebo_ros
debug
gazebo
gdbrun
gzclient
gzserver
libcommon.sh
perf
spawn_model
Run Code Online (Sandbox Code Playgroud)

您应该得到与键入rosrun <pkgname>命令并按时得到的结果相同的结果Tab

$ rosrun gazebo_ros 
debug         gazebo        gdbrun        gzclient      gzserver      libcommon.sh  perf          spawn_model
Run Code Online (Sandbox Code Playgroud)

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

rospack list-names | while read pkgname; do
    echo "Executables for package '${pkgname}':";
    rospack-list-executables $pkgname; echo "";
done
Run Code Online (Sandbox Code Playgroud)

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

complete -F _roscomplete rospack-list-executables
Run Code Online (Sandbox Code Playgroud)

如果您不想complete每次登录时都键入命令,可以将其附加到您的.bashrc文件中:

echo "complete -F _roscomplete rospack-list-executables" >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

现在,当您键入命令rospack-list-executables并按下Tab键时,您应该会获得所有可用软件包的列表以供选择。