This tutorial demonstrates how to create a detecting if a part is correctly seeded in a fixture
Throughout the manufacturing industry part placement in a fixture has long been a challenge for automation. In many applications it is necessary to place a part into a fixture and, in some cases, once the part is placed the fixture will close or manipulate the part to prepare it for its next step. If this part is not placed correctly, which may happen because of a variety of variables upstream, it could cause damage to the fixturing and/or part when a close action occurs after placement. A solution to this problem has historically been to add more sensors. This could mean setting up 3rd party sensors on fixturing that detects correct position however, that solution entails more parts, more set-up, and more time which all mean more money. Now there is a more streamlined solution, using Sawyer’s built- in force sensing and control capabilities.
In this example I will show how force control and sensing can be added in a task and used to confirm secure placement. The main idea is that once a part is successfully placed in the fixture, it will be constrained from moving in certain directions. By using contact nodes, we can perturb the part in the constrained directions in a force limited move. If the part is in place, it will not move and will not be damaged because the contact move is force limited. If the part is not in place, it will move easily and we can detect that as a misplace.
The task example is an ICT testing rig which picks up a board using vision and places the board in its testing fixture. The testing rig includes a light stack that will indicate to the operator when parts have been placed. If the Robot can confirm secure placement of the part it will trigger a green light, drop the part, and proceed to get a New part. If it cannot confirm a secure placement the robot will trigger a red light, move the part to another location to be dropped off, then cycled back for a new part and begin the cycle anew.
The information below will be targeted to setting up logic to respond to the Commanded Tool Forces. There will be no information on the vision pick and very little on setting up the place logic. This is designed to give an experienced user a new approach to force sensing.
Building the Place Sequence
- To Begin, the Approach and Place of the sequence is set up just as it would be in a basic Place.
- After those moves are added a Contact Mode Node, which will work as our parent during the evaluation, is included.
- The first Contact node, Enter Contact, is added as the first child of the Contact Mode node. It is used to bring the Robot into its Contact state.
- The pose Enter Contact is the same position as the Place position. The position where the board should sit if the part has been seeded properly.
- The next Contact node, Check Y Position, is added.
- Check Y Position has a position which is roughly 50 mm in the +Y direction (same X and Z coordinates).
- Using the Node inspector on the Check Y Position Contact node I am able to limit the Force the robot will use in the Y direction, see the picture below. In this case I have limited it to 10 N. Using these parameters, when the robot attempts to Move from Contact position Enter Contact to Check Y position it will use a maximum of 10 N to achieve that position.
- Add a wait node. This allows the Robot to settle and gives the following Do If a window to evaluate from.
- Add a Priority node, the children of this priority node will be the Good and Bad Placement branches. The behavior tree is set up this way to give this part of the task an IF-ELSE logic structure.
- Add a Good Placement Do If. The particularities of this Nodes will be explained further below. The parent of this node is the Priority Node made in step 9.
- Add a Bad Placement sequence node. The parent of this node is the Priority Node made in step 9.
- Add logic to respond to the Good and Bad Placement to fit the task goals. As stated earlier, a Good placement in this example turns on the Green Stack light, drops the part and retracts. A Bad placement turns on a red light and moves the part to another location, drops the part there, and retracts.
- The logic then exits the Contact Mode Node and proceeds to start the cycle again.
What this means in practice using this example:
- If the part is correctly placed securely in the fixture; when the robot attempts to move the part 50 mm in the +Y it will NOT be able to. The Robot will use 10N to try and achieve this position. It will not use more than 10 N which is useful to prevent any damage to the part or fixture but it will use all 10 N. Therefore, the commanded tool Force will show 10 N of force during this attempted move.
- If the Part is NOT securely place in the fixture; when the robot attempts to move the part 50 mm in the +Y it WILL be able to. The Robot will easily move the part the 50 mm distance. This ease of movement will allow the Robot to move the part with less than 10 N of force. Therefore, the commanded tool Force will show a force of LESS THAN 10 N of force while it completes the move.
How to use this to evaluate a Good Place or a Bad Place.
Using the information in the section above we can then add in logic that will use the Commanded Tool Forces in the Y direction to determine a Good or Bad Place. To do this I created a Do If which follow the logic below:
- A Good Place: The Part is securely in the Fixture.
- Variable: Commanded Force.Y
- Is GREATER THAN OR EQUAL TO
- Or equal to is the key part of this operator. The force will not rise above 10 but it will be equal to. An Equal to can also be used here.
- Value: 10 N
When the Robot enters the priority node it will look to see if the Good Placement Do If logic is satisfied, if it is not it will proceed to the Bad Placement sequence. In my example I had Sawyer return to pick up a new Part if the placement was Good or, If Bad, I had Sawyer place the part that did not get secured in another location. This location could be a place where an operator can inspect the part or back onto a conveyor for Sawyer to try and Pick up again.
High level info: Using Commanded force vs Measured force
In this task, we used commanded forces in setting up the logic. This could have been possible by using measured forces as well, however, using commanded forces has the following advantage, making it a better candidate:
Commanded forces are generated directly by the controller. Therefore, there is a direct correspondence between what forces we ask for in the contact nodes and what commanded forces report. In this example, the force limit we ask for is 10N, and the commanded force will always be less than or equal to 10N. Note that this is not the case if we were to use measured forces, i.e. measured forces could exceed 10N (due to measurement and control noise.) In this sense, the commanded force is a more accurate value to use.
It should be noted that commanded forces should only be used when we are under a contact parent, and otherwise they are set to zero. Measured forces are always available.
The purpose of this post has been to show that it is possible to use Sawyer's Force Sensing and control capabilities to determine whether or not a part has been placed correctly. I also wanted to showcase using Commanded Forces in a useful way. This was developed with the help of Navid Aghasadeghi, Senior Robotics engineer.
Attached below are a number of images.
Figure 1. The full Behavior tree
Figure 2. A focused look at the logic used to determine a Good place or a Bad place.