Добавлена документация по CLI-командам, конфигурации системы, управлению через Foxglove Studio и REST API, а также инструкции по установке и удалённому доступу к серверу. Включены разделы о настройке SunriseWorkbench для работы с реальным роботом KUKA LBR IIWA 7.
This commit is contained in:
@@ -0,0 +1,165 @@
|
|||||||
|
# CLI-команды cobot
|
||||||
|
|
||||||
|
`cobot` — единая точка входа для управления всем проектом. Все операции с роботом, симулятором, Docker-контейнерами и документацией выполняются через эту команду.
|
||||||
|
|
||||||
|
## Справка
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cobot -h
|
||||||
|
```
|
||||||
|
|
||||||
|
Вывод справки разделён на 4 группы команд:
|
||||||
|
|
||||||
|
- **Setup commands** — настройка системы
|
||||||
|
- **Run commands** — запуск проекта
|
||||||
|
- **Build commands** — сборка ROS 2
|
||||||
|
- **Management commands** — управление пакетом
|
||||||
|
|
||||||
|
Некоторые команды имеют собственные подкоманды. Пример:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cobot doc-setup rebuild # подкоманда rebuild для doc-setup
|
||||||
|
cobot doc-setup --help # справка по подкомандам конкретной команды
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Setup commands
|
||||||
|
|
||||||
|
Команды первичной и повторной настройки системы.
|
||||||
|
|
||||||
|
### `cobot setup`
|
||||||
|
|
||||||
|
Мастер-команда первого запуска. Последовательно вызывает все `*-setup` команды по очереди: настраивает документацию, среду выполнения и параметры робота.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cobot setup
|
||||||
|
```
|
||||||
|
|
||||||
|
Используйте эту команду при первой установке вместо ручного запуска каждой setup-команды.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `cobot local-setup`
|
||||||
|
|
||||||
|
Локальная установка ROS 2 Jazzy без Docker: скачивает зависимости через `rosdep`, собирает workspace через `colcon`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cobot local-setup
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
После выполнения обязательно выполните `source ~/.bashrc` или откройте новый терминал.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `cobot docker-setup`
|
||||||
|
|
||||||
|
Сборка или скачивание готовых Docker-образов для запуска проекта в изоляции. Доступны два варианта:
|
||||||
|
|
||||||
|
- **Сборка из Dockerfile** — дольше, но даёт актуальную версию
|
||||||
|
- **Скачивание готового образа** — быстрее, использует pre-built образ
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cobot docker-setup
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `cobot doc-setup`
|
||||||
|
|
||||||
|
Разворачивает локальный MkDocs-сервер документации — полную копию [онлайн-документации](https://daniel-robotics.gitverse.site/lightweight-cobot/).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cobot doc-setup # запустить / собрать документацию
|
||||||
|
cobot doc-setup rebuild # пересобрать документацию
|
||||||
|
```
|
||||||
|
|
||||||
|
После запуска документация будет доступна по адресу `http://localhost:8000`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `cobot robot-setup`
|
||||||
|
|
||||||
|
Интерактивный мастер настройки файла `cobot-setting.yaml`. Запрашивает IP-адрес робота, порт FRI, активный инструмент и другие параметры.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cobot robot-setup
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! tip
|
||||||
|
Используйте именно эту команду для изменения конфигурации — она валидирует введённые значения и исключает синтаксические ошибки. Подробнее о параметрах — в разделе [Конфигурация системы](configuration.md).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Run commands
|
||||||
|
|
||||||
|
### `cobot run`
|
||||||
|
|
||||||
|
Запускает весь стек: hardware interface, MoveIt 2, RViz и опциональные компоненты (Foxglove, REST API). При запуске предлагает выбор:
|
||||||
|
|
||||||
|
- **Docker или локально**
|
||||||
|
- **Симулятор (Webots) или реальный робот**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cobot run # интерактивный выбор режима
|
||||||
|
cobot run --simulate # принудительно запустить симулятор
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Build commands
|
||||||
|
|
||||||
|
### `cobot rebuild`
|
||||||
|
|
||||||
|
Пересборка ROS 2 workspace через `colcon`. Используется при изменении исходного кода пакетов.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cobot rebuild
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
Работает только для локальной установки (не Docker). Эквивалент `colcon build --mixin release`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `cobot clean`
|
||||||
|
|
||||||
|
Удаляет сгенерированные папки сборки. Предлагает выбор, какие именно удалить:
|
||||||
|
|
||||||
|
- `build/` — артефакты компиляции
|
||||||
|
- `install/` — установленные файлы пакетов
|
||||||
|
- `log/` — логи сборки
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cobot clean
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Management commands
|
||||||
|
|
||||||
|
### `cobot update`
|
||||||
|
|
||||||
|
Скачивает последнюю версию проекта с GitVerse и переустанавливает CLI `cobot`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cobot update
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `cobot delete`
|
||||||
|
|
||||||
|
Удаляет компоненты проекта с системы. Предложит выбор: удалить только проект, Docker-образы и контейнеры, или также ROS 2.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cobot delete
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! danger
|
||||||
|
Операция необратима. Удалённые файлы и Docker-образы потребуют повторной установки.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Следующий шаг:** [Конфигурация системы](configuration.md)
|
||||||
@@ -0,0 +1,174 @@
|
|||||||
|
# Конфигурация системы
|
||||||
|
|
||||||
|
## Главный конфигурационный файл
|
||||||
|
|
||||||
|
Все параметры системы хранятся в одном файле — **`cobot-setting.yaml`** в корне проекта.
|
||||||
|
Это единственный источник истины для IP-адреса робота, портов, путей к конфигам, настроек планировщика и веб-сервера.
|
||||||
|
|
||||||
|
!!! danger "Не редактируйте файл вручную"
|
||||||
|
Используйте только команду `cobot robot-setup` — интерактивный мастер валидирует значения и не допускает синтаксических ошибок. Ручное редактирование YAML может привести к ошибкам парсинга и невозможности запуска системы.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cobot robot-setup
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Блок `robot` — параметры робота
|
||||||
|
|
||||||
|
Отвечает за соединение с физическим контроллером KUKA по протоколу FRI.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
robot:
|
||||||
|
name: "iiwa7"
|
||||||
|
ip: "192.170.10.2"
|
||||||
|
port: 30200
|
||||||
|
fri_cycle_ms: 10
|
||||||
|
joint_position_tau: 0.04
|
||||||
|
joint_velocity_tau: 0.01
|
||||||
|
active_controller: "jtc"
|
||||||
|
description: pkg://iiwa_description/urdf/iiwa7.urdf.xacro
|
||||||
|
```
|
||||||
|
|
||||||
|
| Параметр | Описание | Рекомендации |
|
||||||
|
|---|---|---|
|
||||||
|
| `name` | Модель робота | Не менять — `iiwa7` |
|
||||||
|
| `ip` | IP-адрес контроллера KUKA | **Изменить** на реальный IP вашего контроллера |
|
||||||
|
| `port` | UDP-порт FRI | По умолчанию `30200` — менять только при конфликте портов |
|
||||||
|
| `fri_cycle_ms` | Период цикла FRI: `5` мс = 200 Гц, `10` мс = 100 Гц | `10` для стабильной работы, `5` для высокоточных задач |
|
||||||
|
| `joint_position_tau` | EMA-фильтр позиций [с] — сглаживает команды перед отправкой | Уменьшать для более быстрой реакции, увеличивать при вибрациях |
|
||||||
|
| `joint_velocity_tau` | EMA-фильтр скорости [с] — убирает выбросы конечных разностей | Аналогично `joint_position_tau` |
|
||||||
|
| `active_controller` | Режим управления: `jtc` (MoveIt / JointTrajectory) или `forward` (прямое управление) | `jtc` для большинства задач |
|
||||||
|
| `description` | Путь к URDF-описанию робота | Не менять |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Блок `digital_twin` — симулятор
|
||||||
|
|
||||||
|
Настройки виртуальной среды Webots и визуализации в RViz.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
digital_twin:
|
||||||
|
webots:
|
||||||
|
world: pkg://iiwa_description/worlds/iiwa.wbt
|
||||||
|
transform: "-0.25 0 0.79"
|
||||||
|
rotation: "0 0 1 0"
|
||||||
|
controller_timer: "50"
|
||||||
|
cameras:
|
||||||
|
- pkg://iiwa_config/config/cameras/d455_top.yaml
|
||||||
|
rviz:
|
||||||
|
config: pkg://iiwa_config/config/rviz/rviz_moveit.rviz
|
||||||
|
```
|
||||||
|
|
||||||
|
| Параметр | Описание |
|
||||||
|
|---|---|
|
||||||
|
| `webots.world` | Путь к `.wbt`-миру симулятора |
|
||||||
|
| `webots.transform` | Смещение базы робота в мире `[x y z]` в метрах |
|
||||||
|
| `webots.rotation` | Ориентация базы `[x y z угол]` в радианах |
|
||||||
|
| `webots.cameras` | Список YAML-конфигов подключённых камер |
|
||||||
|
| `rviz.config` | Путь к конфигурации RViz |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Блок `tool` — активный инструмент
|
||||||
|
|
||||||
|
Указывает, какой захват или инструмент закреплён на роботе.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
tool:
|
||||||
|
active: "patron"
|
||||||
|
```
|
||||||
|
|
||||||
|
| Значение | Описание |
|
||||||
|
|---|---|
|
||||||
|
| `none` | Без инструмента |
|
||||||
|
| `patron` | Захват «Patron» (патрон) |
|
||||||
|
|
||||||
|
Список доступных инструментов находится в файле `src/iiwa_config/config/tools.yaml`. Для добавления нового инструмента необходимо описать его там, после чего указать имя в `tool.active`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Блок `planning` — планирование движений
|
||||||
|
|
||||||
|
Параметры MoveIt 2 и конфигурации траекторного планировщика.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
planning:
|
||||||
|
pose_link: "tcp"
|
||||||
|
planning_group: "iiwa_arm"
|
||||||
|
default_frame: "base_link"
|
||||||
|
default_planner: "ompl"
|
||||||
|
planning_attempts: 3
|
||||||
|
```
|
||||||
|
|
||||||
|
| Параметр | Описание | Рекомендации |
|
||||||
|
|---|---|---|
|
||||||
|
| `pose_link` | TCP-линк для декартовых целей | Соответствует фрейму в URDF — не менять без изменения URDF |
|
||||||
|
| `planning_group` | Группа планирования из SRDF | Не менять — `iiwa_arm` |
|
||||||
|
| `default_frame` | Система отсчёта по умолчанию | Не менять — `base_link` |
|
||||||
|
| `default_planner` | Планировщик: `ompl`, `pilz_industrial_motion_planner` | `ompl` — универсальный; `pilz` — для предсказуемых траекторий |
|
||||||
|
| `planning_attempts` | Число попыток планирования при неудаче | Увеличивать при сложных траекториях |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Блок `web` — REST API и MCP-сервер
|
||||||
|
|
||||||
|
FastAPI-сервер для управления роботом через HTTP и MCP (интеграция с AI-агентами).
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
web:
|
||||||
|
enabled: true
|
||||||
|
host: "0.0.0.0"
|
||||||
|
port: 8007
|
||||||
|
endpoints: pkg://iiwa_config/config/api_endpoints.yaml
|
||||||
|
joint_limits: pkg://iiwa_config/config/moveit/joint_limits.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
| Параметр | Описание |
|
||||||
|
|---|---|
|
||||||
|
| `enabled` | Включить (`true`) или отключить (`false`) веб-сервер |
|
||||||
|
| `host` | Адрес прослушивания: `0.0.0.0` — все интерфейсы, `127.0.0.1` — только локально |
|
||||||
|
| `port` | Порт HTTP API (по умолчанию `8007`) |
|
||||||
|
| `endpoints` | Путь к описанию REST-эндпоинтов |
|
||||||
|
| `joint_limits` | Путь к файлу ограничений суставов для валидации команд |
|
||||||
|
|
||||||
|
После запуска REST API доступен по адресу `http://<host>:8007`, MCP — по пути `/mcp`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Блок `foxglove` — мониторинг через Foxglove Studio
|
||||||
|
|
||||||
|
[Foxglove Studio](https://foxglove.dev/) — инструмент визуализации и мониторинга ROS 2 топиков в реальном времени.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
foxglove:
|
||||||
|
enabled: true
|
||||||
|
port: 8765
|
||||||
|
debug: false
|
||||||
|
address: 0.0.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
| Параметр | Описание |
|
||||||
|
|---|---|
|
||||||
|
| `enabled` | Включить или отключить Foxglove Bridge |
|
||||||
|
| `port` | WebSocket-порт для подключения Foxglove Studio (по умолчанию `8765`) |
|
||||||
|
| `debug` | Подробное логирование bridge-процесса |
|
||||||
|
| `address` | Адрес прослушивания WebSocket |
|
||||||
|
|
||||||
|
Остальные параметры блока (`tls`, `topic_whitelist`, `min_qos_depth` и др.) относятся к продвинутой конфигурации и в большинстве случаев менять их не требуется.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Что менять, что оставить
|
||||||
|
|
||||||
|
| | Параметр | Действие |
|
||||||
|
|---|---|---|
|
||||||
|
| ✅ | `robot.ip` | **Обязательно изменить** на IP вашего контроллера |
|
||||||
|
| ✅ | `robot.fri_cycle_ms` | Выбрать `10` (стандарт) или `5` (высокая частота) |
|
||||||
|
| ✅ | `tool.active` | Указать активный инструмент |
|
||||||
|
| ✅ | `web.enabled` | Выключить (`false`), если веб-интерфейс не нужен |
|
||||||
|
| ⚠️ | `robot.active_controller` | Менять только при намеренном переключении режима управления |
|
||||||
|
| ⚠️ | `planning.*` | Менять при необходимости другого планировщика или параметров |
|
||||||
|
| ❌ | `robot.description` | Не трогать — путь к URDF |
|
||||||
|
| ❌ | `controller.moveit.*` | Не трогать — пути к конфигам MoveIt внутри пакетов |
|
||||||
|
| ❌ | `digital_twin.webots.world` | Не трогать без знания структуры Webots-миров |
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# Управление через Foxglove Studio
|
||||||
|
|
||||||
|
!!! info "Раздел в разработке"
|
||||||
|
Подробная документация по управлению и мониторингу через Foxglove Studio готовится.
|
||||||
|
|
||||||
|
[Foxglove Studio](https://foxglove.dev/home) — инструмент визуализации и мониторинга ROS2-данных в реальном времени. Подключается к запущенному стеку через WebSocket-bridge (порт `8765` по умолчанию, настраивается в `cobot-setting.yaml` → блок `foxglove`).
|
||||||
|
|
||||||
|
## Скачать Foxglove Studio
|
||||||
|
|
||||||
|
Перейдите на [официальный сайт Foxglove](https://foxglove.dev/home) и скачайте приложение для своей ОС.
|
||||||
@@ -0,0 +1,573 @@
|
|||||||
|
# Управление через REST API
|
||||||
|
|
||||||
|
REST API предоставляет HTTP-интерфейс для управления роботом из любой среды: Bash, Python, MATLAB, Postman и других инструментов.
|
||||||
|
|
||||||
|
## Веб-панель (Swagger UI)
|
||||||
|
|
||||||
|
Интерактивная документация со встроенным тест-клиентом доступна по адресу:
|
||||||
|
|
||||||
|
- **Локально:** [http://localhost:8007/docs](http://localhost:8007/docs)
|
||||||
|
- **Удалённо:** `http://ip-сервера:8007/docs`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Подготовка к работе
|
||||||
|
|
||||||
|
!!! tip "Не знакомы с инструментами?"
|
||||||
|
- **Bash / curl** — [введение в Bash-скрипты](https://easy-quest.github.io/my-docs/en/docs/Bash-x/bash_scripts_001/)
|
||||||
|
- **Python** — [руководство для начинающих](https://metanit.com/python/tutorial/) или [официальная документация](https://docs.python.org/3/)
|
||||||
|
- **MATLAB** — [официальная документация MATLAB](https://www.mathworks.com/help/matlab/index.html)
|
||||||
|
|
||||||
|
### Константы
|
||||||
|
|
||||||
|
Для Python и MATLAB определите константы в начале скрипта. Для Bash они указываются непосредственно в командах.
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
import httpx, math
|
||||||
|
|
||||||
|
HOST = "http://localhost:8007"
|
||||||
|
T_FAST = 10 # тайм-аут для чтения состояния [с]
|
||||||
|
T_MOVE = 60 # тайм-аут для команд движения [с]
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
HOST = 'http://localhost:8007';
|
||||||
|
T_FAST = 10;
|
||||||
|
T_MOVE = 60;
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Эндпоинты
|
||||||
|
|
||||||
|
### 1. GET `/robot/joint_states` — углы суставов
|
||||||
|
|
||||||
|
Возвращает текущие значения углов (в радианах) всех 7 суставов.
|
||||||
|
Используйте для мониторинга положения робота перед отправкой команд.
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 10 http://localhost:8007/robot/joint_states | python3 -m json.tool
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
r = httpx.get(f"{HOST}/robot/joint_states", timeout=T_FAST)
|
||||||
|
print(r.json()["position"])
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
r = webread([HOST '/robot/joint_states'], weboptions('Timeout', T_FAST));
|
||||||
|
disp(r.position)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. GET `/robot/pose` — текущая поза TCP
|
||||||
|
|
||||||
|
Возвращает декартову позу инструментального центра (TCP): координаты `x, y, z` [м] и ориентацию в углах Эйлера [градусы].
|
||||||
|
Используйте для контроля положения инструмента в пространстве.
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 10 http://localhost:8007/robot/pose | python3 -m json.tool
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
r = httpx.get(f"{HOST}/robot/pose", timeout=T_FAST)
|
||||||
|
pose = r.json()
|
||||||
|
print(pose)
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
r = webread([HOST '/robot/pose'], weboptions('Timeout', T_FAST));
|
||||||
|
fprintf('x=%.4f y=%.4f z=%.4f\n', r.position.x, r.position.y, r.position.z);
|
||||||
|
fprintf('A=%.4f B=%.4f C=%.4f\n', r.orientation.euler_deg.a, r.orientation.euler_deg.b, r.orientation.euler_deg.c);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. GET `/robot/positions` — именованные позиции
|
||||||
|
|
||||||
|
Возвращает список всех сохранённых именованных позиций (name + description).
|
||||||
|
Используйте для получения допустимых значений для `/robot/move/named`.
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 10 http://localhost:8007/robot/positions
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
r = httpx.get(f"{HOST}/robot/positions", timeout=T_FAST)
|
||||||
|
for pos in r.json():
|
||||||
|
print(pos["name"], "—", pos["description"])
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
r = webread([HOST '/robot/positions'], weboptions('Timeout', T_FAST));
|
||||||
|
for i = 1:numel(r)
|
||||||
|
fprintf('%s — %s\n', r(i).name, r(i).description);
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. POST `/robot/stop` — экстренная остановка
|
||||||
|
|
||||||
|
Немедленно останавливает текущее движение робота.
|
||||||
|
Используйте при необходимости прервать выполняемую команду.
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 10 -X POST http://localhost:8007/robot/stop
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
r = httpx.post(f"{HOST}/robot/stop", timeout=T_FAST)
|
||||||
|
print(r.json())
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
opts = weboptions('RequestMethod', 'post', 'MediaType', 'application/json', 'Timeout', T_FAST);
|
||||||
|
r = webwrite([HOST '/robot/stop'], struct(), opts);
|
||||||
|
disp(r.success)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 5. POST `/robot/move/named` — движение в именованную позицию
|
||||||
|
|
||||||
|
Перемещает робота в одну из заранее сохранённых позиций (см. `/robot/positions`).
|
||||||
|
Используйте для воспроизводимых переходов между рабочими позициями.
|
||||||
|
|
||||||
|
| Параметр | Тип | Описание |
|
||||||
|
|---|---|---|
|
||||||
|
| `name` | string | Имя позиции |
|
||||||
|
| `speed` | float | Масштаб скорости (0.0–1.0) |
|
||||||
|
| `accel_scale` | float | Масштаб ускорения (0.0 = по умолчанию) |
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 60 -X POST http://localhost:8007/robot/move/named \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"name": "home", "speed": 0.1, "accel_scale": 0.0}'
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
r = httpx.post(f"{HOST}/robot/move/named",
|
||||||
|
json={"name": "home", "speed": 0.1, "accel_scale": 0.0},
|
||||||
|
timeout=T_MOVE)
|
||||||
|
print(r.json())
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
opts = weboptions('RequestMethod', 'post', 'MediaType', 'application/json', 'Timeout', T_MOVE);
|
||||||
|
body = struct('name', 'home', 'speed', 0.1, 'accel_scale', 0.0);
|
||||||
|
r = webwrite([HOST '/robot/move/named'], body, opts);
|
||||||
|
disp(r.success)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 6. POST `/robot/move/pose` — движение по декартовой позе
|
||||||
|
|
||||||
|
Перемещает TCP в заданную точку пространства. Ориентация задаётся углами Эйлера (A, B, C) в радианах.
|
||||||
|
Используйте когда нужно задать точное положение и ориентацию инструмента.
|
||||||
|
|
||||||
|
| Параметр | Тип | Описание |
|
||||||
|
|---|---|---|
|
||||||
|
| `x, y, z` | float | Координаты [м] |
|
||||||
|
| `a, b, c` | float | Углы Эйлера [рад] |
|
||||||
|
| `speed` | float | Масштаб скорости (0.0–1.0) |
|
||||||
|
| `planner` | string | Планировщик: `ptp`, `lin`, `circ` |
|
||||||
|
| `frame_id` | string | Система отсчёта (пусто = `base_link`) |
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 60 -X POST http://localhost:8007/robot/move/pose \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"x": 0.4, "y": 0.0, "z": 0.5, "a": 0.0, "b": 3.14159, "c": 0.0, "speed": 0.1, "planner": "ptp"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
r = httpx.post(f"{HOST}/robot/move/pose",
|
||||||
|
json={"x": 0.4, "y": 0.0, "z": 0.5,
|
||||||
|
"a": 0.0, "b": math.pi, "c": 0.0,
|
||||||
|
"speed": 0.1, "planner": "ptp", "frame_id": ""},
|
||||||
|
timeout=T_MOVE)
|
||||||
|
print(r.json())
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
opts = weboptions('RequestMethod', 'post', 'MediaType', 'application/json', 'Timeout', T_MOVE);
|
||||||
|
body = struct('x', 0.4, 'y', 0.0, 'z', 0.5, ...
|
||||||
|
'a', 0.0, 'b', pi, 'c', 0.0, ...
|
||||||
|
'speed', 0.1, 'planner', 'ptp', 'frame_id', '');
|
||||||
|
r = webwrite([HOST '/robot/move/pose'], body, opts);
|
||||||
|
disp(r.success)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 7. POST `/robot/move/joints` — движение по углам суставов
|
||||||
|
|
||||||
|
Перемещает робота в позицию, заданную углами всех 7 суставов (в радианах).
|
||||||
|
Используйте когда нужен прямой контроль над конфигурацией робота без планирования в декартовом пространстве.
|
||||||
|
|
||||||
|
| Параметр | Тип | Описание |
|
||||||
|
|---|---|---|
|
||||||
|
| `joints` | float[7] | Углы суставов J1–J7 [рад] |
|
||||||
|
| `speed` | float | Масштаб скорости (0.0–1.0) |
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 60 -X POST http://localhost:8007/robot/move/joints \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"joints": [0.0, 0.5, 0.0, -1.5708, 0.0, 1.5708, 0.0], "speed": 0.1}'
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
r = httpx.post(f"{HOST}/robot/move/joints",
|
||||||
|
json={"joints": [0.0, 0.5, 0.0, -math.pi/2, 0.0, math.pi/2, 0.0],
|
||||||
|
"speed": 0.1},
|
||||||
|
timeout=T_MOVE)
|
||||||
|
print(r.json())
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
opts = weboptions('RequestMethod', 'post', 'MediaType', 'application/json', 'Timeout', T_MOVE);
|
||||||
|
body = struct('joints', {{0.0, 0.5, 0.0, -pi/2, 0.0, pi/2, 0.0}}, 'speed', 0.1);
|
||||||
|
r = webwrite([HOST '/robot/move/joints'], body, opts);
|
||||||
|
disp(r.success)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 8. POST `/trajectory/send` — отправка траектории
|
||||||
|
|
||||||
|
Выполняет многоточечную траекторию, заданную набором waypoints с метками времени.
|
||||||
|
Используйте для плавного воспроизведения записанных или синтезированных движений.
|
||||||
|
|
||||||
|
| Параметр | Тип | Описание |
|
||||||
|
|---|---|---|
|
||||||
|
| `points[].positions` | float[7] | Углы суставов в точке [рад] |
|
||||||
|
| `points[].time_from_start` | float | Время от старта [с] |
|
||||||
|
| `validate_limits` | bool | Проверять ли ограничения суставов |
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 60 -X POST http://localhost:8007/trajectory/send \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"points": [
|
||||||
|
{"positions": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], "time_from_start": 0.0},
|
||||||
|
{"positions": [0.0, 0.5, 0.0, -1.0, 0.0, 1.0, 0.0], "time_from_start": 3.0},
|
||||||
|
{"positions": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], "time_from_start": 6.0}
|
||||||
|
],
|
||||||
|
"validate_limits": true
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
r = httpx.post(f"{HOST}/trajectory/send",
|
||||||
|
json={
|
||||||
|
"points": [
|
||||||
|
{"positions": [0.0]*7, "time_from_start": 0.0},
|
||||||
|
{"positions": [0.0, 0.5, 0.0, -1.0, 0.0, 1.0, 0.0], "time_from_start": 3.0},
|
||||||
|
{"positions": [0.0]*7, "time_from_start": 6.0},
|
||||||
|
],
|
||||||
|
"validate_limits": True,
|
||||||
|
},
|
||||||
|
timeout=T_MOVE)
|
||||||
|
print(r.json())
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
opts = weboptions('RequestMethod', 'post', 'MediaType', 'application/json', 'Timeout', T_MOVE);
|
||||||
|
p1 = struct('positions', {{0,0,0,0,0,0,0}}, 'time_from_start', 0.0);
|
||||||
|
p2 = struct('positions', {{0,0.5,0,-1.0,0,1.0,0}}, 'time_from_start', 3.0);
|
||||||
|
p3 = struct('positions', {{0,0,0,0,0,0,0}}, 'time_from_start', 6.0);
|
||||||
|
body = struct('points', {{p1, p2, p3}}, 'validate_limits', true);
|
||||||
|
r = webwrite([HOST '/trajectory/send'], body, opts);
|
||||||
|
disp(r)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 9. POST `/trajectory/send_csv` — загрузка траектории из CSV
|
||||||
|
|
||||||
|
Загружает траекторию из CSV-файла и выполняет её. Формат файла: строки — точки, столбцы — углы суставов + время.
|
||||||
|
Используйте для воспроизведения траекторий, подготовленных во внешних инструментах.
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 60 -X POST http://localhost:8007/trajectory/send_csv \
|
||||||
|
-F "file=@trajectory.csv" \
|
||||||
|
-F "separator=," \
|
||||||
|
-F "validate_limits=true"
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
with open("trajectory.csv", "rb") as f:
|
||||||
|
r = httpx.post(f"{HOST}/trajectory/send_csv",
|
||||||
|
files={"file": ("trajectory.csv", f, "text/csv")},
|
||||||
|
data={"separator": ",", "validate_limits": "true"},
|
||||||
|
timeout=T_MOVE)
|
||||||
|
print(r.json())
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
!!! warning "Требует уточнения"
|
||||||
|
Код ниже использует `matlab.net.http` и может потребовать доработки в зависимости от вашей версии MATLAB.
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
import matlab.net.http.*
|
||||||
|
import matlab.net.http.io.*
|
||||||
|
|
||||||
|
csvData = fileread('trajectory.csv');
|
||||||
|
part = FormProvider(FormField('file', csvData, 'filename', 'trajectory.csv', ...
|
||||||
|
'content-type', 'text/csv'), ...
|
||||||
|
FormField('separator', ','), ...
|
||||||
|
FormField('validate_limits', 'true'));
|
||||||
|
req = RequestMessage('POST', [], part);
|
||||||
|
opts = matlab.net.http.HTTPOptions('ConnectTimeout', T_MOVE, 'ResponseTimeout', T_MOVE);
|
||||||
|
[resp, ~] = req.send([HOST '/trajectory/send_csv'], opts);
|
||||||
|
disp(resp.Body.Data)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 10. POST `/trajectory/stop` — остановка траектории
|
||||||
|
|
||||||
|
Прерывает выполнение текущей траектории.
|
||||||
|
Используйте для аварийной остановки во время воспроизведения.
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 10 -X POST http://localhost:8007/trajectory/stop
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
r = httpx.post(f"{HOST}/trajectory/stop", timeout=T_FAST)
|
||||||
|
print(r.json())
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
opts = weboptions('RequestMethod', 'post', 'Timeout', T_FAST);
|
||||||
|
r = webread([HOST '/trajectory/stop'], opts);
|
||||||
|
disp(r)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 11. GET `/trajectory/logs` — лог выполнения траектории
|
||||||
|
|
||||||
|
Возвращает последние `n` строк лога выполнения траектории.
|
||||||
|
Используйте для диагностики после выполнения команды.
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 10 "http://localhost:8007/trajectory/logs?n=20"
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
r = httpx.get(f"{HOST}/trajectory/logs", params={"n": 20}, timeout=T_FAST)
|
||||||
|
for line in r.json()["lines"]:
|
||||||
|
print(line)
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
r = webread([HOST '/trajectory/logs'], weboptions('Timeout', T_FAST), 'n', 20);
|
||||||
|
disp(r.lines)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 12. POST `/sequences/start` — запуск последовательности движений
|
||||||
|
|
||||||
|
Запускает автоматическую последовательность движений из JSON-конфига (`motion_sequence_config.json`).
|
||||||
|
Используйте для воспроизведения повторяющихся циклов работы.
|
||||||
|
|
||||||
|
| Параметр | Тип | Описание |
|
||||||
|
|---|---|---|
|
||||||
|
| `config` | file | JSON-файл конфигурации последовательности |
|
||||||
|
| `n_iterations` | int | Число повторений (0 = бесконечно) |
|
||||||
|
| `delay_between_iterations` | float | Пауза между итерациями [с] |
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 10 -X POST http://localhost:8007/sequences/start \
|
||||||
|
-F "config=@motion_sequence_config.json" \
|
||||||
|
-F "n_iterations=3" \
|
||||||
|
-F "delay_between_iterations=5.0"
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
with open("motion_sequence_config.json", "rb") as f:
|
||||||
|
r = httpx.post(f"{HOST}/sequences/start",
|
||||||
|
files={"config": ("config.json", f, "application/json")},
|
||||||
|
data={"n_iterations": "3", "delay_between_iterations": "5.0"},
|
||||||
|
timeout=T_FAST)
|
||||||
|
print(r.json())
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
!!! warning "Требует уточнения"
|
||||||
|
Код ниже использует `matlab.net.http` и может потребовать доработки в зависимости от вашей версии MATLAB.
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
import matlab.net.http.*
|
||||||
|
import matlab.net.http.io.*
|
||||||
|
|
||||||
|
jsonData = fileread('motion_sequence_config.json');
|
||||||
|
part = FormProvider(FormField('config', jsonData, 'filename', 'config.json', ...
|
||||||
|
'content-type', 'application/json'), ...
|
||||||
|
FormField('n_iterations', '3'), ...
|
||||||
|
FormField('delay_between_iterations', '5.0'));
|
||||||
|
req = RequestMessage('POST', [], part);
|
||||||
|
opts = matlab.net.http.HTTPOptions('ConnectTimeout', T_FAST, 'ResponseTimeout', T_FAST);
|
||||||
|
[resp, ~] = req.send([HOST '/sequences/start'], opts);
|
||||||
|
disp(resp.Body.Data)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 13. GET `/sequences/status` — статус последовательности
|
||||||
|
|
||||||
|
Возвращает текущий статус выполнения последовательности.
|
||||||
|
Используйте для polling-мониторинга выполнения.
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 10 http://localhost:8007/sequences/status
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
r = httpx.get(f"{HOST}/sequences/status", timeout=T_FAST)
|
||||||
|
print(r.json())
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
r = webread([HOST '/sequences/status'], weboptions('Timeout', T_FAST));
|
||||||
|
disp(r.status)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 14. GET `/sequences/logs` — лог последовательности
|
||||||
|
|
||||||
|
Возвращает последние `n` строк лога выполнения последовательности.
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 10 "http://localhost:8007/sequences/logs?n=50"
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
r = httpx.get(f"{HOST}/sequences/logs", params={"n": 50}, timeout=T_FAST)
|
||||||
|
for line in r.json()["lines"]:
|
||||||
|
print(line)
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
r = webread([HOST '/sequences/logs'], weboptions('Timeout', T_FAST), 'n', 50);
|
||||||
|
disp(r.lines)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 15. POST `/sequences/stop` — остановка последовательности
|
||||||
|
|
||||||
|
Прерывает выполнение текущей последовательности движений.
|
||||||
|
|
||||||
|
=== "Bash"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s --max-time 10 -X POST http://localhost:8007/sequences/stop
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python"
|
||||||
|
|
||||||
|
```python
|
||||||
|
r = httpx.post(f"{HOST}/sequences/stop", timeout=T_FAST)
|
||||||
|
print(r.json())
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "MATLAB"
|
||||||
|
|
||||||
|
```matlab
|
||||||
|
opts = weboptions('RequestMethod', 'post', 'Timeout', T_FAST);
|
||||||
|
r = webread([HOST '/sequences/stop'], opts);
|
||||||
|
disp(r)
|
||||||
|
```
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Управление через ROS2
|
||||||
|
|
||||||
|
!!! info "Раздел в разработке"
|
||||||
|
Подробная документация по управлению через ROS2-топики и action-серверы готовится.
|
||||||
|
|
||||||
|
Этот способ предполагает прямую отправку команд в ROS2 через CLI-инструменты (`ros2 topic pub`, `ros2 action send_goal`) или написание собственных ROS2-нод на Python/C++.
|
||||||
|
|
||||||
|
## Дополнительные ресурсы
|
||||||
|
|
||||||
|
- [Документация ROS2 Jazzy](https://docs.ros.org/en/jazzy/index.html) — официальная документация: топики, сервисы, action-серверы, написание нод
|
||||||
|
- [MATLAB Robotics System Toolbox](https://www.mathworks.com/help/ros/index.html?s_tid=CRUX_lftnav) — управление роботом через ROS2 из MATLAB
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
# Установка проекта
|
||||||
|
|
||||||
|
## Быстрая установка
|
||||||
|
|
||||||
|
Самый простой способ — установить через `curl` одной командой. Убедитесь, что `curl` установлен:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt update && sudo apt upgrade -y && sudo apt install curl
|
||||||
|
```
|
||||||
|
|
||||||
|
Перейдите в домашнюю директорию и запустите скрипт установки:
|
||||||
|
|
||||||
|
=== "Стабильная версия (master)"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~
|
||||||
|
curl -fsSL https://gitverse.ru/api/repos/daniel-robotics/lightweight-cobot/raw/branch/master/install.sh | bash
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Dev-версия (dev)"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~
|
||||||
|
curl -fsSL https://gitverse.ru/api/repos/daniel-robotics/lightweight-cobot/raw/branch/dev/install.sh | bash -s dev
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Установка через Git
|
||||||
|
|
||||||
|
Проект доступен как на [GitVerse](https://gitverse.ru/daniel-robotics/lightweight-cobot) (предпочтительно), так и на [GitHub](https://github.com/Daniel-Robotic/lightweight-cobot).
|
||||||
|
|
||||||
|
!!! tip "Не знакомы с Git?"
|
||||||
|
Если вы впервые работаете с Git и GitHub, рекомендуем [прочитать эту статью на Хабре](https://habr.com/ru/companies/yandex_praktikum/articles/700708/) — там всё объясняется с нуля.
|
||||||
|
|
||||||
|
Клонируйте репозиторий и запустите скрипт установки:
|
||||||
|
|
||||||
|
=== "GitVerse"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~
|
||||||
|
git clone https://gitverse.ru/daniel-robotics/lightweight-cobot.git
|
||||||
|
cd ~/lightweight-cobot
|
||||||
|
sudo chmod +x ./install.sh
|
||||||
|
./install.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "GitHub"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~
|
||||||
|
git clone https://github.com/Daniel-Robotic/lightweight-cobot.git
|
||||||
|
cd ~/lightweight-cobot
|
||||||
|
sudo chmod +x ./install.sh
|
||||||
|
./install.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ручная установка
|
||||||
|
|
||||||
|
Если ни `curl`, ни `git` недоступны — скачайте архив проекта вручную со страницы репозитория (кнопка «Скачать ZIP»), разархивируйте и выполните:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/lightweight-cobot
|
||||||
|
sudo chmod +x ./install.sh
|
||||||
|
./install.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Процесс установки
|
||||||
|
|
||||||
|
Скрипт [`install.sh`](https://gitverse.ru/daniel-robotics/lightweight-cobot/raw/branch/master/install.sh) автоматически установит:
|
||||||
|
|
||||||
|
- **Git** — система контроля версий
|
||||||
|
- **Docker** — контейнеризация для изолированного запуска
|
||||||
|
- **CLI-инструмент `cobot`** — основной инструмент управления проектом
|
||||||
|
- Системные зависимости Ubuntu
|
||||||
|
|
||||||
|
### Перезагрузка после установки
|
||||||
|
|
||||||
|
После завершения скрипта может потребоваться перезагрузка, чтобы заработал Docker:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo reboot now
|
||||||
|
```
|
||||||
|
|
||||||
|
Следите за выводом в терминале — скрипт сам сообщит, нужна ли перезагрузка.
|
||||||
|
|
||||||
|
### Если лог пуст
|
||||||
|
|
||||||
|
Если после запуска скрипта не выводится никакой информации, обновите среду bash и продолжите настройку вручную:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
source ~/.bashrc # обновление переменных окружения
|
||||||
|
cobot setup # продолжение настройки системы
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Проверка установки
|
||||||
|
|
||||||
|
После завершения убедитесь, что `cobot` доступен:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cobot -h
|
||||||
|
```
|
||||||
|
|
||||||
|
Если команда выводит список доступных подкоманд — установка прошла успешно.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Следующий шаг:** [CLI-команды cobot](cli-reference.md)
|
||||||
@@ -1,3 +1,33 @@
|
|||||||
# Обзор
|
# Быстрый старт
|
||||||
|
|
||||||
*Описание проекта, что это такое и зачем.*
|
**Lightweight Cobot** позволяет управлять роботом KUKA LBR IIWA 7 через ROS 2: планировать траектории с помощью MoveIt 2, работать в симуляторе Webots или подключаться к физическому роботу по протоколу FRI. Весь проект управляется единым CLI-инструментом `cobot`.
|
||||||
|
|
||||||
|
Этот раздел проведёт вас от нулевого состояния до первого запуска системы.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Предпосылки
|
||||||
|
|
||||||
|
- Физический робот **KUKA LBR IIWA 7 R800** — если планируете работу с реальным оборудованием
|
||||||
|
- Либо желание работать только в симуляторе **Webots** — физический робот не нужен
|
||||||
|
- ПК или сервер с **Ubuntu 24.04** (или подключение к существующему серверу по SSH)
|
||||||
|
- Доступ к сети, в которой находится контроллер робота
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Порядок шагов
|
||||||
|
|
||||||
|
1. [**Настройка SunriseWorkbench**](sunrise-setup.md) — подготовка контроллера KUKA: подключение кабелей, загрузка программы `ServerFriRos2`, настройка сетевых параметров. *(Только для физического робота)*
|
||||||
|
|
||||||
|
2. [**Подключение к серверу**](remote-access.md) — выбор варианта развёртывания (локально или удалённо), SSH-подключение к серверу управления.
|
||||||
|
|
||||||
|
3. [**Установка проекта**](installation.md) — скачивание и установка LWC через `curl`, `git` или вручную.
|
||||||
|
|
||||||
|
4. [**CLI-команды cobot**](cli-reference.md) — обзор всех команд: настройка, запуск, сборка, управление.
|
||||||
|
|
||||||
|
5. [**Конфигурация системы**](configuration.md) — подробное описание `cobot-setting.yaml`: что менять, что оставить по умолчанию.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
!!! tip "Только симуляция?"
|
||||||
|
Если физический робот недоступен, пропустите шаг 1 и начните сразу с [установки проекта](installation.md). Запустите симулятор командой `cobot run --simulate`.
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
# Подключение к серверу
|
||||||
|
|
||||||
|
## Варианты развёртывания
|
||||||
|
|
||||||
|
Проект можно развернуть двумя способами:
|
||||||
|
|
||||||
|
| Вариант | Описание | Когда использовать |
|
||||||
|
|---|---|---|
|
||||||
|
| **Локально** | Установка на вашем ПК | Разработка, симуляция, отладка |
|
||||||
|
| **Удалённо (сервер)** | Установка на выделенном сервере, подключённом к контроллеру KUKA | Работа с реальным роботом |
|
||||||
|
|
||||||
|
При удалённом варианте вы управляете сервером через **SSH-соединение** со своего ПК.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Программы для SSH-подключения
|
||||||
|
|
||||||
|
Выберите любую из программ:
|
||||||
|
|
||||||
|
- [**Termius**](https://termius.com/) — кроссплатформенный SSH-клиент с удобным GUI
|
||||||
|
- [**MobaXterm**](https://mobaxterm.mobatek.net/) — многофункциональный терминал для Windows
|
||||||
|
- [**PuTTY**](https://putty.software/) — классический SSH-клиент для Windows
|
||||||
|
- **Встроенный терминал / командная строка** — описано ниже
|
||||||
|
|
||||||
|
Инструкции по настройке Termius, MobaXterm и PuTTY смотрите в их официальной документации.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Данные для подключения
|
||||||
|
|
||||||
|
```
|
||||||
|
IP-адрес: 192.168.21.1
|
||||||
|
Имя пользователя: cobot
|
||||||
|
Пароль: 12345678
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! warning "Требование к сети"
|
||||||
|
Ваш ПК должен находиться в **одной сети/подсети с роботом** (например, в сети КнАГУ).
|
||||||
|
Без этого соединение установить не удастся.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Подключение через встроенный терминал
|
||||||
|
|
||||||
|
=== "Linux"
|
||||||
|
|
||||||
|
Подойдёт любой дистрибутив. Откройте терминал и выполните:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh cobot@192.168.21.1
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Windows"
|
||||||
|
|
||||||
|
Требуется **Windows 10** или новее (встроенный SSH-клиент).
|
||||||
|
Откройте **Командную строку** или **PowerShell** и выполните:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
ssh cobot@192.168.21.1
|
||||||
|
```
|
||||||
|
|
||||||
|
После выполнения команды появится запрос пароля:
|
||||||
|
|
||||||
|
```
|
||||||
|
cobot@192.168.21.1's password:
|
||||||
|
```
|
||||||
|
|
||||||
|
Введите пароль `12345678` — символы не отображаются во время набора, это нормальное поведение из соображений безопасности. Нажмите ++enter++.
|
||||||
|
|
||||||
|
При успешном подключении вы увидите приглашение командной строки сервера:
|
||||||
|
|
||||||
|
```
|
||||||
|
cobot@server:~$
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Следующий шаг:** [Установка проекта](installation.md)
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
# Настройка SunriseWorkbench
|
||||||
|
|
||||||
|
!!! info "Только для физического робота"
|
||||||
|
Этот раздел актуален только при работе с реальным роботом KUKA LBR IIWA 7.
|
||||||
|
Для симуляции переходите к [Установке проекта](installation.md).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Настройка физического оборудования
|
||||||
|
|
||||||
|
### Подключение Ethernet
|
||||||
|
|
||||||
|
Подключите кабель Ethernet от вашего ПК (или сервера управления) к одному из сетевых портов контроллера KUKA:
|
||||||
|
|
||||||
|
- **KLI** (KUKA Line Interface) — основной порт, используется для управления и программирования
|
||||||
|
- **KONI** (KUKA Optional Network Interface) — дополнительный порт, используется для FRI
|
||||||
|
|
||||||
|
Вы можете подключить оба порта одновременно — при конфигурации сервера будет выбор, какой интерфейс использовать.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Синхронизация проекта в SunriseWorkbench
|
||||||
|
|
||||||
|
### Проверка наличия ServerFriRos2
|
||||||
|
|
||||||
|
Убедитесь, что в вашем Sunrise-проекте присутствует файл `ServerFriRos2.java`.
|
||||||
|
Если файл отсутствует — скачайте его из репозитория. Он находится по пути `src/iiwa_sunrise/ServerFriRos2.java`.
|
||||||
|
|
||||||
|
=== "curl"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://gitverse.ru/api/repos/daniel-robotics/lightweight-cobot/raw/branch/master/src/iiwa_sunrise/ServerFriRos2.java \
|
||||||
|
-o ServerFriRos2.java
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "wget"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
wget -O ServerFriRos2.java \
|
||||||
|
https://gitverse.ru/api/repos/daniel-robotics/lightweight-cobot/raw/branch/master/src/iiwa_sunrise/ServerFriRos2.java
|
||||||
|
```
|
||||||
|
|
||||||
|
После скачивания добавьте файл в Sunrise-проект и выполните синхронизацию с контроллером.
|
||||||
|
|
||||||
|
### Синхронизация с контроллером
|
||||||
|
|
||||||
|
Откройте **SunriseWorkbench** и нажмите кнопку синхронизации проекта:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Перед синхронизацией убедитесь, что ПК и контроллер KUKA находятся в одной сети. Текущие сетевые параметры контроллера можно быстро проверить прямо в SunriseWorkbench:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Настройка ServerFriRos2
|
||||||
|
|
||||||
|
Откройте файл `ServerFriRos2.java` в SunriseWorkbench и измените следующие параметры в соответствии с вашей сетевой конфигурацией:
|
||||||
|
|
||||||
|
```java
|
||||||
|
// IP-адрес интерфейса KONI
|
||||||
|
KONI_IP = "192.170.10.10";
|
||||||
|
|
||||||
|
// IP-адрес интерфейса KLI
|
||||||
|
KLI_IP = "192.168.21.31";
|
||||||
|
|
||||||
|
// Нулевая позиция (все суставы в 0°)
|
||||||
|
ZERO_POSITION = {0, 0, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
|
// Рабочая позиция для мониторинга
|
||||||
|
MONITOR_WORKING_POSITION = {0, 0, 0, -1.57, 0, 1.57, 0};
|
||||||
|
|
||||||
|
// Инструмент, используемый по умолчанию
|
||||||
|
@Named("tool1")
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! warning "Важно"
|
||||||
|
IP-адреса должны совпадать с реальными адресами интерфейсов вашего контроллера.
|
||||||
|
Неверный IP приведёт к тому, что FRI-соединение не установится.
|
||||||
|
|
||||||
|
После внесения изменений повторно выполните синхронизацию проекта с контроллером.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Следующий шаг:** [Подключение к серверу управления](remote-access.md)
|
||||||
+17
-13
@@ -1,19 +1,23 @@
|
|||||||
# Welcome to MkDocs
|
# Lightweight Cobot — Документация
|
||||||
|
|
||||||
Тест, того что все работает, и что документация собирается.
|
**Lightweight Cobot (LWC)** — открытая система управления коллаборативным роботом **KUKA LBR IIWA 7 R800** на базе **ROS 2 Jazzy**. Поддерживает работу как с физическим роботом (через FRI), так и в виртуальной среде (симулятор Webots). В состав проекта входят CLI-инструмент `cobot`, аппаратный интерфейс ROS 2 Control, планировщик движений MoveIt 2 и REST/MCP API для интеграции с AI-агентами.
|
||||||
|
|
||||||
For full documentation visit [mkdocs.org](https://www.mkdocs.org).
|
---
|
||||||
|
|
||||||
## Commands
|
## Репозитории
|
||||||
|
|
||||||
* `mkdocs new [dir-name]` - Create a new project.
|
| Платформа | Ссылка | Статус |
|
||||||
* `mkdocs serve` - Start the live-reloading docs server.
|
|---|---|---|
|
||||||
* `mkdocs build` - Build the documentation site.
|
| **GitVerse** (предпочтительный) | [daniel-robotics/lightweight-cobot](https://gitverse.ru/daniel-robotics/lightweight-cobot) | основной |
|
||||||
* `mkdocs -h` - Print help message and exit.
|
| GitHub | [Daniel-Robotic/lightweight-cobot](https://github.com/Daniel-Robotic/lightweight-cobot) | зеркало |
|
||||||
|
|
||||||
## Project layout
|
## Онлайн документация
|
||||||
|
|
||||||
mkdocs.yml # The configuration file.
|
- [GitVerse Pages](https://daniel-robotics.gitverse.site/lightweight-cobot) — основная
|
||||||
docs/
|
- [GitHub Pages](https://daniel-robotic.github.io/lightweight-cobot/) — зеркало
|
||||||
index.md # The documentation homepage.
|
|
||||||
... # Other markdown pages, images and other files.
|
---
|
||||||
|
|
||||||
|
## С чего начать
|
||||||
|
|
||||||
|
Перейдите в раздел [**Быстрый старт → Обзор**](getting-started/overview.md), чтобы пройти полный путь от подключения робота до первого запуска.
|
||||||
|
|||||||
@@ -43,6 +43,15 @@ nav:
|
|||||||
|
|
||||||
- Быстрый старт:
|
- Быстрый старт:
|
||||||
- Обзор: getting-started/overview.md
|
- Обзор: getting-started/overview.md
|
||||||
|
- Настройка SunriseWorkbench: getting-started/sunrise-setup.md
|
||||||
|
- Подключение к серверу: getting-started/remote-access.md
|
||||||
|
- Установка проекта: getting-started/installation.md
|
||||||
|
- CLI-команды cobot: getting-started/cli-reference.md
|
||||||
|
- Конфигурация системы: getting-started/configuration.md
|
||||||
|
- Управление:
|
||||||
|
- ROS2 (Bash): getting-started/control/ros2-control.md
|
||||||
|
- Foxglove Studio: getting-started/control/foxglove.md
|
||||||
|
- REST API: getting-started/control/rest-api.md
|
||||||
|
|
||||||
- Sunrise Workbench:
|
- Sunrise Workbench:
|
||||||
- Обзор: sunrise/overview.md
|
- Обзор: sunrise/overview.md
|
||||||
|
|||||||
Reference in New Issue
Block a user