/strl_robotics

STRL Robotics framework for mobile robots

Primary LanguageC++MIT LicenseMIT

strl_robotics - STRL Robotics framework for mobile robots

Структура фреймворка в pdf

0. Системы координат робота

(Владислав Головин)
В данном документе подробно описаны различные системы координат робота и методы перехода между ними.

1. Система координат карты проходимости (occupancy grid), строящейся методом RTabMap

(Андрей Криштопик)
Occupancy grid в rtabmap представлена стандартными сообщениями ros. Подробнее про систему координат occupancy grid можно почитать в google doc’е в разделе “Работа с Occupancy Grid”. Также в папке occupancy_grid_mapping есть папка rtabmap_example, в которой находится скрипт occupancy_grid_demo.py, реализующий работу с occupancy grid. Про этот скрипт написано в том же google doc'е в разделе "Реализация работы с occupancy grid".

2. Переход из системы координат карты в систему координат одометрии (в систему координат baselink робота)

(Андрей Криштопик + Линар Абдразаков + Владислав Головин)
Чтобы получить трансформацию между различными системами координат, можно использовать функцию lookupTransform для C++ или lookup_transform для Python. Пример получения координат робота в мировой системе координат можно посмотреть в скрипте occupancy_grid_demo.py в папке occupancy_grid_mapping/rtabmap_example/scripts в функции get_robot_world_pose.

3. Перевод в систему координат base_link робота для одометрии.

(Линар Абдразаков)
Есть три основных систем координат:

  • map - система координат карты;
  • odom - система координат, относительно которой считается одометрия (совпадает с системой координат base_link при запуске одометрии);
  • base_link - система координат робота.

В сообщениях одометрии хранится трансформация между двумя системами координат (поля frame_id и child_frame_id). Каждый метод одометрии имеет свои системы координат frame_id и child_frame_id, информация о которых не публикуется в топик /tf. Поэтому их нужно привести к общим системам координат так, чтобы frame_id = odom и child_frame_id = base_link. Перевод одометрии в систему координат base_link происходит с использованием пакета [tf_transformer](odometry/odometry_fusion/tf_transformer) , который автоматически запускается вместе с robot_localization.

4. О запуске RTabMap и построения ocupancy grid в multisession режиме

(Андрей Криштопик)
В папке occupancy_grid_mapping есть папка rtabmap_example, в которой находится launch файл для запуска rtabmap и вспомогательные скрипты. Про запуск rtabmap с помощью launch файла из rtabmap_example написано в google doc'е. В этом же google doc'е описана работа в режиме multi-session.

5. О запуске комплексирования данных одометрии

(Линар Абдразаков)
Запуск методов одометрии и их комплексирования описан здесь.
Комплексирование происходит трех видов одометрии: визуальная, лидарная и колесная.
Перед комплексированием каждая одометрия приводится к системе координат base_link (frame_id=odom, child_frame_id=base_link). Изменить конфигурацию комплексирования можно в данном файле. Описание параметров конфигурации можно найти здесь.

6. О планировании движения к цели, заданной на карте

(Владислав Головин)
Планирование движения осуществляется с помощью узлов, находящихся в папке planning. Для постановки задачи планировщику необходимо подать на вход карту проходимости типа nav_msgs/OccupancyGrid, целевую точку geometry_msgs/PoseStamped и локализацию робота - трансформацию geometry_msgs/TransformStamped из tf дерева. На выходе узел выдает траекторию типа geometry_msgs/PoseArray и визуализацию этой траектории visualization_msgs/Marker. Подробнее о работе узла планирования написано здесь.

7. О реализации движения по траектории

(Мухаммад Алхаддад)
Модуль управления обеспечивает высокоуровневый контроллер (high-level control) для мобильного робота с дифференциальным приводом. Он содержит два метода управления роботом - отслеживание пути (Path Following) и отслеживание траектории (Trajectory Tracking). Модуль управления реализован в ROS. Пакеты управления принимают одометрие робота и путь планировщика в качестве входных данных и выдает закон управления линейной и угловой скоростями в качестве выходных данных. Подробнее о узле управления написано здесь.

8. О программном управлении манипулятором

(Константин Миронов)
Инструкция по запуску манипулятора и установке соединения с помощью RTDE и ROS driver: https://drive.google.com/file/d/16oZ_x8Eod7x_Ixsb_DDcYgvkqMCB1I2m/view?usp=sharing Также там описание скриптов set_freedrive и fold_the_robot, которые можно применить, чтобы изменить положение манипулятора вручную (например, если он мешает работе сенсоров), а потом автоматически вернуть манипулятор в исходную позицию. Код, задействующий манипулятор, на Husky лежит в папке Repos/manipulator.

9. Об обнаружении 3D-позы манипулируемых объектов (например, кнопок лифта)

(Сергей Линок)
Сегментация кнопок моделью SOLOv2. Используется 1 нода solo (распознавание на rgb) и данные с карты глубины. Команды для запуска на роботе Husky находятся в docs. Публикуется PoseStamped msg с координатами центра и оринтацией в пространстве. Ориентация в пространстве получена с помощью 3D координат точек вокруг цели.

10. Важная информация о состоянии робота

(Линар Абдразаков)

Основная информация о состоянии робота публикуется в топик /status.

Пример вывода топика /status при питании робота от сети

header:                              
  seq: 28287
  stamp:
    secs: 1614184608
    nsecs: 173392658
  frame_id: ''
uptime: 28330379
ros_control_loop_freq: 9.9974492508
mcu_and_user_port_current: 0.82
left_driver_current: 0.0
right_driver_current: 0.0
battery_voltage: 26.88
left_driver_voltage: 0.0
right_driver_voltage: 0.0
left_driver_temp: 0.0
right_driver_temp: 0.0
left_motor_temp: 0.0
right_motor_temp: 0.0
capacity_estimate: 480
charge_estimate: 1.0
timeout: False
lockout: True
e_stop: True
ros_pause: False
no_battery: True
current_limit: False