# Positions and frames of reference

I'm trying to work with pairs of industrial robots that need to move to specific positions relative to each other within a given frame of
reference. To do this, I need a means to (among other things) take the 6DOF (3d location and Euler-angle orientation) position of one robot and translate it into the other robot's frame of reference. And just to frost the cake, I sometimes need to match the two robots orientation in two axes but not the third (think of two pencils held point-to-point -- their long axes must be kept parallel, but they are free to rotate *around* their long axes).     I've done days and weeks of Googling, and found lots of articles on matrix algebra and converting vectors between reference frames, but nothing directly applicable to what I need. And I don't have the time, resources, or skills to derive the entire process from first principles.     I figure I can't be the first person to need to do something like this, so somewhere there must be an algorithm or a set of guidelines from someone else's previous experience that I just haven't been able to find.     Anyone ever see something like this?
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
David McMillan wrote:

Try calculating all coordinates in a "world frame" that contains the base of each arm. Look up "Denavit-Hartenberg Parameters" if you're having trouble calculating the transformation matrix for an arm.
Start with the following homogeneous transformation matrices. Pa, Pb - base of each arm in the world frame [known] Ta, Tb - arm transformation matrices [unknown] Px, Py - ends of an object in the world frame [known]
Then you need to solve Pa*Ta=Px and Pb*Tb=Py for Ta and Tb to get the arms holding both ends of the object.
Given a spherical wrist, there are closed-form solutions for the inverse kinematics of 6-DOF arms given a desired transformation matrix.
Does that help?
- Daniel
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
D Herring wrote:

There are lots of forward and reverse kinematic packages available for converting between cartesian coordinates in world space and robot joint coordinates. That's something you can buy or maybe download. But two-arm coordination is rare. There are research papers available, though.
Motoman (Yuskawa) does this on a regular basis, because they sell two-armed robots. Maybe they can help you.
If you need a quick solution, the best I can suggest is to get an inverse kinematics package and drive both robots based on desired end effector positions. Or consider the Robotics Toolbox for Matlab.
John Nagle
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
John Nagle wrote:

Any inverse kinematics packages you can recommend? Something gentle on beginners? My needs are pretty basic -- stuff that would probably be easy to do if I just knew the math.     Robotics Toolbox for Matlab sounds good, but I suspect the whole package (I don't have Matlab) costs a very pretty penny.
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
D Herring wrote:

Hmmm... maybe overkill for my needs. I could probably use that if I had a few months to learn the math, but I'm a bit pressed for time these days. :) Each robot is already doing its own kinematics internally -- any time I need to know the current position/orientation of a robot's tool in its own reference frame, I can get it. What I need is to find a way to convert that position from one robot's reference frame to the other robot's reference frame, and modify it.     Imagine that one robot is holding a bolt, and the other robot is holding a nut. The tool Z axis is straight through both bolt and nut, such that in any position where threading the bolt into the nut is possible, the tool Z axes of both robots are perfectly parallel. If I assume that both robots are operating in a common base frame of reference, and I know the position of the nut-holding robot, I need to generate a position for the bolt-holding robot that will allow the bolt to be threaded. All orientation coords are in ZYX-ordered Euler angles.