How to restore control back to RC when running a Python Script in mission planner

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.

Views: 382

Reply to This

Replies to This Discussion

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();

Reply to Discussion

RSS

© 2017   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service