Загрузка данных


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import rospy
import math
from clover import Clover
from clover.srv import SetLEDs, Navigate
from std_srvs.srv import SetBool

rospy.init_node('flight_task')
clover = Clover()
clover.wait_for_connection()

set_leds = rospy.ServiceProxy('set_leds', SetLEDs)
navigate = rospy.ServiceProxy('navigate', Navigate)
arm = rospy.ServiceProxy('arm', SetBool)
land = rospy.ServiceProxy('land', SetBool)

NUM_LEDS = 30
HEIGHT = 1.0
SPEED = 0.5
TOL = 0.2


def set_color(r, g, b):
    for i in range(NUM_LEDS):
        set_leds(led=i, r=r, g=g, b=b)


def fly(x, y, z):
    navigate(x=x, y=y, z=z, frame_id='body', speed=SPEED, tolerance=TOL, auto_arm=False)
    while not rospy.is_shutdown():
        try:
            pos = clover.get_position()
            dist = math.sqrt((x - pos.x)**2 + (y - pos.y)**2 + (z - pos.z)**2)
            if dist < TOL:
                break
        except:
            pass
        rospy.sleep(0.5)


try:
    arm(True)
    rospy.sleep(1)
    set_color(255, 255, 255)
    fly(0, 0, HEIGHT)
    rospy.sleep(2)

    fly(2, 0, HEIGHT)
    fly(3, 1, HEIGHT)
    set_color(255, 0, 255)
    rospy.sleep(2)

    fly(4, 2, HEIGHT)
    set_color(255, 165, 0)
    rospy.sleep(1)

    fly(5, 3, HEIGHT)
    set_color(0, 255, 255)
    rospy.sleep(1)

    fly(5, 5, HEIGHT)
    set_color(128, 0, 128)
    rospy.sleep(2)

    fly(4, 5, HEIGHT)
    fly(3, 4, HEIGHT)
    set_color(255, 0, 0)
    rospy.sleep(2)

    fly(2, 5, HEIGHT)
    fly(1, 5, HEIGHT)
    set_color(255, 255, 0)
    rospy.sleep(2)

    fly(1, 4, HEIGHT)
    set_color(0, 255, 0)
    rospy.sleep(1)

    fly(2, 3, HEIGHT)
    set_color(0, 0, 255)
    rospy.sleep(1)

    fly(3, 1, HEIGHT)
    set_color(255, 0, 255)
    rospy.sleep(2)

    fly(0, 0, HEIGHT)
    rospy.sleep(1)
    fly(0, 0, 0.0)
    rospy.sleep(3)

    set_color(0, 0, 0)

except Exception as e:
    set_color(0, 0, 0)