File size: 1,765 Bytes
547ac30 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import numpy as np
def features(cfg,source,prog,result,history):
n=cfg['n']
jf=np.zeros((15,15),np.float32)
parents=np.asarray(cfg['parents']);q0=np.asarray(prog['segments'][0]['q0'],float);qf=np.asarray(prog['segments'][-1]['q1'],float)
arm=np.asarray(cfg['arm_id'])
# Known nameplate geometry and planned trajectories only. No teacher labels.
for i in range(n):
jf[i]=[float(cfg['mass'][i])/15.,float(cfg['coms'][i][0])*2.,
float(cfg['inertia'][i][0]),float(cfg['inertia'][i][1]),float(cfg['inertia'][i][2]),
float(cfg['axes'][i][0]),float(cfg['axes'][i][1]),float(cfg['axes'][i][2]),
float(parents[i])/15.,float(arm[i]==0),float(arm[i]==1),float(arm[i]==2),
float(q0[i]),float(qf[i]),float(abs(qf[i]-q0[i]))]
wf=prog['setting'];arc_count=sum(s['kind']=='arc' for s in prog['segments'])
g=np.asarray([n/15.,float(cfg['topology']=='dual'),float(cfg['topology']=='torso_dual'),
float(prog['thickness_mm']),float(prog['material']=='stainless'),float(prog['material']=='aluminum'),
float(wf['wire_diameter_mm']),float(wf['wire_feed_m_min']),float(wf['current_A']),
float(wf['voltage_V']),float(wf['travel_speed_mm_s']),float(wf['gas_flow_L_min']),
float(source['cooling_nominal_W']),float(source['fume_extraction_nominal_W']),
float(wf['transfer_mode']=='spray'),float(prog['shielding_preflow_s']),
float(prog['shielding_postflow_s']),float(prog['cooling_tail_s']),float(arc_count),
float(cfg['motor_nominal_eff']),float(cfg['regen_capability']),
float(source['source_nominal_efficiency']),float(source['source_nameplate_W']),
float(np.mean(cfg['mass'])),float(np.sum(cfg['mass']))],np.float32)
return jf,g
|