-
Notifications
You must be signed in to change notification settings - Fork 4
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
tool0: ROS-I vs industrial controllers (discussion) #24
Comments
Personally, I prefer option 3. It incurs the least amount of overhead (no additional frames), is the least confusing (only one Issues with backwards compatibility can be addressed by exploiting the tick-tock approach (deprecate in release X, remove in release Y). |
As @gavanderhoorn said I would go for the 3rd option. As an intermediate solution (In favor of deprecating then removing) I would add that additional frame so there is a version of the manipulator's URDF that always match the controller frames. For the base problem I would take the same approach: add an additional base link corresponding to the attachment of the robot to the ground. I know ABB robots always had the same configuration for frames, the The advantage of having always a coincident frames between URDF and controller is (besides less confusion) that it will allow to synchronize frames in the controller with ROS nodes (let's say we can correct a Work Object in the controller with a sensor data), and use the controller capabilities in some way, for example adding support for some force control loop. @gavanderhoorn the link is: http://wiki.ros.org/Industrial/Tutorials/Create%20a%20URDF%20for%20an%20Industrial%20Robot#Prepare_CAD_Models there is a suggestion to that guideline when creating CAD models. |
@Samsagax wrote:
For Fanuc I've been adding a |
I'm in agreement with option 3. All URDFs should have a tool0 that exactly matches the robot tool0(in pose). As for backwards compatibility, we can approach it on a case by case basis (there aren't too many bad cases out there). For example, in the case of ABB, the URDF's will be replaced with the new directory structure and naming conventions. As part of this change (post Hydro), we will update the tool0's. As we did with the motoman meta-package, the old URDFs (with the wrong tool) will remain for a single release, (thus remaining backwards compatible). If we would like to add special tool0's to these legacy URDF's, I'm OK with that, but it won't be a priority. The worst case would be when a package adheres to the new directory structure and has an incorrect tool0. In this case, we should probably correct the tool0 (creating minor headaches for those with existing systems) and add a legacy_tool0, so that they can easily update their code to either the new frame orientation (preferred) or search and replace with the legacy tool0. As for a standard 'base' frame I think this is also important and we should stick with nomenclature that is similar across robots. As @Samsagax said, their is typical 3 frames:
So, the only important frame is @gavanderhoorn, why did you choose |
@shaun-edwards wrote:
well,
I've only done this locally, so I can easily implement whatever we agree upon. |
How about |
Another alternative might be a little closer to what @Samsagax suggested: add some kind of indication that those links / frames are manufacturer specific. I'm not suggesting we should actually pre/suffix the mfg name, but we might name the frames such that it is clear that they are not some random addition 'by us'. Perhaps something like |
I'm hesitant to prefix with Originally I thought something called |
Maybe we should stick to naming conventions on each manufacturer. For example: all tools in any ABB manipulator is a transformation with respect to |
I'd like to avoid manufacturer specific names. Frame names are pervasive in code/parameters. If we use manufacturer specific names then it will make it harder to port code between different vendors. |
@Samsagax: as @shaun-edwards mentions, we should avoid adding in mfg / model specific names at all costs, as that would completely remove the benefits of using abstractions in the first place. I do think though that it might make sense to consider |
@shaun-edwards wrote:
Well yes, that was the idea. As both of these frames are determined by the manufacturer (ie: at design time) and cannot be changed by users (the
Not sure,
Exactly, which is what toolframes are used for, AFAIK. If something like a flange would exist, a sufficiently detailed URDF of an actual tool could actually be used to derive the flange->TCP transform, which could then also be used to setup a toolframe on the controller itself. |
We could add the prefix I'm not sure how realistic it is to derive a transform from URDF geometry. Furthermore, TCP transforms are not necessarily from the flange. Some are relative to the spherical wrist intersection of the last 3 axes. |
@shaun-edwards wrote:
While backwards compatibility isn't too difficult, I see your point with the added work. Out of curiousity then though: why does
I'd say it is certainly possible, especially if the URDF was created based on something like a solidworks assembly. It would probably need some kind of extension to the URDF model, or some special link / joint though. But it wasn't meant as a justification, just something I thought of.
Sure. But I'd expect |
Most robots have several tools that can be defined. Tool0 is the default and I wanted to allow people to add (via xacro) their customized tool frames as well while still being able to compare them to tools stored on the controller. As for |
Ok, as I assumed. I mentioned a common flange as that is where for Fanuc fi the toolframes are relative to. As it seems we won't get any more contributions, lets vote on the use of To clarify, this would then be a frame between |
I think it should be relative to |
It would seem to me to be the most logical place for it: then you can do transforms from As for the actual transforms themselves: it doesn't matter, but the resulting structure (ie: from base to tip) would be more intuitive if it didn't first go back to |
Wouldn't it be easier just to put the Joaquín Ignacio Aramendía |
@Samsagax: that was the initial idea, problem is that ROS (at least in some parts, and AFAIK) implicitly assumes that Additionally (more of a practical thing): to make the |
I would preffer the effort of changing the frames once than the clutter of having 2 transformations with obscure names. It would add to the manipulator agnosticity also. I volunteer to do part of the work if that is the case. |
If only every robot vendor put their base frame in a logical spot. I believe the fanuc frame (the reason we started this discussion) is at the intersection of the first two joint axes. Actually this makes sense from a robot DH parameter perspective, but not from a building up a URDF perspective.
|
@shaun-edwards: correct on the location of the base frame (and the DH relation). +1 on the |
Really it doesn't matter where the base frame is as long as the manipulator transformation matches the ROS transformation. So we must put both Joaquín Ignacio Aramendía |
To come to some conclusion on this, here is the summary:
|
+1. Excelent @shaun-edwards |
@shaun-edwards wrote:
In orientation as well as position.
Being the at the 'bottom' of the first mesh.
So it doesn't necessarily have to be part of the kinematic chain? |
I don't think we should make this requirement unless there is a good reason. I can't think of any. |
The results of the discussion have been added to the tutorials (urdf and moveit config). Thank you @gavanderhoorn and @Samsagax for your comments. |
The
tool0
frame is supposed to provide a standardised point of attachment for urdfs describing tools [1]. According to @shaun-edwards, the original intent of the text in [1] was to align the urdftool0
frame with the toolframe of the actual robot (ros-industrial/abb#32), which should result in thebase_link->tool0
transform to be equal to the values the robot controller reports (in cartesian world coordinates).It appears not all urdfs (and corresponding xacros) have been setup like this (see @Samsagax in ros-industrial/abb#31 and ros-industrial/fanuc#54 fi).
Three possible options for dealing with
tool0
links:tool0
with a (0, 0, 0, 0, 0, 0) frame to the previous link)tool0
such that they align 100% with the toolframes of the respective manipulators (in a default setup; custom toolframes will always require updated urdfs)An additional (but related) issue is the discrepancy between the origin of the World Coordinate frame in many industrial controllers (often at the intersection of the first 2 axes) and the origin of the coordinate system attached to a robot in a urdf (which is often at the bottom of the
base_link
).The goal of this issue is to gather opinions about possible solutions and to arrive at a clear guideline which can be used to update existing urdfs, as well as to make sure that future contributions avoid the same mistakes.
The text was updated successfully, but these errors were encountered: