# Запуск публикации изображений с камеры с помощью пакета 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 можно приступать к калибровке камеры.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://copter-space.gitbook.io/uchebnik-mashinnoe-zrenie-tom-2/razdel-3/zapusk-publikacii-izobrazhenii-s-kamery-s-pomoshyu-paketa-ros.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
