2
$\begingroup$

A robotic usually consists of joints with sections of possibly varying width connected together. Considering we know how much each is bent and the length of each section, and their location in 3D space (not local coordinates) at time zero; how do we determine how much each joint should rotate to goto position B from position A. Both A and B are defined in world cartesian coordinates.

Now each joint can move in terms or all at once, so should all joints move simultaneously or in turns?

$\endgroup$
4
$\begingroup$

Inverse kinematics (a very hard field in its own right) is the correct answer, but it gets even more complicated than that. The path that your arm takes might really matter. Say that you need to get the end effector (gripper or hand) to a specific point, but there is a wall with a window in the way. The arm might need to snake around that hole so that it doesn't collide with the wall. This leads to the field of motion planning.

Motion Planning

One motion planning method that might help you work out the angles needed to get the hand to a specific position while taking the environment into account (the environment can also be free of clutter and all you want is the angles to get to a specific point) is to use a RRT.

RRT - Rapidly exploring Random Tree

This method would randomly close in on a solution in a "smart" way.

$\endgroup$
1
$\begingroup$

To expand on tomsrobots answer a bit.

If your desired arm end effector pose is far from the current, you should use an inverse kinematics solver to give you the corresponding joint angles. Typically, for high DOF arms, there are multiple solutions, so you should pick the best solution based on some metric. Minimum distance in joint space (i.e. configuration space) to the current or some known good configuration works well.

Depending on the complexity of your arm, the IK could be as simple as some trigonometry and conditionals, or require a full-blown IK library. See for example ROS MoveIt! and OpenRAVE. Standard robotics textbooks should cover the basics of what is involved here.

Then, you can move the arm there in a number of ways. One joint at a time, or all at once like you mentioned. These move the arm in joint space and the trajectory of the end-effector will probably not be what you want. But typically, for advanced motions you will plan a path in cartesian space and the arm will then follow the trajectory. But for for relatively open workspaces, and small motions, a straight line in cartesian space is typically fine.

Then the arm must follow the trajectory. If you used a motion planner, it probably gave you a trajectory in joint space.

Another way is to input your desired end-effector cartesian velocity into the arm's Jacobian, which will then give you the required joint velocities. The Jacobian is dependent on the arm's configuration, so you need to iterate. (i.e. get joint velocities, move a small amount, repeat.) Again, unless your arm is very simple, you probably want a kinematics library mentioned above to calculate the Jacobian for you. Note that you can often skip the IK and path planning steps and go straight to following a trajectory with the Jacobian if you are moving short distances, you know you are far from singularities, you have no obstacles in the workspace to get around, etc.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.