-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Change ur_gazebo to EffortJointInterface [discussion] #521
Comments
We could also configure a set of both position and effort controllers in the controller configuration The position ones will be started by default, with the option for the user to switch to the effort ones. It would be the user's responsibility to make sure she's also started the simulation with the effort Trying to load/start an effort-based controller when that interface is unavailable will simply return a nr of fatal errors. |
First: thanks for the great work @gavanderhoorn, your contributions have been very helpful ! I am also struggling with some issues related to the use of the |
@matteolucchi wrote:
Please make sure to check the And #518 changes quite a few things in And ros-industrial/abb_experimental#110 shows some nice work for an ABB IRB 1200 on a similar topic. Of course this is not directly usable for the URs here, but the linked tutorial and explanation of the work done might help. |
Yes, I was thinking to start from #518 to ease things for a possible future pull request.
Thank you ! I will look into that! |
Oh and I almost forgot: #504. As we actually know the tensors, masses and cogs for all robots, we should use those. Perhaps @fmauch could use some help with that @matteolucchi. |
Ok so If I got it right, until now @fmauch updated the cog of the UR16e in #504, and this should be replicated for all the other models. Once this is done, all the physical parameters of the different models should be correct (or good enough), and I could proceed with switching to the |
Whatever we have for the other variants should be compared to the information @fmauch dug up.
Well, they should at least correspond to a real robot, so ideally we'd use those, yes.
That would seem to be the procedure yes. Luckily the UR10 has actual inertia values (see #504 (comment)), so you should be able to work on this even without the other variants having been fixed. |
Ok so I will get back to this once the steps mentioned #504 (comment) are completed |
@ipa-nhg: you moved this to As a discussion item, or are you working on the actual changes needed? |
I've done a quick&dirty implementation for a UR16e to test #504: https://github.com/fmauch/universal_robot/tree/effort_controller I can move the robot, but the PID values are far from good, I think. |
@gavanderhoorn |
I've pulled in @matteolucchi's #526 to The switch to I bet it still makes sense for new users to have the Initial ObservationMy setup in Gazebo uses the UR5 (non-e) with a Robotiq FT-300 sensor and 2F85 gripper. I put in a physical pose target marker which made the issue clearly visible. Here's an image with Gazebo gravity off (top) and on (bottom): Below is a plot of the joint angle error with respect to the trajectory goal (b) and corresponding end-effector position error (d). Up until the dashed line, the robot was moving (The zoomed-out joint-space and end-effector trajectory can be seen in (a) and (c) respectively. I started my After the dashed line, the robot is nominally stationary, and I'm turning gravity on and off. Although the angular errors are small, we're looking at a vertical end-effector position shift of nearly 10mm in this outstretched posture.
|
I'd close this since #619 is now merged. The mentioned issues in #521 (comment) still exist and should probably continued in a separate issue. |
Do you feel like this is an enhancement issue or maybe more of a documentation issue on different ways to simulate the UR arms? Technical Enhancements One mitigation with effort controllers if PID tweaking can't achieve acceptable sag might be to add feedforward terms, at least gravity compensation, to default effort controllers, but that seems like a big project for all of the arms, and it adds extra setup and complications (what if the base link orientation is not fixed in space, but subject to a change in orientation? Does the gravity compensation track it based on the base pose in the world? Is that a stable controller?) Full dynamic compensation would be interesting too, but it sounds like it's dominated by the motor reflected inertias, per this comment: I could see it being really valuable to some users to have high-fidelity models of these arms' dynamic response, but in my experience since I wrote the comment above, URSim handles this in a useful way: https://forum.universal-robots.com/t/what-behaviors-does-ur-sim-simulate/20709 but of course there's no contact simulation, no visualization of grippers, etc. Contact simulation for manipulation is a fraught concept in Gazebo anyway, lots of people wondering why they can't achieve stable grasps. Documentation - A UR Simulation Guide? Maybe the best approach forward on this is to document the various issues in a central location, something like:
I have some blockers on contributing parts of the outline above, especially for ROS 1 beginner tutorial and proven/concrete mitigation examples. I set this issue aside more than a year ago and currently don't have a ROS 1 installation. I've moved on to ROS 2. However, I'd be happy to try to put together a draft docs PR with the portions I could contribute quickly from memory with existing media and examples. I think I probably have an "exploding Gazebo UR video" sitting around somewhere to go with the gravity sag images and figures above. Unfortunately I set the soft-mounting and elastic-robot projects aside, and if I pick them back up I'll probably be using the newest (Ignition) Gazebo. If a start to this kind of guide sounds good, where's a good place to open a PR? |
@danzimmerman First of all thank you very much for your continuous efforts with this. I think a good place for something like that would be the tutorials repo where we could add something to the documentation, as well as an example package to make it easy for users to try out different configurations. Any input there is very well appreciated :-) |
As part of the
melodic-devel-staging
breaking changes (#448) we should consider whether to change the models inur_gazebo
to ahardware_interface/EffortJointInterface
by default, instead of thehardware_interface/PositionJointInterface
they have now.Gazebo works better when everything in a simulation is (ultimately) effort controlled, especially when models in the simulation need to interact.
While the updated
ur_gazebo
(#518) allows for thehardware_interface
to be configured using a.launch
file, making use of anyhardware_interface
other thanPositionJointInterface
will also require updates to the controllers (which are currently configured to expect aPositionJointInterface
).From a UX perspective, only a whole-sale change from position to effort makes sense to me.
A disadvantage would be that the effort interface requires properly tuned PIDs to work correctly and have the
inertia
andmass
parameters properly set.And this means PIDs for the no-load case as well as the case where the robot is outfitted with a gripper and is lifting some object.
The latter could be left to the user/integrator, but the former would certainly have to be done by the maintainers here.
The text was updated successfully, but these errors were encountered: