We were able to determine a spring constant K to fit our model of the non-rigid gripper. Using this fit model we were able to put an object at a desired orientation (angle) despite the non-rigid behavior of the gripper. We evaluated the success of reaching a desired angle of 90 degrees for three objects of varying mass and and achieved low rates of error (within roughly +/-10 degrees at worst).
Additionally we were able to demonstrate measuring a new object’s mass. For a 200g object, we determined the mass to be 168g through our model. While this is a 16% error rate, it still is pretty impressive considering that we are measuring the mass of an object based on our model of the torsional spring and considering many points of measurement error (discussed below).
There are many points of potential measurement error in this system. For example there is error in the use of AR tags (imperfect intrinsic matrix for camera, not perfectly aligned AR tags, measurement errors in ar_track_alvar package). We also have delay in getting angle measurements which only happen at 10Hz.
We believe that we achieved our goal of modeling the non rigid behavior of the vacuum gripper. We were able to create a model that lets us predict object angle given gripper angle and thus we were able to understand how to change our gripper angle to get a desired object angle.
Attaching Vacuum Gripper to Sawyer — One issue we faced was attaching the vacuum gripper base on the Sawyer robot arm. To get around this, we unscrewed the existing gripper, added a spacer nut on the existing apparatus and then lined up one screw hole of the vacuum gripper base. We also 3D designed a new base to interface with the existing Sawyer arm in case the one screw attachment was not strong enough; however, we ending up not needing it since one screw was able to hold the gripper well enough.
Object Hitting Side of Gripper — As pictured below sometimes part of the object would hit the side of the vacuum gripper. This would cause the angle between object and robot to be constrained, which thus causes our torsional spring model to break down. Whenever this happened, we tried grabbing the object at a different location in order sidestep this issue.
Object would sometimes hit side of gripper, which constrained the free movement.
Here's the Sawyer mounting holes.
Here's the mounting holes for the Robotiq E pick. They do not align with the holes on Sawyer.
Managing package and package dependencies — In the beginning we ran into many errors because we were trying to code from ROS, Sawyer, the camera, and our vacuum gripper to work all at once. Since much of this code was dependent on each other, we ran into many dependency issues. To mitigate this, we chained our ROS workspaces together to keep our files separated while still being able to access them together.
Incorrect order of launch files + processes slowing down testing — We got stuck many times because we started nodes/launch files/processes in the wrong order and would result in errors. We also had to shut down and restart every process in the event of a failure which took up a lot of time and slowed down our development efficiency. To fix this, we wrote a new launch file that correctly started processes in the correct sequence efficiently.
Inconsistent motion plan — We used the MoveIt library to calculate motion plans between different positions on the Sawyer arm. Unfortunately the plan calculated was not consistent and would sometimes result in our robot doing wild motions. This would often knock down our setup or give us inconsistent results. To mitigate this, we implemented checkpointing and interpolated our poses. Instead of one continuous motion, we had the arm move to intermediate positions to manage wild/sudden movements
AR tags not facing the camera — When using the AR tags to try to calculate the angle between the object/gripper or object/wall, we found that the gripper kept rotating and pushing the AR tag out of the camera’s field of view. One potential solution to mitigate this was to use 2 cameras. However with trial and error, we found that enforcing an orientation constraint on the Sawyer joint proved to be the most reliable solution.
2D Implementation: Our solution is done assuming that the gripper and object are always in a single plane. This works well when the desired object angle is within that plane, but breaks down when we want to think about three dimensions.
Steady State Dynamics: Currently, we wait for the system to enter a steady state with no oscillations and no movement before taking measurements or using our model to make predictions. Our model is not able to actually predict a full motion plan of an object as it is manipulated along various trajectories. Rather, our model’s objective is to calculate desired quantities of the system at steady state. In the future, we would like to extend our model to compute the desired quantities and model the system dynamics more completely. Potentially, discretizing our system and applying our lagrangian dynamics model would allow us to compute the system state in time-steps when the system is not at its steady state.
We created a table constraint to help reduce collisions during path planning. The constraint is shown in green.