Fundamentos ROS (tres) cobertura del espacio de trabajo
Tabla de contenido
ROS permite la coexistencia de múltiples espacios de trabajo. Los métodos de creación, compilación y operación de cada espacio de trabajo son los mismos. Los usuarios pueden crear los paquetes de funciones requeridos en los espacios de trabajo de diferentes proyectos. Pero hay una situación: diferentes espacios de trabajo pueden tener el mismo paquete de funciones con nombre. Si se han establecido las variables de entorno de estos espacios de trabajo, ¿habrá conflictos al utilizar el paquete de funciones?
1. Cobertura del espacio de trabajo en ROS
El espacio de trabajo ROS tiene un mecanismo de superposición, es decir, la cobertura del espacio de trabajo. Las rutas de todos los espacios de trabajo se registrarán sucesivamente en la variable de entorno ROS_PACKAGE_PATH. Cuando se establezcan las variables de entorno de varios espacios de trabajo, la ruta recién configurada se colocará automáticamente en primer plano en ROS_PACKAGE_PATH. En el tiempo de ejecución, ROS buscará primero si el paquete de funciones especificado existe en el espacio de trabajo del front-end. Si no existe, buscará otros espacios de trabajo secuencialmente hasta el último espacio de trabajo.
Puede ver todas las variables de entorno relacionadas con ROS a través del siguiente comando, que contiene el ROS_PACKAGE_PATH que más nos importa.
env | grep ros
2. Ejemplo de cobertura del espacio de trabajo
Instale el paquete de funciones ros-kinetic-ros-tutorials mediante el siguiente comando.
sudo apt-get install ros-kinetic-ros-tutorials
Una vez completada la instalación, use el comando rospack para ver el espacio de trabajo donde se coloca el paquete de características.
roscpp_tutorials es un paquete de funciones en ros-tutorials. En este momento, el paquete de funciones se almacena en el espacio de trabajo predeterminado de ROS. A continuación, también colocamos un paquete de funciones con el mismo nombre en nuestro espacio de trabajo catkin_ws. Puede descargar el código fuente del paquete de funciones ros-tutorials en GitHub:
cd ~/catkin_ws/src
git clone git://github.com/ros/ros_tutorials.git
Luego compile el espacio de trabajo catkin_ws y configure las variables de entorno:
cd ~/catkin_ws
catkin_make
source ./devel/setup.bash
Una vez que la variable de entorno se haya configurado correctamente, verifique la ubicación del paquete de funciones roscpp_tutorials. Ahora, el paquete de funciones roscpp_tutorials encontrado por ROS está bajo el espacio de trabajo catkin_ws que creamos, esto se debe a que en la variable de entorno ROS_PACKAGE_PATH, la ruta del espacio de trabajo catkin_ws está antes de la ruta del espacio de trabajo del sistema.
Este mecanismo de cobertura nos permite reemplazar fácilmente los paquetes de funciones originales en el sistema u otros espacios de trabajo durante el proceso de desarrollo, pero también existen algunos riesgos potenciales, como en los dos espacios de trabajo con la siguiente estructura:
catkin_ws/
src/
package_a
package_b
devel/
...
overlay_ws/
src/
package_a
devel/
...
Si el paquete de funciones package_a en overlay_ws del espacio de trabajo cubre el paquete_a en catkin_ws, el paquete de funciones package_b es único y es imposible saber si el paquete dependiente_a ha cambiado, lo que genera riesgos potenciales para el paquete de funciones package_b.