Configuración del arranque automático de paquetes ROS

Para lograr que un robot inicie automáticamente sus módulos funcionales al arrancar el sistema, es necesario abordar dos aspectos clave: la preparación de un script de inicio que ejecute los nodos y archivos launch de ROS en el orden correcto, y la configuración del sistema operativo para ejecutar dicho script al inicio.

La estabilidad en el autoarranque puede verse afectada por la asignación de puertos USB. Para solucionar posibles inconsistencias con los dispositivos seriales, se recomienda configurar reglas udev para fijar los nombres de los puertos.

1. Preparación del entorno y scripts de lanzamiento

Primero, asegúrese de que el antorno de trabajo de ROS se cargue automáticamente. Edite el archivo ~/.bashrc y añada la línea de sourcing correspondiente a su workspace:

source /home/usuario/proyecto_ws/devel/setup.bash

Existen dos enfoques principales para orquestar el inicio de múltiples componentes ROS.

Opción A: Utilizando un archivo launch maestro

Este método centraliza la ejecución en un único archivo launch que incluye otros launch o define nodos directamente. Permite un control preciso del orden de ejecución mediante etiquetas como include.

<launch>
  <!-- Carga el modelo del robot -->
  <include file="$(find paquete_robot)/launch/modelo.launch" />

  <!-- Espera y luego inicia la navegación -->
  <include file="$(find paquete_navegacion)/launch/navegar.launch" />

  <!-- Lanza un nodo con terminal visible para depuración -->
  <node pkg="paquete_robot" type="monitor_sensor.py" name="monitor" output="screen"
        launch-prefix="xterm -e" />

  <!-- Otros nodos independientes -->
  <node pkg="servidor_mapas" type="cargador_mapas" name="mapa_loader" />
</launch>

Para ejecutarlo, simplemente invoque roslaunch paquete_robot inicio_maestro.launch.

Opción B: Mediante un script de orquestación

Un script en Python o Bash puede ofrecer mayor flexibilidad, como añadir retrasos personalizados o manejar errores de forma granular. El siguiente ejemplo en Python ilustra una estrategia de ejecución secuencial con tiempos de espera configurables:

#!/usr/bin/env python3
import subprocess
import sys
import time

def ejecutar_comando(comando, esperar=True, retraso_posterior=0):
    """Lanza un proceso ROS y opcionalmente espera su finalización."""
    try:
        proc = subprocess.Popen(comando)
        if esperar:
            proc.wait()
            if proc.returncode != 0:
                print(f"Fallo en: {' '.join(comando)}")
                sys.exit(proc.returncode)
        if retraso_posterior > 0:
            time.sleep(retraso_posterior)
        return proc
    except FileNotFoundError:
        print(f"Comando no encontrado: {comando[0]}")
        sys.exit(1)

if __name__ == "__main__":
    print("Iniciando secuencia de carga del sistema...")
    try:
        # Fase 1: Cargar drivers y modelo
        ejecutar_comando(
            ["roslaunch", "paquete_robot", "drivers.launch"],
            esperar=False,
            retraso_posterior=3
        )
        # Fase 2: Iniciar sistemas de navegación
        ejecutar_comando(
            ["roslaunch", "paquete_navegacion", "slam.launch"],
            esperar=False
        )
        print("Módulos ROS lanzados.")
    except Exception as e:
        print(f"Error en la secuencia de arranque: {e}")
        sys.exit(1)

2. Configuración del autoarranque en el sistema

Una vez que el script de inicio funciona correctamente, se debe configurar el sistema para que lo ejecute al encenderse.

2.1 Crear un script de shell ejecutable

Cree un archivo inicio_robot.sh con el contenido básico. Este script cargará el entorno de ROS y ejecutará el launch o script principal.

#!/bin/bash
# Cargar el entorno de ROS y del workspace
source /opt/ros/noetic/setup.bash
source /home/robot/proyecto_ws/devel/setup.bash

# Iniciar el sistema (usar launch o script Python)
roslaunch paquete_robot inicio_maestro.launch

exit 0

2.2 Asignar permisos de ejecución

Es un paso obligatorio para que el sistema pueda correr el script.

sudo chmod +x /home/robot/inicio_robot.sh

2.3 Registrar en el gestor de inicio de sesión

En sistemas Ubuntu con entorno gráfico GNOME, se puede añadir el script a las aplicaciones de inicio mediante la herramienta gnome-session-properties. En la interfaz, agregue una nueva entrada donde el "Comando" sea la ruta completa al script /home/robot/inicio_robot.sh.

Tras reiniciar el equipo, los nodos y procesos ROS definidos deberían iniciarse de forma automática.

Etiquetas: ROS Ubuntu bash lanzamiento autoarranque

Publicado el 7-5 03:05