Попробуем создать собственный пакет и добавить туда первую ноду - программу, которая будет печатать на экране традиционное "Hello, World!". Прежде всего понадобится настроить окружение, т.е. директории, в которых будет лежать пакет. Для этого в новых версиях ROS используется группа программ catkin. Допустим, наш пакет будет лежать в папке my_ros_ws. Тогда для создания окружения нужно выполнить следующие команды:
mkdir -p ~/my_ros_ws/src
cd ~/my_ros_ws/
catkin_make
Первая команда создаёт директории my_ros_ws и src, вторая делает my_ros_src текущей папкой, а третья создаёт само окружение, т.е. заполняет пространство необходимыми файлами и директориями. Команда ls может это подтвердить.
Теперь создадим пакет, который будет называться ros_test, для этого выполним следующие команды:
cd src/
catkin_create_pkg ros_test std_msgs rospy
Первая строка просто позволяет перейти в директорию src, а во второй мы с помощью catkin создаём пакет ros_test и объявляем для него зависимости от пакетов std_msgs (понадобится в дальнейшем для обмена сообщениями) и rospy (для написания программ на Python). Можно не указывать здесь зависимости и выполнить команду
catkin_create_pkg ros_test
В этом случае необходимо вручную дописать их в файл ros_test/package.xml: для пакетов, необходимых во время компиляции, с тегами <build_depend></build_depend>, а во время выполнения - <run_depend></run_depend>.
Вообще, узнать зависимости какого-либо пакета в ROS можно с помощью команд
rospack depends1 имя_пакета
rospack depends имя_пакета
Разница между ними заключается в том, что depends1 находит зависимости только для требуемого пакета, в то время как depends учитывает также зависимости его зависимостей...
Вернёмся к файлу ros_test/package.xml. Можно оставить его без изменений, но хорошим тоном будет внесение информации о пакете и разработчике. Для этого откройте файл в любом текстовом редакторе, можно воспользоваться консольным вариантом, например, nano:
nano ros_test/package.xml
Редактор nano относительно прост в использовании. Навигация осуществляется "стрелками", для сохранения изменений нажмите Ctrl+O и Enter, для выхода - Ctrl+X.
В моём случае после редактирования первая часть файла package.xml выглядит следующим образом.
<name>ros_test</name>
<version>0.0.1</version>
<description>Мой первый пакет в ROS.</description>
<maintainer email="camis.dat@gmail.com>Stas</maintainer>
<license>BSD</license>
Остальное оставляем без изменения.
Теперь создадим первую ноду. Если вы в директории src, перейдите в ros_test:
cd ros_test/
Код на Python должен лежать в папке scripts
mkdir scripts
Создадим файл hello.py в scripts и откроем его в текстовом редакторе. В случае nano:
nano scripts/hello.py
Файл должен содержать следующий текст.
Первая строка здесь говорит оболочке, через какую программу необходимо запускать данный файл. Затем импортируется модуль для взаимодействия с ROS. Основную работу выполняет функция helloWorld(). Сначала мы инициализируем ноду с именем 'hello', а также говорим, что если такое имя уже занято, система может заменить его на что-нибудь другое (anonymous=True). Затем определяется частота, с которой сообщение будет выводиться на экран, в данном случае это 1 Гц, т.е. 1 раз в секунду. Отображение сообщения происходит в цикле с помощью функции rospy.loginfo(), после чего программа "засыпает" на указанное время. Отличие rate.sleep() от стандартной функции sleep() заключается в том, что первая будет поддерживать строго заданную частоту независимо от того, как долго выполнялось тело цикла. Сам цикл будет выполняться, пока нода не получит сигнал об остановке (например, пользователь нажмёт Ctrl+C). Вторая часть программы запускает определённую выше функцию и отслеживает в ней возможные ошибки.
После того, как файл сохранён, нужно сделать его исполняемым:
chmod +x scripts/hello.py
Теперь переходим в корневой каталог нашего окружения и собираем пакет.
cd ~/my_ros_ws/
catkin_make
Если всё прошло успешно, сообщение о сборке будет заканчиваться словами "Configurating done", "Generating done" и т.п. Однако, чтобы ROS узнал о новом пакете, его ещё нужно добавить в список ресурсов
source devel/setup.bash
К сожалению, данная команда распространяется только на текущий терминал, если вы откроете новый, то для работы с пакетом в нём также нужно будет выполнить
source ~/my_ros_ws/devel/setup.bash
Как вариант, можно прописать данную команду в файл .bashrc.
Осталось проверить, работает ли программа. В разных терминалах выполните следующие команды (если вторая выдаст ошибку об отсутствии файла, возможно, вы не прописали ресурсы, либо не сделали файл исполняемым).
roscore
rosrun ros_test hello.py
В результате вы должны увидеть надпись со словами "Hello, World", которая появляется с частотой 1 раз в секунду.
P.S. Ещё несколько слов о редактировании файлов. Для упрощения работы с файлами в ROS имеется команда
rosed имя_пакета имя_файла
которая открывает исходный код в текстовом редакторе. По-умолчанию используется vim, можно поменять настройки в ~/.bashrc. Например, для работы с nano нужно добавить следующую строку:
export EDITOR='nano -w'
P.S. Ещё несколько слов о редактировании файлов. Для упрощения работы с файлами в ROS имеется команда
rosed имя_пакета имя_файла
которая открывает исходный код в текстовом редакторе. По-умолчанию используется vim, можно поменять настройки в ~/.bashrc. Например, для работы с nano нужно добавить следующую строку:
export EDITOR='nano -w'
Комментариев нет:
Отправить комментарий