# Подробнее о colcon

**Colcon** — это основной инструмент для сборки пакетов в ROS 2, созданный для замены `catkin_make` и `catkin_tools` из ROS 1. Он предоставляет гибкие возможности для управления зависимостями, сборки, тестирования и развертывания проектов. Вот ключевые особенности и возможности:

***

#### **1. Основные команды**

**Сборка пакетов**

* `colcon build`\
  Собирает все пакеты в рабочем пространстве.\
  **Популярные опции**:
  * `--packages-select <pkg>`: Собрать только указанные пакеты.

    ```bash
    colcon build --packages-select my_package
    ```
  * `--symlink-install`: Использовать симлинки вместо копирования файлов (удобно для разработки Python-пакетов).
  * `--merge-install`: Объединить все пакеты в одну папку `install` (аналогично `catkin`).
  * `--cmake-args`: Передать аргументы в CMake (например, `-DCMAKE_BUILD_TYPE=Debug`).

**Тестирование**

* `colcon test`\
  Запускает тесты для всех собранных пакетов.
  * `--retest-until-pass <N>`: Повторять упавшие тесты до успеха или достижения лимита попыток.
  * `--pytest-args`: Передать аргументы в `pytest` (например, `-k "test_my_feature"`).

**Анализ зависимостей**

* `colcon list`\
  Показывает список пакетов в рабочем пространстве.

***

#### **2. Поддержка разных типов пакетов**

Colcon работает с:

* **CMake-пакетами** (стандарт для C++).
* **Python-пакетами** (через `ament_python`).
* **Смешанными проектами** (C++ + Python).

Пример структуры пакета:

```
my_package/
├── CMakeLists.txt          # Для C++
├── package.xml             # Метаданные и зависимости
├── setup.py                # Для Python
└── ...
```

***

#### **3. Расширяемость через плагины**

Colcon поддерживает плагины для добавления функциональности:

* `colcon-clean`: Удаляет папки `build`, `install`, `log`.
* `colcon-bundle`: Упаковывает workspace в Docker-образ или архив.
* `colcon-ros`: Интеграция с ROS-специфичными задачами.
* `colcon-lcov`: Генерация отчетов о покрытии кода.

Установка плагина:

```bash
pip install colcon-<plugin_name>
```

***

#### **4. Интеграция с CI/CD**

Colcon легко встраивается в конвейеры сборки:

* Автоматическая установка зависимостей через `rosdep`:

  ```bash
  rosdep install --from-paths src --ignore-src -y
  colcon build
  colcon test
  colcon test-result --verbose
  ```

***

#### **5. Кастомизация сборки**

**Профили сборки**

Создайте файл `colcon.meta` в корне workspace для настройки параметров:

```json
{
  "names": {
    "cmake": {
      "args": ["-DCMAKE_BUILD_TYPE=Release"]
    }
  }
}
```

**Игнорирование пакетов**

Используйте файл `COLCON_IGNORE` в директории пакета, чтобы исключить его из сборки.

***

#### **6. Логирование и отладка**

* Папка `log/` содержит детальные логи сборки и тестов.
* Для отладки используйте флаг `--event-handlers console_direct+`, чтобы видеть вывод в реальном времени:

  ```bash
  colcon build --event-handlers console_direct+
  ```

***

#### **7. Примеры использования**

**Сборка с изоляцией Python-пакетов:**

```bash
colcon build --symlink-install --packages-select my_py_pkg
```

**Запуск тестов для одного пакета:**

```bash
colcon test --packages-select my_pkg
```

**Пересборка после изменений в C++:**

```bash
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Debug --packages-select my_cpp_pkg
```

***

#### **8. Лучшие практики**

1. **Используйте `--symlink-install`** для Python-пакетов, чтобы изменения в коде применялись без пересборки.
2. **Разделяйте workspace** на базовые и overlay, если работаете с несколькими проектами.
3. **Документируйте зависимости** в `package.xml`, чтобы избежать ошибок.
4. **Автоматизируйте тесты** через `colcon test` в CI/CD.

***

#### **Итог**

Colcon — это мощный и гибкий инструмент, который упрощает сборку, тестирование и управление пакетами ROS 2. Его модульная архитектура и поддержка плагинов делают его незаменимым для разработки сложных робототехнических систем.


---

# 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://alice-and-alex-docs.gitbook.io/alice_and_alex_docs/ros2-development/podrobnee-o-colcon.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.
