Skip to content
dkaznacheev edited this page Jun 12, 2017 · 7 revisions

Проект по C++ СПбАУ 1 курс, Казначеев Дмитрий

Проект №1: rviz::MessageFilterDisplay has a hardcoded subscriber queue size #1035
Ссылка на pull request

Постановка цели и задач:

Цель

Избавиться от hardcoded параметра в классе rviz::MessageFilterDisplay.
Класс MessageFilterDisplay- базовый класс для всех плагинов визуализации робота, датчиков, системы координат и окружения в программе rviz.
Виды дисплеев в rviz
В его функционал входит сбор данных с помощью rviz::Subscriber и хранение их в очереди для последующей обработки.
Изначально размер очереди был строго задан числом 10 в коде, поставленная задача — параметризовать его.

Поставленные и решенные задачи

  1. Разобраться в устройстве классов tf::MessageFilter и rviz::Subscriber — классов, задействующих hardcoded параметр размера очереди.
  2. Использовать стандартную систему хранения и передачи параметров, принятую в проекте, чтобы решить первоначальную проблему.
  3. Проверить наследников класса MessageFilterDisplay (то есть каждый плагин визуализации), и исправить проблемы с совместимостью.
  4. Добавить свои тесты, проверяющие корректное задание параметра, в существующий набор тестов для rviz.

Описание готового решения:

  • В файле src/rviz/message_filter_display.h создан параметр queue_size_property_ вида IntProperty, и добавлена функция, вызываемая при обновлении размера очереди. Также параметр, который был задан вручную, теперь запрашивает метод getInt() у объекта-параметра.
  • В файле src/rviz/default_plugin/effort_display.h также добавлена поддержка параметра размера очереди.
  • В директории src/test добавлен набор тестов queue_size_test.cpp
  • В src/test/CMakeList.txt добавлены тесты queue_size_test

Сборка и тестирование

Первоначальная сборка:

  1. Установить ROS из исходников на сайте ros.org (инструкция)
  2. В созданном workspace заменить содержимое папки src/rviz/src/ на содержимое этого репозитория (в формате pull request подразумевается, что файлы из этого репозитория уже включены в проект)
  3. Собрать проект:
    ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release
  4. Настроить workspace:
    source ~/%WORKSPACE%/install_isolated/setup.bash

Сборка rviz и тестирование:

  1. Отдельно собрать rviz:
    catkin_make -DCATKIN_WHITELIST_PACKAGES="rviz"
  2. Запустить тесты:
    catkin_make run_tests_rviz

За тестирование длины очереди отвечает пакет тестов QueueSizeProperty.
Результаты тестов можно найти:

  • В логах тестирования в консоли
  • В файле~/%WORKSPACE%/build/test_results/rviz/gtest-queue_size_test.xml