working forward and inverse trf on PowerBrick
This commit is contained in:
@@ -185,7 +185,8 @@ export EPICS_CA_ADDR_LIST="129.129.109.255"
|
|||||||
export EPICS_CA_ADDR_LIST="129.129.126.255"
|
export EPICS_CA_ADDR_LIST="129.129.126.255"
|
||||||
caQtDm -macro 'P=SAR-ESB_MX' ESB_MX_exp
|
caQtDm -macro 'P=SAR-ESB_MX' ESB_MX_exp
|
||||||
|
|
||||||
|
HelicalScan
|
||||||
|
-----------
|
||||||
|
|
||||||
PPMAC=MOTTEST-CPPM-CRM0485
|
PPMAC=MOTTEST-CPPM-CRM0485
|
||||||
ssh root@$PPMAC sendgetsends -1
|
ssh root@$PPMAC sendgetsends -1
|
||||||
|
|||||||
@@ -149,11 +149,11 @@ class HelicalScan:
|
|||||||
def test_coord_trf(self):
|
def test_coord_trf(self):
|
||||||
self.calcParam()
|
self.calcParam()
|
||||||
param = self.param
|
param = self.param
|
||||||
dx, dz, w, y, = (0.2,0.3,0.1,4.3)
|
dx, dz, w, y, = (0.2,0.3,0.1,3.3)
|
||||||
print 'input : dx:%.3g dz:%.3g w:%.3g fy:%.3g' % (dx,dz,w/d2r,y)
|
print 'input : dx:%.3g dz:%.3g w:%.3g fy:%.3g' % (dx,dz,w/d2r,y)
|
||||||
(cx,cz,w,fy) = self.inv_transform(dx,dz,w,y)
|
(cx,cz,w,fy) = self.inv_transform(dx,dz,w,y)
|
||||||
print 'inv_trf: cx:%.3g cz:%.3g w:%.3g fy:%.3g' % (cx,cz,w/d2r,fy)
|
print 'inv_trf: cx:%.3g cz:%.3g w:%.3g fy:%.3g' % (cx,cz,w/d2r,fy)
|
||||||
(dx, dz,w,y) = self.fwd_transform(cx,cz,w,fy)
|
(dx,dz,w,y) = self.fwd_transform(cx,cz,w,fy)
|
||||||
print 'fwd_trf: dx:%.3g dz:%.3g w:%.3g fy:%.3g' % (dx,dz,w/d2r,y)
|
print 'fwd_trf: dx:%.3g dz:%.3g w:%.3g fy:%.3g' % (dx,dz,w/d2r,y)
|
||||||
|
|
||||||
# plt.ion()
|
# plt.ion()
|
||||||
@@ -483,29 +483,29 @@ open forward
|
|||||||
//coord X Z B Y
|
//coord X Z B Y
|
||||||
define(p0_x='L10', p0_y='L11', p0_z='L12')
|
define(p0_x='L10', p0_y='L11', p0_z='L12')
|
||||||
define(p1_x='L13', p1_y='L14', p1_z='L15')
|
define(p1_x='L13', p1_y='L14', p1_z='L15')
|
||||||
define(f='L16')
|
define(scale='L16')
|
||||||
|
send 1"forward kinematic %f %f %f %f\\n",qCX,qCZ,qW,qFY''')
|
||||||
send 1"forward kinematic\\n"''')
|
|
||||||
for i in range(2):
|
for i in range(2):
|
||||||
#https://stackoverflow.com/questions/3471999/how-do-i-merge-two-lists-into-a-single-list
|
#https://stackoverflow.com/questions/3471999/how-do-i-merge-two-lists-into-a-single-list
|
||||||
l=[j for i in zip((i,) * param.shape[1], list(param[i])) for j in i]
|
l=[j for i in zip((i,) * param.shape[1], list(param[i])) for j in i]
|
||||||
prg.append(" define(z_%i=%g, y_%i=%g, x_%i=%g, r_%i=%g, phi_%i=%g)"%tuple(l))
|
prg.append(" define(z_%i=%g, y_%i=%g, x_%i=%g, r_%i=%g, phi_%i=%g)"%tuple(l))
|
||||||
prg.append('''
|
prg.append('''
|
||||||
p0_x=x_0+r_0*sin(phi_0+W)
|
p0_x=x_0+r_0*sin(phi_0+qW)
|
||||||
p1_x=x_1+r_1*sin(phi_1+W)
|
p1_x=x_1+r_1*sin(phi_1+qW)
|
||||||
p0_y=y_0
|
p0_y=y_0
|
||||||
p1_y=y_1
|
p1_y=y_1
|
||||||
p0_z=z_0+r_0*cos(phi_0+W)
|
p0_z=z_0+r_0*cos(phi_0+qW)
|
||||||
p1_z=z_1+r_1*cos(phi_0+W)
|
p1_z=z_1+r_1*cos(phi_1+qW)
|
||||||
|
|
||||||
f=(qFY-y_0)/(y_1-y_0)
|
scale=(qFY-y_0)/(y_1-y_0)
|
||||||
p0_x=p0_x+f*(p1_x-p0_x)
|
p0_x=p0_x+scale*(p1_x-p0_x)
|
||||||
p0_y=p0_y+f*(p1_y-p0_y)
|
p0_y=p0_y+scale*(p1_y-p0_y)
|
||||||
p0_z=p0_z+f*(p1_z-p0_z)
|
p0_z=p0_z+scale*(p1_z-p0_z)
|
||||||
DX=qCX-p0_x
|
DX=qCX-p0_x
|
||||||
DZ=qCZ-p0_z
|
DZ=qCZ-p0_z
|
||||||
Y=qFY
|
Y=qFY
|
||||||
W=qW
|
W=qW
|
||||||
|
send 1"forward result %f %f %f %f\\n",DX,DZ,W,Y
|
||||||
|
|
||||||
D0=$000001c2; //B=$2 X=$40 Y=$80 Z=$100 hex(2+int('40',16)+int('80',16)+int('100',16)) -> 0x1c2
|
D0=$000001c2; //B=$2 X=$40 Y=$80 Z=$100 hex(2+int('40',16)+int('80',16)+int('100',16)) -> 0x1c2
|
||||||
close
|
close
|
||||||
@@ -519,9 +519,8 @@ open inverse
|
|||||||
define(qCX='L7', qCZ='L8', qW='L1', qFY='L2')
|
define(qCX='L7', qCZ='L8', qW='L1', qFY='L2')
|
||||||
define(p0_x='L10', p0_y='L11', p0_z='L12')
|
define(p0_x='L10', p0_y='L11', p0_z='L12')
|
||||||
define(p1_x='L13', p1_y='L14', p1_z='L15')
|
define(p1_x='L13', p1_y='L14', p1_z='L15')
|
||||||
define(f='L16')
|
define(scale='L16')
|
||||||
|
send 1"inverse kinematic %f %f %f %f\\n",DX,DZ,W,Y''')
|
||||||
send 1"inverse kinematic\\n"''')
|
|
||||||
for i in range(2):
|
for i in range(2):
|
||||||
# https://stackoverflow.com/questions/3471999/how-do-i-merge-two-lists-into-a-single-list
|
# https://stackoverflow.com/questions/3471999/how-do-i-merge-two-lists-into-a-single-list
|
||||||
l = [j for i in zip((i,) * param.shape[1], list(param[i])) for j in i]
|
l = [j for i in zip((i,) * param.shape[1], list(param[i])) for j in i]
|
||||||
@@ -532,16 +531,17 @@ open inverse
|
|||||||
p0_y=y_0
|
p0_y=y_0
|
||||||
p1_y=y_1
|
p1_y=y_1
|
||||||
p0_z=z_0+r_0*cos(phi_0+W)
|
p0_z=z_0+r_0*cos(phi_0+W)
|
||||||
p1_z=z_1+r_1*cos(phi_0+W)
|
p1_z=z_1+r_1*cos(phi_1+W)
|
||||||
|
|
||||||
f=(qFY-y_0)/(y_1-y_0)
|
scale=(qFY-y_0)/(y_1-y_0)
|
||||||
p0_x=p0_x+f*(p1_x-p0_x)
|
p0_x=p0_x+scale*(p1_x-p0_x)
|
||||||
p0_y=p0_y+f*(p1_y-p0_y)
|
p0_y=p0_y+scale*(p1_y-p0_y)
|
||||||
p0_z=p0_z+f*(p1_z-p0_z)
|
p0_z=p0_z+scale*(p1_z-p0_z)
|
||||||
qCX=DX+p0_x
|
qCX=DX+p0_x
|
||||||
qCZ=DZ+p0_z
|
qCZ=DZ+p0_z
|
||||||
qFY=Y
|
qFY=Y
|
||||||
qW=W
|
qW=W
|
||||||
|
send 1"inverse result %f %f %f %f\\n",qCX,qCZ,qW,qFY
|
||||||
|
|
||||||
close
|
close
|
||||||
''')
|
''')
|
||||||
@@ -747,10 +747,11 @@ Examples:'''+''.join(map(lambda s:cmd+s, exampleCmd))+'\n '
|
|||||||
hs=HelicalScan(args)
|
hs=HelicalScan(args)
|
||||||
#hs.sequencer()
|
#hs.sequencer()
|
||||||
hs.args.verbose=255;hs.calcParam();hs.gen_coord_trf_code('/tmp/helicalscan.cfg','MOTTEST-CPPM-CRM0485')
|
hs.args.verbose=255;hs.calcParam();hs.gen_coord_trf_code('/tmp/helicalscan.cfg','MOTTEST-CPPM-CRM0485')
|
||||||
#return
|
hs.test_coord_trf()
|
||||||
|
|
||||||
|
return
|
||||||
hs.test_find_rot_ctr()
|
hs.test_find_rot_ctr()
|
||||||
hs.test_find_rot_ctr(n=5. ,per=1.,bias=2.31,ampl=4.12,phi=24.6)
|
hs.test_find_rot_ctr(n=5. ,per=1.,bias=2.31,ampl=4.12,phi=24.6)
|
||||||
hs.test_coord_trf()
|
|
||||||
hs.interactive_cx_cz_w_fy()
|
hs.interactive_cx_cz_w_fy()
|
||||||
hs.interactive_dx_dz_w_y()
|
hs.interactive_dx_dz_w_y()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user