So I have developed a python script to arm a quadrotor, fly a guided mission, return to launch and disarm. However, I am interested in getting back control of the rotor while the script is in progress incase something goes wrong. Can I put a failsafe case for this in python script or do I have to look into mavlink framework to achieve this.
You need to be a member of diydrones to add comments!
Replies
you are in control of the python script, so you can do whatever you need to do.
Hey Michael, thanks for your reply. Can you tell me what command is used to restore control back to RC?
are you using the rc override in the script?
if so just set all the pwm's to 0, and send a packet, that will remove the rc override
It worked. Thank you !!
Michael, I tried to do that, and I was able to regain control. But my I fail to go into guided mode after that. The copter just drops to the ground after I execute the sequence to remove rc override.
Here is my code
import sys
import clr
import time
from math import *
import MissionPlanner #import *
clr.AddReference("MissionPlanner.Utilities") # includes the Utilities class
def set_RC():
print "Setting RCs to Neutral"
for i in range(1,9):
Script.SendRC(i,1500,False)
Script.SendRC(3,Script.GetParam('RC3_MIN'),True)
Script.ChangeMode("Stabilize")
return True
def arm_motors():
Script.ChangeMode("Stabilize")
Script.SendRC(3,Script.GetParam('RC3_MIN'),True)
Script.SendRC(4,Script.GetParam('RC4_MAX'),True)
print "Arming Motors !!"
Script.WaitFor('ARMING MOTORS',10000)
print "Armed"
Script.SendRC(4,(Script.GetParam('RC4_MIN')+Script.GetParam('RC4_MAX'))/2,True)
Script.Sleep(5)
Script.SendRC(3,2000,True)
time.sleep(1)
Script.ChangeMode("AltHold")
#Script.SendRC(3,(Script.GetParam('RC3_MIN')+Script.GetParam('RC3_MAX'))/2,True)
Script.SendRC(3,(Script.GetParam('TRIM_THROTTLE')),True)
return True
def disarm_motors():
Script.ChangeMode("Stabilize")
Script.SendRC(3,Script.GetParam('RC3_MIN'),True)
Script.SendRC(4,Script.GetParam('RC4_MIN'),True)
print "Disarming motors ...."
Script.WaitFor('DISARMING MOTORS',10000)
print "Disarmed"
Script.SendRC(4,(Script.GetParam('RC4_MIN')+Script.GetParam('RC4_MAX'))/2,True)
return True
def Return_To_Launch(user_alt):
if user_alt==0:
Script.ChangeParam("RTL_ALT",2000)
print "Default RTL altitude set"
else:
Script.ChangeParam("RTL_ALT",cs.alt*100)
print "User RTL altitude set"
Script.ChangeMode("RTL")
print "Returning to Launch"
return True
#MAIN
set_RC();
arm_motors();
time.sleep(20);
for i in range(1,9):
Script.SendRC(i,0,True) #fails after this
Script.ChangeMode("Guided")
item = MissionPlanner.Utilities.Locationwp()
lat = 37.871460
lng = -122.317564
alt = 5
MissionPlanner.Utilities.Locationwp.lat.SetValue(item,lat)
MissionPlanner.Utilities.Locationwp.lng.SetValue(item,lng)
MissionPlanner.Utilities.Locationwp.alt.SetValue(item,alt)
print 'WP 1 set'
MAV.setGuidedModeWP(item)
print 'Going to WP 1'
time.sleep(30)
print 'Ready for next WP'
lat = lat
lng = lng
alt = alt+2
MissionPlanner.Utilities.Locationwp.lat.SetValue(item,lat)
MissionPlanner.Utilities.Locationwp.lng.SetValue(item,lng)
MissionPlanner.Utilities.Locationwp.alt.SetValue(item,alt)
print 'WP 2 set'
MAV.setGuidedModeWP(item)
print 'Going to WP 2'
time.sleep(30)
print "Reached WP 2"
Return_To_Launch(1);
time.sleep(30);
disarm_motors();
set_RC();