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 |
|---|---|
|
Librería C++ de ROS |
|
Librería Python de ROS |
|
Tipos de mensajes estándar |
|
Datos de sensores (cámaras, lidar, etc.) |
|
Posición, orientación, transformaciones |
|
Visualización en RViz |
|
Gestión de transformaciones de coordenadas |
|
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.