Resolviendo el Error 'process has died' en Fast-Planner por Conflicto con NLopt

Al trabajar con el paquete de planificación de movimiento Fast-Planner, los desarrolladores pueden encontrarse con un error crítico que detiene la ejecución del nodo principal. Específicamente, el mensaje [fast_planner_node-1] process has died con un código de salida -11 indica una terminación inesperada del proceso, lo cual impide la correcta operación del planificador.

[fast_planner_node-1] process has died [pid 32631, exit code -11, cmd /home/rechard/demo06_ws/devel/lib/plan_manage/fast_planner_node /odom_world:=/state_ukf/odom /sdf_map/odom:=/state_ukf/odom /sdf_map/cloud:=/pcl_render_node/cloud /sdf_map/pose:=/pcl_render_node/camera_pose /sdf_map/depth:=/pcl_render_node/depth __name:=fast_planner_node __log:=/home/rechard/.ros/log/fc1b2026-7e98-11ed-aab1-ef1864111d04/fast_planner_node-1.log]. log file: /home/rechard/.ros/log/fc1b2026-7e98-11ed-aab1-ef1864111d04/fast_planner_node-1*.log

Análisis del Origen del Problema

Este inconveniente suele surgir en entornos como Ubuntu 20.04 y está directamente relacionado con la forma en que se instala la librería de optimización no lineal NLopt. La instalación de ros-noetic-nlopt a través del gestor de paquetes apt puede generar conflictos con otras dependencias o versiones de librerías utilizadas por Fast-Planner, llevando al cierre abrupto del nodo.

Pasos para la Resolución

La solución efectiva implica compilar NLopt directamente desde su código fuente en lugar de depender de la versión precompilada del repositorio de ROS. Esto asegura la compatibilidad y evita conflictos de librerías.

1. Compilación e Instalación de NLopt desde el Código Fuente

Primero, clone el repositorio de NLopt y compile la librería manualmente. Se recomienda colocar el código en un directorio temporal, por ejemplo, ~/temp_libs/nlopt.

# Clonar el repositorio de NLopt
git clone https://github.com/stevengj/nlopt.git ~/temp_libs/nlopt
cd ~/temp_libs/nlopt

# Crear un directorio de compilación y configurar CMake
mkdir build && cd build
cmake ..

# Compilar e instalar la librería
make
sudo make install

2. Modificación del Archivo CMakeLists.txt de bspline_opt

Una vez que NLopt esté instalaod desde la fuente, es necesario instruir a Fast-Planner (específicamente al módulo bspline_opt) para que enlace con esta versión personalizada y no con la versión de ROS. Edite el archivo CMakeLists.txt dentro del paquete bspline_opt para relfejar esto. A continuación, se muestra una versión modificada del archivo:

# Define la versión mínima de CMake requerida para el proyecto
cmake_minimum_required(VERSION 2.8.3)

# Declaración del proyecto
project(bspline_opt)

# Buscar los paquetes de ROS necesarios para el proyecto
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  visualization_msgs
  cv_bridge
  plan_env
)

# Encontrar la librería de optimización no lineal NLopt
# Esto localizará la versión instalada manualmente
find_package(NLopt REQUIRED)
# Asignar directorios de inclusión de NLopt (NLOPT_INCLUDE_DIR ya está disponible)
set(NLopt_INCLUDE_DIRS ${NLOPT_INCLUDE_DIR})

# Encontrar librerías de terceros adicionales
find_package(Eigen3 REQUIRED)
find_package(PCL 1.7 REQUIRED)

# Configurar el paquete Catkin
catkin_package(
  INCLUDE_DIRS include
  LIBRARIES bspline_opt
  CATKIN_DEPENDS plan_env
  # DEPENDS system_lib # Dependencias del sistema (descomentar si es necesario)
)

# Incluir los directorios necesarios para la compilación
include_directories(
  SYSTEM
  include
  ${catkin_INCLUDE_DIRS}
  ${Eigen3_INCLUDE_DIRS}
  ${PCL_INCLUDE_DIRS}
  ${NLOPT_INCLUDE_DIR}
)

# Establecer las banderas del compilador C++
set(CMAKE_CXX_FLAGS "-std=c++14 ${CMAKE_CXX_FLAGS} -O3 -Wall")

# Añadir la librería del optimizador de trayectorias B-spline
add_library( bspline_opt
  src/bspline_optimizer.cpp
)

# Vincular las librerías al ejecutable bspline_opt
target_link_libraries( bspline_opt
  ${catkin_LIBRARIES}
  ${NLOPT_LIBRARIES}
)

3. Recompilación del Workspace y Ejecución

Después de modificar el archivo CMakeLists.txt, es crucial recompilar su workspace de Catkin para que los cambios surtan efecto. Una vez completada la recompilación, puede lanzar Fast-Planner y verificar que el error haya desapaercido.

# Compilar el workspace de Catkin
cd ~/your_ws_name  # Reemplazar con la ruta de tu workspace
catkin_make

# Configurar el entorno ROS y lanzar Fast-Planner
source devel/setup.bash
roslaunch plan_manage rviz.launch
roslaunch plan_manage kino_replan.launch

Tras estos pasos, el sistema debería iniciar la planificación de rutas sin el error "process has died", permitiendo que el dron realice sus movimientos planificados correctamente.

Etiquetas: ROS FastPlanner NLopt cmake Ubuntu

Publicado el 6-28 19:54