import math
import time
import dronekit
copter = dronekit.connect('tcp:', wait_ready=True)
print("connected")
def send_attitude_target(self, roll_angle=0.0, pitch_angle=0.0,
yaw_angle=0.0, yaw_rate=10, thrust=0.5):
msg = copter.message_factory.set_attitude_target_encode(
0,
0, # target system
0, # target component
0b00000000, # type mask: bit 1 is LSB
to_quaternion(roll_angle, pitch_angle, yaw_angle), # q
0, # body roll rate in radian
0, # body pitch rate in radian
yaw_rate, # body yaw rate in radian
thrust) # thrust
copter.send_mavlink(msg)
def to_quaternion(self, roll=0.0, pitch=0.0, yaw=0.0):
"""Convert degrees to quaternions."""
t0 = math.cos(yaw * 0.5)
t1 = math.sin(yaw * 0.5)
t2 = math.cos(roll * 0.5)
t3 = math.sin(roll * 0.5)
t4 = math.cos(pitch * 0.5)
t5 = math.sin(pitch * 0.5)
w = t0 * t2 * t4 + t1 * t3 * t5
x = t0 * t3 * t4 - t1 * t2 * t5
y = t0 * t2 * t5 + t1 * t3 * t4
z = t1 * t2 * t4 - t0 * t3 * t5
return [w, x, y, z]
while True:
if(copter and copter.mode == dronekit.VehicleMode("GUIDED")):
send_attitude_target(0, # roll
0, # pitch
0, # yaw_angle
0, # yaw_rate
0.5) # thrust
print("attitude command sent")
time.sleep(0.1)# your code goes here
aW1wb3J0IG1hdGgKaW1wb3J0IHRpbWUKCmltcG9ydCBkcm9uZWtpdAoKY29wdGVyID0gZHJvbmVraXQuY29ubmVjdCgndGNwOicsIHdhaXRfcmVhZHk9VHJ1ZSkKCnByaW50KCJjb25uZWN0ZWQiKQoKCmRlZiBzZW5kX2F0dGl0dWRlX3RhcmdldChzZWxmLCByb2xsX2FuZ2xlPTAuMCwgcGl0Y2hfYW5nbGU9MC4wLAogICAgICAgICAgICAgICAgICAgICAgICAgeWF3X2FuZ2xlPTAuMCwgeWF3X3JhdGU9MTAsIHRocnVzdD0wLjUpOgogICAgbXNnID0gY29wdGVyLm1lc3NhZ2VfZmFjdG9yeS5zZXRfYXR0aXR1ZGVfdGFyZ2V0X2VuY29kZSgKICAgICAgICAwLAogICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRhcmdldCBzeXN0ZW0KICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0YXJnZXQgY29tcG9uZW50CiAgICAgICAgMGIwMDAwMDAwMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdHlwZSBtYXNrOiBiaXQgMSBpcyBMU0IKICAgICAgICB0b19xdWF0ZXJuaW9uKHJvbGxfYW5nbGUsIHBpdGNoX2FuZ2xlLCB5YXdfYW5nbGUpLCAgICAjIHEKICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBib2R5IHJvbGwgcmF0ZSBpbiByYWRpYW4KICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBib2R5IHBpdGNoIHJhdGUgaW4gcmFkaWFuCiAgICAgICAgeWF3X3JhdGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYm9keSB5YXcgcmF0ZSBpbiByYWRpYW4KICAgICAgICB0aHJ1c3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aHJ1c3QKICAgIGNvcHRlci5zZW5kX21hdmxpbmsobXNnKQoKCmRlZiB0b19xdWF0ZXJuaW9uKHNlbGYsIHJvbGw9MC4wLCBwaXRjaD0wLjAsIHlhdz0wLjApOgogICAgIiIiQ29udmVydCBkZWdyZWVzIHRvIHF1YXRlcm5pb25zLiIiIgogICAgdDAgPSBtYXRoLmNvcyh5YXcgKiAwLjUpCiAgICB0MSA9IG1hdGguc2luKHlhdyAqIDAuNSkKICAgIHQyID0gbWF0aC5jb3Mocm9sbCAqIDAuNSkKICAgIHQzID0gbWF0aC5zaW4ocm9sbCAqIDAuNSkKICAgIHQ0ID0gbWF0aC5jb3MocGl0Y2ggKiAwLjUpCiAgICB0NSA9IG1hdGguc2luKHBpdGNoICogMC41KQogICAgdyA9IHQwICogdDIgKiB0NCArIHQxICogdDMgKiB0NQogICAgeCA9IHQwICogdDMgKiB0NCAtIHQxICogdDIgKiB0NQogICAgeSA9IHQwICogdDIgKiB0NSArIHQxICogdDMgKiB0NAogICAgeiA9IHQxICogdDIgKiB0NCAtIHQwICogdDMgKiB0NQogICAgcmV0dXJuIFt3LCB4LCB5LCB6XQoKCndoaWxlIFRydWU6CiAgICBpZihjb3B0ZXIgYW5kIGNvcHRlci5tb2RlID09IGRyb25la2l0LlZlaGljbGVNb2RlKCJHVUlERUQiKSk6CiAgICAgICAgc2VuZF9hdHRpdHVkZV90YXJnZXQoMCwgICMgcm9sbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAjIHBpdGNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICMgeWF3X2FuZ2xlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICMgeWF3X3JhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUpICAjIHRocnVzdAogICAgICAgIHByaW50KCJhdHRpdHVkZSBjb21tYW5kIHNlbnQiKQogICAgdGltZS5zbGVlcCgwLjEpIyB5b3VyIGNvZGUgZ29lcyBoZXJl