tello_sim
За основу был взят симулятор Tello Sim который был переведен на русский с небольшими доработками и переходом на использование библиотеки tello-asyncio в место easyTello
tello_sim - это простой Python-симулятор, который может быть использован студентами для тестирования планов полета tello перед развертыванием их на реальном дроне. Он был вдохновлен библиотекой easyTello (сейчас это tello-asyncio) и использует ее для интерфейса дрона.
Основные примеры по tello_sim:
Примеры развертывания:
- Развертывание команд через симулятор
- Развертывание команд через внешний файл программы
- Развертывание команд с нескольких файлов через внешний файл программы
Документация по DJI Tello EDU:
- Руководство пользователя DJI Tello EDU SDK 3.0.
- ROBOMASTER TT Руководство пользователя по полетной панели и карте полета.
Подключение библиотеки:
from tello_sim import Simulator
Инициализация симулятора:
my_drone = Simulator()
Основные команды управления
Взлететь:
my_drone.takeoff() # взлёт
или
my_drone.takeoff(DISABLE_SEND_TAKEOFF = True)
Флаг DISABLE_SEND_TAKEOFF = True
отключает сохранение команды для её отправки на дрон, необходимо в случае если мы другим способом передаём команду взлёта
Приземлиться:
my_drone.land() # посадка
Движение вперед/назад, влево/вправо (тангаж и крен) и высота:
my_drone.forward(x) # вперед
my_drone.back(x) # назад
my_drone.left(x) # налево
my_drone.right(x) # направо
my_drone.up(x) # вверх
my_drone.down(x) # вниз
Поворот по/против часовой стрелки (рысканье):
my_drone.cw(x) # вращение по часовой стрелке
my_drone.ccw(x) # вращение против часовой стрелки
Сальто (направление сальто):
my_drone.flip('f') # сальто вперед
my_drone.flip('b') # сальто назад
my_drone.flip('l') # сальто влево
my_drone.flip('r') # сальто вправо
Пауза (ожидание) в миллисекундах:
my_drone.wait(1000) # задержка в 1 секунду
(Выполняется при развертывании команд)
Дополнительные команды управления
Перемещение к заданной точке x,y,z c заданной скоростью
Параметры (int): координаты x, y, z и скорость
my_drone.go(20, 20, 0, 10)
Перемещение по кривой из 3 точек (текущей и двух заданных)
Параметры (int):
координаты x1, y1, z1 (второй точки), x2, y2, z2 (третьей точки) и скорость:
my_drone.curve(30, 30, 0, 50, 70, 20, 10)
Команды сохранения маршрута в файл
Сохранение текущего рассчитанного маршрута в файл commands.json
my_drone.save()
Сохранение текущего рассчитанного маршрута с указанием имени файла:
my_drone.save("file_name.json")
Команды загрузки маршрута из файла
Загрузка маршрута из файла с построением графиков маршрута:
my_drone.load_commands("commands.json")
Загрузка маршрута из файла без построения графиков, для моментального развертывания:
my_drone.load_deploy("commands.json")
Команды развертывания маршрута на реальном дроне
Развертывание через симулятор
Развертывание текущего рассчитанного или загруженного с файла маршрута
В случае подключения к точке доступа дрона:
my_drone.deploy()
В случае если дрон подключается к заданной точке доступа
(необходимо заранее узнать его ip адрес):
my_drone.deploy(ip='192.168.1.100')
Развертывание через внешнюю программу
Для развертывания используется python генератор
# Для развертывания используется python генератор
for command_json in my_drone.deploy_gen():
command = my_drone.serialize_command(command_json)
# отправка на дрон через любую стороннюю библиотеку
Служебные команды
Отправка любых произвольных команд в формате:send_command("команда", аргумент1, аргумент2...)
my_drone.send_command("battery?") # получить уровень заряда батареи
Сброс текущего сохраненного маршрута (например перед загрузкой нового)
my_drone.reset()
Режимы индиации светодиода дрона
Color | Pattern | Drone State | |
---|---|---|---|
Нормальное состояние | Попеременно красный, зеленый и желтый | Мигание | Включение и выполнение тестов самодиагностики |
Зеленый | Периодически мигает дважды | Система позиционирования зрения активна | |
Желтый | Медленно мигает | Видение недоступно (обычно из-за низкой освещенности) | |
Состояние зарядки | Синий | Постоянный | Зарядка завершена |
Синий | Медленно мигает | Выполнение зарядки | |
Синий | Мигает быстро | Ошибка зарядки | |
Состояния предупреждения | Желтый | Быстро мигает | Потерян сигнал дистанционного управления |
Красный | Медленно мигающий | Низкий заряд батареи | |
Красный | Блистает быстро | Критически низкий заряд батареи | |
Красный | Постоянный | Критическая ошибка |
Запуск нескольких командных сценариев в одной сессии
Примечание: если вы запускаете несколько сценариев для дрона, вам, возможно, придется убить процесс, который связывает процесс python с портом Tello, если вы получите ошибку OSError: [Errno 48] Address already in use
. Вы можете найти и убить этот процесс в консоли linux, MacOSX или Windows следующим образом. Замените XXXX на идентификатор процесса, который вы видите после выполнения команды lsof
.
lsof -i:8889
kill XXXX
в windows Пример:
netstat -ano | findstr :8889
taskkill /F /PID XXXX
Описание
Это репозиторий для симулятора DJI Tello. Симулятор предназначен для студентов или школьников, которые хотят добавить симуляцию в проект Tello. В частности, мы используем его для того, чтобы студенты программировали путь через полосу препятствий в классе.