One of the things that got briefly referred to in the under-actuated robotics course was the excellent paper "Variable Resolution Discretization in Optimal Control" by Munos & Moore. I'd had a copy of the paper lying around for a while, because it was mentioned in Steven Lavalle's book Planning Algorithms
That paper recommends a more efficient method of interpolation using simplexes rather than hypercubes. The advantage is that simplex interpolation requires (n+1) points rather than 2^n points in n-dimensions.
One of the best things about the Munos & Moore paper is a really great explanation of how interpolation in simplexes using Kuhn triangulation works, as well as a number of really great diagrams. I've attached some (pretty horrible) Mathematica code that I've used to reproduce something similar to one of the explanatory figures from that paper.
(* The m-th cartesian aligned basis vector in an n dimensional space. *) BasisVector[n_, m_] := Map[If[# == m, 1, 0] &, Range[n]] (* Takes an ordered list of basis functions which describe the order \ to walk the tetrahedra boundary in *) SimplexVecs[perm_] := Accumulate[ Join[ {ConstantArray[0, Length[perm]]}, Map[BasisVector[Length[perm], #] &, perm] ] ] (* Generate all 3d tetrahedra on a unit interval *) TetrahedraGeom3D[] := Map[ GraphicsComplex[ SimplexVecs[#], Polygon[Subsets[Range[n + 1], {n}]] ] &, Permutations[Range[n]] ]; SimplexCenter[gc_] := Mean[gc[[1]]] (* Generate all the geometries *) gs = TetrahedraGeom3D[]; (* Shift them a little bit away from the cube center*) gs = Map[ Translate[#, SimplexCenter[#] - {1/2, 1/2, 1/2}] &, gs ]; (* Generate a 'nice' list of colors *) mycolors = {Red, Green, Blue, Cyan, Magenta, Yellow}; (* Compose the graphics together, and render *) Show[MapThread[ Graphics3D[{Opacity[0.4], #2, #1}] &, {gs, mycolors} ]]
No comments:
Post a Comment