Files
clover/docs/ru/nti2019.md
2019-04-06 23:20:35 +03:00

4.6 KiB
Raw Blame History

Олимпиада НТИ 2019

Работа с MQTT

Проверка

Публикация сообщений в топик для проверки может быть осуществлена с помощью команды hbmqtt_pub:

hbmqtt_pub --url mqtt://192.168.0.1:1883 -t /copters/copter1 -m 'сообщение'

Где 192.168.0.1 IP-адрес MQTT-брокера, сообщение – сообщение для публикации, /copters/copter1 необходимый топик для публикации.

Работа с MQTT

В образе Клевера предустановлена библиотека paho-mqtt для Python. Пример работы с этой библиотекой описан ниже:

import paho.mqtt.client as mqtt  # Импортирование библиотеки mqtt

# Callback, вызываемый при получении от сервера подтверждения о подключении
def on_connect(client, userdata, flags, rc):
    print ("Connected with result code "+str(rc))

    # Если подписываться на топик в on_connect, то при обрыве соединения
    # и повторном подключении произойдёт автоматическое переподписание
    client.subscribe("/copters/copter1")

# Callback, вызываемый при появлении сообщения в одном из топиков, на который
# подписан клиент
def on_message(client, userdata, msg):
    # В объекте msg хранится топик, в который пришло сообщение (в поле topic)
    # и само сообщение (в поле payload)
    print (msg.topic+" "+str(msg.payload))

# Инициализация клиента MQTT
client = mqtt.Client()
# Здесь указываются callback'и, вызываемые при подключении и получении сообщения
client.on_connect = on_connect
client.on_message = on_message

# Подключение к MQTT-брокеру. Первый параметр - имя или адрес брокера, второй - порт
# (по умолчанию 1883), третий - максимальное время между сообщениями в секундах
# (по умолчанию 60).
client.connect("192.168.11.162", 1883, 60)

# Метод loop_start создаёт поток, в котором будет производиться опрос сервера и
# вызов callback'ов.
client.loop_start()
# Далее продолжается ваша программа

Более подробная документация доступна на странице библиотеки в PyPI.

Работа с Клевером

Для выполнения команд на Клевере:

  • подключитесь в Wi-Fi сети NTI;
  • подключитесь к вашему Клеверу по SSH по его IP-адресу (подробнее см. подключение по SSH);

Для редактирования файлов на Клевере вы можете использовать консольные редакторы nano или vim. Также вы можете загружать файлы используя PyCharm или WinSCP.

Для автономного полета используйте API модуля simple_offboard.

Пример программы, выполняющей взлет, полет в точку в системе координат площадки и посадку на Python:

# coding: utf8

import rospy
from clever import srv
from std_srvs.srv import Trigger

rospy.init_node('flight')

get_telemetry = rospy.ServiceProxy('get_telemetry', srv.GetTelemetry)
navigate = rospy.ServiceProxy('navigate', srv.Navigate)
land = rospy.ServiceProxy('land', Trigger)

# Взлет на 1 метр со скоростью 0.5 метров в секунду
navigate(x=0, y=0, z=1, speed=0.5, frame_id='body', auto_arm=True)

# Ждем 5 секунд
rospy.sleep(5)

# Полет на координаты x=3, y=2, z=1 площадки со скоростью 0.5 метров в секунду
navigate(x=3, y=2, z=1, speed=0.5, frame_id='aruco_map')

# Ждем 5 секунд
rospy.sleep(5)

# Посадка
land()

Для более подробной информации и описания других команд смотрите API simple_offboard и примеры кода.