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.