Skip to content

Commit cf437dd

Browse files
committed
feat: add type 2 and 3 scans to generate scan
1 parent a1860ac commit cf437dd

File tree

2 files changed

+350
-23
lines changed

2 files changed

+350
-23
lines changed

socs/agents/acu/agent.py

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,12 @@
3131
'ccat': {
3232
'az_speed': 2,
3333
'az_accel': 1,
34+
'el_freq': .15,
3435
},
3536
'satp': {
3637
'az_speed': 1,
3738
'az_accel': 1,
39+
'el_freq': 0,
3840
},
3941
}
4042

@@ -234,7 +236,7 @@ def __init__(self, agent, acu_config='guess',
234236
sun_config=self.sun_config)
235237
self._reset_sun_params()
236238

237-
# Scan params (default vel / accel).
239+
# Scan params (default vel / accel / el freq).
238240
self.default_scan_params = \
239241
dict(INIT_DEFAULT_SCAN_PARAMS[self.platform_type])
240242
for _k in self.default_scan_params.keys():
@@ -1781,6 +1783,7 @@ def set_speed_mode(self, session, params):
17811783

17821784
@ocs_agent.param('az_speed', type=float, default=None)
17831785
@ocs_agent.param('az_accel', type=float, default=None)
1786+
@ocs_agent.param('el_freq', type=float, default=None)
17841787
@ocs_agent.param('reset', default=False, type=bool)
17851788
@inlineCallbacks
17861789
def set_scan_params(self, session, params):
@@ -1793,13 +1796,15 @@ def set_scan_params(self, session, params):
17931796
az_speed (float, optional): The azimuth scan speed.
17941797
az_accel (float, optional): The (average) azimuth
17951798
acceleration at turn-around.
1799+
el_freq (float, optional): The frequency of elevation nods in
1800+
type 3 scans.
17961801
reset (bool, optional): If True, reset all params to default
17971802
values before applying any updates passed explicitly here.
17981803
17991804
"""
18001805
if params['reset']:
18011806
self.scan_params.update(self.default_scan_params)
1802-
for k in ['az_speed', 'az_accel']:
1807+
for k in ['az_speed', 'az_accel', 'el_freq']:
18031808
if params[k] is not None:
18041809
self.scan_params[k] = params[k]
18051810
self.log.info('Updated default scan params to {sp}', sp=self.scan_params)
@@ -2009,6 +2014,7 @@ def line_batcher(ff_scan, t_shift=0., n=10):
20092014
@ocs_agent.param('el_endpoint1', type=float, default=None)
20102015
@ocs_agent.param('el_endpoint2', type=float, default=None)
20112016
@ocs_agent.param('el_speed', type=float, default=0.)
2017+
@ocs_agent.param('el_freq', type=float, default=None)
20122018
@ocs_agent.param('num_scans', type=float, default=None)
20132019
@ocs_agent.param('start_time', type=float, default=None)
20142020
@ocs_agent.param('wait_to_start', type=float, default=None)
@@ -2018,6 +2024,7 @@ def line_batcher(ff_scan, t_shift=0., n=10):
20182024
'mid_inc', 'mid_dec'])
20192025
@ocs_agent.param('az_drift', type=float, default=None)
20202026
@ocs_agent.param('az_only', type=bool, default=True)
2027+
@ocs_agent.param('type', default=1, choices=[1, 2, 3])
20212028
@ocs_agent.param('scan_upload_length', type=float, default=None)
20222029
@inlineCallbacks
20232030
def generate_scan(self, session, params):
@@ -2100,10 +2107,13 @@ def generate_scan(self, session, params):
21002107
# Params with defaults configured ...
21012108
az_speed = params['az_speed']
21022109
az_accel = params['az_accel']
2110+
el_freq = params['el_freq']
21032111
if az_speed is None:
21042112
az_speed = self.scan_params['az_speed']
21052113
if az_accel is None:
21062114
az_accel = self.scan_params['az_accel']
2115+
if el_freq is None:
2116+
el_freq = self.scan_params['el_freq']
21072117

21082118
# Do we need to limit the az_accel? This limit comes from a
21092119
# maximum jerk parameter; the equation below (without the
@@ -2206,18 +2216,41 @@ def generate_scan(self, session, params):
22062216
return False, f'Start position seek failed with message: {msg}'
22072217

22082218
# Prepare the point generator.
2209-
g = sh.generate_constant_velocity_scan(az_endpoint1=az_endpoint1,
2219+
free_form = False
2220+
if params["type"] == 1:
2221+
g = sh.generate_constant_velocity_scan(az_endpoint1=az_endpoint1,
22102222
az_endpoint2=az_endpoint2,
22112223
az_speed=az_speed, acc=az_accel,
22122224
el_endpoint1=el_endpoint1,
22132225
el_endpoint2=el_endpoint2,
22142226
el_speed=el_speed,
22152227
az_first_pos=plan['init_az'],
22162228
**scan_params)
2229+
elif params["type"] == 2:
2230+
free_form = True
2231+
g = sh.generate_type2_scan(az_endpoint1=az_endpoint1,
2232+
az_endpoint2=az_endpoint2,
2233+
az_speed=az_speed, acc=az_accel,
2234+
el_endpoint1=el_endpoint1,
2235+
az_first_pos=plan['init_az'],
2236+
**scan_params)
2237+
elif params["type"] == 3:
2238+
free_form = True
2239+
azonly = False
2240+
g = sh.generate_type3_scan(az_endpoint1=az_endpoint1,
2241+
az_endpoint2=az_endpoint2,
2242+
az_speed=az_speed, acc=az_accel,
2243+
el_endpoint1=el_endpoint1,
2244+
el_endpoint2=el_endpoint2,
2245+
el_freq=el_freq,
2246+
az_first_pos=plan['init_az'],
2247+
**scan_params)
2248+
else:
2249+
raise ValueError("Scan type must be 1, 2, or 3")
22172250

22182251
return (yield self._run_track(
22192252
session=session, point_gen=g, step_time=step_time,
2220-
azonly=azonly, point_batch_count=point_batch_count))
2253+
azonly=azonly, point_batch_count=point_batch_count, free_form=free_form))
22212254

22222255
@inlineCallbacks
22232256
def _run_track(self, session, point_gen, step_time, azonly=False,

0 commit comments

Comments
 (0)