I would like to be able to have a known path, and be able to "slice" that path into tiny moves such as the UR does in the background when generating motion. During each move slice, I'd like to look at a force value on the FT sensor and adjust the next move accordingly so that the robot can either: 1. move on a path and keep a constant force applied very consistently or 2. "react" or follow a non smooth surface.
Actualy, their si no easy way of recording a path to play it back in force mode. Fortunately, we are developping such a tool. It will add a PATH node to Polyscope programming interface and you will be free to use this path inside a standard forcemode node. The forcemode doesn't use the Force/Torque sensor data yet but we are also working on that. Your program will resume to a path node into a force node.
@MarcAntoine_Lacasse @Etienne_Samson I do not mean doing this while using force mode, or recording a path. For example, I have a starting point and an end point (or a distance to travel) and I want to slice that path up into many tiny moves. During each tiny move in positioning mode, I would like to monitor the force along an axis from the FT Sensor, and then update my next tiny move in the positive or negative direction of that axis. This would allow very sensitive reaction to forces vs. using the UR force mode.Does this make more sense?
You could make the moves relative to a frame and in a separate thread, move this frame in reaction to the force ?
@Grady_Turner is the path that you want to travel linear? Can you draw out a diagram of what you are wanting it to look like, I have an idea based on some work we did creating a modifiable circle script so that we can make ellipses if we want with the script.
@MarcAntoine_Lacasse Great idea! I will try it.With my initial testing I calculated an end point from a start point, then used interpolate pose function to slice up the path. In a thread I would, based on force, alter the next position output from the interpolate pose function. It did not work so smoothly...
@matthewd92 It was not smooth. I played with all of the numbers for a good while and still it was rough. These were: blend radius, slice size, speed, acceleration, thread update rate, and force range for altering the points. A lot of variables to be sure...
@Grady_Turner are you still interested in a solution?In case no, I'm happy to have one of our support engineers provide a small video explaining how that problem would be solved with our software.
@Grady_Turner one suggestion that was given to me last week since we are trying to do a similar thing is to use the servoj command instead of a movej or movel command. You would need to feed the command the joint positions but if you have the slice in TCP coordinates you could use get_inverse_kin() to get the joint positions. Supposedly this is how you get very smooth movement on the robot. I have gotten it to work in a thread, but not in what I am trying to do. Let me know if you have any questions. Also, if you want to share the program I could take a look at it as well.
@Simon Yes I am still interested, and would be happy to see what you come up with.@matthewd92 Thanks for the tip, I'd forgotten all about that command.. I'll give it a try and share the results.
@Grady_Turner something I was told was to try to feed the servoj command a move every time slice to get the best response.
@Sebastien @Grady_Turner Here's the result from a short demo in the lab we made this afternoon https://youtu.be/V9jLHwuUhLQWhat do you think, would that solve your problem?
@Simon Nice and smooth! Do you have automatic trajectory generation in the software? Let's say along the edge of a particular CAD object?
@SebastienWe have path interpolation (linear, ptp etc.) as well as collision-free motion planning in our software. Right now, you cannot pick an edge directly but we offer tools like snapping to vertices to select points on the surface of a CAD file. Based on these points you can generate the motion you like, e.g. a linear or spline motion. In the image you see a motion along the edges of a CAD file with its velocities encoded using a color scheme from red (slow) to green (fast).You can also generate collision-free trajectories around teached obstacles as well as obstacles loaded from CAD files automatically. Alternatively you can load a path or reference points from a CSV file.
@Simon Offline programming from CAD requires precise calibration and part location relative to the robot frame.Does generated trajectories generally require a touch up ?Is it faster to use a path recording tools ?The force overlay during execution, is it a custom force control or the UR force mode ?@Grady_Turner Suppose you have a known path recorded at 10 Hz and you want to play it back with force control at 125 Hz, you could have the main loop that set a global target poses variable at 10 Hz and a thread running at 125 Hz that calculates an offset poses according to the force and calls something like servoj(get_inverse_kin(pose_add(target_poses, offset_pose)), t=0.008). This way the robot target position would be updated at 125 Hz even though the trajectory has been recorded at 10 Hz.
@MarcAntoine_Lacasse This depends a lot on the mechanical setup, the required accuracy to solve a given task and if the required path is known without the real setup. You often have to calibrate the reference coordinate frame of the path but this takes less time than recording a highly accurate path. For tasks like polishing it is usually not easy to define a path offline without having the real setup and recording is the better choice.In our software, we use a custom force control algorithm (inside the generate URScript), which can be far better customized than the UR force control.
@Simon and @MarcAntoine_Lacasse Based on the experience of some projects that we worked on, for glue dispensing application that require just programming a path along a specific surface, to avoid part localisation matching between the virtual world and the real robot cell, I would consider path recording option. This way you simply record the path live on the object and I believe it saves time and removes all the position matching issue between virtual and real cell. However, we did robot milling project where extremely complex trajectories needed to be programmed and this required us to use offline programming tool like MasterCam and RobotMaster.
@Grady_Turner @matthewd92 I was curious to see how that program turned out. I have a part that I need to do something like this but with a constant moment rather than force as the robot move along. Can you guys share some programs to help us get started. We could build onto it and adapt it to our application and then share it back!
I would like to be able to have a known path, and be able to "slice" that path into tiny moves such as the UR does in the background when generating motion. During each move slice, I'd like to look at a force value on the FT sensor and adjust the next move accordingly so that the robot can either: 1. move on a path and keep a constant force applied very consistently or 2. "react" or follow a non smooth surface.