> For the complete documentation index, see [llms.txt](https://copter-space.gitbook.io/uchebnik-mashinnoe-zrenie-tom-2/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://copter-space.gitbook.io/uchebnik-mashinnoe-zrenie-tom-2/razdel-2/podklyuchenie-k-simulyatoru-i-upravlenie-virtualnym-dronom-s-pomoshyu-ros.md).

# Подключение к симулятору и управление виртуальным дроном с помощью ROS

&#x20;Перед тем как переходить к управлению реальным дроном – рекомендуем освоить навыки написания программ пилотирования с помощью симулятора. Ниже рассмотрим управление виртуальным дроном с помощью симулятора **jmavsim**.

**Настройка сетевого доступа в** **ROS**

В общем случае, программа управления полётом запускается на компьютере, отдельном от полётного контроллера дрона. Например, в качестве полётного контроллера может выступать ПК Pixracer комплекта ЖУЖА VIS, а в качестве бортового компьютера использоваться Raspberry PI. Поэтому при симуляци дрона также рекомендуем запускать симулятор на отдельном компьютере, а управлять им с помощью Raspberry PI.

**Подключение симулятора и управление дроном из командной строки**

Запуск симулятора рассмотрен в разделе «Симулятор дрона jmavsim».\
После после запуска симулатора на бортовом компьютере необходимо настроить сетевой доступ к ROS-мастеру компьютера симулятора. Делается это с помощью настройки переменных среды сеанса ROS\_MASTER\_URI и ROS\_IP. В ROS\_MASTER\_URI нужно присвоить адрес мастера на врешнем компьютере. В ROS\_IP – ip-адрес компьютера, например:&#x20;

```
export ROS_MASTER_URI=http://10.42.0.1:11311
export ROS_IP=10.0.2.15
```

{% hint style="warning" %}
Обратите внимание, **ROS\_MASTER\_URI** необходимо задавать в виде строки с полным адресом (**http…\*\*\***), а **ROS\_IP** – только ip-адрес. \
Узнать ip-адрес компьютера можно с помощью команды **ifconfig**.
{% endhint %}

После подключения к симулятору по сети – на бортовом компьютере должен появиться списко тописков mavros, что можно проверить с помощью команды rostopic list. Также подключение мавлинк к полётному контроллеру удобно проверять с помощью команды rostopic echo /mavros/state – так называемый heartbeat («сердцедиение») полётного контроллера. В случае успешного подключение в поле Connected должно быть значение True.

Если подключение прошло успешно – можно осуществить запуск виртуального дрона из командной строки. Для этого нужно запустить несколько команд параллельно в разных терминалах:

1. Публикуем целевую позицию коптера «2 метра над землёй» в соответствующий топик, 5 раз в секунду (для автоподбора аргументов можно пользоваться клавишей TAB):

rostopic pub -r 5 /mavros/setpoint\_position/local geometry\_msgs/PoseStamped "header:

```
rostopic pub -r 5 /mavros/setpoint_position/local geometry_msgs/PoseStamped "header:
  seq: 0
  stamp:
    secs: 0
    nsecs: 0
  frame_id: ''
pose:
  position:
    x: 0.0
    y: 0.0
    z: 2.0
  orientation:
    x: 0.0
    y: 0.0
    z: 0.0
    w: 0.0"
```

&#x20;Переводим полётный контроллер в режим **OFFBOARD** (в отдельном терминале):

```
rosservice call /mavros/set_mode "base_mode: 0
custom_mode: 'OFFBOARD'"
```

1. Запускаем коптер (процедура запуска коптера по-английски называется «**arm**», поэтому в среде коптеристов бытует русская калька «**армит**ь»):

```
rosservice call /mavros/cmd/arming "value: true"
```

После выполнения указанных действий виртуальный дрон должен взлететь на высоту 2 метра и зависнуть. Коптер перейдёт в режим **LAND** и приземлится, если мы прервём публикацию сообщений в топик **setpoint\_position** в первом терминале.

В случае, если бортовой компьютер, с которого запускаются команды, подключен к симулятору дрона по сети – переменные среды должны быть установлены в каждом из терминалов. Для этого можно написать небольшой bash-скрипт, и вызывать его при начале работы терминала с помощью команды **source**.
