User Tools

Site Tools


courses:ros:class4

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
courses:ros:class4 [2016/10/06 09:13]
kkv
courses:ros:class4 [2022/12/10 09:08] (current)
Line 7: Line 7:
 Робот с некоторой периодичностью считывает данные с датчиков лазерных дальномеров. Условимся,​ что у робота есть определённый “угол обзора” (который может равняться 360 градусам),​ внутри которого он сканирует окружения,​ посылая несколько сотен лучей, отстоящих друг от друга на равные углы так, чтобы покрывать весь угол обзора. Таким образом,​ в каждый период робот получает набор значений,​ на каком расстоянии от него находятся некоторые препятствия внутри угла обзора Робот с некоторой периодичностью считывает данные с датчиков лазерных дальномеров. Условимся,​ что у робота есть определённый “угол обзора” (который может равняться 360 градусам),​ внутри которого он сканирует окружения,​ посылая несколько сотен лучей, отстоящих друг от друга на равные углы так, чтобы покрывать весь угол обзора. Таким образом,​ в каждый период робот получает набор значений,​ на каком расстоянии от него находятся некоторые препятствия внутри угла обзора
  
-{{ :start:​ros:​laser_scan_example.png?​600 |}}+{{ courses:​ros:​laser_scan_example.png?​600 |}}
  
 По приходящим “сканам” необходимо строить карту и определять своё положение на ней. Классическим считается алгоритм,​ использующий расширенный фильтр Калмана. \\ По приходящим “сканам” необходимо строить карту и определять своё положение на ней. Классическим считается алгоритм,​ использующий расширенный фильтр Калмана. \\
Line 15: Line 15:
 Погрешность определения препятствия А связана с погрешностью измерительного датчика. Погрешность определения препятствия А связана с погрешностью измерительного датчика.
  
-{{ :start:​ros:​slam_work1.png?​100 |}}+{{ courses:​ros:​slam_work1.png?​100 |}}
  
  - Робот движется относительно этого препятствия. Во время движения у робота накапливается погрешность одометрии (одометрия - это оценка траектории робота,​ основанная на вращении колёс робота). Такая оценка не может быть точной,​ поскольку,​ например,​ заранее не известна прочность сцепления робота с поверхностью,​ по которой он перемещается. Но на данном шаге у робота есть только ​ данные одометрии и положение (вероятнее всего не точное) препятствия А.  - Робот движется относительно этого препятствия. Во время движения у робота накапливается погрешность одометрии (одометрия - это оценка траектории робота,​ основанная на вращении колёс робота). Такая оценка не может быть точной,​ поскольку,​ например,​ заранее не известна прочность сцепления робота с поверхностью,​ по которой он перемещается. Но на данном шаге у робота есть только ​ данные одометрии и положение (вероятнее всего не точное) препятствия А.
  
-{{ :start:​ros:​slam_work2.png?​300 |}}+{{ courses:​ros:​slam_work2.png?​300 |}}
  
  - Робот замечает препятствия B и С. Их положение очень неточно в силу накопившейся погрешности. На этом этапе строится матрица ковариации между всеми найденными препятствиями.  - Робот замечает препятствия B и С. Их положение очень неточно в силу накопившейся погрешности. На этом этапе строится матрица ковариации между всеми найденными препятствиями.
  
-{{ :start:​ros:​slam_work3.png?​300 |}}+{{ courses:​ros:​slam_work3.png?​300 |}}
  
  - Робот возвращается и вновь определяет препятствие А. Погрешность собственного расположения заметно уменьшается. Немного уменьшается погрешность расположения препятствий B и С (поскольку в матрице ковариаций указана оценка ковариаций всех препятствий)  - Робот возвращается и вновь определяет препятствие А. Погрешность собственного расположения заметно уменьшается. Немного уменьшается погрешность расположения препятствий B и С (поскольку в матрице ковариаций указана оценка ковариаций всех препятствий)
  
-{{ :start:​ros:​slam_work4.png?​300 |}}+{{ courses:​ros:​slam_work4.png?​300 |}}
  
  - Робот проводит измерение препятствия В. Теперь погрешность расположения этого препятствия очень мала. Одновременно с этим уменьшается погрешность препятствия С. Теперь карта расположений препятствий А, В и С достаточно точная (если продолжать проделывать этот алгоритм точность будет возрастать). На точной карте можно точно определять собственное положение.  - Робот проводит измерение препятствия В. Теперь погрешность расположения этого препятствия очень мала. Одновременно с этим уменьшается погрешность препятствия С. Теперь карта расположений препятствий А, В и С достаточно точная (если продолжать проделывать этот алгоритм точность будет возрастать). На точной карте можно точно определять собственное положение.
  
-{{ :start:​ros:​slam_work5.png?​300 |}}+{{ courses:​ros:​slam_work5.png?​300 |}}
  
 Самый главный недостаток этого подхода - алгоритмическая сложность. Необходимо строить матрицу ковариации между всеми препятствиями. Логично,​ что если на местности будет N препятствий,​ то размер матрицы будет N x N. На практике такой алгоритм не применим,​ поскольку для его использования необходимо обладать очень высокими вычислительными мощностями (что очень сложно реализовать для небольших роботов). Поэтому существует множество вариантов реализации SLAM. Мы познакомимся ближе с реализацией,​ которая относится к области SLAM, использующего фильтр частиц и носит название tiny SLAM. \\ Самый главный недостаток этого подхода - алгоритмическая сложность. Необходимо строить матрицу ковариации между всеми препятствиями. Логично,​ что если на местности будет N препятствий,​ то размер матрицы будет N x N. На практике такой алгоритм не применим,​ поскольку для его использования необходимо обладать очень высокими вычислительными мощностями (что очень сложно реализовать для небольших роботов). Поэтому существует множество вариантов реализации SLAM. Мы познакомимся ближе с реализацией,​ которая относится к области SLAM, использующего фильтр частиц и носит название tiny SLAM. \\
Line 37: Line 37:
 Допустим,​ на каком-то шаге было предположено,​ что карта имеет такой вид, и мы находимся в таком положении,​ как показано на рисунке Допустим,​ на каком-то шаге было предположено,​ что карта имеет такой вид, и мы находимся в таком положении,​ как показано на рисунке
  
-{{ :start:​ros:​scan_matcher_work1.png?​200 |}} +{{ courses:​ros:​scan_matcher_work1.png?​200 |}} 
  
 На следующем шаге, допустим,​ мы получаем такой скан: На следующем шаге, допустим,​ мы получаем такой скан:
  
-{{ :start:​ros:​scan_matcher_work2.png?​100 |}} +{{ courses:​ros:​scan_matcher_work2.png?​100 |}} 
  
 Далее два положения накладываются друг на друга таким образом,​ чтобы эти два изображения были наиболее “похожими” Далее два положения накладываются друг на друга таким образом,​ чтобы эти два изображения были наиболее “похожими”
  
-{{ :start:​ros:​scan_matcher_work3.png?​200 |}} +{{ courses:​ros:​scan_matcher_work3.png?​200 |}} 
  
 И далее модифицируется представление о карте И далее модифицируется представление о карте
  
-{{ :start:​ros:​scan_matcher_work4.png?​200 |}} +{{ courses:​ros:​scan_matcher_work4.png?​200 |}} 
  
 Полное представление о существующей реализации алгоритма tiny SLAM в ROS можно увидеть по ссылке http://​wiki.ros.org/​tiny_slam. Там же есть ссылка на github-репозиторий,​ где можно ознакомиться ​ с исходным кодом. Настоятельно рекомендуется познакомиться с этим проектом,​ поскольку в некоторых главах мы будем ссылаться на решения,​ реализованные в этом проекте. Полное представление о существующей реализации алгоритма tiny SLAM в ROS можно увидеть по ссылке http://​wiki.ros.org/​tiny_slam. Там же есть ссылка на github-репозиторий,​ где можно ознакомиться ​ с исходным кодом. Настоятельно рекомендуется познакомиться с этим проектом,​ поскольку в некоторых главах мы будем ссылаться на решения,​ реализованные в этом проекте.
courses/ros/class4.1475745195.txt.gz · Last modified: 2022/12/10 09:08 (external edit)