# Инструкция по добавлению нового робота в фреймворк Robossembler ROS 2

Прежде всего необходимо скачать пакет робота, содержащий файлы `xacro` или `urdf`, а также файлы геометрии робота в формате `.stl`, `.dae`, `.obj` и других.

Перед началом работы важно ознакомиться с основными аспектами формата [xacro](https://github.com/ros/xacro/wiki). Этот формат позволяет переиспользовать существующие фрагменты URDF-описания робота, что упрощает создание и модификацию описания.

### Шаги по добавлению нового робота:

1. **Установка пакета робота**  
   После установки пакета робота создайте файл `xacro_args.yaml` в директории `{description_package}/config/`. В этом файле необходимо указать аргументы для преобразования xacro-файла в URDF.

2. **Настройка запуска**  
   Отредактируйте файл `rbs_bringup/launch/rbs_bringup.launch.py`, указав параметры для запуска робота.

   Пример стандартной реализации:
   ```python
   main_script = IncludeLaunchDescription(
       PythonLaunchDescriptionSource(
           [
               PathJoinSubstitution(
                   [FindPackageShare("rbs_runtime"), "launch", "runtime.launch.py"]
               )
           ]
       ),
       launch_arguments={
           "with_gripper": "true",
           "gripper_name": "rbs_gripper",
           "robot_type": "rbs_arm",
           "description_package": "rbs_arm",
           "description_file": "rbs_arm_modular.xacro",
           "robot_name": "rbs_arm",
           "use_moveit": "false",
           "moveit_config_package": "rbs_arm",
           "moveit_config_file": "rbs_arm.srdf.xacro",
           "use_sim_time": "true",
           "hardware": "gazebo",
           "use_controllers": "true",
           "scene_config_file": "",
           "base_link_name": "base_link",
           "ee_link_name": "gripper_grasp_point",
           "control_space": "task",
           "control_strategy": "position",
       }.items(),
   )
   ```
   Здесь выполняется запуск другого launch-файла с указанными аргументами. Ниже приводится описание каждого аргумента.

### Описание параметров:

- **`with_gripper`**  
  Указывает, есть ли на роботе захватное устройство (гриппер). Если значение `true`, будет настроен и запущен `gripper_controller`.

- **`gripper_name`**  
  Используется как ключевое слово для указания линков и джоинтов, относящихся к грипперу. Также применяется в xacro-аргументах.

- **`robot_type`**  
  Обозначает группу роботов одного типа. Например, все роботы с разными именами, но одинаковой конструкцией.

- **`description_package`**  
  Пакет, содержащий описание URDF робота. Обязательный параметр. Используется для определения пути к файлу описания и конфигурации контроллеров.

- **`description_file`**  
  Имя файла описания, который должен находиться в `{description_package}/urdf/`.

- **`robot_name`**  
  Уникальное имя робота, которое позволяет отличить его от других в сцене.

- **`use_moveit`**  
  Указывает, нужно ли использовать [MoveIt 2](https://moveit.picknik.ai/humble/index.html). Для базовых перемещений MoveIt 2 не обязателен, но для работы с препятствиями рекомендуется его включить.

- **`moveit_config_package`**  
  Имя пакета конфигурации MoveIt 2, который генерируется на основе `{description_package}`. Обязательный параметр, если используется MoveIt 2.

- **`moveit_config_file`**  
  Файл запуска MoveIt 2, находящийся в `{moveit_config_package}/launch/`.

- **`use_sim_time`**  
  Обязательный параметр при работе в симуляции. Обеспечивает синхронизацию времени с симулятором.

- **`hardware`**  
  Указывает интерфейс для управления роботом. Например, `gazebo`. Используется в основном в xacro-файлах.

- **`use_controllers`**  
  Указывает, нужно ли использовать стандартные контроллеры. Если значение `false`, робот не сможет двигаться. Влияет на запуск файла `rbs_bringup/launch/control.launch.py`.

- **`scene_config_file`**  
  Файл конфигурации сцены в формате YAML. Пример можно найти `env_manager/rbs_runtime/config/default-scene-config.yaml`. Обратите внимание на соответствие количества степеней свободы робота.

- **`base_link_name`**  
  Имя базового линка, от которого начинается робот. Важно для настройки навыков. Рекомендуется свериться с URDF.

- **`ee_link_name`**  
  Имя конечного линка (энд-эффектора), где заканчивается робот. Этот параметр также настраивается на основе URDF.

- **`control_space`**  
  Указывает, в каком пространстве робот будет управляться.  
  Возможные значения:  
  - `task` — управление в пространстве задач (например, с использованием позиций и ориентации в рабочем пространстве).  
  - `joint` — управление в пространстве суставов (например, с использованием угловых значений для каждого сустава робота).  
  Значение по умолчанию: `task`.

- **`control_strategy`**  
  Указывает стратегию управления роботом.  
  Возможные значения:  
  - `position` — управление положением, когда задаются желаемые позиции для суставов или рабочей точки.  
  - `velocity` — управление скоростью, когда задаются желаемые скорости движения.  
  - `effort` — управление усилием, когда задаются моменты или силы, прикладываемые к суставам.  
  Значение по умолчанию: `position`.

- **`interactive`**  
  Указывает, нужно ли запускать контроллер `motion_control_handle`.  
  Значение по умолчанию: `true`.  
