Ошибка OpenGL в Rviz2 при попытке визуализировать SLAM-карту, созданную lidar.

Вопрос или проблема

Я запускаю Ros2 Jazzy на Ubuntu 24 на Raspberry Pi 5. Я подключил к нему RPLidar A1M8. Я хочу использовать его для создания карты моего окружения, для этого я использую Slam_Toolbox.

Но у меня возникают некоторые ошибки при попытке визуализировать карту в Rviz2.

Вот мой процесс:

Терминал 1:

$ ros2 launch rplidar_ros rplidar.launch.py
[INFO] [launch]: Все файлы журналов можно найти по адресу /home/kookaburra/.ros/log/2024-09-22-15-08-45-610837-kookaburra-desktop-5562
[INFO] [launch]: Уровень логирования по умолчанию установлен на INFO
[INFO] [rplidar_composition-1]: процесс запущен с pid [5576]
[INFO] [static_transform_publisher-2]: процесс запущен с pid [5577]
[INFO] [static_transform_publisher-3]: процесс запущен с pid [5578]
[INFO] [throttle-4]: процесс запущен с pid [5579]
[throttle-4] /opt/ros/jazzy/lib/topic_tools/throttle: ошибка при загрузке динамических библиотек: libthrottle_node.so: невозможно открыть общий объектный файл: Нет такого файла или каталога
[ERROR] [throttle-4]: процесс завершился с ошибкой [pid 5579, код выхода 127, cmd '/opt/ros/jazzy/lib/topic_tools/throttle messages /scan 1.0 --ros-args -r __node:=throttle_scan'].
[static_transform_publisher-3] [WARN] [1726997926.155586386] []: Аргументы старого стиля устарели; смотрите --help для аргументов нового стиля
[static_transform_publisher-2] [WARN] [1726997926.157821367] []: Аргументы старого стиля устарели; смотрите --help для аргументов нового стиля
[rplidar_composition-1] [INFO] [1726997926.305743382] [rplidar_composition]: RPLIDAR работает на пакете ROS 2 rplidar_ros. Версия SDK: '1.12.0'
[static_transform_publisher-2] [INFO] [1726997926.402724278] [static_transform_publisher]: Вращается до остановки - публикует трансформацию
[static_transform_publisher-2] перевод: ('0.000000', '0.000000', '0.000000')
[static_transform_publisher-2] вращение: ('0.000000', '0.000000', '0.000000', '1.000000')
[static_transform_publisher-2] от 'base_footprint' до 'laser'
[static_transform_publisher-3] [INFO] [1726997926.402725130] [static_transform_publisher_odom]: Вращается до остановки - публикует трансформацию
[static_transform_publisher-3] перевод: ('0.000000', '0.000000', '0.000000')
[static_transform_publisher-3] вращение: ('0.000000', '0.000000', '0.000000', '1.000000')
[static_transform_publisher-3] от 'odom' до 'base_footprint'
[rplidar_composition-1] [INFO] [1726997928.845191442] [rplidar_composition]: RPLIDAR S/N: 73B3ED95C4E493CAA5E69EF0E2634B6E
[rplidar_composition-1] [INFO] [1726997928.845341371] [rplidar_composition]: Версия прошивки: 1.29
[rplidar_composition-1] [INFO] [1726997928.845373094] [rplidar_composition]: Версия аппаратного обеспечения: 7
[rplidar_composition-1] [INFO] [1726997928.848253258] [rplidar_composition]: Статус здоровья RPLidar : '0'
[rplidar_composition-1] [INFO] [1726997928.848555599] [rplidar_composition]: Запуск
[rplidar_composition-1] [INFO] [1726997929.405372516] [rplidar_composition]: текущий режим сканирования: Чувствительность, максимальное расстояние: 12.0 м, количество точек: 7.9K, компенсация угла: 2, переворот оси X: 0

Игнорируйте предупреждение libthrottle_node.so, я пытался создать топик /scan с меньшей частотой (я думал начать с 1/с), чтобы не перегружать мой Pi5, но даже с правильно установленными Ros2 topic_tools и libthrottle_node.so на правильном месте, по какой-то причине у меня продолжает возникать эта ошибка. Если кто-то мог бы помочь мне с этим, это было бы большой помощью.

Терминал 2:

ros2 launch slam_toolbox online_sync_launch.py
[INFO] [launch]: Все файлы журналов можно найти по адресу /home/kookaburra/.ros/log/2024-09-22-15-09-10-479666-kookaburra-desktop-6034
[INFO] [launch]: Уровень логирования по умолчанию установлен на INFO
[INFO] [sync_slam_toolbox_node-1]: процесс запущен с pid [6054]
[sync_slam_toolbox_node-1] [INFO] [1726997951.501227834] [slam_toolbox]: Узел использует размер стека 40000000
[sync_slam_toolbox_node-1] [INFO] [1726997951.522998663] [slam_toolbox]: Настройка
[sync_slam_toolbox_node-1] [INFO] [1726997951.581808183] [slam_toolbox]: Используется плагин решателя solver_plugins::CeresSolver
[sync_slam_toolbox_node-1] [INFO] [1726997951.582326270] [slam_toolbox]: CeresSolver: Используется предобуславливатель SCHUR_JACOBI.
[INFO] [launch.user]: [LifecycleLaunch] Узел Slamtoolbox активируется.
[sync_slam_toolbox_node-1] [INFO] [1726997951.657294195] [slam_toolbox]: Активация
[sync_slam_toolbox_node-1] Регистрация датчика: [Custom Described Lidar]

Терминал 3:

$ ros2 run rviz2 rviz2
[INFO] [1726997966.952009172] [rviz2]: Стерео НЕ ПОДДЕРЖИВАЕТСЯ
[INFO] [1726997966.952122268] [rviz2]: Версия OpenGl: 3.1 (GLSL 1.4)
[INFO] [1726997967.015361690] [rviz2]: Стерео НЕ ПОДДЕРЖИВАЕТСЯ
[INFO] [1726997976.687578020] [rviz2]: Попытка создать карту размером 49 x 57, используя 1 образец
[ERROR] [1726997976.719929643] [rviz2]: rviz/glsl120/indexed_8bit_image.vert
rviz/glsl120/indexed_8bit_image.frag
 Результат связывания GLSL : 
активные семплеры с разными типами ссылаются на одно и то же текстурное изображение

Это часть с ошибкой, когда я открываю Rviz2 и подписываюсь на топик /map, в первую секунду карта начинает формироваться, а затем происходит эта ошибка, и карта перестает обновляться. Я проверил, сканируя топик /scan после сбоя, и он в порядке, проблема в визуализации карты в rviz. Смотрите изображение здесь.

Я выполнил:

export QT_QPA_PLATFORM=xcb
export LIBGL_ALWAYS_SOFTWARE=1

из-за некоторых предложений, которые я прочитал в Интернете, пытаясь отладить эту проблему, но это, похоже, не работает. Я не уверен, что все это важно, но вот параметры slam_toolbox для лидара, так как я слышал, что возможно уменьшение разрешения может помочь с этой проблемой:

slam_toolbox:
  ros__parameters:

    # Параметры плагина
    solver_plugin: solver_plugins::CeresSolver
    ceres_linear_solver: SPARSE_NORMAL_CHOLESKY
    ceres_preconditioner: SCHUR_JACOBI
    ceres_trust_strategy: LEVENBERG_MARQUARDT
    ceres_dogleg_type: TRADITIONAL_DOGLEG
    ceres_loss_function: None

    # Параметры ROS
    odom_frame: odom
    map_frame: map
    base_frame: base_footprint
    scan_topic: /scan # /throttled_scan
    use_map_saver: true
    mode: mapping #localization

    # если вы хотите немедленно начать продолжение карты в заданной позе
    # или в доке, но они взаимно исключающие, если поза указана
    # будет использоваться поза
    #map_file_name: test_steve
    #map_start_pose: [0.0, 0.0, 0.0]
    #map_start_at_dock: true

    debug_logging: false
    throttle_scans: 1
    transform_publish_period: 0.02 #если 0, никогда не публикует одометрию
    map_update_interval: 5.0
    resolution: 0.05
    max_laser_range: 12.0 #для растеризации изображений
    minimum_time_interval: 0.5
    transform_timeout: 0.2
    tf_buffer_duration: 30.
    stack_size_to_use: 40000000 #// программе требуется больший размер стека для сериализации больших карт
    enable_interactive_mode: true

    # Общие параметры
    use_scan_matching: true
    use_scan_barycenter: true
    minimum_travel_distance: 0.5
    minimum_travel_heading: 0.5
    scan_buffer_size: 10
    scan_buffer_maximum_scan_distance: 10.0
    link_match_minimum_response_fine: 0.1  
    link_scan_maximum_distance: 1.5
    loop_search_maximum_distance: 3.0
    do_loop_closing: true 
    loop_match_minimum_chain_size: 10           
    loop_match_maximum_variance_coarse: 3.0  
    loop_match_minimum_response_coarse: 0.35    
    loop_match_minimum_response_fine: 0.45

    # Параметры корреляции - Параметры корреляции
    correlation_search_space_dimension: 0.5
    correlation_search_space_resolution: 0.01
    correlation_search_space_smear_deviation: 0.1 

    # Параметры корреляции - Параметры закрытия петель
    loop_search_space_dimension: 8.0
    loop_search_space_resolution: 0.05
    loop_search_space_smear_deviation: 0.03

    # Параметры сопряжения сканирования
    distance_variance_penalty: 0.5      
    angle_variance_penalty: 1.0    

    fine_search_angle_offset: 0.00349     
    coarse_search_angle_offset: 0.349   
    coarse_angle_resolution: 0.0349        
    minimum_angle_penalty: 0.9
    minimum_distance_penalty: 0.5
    use_response_expansion: true

Я нашел вопрос, аналогичный моему, но на него нет ответов. Ошибка при визуализации карты из Slam_toolbox на Rviz

Ответ или решение

К сожалению, ошибка, с которой вы столкнулись при визуализации карты в RViz2, может быть связана с различными проблемами, включая совместимость библиотек OpenGL и конфигурацию вашего программного обеспечения. Давайте разберем этот вопрос по шагам и попробуем решить вашу проблему.

Шаг 1: Проверка совместимости OpenGL

Судя по выводам из вашего терминала, версия OpenGL, используемая RViz2, это 3.1, что может указывать на потенциальные проблемы с графическим оборудованием Raspberry Pi 5. Убедитесь, что ваша система полностью обновлена и что у вас установлены последние версии драйверов OpenGL.

Для обновления вашей системы выполните следующие команды:

sudo apt update
sudo apt upgrade

Шаг 2: Настройка переменных окружения

Вы уже попробовали установить переменные окружения QT_QPA_PLATFORM=xcb и LIBGL_ALWAYS_SOFTWARE=1, что может помочь в случае с программным рендерингом. Однако стоит попытаться установить их в одном командном блоке перед запуском RViz2, согласовав с дополнительными настройками:

export QT_QPA_PLATFORM=xcb
export LIBGL_ALWAYS_SOFTWARE=1
ros2 run rviz2 rviz2

Шаг 3: Настройка параметров Slam Toolbox

Вы можете попробовать уменьшить разрешение карты, чтобы протестировать, не исчезнет ли ошибка. Напрямую измените параметр resolution:

resolution: 0.1 # превышение 0.05 может создать слишком тяжелые карты

Также рекомендуется изменить параметры map_update_interval и transform_publish_period на более высокие значения, чтобы избежать перегрузки системы при обработке данных:

map_update_interval: 10.0 # или больше
transform_publish_period: 0.5 # или больше

Шаг 4: Отладка с другими графическими драйверами

Если проблема продолжает возникать, рассмотрите возможность использования альтернативных драйверов для графического оборудования. Например, вы можете попробовать установить mesa и изменить драйвер OpenGL:

sudo apt install mesa-utils

После установки перезагрузите устройство.

Шаг 5: Проверка на других устройствах

Если возможно, проведите тестирование на другом Raspberry Pi или с другим графическим оборудованием, чтобы определить, связана ли проблема с конкретным устройством или программным обеспечением.

Шаг 6: Обратитесь к сообществу

Если ни один из вышеуказанных методов не помогает, рекомендуется обратиться к сообществу ROS и разработчикам RViz. Вы можете создать вопрос на ROS Answers с полным описанием проблемы и всеми выполненными шагами.

Заключение

Ошибки, связанные с визуализацией карт в RViz2, могут быть результатом различных факторов — от аппаратного обеспечения и совместимости библиотек до конфигурации параметров программного обеспечения. Попробуйте следовать предложенным шагам и внимательно отслеживайте изменения, чтобы понять, что именно помогает решить вашу проблему.

Оцените материал
Добавить комментарий

Капча загружается...