Add ServerFriRos2 documentation for KUKA Sunrise Cabinet integration with ROS 2

- Introduced a comprehensive guide for the ServerFriRos2 program, detailing its purpose, setup, and operational procedures.
- Included instructions on configuring network addresses, tool data, initial positions, and FRI cycle periods.
- Provided step-by-step guidance for launching the application and connecting to ROS 2, including troubleshooting tips for connection issues.
- Emphasized safety warnings and operational considerations for using the program with the KUKA LBR iiwa robot.
This commit is contained in:
Даниил Грабарь
2026-08-13 16:51:50 +03:00
parent b318cb3311
commit 4547b786a3
15 changed files with 189 additions and 15 deletions
+3 -1
View File
@@ -6,9 +6,11 @@ log/
venv venv
.venv .venv
.claude .claude
.codex
__pycache__ __pycache__
*.egg-info *.egg-info
**.FCBak **.FCBak
CLAUDE.md CLAUDE.md
AGENTS.md
@@ -26,12 +26,12 @@
### Проверка наличия ServerFriRos2 ### Проверка наличия ServerFriRos2
Убедитесь, что в вашем Sunrise-проекте присутствует файл `ServerFriRos2.java`. Убедитесь, что в вашем Sunrise-проекте присутствует файл `ServerFriRos2.java`.
Если файл отсутствует — скачайте его из репозитория. Он находится по пути `src/iiwa_sunrise/ServerFriRos2.java`. Если файл отсутствует — скачайте его из репозитория. Он находится по пути `src/iiwa_sunrise/src/ServerFriRos2.java`.
=== "curl" === "curl"
```bash ```bash
curl -fsSL https://gitverse.ru/api/repos/daniel-robotics/lightweight-cobot/raw/branch/master/src/iiwa_sunrise/ServerFriRos2.java \ curl -fsSL https://gitverse.ru/api/repos/daniel-robotics/lightweight-cobot/raw/branch/master/src/iiwa_sunrise/src/ServerFriRos2.java \
-o ServerFriRos2.java -o ServerFriRos2.java
``` ```
@@ -39,7 +39,7 @@
```bash ```bash
wget -O ServerFriRos2.java \ wget -O ServerFriRos2.java \
https://gitverse.ru/api/repos/daniel-robotics/lightweight-cobot/raw/branch/master/src/iiwa_sunrise/ServerFriRos2.java https://gitverse.ru/api/repos/daniel-robotics/lightweight-cobot/raw/branch/master/src/iiwa_sunrise/src/ServerFriRos2.java
``` ```
После скачивания добавьте файл в Sunrise-проект и выполните синхронизацию с контроллером. После скачивания добавьте файл в Sunrise-проект и выполните синхронизацию с контроллером.
@@ -78,8 +78,7 @@ MONITOR_WORKING_POSITION = {0, 0, 0, -1.57, 0, 1.57, 0};
``` ```
!!! warning "Важно" !!! warning "Важно"
IP-адреса должны совпадать с реальными адресами интерфейсов вашего контроллера. `KONI_IP` и `KLI_IP` в Java-программе — это адреса компьютера с ROS 2, доступные контроллеру через соответствующие сети. Параметр `robot.ip` в `cobot-setting.yaml`, наоборот, содержит адрес контроллера KUKA со стороны компьютера. Неверные или перепутанные адреса не позволят установить FRI-соединение.
Неверный IP приведёт к тому, что FRI-соединение не установится.
После внесения изменений повторно выполните синхронизацию проекта с контроллером. После внесения изменений повторно выполните синхронизацию проекта с контроллером.
Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

@@ -1,6 +0,0 @@
# LBRserver
В данном разделе будет представлено описание управляющей программы **LBRserver**, обеспечивающей связь контроллера с ROS 2 по протоколу FRI.
!!! info "Раздел в разработке"
Содержимое данного раздела находится в процессе подготовки.
@@ -0,0 +1,180 @@
# ServerFriRos2
**ServerFriRos2** — программа для контроллера KUKA Sunrise Cabinet, которая создаёт FRI-соединение между роботом KUKA LBR iiwa и компьютером с ROS 2. Через это соединение `ros2_control` получает текущее состояние робота и, в зависимости от выбранного режима, передаёт контроллеру команды движения.
Именно эта программа связывает две части системы: приложение на контроллере KUKA и управляющий узел ROS 2 на внешнем компьютере. Без запущенного `ServerFriRos2` управлять физическим роботом через ROS 2 не получится.
Программа проверена на KUKA LBR iiwa 7 R800 с Sunrise OS 1.16 и FRI 1.16. Исходный код находится в проекте по пути [`src/iiwa_sunrise/src/ServerFriRos2.java`](https://github.com/Daniel-Robotic/lightweight-cobot/blob/dev/src/iiwa_sunrise/src/ServerFriRos2.java).
Общие сведения о канале обмена приведены в разделе [FRI-протокол](../../../getting-started/concepts/fri-protocol.md), а подключение кабелей и подготовка Sunrise-проекта описаны в [настройке SunriseWorkbench](../../../getting-started/sunrise-setup.md).
!!! warning "Перед запуском"
Проверьте, что выбранные исходные положения безопасны для установленного инструмента и рабочей ячейки. Во время автоматического перемещения рабочая зона должна оставаться свободной. Режимы импедансного управления и ручного ведения не заменяют штатные функции безопасности KUKA.
## Что необходимо настроить
Перед синхронизацией проекта с контроллером откройте `ServerFriRos2.java` в Sunrise Workbench и проверьте параметры своего стенда.
### Сетевые адреса
В Java-классе задаются адреса **компьютера с ROS 2**, доступные со стороны соответствующего интерфейса контроллера:
```java
private static final String KONI_IP = "192.170.10.10";
private static final String KLI_IP = "192.168.21.31";
```
Не путайте их с параметром `robot.ip` в `cobot-setting.yaml`: там указывается адрес **контроллера KUKA**, к которому обращается ROS 2-компьютер. Настройка этого файла подробно описана в разделе [Конфигурация системы](../../../getting-started/configuration.md).
### Инструмент и данные нагрузки
Программа подключает к фланцу инструмент, указанный в аннотации `@Named`:
```java
@Named("tool1")
private Tool _tool;
```
Замените `tool1` именем своего инструмента из **Sunrise Workbench → Object Templates**. Для режима Monitor обязательно заполните **Load Data**: массу, центр масс и тензор инерции. Программа проверяет эти параметры перед включением гравитационной компенсации и предупреждает оператора, если модель нагрузки заполнена неправильно.
О калибровке и проверке нагрузки можно прочитать в разделе [Данные нагрузки](../features/robot-menu.md).
### Исходные положения
Перед запуском FRI робот автоматически занимает одну из заданных суставных позиций:
```java
private static final double[] ZERO_POSITION =
{0, 0, 0, 0, 0, 0, 0};
private static final double[] MONITOR_WORKING_POSITION =
{0, 0, 0, -1.57, 0, 1.57, 0};
```
`ZERO_POSITION` используется в режимах Position и JointImpedance. В режиме Monitor робот сначала проходит через нулевое положение, а затем переходит в `MONITOR_WORKING_POSITION`. При необходимости измените эти массивы так, чтобы движение не приводило к столкновению с оснасткой, столом или установленным инструментом.
### Период FRI
Для режимов Position и JointImpedance значение, выбранное на smartPAD, должно совпадать с `robot.fri_cycle_ms` в `cobot-setting.yaml`:
| Выбранный период | Частота обмена | Когда использовать |
|---|---:|---|
| 10 мс | 100 Гц | Стандартный и наиболее устойчивый вариант; обязателен для KLI. |
| 5 мс | 200 Гц | Более частое управление через выделенный интерфейс KONI. |
Monitor использует фиксированный период 2 мс и не показывает отдельный диалог выбора периода.
## Запуск приложения
Откройте раздел [Приложения](../features/applications.md) на smartPAD, найдите `ServerFriRos2` в списке приложений робота и активируйте его. После выбора программа появится в верхней строке smartHMI.
![Выбор ServerFriRos2 в списке приложений](../../assets/programms/server_fri_ros2/apps.png)
Для запуска нажмите зелёную кнопку **Старт** на smartPAD. Программа последовательно предложит выбрать сетевой интерфейс, режим управления и, если это требуется, дополнительные параметры FRI.
## Шаг 1. Выбор сетевого интерфейса
В первом диалоге отображаются настроенные адреса ROS 2-компьютера. Выберите интерфейс, к которому физически подключён управляющий компьютер.
![Выбор сетевого интерфейса FRI](../../assets/programms/server_fri_ros2/chose-interface.png)
| Интерфейс | Особенности | Доступные режимы | Период |
|---|---|---|---|
| **KONI (X66)** | Выделенная сеть FRI, рекомендуемый вариант | Position, JointImpedance, Monitor | 5 или 10 мс; Monitor — 2 мс |
| **KLI (X6)** | Общая управляющая сеть, резервный вариант | Position, JointImpedance | Только 10 мс |
KONI лучше подходит для управления в реальном времени: выделенный канал обеспечивает меньшую задержку и более стабильный цикл. KLI можно использовать, когда KONI недоступен, но из-за задержек общей сети режим Monitor через него отключён.
## Шаг 2. Выбор режима управления
Набор доступных кнопок зависит от выбранного сетевого интерфейса.
При работе через KLI можно выбрать только Position или JointImpedance:
![Выбор режима управления через KLI](../../assets/programms/server_fri_ros2/chose-interface-kli.png)
При работе через KONI дополнительно доступен Monitor:
![Выбор режима управления через KONI](../../assets/programms/server_fri_ros2/koni-choose-mode.png)
### Position
Position — основной режим для обычного управления из ROS 2, включая выполнение траекторий MoveIt. Контроллер точно следует позиционным командам, а регулирование жёсткости суставов в этом режиме недоступно.
После выбора параметров робот перемещается в `ZERO_POSITION`, создаёт FRI-сессию в командном режиме `POSITION` и ожидает подключения ROS 2-клиента.
![Ожидание ROS 2-клиента в режиме Position](../../assets/programms/server_fri_ros2/pose-start.png)
### JointImpedance
JointImpedance также получает из ROS 2 команды положения, но выполняет их с заданной жёсткостью суставов. Такой режим используется, когда необходимо управлять механическим импедансом робота, сохраняя следование заданной траектории.
После выбора режима программа предлагает установить одинаковую жёсткость для всех семи суставов:
![Выбор жёсткости суставов](../../assets/programms/server_fri_ros2/koni-choose-jointImpedance-stiffnes.png)
| Жёсткость | Поведение робота |
|---:|---|
| 1500 Н·м/рад | Наиболее жёсткое следование командам из доступных вариантов. |
| 1000 Н·м/рад | Высокая жёсткость суставов. |
| 800 Н·м/рад | Средняя жёсткость суставов. |
| 500 Н·м/рад | Наиболее мягкое поведение из доступных вариантов. |
Демпфирование во всех суставах задаётся программой на уровне 0,7. После настройки робот переходит в `ZERO_POSITION` и ожидает FRI-клиента, как и в режиме Position.
![Ожидание ROS 2-клиента в режиме JointImpedance](../../assets/programms/server_fri_ros2/jointmpedance-start.png)
### Monitor
Monitor предназначен для ручного ведения робота и передачи его текущего состояния в ROS 2. Компьютер не отправляет команды движения: FRI-сессия работает в `NO_COMMAND_MODE`, а контроллер передаёт положения и моменты суставов с периодом 2 мс.
Перед подключением робот проходит через `ZERO_POSITION` в `MONITOR_WORKING_POSITION`. Затем программа проверяет Load Data инструмента и включает суставной импеданс с нулевой жёсткостью и демпфированием 0,7. Благодаря гравитационной компенсации робот можно аккуратно перемещать рукой.
Перед подтверждением диалога запустите ROS 2-узел на компьютере. Нажимайте **OK — ROS2 готов** только после появления активного `ros2_control_node`.
![Запуск ROS 2-клиента для режима Monitor](../../assets/programms/server_fri_ros2/monitor-start.png)
!!! danger "Monitor и модель нагрузки"
Не включайте ручное ведение с неверными параметрами инструмента. Ошибка в массе, центре масс или инерции приводит к неточной гравитационной компенсации: робот может сопротивляться оператору или самопроизвольно смещаться.
## Шаг 3. Выбор периода отправки
При выборе Position или JointImpedance через KONI программа предлагает период 10 или 5 мс. Для KLI этот шаг пропускается, потому что период автоматически фиксируется на 10 мс.
![Выбор периода отправки FRI](../../assets/programms/server_fri_ros2/koni-choose-pose-and-jointImpedance-time.png)
Если нет особых требований к частоте управления, начните с 10 мс. Период 5 мс имеет смысл использовать через KONI для задач, которым действительно нужен цикл 200 Гц.
## Подключение ROS 2
На ROS 2-компьютере запустите систему для физического робота командой:
```bash
cobot run
```
При запуске выберите работу с реальным роботом. Команда поднимает `ros2_control_node`, аппаратный интерфейс FRI, контроллеры, MoveIt и настроенные дополнительные сервисы. Подробное описание команды приведено в разделе [CLI-команды cobot](../../../getting-started/cli-reference.md), а способы отправки команд — в разделе [Управление через ROS 2](../../../getting-started/control/ros2-control.md).
Для наиболее надёжного запуска сначала выполните `cobot run` на компьютере, а затем запустите `ServerFriRos2` на smartPAD. Если приложение KUKA уже перешло к ожиданию клиента, ROS 2 необходимо запустить в течение 30 секунд. После таймаута программа закроет созданную FRI-сессию и сообщит об ошибке в журнале.
После соединения в журнале smartHMI отображаются:
- состояние FRI-сессии;
- качество соединения;
- задержка (`latency`);
- разброс времени доставки пакетов (`jitter`).
При остановке FRI-клиента сессия закрывается, активный режим завершается, а ресурсы соединения освобождаются. Для нового подключения снова запустите приложение на smartPAD.
## Если соединение не устанавливается
В первую очередь проверьте:
1. Выбран ли тот интерфейс, к которому подключён ROS 2-компьютер.
2. Соответствуют ли `KONI_IP` или `KLI_IP` адресу компьютера в выбранной сети.
3. Указан ли в `cobot-setting.yaml` адрес контроллера KUKA, а не компьютера.
4. Совпадает ли период 5/10 мс в Java-программе и `robot.fri_cycle_ms`.
5. Запущен ли `ros2_control_node` до истечения 30-секундного таймаута.
6. Настроен ли UDP-порт FRI `30200` и не блокируется ли он межсетевым экраном.
Если приложение не запускается из-за потерянной конфигурации инструмента или фреймов, воспользуйтесь разделом [Ошибка конфигурации](../../../troubleshooting/config-error.md).
@@ -4,7 +4,7 @@
## Признаки проблемы ## Признаки проблемы
Проблема проявляется при запуске программ **TeachKuka** или **LBRserver**. Диагностические признаки в главном меню smartHMI: Проблема проявляется при запуске программ **TeachKuka** или **ServerFriRos2**. Диагностические признаки в главном меню smartHMI:
- Жёлтые предупреждающие индикаторы в разделе **Данные процесса**; - Жёлтые предупреждающие индикаторы в разделе **Данные процесса**;
- Жёлтые предупреждающие индикаторы в разделе **Фреймы**. - Жёлтые предупреждающие индикаторы в разделе **Фреймы**.
+1 -2
View File
@@ -73,7 +73,7 @@ nav:
- KUKA LBR IIWA 7: - KUKA LBR IIWA 7:
- Описание программ: - Описание программ:
- TeachKuka: sunrise/kuka/programs/teach-kuka.md - TeachKuka: sunrise/kuka/programs/teach-kuka.md
- LBRserver: sunrise/kuka/programs/lbr-server.md - ServerFriRos2: sunrise/kuka/programs/server-fri-ros2.md
- RobotPowerControl: sunrise/kuka/programs/robot-power-control.md - RobotPowerControl: sunrise/kuka/programs/robot-power-control.md
- Функциональные возможности: - Функциональные возможности:
- Станция: sunrise/kuka/features/station.md - Станция: sunrise/kuka/features/station.md
@@ -86,4 +86,3 @@ nav:
- Ошибка конфигурации: troubleshooting/config-error.md - Ошибка конфигурации: troubleshooting/config-error.md
- Ошибка SSL (rosdep/setup): troubleshooting/ssl-error.md - Ошибка SSL (rosdep/setup): troubleshooting/ssl-error.md