Robots
N9 ROBOT
The N9 Robot is a four-axis SCARA manipulator. It features an infinitely rotating end-effector with torque sensing designed specifically for capping vials, a built-in probe for pipetting, and tool-grasping capabilities that enable wafer handling.
The robot is designed to quickly and repeatably transport samples around the N9 platform, making it the workhorse of any North Robotics system
SYSTEM OVERVIEW
The N9 Robot is a four-axis serial manipulator designed in a SCARA style with a prismatic (translating) z-axis, revolute “shoulder” and “elbow” joints, and an infinitely rotating “gripper” joint. In addition to these four principal axes, the gripper fingers may be pneumatically opened and closed to grasp objects.
PROGRAMMING EXAMPLES
This section provides a quick reference for basic N9 programming commands. A full script of all the examples in this section is included at the end. All scenarios in this section assume a C9 Controller object already exists in the C9 network. For more information on setting up the C9 Network, consult the C9 Controller Manual.
NOTE: These commands work for any axis connected to a North Robotics controller, not just the N9.
1. HOMING THE ROBOT
There are several scenarios in which homing N9 Robot is required. Home the N9 after a power cycle, after the robot servos have been disabled (to pose it manually, for example), or after a crash. To home the robot, use the home_robot() command:
The process for homing the N9 automatically follows an ordered set of commands. The gripper fingers and the vial clamp (if installed) will open first. The z-axis homes next. Finally, the shoulder, elbow, and gripper home simultaneously. Each joint homes by moving slowly towards its programmed default position until it contacts a limit switch. Upon contacting a limit switch, the joints will make slight adjustments to their positions until they find the closest reference mark on the encoder (internal position sensor).
NOTE: In its home position, each joint axis of an ideal N9 will have a position of zero counts. However, when calibrating each robot for precise alignment with respect to the deck, the exact position of any given axis will typically be between 200-800 counts.
2. REPORTING N9 POSITION
To report the position of each joint in units of counts, use the get_robot_positions() command:
3. MOVING A JOINT
Use one of the following commands to move an individual joint. Take note of the relevant units for each joint:
NOTE: All movement commands on the platform are absolute, not relative. The z-axis is the only axis that moves in units of mm. Likewise, only the gripper, elbow, and shoulder move in units of radians. The general move_axis() uses units of counts that are accepted by all axes.
To specify which axis to move, use either the joint number or use the joint name constants (GRIPPER, ELBOW, SHOULDER, Z_AXIS) defined in the North package.
4. POSITIONING THE N9
Use the move_xyz() command to move the end-effector of the robot to a given position in Cartesian space:
There are several optional arguments that can be passed to modify the command’s behavior. Refer to the API Reference for examples.
The target position of the end-effector is with respect to the global Cartesian origin located at deck height, co-linear with the axis of rotation of the shoulder. For example, if the arm is lowered such that it touched the deck, the bottom center of the shoulder joint would be at the global Cartesian origin. Visually, the global Cartesian origin is located at the second fastener hole visible forward of the z-axis column:
5. RECORDING N9 POSITIONS (POSES)
It is possible to capture the robot’s current pose and add it to the Locator Table when using the NorthIDE with an N9 Robot. To record a pose, first navigate to Tools > Servo Off. This disables the servo action of the N9. You may then pose the robot by hand. Press the Capture button below the Locator Table to save the posed position.
If you are not using the NorthIDE in your C9 Network, disable the servos using the robot_servo(False) command. Next, return the current pose as a list with the get_robot_positions() command. It is up to the user to record these positions as desired in your workflow.
After the servos are disabled, the N9 may be moved to any position. Multiple positions can be recorded while the servos are disabled. When the user has completed capturing positions by hand, whether from the Tools menu in the NorthIDE or through code, home the robot before moving it programmatically:
NOTE: It is not possible to record a pose with the N9 Simulator. This can only be done with a physical N9 unit.
6. MOVING TO A SET LOCATION OR POSE
To move the N9 to a location created with the NorthIDE, or to the pose stored in a list from the get_robot_positions() command, use the respective goto commands:
The goto_safe() command will move the N9 to the top of its range in the z-axis, allowing it to safely move to the target location (x, y) before descending to the target height (z). The goto()command moves all axes at once. The goto commands take a list of four positions as the elements of their arguments. These four elements represent the target joint positions of the gripper, elbow, shoulder, z_axis, given in units of counts.
7. SETTING VELOCITY AND ACCELERATION
The velocity and acceleration of moves are set in joint space on the N9. This means the user controls how quickly each joint moves, not how fast the end effector of the robot moves. Almost all of the move commands demonstrated in this tutorial accept the optional keyword arguments vel and accel. The default velocity and acceleration of N9 movements (excluding specialty moves like homing, capping, and uncapping) are set with the default_vel and default_accel members.
NOTE: If a move command involves multiple axes, the velocity and acceleration specified for that move command will apply to the axis farthest away from its target, while the velocity and acceleration of the other axes are scaled down proportionally with their proximity to their respective target positions. This way, all axes start and end their moves at the same time.
Velocities are set in units of counts/second to a maximum of 100,000 cts/s. Default velocity is 5000 cts/s. Accelerations are set in units of counts/second squared to a maximum of 500,000 cts/s2. Default acceleration is 50,000 cts/s2. Velocity profiles are trapezoidal (constant acceleration). As a general rule, acceleration should be approximately 10x velocity. It is common to set acceleration to the maximum value of 500,000 cts/s2 if operating at velocities greater than 50,000 cts/s.
NOTE: Values less than or equal to 100 are not supported by the system and are interpreted as a percentage of the maximum. If a velocity argument is given but the accel argument is not provided, the value of accel is set to 10x the given velocity or 500,000 cts/s2, whichever is smaller.