(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

Navegar el sistema de archivos de ROS

Description: Este tutorial es introductorio a los conceptos del sistema de archivos de ROS y cubre el uso de las herramientas de linea de comando roscd, rosls y rospack.

Tutorial Level:

Next Tutorial: Creando Paquetes ROS Creando Paquetes ROS

Seleccione "catkin" o "rosbuild" aquí abajo. El nuevo sistema de compilado para ROS es "catkin", mientras que "rosbuild" lo es para los sistemas ROS viejos. Si Usted es nuevo en ROS, elija catkin. Aquí encontrara más información sobre cada uno:

  1. catkin

  2. catkin/conceptual_overview

  3. catkin_or_rosbuild

  4. rosbuild

Prerequisites

For this tutorial we will inspect a package in ros-tutorials, please install it using

$ sudo apt-get install ros-<distro>-ros-tutorials

Replace '<distro>' (including the '<>') with the name of your ROS distribution (e.g. hydro, groovy, electric, fuerte etc.)

Quick Overview of Filesystem Concepts

  • Packages: Packages are the lowest level of ROS software organization. They can contain anything: libraries, tools, executables, etc.

  • Manifest: A manifest is a description of a package. Its most important role is to define dependencies between packages.

  • Stacks: Stacks are collections of packages that form a higher-level library.

  • Stack Manifest: These are just like normal manifests, but for stacks.

When you look at the filesystem, it's easy to tell packages and stacks apart:

  • A package is a directory with a manifest.xml file.
  • A stack is a directory with a stack.xml file.


filesystem_layout.png

Filesystem Tools

Code is spread across many ROS packages and stacks. Navigating with command-line tools such as ls and cd can be very tedious which is why ROS provides tools to help you.

Using rospack and rosstack

rospack and rosstack allow you to get information about packages and stacks. In this tutorial, we are only going to cover the find option, which returns the path to package or stack.

Usage:

$ rospack find [package_name]
$ rosstack find [stack_name]

Example:

$ rospack find roscpp

Would return:

  • YOUR_INSTALL_PATH/share/roscpp

If, for example, you have used the binary install of ROS Fuerte on Ubuntu linux, you would see exactly:

  • /opt/ros/fuerte/share/roscpp

Using roscd

roscd is part of the rosbash suite. It allows you to change directory (cd) directly to a package or a stack.

Usage:

$ roscd [locationname[/subdir]]

Run this example:

$ roscd roscpp

To verify that we have changed to the roscpp package directory. Now let's print the working directory using the Unix command pwd:

$ pwd

You should see:

  • YOUR_INSTALL_PATH/share/roscpp

You can see that YOUR_INSTALL_PATH/share/roscpp is the same path that rospack find gave in the previous example.

Note that roscd, like other ROS tools, will only find ROS packages that are below the directories listed in your $ROS_PACKAGE_PATH. To see what is in your $ROS_PACKAGE_PATH, type:

$ echo $ROS_PACKAGE_PATH

If you have not modified your $ROS_PACKAGE_PATH, you should see:

  • YOUR_INSTALL_PATH/share:YOUR_INSTALL_PATH/stacks

Similarly to other environment paths, you can add additional directories to your $ROS_PACKAGE_PATH, with each path separated by a colon ':'

Subdirectories

roscd can also move to a subdirectory of a package or stack.

Try:

$ roscd roscpp/cmake
$ pwd

You should see:

  • YOUR_INSTALL_PATH/share/roscpp/cmake

Special cases for roscd

There are a few special places you can tell roscd to go, that are not a package or stack.

roscd with no arguments

roscd without an argument will take you to $ROS_WORKSPACE. Try:

$ roscd
$ pwd

You should see:

  •  /home/user/fuerte_workspace

Note: Prior to Fuerte, roscd would take you to $ROS_ROOT.

roscd log

roscd log will take you to the folder where ROS stores log files. Note that if you have not run any ROS programs yet, this will yield an error saying that it does not yet exist.

If you have run some ROS program before, try:

$ roscd log

Using rosls

rosls is part of the rosbash suite. It allows you to ls directly in a package, stack, or common location by name rather than by package path.

Usage:

$ rosls [locationname[/subdir]]

Example:

$ rosls roscpp_tutorials

Would return:

  • bin  cmake  manifest.xml  srv

Tab Completion

It can get tedious to type out an entire package name. In the previous example, roscpp_tutorials is a fairly long name. Luckily, some ROS tools support TAB completion.

Start by typing:

$ roscd roscpp_tut<<< now push the TAB key >>>

After pushing the TAB key, the command line should fill out the rest.

  • $ roscd roscpp_tutorials/

This works because roscpp_tutorials is currently the only ROS package that starts with roscpp_tut.

Now try typing:

$ roscd tur<<< now push the TAB key >>>

After pushing the TAB key, the command line should fill out as much as possible:

  • $ roscd turtle

However, in this case there are multiple packages that begin with turtle. Try typing TAB another time. This should display all the ROS packages that begin with turtle

  •   turtle_actionlib/  turtlesim/         turtle_tf/

On the command line you should still have

  • $ roscd turtle

Now type a s after turtle and then push TAB

$ roscd turtles<<< now push the TAB key >>>

Since there is only one package that start with turtles, you should see:

  • $ roscd turtlesim/

Review

You may have noticed a pattern with the naming of the ROS tools:

  • rospack = ros + pack(age)
  • rosstack = ros + stack
  • roscd = ros + cd
  • rosls = ros + ls

This naming pattern holds for many of the ROS tools.

Requisitos previos

Para este tutorial, inspeccionaremos un paquete en ros-tutorials, instálelo usando

$ sudo apt-get install ros-<distro>-ros-tutorials

Reemplace '<distro>' (incluido el '<>') con el nombre de su Distribución ROS (por ejemplo: indigo, kinetic, lunar etc.)

Descripción general rápida de los conceptos del sistema de archivos

  • 'Paquetes:' Los paquetes son la unidad de organización de software del código ROS. Cada paquete puede contener bibliotecas, ejecutables, scripts u otros artefactos.

  • 'Manifiestos (package.xml):' Un manifiesto es una descripción de un paquete . Sirve para definir dependencias entre paquetes y para capturar metainformación sobre el paquete como versión, mantenedor, licencia, etc.

Herramientas del sistema de archivos

El código se distribuye en muchos paquetes ROS. Navegar con herramientas de línea de comandos como ls y cd puede ser muy tedioso, por lo que ROS proporciona herramientas para ayudarlo.

Usando rospack

rospack le permite obtener información sobre paquetes. En este tutorial, solo cubriremos la opción buscar, que devuelve la ruta al paquete.

Uso:

$ rospack find [package_name]

Ejemplo:

$ rospack find roscpp

resultado:

  • YOUR_INSTALL_PATH/share/roscpp

Si instaló ROS Kinetic desde apt en Ubuntu Linux, verá exactamente:

/opt/ros/kinetic/share/roscpp

Usando roscd

roscd es parte de la suite rosbash. Le permite cambiar el directorio (cd) directamente a un paquete o una pila.

Uso:

$ roscd <package-or-stack>[/subdir]

Para verificar que hemos cambiado al directorio del paquete roscpp, ejecute este ejemplo:

$ roscd roscpp

Ahora imprimamos el directorio de trabajo usando el comando Unix pwd:

$ pwd

Usted debería ver:

  • YOUR_INSTALL_PATH/share/roscpp

2574 / 5000 Resultados de traducción Puede ver que YOUR_INSTALL_PATH / share / roscpp es la misma ruta que rospack find dio en el ejemplo anterior.

Tenga en cuenta que roscd, al igual que otras herramientas ROS, solo encontrará paquetes ROS que estén dentro de los directorios enumerados en su ROS_PACKAGE_PATH. Para ver qué hay en su ROS_PACKAGE_PATH, escriba:

$ echo $ROS_PACKAGE_PATH

Su ROS_PACKAGE_PATH debe contener una lista de directorios donde tiene paquetes ROS separados por dos puntos. Un típico ROS_PACKAGE_PATH podría verse así:

  • /opt/ros/kinetic/base/install/share

De manera similar a otras rutas de entorno, puede agregar directorios adicionales a su ROS_PACKAGE_PATH, con cada ruta separada por dos puntos ':'.

Subdirectorios

roscd también puede moverse a un subdirectorio de un paquete o pila.

Intente:

$ roscd roscpp/cmake
$ pwd

Usted debería ver:

  • YOUR_INSTALL_PATH/share/roscpp/cmake

roscd log

roscd log lo llevará a la carpeta donde ROS almacena los archivos de registro. Tenga en cuenta que si aún no ha ejecutado ningún programa ROS, se producirá un error que indica que aún no existe.

Si ha ejecutado algún programa ROS antes, intente:

$ roscd log

Usando rosls

roslses parte de la suite rosbash. Le permite ls directamente en un paquete por nombre en lugar de por ruta absoluta.

Uso:

$ rosls <package-or-stack>[/subdir]

Ejemplo:

$ rosls roscpp_tutorials

devolverá:

  • cmake launch package.xml  srv

Completado de línea de comando

Puede resultar tedioso escribir el nombre de un paquete completo. En el ejemplo anterior, roscpp_tutorials es un nombre bastante largo. Afortunadamente, algunas herramientas ROS son compatibles con Completado de línea de comando.

Empiece escribiendo:

$ roscd roscpp_tut<<< now push the TAB key >>>

Después de presionar la tecla 'TAB' , la línea de comando debe completar el resto:

$ roscd roscpp_tutorials/

Esto funciona porque roscpp_tutorials es actualmente el único paquete ROS que comienza con roscpp_tut.

ahora trate de escribir:

$ roscd tur<<< now push the TAB key >>>

Después de presionar la tecla 'TAB' , la línea de comando debe completar tanto como sea posible:

$ roscd turtle

Sin embargo, en este caso hay varios paquetes que comienzan con turtle. Intente escribir 'TAB' en otro momento. Esto debería mostrar todos los paquetes ROS que comienzan con turtle:

turtle_actionlib/  turtlesim/         turtle_tf/

En la línea de comando aún debería tener:

$ roscd turtle

Ahora escribe una s después de turtle y luego presiona 'TAB' :

$ roscd turtles<<< now push the TAB key >>>

Dado que solo hay un paquete que comienza con turtles, deberías ver:

$ roscd turtlesim/

Si desea ver una lista de todos los paquetes instalados actualmente, también puede usar la opción de completar con tabulación para eso:

$ rosls <<< now push the TAB key twice >>>

Observaciones

Es posible que haya notado un patrón con el nombre de las herramientas ROS:

  • rospack = ros + pack(age)
  • roscd = ros + cd
  • rosls = ros + ls

Este patrón de nomenclatura se aplica a muchas de las herramientas ROS.

Ahora que nos podemos mover por ROS, vamos a crear un paquete ROS.

Wiki: es/ROS/Tutoriales/NavegandoElSistemaDeArchivos (last edited 2021-08-05 18:46:28 by JuanEduardoRiva)