﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Attic%3ASoCInverseKinematics_Inverse_Kinematics</id>
	<title>Attic:SoCInverseKinematics Inverse Kinematics - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Attic%3ASoCInverseKinematics_Inverse_Kinematics"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Attic:SoCInverseKinematics_Inverse_Kinematics&amp;action=history"/>
	<updated>2026-07-03T23:23:26Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Attic:SoCInverseKinematics_Inverse_Kinematics&amp;diff=42162&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Attic:SoCInverseKinematics_Inverse_Kinematics&amp;diff=42162&amp;oldid=prev"/>
		<updated>2018-06-28T17:45:23Z</updated>

		<summary type="html">&lt;p&gt;1版 をインポートしました&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;2018年6月28日 (木) 17:45時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ja&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(相違点なし)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Yamyam</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Attic:SoCInverseKinematics_Inverse_Kinematics&amp;diff=42161&amp;oldid=prev</id>
		<title>wiki&gt;Mindrones: SoCInverseKinematics Inverse Kinematics moved to Attic:SoCInverseKinematics Inverse Kinematics: moving toi Attic:, it's very similar to Dev:Ref/GSoC/2005/Inverse Kinematics</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Attic:SoCInverseKinematics_Inverse_Kinematics&amp;diff=42161&amp;oldid=prev"/>
		<updated>2009-02-09T01:55:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/SoCInverseKinematics_Inverse_Kinematics&quot; class=&quot;mw-redirect&quot; title=&quot;SoCInverseKinematics Inverse Kinematics&quot;&gt;SoCInverseKinematics Inverse Kinematics&lt;/a&gt; moved to &lt;a href=&quot;/Attic:SoCInverseKinematics_Inverse_Kinematics&quot; title=&quot;Attic:SoCInverseKinematics Inverse Kinematics&quot;&gt;Attic:SoCInverseKinematics Inverse Kinematics&lt;/a&gt;: moving toi Attic:, it&amp;#039;s very similar to Dev:Ref/GSoC/2005/Inverse Kinematics&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Summer of Code : Inverse Kinematics=&lt;br /&gt;
&lt;br /&gt;
== Goals==&lt;br /&gt;
The goals of this project are (as in the [[SoCIKProposal|proposal]]):&lt;br /&gt;
*Translational joints&lt;br /&gt;
*Rotational limits for joint&lt;br /&gt;
*Parameters like joint stiffness and end effector influence&lt;br /&gt;
*Tree structured IK chains, with multiple end effectors (joint pinning)&lt;br /&gt;
&lt;br /&gt;
The emphasis of this project will be not so much on the user interface, but more on the IK engine itself.&lt;br /&gt;
&lt;br /&gt;
== Progress==&lt;br /&gt;
At this point the code in the soc-blender tree has the following new features compared to bf-blender:&lt;br /&gt;
*0,1,2,3 DOF joints&lt;br /&gt;
*tree structure IK&lt;br /&gt;
*orientation control&lt;br /&gt;
*overall speed up (roughly 7x)&lt;br /&gt;
*rotation limits&lt;br /&gt;
*translational joints (only in the ui)&lt;br /&gt;
&lt;br /&gt;
== Implementation==&lt;br /&gt;
Most of the work will be done in the iksolver/ module with integration of the functionality in blenderkernel/, src/. The iksolver/ module integration in blender is simple: everytime the depgraph (in blenkernel/) decides to run the solver, a tree of IK segments is constructed, the system is solved, and the rotation updates are retrieved.&lt;br /&gt;
&lt;br /&gt;
There is already a user interface for Inverse Kinematics, but it will be changed. IK will no longer be a constraint, but becomes a 'built-in' posing feature, with it's own panel. Internally it is already executed separate now, after all constraints are evaluated. A different user interface is needed especially to deal with tree structures transparently. Joint limits, choice of joint degrees of freedom's, ..., will be integrated/stored on pose mode level. Ton will work on the IK user interface changes, as part of the animation recode project.&lt;br /&gt;
&lt;br /&gt;
More info on the animation system: [[http://www.blender.org/cms/How_Armatures_work.634.0.html|How|Armatures|Work]],|[[http://www.blender.org/cms/Dependency_Graph.633.0.html|Dependency|Graph]].&lt;br /&gt;
&lt;br /&gt;
== IK Solver Internals==&lt;br /&gt;
The goal of the IK solver is as follows: given a set of tasks, and a set of segments, find the angles of the segments satisfying the tasks as close as possible.&lt;br /&gt;
&lt;br /&gt;
Here is a quick (probably confusing) intro in how the IK solver works. For a more detailed overview, see:&lt;br /&gt;
*[[http://www.math.ucsd.edu/~sbuss/ResearchWeb/ikmethods/iksurvey.pdf|Introduction|to|Inverse|Kinematics|with|Jacobian|Transpose,|Pseudoinverse|and|Damped|Least|Squares|methods]]&lt;br /&gt;
*[[http://ligwww.epfl.ch/~thalmann/papers.dir/chap_hierarchical_kin.pdf|Hierarchical|Kinematic|Behaviors|for|Complex|Articulated|Figures]]&lt;br /&gt;
*[[http://ligwww.epfl.ch/~baerloch/papers/thesis.pdf|Inverse|Kinematics|Techniques|for|the|Interactive|Posture|Control|of|Articulated|Figures]]&lt;br /&gt;
&lt;br /&gt;
For a single chain, the forward kinematics problem can be mathematically represented as follows (the extension to trees and other tasks is straightforward):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;x = f(q)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where =x= is a vector with the coordinates of an end effector, and =q= is a vector of joint angles. So an end effector position =x= is computed from joint angles =q=. The inverse kinematics problem is thus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;q = f&amp;lt;sup&amp;gt;-1&amp;lt;/sup&amp;gt;(x)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The function =f= is non-linear, and for general chains too complex to solve/invert directly. So a solution is found using an iterative numerical method, looking for a local minimum. =f= is linearized in the form of a [[http://mathworld.wolfram.com/Jacobian.html|Jacobian|matrix]], relating the derivatives of =x= and =q=:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;x' = Jq'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The initial angles =q= can then be iteratively updated by computing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;q' = J&amp;lt;sup&amp;gt;-1&amp;lt;/sup&amp;gt;x', q += q'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is, however, a remaining problem. =J= is in general not invertible (in most cases it's not even square). This makes sense, since there might be infinitely many solutions, or none at all. Instead of the inverse, a [[http://mathworld.wolfram.com/Moore-PenroseMatrixInverse.html|pseudo-inverse]] of =J= is used, which is defined for all matrices.&lt;br /&gt;
&lt;br /&gt;
But, =J= can get ill conditioned near singularities, resulting in large oscillations. To deal with singularities, a damped pseudo-inverse is used. Computing an appropriate damping factor is essential to ensure stability, without sacrificing performance.&lt;br /&gt;
&lt;br /&gt;
The internal structure of the IK solver follows directly from the above explanation. There is a tree structure of segments, a list of tasks, and a Jacobian matrix with associated vectors/matrices. The IK solver then runs the following loop:&lt;br /&gt;
&lt;br /&gt;
pub/diagram.png&lt;br /&gt;
&lt;br /&gt;
-- [[BlenderDev/DeveloperWikiBrechtVanLommel|DeveloperWikiBrechtVanLommel]] - 21 Jul 2005&lt;br /&gt;
&lt;br /&gt;
[[Category:Inverse kinematics]]&lt;br /&gt;
[[Category:Animation]]&lt;/div&gt;</summary>
		<author><name>wiki&gt;Mindrones</name></author>
		
	</entry>
</feed>