Ниже готовая программа: В этой программе дрон сначала взлетает на высоту 1 метр, затем летит в точку X=3, Y=2, относительно начала координат карты ArUco-маркеров и после этого садится.
import rospy
import math
from clover 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)
navigate_global = rospy.ServiceProxy('navigate_global', srv.NavigateGlobal)
set_position = rospy.ServiceProxy('set_position', srv.SetPosition)
set_velocity = rospy.ServiceProxy('set_velocity', srv.SetVelocity)
set_attitude = rospy.ServiceProxy('set_attitude', srv.SetAttitude)
set_rates = rospy.ServiceProxy('set_rates', srv.SetRates)
land = rospy.ServiceProxy('land', Trigger)
def navigate_wait(x=0, y=0, z=1, yaw=float('nan'), speed=0.5, frame_id='aruco_map', auto_arm=False, tolerance=0.2):
navigate(x=x, y=y, z=z, yaw=yaw, speed=speed, frame_id=frame_id, auto_arm=auto_arm)
while not rospy.is_shutdown():
telem = get_telemetry(frame_id='navigate_target')
if math.sqrt(telem.x ** 2 + telem.y ** 2 + telem.z ** 2) < tolerance:
break
rospy.sleep(0.2)
navigate_wait(frame_id='body', auto_arm=True)
navigate_wait(x=3, y=2)
land()
Перед запуском
Перед первым запуском обязательно проверьте состояние дрона, свободно ли пространство для полёта и правильно ли задан маршрут.
Как запустить файл
Если файл называется flight.py, в терминале Butterfly выполните:
python3 flight.py
Что делает программа?
Сначала запускается Python-программа и подключаются команды Clover. Затем функция navigate_wait() используется для взлёта и движения. После достижения точки выполняется команда land(), которая сажает дрон.