Вопрос или проблема
Я запускаю 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, могут быть результатом различных факторов — от аппаратного обеспечения и совместимости библиотек до конфигурации параметров программного обеспечения. Попробуйте следовать предложенным шагам и внимательно отслеживайте изменения, чтобы понять, что именно помогает решить вашу проблему.