Comments (4)
Another option is exponential maps (#30). See appendix B here:
http://www.cs.cmu.edu/~spiff/moedit99/expmap.pdf
from closed-chain-ik-js.
Places that need to change if the joint is 3 rotational DoF:
Joint Target Error
Target error is just used for determining how far a joint is away from it's current angle target so we may want to calculate error in some way that doesn't use euler because of the redundant representations:
- Setting jacobian error affect
- not needed if using orientation vector
- code reference
- Computing the error for a given target degree of freedom
- This is where redundant representations can be an issue. Both rotations need to be converted to closest represented orientation vectors (consistently choose target or current to adjust so it can be done consistently on read back)
- code reference
Computing Closure Error Adjustment
-
When computing the error delta from a DoF change we need to adjust it as though the orientation vector representation is being adjusted.
- code reference -- this function call needs to be changed in order to adjust the orientation vector field rather than the euler values when computing the delta matrix to be consistent
-
The rest pose would need to be adjusted here and when setting joint values here.
EDIT: It may be best to book keep the rotations as exponential maps but then provide an API for manipulating it via euler. Or just providing a function for reading and setting rotations as exponential maps?
from closed-chain-ik-js.
In Appendix B of this paper the rotations are described as an "orientation vector" with rotation axis defined by the vector direction and rotation amount defined by vector length. The paper defines equations for converting these to and from quaternions but intuitively the axis angle functions should be able to be used for this.
Other Notes
- Must be careful of which frame the orientation is defined in (parent frame).
- When reaching a singularity ( > PI rotation ) the orientation vector is reparametrized.
- Error computations need to take the shortest delta error.
from closed-chain-ik-js.
With the number of places that need to be carefully adjusted and rotation count checked it might be best to just bookkeep all rotation as orientation vectors internally and provide an API for getting and setting rotations via euler. OR a read function can be used in the solver that reads and sets joint values in an orientation vector format (would joint limits be harder to impose?)
from closed-chain-ik-js.
Related Issues (20)
- Solver: Provide option to revert to last converged state when diverging
- Example: Add example with forward kinematic dragging and IK toggle
- Example: Add example with more organic character model
- WorkerSolver: Provide callback / promise for when solve ends
- Example: Provide demo with adjustable "virtual" degrees of freedom
- IKRootsHelper: Color Goals differently or add option to disable closure joint traversal
- IKRootsHelper: Ensure lines, widgets are not double added, improve performance
- Expose Serialization, Deserialization functions HOT 1
- URDF to IK: Handle when the root rotation is not completely free HOT 2
- Improve tolerance at fully extended configurations HOT 1
- Validate and document trackJointWrap field
- Consider making ChainSolver public
- Solver / ChainSolver : Provide option for excluding joints from the solve
- Example: Add shadow casting
- Example: Adding / removing a goal causes result to diverge HOT 3
- Solver: SVD causes result to diverge sometimes
- VR Example: Investigate R2 performance HOT 3
- Solver: Investigate GCP solver
- Examples: Build examples to separate branch
- Resources to Understand This Codebase? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from closed-chain-ik-js.