Добавлена документация по 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)
|
||||
Reference in New Issue
Block a user