This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
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] (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-репозиторий, где можно ознакомиться с исходным кодом. Настоятельно рекомендуется познакомиться с этим проектом, поскольку в некоторых главах мы будем ссылаться на решения, реализованные в этом проекте. |