> For the complete documentation index, see [llms.txt](https://copter-space.gitbook.io/uchebnik-mashinnoe-zrenie-tom-2/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://copter-space.gitbook.io/uchebnik-mashinnoe-zrenie-tom-2/razdel-3/zapusk-publikacii-izobrazhenii-s-kamery-s-pomoshyu-paketa-ros.md).

# Запуск публикации изображений с камеры с помощью пакета ROS

&#x20;Запуск пакетов ROS из командной строки не удобен по ряду причин: командную строку долго набирать с клавиатуры, в ней неудобно настраивать параметры, командная строка не запускается сама при старте системы. Поэтому далее мы выполним создание собственного учебного пакета ROS zuza, в рамках которого будем запускать автоматически публикацию изображений с камеры, а также вести дальнейшие разработки для создания системы автономной навигации.

ROS пакет создаётся с помощью системы **catkin** – официальной системы компиляции/сборки пакетов **ROS** (на момент написания учебного пособия). В catkin используются макросы cmake и скрипты Python для реализации дополнительного функционала поверх системы cmake (<https://ru.wikipedia.org/wiki/CMake> ). Работа catkin похожа на cmake, но в catkin добавлен автоматический поиск пакетов и возможность одновременной сборки нескольких взаимосвязанных проектов. Подробно концепция системы сборки catkin описана на странице <http://wiki.ros.org/catkin/conceptual_overview> .

Для создания catkin пакета нужно создать рабочую область в каталоге пользователя:

```
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
```

&#x20;Команда **catkin\_make** – инструмент для работы с рабочими областями catkin (англ. catkin workspaces). После первого выполнения она создаёт ссылку на файл **CMakeLists.txt** в каталоге src, а также создаёт каталоги **‘build**’ и **‘devel’**. Внутри каталога devel находятся несколько предустановочных скриптов, которые настраивают системные переменные для нашей рабочей области. Нужно запустить соответствующий установочный файл с помощью команды source:

```
source devel/setup.bash
```

&#x20;Чтобы проверить правильность инициализации переменных окружения установочным скриптом, убедитесь, что переменная окружения ROS\_PACKAGE\_PATH включает в себя текущий каталог, в котором Вы находитесь:

```
echo $ROS_PACKAGE_PATH
/home/pi/catkin_ws/src:/opt/ros/kinetic/share
```

&#x20;Далее мы переходим к созданию ROS пакета. Каждый catkin пакет должен соответствовать нескольким условиям:

* Содержать в себе файл с описанием пакета package.xml соответствующего формата;
* Содержать в себе файл CMakeLists.txt, который будет использовать система сборки catkin;
* Каждый пакет должен храниться в своём собственном каталоге.

Создание пакета производится с помощью команд:

```
cd ~/catkin_ws/src
catkin_create_pkg zuza std_msgs rospy roscpp
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash
```

Данные команды создадут и соберут пустой catkin пакет в указанном каталоге (в нашем примере – **catkin\_ws**).

Для того чтобы пакеты в catkin\_ws были доступны сразу при запуске сеанса, нужно добавить строчку в файл **.bashrc**:

```
source /home/pi/catkin_ws/devel/setup.bash
```

&#x20;Создадим launch-файл **zuza.launch** для старта пакета cv\_camera в каталоге **\~/catkin\_ws/src/zuza/launch** , следующего содержания:

```
<launch>
	<!-- main nodelet manager -->
    <node pkg="nodelet" type="nodelet" name="nodelet_manager" args="manager" output="screen" clear_params="true">
        <param name="num_worker_threads" value="4"/>
    </node>

	<!-- camera node - настройка публикации изображения с помощью модуля cv_camera -->
	<node pkg="nodelet" type="nodelet" name="main_camera" args="load cv_camera/CvCameraNodelet nodelet_manager" clear_params="true">
        <param name="frame_id" value="main_camera_optical"/>
        <param name="camera_info_url" value="file://$(find zuza)/camera_info/fe130_320_01.yaml"/>
		<!-- setting camera FPS -->
        <param name="rate" value="100"/>
        <param name="cv_cap_prop_fps" value="40"/> 
        <param name="image_width" value="640"/>
        <param name="image_height" value="480"/>
    </node>
</launch>
```

&#x20;Данный файл описывает параметры запуска модулей nodelet (<http://wiki.ros.org/nodelet> ) и cv\_camera (<http://wiki.ros.org/cv_camera>) в режиме нодлета с указанными параметрами. Пакет nodelet является механизмом запуска разных алгоритмов внутри одного процесса с передачей массивов данных по ссылке (без копирования) между этими алгоритмами.

Запуск нашего пакета на выполнение осуществляется с помощью команды&#x20;

```
roslaunch zuza zuza.launch.
```

Проверить работу пакета можно с помощью утилит командной строки (rostopic list и прочих), a также с помощью программы image\_view:

```
rosrun image_view image_view image:=/main_camera/image_raw
```

&#x20;Подробно про создание и запуск ROS пакетов можно прочитать по ссылке: <http://wiki.ros.org/ROS/Tutorials/catkin/CreatingPackage>

После успешного запуска работы камеры через ROS можно приступать к калибровке камеры.
