ROS如何找到一个包的所有可执行文件?
ROS how to find all executables of a package?
请问如何在ROS(机器人操作系统)中查找一个包的所有可执行文件名?例如,在 gazebo_ros
包中找到 spawn_model
。当我检查系统中的包时,它只显示一些 .xml
、.cmake
文件,没有任何可执行文件。但是我可以运行呢,比如:rosrun gazebo_ros spawn_model
.
谢谢!
一个简单的方法是输入:"rosrun name_of_package ",然后按两次 Tab,它应该会显示所有构建的可执行文件。
查看 rosrun
的 bash 自动完成脚本后,命令 catkin_find
似乎用于查找包的可执行文件的位置,可执行文件是使用 find
命令过滤。
如果您想创建一个脚本来为您提供可执行文件列表,请按照以下说明操作:
将以下脚本保存在名为 rospack-list-executables
的文件中:
#!/bin/bash
if [[ $# -lt 1 ]]; then
echo "usage: $(basename [=10=]) <pkg_name>"
echo ""
echo " To get a list of all package names use the command"
echo " 'rospack list-names'"
exit
fi
pkgname=
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 '[=10=]0' '\n' | sed -e "s/.*\/\(.*\)//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
您应该得到与键入 rosrun <pkgname>
命令并按 Tab:
时相同的结果
$ rosrun gazebo_ros
debug gazebo gdbrun gzclient gzserver libcommon.sh perf spawn_model
您可以使用以下 bash 代码检查所有包的可执行文件:
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
现在,当您键入命令 rospack-list-executables
并按 Tab 键时,您应该会得到一个包含所有可用软件包的列表以供选择。
请问如何在ROS(机器人操作系统)中查找一个包的所有可执行文件名?例如,在 gazebo_ros
包中找到 spawn_model
。当我检查系统中的包时,它只显示一些 .xml
、.cmake
文件,没有任何可执行文件。但是我可以运行呢,比如:rosrun gazebo_ros spawn_model
.
谢谢!
一个简单的方法是输入:"rosrun name_of_package ",然后按两次 Tab,它应该会显示所有构建的可执行文件。
查看 rosrun
的 bash 自动完成脚本后,命令 catkin_find
似乎用于查找包的可执行文件的位置,可执行文件是使用 find
命令过滤。
如果您想创建一个脚本来为您提供可执行文件列表,请按照以下说明操作:
将以下脚本保存在名为 rospack-list-executables
的文件中:
#!/bin/bash
if [[ $# -lt 1 ]]; then
echo "usage: $(basename [=10=]) <pkg_name>"
echo ""
echo " To get a list of all package names use the command"
echo " 'rospack list-names'"
exit
fi
pkgname=
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 '[=10=]0' '\n' | sed -e "s/.*\/\(.*\)//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
您应该得到与键入 rosrun <pkgname>
命令并按 Tab:
$ rosrun gazebo_ros
debug gazebo gdbrun gzclient gzserver libcommon.sh perf spawn_model
您可以使用以下 bash 代码检查所有包的可执行文件:
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
现在,当您键入命令 rospack-list-executables
并按 Tab 键时,您应该会得到一个包含所有可用软件包的列表以供选择。