Revision as of 13:26, 20 July 2010 edit217.133.72.175 (talk)No edit summary← Previous edit | Revision as of 15:31, 2 August 2010 edit undo202.88.248.238 (talk)No edit summaryNext edit → | ||
Line 68: | Line 68: | ||
] | ] | ||
] | ] | ||
We've seen the forward kinematics problem. The inverse kinematics problem is much more interesting and its solution is more useful. At the position level, the problem is stated as, "Given the desired position of the robot's hand, what must be the angles at all of the robots joints?" | |||
Humans solve this problem all the time without even thinking about it. When you are eating your cereal in the morning you just reach out and grab your spoon. You don't think, "my shoulder needs to do this, my elbow needs to do that, etc." Below we will look at how most robots have to solve the problem. We will start with a very simple example. | |||
The figure above is a schematic of a simple robot lying in the X-Y plane. The robot has one link of length l and one joint with angle Ø. The position of the robot's hand is Xhand. The inverse kinematics problem (at the position level) for this robot is as follows: Given Xhand what is the joint angle Ø? We'll start the solution to this problem by writing down the forward position equation, and then solve for Ø. | |||
Xhand = lcosØ (forward position solution) | |||
cosØ = Xhand/l | |||
Ø = cos-1(Xhand/l) | |||
To finish the solution let's say that this robot's link has a length of 1 foot and we want the robot's hand to be at X = .7071 feet. That gives: | |||
Ø = cos-1(.7071) = +/- 45 degrees | |||
Even for this simple example, there are two solutions to the inverse kinematics problem: one at plus 45 degrees and one at minus 45 degrees! The existence of multiple solutions adds to the challenge of the inverse kinematics problem. Typically we will need to know which of the solutions is correct. All programming languages that I know of supply a trigonometric function called ATan2 that will find the proper quadrant when given both the X and Y arguments: Ø = ATan2(Y/X). Now we have the tools we need to look at a more interesting inverse kinematics problem: | |||
You may have to use your imagination a bit, but the schematic above is the planar part of the SCARA robot we discuss in the industrial robots section. Here's the statement of the inverse kinematics problem at the position level for this robot: | |||
Given: Xhand, Yhand, Øhand | |||
Find: Ø1, Ø2 and Ø3 | |||
To aid in solving this problem, I am going to define an imaginary straight line that extends from the robot's first joint to its last joint as follows: | |||
B: length of imaginary line | |||
q1: angle between X-axis and imaginary line | |||
q2: interior angle between imaginary line and link l1 | |||
Then we have: | |||
B2 = Xhand2 + Yhand2 (by the Pythagorean theorem) | |||
q1 = ATan2(Yhand/Xhand) | |||
q2 = acos (by the law of cosines) | |||
Ø1 = q1 + q2 (I know you can handle addition) | |||
Ø2 = acos (by the law of cosines) | |||
Ø3 = Øhand - Ø1 - Ø2 | |||
That completes the solution for Ø1, Ø2 and Ø3 given Xhand, Yhand, Øhand. Most inverse kinematics solutions at the position level proceed in a similar fashion. You will use your knowledge of trigonometry and geometry coupled with your creativity to devise a solution. The solution given above works as is for SCARA robots. If you can imagine turning the SCARA robot on its side, then you will see that the solution above also works for the positioning components of most six degree of freedom industrial robots too. The inverse kinematics solution for Cartesian robots is trivial as all axes are perpendicular by definition and thus there is no coupling of the motions. | |||
By HS Creation's |
Revision as of 15:31, 2 August 2010
This article provides insufficient context for those unfamiliar with the subject. Please help improve the article by providing more context for the reader. (October 2009) (Learn how and when to remove this message) |
The inverse kinematics problem is simply stated as, "Given the desired position of the robot's hand, what must be the angles at all of the robot's joints?" This is in contrast to the forward kinematics problem, which is, "Given the angles at all of the robot's joints, what is the position of the hand?"
Humans solve the inverse kinematics problem constantly without conscious effort. For example, when eating cereal in the morning, humans reach out for their spoons without considering the relative configuration of their shoulder and elbow required to reach the spoon.
Physics
Kinematics is the formal description of motion. One of the goals of rudimentary mechanics is to identify forces on a point object and then apply kinematics to determine the motion of the object. Ideally the position of the object at all times can be determined. For an extended object, (rigid body or other), along with linear kinematics, rotational motion can be applied to achieve the same objective: Identify the forces, develop the equations of motion, find the position of center of mass and the orientation of the object at all times.
Robotics and 3D Animation
Inverse kinematics is the process of determining the parameters of a jointed flexible object (a kinematic chain) in order to achieve a desired pose. Inverse kinematics is a type of motion planning. Inverse kinematics are also relevant to game programming and 3D animation, where a common use is making sure game characters connect physically to the world, such as feet landing firmly on top of terrain.
Inverse kinematics is that branch of robotics which deals with the study and application of the process of determining the parameters of a flexible object in order to achieve a desired pose.
An articulated figure consists of a set of rigid segments connected with joints. Varying angles of the joints yields an indefinite number of configurations. The solution to the forward kinematic animation problem, given these angles, is the pose of the figure. The solution to the more difficult inverse kinematics problem is to find the joint angles given the desired configuration of the figure (i.e., end effector). In the general case there is no analytic solution for the inverse kinematics problem. However, inverse kinematics may be solved via nonlinear programming techniques. Certain special kinematic chains—those with a spherical wrist—permit kinematic decoupling. This treats the end effector's orientation and position independently and permits an efficient closed-form solution.
Inverse kinematics is a tool utilized frequently by 3D artists. It is often easier for an artist to express the desired spatial appearance rather than manipulate joint angles directly. For example, inverse kinematics allows an artist to move the hand of a 3D human model to a desired position and orientation and have an algorithm select the proper angles of the wrist, elbow, and shoulder joints.
For example, when one wants to reach for a door handle, their brain must make the necessary calculations to position his limbs and torso such that the hand locates near the door. The main objective is to move the hand but the many complex articulations of several joints must occur to get the hand to the desired location. Similarly with many technological applications, inverse kinematic mathematical calculations must be performed to articulate limbs in the correct ways to meet desired goals. One example where inverse kinematic calculations are often essential is robotics, where an operator wants to position a tool using a robot arm but certainly does not want to manipulate each robot joint individually. Other applications include computer animation where animators may want to operate a computer generated character, but find it impossibly difficult to animate individual joints. The solution is to model the virtual joints of the puppet and allow the animator to move the hands, feet and torso, and the computer automatically generates the required limb positions to accomplish this using inverse kinematics.
Key to the successful implementation of inverse kinematics is animation within constraints: computer characters' limbs must behave within reasonable anthropomorphic limits. Similarly, robotic devices have physical constraints such as the environment they operate in, the limitations of the articulations their joints are capable of, and the finite physical loads and speeds at which they are able to operate.
The ikfast program can solve for the complete analytical solutions of most common robot manipulators and generate C++ code for them. The generated solvers cover most degenerate cases and can finish in microseconds on recent computers.
Other applications of inverse kinematic algorithms include interactive manipulation, animation control and collision avoidance.
See also
- Forward kinematic animation
- Forward kinematics
- Kinemation
- Jacobian
- Joint constraints
- Levenberg–Marquardt algorithm
- Physics engine
- Pseudoinverse
- Ragdoll physics
- Arm solution
External links
- Robotics and 3D Animation in FreeBasic
- Analytical Inverse Kinematics Solver - Given an OpenRAVE robot kinematics description, generates a C++ file that analytically solves for the complete IK.
- Inverse Kinematics algorithms
- Robot Inverse solution for a common robot geometry
- HowStuffWorks.com article How do the characters in video games move so fluidly? with an explanation of inverse kinematics
- 3D Theory Kinematics
- Protein Inverse Kinematics
- Simple Inverse Kinematics example with source code using Jacobian
- Detailed description of Jacobian and CCD solutions for inverse kinematics
We've seen the forward kinematics problem. The inverse kinematics problem is much more interesting and its solution is more useful. At the position level, the problem is stated as, "Given the desired position of the robot's hand, what must be the angles at all of the robots joints?"
Humans solve this problem all the time without even thinking about it. When you are eating your cereal in the morning you just reach out and grab your spoon. You don't think, "my shoulder needs to do this, my elbow needs to do that, etc." Below we will look at how most robots have to solve the problem. We will start with a very simple example.
The figure above is a schematic of a simple robot lying in the X-Y plane. The robot has one link of length l and one joint with angle Ø. The position of the robot's hand is Xhand. The inverse kinematics problem (at the position level) for this robot is as follows: Given Xhand what is the joint angle Ø? We'll start the solution to this problem by writing down the forward position equation, and then solve for Ø.
Xhand = lcosØ (forward position solution) cosØ = Xhand/l Ø = cos-1(Xhand/l) To finish the solution let's say that this robot's link has a length of 1 foot and we want the robot's hand to be at X = .7071 feet. That gives:
Ø = cos-1(.7071) = +/- 45 degrees
Even for this simple example, there are two solutions to the inverse kinematics problem: one at plus 45 degrees and one at minus 45 degrees! The existence of multiple solutions adds to the challenge of the inverse kinematics problem. Typically we will need to know which of the solutions is correct. All programming languages that I know of supply a trigonometric function called ATan2 that will find the proper quadrant when given both the X and Y arguments: Ø = ATan2(Y/X). Now we have the tools we need to look at a more interesting inverse kinematics problem:
You may have to use your imagination a bit, but the schematic above is the planar part of the SCARA robot we discuss in the industrial robots section. Here's the statement of the inverse kinematics problem at the position level for this robot:
Given: Xhand, Yhand, Øhand Find: Ø1, Ø2 and Ø3 To aid in solving this problem, I am going to define an imaginary straight line that extends from the robot's first joint to its last joint as follows:
B: length of imaginary line q1: angle between X-axis and imaginary line q2: interior angle between imaginary line and link l1 Then we have: B2 = Xhand2 + Yhand2 (by the Pythagorean theorem)
q1 = ATan2(Yhand/Xhand) q2 = acos (by the law of cosines) Ø1 = q1 + q2 (I know you can handle addition) Ø2 = acos (by the law of cosines) Ø3 = Øhand - Ø1 - Ø2 That completes the solution for Ø1, Ø2 and Ø3 given Xhand, Yhand, Øhand. Most inverse kinematics solutions at the position level proceed in a similar fashion. You will use your knowledge of trigonometry and geometry coupled with your creativity to devise a solution. The solution given above works as is for SCARA robots. If you can imagine turning the SCARA robot on its side, then you will see that the solution above also works for the positioning components of most six degree of freedom industrial robots too. The inverse kinematics solution for Cartesian robots is trivial as all axes are perpendicular by definition and thus there is no coupling of the motions.
By HS Creation's
Categories: