From cdb602b7c7407f21ef4c9074ec0d79043c55609d Mon Sep 17 00:00:00 2001 From: gac-S_Changer Date: Mon, 23 Apr 2018 08:18:18 +0200 Subject: [PATCH] --- config/devices.properties | 2 +- config/plugins.properties | 1 + devices/img.properties | 16 +- plugins/Expert.form | 223 ++++++++++++++ plugins/Expert.java | 283 ++++++++++++++++++ plugins/MXSC-1.9.0.jar | Bin 47380 -> 56338 bytes .../{BinarySearchXZ.py => BinarySearchYZ.py} | 10 +- script/calibration/ScanRZ.py | 13 +- script/calibration/ScanX.py | 37 --- script/calibration/ScanY.py | 81 +++++ script/calibration/{ScanXZ.py => ScanYZ.py} | 24 +- script/calibration/ToolCalibration.py | 18 +- script/calibration/ToolCalibration2.py | 75 +++++ script/devices/Hexiposi.py | 35 ++- script/devices/RobotMotors.py | 4 +- script/devices/RobotSC.py | 16 +- script/devices/RobotTCP.py | 2 +- script/imgproc/CameraCalibration.py | 71 +++++ script/local.py | 49 ++- script/tools/Math.py | 10 +- 20 files changed, 854 insertions(+), 116 deletions(-) create mode 100644 plugins/Expert.form create mode 100644 plugins/Expert.java rename script/calibration/{BinarySearchXZ.py => BinarySearchYZ.py} (60%) delete mode 100644 script/calibration/ScanX.py create mode 100644 script/calibration/ScanY.py rename script/calibration/{ScanXZ.py => ScanYZ.py} (78%) create mode 100644 script/calibration/ToolCalibration2.py create mode 100644 script/imgproc/CameraCalibration.py diff --git a/config/devices.properties b/config/devices.properties index 28feb86..cbd53dc 100644 --- a/config/devices.properties +++ b/config/devices.properties @@ -4,7 +4,7 @@ microscan_cmd=ch.psi.pshell.serial.TcpDevice|129.129.126.200:2003||| ue=LaserUE|COM4|||false #robot=RobotTcp|127.0.0.1:1000||| #onewire=ch.psi.pshell.serial.TcpDevice|129.129.126.83:5000||| -puck_detection=ch.psi.mxsc.PuckDetection|raspberrypi:5556||| +puck_detection=ch.psi.mxsc.PuckDetection|tell-raspberrypi:5556||| #robot_modbus=ch.psi.pshell.modbus.ModbusTCP|129.129.126.100:502||| #jf1=ch.psi.pshell.modbus.AnalogInput|robot_modbus 0||100| #jf2=ch.psi.pshell.modbus.AnalogInput|robot_modbus 1||100| diff --git a/config/plugins.properties b/config/plugins.properties index c14bc69..e9e96d2 100644 --- a/config/plugins.properties +++ b/config/plugins.properties @@ -1,3 +1,4 @@ +Expert.java=enabled MXSC-1.9.0.jar=enabled RobotPanel.java=enabled Wayne.java=disabled diff --git a/devices/img.properties b/devices/img.properties index 79e039f..2f441d2 100644 --- a/devices/img.properties +++ b/devices/img.properties @@ -1,4 +1,4 @@ -#Tue Oct 24 14:01:22 CEST 2017 +#Mon Apr 09 18:08:09 CEST 2018 colormap=Grayscale colormapAutomatic=false colormapMax=18.133 @@ -9,16 +9,16 @@ grayscale=false invert=false rescaleFactor=1.0 rescaleOffset=0.0 -roiHeight=1200 -roiWidth=1200 -roiX=200 +roiHeight=-1 +roiWidth=-1 +roiX=0 roiY=0 rotation=0.0 rotationCrop=true scale=1.0 -spatialCalOffsetX=-600.0 -spatialCalOffsetY=-600.0 -spatialCalScaleX=0.4 -spatialCalScaleY=-0.4 +spatialCalOffsetX=NaN +spatialCalOffsetY=NaN +spatialCalScaleX=NaN +spatialCalScaleY=NaN spatialCalUnits=mm transpose=false diff --git a/plugins/Expert.form b/plugins/Expert.form new file mode 100644 index 0000000..503794f --- /dev/null +++ b/plugins/Expert.form @@ -0,0 +1,223 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/plugins/Expert.java b/plugins/Expert.java new file mode 100644 index 0000000..d9eb961 --- /dev/null +++ b/plugins/Expert.java @@ -0,0 +1,283 @@ +/* + * Copyright (c) 2014-2017 Paul Scherrer Institute. All rights reserved. + */ + +import ch.psi.pshell.core.Context; +import ch.psi.pshell.ui.Panel; +import ch.psi.utils.State; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + */ +public class Expert extends Panel { + + public Expert() { + initComponents(); + } + + //Overridable callbacks + @Override + public void onInitialize(int runCount) { + + } + + @Override + public void onStateChange(State state, State former) { + + } + + @Override + public void onExecutedFile(String fileName, Object result) { + } + + //Callback to perform update - in event thread + @Override + protected void doUpdate() { + } + + void execute(String statement){ + execute(statement, false); + } + + void execute(String statement, boolean background){ + try { + evalAsync(statement, background).handle((ret, ex) -> { + if (ex != null){ + showException((Exception)ex); + } + return ret; + }); + } catch (Exception ex) { + showException(ex); + } + } + + void execute(String script, Object args){ + try { + runAsync(script, args).handle((ret, ex) -> { + if (ex != null){ + showException((Exception)ex); + } + return ret; + }); + } catch (Exception ex) { + showException(ex); + } + } + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + buttonEnableAll = new javax.swing.JButton(); + buttonMount = new javax.swing.JButton(); + jLabel1 = new javax.swing.JLabel(); + spinnerSegment = new javax.swing.JSpinner(); + jLabel2 = new javax.swing.JLabel(); + spinnerPuck = new javax.swing.JSpinner(); + jLabel3 = new javax.swing.JLabel(); + spinnerSample = new javax.swing.JSpinner(); + checkFirst = new javax.swing.JCheckBox(); + jPanel1 = new javax.swing.JPanel(); + buttonEnable = new javax.swing.JButton(); + buttonDisable = new javax.swing.JButton(); + buttonReleaseLocal = new javax.swing.JButton(); + buttonReleasePsys = new javax.swing.JButton(); + + buttonEnableAll.setText("Enable All"); + buttonEnableAll.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonEnableAllActionPerformed(evt); + } + }); + + buttonMount.setText("Mount"); + buttonMount.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonMountActionPerformed(evt); + } + }); + + jLabel1.setText("Segment:"); + + spinnerSegment.setModel(new javax.swing.SpinnerNumberModel(1, 1, 6, 1)); + + jLabel2.setText("Puck:"); + + spinnerPuck.setModel(new javax.swing.SpinnerNumberModel(1, 1, 5, 1)); + + jLabel3.setText("Sample:"); + + spinnerSample.setModel(new javax.swing.SpinnerNumberModel(1, 1, 16, 1)); + + checkFirst.setSelected(true); + checkFirst.setText("First mount"); + + jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Robot")); + + buttonEnable.setText("Enable"); + buttonEnable.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonEnableActionPerformed(evt); + } + }); + + buttonDisable.setText("Disable"); + buttonDisable.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonDisableActionPerformed(evt); + } + }); + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap(59, Short.MAX_VALUE) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(buttonEnable) + .addComponent(buttonDisable)) + .addContainerGap(75, Short.MAX_VALUE)) + ); + + jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonDisable, buttonEnable}); + + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addComponent(buttonEnable) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(buttonDisable) + .addContainerGap()) + ); + + buttonReleaseLocal.setText("Release Local"); + buttonReleaseLocal.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonReleaseLocalActionPerformed(evt); + } + }); + + buttonReleasePsys.setText("Release PSYS"); + buttonReleasePsys.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonReleasePsysActionPerformed(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(20, 20, 20) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(buttonMount, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(checkFirst))) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel3) + .addComponent(jLabel2) + .addComponent(jLabel1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(spinnerSample, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerPuck, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(spinnerSegment, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(layout.createSequentialGroup() + .addGap(5, 5, 5) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(buttonEnableAll, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(buttonReleasePsys) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(buttonReleaseLocal))))) + .addContainerGap(373, Short.MAX_VALUE)) + ); + + layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel1, jLabel2, jLabel3}); + + layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {spinnerPuck, spinnerSample, spinnerSegment}); + + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(21, 21, 21) + .addComponent(buttonEnableAll) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(buttonReleaseLocal) + .addComponent(buttonReleasePsys)) + .addGap(18, 18, 18) + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(buttonMount) + .addComponent(jLabel1) + .addComponent(spinnerSegment, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel2) + .addComponent(spinnerPuck, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(checkFirst)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel3) + .addComponent(spinnerSample, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(24, 24, 24)) + ); + }// //GEN-END:initComponents + + private void buttonEnableAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonEnableAllActionPerformed + execute("enable_power()"); + }//GEN-LAST:event_buttonEnableAllActionPerformed + + private void buttonMountActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonMountActionPerformed + String cmd = checkFirst.isSelected() ? "firstmount" : "mount"; + execute("robot.start_task('" + cmd + "'," + spinnerSegment.getValue() + "," + spinnerPuck.getValue() + "," + spinnerSample.getValue() + ")"); + checkFirst.setSelected(false); + + }//GEN-LAST:event_buttonMountActionPerformed + + private void buttonEnableActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonEnableActionPerformed + execute("robot.enable()"); + }//GEN-LAST:event_buttonEnableActionPerformed + + private void buttonDisableActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonDisableActionPerformed + execute("robot.disable()"); + }//GEN-LAST:event_buttonDisableActionPerformed + + private void buttonReleaseLocalActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonReleaseLocalActionPerformed + execute("release_local()"); + }//GEN-LAST:event_buttonReleaseLocalActionPerformed + + private void buttonReleasePsysActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonReleasePsysActionPerformed + execute("release_psys()"); + }//GEN-LAST:event_buttonReleasePsysActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton buttonDisable; + private javax.swing.JButton buttonEnable; + private javax.swing.JButton buttonEnableAll; + private javax.swing.JButton buttonMount; + private javax.swing.JButton buttonReleaseLocal; + private javax.swing.JButton buttonReleasePsys; + private javax.swing.JCheckBox checkFirst; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JPanel jPanel1; + private javax.swing.JSpinner spinnerPuck; + private javax.swing.JSpinner spinnerSample; + private javax.swing.JSpinner spinnerSegment; + // End of variables declaration//GEN-END:variables +} diff --git a/plugins/MXSC-1.9.0.jar b/plugins/MXSC-1.9.0.jar index ea9f5b21ed9cf478551c5e7e53aa40092a7d4482..e12854258aae08c2f2a8989283869cce0a118172 100644 GIT binary patch delta 48606 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: + raise Exception ("Should be near the laser position to perform the scan") + +RANGE = [-1.5, 1.5] +STEP = 0.02 +Z_OFFSET = 0 #-1.0 +LATENCY = 0.025 +BORDER_SIZE = 0.15 + +robot.enable() +robot.set_motors_enabled(True) +current_positon = robot_y.getPosition() +robot_z.moveRel(Z_OFFSET) + +robot.setPolling(25) +try: + ret = lscan(robot_y, ue.readable, RANGE[0], RANGE[1], STEP, latency = LATENCY, relative = True) +finally: + robot.setPolling(DEFAULT_ROBOT_POLLING) + +d = ret.getReadable(0) + +first_index = -1 +last_index = -1 +for i in range(len(d)): + if not math.isnan(d[i]): + if first_index<0: + first_index = i + last_index = i + +if first_index == -1 or last_index < first_index: + raise Exception("Invalid X detection") + + +remove = int(max(BORDER_SIZE, STEP) / STEP) + +_range = [first_index+remove, last_index-remove] +if _range[1] <= _range[0]: + raise Exception("invalid range: " + str(_range)) + + +center_index = int((_range[0] + _range[1])/2) +center_positon = ret.getPositions(0)[center_index] + + + + +y = ret.getReadable(0)[_range[0] : _range[1]] +x = ret.getPositions(0)[_range[0]: _range[1]] +#x = enforce_monotonic(x) +#(normalization, mean_val, sigma) = fit_gaussian([-v for v in y], x) + + +closest_y = x[y.indexOf(min(y))] +closest_x = y[y.indexOf(min(y))] + + + +if closest_y is None or closest_y <= ret.getPositions(0)[first_index] or closest_y >= ret.getPositions(0)[last_index]: + raise Exception("Invalid Fit") + + + +center_offset = center_positon-closest_y +#center_offset = current_positon-closest_y + + + +p=get_plots()[0] +p.addMarker(closest_y, p.AxisId.X, str(closest_y), Color.GREEN) + +robot.set_motors_enabled(True) +robot_y.move(closest_y) diff --git a/script/calibration/ScanXZ.py b/script/calibration/ScanYZ.py similarity index 78% rename from script/calibration/ScanXZ.py rename to script/calibration/ScanYZ.py index e5df77d..bee63e6 100644 --- a/script/calibration/ScanXZ.py +++ b/script/calibration/ScanYZ.py @@ -21,24 +21,24 @@ STEP_SIZE = 0.1 robot.enable() move_to_laser() -step_x = STEP_SIZE +step_y = STEP_SIZE step_z = STEP_SIZE -range_x = [RANGE[0], RANGE[1]] +range_y = [RANGE[0], RANGE[1]] range_z = [RANGE[0], RANGE[1]] robot.set_motors_enabled(True) -current_x = robot_x.getPosition() +current_y = robot_y.getPosition() current_z = robot_z.getPosition() -print "Current pos x,z" , current_x, ",", current_z -ret = ascan([robot_x, robot_z], ue.readable, [range_x[0], range_z[0]], [range_x[1], range_z[1]], [step_x,step_z], latency = LATENCY, relative = True , zigzag=False, title = "Scan XY") +print "Current pos y,z" , current_y, ",", current_z +ret = ascan([robot_y, robot_z], ue.readable, [range_y[0], range_z[0]], [range_y[1], range_z[1]], [step_y,step_z], latency = LATENCY, relative = True , zigzag=False, title = "Scan XY") data = ret.getData(0)[0] #plot(Convert.transpose(data), title="Data") integ = [] for x in data: integ.append(sum( [ (0.0 if (math.isnan(y)) else y) for y in x])) -xdata= frange(range_x[0], range_x[1], step_x , False, True) +xdata= frange(range_y[0], range_y[1], step_y , False, True) p = plot(integ, title = "Fit", xdata=xdata)[0] @@ -49,18 +49,18 @@ try: except: raise Exception("Invalid Fit") gaussian = Gaussian(normalization, mean_val, sigma) -xdata= frange(range_x[0], range_x[1], step_x/100.0 , False, True) +xdata= frange(range_y[0], range_y[1], step_y/100.0 , False, True) plot_function(p, gaussian, "Fit", xdata, show_points = False, show_lines = True, color = Color.BLUE) #So if abs(mean_val - max_x) > 1.0: - raise Exception("Invalid X detection") -x_offset = mean_val -center_x = current_x + x_offset + raise Exception("Invalid Y detection") +y_offset = mean_val +center_y = current_y + y_offset -print "X offset = ", x_offset +print "Y offset = ", y_offset -robot_x.move(center_x) +robot_y.move(center_y) if SINGLE_PASS: z_scan_data = data[max_x_index] else: diff --git a/script/calibration/ToolCalibration.py b/script/calibration/ToolCalibration.py index 9b7fb31..602403b 100644 --- a/script/calibration/ToolCalibration.py +++ b/script/calibration/ToolCalibration.py @@ -15,17 +15,17 @@ move_to_laser() robot.align() -run("calibration/ScanXZ") +run("calibration/ScanYZ") robot.set_motors_enabled(True) -first_x = robot_x.take() +first_y = robot_y.take() first_z = robot_z.take() first_y = ue.take() first_j6 = robot_j6.take() if first_y is None: - raise Exception("Invalid XZ scan values in first scan") + raise Exception("Invalid YZ scan values in first scan") robot.set_joint_motors_enabled(True) @@ -36,11 +36,11 @@ else: robot.set_motors_enabled(True) -run("calibration/ScanXZ") +run("calibration/ScanYZ") robot.set_motors_enabled(True) -second_x = robot_x.take() +second_y = robot_y.take() second_z = robot_z.take() second_y = ue.take() second_j6 = robot_j6.take() @@ -51,10 +51,10 @@ if second_y is None: #Updates the tool xoff = (first_x - second_x)/2 yoff = (first_y - second_y)/2 -robot.get_tool_trsf(robot.tool) -t[0]=xoff #TODO: Why signal? -t[1]=-yoff #TODO: Why signal? -robot.set_tool_trsf(t, robot.tool) +t=robot.get_tool_trsf(TOOL_DEFAULT) +t[0]=xoff +t[1]=-yoff +robot.set_tool_trsf(t, TOOL_DEFAULT) diff --git a/script/calibration/ToolCalibration2.py b/script/calibration/ToolCalibration2.py new file mode 100644 index 0000000..d146173 --- /dev/null +++ b/script/calibration/ToolCalibration2.py @@ -0,0 +1,75 @@ +import plotutils +from mathutils import fit_gaussian, Gaussian + + +robot.assert_tool(TOOL_CALIBRATION) +robot.enable() +robot.set_motors_enabled(True) +robot.set_joint_motors_enabled(True) +move_to_laser() + + +initial_pos = robot.get_cartesian_pos() + +robot.enable() +move_to_laser() + +#robot.align() + + +run("calibration/ScanY") + +pos1 = robot.get_cartesian_pos() +x1, y1 = closest_x, closest_y + +print "Closest 1: ", [x1, y1] +print "Position 1: ", pos1 + + +pj6 = robot_j6.position +if pj6>0: + robot_j6.move(pj6 - 180.0) +else: + robot_j6.move(pj6 + 180.0) + + +run("calibration/ScanY") + + +x2, y2 = closest_x, closest_y + +print "Closest 2: ", [x2, y2] + + + +off_x = x1 - x2 + +#robot.set_motors_enabled(True) +#robot_x.moveRel(off_x, -1) + +#For composing cannot use tcp_p, need another auxiliary point. tcp_t is also destroyed. +robot.set_pnt(robot.get_cartesian_pos(), "pTemp") +robot.set_trsf([off_x, 0,0,0,0,0]) +c=robot.compose("pTemp", "fTable", "tcp_t" ) +robot.set_pnt(c, "pTemp") +robot.movel("pTemp", TOOL_CALIBRATION, DESC_SCAN, sync=True) + + +pos2 = robot.get_cartesian_pos() +print pos2 + +print "Position 2: ", pos2 + + + +#Updates the tool +xoff = (pos2[0]-pos1[0])/2 +yoff = (pos2[1]-pos1[1])/2 + +print "Offset: ", [xoff, yoff] + +t=robot.get_tool_trsf(TOOL_DEFAULT) +t[0]=-xoff +t[1]=yoff +robot.set_tool_trsf(t, TOOL_DEFAULT) + diff --git a/script/devices/Hexiposi.py b/script/devices/Hexiposi.py index 5374af4..fdb4567 100644 --- a/script/devices/Hexiposi.py +++ b/script/devices/Hexiposi.py @@ -4,15 +4,17 @@ import json class Hexiposi(DiscretePositionerBase): def __init__(self, name, url): - DiscretePositionerBase.__init__(self, name, ["1","2","3","4","5","6"]) + DiscretePositionerBase.__init__(self, name, ["A","B","C","D","E","F"]) if not url.startswith("http://"): url = "http://" + url if not url.endswith("/"): url = url + "/" - self.url = url - self.setState(State.Ready) - self.val = self.doReadReadback() + self.url = url + def doInitialize(self): + super(Hexiposi, self).doInitialize() + self.val = self.doReadReadback() + def get_response(self, response): if (response.status_code!=200): raise Exception (response.text) @@ -28,16 +30,15 @@ class Hexiposi(DiscretePositionerBase): self.pos = self.status["position"] self.moving = self.status["moving"] self.offset = self.status["offset"] - self.dpos = self.status["discretePosition"] - if self.dpos == 1: self.rback = 1 - elif self.dpos == 2: self.rback = 2 - elif self.dpos == 4: self.rback = 3 - elif self.dpos == 8: self.rback = 4 - elif self.dpos == 16: self.rback = 5 - elif self.dpos == 32: self.rback = 6 - else: self.rback = None - self.rbackstr = self.UNKNOWN_POSITION if ((self.rback is None) or (self.homed==False)) else str(self.rback) - + self.dpos = self.status["discretePosition"] + if (self.homed==False): self.rback = self.UNKNOWN_POSITION + elif self.dpos == 1: self.rback = "A" + elif self.dpos == 2: self.rback = "B" + elif self.dpos == 4: self.rback = "C" + elif self.dpos == 8: self.rback = "D" + elif self.dpos == 16: self.rback = "E" + elif self.dpos == 32: self.rback = "F" + else: self.rback = self.UNKNOWN_POSITION return self.status def move_pos(self, pos): @@ -65,10 +66,12 @@ class Hexiposi(DiscretePositionerBase): def doReadReadback(self): self.get_status() - return self.rbackstr + return self.rback def doWrite(self, val): - val = int(val) + val = ord(val) - ord('A') +1 + if val<1 or val>6: + raise Exception("Invalid value: " + str(val)) moving = val != self.val self.val = val self.move_pos(self.val) diff --git a/script/devices/RobotMotors.py b/script/devices/RobotMotors.py index 1057ef1..07ba862 100644 --- a/script/devices/RobotMotors.py +++ b/script/devices/RobotMotors.py @@ -21,7 +21,7 @@ class RobotCartesianMotor (PositionerBase): def doWrite(self, value): if self.robot.cartesian_destination is not None: - print "Move " + ROBOT_MOTORS[self.index] + " to " + str(value) + #print "Move " + ROBOT_MOTORS[self.index] + " to " + str(value) self.robot.cartesian_destination[self.index] = float(value) self.robot.set_pnt(robot.cartesian_destination , "tcp_p") self.robot.movel("tcp_p", self.robot.tool , DESC_SCAN) @@ -49,7 +49,7 @@ class RobotJointMotor (PositionerBase): return self.setpoint def doWrite(self, value): - print "Move " + ROBOT_JOINT_MOTORS[self.index] + " to " + str(value) + #print "Move " + ROBOT_JOINT_MOTORS[self.index] + " to " + str(value) self.setpoint = value joint = self.robot.herej() joint[self.index] = value diff --git a/script/devices/RobotSC.py b/script/devices/RobotSC.py index 95bd16d..b50c64a 100644 --- a/script/devices/RobotSC.py +++ b/script/devices/RobotSC.py @@ -8,16 +8,21 @@ DESC_SCAN = "mScan" DESC_DEFAULT = DESC_FAST +DEFAULT_ROBOT_POLLING = 500 + + run("devices/RobotTCP") -simulation = True +simulation = False + joint_forces = False class RobotSC(RobotTCP): def __init__(self, name, server, timeout = 1000, retries = 1): - RobotTCP.__init__(self, name, server, timeout, retries) + RobotTCP.__init__(self, name, server, timeout, retries) + self.setPolling(DEFAULT_ROBOT_POLLING) def mount(self, puck, sample): return self.execute('mount',segment, puck, sample) @@ -66,13 +71,6 @@ if simulation: else: add_device(RobotSC("robot", "129.129.110.100:1000"), force = True) -robot.high_level_tasks = ["mount", "firstmount"] -robot.set_tool(TOOL_CALIBRATION) -robot.setPolling(500) - -robot.set_motors_enabled(True) -robot.set_joint_motors_enabled(True) - #robot.set_monitor_speed(20) diff --git a/script/devices/RobotTCP.py b/script/devices/RobotTCP.py index bbd7e28..bcf7a53 100644 --- a/script/devices/RobotTCP.py +++ b/script/devices/RobotTCP.py @@ -368,7 +368,7 @@ class RobotTCP(TcpDevice, Stoppable): def distance_p(self, pnt1, pnt2): return self.eval_float("distance(" + pnt1 + ", " + pnt2 + ")") - def compose(self, pnt, frame, trsf): + def compose(self, pnt, frame = FRAME_DEFAULT, trsf = "tcp_t"): return self.eval_pnt("compose(" + pnt + ", " + frame + ", " + trsf + ")") def here(self, tool, frame): diff --git a/script/imgproc/CameraCalibration.py b/script/imgproc/CameraCalibration.py new file mode 100644 index 0000000..02e7d9d --- /dev/null +++ b/script/imgproc/CameraCalibration.py @@ -0,0 +1,71 @@ +import ch.psi.pshell.device.Camera as Camera +import ch.psi.pshell.imaging.RendererMode as RendererMode +from ch.psi.pshell.imaging.Overlays import * + +""" +img.camera.setColorMode(Camera.ColorMode.Mono) +img.camera.setDataType(Camera.DataType.UInt8) +img.camera.setGrabMode(Camera.GrabMode.Continuous) +img.camera.setTriggerMode(Camera.TriggerMode.Fixed_Rate) +img.camera.setExposure(50.00) +img.camera.setAcquirePeriod(200.00) +img.camera.setGain(0.0) +img.config.rotationCrop=True + + +""" +#img.camera.setROI(200, 0,1200,1200) + +img.camera.setROI(0, 0,1600,1200) +img.config.rotation=0 +img.config.roiX,img.config.roiY, img.config.roiWidth,img.config.roiHeight =0,0,-1,-1 +img.config.setCalibration(None) +img.camera.stop() +img.camera.start() + +#img.camera.setROI(300, 200,1000,1000) +#img.config.rotation=17 +#img.config.roiX,img.config.roiY, img.config.roiWidth,img.config.roiHeight = 50,50,900,900 + +p = show_panel(img) +p.setMode(RendererMode.Fit) +ov_text = Text(Pen(java.awt.Color.GREEN.darker()), "", java.awt.Font("Verdana", java.awt.Font.PLAIN, 24), java.awt.Point(20,20)) +ov_text.setFixed(True) + + + +p.addOverlay(ov_text) +try: + ov_text.update("Click on upper reference...") + p1 = p.waitClick(60000) + print p1 + ov_text.update("Click on left reference...") + p2 = p.waitClick(60000) + print p2 + ov_text.update("Click on right reference...") + p3 = p.waitClick(60000) + print p3 + + x, y, z = p1.x+p1.y*1j, p2.x+p2.y*1j, p3.x+p3.y*1j + w = z-x + w /= y-x + c = (x-y)*(w-abs(w)**2)/2j/w.imag-x + cx, cy, r = -c.real, -c.imag, abs(c+x) + a = math.degrees(math.atan((cx-p1.x)/(p1.y-cy))) + + print cx, cy, r, a + + #img.camera.setROI(int((1600-cx)/2),int((1200-cy)/2),1000,1000) + img.camera.setROI(int(cx-r),int(cy-r),int(2*r),int(2*r)) + img.config.rotation=-a + #remove rotation border + d=int(r/11) + img.config.roiX,img.config.roiY, img.config.roiWidth,img.config.roiHeight =d,d, int(2*r-2*d), int(2*r-2*d) + #img.config.setCalibration(None) + img.camera.stop() + img.camera.start() + +finally: + p.removeOverlay(ov_text) + + \ No newline at end of file diff --git a/script/local.py b/script/local.py index 5d8ea73..61f6a15 100644 --- a/script/local.py +++ b/script/local.py @@ -37,20 +37,47 @@ run("tools/Math") # Device initialization ################################################################################################### -import ch.psi.pshell.device.Camera as Camera -img.camera.setColorMode(Camera.ColorMode.Mono) -img.camera.setDataType(Camera.DataType.UInt8) -img.camera.setGrabMode(Camera.GrabMode.Continuous) -img.camera.setTriggerMode(Camera.TriggerMode.Fixed_Rate) -img.camera.setExposure(50.00) -img.camera.setAcquirePeriod(200.00) -img.camera.setGain(0.0) +try: + release_local_safety.write(False) + release_psys_safety.write(False) +except: + print >> sys.stderr, traceback.format_exc() +try: + hexiposi.polling=500 +except: + print >> sys.stderr, traceback.format_exc() -release_local_safety.write(False) -release_psys_safety.write(False) +try: + robot.setPolling(DEFAULT_ROBOT_POLLING) + robot.high_level_tasks = ["mount", "firstmount"] + robot.set_tool(TOOL_CALIBRATION) + robot.set_motors_enabled(True) + robot.set_joint_motors_enabled(True) +except: + print >> sys.stderr, traceback.format_exc() + +try: + import ch.psi.pshell.device.Camera as Camera + img.camera.setColorMode(Camera.ColorMode.Mono) + img.camera.setDataType(Camera.DataType.UInt8) + img.camera.setGrabMode(Camera.GrabMode.Continuous) + img.camera.setTriggerMode(Camera.TriggerMode.Fixed_Rate) + img.camera.setExposure(50.00) + img.camera.setAcquirePeriod(200.00) + img.camera.setGain(0.0) + #img.camera.setROI(200, 0,1200,1200) + img.camera.setROI(300, 200,1000,1000) + + img.config.rotation=17 + img.config.rotationCrop=True + img.config.roiX,img.config.roiY, img.config.roiWidth,img.config.roiHeight = 50,50,900,900 + + img.camera.stop() + img.camera.start() +except: + print >> sys.stderr, traceback.format_exc() -hexiposi.polling=500 ################################################################################################### diff --git a/script/tools/Math.py b/script/tools/Math.py index dc88540..c76ce33 100644 --- a/script/tools/Math.py +++ b/script/tools/Math.py @@ -57,4 +57,12 @@ def fit(ydata, xdata = None, draw_plot = True): if draw_plot: p.addMarker(max_x, None, "Max="+str(round(max_x,4)), Color.GRAY) #print "Invalid gaussian fit: " + str(mean) - return (None, None, None) \ No newline at end of file + return (None, None, None) + + +def enforce_monotonic(x): + epsilon = 1e-8 + for i in range(len(x)-1): + if x[i+1]<=x[i]: + x[i+1] = x[i]+ epsilon + return x \ No newline at end of file