コード例 #1
0
    def test__getStalagmyteCoord(self, mock_serialdev, mock_readAll,
                                 mock_cartesian):
        mock_readAll.return_value = "Welcome returned from the device"
        ar = cartesian.arnie('COM1', 'COM2')
        generic_tool = tools.mobile_tool.getToolAtCoord(
            robot=ar,
            x=50,
            y=66,
            z=450,
            z_init=0,
            speed_xy=2000,
            speed_z=3000,
            welcome_message='welcome',
            tool_name='generic_tool')

        # A tool only gets stalagmyte coordinates after its calibration procedure.
        # The coordinates are not saved, as every time the tool is picked up,
        # the coordinates will be slightly different (as this is the point)
        # Calibration function calls tool.setStalagmyteCoord(center_x, center_y, z)
        # at the end.
        generic_tool.setStalagmyteCoord(200, 100, 500)
        x, y, z = generic_tool.getStalagmyteCoord()
        self.assertEqual(x, 200)
        self.assertEqual(y, 100)
        self.assertEqual(z, 500)
コード例 #2
0
    def test__mobile_tool__returnToolToCoord(self, mock_serialdev,
                                             mock_readAll, mock_cartesian):
        mock_readAll.return_value = "Welcome returned from the device"
        ar = cartesian.arnie('COM1', 'COM2')
        ar.returnToolToCoord = mock.MagicMock()
        generic_tool = tools.mobile_tool.getToolAtCoord(
            robot=ar,
            x=50,
            y=66,
            z=450,
            z_init=0,
            speed_xy=2000,
            speed_z=3000,
            welcome_message='welcome',
            tool_name='generic_tool')
        generic_tool.rack.overwriteSlot(1, 0)

        generic_tool.returnToolToCoord(50,
                                       66,
                                       450,
                                       z_init=0,
                                       speed_xy=None,
                                       speed_z=None)

        ar.returnToolToCoord.assert_called_with(50,
                                                66,
                                                450,
                                                z_init=0,
                                                speed_xy=None,
                                                speed_z=None)
コード例 #3
0
    def test__pipettor__getTool(self, mock_home, mock_serialdev, mock_readAll,
                                mock_cartesian):
        """
        If coordinates are not matched, then library for some reason
        not loading json file, and using probably slot calibration data instead.
        """

        with open('p1000_tool_rack.json', 'r') as f:
            saved_dict = json.loads(f.read())
        x, y, z = saved_dict['position']

        config = configparser.ConfigParser()
        config_path = 'configs/pipette_rack.ini'
        config.read(config_path)
        z_working_height = float(config['geometry']['z_working_height'])
        z_height = float(config['geometry']['z_box_height'])
        z_pickup = z - z_working_height

        # Setting mocks
        mock_readAll.return_value = "Servo"

        # Initializing
        ar = cartesian.arnie('COM1', 'COM2')
        ar.getToolAtCoord = mock.MagicMock()
        serial_device = llc.serial_device('COM3')
        p1000_tool = tools.pipettor.getTool(robot=ar, tool_name='p1000_tool')

        # Testing
        ar.getToolAtCoord.assert_called_with(x,
                                             y,
                                             z_pickup,
                                             z_init=0,
                                             speed_xy=None,
                                             speed_z=None)
コード例 #4
0
    def test__plate_gripper__test__plate_gripper__grabAndPlaceStackable_SameSpot(
            self):
        cartesian.arnie = mock.MagicMock()
        tools.llc.serial_device.readAll = mock.MagicMock()
        tools.llc.serial_device.readAll.return_value = "mobile gripper"
        tools.llc.serial.Serial = mock.MagicMock()

        ar = cartesian.arnie('COM1', 'COM2')
        gr = tools.mobile_gripper(robot=ar,
                                  com_port_number='COM3',
                                  tool_name='mobile_gripper')
        gr.operateGripper = mock.MagicMock()
        gr.getToRackCenter = mock.MagicMock()

        s1 = racks.stackable(rack_name='RackThatCannotBeNamed-1',
                             rack_type='test_rack')
        s1.overwriteSlot(1, 3)
        s2 = racks.stackable(rack_name='RackThatCannotBeNamed-2',
                             rack_type='test_rack')

        s1.rack_data['position'] = [400, 200, 500]
        s1.rack_data['pos_stalagmyte'] = [200, 100, 400]
        gr.setStalagmyteCoord(x=210, y=95, z=530)
        s2.max_height = 100
        s2.setGrippingProperties(90, 80, 10, gripper=gr)

        s1.placeItemOnTop(s2)
        gr.grabRack(s2)

        gr.robot.move.assert_has_calls([mock.call(z=400 - 400 + 530 + 10)])

        gr.placeRack(s1)

        gr.robot.move.assert_has_calls([mock.call(z=400 - 400 + 530 + 10)])
コード例 #5
0
    def test__mobile_gripper__grabRack__mockRack(self, mock_rack,
                                                 mock_serialdev, mock_readAll,
                                                 mock_cartesian):
        # Defining all mock values and parameters for gripper
        mock_readAll.return_value = "mobile gripper"
        ar = cartesian.arnie('COM1', 'COM2')
        gr = tools.mobile_gripper(robot=ar,
                                  com_port_number='COM3',
                                  tool_name='mobile_gripper')
        gr.operateGripper = mock.MagicMock()
        gr.getToRackCenter = mock.MagicMock()
        # Mocking rack functions and outputs:
        mock_rack.getGrippingOpenDiam.return_value = 90
        mock_rack.getGrippingHeight.return_value = 550
        mock_rack.getGrippingCloseDiam.return_value = 80
        mock_rack.getHeightBelowGripper.return_value = 20

        # Calling function to see if errors appear
        gr.grabRack(mock_rack)
        # Checking gripper instance parameters changed
        self.assertEqual(gr.sample, mock_rack)
        self.assertEqual(gr.gripper_has_something, True)
        self.assertEqual(gr.added_z_length, 20)
        # Testing correctness of the default settings
        param_dict = gr.grabRack(mock_rack, test=True)
        self.assertEqual(param_dict['open_diam'], 90)
        self.assertEqual(param_dict['close_diam'], 80)
        self.assertEqual(param_dict['z_grab'], 550)
        self.assertEqual(param_dict['z_retract'], 550)
        param_dict = gr.grabRack(mock_rack, man_open_diam=95, test=True)
        self.assertEqual(param_dict['open_diam'], 95)
        param_dict = gr.grabRack(mock_rack, man_close_diam=85, test=True)
        self.assertEqual(param_dict['close_diam'], 85)
        param_dict = gr.grabRack(mock_rack, extra_retraction_dz=10, test=True)
        self.assertEqual(param_dict['z_retract'], 540)
コード例 #6
0
    def test__plate_gripper__grabRack__open_close_diameters(self):
        cartesian.arnie = mock.MagicMock()
        tools.llc.serial_device.readAll = mock.MagicMock()
        tools.llc.serial_device.readAll.return_value = "mobile gripper"
        tools.llc.serial.Serial = mock.MagicMock()

        ar = cartesian.arnie('COM1', 'COM2')
        gr = tools.mobile_gripper(robot=ar,
                                  com_port_number='COM3',
                                  tool_name='mobile_gripper')
        gr.operateGripper = mock.MagicMock()
        gr.getToRackCenter = mock.MagicMock()
        gr.setStalagmyteCoord(x=210, y=95, z=530)

        gr.toDiameter = mock.MagicMock()

        s1 = racks.stackable(rack_name='RackThatCannotBeNamed-1',
                             rack_type='test_rack')
        s1.rack_data['position'] = [400, 200, 500]
        s1.rack_data['pos_stalagmyte'] = [200, 100, 400]
        s1.setGrippingProperties(90, 80, 10, gripper=gr)

        gr.grabRack(s1)

        gr.toDiameter.assert_has_calls([
            mock.call(diameter=90, powerdown=False),
            mock.call(diameter=80, powerdown=False)
        ])
コード例 #7
0
    def test_mobileTool_openFileWithToolParameters_realData(
            self, mock_serialdev, mock_readAll, mock_cartesian):

        # Preparing for the test
        try:
            os.remove('generic_tool.json')
        except:
            pass

        with open('generic_tool.json', 'w') as f:
            f.write(json.dumps({'a': 'b'}))

        mock_readAll.return_value = "Welcome returned from the device"
        ar = cartesian.arnie('COM1', 'COM2')
        generic_tool = tools.mobile_tool(ar,
                                         'COM3',
                                         tool_name='generic_tool',
                                         welcome_message='welcome')

        # Test
        result_data_dict = generic_tool.openFileWithToolParameters(
            'generic_tool.json')
        self.assertEqual(result_data_dict, {'a': 'b'})
        self.assertEqual(generic_tool.tool_data, {
            'a': 'b',
            'name': 'generic_tool',
            'welcome_message': 'welcome'
        })

        # Cleaning up after the test
        try:
            os.remove('generic_tool.json')
        except:
            pass
コード例 #8
0
    def test__getSampleCenter__WithCalibration2(self):
        r = racks.stackable(rack_name='RackThatCannotBeNamed',
                            rack_type='test_rack')
        s = samples.sample(sample_name='SampleThatCannotBeNamed',
                           sample_type='test_sample')

        # Rack receives calibration
        r.updateCenter(200, 100, 400, 50, 70, 450)
        # Placing sample into the rack
        s.place(r, 0, 0)

        cartesian.arnie = mock.MagicMock()
        tools.llc.serial_device.readAll = mock.MagicMock()
        tools.llc.serial_device.readAll.return_value = "Servo"
        tools.llc.serial.Serial = mock.MagicMock()
        tools.pipettor.home = mock.MagicMock()

        ar = cartesian.arnie('COM1', 'COM2')
        ar.getToolAtCoord = mock.MagicMock()
        serial_device = llc.serial_device('COM3')
        p1000 = tools.pipettor.getTool(robot=ar, tool_name='p1000_tool')

        # Tool receives calibration
        p1000.setStalagmyteCoord(51, 69, 420)

        x, y = s.getSampleCenterXY(p1000)
        self.assertEqual(x, 201 - 51.75)
        self.assertEqual(y, 99 - 33.75)
コード例 #9
0
    def test__mobile_gripper__grabRack(self, mock_serialdev, mock_readAll,
                                       mock_cartesian):
        # Same as above, but using a real rack object

        # Defining all mock values and parameters for gripper
        mock_readAll.return_value = "mobile gripper"
        ar = cartesian.arnie('COM1', 'COM2')
        gr = tools.mobile_gripper(robot=ar,
                                  com_port_number='COM3',
                                  tool_name='mobile_gripper')
        gr.operateGripper = mock.MagicMock()
        gr.getToRackCenter = mock.MagicMock()

        # Emulating tool calibration
        gr.setStalagmyteCoord(x=210, y=95, z=530)

        # Initializing a test rack
        r = racks.stackable(rack_name="p1000_1_test",
                            rack_data={
                                'n_x': 0,
                                'n_y': 2,
                                'type': 'p1000_tips'
                            })
        r.updateCenter(x=100,
                       y=200,
                       z=550,
                       x_btm_touch=90,
                       y_btm_touch=66,
                       z_btm_touch=500)
        #r.z_working_height = 0
        r.setGrippingProperties(open_diam=90,
                                grip_diam=80,
                                z_relative_to_top=10,
                                gripper=gr)

        self.assertEqual(gr.getStalagmyteCoord()[2], 530)
        self.assertEqual(r.rack_data['pos_stalagmyte'][2], 500)
        self.assertEqual(
            r.calcRackCenterFullCalibration(gr)[2], 550 - 8 - 500 + 530)
        self.assertEqual(r.getGrippingHeight(gr), 550 - 8 - 500 + 530 + 10)

        # Calling function to see if errors appear
        param_dict = gr.grabRack(r, test=True)
        # Checking gripper instance parameters changed
        self.assertEqual(gr.sample, r)
        self.assertEqual(gr.gripper_has_something, True)
        self.assertEqual(gr.added_z_length, 86)
        # Testing correctness of the default settings
        self.assertEqual(r.rack_data['position'][2], 550)
        self.assertEqual(r.getCalibratedRackCenter()[2], 550)
        self.assertEqual(r.z_working_height, -8)
        self.assertEqual(gr.getStalagmyteCoord()[2], 530 - 86)
        self.assertEqual(param_dict['open_diam'], 90)
        self.assertEqual(param_dict['close_diam'], 80)
        self.assertEqual(param_dict['z_grab'], 582)
        self.assertEqual(param_dict['z_retract'], 582 - 86)
コード例 #10
0
 def test__mobile_touch_probe__init__(self, mock_serialdev, mock_readAll,
                                      mock_cartesian):
     mock_readAll.return_value = "Arnie's mobile touch probe/nRev. 1.01, 11/27/2019"
     ar = cartesian.arnie('COM1', 'COM2')
     generic_tool = tools.mobile_touch_probe(ar, 'COM3')
     mock_readAll.assert_called()
     self.assertEqual(generic_tool.actual_welcome_message,
                      "Arnie's mobile touch probe/nRev. 1.01, 11/27/2019")
     mock_cartesian.assert_called()
     mock_serialdev.assert_called()
     mock_serialdev.assert_called_with('COM3', 115200, timeout=0.1)
コード例 #11
0
 def test_genericToolEmptyInit__properRackName(self, mock_serialdev,
                                               mock_readAll, mock_cartesian,
                                               mock_racks):
     mock_readAll.return_value = "Welcome returned from the device"
     ar = cartesian.arnie('COM1', 'COM2')
     generic_tool = tools.tool(ar,
                               'COM3',
                               tool_name='generic_tool',
                               welcome_message='welcome')
     mock_racks.assert_called_with(rack_name='generic_tool_rack',
                                   rack_type='generic_tool_rack')
コード例 #12
0
 def test_obtainSlotCenter(self, mock_serialdev, mock_readAll,
                           mock_cartesian):
     mock_readAll.return_value = "Arnie's stationary touch probe/nRev. 1.01, 11/27/2019"
     ar = cartesian.arnie('COM1', 'COM2')
     stp = tools.stationary_touch_probe(ar, 'COM3')
     slot_center = stp.rack.getSavedSlotCenter()
     self.assertGreater(slot_center[0], 80)
     self.assertLess(slot_center[0], 100)
     self.assertGreater(slot_center[1], 50)
     self.assertLess(slot_center[1], 80)
     self.assertGreater(slot_center[2], 500)
     self.assertLess(slot_center[2], 700)
コード例 #13
0
 def test_genericToolEmptyInit__rack_data(self, mock_serialdev,
                                          mock_readAll, mock_cartesian):
     mock_readAll.return_value = "Welcome returned from the device"
     ar = cartesian.arnie('COM1', 'COM2')
     generic_tool = tools.tool(ar,
                               'COM3',
                               tool_name='generic_tool',
                               welcome_message='welcome')
     rack_data = generic_tool.rack.rack_data
     self.assertIn('name', rack_data)
     self.assertNotIn('somerandomnamewhichwillneveroccurinreallife',
                      rack_data)
コード例 #14
0
 def test__mobile_gripper__init__(self, mock_serialdev, mock_readAll,
                                  mock_cartesian):
     mock_readAll.return_value = "mobile gripper"
     ar = cartesian.arnie('COM1', 'COM2')
     gr = tools.mobile_gripper(robot=ar,
                               com_port_number='COM3',
                               tool_name='mobile_gripper')
     mock_readAll.assert_called()
     self.assertEqual(gr.actual_welcome_message, "mobile gripper")
     mock_cartesian.assert_called()
     mock_serialdev.assert_called()
     mock_serialdev.assert_called_with('COM3', 115200, timeout=0.1)
コード例 #15
0
 def test__pipettor__init__(self, mock_home, mock_serialdev, mock_readAll,
                            mock_cartesian):
     mock_readAll.return_value = "Servo"
     ar = cartesian.arnie('COM1', 'COM2')
     p1000 = tools.pipettor(robot=ar,
                            com_port_number='COM3',
                            tool_name='p1000_tool')
     mock_readAll.assert_called()
     self.assertEqual(p1000.actual_welcome_message, "Servo")
     mock_cartesian.assert_called()
     mock_serialdev.assert_called()
     mock_serialdev.assert_called_with('COM3', 115200, timeout=0.1)
     mock_home.assert_called()
コード例 #16
0
 def test_genericToolEmptyInit__tool_data(self, mock_serialdev,
                                          mock_readAll, mock_cartesian):
     mock_readAll.return_value = "Welcome returned from the device"
     ar = cartesian.arnie('COM1', 'COM2')
     generic_tool = tools.tool(ar,
                               'COM3',
                               tool_name='generic_tool',
                               welcome_message='welcome')
     tool_data = generic_tool.tool_data
     self.assertEqual(tool_data, {
         'name': 'generic_tool',
         'welcome_message': 'welcome'
     })
コード例 #17
0
 def test__mobile_tool__init__(self, mock_serialdev, mock_readAll,
                               mock_cartesian):
     mock_readAll.return_value = "Welcome returned from the device"
     ar = cartesian.arnie('COM1', 'COM2')
     generic_tool = tools.mobile_tool(ar,
                                      'COM3',
                                      tool_name='generic_tool',
                                      welcome_message='welcome')
     mock_readAll.assert_called()
     self.assertEqual(generic_tool.actual_welcome_message,
                      "Welcome returned from the device")
     mock_cartesian.assert_called()
     mock_serialdev.assert_called()
     mock_serialdev.assert_called_with('COM3', 115200, timeout=0.1)
コード例 #18
0
    def test__pipettor__getStalagmyteCoord(self):
        # Mocking pipettor
        cartesian.arnie = mock.MagicMock()
        tools.llc.serial_device.readAll = mock.MagicMock()
        tools.llc.serial_device.readAll.return_value = "Servo"
        tools.llc.serial.Serial = mock.MagicMock()
        tools.pipettor.home = mock.MagicMock()

        # Initializing the robot
        ar = cartesian.arnie('COM1', 'COM2')
        ar.getToolAtCoord = mock.MagicMock()
        serial_device = llc.serial_device('COM3')
        p1000 = tools.pipettor.getTool(robot=ar, tool_name='p1000_tool')

        # Mimicking initial calibration
        p1000.setStalagmyteCoord(51, 69, 420)

        # Checking that calibration was properly saved
        x, y, z = p1000.getStalagmyteCoord()
        self.assertEqual(x, 51)
        self.assertEqual(y, 69)
        self.assertEqual(z, 420)

        # Emulating pipette tip pickup
        p1000.tip_attached = True

        # Checking the calibration recalculated due to the added tip
        xt, yt, zt = p1000.getStalagmyteCoord()
        self.assertEqual(xt, 51)
        self.assertEqual(yt, 69)
        self.assertEqual(zt, 420 - p1000.tip_added_z_length)

        # Repeating calibration with a new tip added
        p1000.setStalagmyteCoord(50, 70, 350)

        # Checking that the robot returns updated calibration points
        xt2, yt2, zt2 = p1000.getStalagmyteCoord()
        self.assertEqual(xt2, 50)
        self.assertEqual(yt2, 70)
        self.assertEqual(zt2, 350)

        # Emulating tip discard
        p1000.tip_attached = False

        # Calibration points must be the same as before tip calibration
        x2, y2, z2 = p1000.getStalagmyteCoord()
        self.assertEqual(x2, 51)
        self.assertEqual(y2, 69)
        self.assertEqual(z2, 420)
コード例 #19
0
 def test__mobile_tool__getDockingPointByToolName(self, mock_serialdev,
                                                  mock_readAll,
                                                  mock_cartesian):
     mock_readAll.return_value = "Welcome returned from the device"
     ar = cartesian.arnie('COM1', 'COM2')
     generic_tool = tools.mobile_tool(ar,
                                      'COM3',
                                      tool_name='generic_tool',
                                      welcome_message='welcome')
     generic_tool.rack.overwriteSlot(1, 0)
     # Providing calibration data
     generic_tool.rack.updateCalibratedRackCenter(240, 70, 600)
     x, y, z = generic_tool.getDockingPointByToolName()
     self.assertEqual(x, 240)
     self.assertEqual(y, 70)
     self.assertEqual(z, 600 + generic_tool.rack.z_working_height)
コード例 #20
0
    def test__calibrateRack__stackable(self):
        cartesian.arnie = mock.MagicMock()
        tools.mobile_touch_probe = mock.MagicMock()

        # Initializing robot with a tool (mocked)
        ar = cartesian.arnie('COM1', 'COM2')
        tp = tools.mobile_touch_probe('COM3')

        # Touch probe parameters
        tp.getStalagmyteCoord = mock.MagicMock()
        tp.getStalagmyteCoord.return_value = (66, 66, 500)

        # Initializing stack of racks
        r = racks.stackable(rack_name='RackThatCannotBeNamed',
                            rack_type='test_rack')
        r_below = racks.stackable(rack_name='BottomRackThatCannotBeNamed',
                                  rack_type='test_rack')
        r_below.overwriteSlot(1, 4)

        # Parameters of a bottom rack
        r_below.getSavedSlotCenter = mock.MagicMock()
        r_below.getSavedSlotCenter.return_value = (200, 100, 600)

        # Forming a stack by placing top rack onto the bottom rack
        r_below.placeItemOnTop(r)

        # Mocking findCenterOuter function to give different outputs for 'x' and 'y'
        tp.findCenterOuter = mock.MagicMock(side_effect=[205, 95])
        tp.findWall = mock.MagicMock()
        tp.findWall.return_value = 301

        # Performing calibration
        x, y, z = calibration.calibrateRack(tp, r)

        # Evaluating outputs
        self.assertEqual(x, 205)
        self.assertEqual(y, 95)
        self.assertEqual(z, 301)

        # Evaluating robot movements based on provided parameters
        tp.robot.move.assert_has_calls([
            mock.call(x=129, y=100, z=406, z_first=False),
            mock.call(x=205, y=54),
            mock.call(x=205, y=95),
            mock.call(z=400)
        ])
コード例 #21
0
 def test_mobile_tool_save(self, mock_serialdev, mock_readAll,
                           mock_cartesian, mock_json_dumps):
     mock_readAll.return_value = "Welcome returned from the device"
     ar = cartesian.arnie('COM1', 'COM2')
     generic_tool = tools.mobile_tool(ar,
                                      'COM3',
                                      tool_name='generic_tool',
                                      welcome_message='welcome')
     mock_json_dumps.return_value = "{'a': 'b'}"
     generic_tool.save()
     mock_json_dumps.assert_called_with({
         'name': 'generic_tool',
         'welcome_message': 'welcome'
     })
     try:
         os.remove('generic_tool.json')
     except:
         pass
コード例 #22
0
    def test__mobile_tool__getTool(self, mock_serialdev, mock_readAll,
                                   mock_cartesian):

        # Preparing for the test
        try:
            os.remove('generic_tool.json')
        except:
            pass

        with open('generic_tool_rack.json', 'w') as f:
            f.write(json.dumps({'a': 'b', 'position': [50, 66, 450]}))

        # Setting mocks
        mock_readAll.return_value = "Welcome returned from the device"

        # Initializing
        ar = cartesian.arnie('COM1', 'COM2')
        ar.getToolAtCoord = mock.MagicMock()
        serial_device = llc.serial_device('COM3')
        generic_tool = tools.mobile_tool.getTool(robot=ar,
                                                 welcome_message='welcome',
                                                 tool_name='generic_tool')

        z_pickup = 450 - generic_tool.rack.z_working_height

        # Testing
        ar.getToolAtCoord.assert_called_with(50,
                                             66,
                                             z_pickup,
                                             z_init=0,
                                             speed_xy=None,
                                             speed_z=None)

        # Cleaning up after the test
        try:
            os.remove('generic_tool.json')
        except:
            pass
        try:
            os.remove('generic_tool_rack.json')
        except:
            pass
コード例 #23
0
    def test_findCenterOuter(self):
        cartesian.arnie = mock.MagicMock()
        tools.llc.serial_device.readAll = mock.MagicMock()
        tools.llc.serial_device.readAll.return_value = "stationary touch probe"
        tools.llc.serial.Serial = mock.MagicMock()

        ar = cartesian.arnie('COM1', 'COM2')
        stp = tools.stationary_touch_probe(ar)

        stp.findWall = mock.MagicMock()
        stp.findWall.side_effect = [100, 200, 100, 200]

        center = stp.findCenterOuter(axis='x',
                                     raise_height=10,
                                     dist_through_obstruct=210)
        self.assertEqual(center, 150)
        center = stp.findCenterOuter(axis='y',
                                     raise_height=10,
                                     dist_through_obstruct=210)
        self.assertEqual(center, 150)
コード例 #24
0
    def test_obtainSlotCenter(self, mock_serialdev, mock_readAll,
                              mock_cartesian):
        try:
            os.remove('generic_tool_rack.json')
        except:
            pass

        mock_readAll.return_value = "Welcome returned from the device"
        ar = cartesian.arnie('COM1', 'COM2')
        generic_tool = tools.tool(ar,
                                  'COM3',
                                  tool_name='generic_tool',
                                  welcome_message='welcome')
        generic_tool.rack.overwriteSlot(1, 0)
        slot_center = generic_tool.rack.getSavedSlotCenter()
        self.assertGreater(slot_center[0], 230)
        self.assertLess(slot_center[0], 260)
        self.assertGreater(slot_center[1], 50)
        self.assertLess(slot_center[1], 80)
        self.assertGreater(slot_center[2], 500)
        self.assertLess(slot_center[2], 700)
コード例 #25
0
 def test_mobile_tool_getToolFromSerialDev(self, mock_serialdev,
                                           mock_readAll, mock_cartesian):
     mock_readAll.return_value = "Welcome returned from the device"
     ar = cartesian.arnie('COM1', 'COM2')
     serial_device = llc.serial_device('COM3')
     generic_tool = tools.mobile_tool.getToolFromSerialDev(
         robot=ar,
         device=serial_device,
         welcome_message='welcome',
         tool_name='generic_tool')
     mock_readAll.assert_called()
     self.assertEqual(generic_tool.actual_welcome_message,
                      "Welcome returned from the device")
     mock_cartesian.assert_called()
     mock_serialdev.assert_called()
     mock_serialdev.assert_called_with('COM3', 115200, timeout=0.1)
     tool_data = generic_tool.tool_data
     self.assertEqual(tool_data, {
         'name': 'generic_tool',
         'welcome_message': 'welcome'
     })
コード例 #26
0
    def test__mobile_gripper__placeRack(self):

        gripped_rack = racks.stackable(rack_name='RackThatCannotBeNamed',
                                       rack_type='test_rack')
        dest_rack = racks.stackable(rack_name='BottomRackThatCannotBeNamed',
                                    rack_type='test_rack')
        dest_rack.updateCenter(600, 300, 550, 90, 66, 500)
        dest_rack.overwriteSlot(1, 3)

        cartesian.arnie = mock.MagicMock()
        tools.llc.serial_device.readAll = mock.MagicMock()
        tools.llc.serial_device.readAll.return_value = "mobile gripper"
        tools.llc.serial.Serial = mock.MagicMock()

        ar = cartesian.arnie('COM1', 'COM2')
        gr = tools.mobile_gripper(robot=ar,
                                  com_port_number='COM3',
                                  tool_name='mobile_gripper')
        gr.operateGripper = mock.MagicMock()
        gr.getToRackCenter = mock.MagicMock()
        gr.setStalagmyteCoord(x=210, y=95, z=430)
        gripped_rack.setGrippingProperties(90, 80, 10, gripper=gr)
        dest_rack.setGrippingProperties(90, 80, 10, gripper=gr)

        gr.sample = gripped_rack

        placed_rack_object, param_dict = gr.placeRack(dest_rack, test=True)

        self.assertEqual(gr.getStalagmyteCoord()[2], 430)
        self.assertEqual(dest_rack.calcRackCenterFullCalibration(tool=gr),
                         (600 + 210 - 90, 300 + 95 - 66, 550 + 430 - 500))
        self.assertEqual(gripped_rack, placed_rack_object)
        self.assertEqual(param_dict['destination_coord'][0], 600 + 210 - 90)
        self.assertEqual(param_dict['destination_coord'][1], 300 + 95 - 66)
        self.assertEqual(param_dict['destination_coord'][2], 550 + 430 - 500)
        self.assertEqual(param_dict['rack_heigth'], 100)
        self.assertEqual(param_dict['z_final_absolute'], 480)
        self.assertEqual(param_dict['open_diam'], 90)
コード例 #27
0
    def test__touch_probe__findWall__step_back_length_used(self, mock_llc):
        cartesian.arnie = mock.MagicMock()

        ar = cartesian.arnie()
        ar.axisToCoordinates.return_value = [90, 0, 0]

        tp = tools.stationary_touch_probe(robot=ar)
        tp.step_dict = {
            0: {
                'step_fwd': 3,
                'speed_xy_fwd': 1000,
                'speed_z_fwd': 2000,
                'step_back': 3,
                'speed_xy_back': 1000,
                'speed_z_back': 2000
            },
            1: {
                'step_fwd': 0.2,
                'speed_xy_fwd': 200,
                'speed_z_fwd': 1000,
                'step_back': 1,
                'speed_xy_back': 500,
                'speed_z_back': 1000
            },
            2: {
                'step_fwd': 0.05,
                'speed_xy_fwd': 25,
                'speed_z_fwd': 500,
                'step_back': 0.2,
                'speed_xy_back': 50,
                'speed_z_back': 500
            },
        }

        tp.findWall(axis='x', direction=1)
        tp.robot.axisToCoordinates.assert_called_with(axis='x', value=-3)
        tp.findWall(axis='x', direction=1, step_back_length=-3)
        tp.robot.axisToCoordinates.assert_called_with(axis='x', value=3)
コード例 #28
0
    def test__mobile_touch_probe__returnTool(self, mock_serialdev,
                                             mock_readAll, mock_cartesian):

        with open('mobile_touch_probe_rack.json', 'r') as f:
            saved_dict = json.loads(f.read())
        x, y, z = saved_dict['position']

        config = configparser.ConfigParser()
        config_path = 'configs/mobile_touch_probe_rack.ini'
        config.read(config_path)
        z_working_height = float(config['geometry']['z_working_height'])
        z_height = float(config['geometry']['z_box_height'])
        z_pickup = z - z_working_height

        # Setting mocks
        mock_readAll.return_value = "Arnie's mobile touch probe/nRev. 1.01, 11/27/2019"

        # Initializing
        ar = cartesian.arnie('COM1', 'COM2')
        ar.getToolAtCoord = mock.MagicMock()
        serial_device = llc.serial_device('COM3')
        mobile_touch_probe = tools.mobile_touch_probe.getTool(robot=ar)

        mobile_touch_probe.returnTool()

        # Testing
        ar.getToolAtCoord.assert_called_with(x,
                                             y,
                                             z_pickup,
                                             z_init=0,
                                             speed_xy=None,
                                             speed_z=None)
        ar.returnToolToCoord.assert_called_with(x,
                                                y,
                                                z_pickup,
                                                z_init=0,
                                                speed_xy=None,
                                                speed_z=None)
コード例 #29
0
    def test_STP_obtainCalibrationPoints(self, mock_serialdev, mock_readAll,
                                         mock_cartesian):
        mock_readAll.return_value = "Arnie's stationary touch probe/nRev. 1.01, 11/27/2019"
        ar = cartesian.arnie('COM1', 'COM2')
        stp = tools.stationary_touch_probe(ar, 'COM3')
        x, y, z, opposite_x, orthogonal_y, raise_height = stp.rack.getSimpleCalibrationPoints(
        )

        # This test depends on the actual length of the stationary probe.
        # If length is physically changed, the test may fail.
        # In this case, it is safe to correct the number to represent changed dimensions.
        self.assertGreater(x, 70)
        self.assertLess(x, 100)
        self.assertGreater(y, 60)
        self.assertLess(y, 80)
        self.assertGreater(z, 420)
        self.assertLess(z, 510)
        self.assertGreater(opposite_x, 16 + 1 + 1)
        self.assertLess(opposite_x, 30)
        self.assertGreater(orthogonal_y, (16 + 1) / 2.0)
        self.assertLess(orthogonal_y, 110)
        self.assertGreater(raise_height, 1)
        self.assertLess(raise_height, 100)
コード例 #30
0
    def test__mobile_tool__returnTool(self, mock_serialdev, mock_readAll,
                                      mock_cartesian):
        mock_readAll.return_value = "Welcome returned from the device"
        ar = cartesian.arnie('COM1', 'COM2')
        ar.returnToolToCoord = mock.MagicMock()
        generic_tool = tools.mobile_tool.getToolAtCoord(
            robot=ar,
            x=50,
            y=66,
            z=450,
            z_init=0,
            speed_xy=2000,
            speed_z=3000,
            welcome_message='welcome',
            tool_name='generic_tool')
        generic_tool.rack.overwriteSlot(1, 0)
        # Mimicking tool coordinates load
        generic_tool.rack.updateCalibratedRackCenter(50, 66, 450)

        generic_tool.returnTool()

        # TODO: After finishing the data system, provide proper test
        # Test called with.
        ar.returnToolToCoord.assert_called()