Занятие № 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)