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

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

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

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

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

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

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

Обратите внимание, ROS_MASTER_URI необходимо задавать в виде строки с полным адресом (http…***), а ROS_IP – только ip-адрес. Узнать ip-адрес компьютера можно с помощью команды ifconfig.

После подключения к симулятору по сети – на бортовом компьютере должен появиться списко тописков 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"

Переводим полётный контроллер в режим 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.

Last updated