mirror of https://github.com/ArduPilot/ardupilot
AP_Scripting: added AEROM_PATH_SCALE
and add some docs on parameters
This commit is contained in:
parent
9234e5168f
commit
b2a38c0c60
|
@ -188,3 +188,17 @@ Moving the activation switch to the bottom position cancels any
|
|||
running trick and stops the trick system.
|
||||
|
||||
Changing flight modes will also cancel any active trick.
|
||||
|
||||
## Parameters
|
||||
|
||||
There are a number of parameters you can set to adjust the path
|
||||
tracking. Some of the key parameters are:
|
||||
|
||||
- AEROM_ANG_ACCEL : maximum angular acceleration in degrees per second per second. Reduce to give smoother flight, but more lag
|
||||
- AEROM_ANG_TC : time constant for correcting angular roll errors. Reduce for snappier rolls, but more risk of oscillation
|
||||
- AEROM_KE_ANG : knifeedge angle. This is the required pitch angle in knifeedge flight to hold height at cruise speed.
|
||||
- AEROM_ENTRY_RATE : roll rate in degrees per second for entering and exiting a roll change
|
||||
- AEROM_THR_MIN : minumum throttle percentage for all aerobatic maneuvers
|
||||
- AEROM_THR_BOOST: minumum throttle percentage for maneuvers marked as throttle boost
|
||||
- AEROM_YAW_ACCEL: maximum yaw acceleration in degrees per second per second. Lower to soften yaw control
|
||||
- AEROM_PATH_SCALE: scale factor for all maneuvers. A value above 1.0 will increase the size of the maneuvers. A value below 1.0 will decrease the size. A negative value will mirror the maneuvers, allowing a sequence designed for left-to-right to be flown right-to-left.
|
||||
|
|
|
@ -35,6 +35,7 @@ AEROM_THR_MIN = bind_add_param('THR_MIN', 17, 0)
|
|||
AEROM_THR_BOOST = bind_add_param('THR_BOOST', 18, 50)
|
||||
AEROM_YAW_ACCEL = bind_add_param('YAW_ACCEL', 19, 1500)
|
||||
AEROM_LKAHD = bind_add_param('LKAHD', 20, 0.5)
|
||||
AEROM_PATH_SCALE = bind_add_param('PATH_SCALE', 21, 1.0)
|
||||
|
||||
-- cope with old param values
|
||||
if AEROM_ANG_ACCEL:get() < 100 and AEROM_ANG_ACCEL:get() > 0 then
|
||||
|
@ -1777,6 +1778,19 @@ function rotate_path(path_f, t, orientation, offset)
|
|||
local speed = path_f.get_speed(t)
|
||||
local thr_boost = path_f.get_throttle_boost(t)
|
||||
local point = quat_earth_to_body(orientation, point)
|
||||
|
||||
local scale = AEROM_PATH_SCALE:get()
|
||||
point = point:scale(math.abs(scale))
|
||||
if scale < 0 then
|
||||
-- we need to mirror the path
|
||||
point:y(-point:y())
|
||||
roll_correction = -roll_correction
|
||||
angle = -angle
|
||||
-- compensate path orientation for the mirroring
|
||||
local orient = orientation:inverse()
|
||||
point = quat_body_to_earth((orient * orient), point)
|
||||
end
|
||||
|
||||
return point+offset, math.rad(angle+roll_correction), speed, thr_boost
|
||||
end
|
||||
|
||||
|
@ -1905,13 +1919,12 @@ function do_path()
|
|||
local speed = target_groundspeed()
|
||||
path_var.target_speed = speed
|
||||
|
||||
path_var.length = path.get_length()
|
||||
path_var.length = path.get_length() * math.abs(AEROM_PATH_SCALE:get())
|
||||
|
||||
path_var.total_rate_rads_ef = makeVector3f(0.0, 0.0, 0.0)
|
||||
|
||||
--assuming constant velocity
|
||||
path_var.total_time = path_var.length/speed
|
||||
path_var.last_pos = path.get_pos(0) --position at t0
|
||||
|
||||
--deliberately only want yaw component, because the maneuver should be performed relative to the earth, not relative to the initial orientation
|
||||
path_var.initial_ori = Quaternion()
|
||||
|
|
Loading…
Reference in New Issue