- 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.
181 lines
16 KiB
Markdown
181 lines
16 KiB
Markdown
# 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.
|
||
|
||

|
||
|
||
Для запуска нажмите зелёную кнопку **Старт** на smartPAD. Программа последовательно предложит выбрать сетевой интерфейс, режим управления и, если это требуется, дополнительные параметры FRI.
|
||
|
||
## Шаг 1. Выбор сетевого интерфейса
|
||
|
||
В первом диалоге отображаются настроенные адреса ROS 2-компьютера. Выберите интерфейс, к которому физически подключён управляющий компьютер.
|
||
|
||

|
||
|
||
| Интерфейс | Особенности | Доступные режимы | Период |
|
||
|---|---|---|---|
|
||
| **KONI (X66)** | Выделенная сеть FRI, рекомендуемый вариант | Position, JointImpedance, Monitor | 5 или 10 мс; Monitor — 2 мс |
|
||
| **KLI (X6)** | Общая управляющая сеть, резервный вариант | Position, JointImpedance | Только 10 мс |
|
||
|
||
KONI лучше подходит для управления в реальном времени: выделенный канал обеспечивает меньшую задержку и более стабильный цикл. KLI можно использовать, когда KONI недоступен, но из-за задержек общей сети режим Monitor через него отключён.
|
||
|
||
## Шаг 2. Выбор режима управления
|
||
|
||
Набор доступных кнопок зависит от выбранного сетевого интерфейса.
|
||
|
||
При работе через KLI можно выбрать только Position или JointImpedance:
|
||
|
||

|
||
|
||
При работе через KONI дополнительно доступен Monitor:
|
||
|
||

|
||
|
||
### Position
|
||
|
||
Position — основной режим для обычного управления из ROS 2, включая выполнение траекторий MoveIt. Контроллер точно следует позиционным командам, а регулирование жёсткости суставов в этом режиме недоступно.
|
||
|
||
После выбора параметров робот перемещается в `ZERO_POSITION`, создаёт FRI-сессию в командном режиме `POSITION` и ожидает подключения ROS 2-клиента.
|
||
|
||

|
||
|
||
### JointImpedance
|
||
|
||
JointImpedance также получает из ROS 2 команды положения, но выполняет их с заданной жёсткостью суставов. Такой режим используется, когда необходимо управлять механическим импедансом робота, сохраняя следование заданной траектории.
|
||
|
||
После выбора режима программа предлагает установить одинаковую жёсткость для всех семи суставов:
|
||
|
||

|
||
|
||
| Жёсткость | Поведение робота |
|
||
|---:|---|
|
||
| 1500 Н·м/рад | Наиболее жёсткое следование командам из доступных вариантов. |
|
||
| 1000 Н·м/рад | Высокая жёсткость суставов. |
|
||
| 800 Н·м/рад | Средняя жёсткость суставов. |
|
||
| 500 Н·м/рад | Наиболее мягкое поведение из доступных вариантов. |
|
||
|
||
Демпфирование во всех суставах задаётся программой на уровне 0,7. После настройки робот переходит в `ZERO_POSITION` и ожидает FRI-клиента, как и в режиме Position.
|
||
|
||

|
||
|
||
### 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`.
|
||
|
||

|
||
|
||
!!! danger "Monitor и модель нагрузки"
|
||
Не включайте ручное ведение с неверными параметрами инструмента. Ошибка в массе, центре масс или инерции приводит к неточной гравитационной компенсации: робот может сопротивляться оператору или самопроизвольно смещаться.
|
||
|
||
## Шаг 3. Выбор периода отправки
|
||
|
||
При выборе Position или JointImpedance через KONI программа предлагает период 10 или 5 мс. Для KLI этот шаг пропускается, потому что период автоматически фиксируется на 10 мс.
|
||
|
||

|
||
|
||
Если нет особых требований к частоте управления, начните с 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).
|