This shows you the differences between two versions of the page.
courses:ros:class1 [2018/10/25 19:06] kseniya.diogenova |
courses:ros:class1 [2022/12/10 09:08] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== Занятие № 1. Введение в среду ==== | ||
- | == По завершении занятия студент должен: == | ||
- | * установить среду | ||
- | * уметь писать простые программы, взаимодействующие с ROS | ||
- | |||
- | == Содержание == | ||
- | * Демонстрация примера с использованием rviz | ||
- | * Описание структуры общения node-topic | ||
- | * Описание простой программы Hello world | ||
- | |||
- | == Как написать программу == | ||
- | В первую очередь необходимо создать workspace | ||
- | |||
- | $ mkdir -p ~/<put_your_path_here>/workspace/src | ||
- | $ cd ~/<put_your_path_here>/workspace/src | ||
- | $ catkin_init_workspace | ||
- | | ||
- | После выполнения этой команды создастся только ссылка на CMakeLists.txt, однако, для утилиты catkin это будет означать, что рабочая область определена в дивектории workspace/ | ||
- | После сборки в директории workspace/ появятся папки devel/ и build/ | ||
- | |||
- | Во-вторых, находясь в директории workspace/src/ необходимо создать пакет | ||
- | $ catkin_create_pkg lab1 | ||
- | Дерево файловой системы должно выглядеть следующим образом: | ||
- | | ||
- | workspace/ | ||
- | ┣━━━━src/ | ||
- | ┃ ┣━━━━CMakeLists.txt | ||
- | ┃ ┗━━━━lab1/ | ||
- | ┃ ┣━━━━package.xml | ||
- | ┃ ┣━━━━CMakeLists.txt | ||
- | ┃ ┣━━━━... | ||
- | ┃ ┗━━━━src/ | ||
- | ┃ ┗━━━━... | ||
- | ┣━━━━devel/ | ||
- | ┃ ┗━━━━... | ||
- | ┗━━━━build/ | ||
- | ┗━━━━... | ||
- | |||
- | В папке src/ необходимо расположить файлы исходного кода. | ||
- | |||
- | == Задание == | ||
- | * Скачать с [[https://github.com/anyfilatov/ROS-manuals/tree/master/forLab1|github]] исправления сгенерированных файлов. (Обратите внимание, что заменить необходимо два файла, находящиеся в папке lab1/. CMakeLists, лежащий в workspace/src/ трогать не надо!) | ||
- | * Написать программу, передающую черепашке команду на движение в случайном направлении. Файл с кодом необходимо назвать lab1.cpp и расположить в папке src/ | ||
- | |||
- | == Краткое пояснение к заданию == | ||
- | У объекта класса NodeHandle | ||
- | |||
- | ros::NodeHandle <node_handle_name>; | ||
- | |||
- | есть метод, реализующий механизм отправки сообщений в топик с именем <topic_name>. | ||
- | |||
- | Это делается при помощи команды | ||
- | ros::Publisher <publisher_name> = <node_handle_name>.advertise<msg_type>("<topic_name>",<size>); | ||
- | где <topic_name> это имя топика, через который будут общаться publisher и subscriber; а <size> - размер буфера сообщений (а треугольные скобочки после advertize - это конкретизация шаблонной функции). | ||
- | |||
- | В данном случае имя топика можно получить, узнав, на какой топик подписан turtlesim_node. Тип сообщения можно узнать, выведя информацию о топике. | ||
- | |||
- | Информацию о том, из каких полей состоит сообщение можно узнать командой | ||
- | rosmsg show <msg_type> | ||
- | В тексте программы необходимо создать объект класса <msg_type> и наполнить его содержимым. Информативными являются поля msg.linear.x и msg.angular.z. Остальные поля сообщения не учитываются при обработке. | ||
- | |||
- | После того, как сообщение сформировано, его можно отправить в топик командой | ||
- | <publisher_name>.publish (msg) | ||
- | |