Source code for hop.hexabundle_allocation.hector.magnets.circular
from ...general_operations.geometry_shapes.circle import circle
from ...hector.constants import circular_magnet_radius,robot_arm_width
from math import sin, cos, pi
from ...hector.magnets.pickup_areas import tangential_right,tangential_left,radial_inward,radial_outward
[docs]class circular_magnet(circle):
# initializing a circular magnet with all respective parameters
def __init__(self,center,orientation,index,galaxyORstar,Re,mu_1re,Mstar,magnet_label,hexabundle,rads,rotation_pickup,rotation_putdown,azAngs,rectangular_magnet_input_orientation,IDs):
radius = circular_magnet_radius
super().__init__(center,radius,orientation)
self.index = index
self.placement_index = 0
self.galaxyORstar = galaxyORstar
self.Re = Re
self.mu_1re = mu_1re
self.Mstar = Mstar
self.magnet_label = magnet_label
self.hexabundle = hexabundle
self.rads = rads
self.rotation_pickup = rotation_pickup
self.rotation_putdown = rotation_putdown
self.azAngs = azAngs
self.rectangular_magnet_input_orientation = rectangular_magnet_input_orientation
self.IDs = IDs
# calculating the distance between magnet center to pickup area center
[docs] def calculate_center_magnet_to_center_pickup_area_length(self):
center_magnet_to_center_pickup_area_length = 0.5 * (0.5 * robot_arm_width + self.radius)
return center_magnet_to_center_pickup_area_length
# calculating the center coordinate of pickup area- Tangential Right
[docs] def calculate_center_coordinate_tangential_right_pickuparea(self):
center_coordinates = \
[self.center[0] + self.calculate_center_magnet_to_center_pickup_area_length() * sin((pi / 180) * (- self.orientation)),
self.center[1] + self.calculate_center_magnet_to_center_pickup_area_length() * cos((pi / 180) * (- self.orientation))]
return center_coordinates
# calculating the center coordinate of pickup area- Tangential Left
[docs] def calculate_center_coordinate_tangential_left_pickuparea(self):
center_coordinates = \
[self.center[0] - self.calculate_center_magnet_to_center_pickup_area_length() * sin((pi / 180) * (- self.orientation)),
self.center[1] - self.calculate_center_magnet_to_center_pickup_area_length() * cos((pi / 180) * (- self.orientation))]
return center_coordinates
# calculating the center coordinate of pickup area- Radial Inward
[docs] def calculate_center_coordinates_radial_inward_pickuparea(self):
center_coordinates = \
[self.center[0] + self.calculate_center_magnet_to_center_pickup_area_length() * sin((pi / 180) * (90 - self.orientation)),
self.center[1] + self.calculate_center_magnet_to_center_pickup_area_length() * cos((pi / 180) * (90 - self.orientation))]
return center_coordinates
# calculating the center coordinate of pickup area- Radial Outward
[docs] def calculate_center_coordinates_radial_outwards_pickuparea(self):
center_coordinates = \
[self.center[0] - self.calculate_center_magnet_to_center_pickup_area_length() * sin((pi / 180) * (90 - self.orientation)),
self.center[1] - self.calculate_center_magnet_to_center_pickup_area_length() * cos((pi / 180) * (90 - self.orientation))]
return center_coordinates
# calculating pickup areas using their respective center coordinates
[docs] def create_pickup_areas(self):
self.pickup_areas = \
[tangential_right(self.calculate_center_coordinate_tangential_right_pickuparea(), -self.orientation),
tangential_left( self.calculate_center_coordinate_tangential_left_pickuparea(), -self.orientation),
radial_inward( self.calculate_center_coordinates_radial_inward_pickuparea(), 270 - self.orientation), # (270 -) added for adjustment of the 10mm RAW
radial_outward( self.calculate_center_coordinates_radial_outwards_pickuparea(), 270 - self.orientation)] # (270 -) added for adjustment of the 10mm RAW
return self.pickup_areas
# check for the magnet being circular type
[docs]def is_circular_magnet(magnet):
return isinstance(magnet, circular_magnet)