This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
courses:ros:class7 [2016/10/24 12:29] anton.filatov |
courses:ros:class7 [2018/11/25 21:18] kalishenko ↷ Page moved from start:ros:class7 to courses:ros:class7 |
||
---|---|---|---|
Line 81: | Line 81: | ||
Следует обратить внимание, что файл model.sdf должен быть скачан до начала работы программы. Для этого можно просто открыть gazebo и попытаться поместить робота pioneer_2dx на плоскость. При этом некоторое время будет происходить скачивание дискриптивных файлов робота, после чего все требуемые файлы появлятся в стандартном каталоге. | Следует обратить внимание, что файл model.sdf должен быть скачан до начала работы программы. Для этого можно просто открыть gazebo и попытаться поместить робота pioneer_2dx на плоскость. При этом некоторое время будет происходить скачивание дискриптивных файлов робота, после чего все требуемые файлы появлятся в стандартном каталоге. | ||
- | После размещения робота в мире его нельзя подписать на какой-то топик, как это было сделано в rviz. Для взаимодействия со всеми объектами gazebo использует один топик **gazebo/set_model_state** | + | После размещения робота в мире его нельзя подписать на какой-то топик, как это было сделано в rviz. Для взаимодействия со всеми объектами gazebo использует один топик **gazebo/set_model_state**. При этом в передаваемом сообщении указывается имя объекта, которому оно адресовано. Из этого следует, что одновременно в мире не может существовать двух объектов с одинаковым именем. Отличие gazebo от rviz в этом моменте заключается в том, что rviz в случае прихода сообщения с просьбой создания объекта с существующим идентификатором создаст новый объект и удалит старый, а gazebo проигнорирует просьбу о создании. |
+ | |||
+ | Управление положением объекта происходит через топик gazebo/set_model_state или через одноимённый сервис. Различие в управлении через топик или через сервис в типе передаваемого сообщения и в наличии или отстутствии подтверждения о приёме сообщения. \\ | ||
+ | Интерес представляет сообщение, которое передаётся в топик gazebo/set_model_state. оно имеет три поля: | ||
+ | * model_name -- имя объекта | ||
+ | * pose -- абсолютное положение робота | ||
+ | * twist -- относительное изменение положения | ||
+ | Следует отметить, что, приняв сообщение с непустыми значениями pose и twist, робот будет использовать только положение pose; twist используется только как справочная информация, например, для лога. | ||
+ | |||
+ | Для того, чтобы представленный выше код заработал, необходимо в CMakeLists.txt добавить зависимость от gazebo: | ||
+ | |||
+ | find_package(catkin REQUIRED COMPONENTS | ||
+ | gazebo_ros | ||
+ | ) | ||
+ | |||
+ | catkin_package( | ||
+ | DEPENDS gazebo_ros | ||
+ | ) | ||
+ | |||
+ | include_directories( | ||
+ | ${catkin_INCLUDE_DIRS} | ||
+ | ${GAZEBO_INCLUDE_DIRS} | ||
+ | ${SDFormat_INCLUDE_DIRS} | ||
+ | ) | ||
+ | |||
+ | В package.xml также необходимо указать build depend и run depend от gazebo_ros. |