Занятие № 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/ необходимо расположить файлы исходного кода.
Задание
- Скачать с 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)