This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
courses:ros:lab3 [2016/09/15 13:50] anton.filatov |
courses:ros:lab3 [2022/12/10 09:08] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
==== Задание ==== | ==== Задание ==== | ||
- | Смодулировать на rviz работу радиолокатора: на вход программе подаётся в любом виде окружающая местность, необходимо отражать её в rviz "по кругу", как в радиолокаторе | + | Робот потерялся и не может найти точку выхода. В эфир он посылает сообщения о собственныых координатах. Ему на помощь из точки выхода выдвинулся второй робот. Второй робот должен добраться до первого. Как только их координаты совпадут - второй робот начинает следовать к выходу - точке, откуда он начал своё движение. Первый робот начинает движение за вторым. Процесс заканчивается, когда оба робота достигают точки выхода. \\ |
+ | (Усложнение) Потерявшийся робот мечется в пространстве, пока до него добирается второй робот. | ||
==== Указание ==== | ==== Указание ==== | ||
- | В rviz можно писать различные типы сообщений, которые уже описаны за нас (не надо каждый раз строить велосипед из маркеров-точек). Полный список и описание поддерживаемых сообщений можно найти [[http://wiki.ros.org/rviz/DisplayTypes| на вики]]. | ||
- | Так, например, карту можно отображать при помощи сообщения nav_msgs/OccupancyGrid. | ||
- | Из чего состоит сообщение можно узнать при помощи команды | ||
- | rosmsg show nav_msgs/OccupancyGrid | ||
- | | ||
- | int8[] data - это std::vector<int8> занятости ячеек. Если карта размером 10х100, то в этом векторе должно быть 1000 значений. Значения должны быть либо в диапазоне от 0(ячейка свободна) до 100(ячейка занята), либо -1, если ячейка не является информативной частью карты. | ||
- | запущенную ноду rviz необходимо подписать на топик, куда передаётся заполненное сообщение | + | В rviz можно писать различные типы сообщений, которые уже описаны за нас (не надо каждый раз строить велосипед из маркеров-точек). Полный список и описание поддерживаемых сообщений можно найти [[http://wiki.ros.org/rviz/DisplayTypes| на вики]]. \\ |
- | При посылке очередного сообщения карта перерисовывается заново, то есть правильным будет создать изменяющийся во времени объект "карта" и через какие-то интервалы времени отсылать его в rviz | + | Так, например, сферу можно создать так: |
- | {{:start:ros:rviz_map.png|}} | + | |
+ | visualization_msgs::Marker marker; | ||
+ | marker.type = visualization_msgs::Marker::SPHERE; | ||
+ | |||
+ | Если в тот же топик послать маркер с тем же id, но с другими координатами, то rviz сотрёт старый маркер и нарисует новый в новых координатах. | ||
+ | |||
+ | В целом структуру программы можно описать так: в tf попадают и координаты потерявшегося робота и робота-помощника. По координатам потерявшегося робота помощник определяет направление движения и движется вдоль этого направления. Как только помощник достигает своей цели, происходит два события: помощник начинает движение к выходу, а потерявшийся робот едет вслед за помощником. (Понятно, что помощник всё ещё должен посылать в эфир собственные координаты, чтобы потерявшийся робот знал, куда ехать) |