#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Clover Gazebo autonomous mission.
Altitude fix:
- takeoff once: body, z=1.0
- all moves: body, z=0 (no vertical change, does NOT stack like navigate_target z=1)
navigate_target z=1 stacks each step (1->2->3 m up).
navigate_target z=0 causes invalid setpoints in PX4.
body z=0 = fly horizontal only at current height.
"""
import rospy
from clover import srv
from clover.srv import SetLEDEffect
from std_srvs.srv import Trigger
Z = 1.0
SPD = 0.4
rospy.init_node('clover_autonomous_mission')
navigate = rospy.ServiceProxy('navigate', srv.Navigate)
land = rospy.ServiceProxy('land', Trigger)
set_effect = rospy.ServiceProxy('led/set_effect', SetLEDEffect)
def led(r, g, b):
try:
set_effect(effect='fill', r=r, g=g, b=b)
except rospy.ServiceException:
pass
rospy.sleep(1.0)
def step(dx, dy, t=6.0):
navigate(x=dx, y=dy, z=0, speed=SPD, frame_id='body')
rospy.sleep(t)
try:
led(255, 255, 255)
navigate(x=0, y=0, z=Z, yaw=0, speed=0.4, frame_id='body', auto_arm=True)
rospy.sleep(7.0)
step(2.0, 0.0, 5.0) # marker 44
led(255, 0, 255) # pink - marker 38
step(1.0, 1.0, 6.0)
rospy.sleep(3.0)
led(255, 165, 0) # orange block
step(1.0, 0.75, 5.0)
step(1.0, 0.75, 5.0)
led(0, 255, 255) # cyan block
step(0.5, 1.5, 6.0)
led(128, 0, 255) # purple - marker 12
step(-0.5, 1.0, 7.0)
step(-1.0, 0.0, 5.0) # marker 11
led(255, 0, 0) # red - marker 17
step(-1.0, -1.0, 6.0)
step(-1.0, 1.0, 5.0) # marker 9
led(255, 255, 0) # yellow - marker 8
step(-1.0, 0.0, 5.0)
led(0, 255, 0) # green block
step(-1.0, -1.5, 6.0)
led(0, 0, 139) # dark blue block
step(1.5, -0.5, 6.0)
led(255, 0, 255) # pink - marker 38
step(1.5, -2.0, 7.0)
step(-3.0, -1.0, 7.0) # marker 42 home
land()
rospy.sleep(3.0)
led(0, 0, 0)
except rospy.ROSInterruptException:
pass
except KeyboardInterrupt:
try:
land()
led(0, 0, 0)
except rospy.ServiceException:
pass