3. Creado Paquetes ROS - OscarR12/ROS-CHEAT-SHEET GitHub Wiki
¿Qué compone un paquete catkin?
- El paquete debe contener un archivo package.xml compatible con catkin.
Ese archivo package.xml proporciona metainformación sobre el paquete.
- El paquete debe contener un CMakeLists.txt que usa catkin.
Si es un metapaquete catkin debe tener el archivo estándar CMakeLists.txt correspondiente.
- Cada paquete debe tener su propia carpeta
Esto significa que no hay paquetes anidados ni varios paquetes que compartan el mismo directorio.
El paquete más simple podria tener la siguiente estructura
my_package/
___ CMakeLists.txt
___ package.xml
Paquetes en un espacio de trabajo catkin
Un espacio de trabajo podria verse asi:
Creando un paquete catkin
Primero cambiamos al directorio del espacio de trabajo antes creado, en este caso es:
$ cd ~/catkin_ws/src
Ahora se utiliza el siguiente script.
Catkin_create_pkg - Script: $ catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
Con este script se creará un paquete que llevara por nombre: 'beginner_tutorials', el cúal será dependiente de std_msgs, roscpp, and rospy.
Usando lo siguiente:
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
Esto crea una carpeta llamada beginner_tutorials que contendra un paquete packege.xml y un archivo CMakeLists.tx, que será complementado con lo que se le proporciono al script.
Al poner el comando, el resultado en mi caso fue el siguiente:
catkin_create_pkg requiere que se le asigne un package_name (nombre de paquete) y opcionalmente una lista de dependencias propia:
$ catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
Construyendo un espacio de trabajo catkin (catkin workspace) y compilando su archivo de configuración
Es necesario crear los paquetes en el espacio catkin.
Para esto se usan los siguientes comandos
$ cd ~/catkin_ws $ catkin_make
Al poner esto, el resultado fue el siguiente:
Para agregar el espacio de trabajo al espacio ROS se debe compilar el archivo de configuración generado mediante:
$ . ~/catkin_ws/devel/setup.bash
Dependencias de paquetes
Dependencias prioritarias (primero orden)
Anteriormente cuando usamos catkin_create_pkg, se asignaron pocas dependencias de paquetes. Estas dependencias prioritarias pueden ser revistadas por medio de la herramienta rospack.
Rospack depends1: $ rospack depends1 <package_name>
Al correr este comando:
$ rospack depends1 beginner_tutorials
En mi caso el resultado fue:
- roscpp
- rospy
- std_msgs
Lo cuál corresponde a lo esperado, que fue lo que se agrego al catkin_create_pkg.
Esas dependencias para un paquete se encuentran guardadas en el archivo package.xml.
Para acceder usamos los siguientes comandos
$ roscd beginner_tutorials
$ cat package.xml
En mi caso si salio lo esperado, que era algo como esto:
Dependencias indirectas
En algunos casos una dependencia, por ejemplo rospy puede tener sus propias dependencias.
Un paquete puede contener bastantes dependencias indirectas, rospack puede determinar de forma recursiva todas las dependencias anidadas.
Rospack depends: $ rospack depends <package_name>
Al correr este comando:
$ rospack depends beginner_tutorials
Lo que obtuve fue lo siguiente:
Perzonalizando tu paquete
Esta parte del tutorial examinará cada archivo generado por [catkin_create_pkg] y describe, linea por linea, cada componente de esos archivos y como los puedes personalizar para tu paquete.
Personalizando package.xml
El package.xml deberá estar dentro del paquete.
Etiqueta descriptiva (description tag)
Primero actualicemos la etiqueta descriptiva:
Esta debe ser corta y cubrir con el alcance del paquete.
Para acceder, abri directamente la carpeta de catkin_ws, pero fuera de la ventana de comandos, de ahi me fui a src, posteriormente entre a beginner_tutorials y por ultimo se abre el package.xml
De modo de que agregue lo siguiente: "El paquete beginner_tutorials sirve para familiarizarme con ROS"
Etiquetas del mantenedor o creador (maintainer tags)
Esta es una etiqueta necesaria e importante para [package.xml] porque permite que otros sepan a quién contactar sobre el paquete. Se requiere al menos un mantenedor, pero puede tener muchos si lo desea. El nombre del mantenedor va en el cuerpo de la etiqueta, pero también hay un atributo de correo electrónico que debe completarse:
Etiquetas de licencia (license tags)
Se debe elegir una licencia y completarla aquí. Algunas licencias de código abierto comunes son BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1 y LGPLv3. Puede leer sobre varios de estos en la Open Source Initiative. Para este tutorial usaremos la licencia BSD porque el resto de los componentes centrales de ROS ya la usan:
Etiquetas de dependencias (dependencies tags)
El siguiente conjunto de etiquetas describe las dependencias de su paquete. Las dependencias se dividen en build_depend, buildtool_depend, exec_depend, test_depend.
Dado que pasamos std_msgs, roscpp y rospy como argumentos a [catkin_create_pkg], las dependencias se verán así:
Todas nuestras dependencias enumeradas se han agregado como un build_depend para nosotros, además del buildtool_depend predeterminado en catkin. En este caso, queremos que todas nuestras dependencias especificadas estén disponibles en tiempo de compilación y ejecución, por lo que también agregaremos una etiqueta exec_depend para cada una de ellas.
package.xml final
El [package.xml] final, sin comentarios y etiquetas sin usar, es mucho más conciso: