User Tools

Site Tools


courses:ros:class4

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

courses:ros:class4 [2018/11/25 21:18]
kalishenko ↷ Page moved from start:ros:class4 to courses:ros:class4
courses:ros:class4 [2022/12/10 09:08]
Line 1: Line 1:
-=== Занятие № 4. SLAM === 
  
-Одной из наиболее востребованных проблем в робототехнике является локация робота. У этой задачи есть множество различных вариантов:​ локация на известной карте или на неизвестной;​ с использованием GPS или без него; с оснащением робота датчиками,​ считывающими информацию об окружающей среде, или разрешив ему пользоваться только данными,​ поступающими от его колёс, и так далее. \\ 
-Разберёмся в одной из задач, связанных с локализацией:​ Одновременная Локализаци и Построение Карты (Simultanious Localization And Mapping - SLAM). То есть задача формулируется таким образом,​ что строить карту местности и определять собственное положение на ней необходимо одновременно. Будем рассматривать роботов,​ которые оснащены датчиками,​ считывающими информацию об окружающей среде (условимся,​ что это будет лазерный дальномер). \\ 
-Такая задача может вставать в различных областях,​ где применяются роботы:​ начиная от роботов-пылесосов и заканчивая автономными марсоходами или роботами-исследователями морского дна. 
-Итак, опишем подробно и чётко задачу. \\ 
-Робот с некоторой периодичностью считывает данные с датчиков лазерных дальномеров. Условимся,​ что у робота есть определённый “угол обзора” (который может равняться 360 градусам),​ внутри которого он сканирует окружения,​ посылая несколько сотен лучей, отстоящих друг от друга на равные углы так, чтобы покрывать весь угол обзора. Таким образом,​ в каждый период робот получает набор значений,​ на каком расстоянии от него находятся некоторые препятствия внутри угла обзора 
- 
-{{ :​start:​ros:​laser_scan_example.png?​600 |}} 
- 
-По приходящим “сканам” необходимо строить карту и определять своё положение на ней. Классическим считается алгоритм,​ использующий расширенный фильтр Калмана. \\ 
-Чтобы не вдаваться в глубокое математическое описание алгоритма,​ опишем кратко,​ как он работает:​ 
- - Робот только начинает движение. Никаких знаний о карте у него нет. 
- - Робот замечает и определяет первое “препятствие”. В контексте задачи EKF SLAM мы оперируем не со всем сканом,​ а выделяем из него особые точки (препятствия или фичи). \\ 
-Погрешность определения препятствия А связана с погрешностью измерительного датчика. 
- 
-{{ :​start:​ros:​slam_work1.png?​100 |}} 
- 
- - Робот движется относительно этого препятствия. Во время движения у робота накапливается погрешность одометрии (одометрия - это оценка траектории робота,​ основанная на вращении колёс робота). Такая оценка не может быть точной,​ поскольку,​ например,​ заранее не известна прочность сцепления робота с поверхностью,​ по которой он перемещается. Но на данном шаге у робота есть только ​ данные одометрии и положение (вероятнее всего не точное) препятствия А. 
- 
-{{ :​start:​ros:​slam_work2.png?​300 |}} 
- 
- - Робот замечает препятствия B и С. Их положение очень неточно в силу накопившейся погрешности. На этом этапе строится матрица ковариации между всеми найденными препятствиями. 
- 
-{{ :​start:​ros:​slam_work3.png?​300 |}} 
- 
- - Робот возвращается и вновь определяет препятствие А. Погрешность собственного расположения заметно уменьшается. Немного уменьшается погрешность расположения препятствий B и С (поскольку в матрице ковариаций указана оценка ковариаций всех препятствий) 
- 
-{{ :​start:​ros:​slam_work4.png?​300 |}} 
- 
- - Робот проводит измерение препятствия В. Теперь погрешность расположения этого препятствия очень мала. Одновременно с этим уменьшается погрешность препятствия С. Теперь карта расположений препятствий А, В и С достаточно точная (если продолжать проделывать этот алгоритм точность будет возрастать). На точной карте можно точно определять собственное положение. 
- 
-{{ :​start:​ros:​slam_work5.png?​300 |}} 
- 
-Самый главный недостаток этого подхода - алгоритмическая сложность. Необходимо строить матрицу ковариации между всеми препятствиями. Логично,​ что если на местности будет N препятствий,​ то размер матрицы будет N x N. На практике такой алгоритм не применим,​ поскольку для его использования необходимо обладать очень высокими вычислительными мощностями (что очень сложно реализовать для небольших роботов). Поэтому существует множество вариантов реализации SLAM. Мы познакомимся ближе с реализацией,​ которая относится к области SLAM, использующего фильтр частиц и носит название tiny SLAM. \\ 
-Особенность этого алгоритма в том, что когда приходит новый скан, начинает свою работу скан-матчер,​ который,​ использует новый скан и уже построенную карту. Скан-матчер пытается наложить новый скан на уже сформированную карту так, чтобы в результате наложения получилось как можно больше совпадений. \\ 
-Допустим,​ на каком-то шаге было предположено,​ что карта имеет такой вид, и мы находимся в таком положении,​ как показано на рисунке 
- 
-{{ :​start:​ros:​scan_matcher_work1.png?​200 |}}  
- 
-На следующем шаге, допустим,​ мы получаем такой скан: 
- 
-{{ :​start:​ros:​scan_matcher_work2.png?​100 |}}  
- 
-Далее два положения накладываются друг на друга таким образом,​ чтобы эти два изображения были наиболее “похожими” 
- 
-{{ :​start:​ros:​scan_matcher_work3.png?​200 |}}  
- 
-И далее модифицируется представление о карте 
- 
-{{ :​start:​ros:​scan_matcher_work4.png?​200 |}}  
- 
-Полное представление о существующей реализации алгоритма tiny SLAM в ROS можно увидеть по ссылке http://​wiki.ros.org/​tiny_slam. Там же есть ссылка на github-репозиторий,​ где можно ознакомиться ​ с исходным кодом. Настоятельно рекомендуется познакомиться с этим проектом,​ поскольку в некоторых главах мы будем ссылаться на решения,​ реализованные в этом проекте. 
- 
- 
-=== Links === 
- 
-  * [[https://​www.youtube.com/​playlist?​list=PLgnQpQtFTOGQrZ4O5QzbIHgl3b1JHimN_|Cyrill Stachniss course]] 
courses/ros/class4.txt · Last modified: 2022/12/10 09:08 (external edit)