Elemento básicos de ROS

Espacio de trabajo

En ROS (Robot Operating System), el espacio de trabajo (workspace) es una estructura de directorios donde se desarrolla, organiza y compila todo el código relacionado con ROS. Es una parte esencial para estructurar los paquetes, nodos y configuraciones que usarás en tus aplicaciones robóticas.

Creación del Espacio de Trabajo

mkdir [Nombre_del_espacio_de_trabajo]
cd [Nombre_del_espacio_de_trabajo]
mkdir src

El comando mkdir crea una nueva carpeta. src es la subcarpeta donde se almacenan los paquetes de ROS.

Compilación del Workspace

catkin_make

Este comando genera los directorios build/ y devel/, necesarios para compilar y ejecutar los paquetes.

Configurar entorno con .bashrc

echo "source ~/[Nombre_del_espacio_de_trabajo]/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

Esto asegura que ROS reconozca tu espacio de trabajo cada vez que abras una terminal.


Paquetes en ROS

Un paquete en ROS es la unidad mínima de software que contiene nodos, lanzadores, bibliotecas, archivos de configuración y dependencias.

Crear un paquete

cd src
catkin_create_pkg [Nombre_del_paquete] [dependencias]

Dependencias comunes

Dependencia

Descripción

roscpp

Librería C++ de ROS

rospy

Librería Python de ROS

std_msgs

Tipos de mensajes estándar

sensor_msgs

Datos de sensores (cámaras, lidar, etc.)

geometry_msgs

Posición, orientación, transformaciones

visualization_msgs

Visualización en RViz

tf

Gestión de transformaciones de coordenadas

rviz

Herramienta 3D de visualización de datos robóticos

Compilar el paquete

cd ..
catkin_make

Ejercicio

A continuación creamos un espacio de trabajo denominado catkin_ws y el primer paquete a crear será pkg_smr

mkdir catkin_ws
cd catkin_ws
mkdir src

Compilación:

catkin_make

Configuración del entorno

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

Creación de Nodos en ROS

Un nodo es una unidad ejecutable dentro del sistema distribuido de ROS. Se comunica mediante tópicos, servicios o acciones.

Crear nodo Python

cd src/[Nombre_del_paquete]/src
gedit [Nombre_del_archivo.py]
chmod +x [Nombre_del_archivo.py]

Estructura básica del nodo - usando while not rospy.is_shutdown()

#!/usr/bin/env python3

import rospy

def main():
    rospy.init_node('primer_nodo', anonymous=True)
    rate = rospy.Rate(1)  # 1 Hz
    while not rospy.is_shutdown():
        rospy.loginfo("Mi primer nodo en ROS - while not rospy.is_shutdown()")
        rate.sleep()

if __name__ == '__main__':
    try:
        main()
    except rospy.ROSInterruptException:
        pass

Estructura con rospy.spin()

#!/usr/bin/env python3

import rospy

def timer_callback(event):
    rospy.loginfo("Mi primer nodo en ROS - rospy.spin()")

def main():
    rospy.init_node('segundo_nodo', anonymous=True)
    rospy.Timer(rospy.Duration(1), timer_callback)
    rospy.spin()

if __name__ == '__main__':
    try:
        main()
    except rospy.ROSInterruptException:
        pass

Con esto, tienes la base sólida para crear, compilar y ejecutar nodos en ROS.