roboticstoolbox-python 1.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (610) hide show
  1. roboticstoolbox/__init__.py +107 -0
  2. roboticstoolbox/backends/Connector.py +113 -0
  3. roboticstoolbox/backends/Dynamixel/README.md +9 -0
  4. roboticstoolbox/backends/Dynamixel/dynamixel.json +581 -0
  5. roboticstoolbox/backends/Dynamixel/dynamixel_io.py +450 -0
  6. roboticstoolbox/backends/Dynamixel/dynamixel_sdk/LICENSE +201 -0
  7. roboticstoolbox/backends/Dynamixel/dynamixel_sdk/README.md +28 -0
  8. roboticstoolbox/backends/Dynamixel/dynamixel_sdk/ReleaseNote.md +181 -0
  9. roboticstoolbox/backends/Dynamixel/dynamixel_sdk/__init__.py +27 -0
  10. roboticstoolbox/backends/Dynamixel/dynamixel_sdk/group_bulk_read.py +163 -0
  11. roboticstoolbox/backends/Dynamixel/dynamixel_sdk/group_bulk_write.py +109 -0
  12. roboticstoolbox/backends/Dynamixel/dynamixel_sdk/group_sync_read.py +166 -0
  13. roboticstoolbox/backends/Dynamixel/dynamixel_sdk/group_sync_write.py +99 -0
  14. roboticstoolbox/backends/Dynamixel/dynamixel_sdk/packet_handler.py +33 -0
  15. roboticstoolbox/backends/Dynamixel/dynamixel_sdk/port_handler.py +155 -0
  16. roboticstoolbox/backends/Dynamixel/dynamixel_sdk/protocol1_packet_handler.py +548 -0
  17. roboticstoolbox/backends/Dynamixel/dynamixel_sdk/protocol2_packet_handler.py +1080 -0
  18. roboticstoolbox/backends/Dynamixel/dynamixel_sdk/robotis_def.py +75 -0
  19. roboticstoolbox/backends/Dynamixel/dyndata.py +121 -0
  20. roboticstoolbox/backends/PyPlot/EllipsePlot.py +256 -0
  21. roboticstoolbox/backends/PyPlot/PyPlot.py +778 -0
  22. roboticstoolbox/backends/PyPlot/PyPlot2.py +537 -0
  23. roboticstoolbox/backends/PyPlot/README.md +67 -0
  24. roboticstoolbox/backends/PyPlot/RobotPlot.py +247 -0
  25. roboticstoolbox/backends/PyPlot/RobotPlot2.py +123 -0
  26. roboticstoolbox/backends/PyPlot/__init__.py +4 -0
  27. roboticstoolbox/backends/ROS/ROS.py +129 -0
  28. roboticstoolbox/backends/ROS/__init__.py +3 -0
  29. roboticstoolbox/backends/__init__.py +39 -0
  30. roboticstoolbox/backends/swift/__init__.py +165 -0
  31. roboticstoolbox/bin/__init__.py +0 -0
  32. roboticstoolbox/bin/_bintools.py +61 -0
  33. roboticstoolbox/bin/rtbtool.py +404 -0
  34. roboticstoolbox/blocks/Icons/250x250/armplot.png +0 -0
  35. roboticstoolbox/blocks/Icons/250x250/bicycle.png +0 -0
  36. roboticstoolbox/blocks/Icons/250x250/camera.png +0 -0
  37. roboticstoolbox/blocks/Icons/250x250/circlepath.png +0 -0
  38. roboticstoolbox/blocks/Icons/250x250/coriolis.png +0 -0
  39. roboticstoolbox/blocks/Icons/250x250/ctraj.png +0 -0
  40. roboticstoolbox/blocks/Icons/250x250/delta2tr.png +0 -0
  41. roboticstoolbox/blocks/Icons/250x250/diffsteer.png +0 -0
  42. roboticstoolbox/blocks/Icons/250x250/fdyn.png +0 -0
  43. roboticstoolbox/blocks/Icons/250x250/fdynx.png +0 -0
  44. roboticstoolbox/blocks/Icons/250x250/fkine.png +0 -0
  45. roboticstoolbox/blocks/Icons/250x250/gravload.png +0 -0
  46. roboticstoolbox/blocks/Icons/250x250/idyn.png +0 -0
  47. roboticstoolbox/blocks/Icons/250x250/idynx.png +0 -0
  48. roboticstoolbox/blocks/Icons/250x250/ikine.png +0 -0
  49. roboticstoolbox/blocks/Icons/250x250/inertia.png +0 -0
  50. roboticstoolbox/blocks/Icons/250x250/jacobian.png +0 -0
  51. roboticstoolbox/blocks/Icons/250x250/jtraj.png +0 -0
  52. roboticstoolbox/blocks/Icons/250x250/lspb.png +0 -0
  53. roboticstoolbox/blocks/Icons/250x250/multirotor.png +0 -0
  54. roboticstoolbox/blocks/Icons/250x250/multirotormixer.png +0 -0
  55. roboticstoolbox/blocks/Icons/250x250/multirotorplot.png +0 -0
  56. roboticstoolbox/blocks/Icons/250x250/point2tr.png +0 -0
  57. roboticstoolbox/blocks/Icons/250x250/tr2delta.png +0 -0
  58. roboticstoolbox/blocks/Icons/250x250/tr2t.png +0 -0
  59. roboticstoolbox/blocks/Icons/250x250/unicycle.png +0 -0
  60. roboticstoolbox/blocks/Icons/250x250/vehicleplot.png +0 -0
  61. roboticstoolbox/blocks/Icons/50x50/armplot.png +0 -0
  62. roboticstoolbox/blocks/Icons/50x50/bicycle.png +0 -0
  63. roboticstoolbox/blocks/Icons/50x50/camera.png +0 -0
  64. roboticstoolbox/blocks/Icons/50x50/circlepath.png +0 -0
  65. roboticstoolbox/blocks/Icons/50x50/coriolis.png +0 -0
  66. roboticstoolbox/blocks/Icons/50x50/delta2tr.png +0 -0
  67. roboticstoolbox/blocks/Icons/50x50/diffsteer.png +0 -0
  68. roboticstoolbox/blocks/Icons/50x50/fdyn.png +0 -0
  69. roboticstoolbox/blocks/Icons/50x50/fdynx.png +0 -0
  70. roboticstoolbox/blocks/Icons/50x50/fkine.png +0 -0
  71. roboticstoolbox/blocks/Icons/50x50/gravload.png +0 -0
  72. roboticstoolbox/blocks/Icons/50x50/idyn.png +0 -0
  73. roboticstoolbox/blocks/Icons/50x50/idynx.png +0 -0
  74. roboticstoolbox/blocks/Icons/50x50/ikine.png +0 -0
  75. roboticstoolbox/blocks/Icons/50x50/inertia.png +0 -0
  76. roboticstoolbox/blocks/Icons/50x50/jacobian.png +0 -0
  77. roboticstoolbox/blocks/Icons/50x50/jtraj.png +0 -0
  78. roboticstoolbox/blocks/Icons/50x50/lspb.png +0 -0
  79. roboticstoolbox/blocks/Icons/50x50/multirotor.png +0 -0
  80. roboticstoolbox/blocks/Icons/50x50/multirotormixer.png +0 -0
  81. roboticstoolbox/blocks/Icons/50x50/multirotorplot.png +0 -0
  82. roboticstoolbox/blocks/Icons/50x50/point2tr.png +0 -0
  83. roboticstoolbox/blocks/Icons/50x50/tr2delta.png +0 -0
  84. roboticstoolbox/blocks/Icons/50x50/tr2t.png +0 -0
  85. roboticstoolbox/blocks/Icons/50x50/unicycle.png +0 -0
  86. roboticstoolbox/blocks/Icons/50x50/vehicleplot.png +0 -0
  87. roboticstoolbox/blocks/Icons/armplot.png +0 -0
  88. roboticstoolbox/blocks/Icons/bicycle.png +0 -0
  89. roboticstoolbox/blocks/Icons/camera.png +0 -0
  90. roboticstoolbox/blocks/Icons/circlepath.png +0 -0
  91. roboticstoolbox/blocks/Icons/coriolis.png +0 -0
  92. roboticstoolbox/blocks/Icons/ctraj.png +0 -0
  93. roboticstoolbox/blocks/Icons/delta2tr.png +0 -0
  94. roboticstoolbox/blocks/Icons/diffsteer.png +0 -0
  95. roboticstoolbox/blocks/Icons/fdyn.png +0 -0
  96. roboticstoolbox/blocks/Icons/fdynx.png +0 -0
  97. roboticstoolbox/blocks/Icons/fkine.png +0 -0
  98. roboticstoolbox/blocks/Icons/gravload.png +0 -0
  99. roboticstoolbox/blocks/Icons/idyn.png +0 -0
  100. roboticstoolbox/blocks/Icons/idynx.png +0 -0
  101. roboticstoolbox/blocks/Icons/ikine.png +0 -0
  102. roboticstoolbox/blocks/Icons/inertia.png +0 -0
  103. roboticstoolbox/blocks/Icons/jacobian.png +0 -0
  104. roboticstoolbox/blocks/Icons/jtraj.png +0 -0
  105. roboticstoolbox/blocks/Icons/lspb.png +0 -0
  106. roboticstoolbox/blocks/Icons/multirotor.png +0 -0
  107. roboticstoolbox/blocks/Icons/multirotormixer.png +0 -0
  108. roboticstoolbox/blocks/Icons/multirotorplot.png +0 -0
  109. roboticstoolbox/blocks/Icons/point2tr.png +0 -0
  110. roboticstoolbox/blocks/Icons/tr2delta.png +0 -0
  111. roboticstoolbox/blocks/Icons/tr2t.png +0 -0
  112. roboticstoolbox/blocks/Icons/unicycle.png +0 -0
  113. roboticstoolbox/blocks/Icons/vehicleplot.png +0 -0
  114. roboticstoolbox/blocks/README.md +43 -0
  115. roboticstoolbox/blocks/__init__.py +6 -0
  116. roboticstoolbox/blocks/arm.py +1591 -0
  117. roboticstoolbox/blocks/mobile.py +522 -0
  118. roboticstoolbox/blocks/quad_model.py +132 -0
  119. roboticstoolbox/blocks/spatial.py +245 -0
  120. roboticstoolbox/blocks/uav.py +949 -0
  121. roboticstoolbox/demo/__init__.py +0 -0
  122. roboticstoolbox/demo/eigdemo.py +112 -0
  123. roboticstoolbox/demo/tripleangledemo.py +239 -0
  124. roboticstoolbox/demo/twistdemo.py +175 -0
  125. roboticstoolbox/ets/ET.py +439 -0
  126. roboticstoolbox/ets/ET2.py +179 -0
  127. roboticstoolbox/ets/ETS.py +2013 -0
  128. roboticstoolbox/ets/ETS2.py +449 -0
  129. roboticstoolbox/ets/_ET.py +668 -0
  130. roboticstoolbox/ets/_ETS.py +781 -0
  131. roboticstoolbox/ets/__init__.py +11 -0
  132. roboticstoolbox/ets/cpp-extensions/Eigen/Cholesky +45 -0
  133. roboticstoolbox/ets/cpp-extensions/Eigen/CholmodSupport +48 -0
  134. roboticstoolbox/ets/cpp-extensions/Eigen/Core +384 -0
  135. roboticstoolbox/ets/cpp-extensions/Eigen/Dense +7 -0
  136. roboticstoolbox/ets/cpp-extensions/Eigen/Eigen +2 -0
  137. roboticstoolbox/ets/cpp-extensions/Eigen/Eigenvalues +60 -0
  138. roboticstoolbox/ets/cpp-extensions/Eigen/Geometry +59 -0
  139. roboticstoolbox/ets/cpp-extensions/Eigen/Householder +29 -0
  140. roboticstoolbox/ets/cpp-extensions/Eigen/IterativeLinearSolvers +48 -0
  141. roboticstoolbox/ets/cpp-extensions/Eigen/Jacobi +32 -0
  142. roboticstoolbox/ets/cpp-extensions/Eigen/KLUSupport +41 -0
  143. roboticstoolbox/ets/cpp-extensions/Eigen/LU +47 -0
  144. roboticstoolbox/ets/cpp-extensions/Eigen/MetisSupport +35 -0
  145. roboticstoolbox/ets/cpp-extensions/Eigen/OrderingMethods +70 -0
  146. roboticstoolbox/ets/cpp-extensions/Eigen/PaStiXSupport +49 -0
  147. roboticstoolbox/ets/cpp-extensions/Eigen/PardisoSupport +35 -0
  148. roboticstoolbox/ets/cpp-extensions/Eigen/QR +50 -0
  149. roboticstoolbox/ets/cpp-extensions/Eigen/QtAlignedMalloc +39 -0
  150. roboticstoolbox/ets/cpp-extensions/Eigen/SPQRSupport +34 -0
  151. roboticstoolbox/ets/cpp-extensions/Eigen/SVD +50 -0
  152. roboticstoolbox/ets/cpp-extensions/Eigen/Sparse +34 -0
  153. roboticstoolbox/ets/cpp-extensions/Eigen/SparseCholesky +37 -0
  154. roboticstoolbox/ets/cpp-extensions/Eigen/SparseCore +69 -0
  155. roboticstoolbox/ets/cpp-extensions/Eigen/SparseLU +50 -0
  156. roboticstoolbox/ets/cpp-extensions/Eigen/SparseQR +36 -0
  157. roboticstoolbox/ets/cpp-extensions/Eigen/StdDeque +27 -0
  158. roboticstoolbox/ets/cpp-extensions/Eigen/StdList +26 -0
  159. roboticstoolbox/ets/cpp-extensions/Eigen/StdVector +27 -0
  160. roboticstoolbox/ets/cpp-extensions/Eigen/SuperLUSupport +64 -0
  161. roboticstoolbox/ets/cpp-extensions/Eigen/UmfPackSupport +40 -0
  162. roboticstoolbox/ets/cpp-extensions/Eigen/src/Cholesky/LDLT.h +688 -0
  163. roboticstoolbox/ets/cpp-extensions/Eigen/src/Cholesky/LLT.h +558 -0
  164. roboticstoolbox/ets/cpp-extensions/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
  165. roboticstoolbox/ets/cpp-extensions/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
  166. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ArithmeticSequence.h +413 -0
  167. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Array.h +417 -0
  168. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ArrayBase.h +226 -0
  169. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ArrayWrapper.h +209 -0
  170. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Assign.h +90 -0
  171. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/AssignEvaluator.h +1010 -0
  172. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Assign_MKL.h +178 -0
  173. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/BandMatrix.h +353 -0
  174. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Block.h +448 -0
  175. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/BooleanRedux.h +162 -0
  176. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CommaInitializer.h +164 -0
  177. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ConditionEstimator.h +175 -0
  178. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CoreEvaluators.h +1741 -0
  179. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CoreIterators.h +132 -0
  180. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseBinaryOp.h +183 -0
  181. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
  182. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseTernaryOp.h +197 -0
  183. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseUnaryOp.h +103 -0
  184. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseUnaryView.h +132 -0
  185. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DenseBase.h +701 -0
  186. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DenseCoeffsBase.h +685 -0
  187. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DenseStorage.h +652 -0
  188. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Diagonal.h +258 -0
  189. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DiagonalMatrix.h +391 -0
  190. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DiagonalProduct.h +28 -0
  191. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Dot.h +318 -0
  192. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/EigenBase.h +160 -0
  193. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ForceAlignedAccess.h +150 -0
  194. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Fuzzy.h +155 -0
  195. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/GeneralProduct.h +465 -0
  196. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/GenericPacketMath.h +1040 -0
  197. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/GlobalFunctions.h +194 -0
  198. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/IO.h +258 -0
  199. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/IndexedView.h +237 -0
  200. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Inverse.h +117 -0
  201. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Map.h +171 -0
  202. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/MapBase.h +310 -0
  203. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/MathFunctions.h +2057 -0
  204. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/MathFunctionsImpl.h +200 -0
  205. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Matrix.h +565 -0
  206. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/MatrixBase.h +547 -0
  207. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/NestByValue.h +85 -0
  208. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/NoAlias.h +109 -0
  209. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/NumTraits.h +335 -0
  210. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  211. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/PermutationMatrix.h +605 -0
  212. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/PlainObjectBase.h +1128 -0
  213. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Product.h +191 -0
  214. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ProductEvaluators.h +1179 -0
  215. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Random.h +218 -0
  216. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Redux.h +515 -0
  217. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Ref.h +381 -0
  218. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Replicate.h +142 -0
  219. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Reshaped.h +454 -0
  220. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ReturnByValue.h +119 -0
  221. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Reverse.h +217 -0
  222. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Select.h +164 -0
  223. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/SelfAdjointView.h +365 -0
  224. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
  225. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Solve.h +188 -0
  226. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/SolveTriangular.h +235 -0
  227. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/SolverBase.h +168 -0
  228. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/StableNorm.h +251 -0
  229. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/StlIterators.h +463 -0
  230. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Stride.h +116 -0
  231. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Swap.h +68 -0
  232. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Transpose.h +464 -0
  233. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Transpositions.h +386 -0
  234. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/TriangularMatrix.h +1001 -0
  235. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/VectorBlock.h +96 -0
  236. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/VectorwiseOp.h +784 -0
  237. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Visitor.h +381 -0
  238. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX/Complex.h +372 -0
  239. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
  240. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX/PacketMath.h +1574 -0
  241. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
  242. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  243. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX512/MathFunctions.h +362 -0
  244. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX512/PacketMath.h +2303 -0
  245. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  246. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/Complex.h +417 -0
  247. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/MathFunctions.h +90 -0
  248. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  249. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  250. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  251. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/PacketMath.h +2711 -0
  252. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/CUDA/Complex.h +258 -0
  253. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  254. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
  255. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  256. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  257. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/Half.h +942 -0
  258. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/Settings.h +49 -0
  259. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  260. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
  261. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  262. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  263. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  264. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  265. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  266. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  267. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/Complex.h +584 -0
  268. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  269. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
  270. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/PacketMath.h +4587 -0
  271. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  272. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SSE/Complex.h +351 -0
  273. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
  274. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
  275. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
  276. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  277. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  278. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  279. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  280. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  281. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  282. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  283. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  284. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/ZVector/Complex.h +426 -0
  285. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
  286. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
  287. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
  288. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
  289. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
  290. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/StlFunctors.h +166 -0
  291. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
  292. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
  293. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
  294. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
  295. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +317 -0
  296. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
  297. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
  298. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixVector.h +518 -0
  299. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
  300. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/Parallelizer.h +180 -0
  301. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
  302. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
  303. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
  304. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
  305. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
  306. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
  307. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
  308. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
  309. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
  310. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
  311. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
  312. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
  313. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
  314. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/BlasUtil.h +583 -0
  315. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  316. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/Constants.h +563 -0
  317. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/DisableStupidWarnings.h +106 -0
  318. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
  319. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  320. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/IntegralConstant.h +272 -0
  321. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/MKL_support.h +137 -0
  322. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/Macros.h +1464 -0
  323. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/Memory.h +1163 -0
  324. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/Meta.h +812 -0
  325. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/NonMPL2.h +3 -0
  326. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
  327. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  328. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/StaticAssert.h +221 -0
  329. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  330. roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/XprHelper.h +856 -0
  331. roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
  332. roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
  333. roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
  334. roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
  335. roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
  336. roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
  337. roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
  338. roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
  339. roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/RealQZ.h +657 -0
  340. roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/RealSchur.h +558 -0
  341. roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
  342. roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
  343. roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
  344. roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/Tridiagonalization.h +561 -0
  345. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/AlignedBox.h +486 -0
  346. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/AngleAxis.h +247 -0
  347. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/EulerAngles.h +114 -0
  348. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Homogeneous.h +501 -0
  349. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Hyperplane.h +282 -0
  350. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/OrthoMethods.h +235 -0
  351. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/ParametrizedLine.h +232 -0
  352. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Quaternion.h +870 -0
  353. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Rotation2D.h +199 -0
  354. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/RotationBase.h +206 -0
  355. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Scaling.h +188 -0
  356. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Transform.h +1563 -0
  357. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Translation.h +202 -0
  358. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Umeyama.h +166 -0
  359. roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  360. roboticstoolbox/ets/cpp-extensions/Eigen/src/Householder/BlockHouseholder.h +110 -0
  361. roboticstoolbox/ets/cpp-extensions/Eigen/src/Householder/Householder.h +176 -0
  362. roboticstoolbox/ets/cpp-extensions/Eigen/src/Householder/HouseholderSequence.h +545 -0
  363. roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
  364. roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
  365. roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +229 -0
  366. roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
  367. roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
  368. roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
  369. roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
  370. roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
  371. roboticstoolbox/ets/cpp-extensions/Eigen/src/Jacobi/Jacobi.h +483 -0
  372. roboticstoolbox/ets/cpp-extensions/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  373. roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/Determinant.h +117 -0
  374. roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/FullPivLU.h +877 -0
  375. roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/InverseImpl.h +432 -0
  376. roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/PartialPivLU.h +624 -0
  377. roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
  378. roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/arch/InverseSize4.h +351 -0
  379. roboticstoolbox/ets/cpp-extensions/Eigen/src/MetisSupport/MetisSupport.h +137 -0
  380. roboticstoolbox/ets/cpp-extensions/Eigen/src/OrderingMethods/Amd.h +435 -0
  381. roboticstoolbox/ets/cpp-extensions/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
  382. roboticstoolbox/ets/cpp-extensions/Eigen/src/OrderingMethods/Ordering.h +153 -0
  383. roboticstoolbox/ets/cpp-extensions/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
  384. roboticstoolbox/ets/cpp-extensions/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
  385. roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
  386. roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
  387. roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
  388. roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
  389. roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/HouseholderQR.h +434 -0
  390. roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
  391. roboticstoolbox/ets/cpp-extensions/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
  392. roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/BDCSVD.h +1366 -0
  393. roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/JacobiSVD.h +812 -0
  394. roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
  395. roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/SVDBase.h +376 -0
  396. roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
  397. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
  398. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
  399. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/AmbiVector.h +378 -0
  400. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/CompressedStorage.h +274 -0
  401. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
  402. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
  403. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseAssign.h +270 -0
  404. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseBlock.h +571 -0
  405. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseColEtree.h +206 -0
  406. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
  407. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
  408. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
  409. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
  410. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
  411. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseDot.h +98 -0
  412. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
  413. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseMap.h +305 -0
  414. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
  415. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseMatrixBase.h +398 -0
  416. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparsePermutation.h +178 -0
  417. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseProduct.h +181 -0
  418. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseRedux.h +49 -0
  419. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseRef.h +397 -0
  420. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
  421. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
  422. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
  423. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseTranspose.h +92 -0
  424. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
  425. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseUtil.h +186 -0
  426. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseVector.h +478 -0
  427. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseView.h +254 -0
  428. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/TriangularSolver.h +315 -0
  429. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU.h +923 -0
  430. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
  431. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
  432. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
  433. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +375 -0
  434. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
  435. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
  436. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
  437. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
  438. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
  439. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
  440. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
  441. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
  442. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
  443. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
  444. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
  445. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
  446. roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseQR/SparseQR.h +758 -0
  447. roboticstoolbox/ets/cpp-extensions/Eigen/src/StlSupport/StdDeque.h +116 -0
  448. roboticstoolbox/ets/cpp-extensions/Eigen/src/StlSupport/StdList.h +106 -0
  449. roboticstoolbox/ets/cpp-extensions/Eigen/src/StlSupport/StdVector.h +131 -0
  450. roboticstoolbox/ets/cpp-extensions/Eigen/src/StlSupport/details.h +84 -0
  451. roboticstoolbox/ets/cpp-extensions/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
  452. roboticstoolbox/ets/cpp-extensions/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
  453. roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/Image.h +82 -0
  454. roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/Kernel.h +79 -0
  455. roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/RealSvd2x2.h +55 -0
  456. roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/blas.h +440 -0
  457. roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/lapack.h +152 -0
  458. roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/lapacke.h +16292 -0
  459. roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/lapacke_mangling.h +17 -0
  460. roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/ArrayCwiseBinaryOps.h +358 -0
  461. roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
  462. roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/BlockMethods.h +1442 -0
  463. roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
  464. roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
  465. roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  466. roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
  467. roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
  468. roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/ReshapedMethods.h +149 -0
  469. roboticstoolbox/ets/cpp-extensions/README.md +73 -0
  470. roboticstoolbox/ets/cpp-extensions/fknm_nb.cpp +534 -0
  471. roboticstoolbox/ets/cpp-extensions/ik.cpp +301 -0
  472. roboticstoolbox/ets/cpp-extensions/ik.h +59 -0
  473. roboticstoolbox/ets/cpp-extensions/linalg.cpp +316 -0
  474. roboticstoolbox/ets/cpp-extensions/linalg.h +64 -0
  475. roboticstoolbox/ets/cpp-extensions/methods.cpp +372 -0
  476. roboticstoolbox/ets/cpp-extensions/methods.h +32 -0
  477. roboticstoolbox/ets/cpp-extensions/structs.cpp +24 -0
  478. roboticstoolbox/ets/cpp-extensions/structs.h +62 -0
  479. roboticstoolbox/ets/fknm.py +366 -0
  480. roboticstoolbox/mobile/Animations.py +485 -0
  481. roboticstoolbox/mobile/Bug2.py +455 -0
  482. roboticstoolbox/mobile/CurvaturePolyPlanner.py +179 -0
  483. roboticstoolbox/mobile/DistanceTransformPlanner.py +395 -0
  484. roboticstoolbox/mobile/DstarPlanner.py +591 -0
  485. roboticstoolbox/mobile/DubinsPlanner.py +474 -0
  486. roboticstoolbox/mobile/EKF.py +1617 -0
  487. roboticstoolbox/mobile/LatticePlanner.py +419 -0
  488. roboticstoolbox/mobile/OccGrid.py +613 -0
  489. roboticstoolbox/mobile/PRMPlanner.py +348 -0
  490. roboticstoolbox/mobile/ParticleFilter.py +706 -0
  491. roboticstoolbox/mobile/PlannerBase.py +1009 -0
  492. roboticstoolbox/mobile/PoseGraph.py +544 -0
  493. roboticstoolbox/mobile/QuinticPolyPlanner.py +349 -0
  494. roboticstoolbox/mobile/RRTPlanner.py +359 -0
  495. roboticstoolbox/mobile/ReedsSheppPlanner.py +545 -0
  496. roboticstoolbox/mobile/Vehicle.py +1909 -0
  497. roboticstoolbox/mobile/__init__.py +194 -0
  498. roboticstoolbox/mobile/drivers.py +397 -0
  499. roboticstoolbox/mobile/landmarkmap.py +181 -0
  500. roboticstoolbox/mobile/sensors.py +789 -0
  501. roboticstoolbox/models/DH/AL5D.py +121 -0
  502. roboticstoolbox/models/DH/Ball.py +87 -0
  503. roboticstoolbox/models/DH/Baxter.py +91 -0
  504. roboticstoolbox/models/DH/Cobra600.py +63 -0
  505. roboticstoolbox/models/DH/Coil.py +80 -0
  506. roboticstoolbox/models/DH/Hyper.py +81 -0
  507. roboticstoolbox/models/DH/Hyper3d.py +83 -0
  508. roboticstoolbox/models/DH/IRB140.py +159 -0
  509. roboticstoolbox/models/DH/Jaco.py +102 -0
  510. roboticstoolbox/models/DH/KR5.py +112 -0
  511. roboticstoolbox/models/DH/LWR4.py +80 -0
  512. roboticstoolbox/models/DH/Mico.py +102 -0
  513. roboticstoolbox/models/DH/Orion5.py +91 -0
  514. roboticstoolbox/models/DH/P8.py +80 -0
  515. roboticstoolbox/models/DH/Panda.py +213 -0
  516. roboticstoolbox/models/DH/Planar2.py +69 -0
  517. roboticstoolbox/models/DH/Planar3.py +51 -0
  518. roboticstoolbox/models/DH/Puma560.py +326 -0
  519. roboticstoolbox/models/DH/README.md +216 -0
  520. roboticstoolbox/models/DH/Sawyer.py +85 -0
  521. roboticstoolbox/models/DH/Stanford.py +147 -0
  522. roboticstoolbox/models/DH/TwoLink.py +153 -0
  523. roboticstoolbox/models/DH/UR10.py +124 -0
  524. roboticstoolbox/models/DH/UR3.py +98 -0
  525. roboticstoolbox/models/DH/UR5.py +98 -0
  526. roboticstoolbox/models/DH/Uprighttl.py +24 -0
  527. roboticstoolbox/models/DH/__init__.py +52 -0
  528. roboticstoolbox/models/ETS/Frankie.py +90 -0
  529. roboticstoolbox/models/ETS/GenericSeven.py +54 -0
  530. roboticstoolbox/models/ETS/Omni.py +74 -0
  531. roboticstoolbox/models/ETS/Panda.py +69 -0
  532. roboticstoolbox/models/ETS/Planar2.py +49 -0
  533. roboticstoolbox/models/ETS/Planar_Y.py +65 -0
  534. roboticstoolbox/models/ETS/Puma560.py +70 -0
  535. roboticstoolbox/models/ETS/XYPanda.py +84 -0
  536. roboticstoolbox/models/ETS/__init__.py +20 -0
  537. roboticstoolbox/models/README.md +9 -0
  538. roboticstoolbox/models/URDF/AL5D.py +45 -0
  539. roboticstoolbox/models/URDF/Fetch.py +96 -0
  540. roboticstoolbox/models/URDF/Frankie.py +67 -0
  541. roboticstoolbox/models/URDF/FrankieOmni.py +94 -0
  542. roboticstoolbox/models/URDF/Jaco.py +49 -0
  543. roboticstoolbox/models/URDF/KinovaGen3.py +63 -0
  544. roboticstoolbox/models/URDF/LBR.py +57 -0
  545. roboticstoolbox/models/URDF/PR2.py +66 -0
  546. roboticstoolbox/models/URDF/Panda.py +60 -0
  547. roboticstoolbox/models/URDF/Puma560.py +90 -0
  548. roboticstoolbox/models/URDF/UR10.py +43 -0
  549. roboticstoolbox/models/URDF/UR3.py +43 -0
  550. roboticstoolbox/models/URDF/UR5.py +64 -0
  551. roboticstoolbox/models/URDF/URDFRobot.py +402 -0
  552. roboticstoolbox/models/URDF/Valkyrie.py +110 -0
  553. roboticstoolbox/models/URDF/YuMi.py +107 -0
  554. roboticstoolbox/models/URDF/__init__.py +51 -0
  555. roboticstoolbox/models/URDF/px100.py +48 -0
  556. roboticstoolbox/models/URDF/px150.py +48 -0
  557. roboticstoolbox/models/URDF/rx150.py +48 -0
  558. roboticstoolbox/models/URDF/rx200.py +48 -0
  559. roboticstoolbox/models/URDF/vx300.py +48 -0
  560. roboticstoolbox/models/URDF/vx300s.py +48 -0
  561. roboticstoolbox/models/URDF/wx200.py +48 -0
  562. roboticstoolbox/models/URDF/wx250.py +48 -0
  563. roboticstoolbox/models/URDF/wx250s.py +48 -0
  564. roboticstoolbox/models/__init__.py +7 -0
  565. roboticstoolbox/models/catalog.py +226 -0
  566. roboticstoolbox/robot/BaseRobot.py +2589 -0
  567. roboticstoolbox/robot/DHFactor.py +522 -0
  568. roboticstoolbox/robot/DHLink.py +949 -0
  569. roboticstoolbox/robot/DHRobot.py +2591 -0
  570. roboticstoolbox/robot/Dynamics.py +1537 -0
  571. roboticstoolbox/robot/ELink.py +23 -0
  572. roboticstoolbox/robot/ERobot.py +25 -0
  573. roboticstoolbox/robot/Gripper.py +242 -0
  574. roboticstoolbox/robot/IK.py +1378 -0
  575. roboticstoolbox/robot/Link.py +1557 -0
  576. roboticstoolbox/robot/PoERobot.py +352 -0
  577. roboticstoolbox/robot/Robot.py +2157 -0
  578. roboticstoolbox/robot/RobotKinematics.py +1505 -0
  579. roboticstoolbox/robot/RobotPlottingMPL.py +355 -0
  580. roboticstoolbox/robot/RobotProto.py +156 -0
  581. roboticstoolbox/robot/__init__.py +57 -0
  582. roboticstoolbox/robot/cpp-extensions/README.md +29 -0
  583. roboticstoolbox/robot/cpp-extensions/frne.h +96 -0
  584. roboticstoolbox/robot/cpp-extensions/frne_nb.cpp +237 -0
  585. roboticstoolbox/robot/cpp-extensions/ne.c +495 -0
  586. roboticstoolbox/robot/cpp-extensions/vmath.c +163 -0
  587. roboticstoolbox/robot/cpp-extensions/vmath.h +32 -0
  588. roboticstoolbox/robot/frne.py +51 -0
  589. roboticstoolbox/tools/DHFactor.py +375 -0
  590. roboticstoolbox/tools/Ticker.py +53 -0
  591. roboticstoolbox/tools/__init__.py +54 -0
  592. roboticstoolbox/tools/data.py +187 -0
  593. roboticstoolbox/tools/jsingu.py +51 -0
  594. roboticstoolbox/tools/null.py +48 -0
  595. roboticstoolbox/tools/numerical.py +96 -0
  596. roboticstoolbox/tools/p_servo.py +108 -0
  597. roboticstoolbox/tools/params.py +11 -0
  598. roboticstoolbox/tools/plot.py +109 -0
  599. roboticstoolbox/tools/trajectory.py +1152 -0
  600. roboticstoolbox/tools/types.py +13 -0
  601. roboticstoolbox/tools/urdf/__init__.py +45 -0
  602. roboticstoolbox/tools/urdf/tests/data/ur5.urdf +341 -0
  603. roboticstoolbox/tools/urdf/tests/test_urdf.py +116 -0
  604. roboticstoolbox/tools/urdf/urdf.py +1930 -0
  605. roboticstoolbox/tools/urdf/utils.py +50 -0
  606. roboticstoolbox_python-1.4.0.dist-info/METADATA +664 -0
  607. roboticstoolbox_python-1.4.0.dist-info/RECORD +610 -0
  608. roboticstoolbox_python-1.4.0.dist-info/WHEEL +5 -0
  609. roboticstoolbox_python-1.4.0.dist-info/entry_points.txt +6 -0
  610. roboticstoolbox_python-1.4.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,1505 @@
1
+ """
2
+ @author: Jesse Haviland
3
+ """
4
+
5
+ from roboticstoolbox.robot.RobotProto import KinematicsProtocol
6
+ from roboticstoolbox.tools.types import ArrayLike, NDArray
7
+ from roboticstoolbox.robot.Link import Link
8
+ from roboticstoolbox.robot.Gripper import Gripper
9
+ from spatialmath import SE3
10
+ from typing import Literal as L, overload
11
+
12
+
13
+ class RobotKinematicsMixin:
14
+ """
15
+ The Robot Kinematics Mixin class
16
+
17
+ This class contains kinematic methods for the ``robot`` class. All
18
+ methods contained within this class have a full implementation within the
19
+ ``ETS`` class and are simply passed through to the ``ETS`` class.
20
+
21
+ """
22
+
23
+ # --------------------------------------------------------------------- #
24
+ # --------- Kinematic Methods ----------------------------------------- #
25
+ # --------------------------------------------------------------------- #
26
+
27
+ def fkine(
28
+ self: KinematicsProtocol,
29
+ q: ArrayLike,
30
+ end: str | Link | Gripper | None = None,
31
+ start: str | Link | Gripper | None = None,
32
+ tool: NDArray | SE3 | None = None,
33
+ include_base: bool = True,
34
+ ) -> SE3:
35
+ """
36
+ Forward kinematics
37
+
38
+ :param q: Joint coordinates
39
+ :param end: end-effector or gripper to compute forward kinematics to
40
+ :param start: the link to compute forward kinematics from
41
+ :param tool: tool transform, optional
42
+ :returns: The transformation matrix representing the pose of the end-effector
43
+
44
+ ``T = robot.fkine(q)`` evaluates forward kinematics for the robot at
45
+ joint configuration ``q``.
46
+
47
+ **Trajectory operation**:
48
+ If ``q`` has multiple rows (mxn), it is considered a trajectory and the
49
+ result is an ``SE3`` instance with ``m`` values.
50
+
51
+ Examples
52
+ --------
53
+ The following example makes a ``panda`` robot object, and solves for the
54
+ forward kinematics at the listed configuration.
55
+
56
+ .. runblock:: pycon
57
+ >>> import roboticstoolbox as rtb
58
+ >>> panda = rtb.models.Panda()
59
+ >>> panda.fkine([0, -0.3, 0, -2.2, 0, 2, 0.7854])
60
+
61
+ .. rubric:: Notes
62
+
63
+ - For a robot with a single end-effector there is no need to
64
+ specify ``end``
65
+ - For a robot with multiple end-effectors, the ``end`` must
66
+ be specified.
67
+ - The robot's base tool transform, if set, is incorporated
68
+ into the result.
69
+ - A tool transform, if provided, is incorporated into the result.
70
+ - Works from the end-effector link to the base
71
+
72
+ .. rubric:: References
73
+
74
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part I:
75
+ Kinematics, Velocity, and Applications." arXiv preprint arXiv:2207.01796 (2022).
76
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part II:
77
+ Acceleration and Advanced Applications." arXiv preprint arXiv:2207.01794 (2022).
78
+
79
+ """
80
+
81
+ return SE3(
82
+ self.ets(start, end).fkine(
83
+ q, base=self._T, tool=tool, include_base=include_base
84
+ ),
85
+ check=False,
86
+ )
87
+
88
+ def jacob0(
89
+ self: KinematicsProtocol,
90
+ q: ArrayLike,
91
+ end: str | Link | Gripper | None = None,
92
+ start: str | Link | Gripper | None = None,
93
+ tool: NDArray | SE3 | None = None,
94
+ ) -> NDArray:
95
+ r"""
96
+ Manipulator geometric Jacobian in the ``start`` frame
97
+
98
+ :param q: Joint coordinate vector
99
+ :param end: the particular link or gripper whose velocity the Jacobian
100
+ describes, defaults to the end-effector if only one is present
101
+ :param start: the link considered as the base frame, defaults to the robots's base frame
102
+ :param tool: a static tool transformation matrix to apply to the
103
+ end of end, defaults to None
104
+ :returns: Manipulator Jacobian in the ``start`` frame
105
+
106
+ ``robot.jacobo(q)`` is the manipulator Jacobian matrix which maps
107
+ joint velocity to end-effector spatial velocity expressed in the
108
+ base frame.
109
+
110
+ End-effector spatial velocity :math:`\nu = (v_x, v_y, v_z, \omega_x, \omega_y, \omega_z)^T`
111
+ is related to joint velocity by :math:`{}^{E}\!\nu = \mathbf{J}_m(q) \dot{q}`.
112
+
113
+ Examples
114
+ --------
115
+ The following example makes a ``Puma560`` robot object, and solves for the
116
+ base-frame Jacobian at the zero joint angle configuration
117
+
118
+ .. runblock:: pycon
119
+ >>> import roboticstoolbox as rtb
120
+ >>> puma = rtb.models.Puma560()
121
+ >>> puma.jacob0([0, 0, 0, 0, 0, 0])
122
+
123
+ .. rubric:: Notes
124
+
125
+ - This is the geometric Jacobian as described in texts by
126
+ Corke, Spong etal., Siciliano etal. The end-effector velocity is
127
+ described in terms of translational and angular velocity, not a
128
+ velocity twist as per the text by Lynch & Park.
129
+
130
+ .. rubric:: References
131
+
132
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part I:
133
+ Kinematics, Velocity, and Applications." arXiv preprint arXiv:2207.01796 (2022).
134
+
135
+ """
136
+
137
+ return self.ets(start, end).jacob0(q, tool=tool)
138
+
139
+ def jacobe(
140
+ self: KinematicsProtocol,
141
+ q: ArrayLike,
142
+ end: str | Link | Gripper | None = None,
143
+ start: str | Link | Gripper | None = None,
144
+ tool: NDArray | SE3 | None = None,
145
+ ) -> NDArray:
146
+ r"""
147
+ Manipulator geometric Jacobian in the end-effector frame
148
+
149
+ :param q: Joint coordinate vector
150
+ :param end: the particular link or gripper whose velocity the Jacobian
151
+ describes, defaults to the end-effector if only one is present
152
+ :param start: the link considered as the base frame, defaults to the robots's base frame
153
+ :param tool: a static tool transformation matrix to apply to the
154
+ end of end, defaults to None
155
+ :returns: Manipulator Jacobian in the ``end`` frame
156
+
157
+ ``robot.jacobe(q)`` is the manipulator Jacobian matrix which maps
158
+ joint velocity to end-effector spatial velocity expressed in the
159
+ ``end`` frame.
160
+
161
+ End-effector spatial velocity :math:`\nu = (v_x, v_y, v_z, \omega_x, \omega_y, \omega_z)^T`
162
+ is related to joint velocity by :math:`{}^{E}\!\nu = \mathbf{J}_m(q) \dot{q}`.
163
+
164
+ Examples
165
+ --------
166
+ The following example makes a ``Puma560`` robot object, and solves for the
167
+ end-effector frame Jacobian at the zero joint angle configuration
168
+
169
+ .. runblock:: pycon
170
+ >>> import roboticstoolbox as rtb
171
+ >>> puma = rtb.models.Puma560()
172
+ >>> puma.jacobe([0, 0, 0, 0, 0, 0])
173
+
174
+ .. rubric:: Notes
175
+
176
+ - This is the geometric Jacobian as described in texts by
177
+ Corke, Spong etal., Siciliano etal. The end-effector velocity is
178
+ described in terms of translational and angular velocity, not a
179
+ velocity twist as per the text by Lynch & Park.
180
+
181
+ .. rubric:: References
182
+
183
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part I:
184
+ Kinematics, Velocity, and Applications." arXiv preprint arXiv:2207.01796 (2022).
185
+
186
+ """
187
+
188
+ return self.ets(start, end).jacobe(q, tool=tool)
189
+
190
+ @overload
191
+ def hessian0(
192
+ self: KinematicsProtocol,
193
+ q: ArrayLike = ...,
194
+ end: str | Link | Gripper | None = None,
195
+ start: str | Link | Gripper | None = None,
196
+ J0: None = None,
197
+ tool: NDArray | SE3 | None = None,
198
+ ) -> NDArray: # pragma nocover
199
+ ...
200
+
201
+ @overload
202
+ def hessian0(
203
+ self: KinematicsProtocol,
204
+ q: None = None,
205
+ end: str | Link | Gripper | None = None,
206
+ start: str | Link | Gripper | None = None,
207
+ J0: NDArray = ...,
208
+ tool: NDArray | SE3 | None = None,
209
+ ) -> NDArray: # pragma nocover
210
+ ...
211
+
212
+ def hessian0(
213
+ self: KinematicsProtocol,
214
+ q=None,
215
+ end: str | Link | Gripper | None = None,
216
+ start: str | Link | Gripper | None = None,
217
+ J0=None,
218
+ tool: NDArray | SE3 | None = None,
219
+ ) -> NDArray:
220
+ r"""
221
+ Manipulator Hessian
222
+
223
+ :param q: The joint angles/configuration of the robot (Optional,
224
+ if not supplied will use the stored q values).
225
+ :param end: the final link/Gripper which the Hessian represents
226
+ :param start: the first link which the Hessian represents
227
+ :param J0: The manipulator Jacobian in the ``start`` frame
228
+ :param tool: a static tool transformation matrix to apply to the
229
+ end of end, defaults to None
230
+ :returns: The manipulator Hessian in the ``start`` frame
231
+
232
+ The manipulator Hessian tensor maps joint acceleration to end-effector
233
+ spatial acceleration, expressed in the ``start`` frame. This
234
+ function calulcates this based on the ETS of the robot. One of J0 or q
235
+ is required. Supply J0 if already calculated to save computation time
236
+
237
+ This method computes the manipulator Hessian in the ``start`` frame. If
238
+ we take the time derivative of the differential kinematic relationship
239
+
240
+ .. math::
241
+
242
+ \nu &= \mat{J}(\vec{q}) \dvec{q} \\
243
+ \alpha &= \dmat{J} \dvec{q} + \mat{J} \ddvec{q}
244
+
245
+ where
246
+
247
+ .. math::
248
+
249
+ \dmat{J} = \mat{H} \dvec{q}
250
+
251
+ and :math:`\mat{H} \in \mathbb{R}^{6\times n \times n}` is the
252
+ Hessian tensor.
253
+
254
+ The elements of the Hessian are
255
+
256
+ .. math::
257
+
258
+ \mat{H}_{i,j,k} = \frac{d^2 u_i}{d q_j d q_k}
259
+
260
+ where :math:`u = \{t_x, t_y, t_z, r_x, r_y, r_z\}` are the elements
261
+ of the spatial velocity vector.
262
+
263
+ Similarly, we can write
264
+
265
+ .. math::
266
+
267
+ \mat{J}_{i,j} = \frac{d u_i}{d q_j}
268
+
269
+ Examples
270
+ --------
271
+ The following example makes a ``Panda`` robot object, and solves for the
272
+ base frame Hessian at the given joint angle configuration
273
+
274
+ .. runblock:: pycon
275
+ >>> import roboticstoolbox as rtb
276
+ >>> panda = rtb.models.Panda()
277
+ >>> panda.hessian0([0, -0.3, 0, -2.2, 0, 2, 0.7854])
278
+
279
+ .. rubric:: References
280
+
281
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part I:
282
+ Kinematics, Velocity, and Applications." arXiv preprint arXiv:2207.01796 (2022).
283
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part II:
284
+ Acceleration and Advanced Applications." arXiv preprint arXiv:2207.01794 (2022).
285
+
286
+ """
287
+
288
+ return self.ets(start, end).hessian0(q, J0=J0, tool=tool)
289
+
290
+ @overload
291
+ def hessiane(
292
+ self: KinematicsProtocol,
293
+ q: ArrayLike = ...,
294
+ end: str | Link | Gripper | None = None,
295
+ start: str | Link | Gripper | None = None,
296
+ Je: None = None,
297
+ tool: NDArray | SE3 | None = None,
298
+ ) -> NDArray: # pragma nocover
299
+ ...
300
+
301
+ @overload
302
+ def hessiane(
303
+ self: KinematicsProtocol,
304
+ q: None = None,
305
+ end: str | Link | Gripper | None = None,
306
+ start: str | Link | Gripper | None = None,
307
+ Je: NDArray = ...,
308
+ tool: NDArray | SE3 | None = None,
309
+ ) -> NDArray: # pragma nocover
310
+ ...
311
+
312
+ def hessiane(
313
+ self: KinematicsProtocol,
314
+ q=None,
315
+ end: str | Link | Gripper | None = None,
316
+ start: str | Link | Gripper | None = None,
317
+ Je=None,
318
+ tool: NDArray | SE3 | None = None,
319
+ ) -> NDArray:
320
+ r"""
321
+ Manipulator Hessian
322
+
323
+ :param q: The joint angles/configuration of the robot (Optional,
324
+ if not supplied will use the stored q values).
325
+ :param end: the final link/Gripper which the Hessian represents
326
+ :param start: the first link which the Hessian represents
327
+ :param Je: The manipulator Jacobian in the ``end`` frame
328
+ :param tool: a static tool transformation matrix to apply to the
329
+ end of end, defaults to None
330
+ :returns: The manipulator Hessian in ``end`` frame
331
+
332
+ The manipulator Hessian tensor maps joint acceleration to end-effector
333
+ spatial acceleration, expressed in the ``end`` coordinate frame. This
334
+ function calulcates this based on the ETS of the robot. One of J0 or q
335
+ is required. Supply J0 if already calculated to save computation time
336
+
337
+ This method computes the manipulator Hessian in the ``end`` frame. If
338
+ we take the time derivative of the differential kinematic relationship
339
+
340
+ .. math::
341
+
342
+ \nu &= \mat{J}(\vec{q}) \dvec{q} \\
343
+ \alpha &= \dmat{J} \dvec{q} + \mat{J} \ddvec{q}
344
+
345
+ where
346
+
347
+ .. math::
348
+
349
+ \dmat{J} = \mat{H} \dvec{q}
350
+
351
+ and :math:`\mat{H} \in \mathbb{R}^{6\times n \times n}` is the
352
+ Hessian tensor.
353
+
354
+ The elements of the Hessian are
355
+
356
+ .. math::
357
+
358
+ \mat{H}_{i,j,k} = \frac{d^2 u_i}{d q_j d q_k}
359
+
360
+ where :math:`u = \{t_x, t_y, t_z, r_x, r_y, r_z\}` are the elements
361
+ of the spatial velocity vector.
362
+
363
+ Similarly, we can write
364
+
365
+ .. math::
366
+
367
+ \mat{J}_{i,j} = \frac{d u_i}{d q_j}
368
+
369
+ Examples
370
+ --------
371
+ The following example makes a ``Panda`` robot object, and solves for the
372
+ end-effector frame Hessian at the given joint angle configuration
373
+
374
+ .. runblock:: pycon
375
+ >>> import roboticstoolbox as rtb
376
+ >>> panda = rtb.models.Panda()
377
+ >>> panda.hessiane([0, -0.3, 0, -2.2, 0, 2, 0.7854])
378
+
379
+ .. rubric:: References
380
+
381
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part I:
382
+ Kinematics, Velocity, and Applications." arXiv preprint arXiv:2207.01796 (2022).
383
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part II:
384
+ Acceleration and Advanced Applications." arXiv preprint arXiv:2207.01794 (2022).
385
+
386
+ """
387
+
388
+ return self.ets(start, end).hessiane(q, Je=Je, tool=tool)
389
+
390
+ def partial_fkine0(
391
+ self: KinematicsProtocol,
392
+ q: ArrayLike,
393
+ n: int = 3,
394
+ end: str | Link | Gripper | None = None,
395
+ start: str | Link | Gripper | None = None,
396
+ ):
397
+ r"""
398
+ Manipulator Forward Kinematics nth Partial Derivative
399
+
400
+ :param q: The joint angles/configuration of the robot (Optional,
401
+ if not supplied will use the stored q values).
402
+ :param n: The derivative order, must be >= 3
403
+ :param end: the final link/Gripper which the Hessian represents
404
+ :param start: the first link which the Hessian represents
405
+ :returns: The nth Partial Derivative of the forward kinematics
406
+
407
+ This method computes the nth derivative of the forward kinematics where ``n`` is
408
+ greater than or equal to 3. This is an extension of the differential kinematics
409
+ where the Jacobian is the first partial derivative and the Hessian is the
410
+ second.
411
+
412
+ Examples
413
+ --------
414
+ The following example makes a ``Panda`` robot object, and solves for the
415
+ base-effector frame 4th defivative of the forward kinematics at the given
416
+ joint angle configuration
417
+
418
+ .. runblock:: pycon
419
+ >>> import roboticstoolbox as rtb
420
+ >>> panda = rtb.models.Panda()
421
+ >>> panda.partial_fkine0([0, -0.3, 0, -2.2, 0, 2, 0.7854], n=4)
422
+
423
+ .. rubric:: References
424
+
425
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part I:
426
+ Kinematics, Velocity, and Applications." arXiv preprint arXiv:2207.01796 (2022).
427
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part II:
428
+ Acceleration and Advanced Applications." arXiv preprint arXiv:2207.01794 (2022).
429
+
430
+ """
431
+
432
+ return self.ets(start, end).partial_fkine0(q, n=n)
433
+
434
+ def jacob0_analytical(
435
+ self: KinematicsProtocol,
436
+ q: ArrayLike,
437
+ representation: L["rpy/xyz", "rpy/zyx", "eul", "exp"] = "rpy/xyz",
438
+ end: str | Link | Gripper | None = None,
439
+ start: str | Link | Gripper | None = None,
440
+ tool: NDArray | SE3 | None = None,
441
+ ):
442
+ r"""
443
+ Manipulator analytical Jacobian in the ``start`` frame
444
+
445
+ :param q: Joint coordinate vector
446
+ :param representation: angular representation
447
+ :param end: the particular link or gripper whose velocity the Jacobian
448
+ describes, defaults to the base link
449
+ :param start: the link considered as the end-effector, defaults to the robots's end-effector
450
+ :param tool: a static tool transformation matrix to apply to the
451
+ end of end, defaults to None
452
+ :returns: Manipulator Jacobian in the ``start`` frame
453
+
454
+ ``robot.jacob0_analytical(q)`` is the manipulator Jacobian matrix which maps
455
+ joint velocity to end-effector spatial velocity expressed in the
456
+ ``start`` frame.
457
+
458
+ End-effector spatial velocity :math:`\nu = (v_x, v_y, v_z, \omega_x, \omega_y, \omega_z)^T`
459
+ is related to joint velocity by :math:`{}^{E}\!\nu = \mathbf{J}_m(q) \dot{q}`.
460
+
461
+ .. list-table::
462
+ :header-rows: 1
463
+
464
+ * - ``representation``
465
+ - Rotational representation
466
+ * - ``'rpy/xyz'``
467
+ - RPY angular rates in XYZ order
468
+ * - ``'rpy/zyx'``
469
+ - RPY angular rates in ZYX order
470
+ * - ``'eul'``
471
+ - Euler angular rates in ZYZ order
472
+ * - ``'exp'``
473
+ - exponential coordinate rates
474
+
475
+ Examples
476
+ --------
477
+ Makes a robot object and computes the analytic Jacobian for the given
478
+ joint configuration
479
+
480
+ .. runblock:: pycon
481
+ >>> import roboticstoolbox as rtb
482
+ >>> puma = rtb.models.ETS.Puma560()
483
+ >>> puma.jacob0_analytical([0, 0, 0, 0, 0, 0])
484
+
485
+ """
486
+
487
+ return self.ets(start, end).jacob0_analytical(
488
+ q, tool=tool, representation=representation
489
+ )
490
+
491
+ # --------------------------------------------------------------------- #
492
+ # --------- IK Methods ------------------------------------------------ #
493
+ # --------------------------------------------------------------------- #
494
+
495
+ def ik_LM(
496
+ self: KinematicsProtocol,
497
+ Tep: NDArray | SE3,
498
+ end: str | Link | Gripper | None = None,
499
+ start: str | Link | Gripper | None = None,
500
+ q0: NDArray | None = None,
501
+ ilimit: int = 30,
502
+ slimit: int = 100,
503
+ tol: float = 1e-6,
504
+ mask: NDArray | None = None,
505
+ joint_limits: bool = True,
506
+ k: float = 1.0,
507
+ method: L["chan", "wampler", "sugihara"] = "chan",
508
+ ) -> tuple[NDArray, int, int, int, float]:
509
+ r"""
510
+ Fast levenberg-Marquadt Numerical Inverse Kinematics Solver
511
+
512
+ :param Tep: The desired end-effector pose
513
+ :param end: the link considered as the end-effector
514
+ :param start: the link considered as the base frame, defaults to the robots's base frame
515
+ :param q0: The initial joint coordinate vector
516
+ :param ilimit: How many iterations are allowed within a search before a new search
517
+ is started
518
+ :param slimit: How many searches are allowed before being deemed unsuccessful
519
+ :param tol: Maximum allowed residual error E
520
+ :param mask: A 6 vector which assigns weights to Cartesian degrees-of-freedom
521
+ error priority
522
+ :param joint_limits: Reject solutions with joint limit violations
523
+ :param k: Sets the gain value for the damping matrix Wn in the next iteration
524
+ :param method: One of "chan", "sugihara" or "wampler". Defines which method is used
525
+ to calculate the damping matrix Wn in the ``step`` method
526
+ :returns: tuple (q, success, iterations, searches, residual)
527
+
528
+ A method which provides functionality to perform numerical inverse kinematics (IK)
529
+ using the Levemberg-Marquadt method. This
530
+ is a fast solver implemented in C++.
531
+
532
+ See the :ref:`Inverse Kinematics Docs Page <IK>` for more details and for a
533
+ **tutorial** on numerical IK, see `here <https://bit.ly/3ak5GDi>`_.
534
+
535
+ The operation is defined by the choice of the ``method`` kwarg.
536
+
537
+ The step is deined as
538
+
539
+ .. math::
540
+
541
+ \vec{q}_{k+1}
542
+ &=
543
+ \vec{q}_k +
544
+ \left(
545
+ \mat{A}_k
546
+ \right)^{-1}
547
+ \bf{g}_k \\
548
+ %
549
+ \mat{A}_k
550
+ &=
551
+ {\mat{J}(\vec{q}_k)}^\top
552
+ \mat{W}_e \
553
+ {\mat{J}(\vec{q}_k)}
554
+ +
555
+ \mat{W}_n
556
+
557
+ where :math:`\mat{W}_n = \text{diag}(\vec{w_n})(\vec{w_n} \in \mathbb{R}^n_{>0})` is a
558
+ diagonal damping matrix. The damping matrix ensures that :math:`\mat{A}_k` is
559
+ non-singular and positive definite. The performance of the LM method largely depends
560
+ on the choice of :math:`\mat{W}_n`.
561
+
562
+ *Chan's Method*
563
+
564
+ Chan proposed
565
+
566
+ .. math::
567
+
568
+ \mat{W}_n
569
+ =
570
+ λ E_k \mat{1}_n
571
+
572
+ where λ is a constant which reportedly does not have much influence on performance.
573
+ Use the kwarg `k` to adjust the weighting term λ.
574
+
575
+ *Sugihara's Method*
576
+
577
+ Sugihara proposed
578
+
579
+ .. math::
580
+
581
+ \mat{W}_n
582
+ =
583
+ E_k \mat{1}_n + \text{diag}(\hat{\vec{w}}_n)
584
+
585
+ where :math:`\hat{\vec{w}}_n \in \mathbb{R}^n`, :math:`\hat{w}_{n_i} = l^2 \sim 0.01 l^2`,
586
+ and :math:`l` is the length of a typical link within the manipulator. We provide the
587
+ variable `k` as a kwarg to adjust the value of :math:`w_n`.
588
+
589
+ *Wampler's Method*
590
+
591
+ Wampler proposed :math:`\vec{w_n}` to be a constant. This is set through the `k` kwarg.
592
+
593
+ Examples
594
+ --------
595
+ The following example makes a ``panda`` robot object, makes a goal
596
+ pose ``Tep``, and then solves for the joint coordinates which result in the pose
597
+ ``Tep`` using the `ikine_LM` method.
598
+
599
+ .. runblock:: pycon
600
+ >>> import roboticstoolbox as rtb
601
+ >>> panda = rtb.models.Panda()
602
+ >>> Tep = panda.fkine([0, -0.3, 0, -2.2, 0, 2, 0.7854])
603
+ >>> panda.ikine_LM(Tep)
604
+
605
+ .. rubric:: Notes
606
+
607
+ The value for the ``k`` kwarg will depend on the ``method`` chosen and the arm you are
608
+ using. Use the following as a rough guide ``chan, k = 1.0 - 0.01``,
609
+ ``wampler, k = 0.01 - 0.0001``, and ``sugihara, k = 0.1 - 0.0001``
610
+
611
+ When using the this method, the initial joint coordinates :math:`q_0`, should correspond
612
+ to a non-singular manipulator pose, since it uses the manipulator Jacobian.
613
+
614
+ This class supports null-space motion to assist with maximising manipulability and
615
+ avoiding joint limits. These are enabled by setting kq and km to non-zero values.
616
+
617
+ .. rubric:: References
618
+
619
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part I:
620
+ Kinematics, Velocity, and Applications." arXiv preprint arXiv:2207.01796 (2022).
621
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part II:
622
+ Acceleration and Advanced Applications." arXiv preprint arXiv:2207.01794 (2022).
623
+
624
+ See Also
625
+ --------
626
+ ik_NR
627
+ A fast numerical inverse kinematics solver using Newton-Raphson optimisation
628
+ ik_GN
629
+ A fast numerical inverse kinematics solver using Gauss-Newton optimisation
630
+
631
+
632
+ .. versionchanged:: 1.0.4
633
+ Merged the Levemberg-Marquadt IK solvers into the ik_LM method
634
+
635
+ """
636
+
637
+ return self.ets(start, end).ik_LM(
638
+ Tep=Tep,
639
+ q0=q0,
640
+ ilimit=ilimit,
641
+ slimit=slimit,
642
+ tol=tol,
643
+ joint_limits=joint_limits,
644
+ mask=mask,
645
+ k=k,
646
+ method=method,
647
+ )
648
+
649
+ def ik_NR(
650
+ self: KinematicsProtocol,
651
+ Tep: NDArray | SE3,
652
+ end: str | Link | Gripper | None = None,
653
+ start: str | Link | Gripper | None = None,
654
+ q0: NDArray | None = None,
655
+ ilimit: int = 30,
656
+ slimit: int = 100,
657
+ tol: float = 1e-6,
658
+ mask: NDArray | None = None,
659
+ joint_limits: bool = True,
660
+ pinv: int = True,
661
+ pinv_damping: float = 0.0,
662
+ ) -> tuple[NDArray, int, int, int, float]:
663
+ r"""
664
+ Fast numerical inverse kinematics using Newton-Raphson optimization
665
+
666
+ :param Tep: The desired end-effector pose or pose trajectory
667
+ :param end: the link considered as the end-effector
668
+ :param start: the link considered as the base frame, defaults to the robots's base frame
669
+ :param q0: initial joint configuration (default to random valid joint
670
+ configuration constrained by the joint limits of the robot)
671
+ :param ilimit: maximum number of iterations per search
672
+ :param slimit: maximum number of search attempts
673
+ :param tol: final error tolerance
674
+ :param mask: a mask vector which weights the end-effector error priority.
675
+ Corresponds to translation in X, Y and Z and rotation about X, Y and Z
676
+ respectively
677
+ :param joint_limits: constrain the solution to being within the joint limits of
678
+ the robot (reject solution with invalid joint configurations and perform
679
+ another search up to the slimit)
680
+ :param pinv: Use the pseudo-inverse instead of the normal matrix inverse
681
+ :param pinv_damping: Damping factor for the pseudo-inverse
682
+ :returns: tuple (q, success, iterations, searches, residual)
683
+
684
+ ``sol = ets.ik_NR(Tep)`` are the joint coordinates (n) corresponding
685
+ to the robot end-effector pose ``Tep`` which is an ``SE3`` or ``ndarray`` object.
686
+ This method can be used for robots with any number of degrees of freedom. This
687
+ is a fast solver implemented in C++.
688
+
689
+ See the :ref:`Inverse Kinematics Docs Page <IK>` for more details and for a
690
+ **tutorial** on numerical IK, see `here <https://bit.ly/3ak5GDi>`_.
691
+
692
+ .. note::
693
+
694
+ When using this method with redundant robots (>6 DoF), ``pinv`` must be set to ``True``
695
+
696
+ The return value ``sol`` is a tuple with elements:
697
+
698
+ ============== ========== ===============================================
699
+ Element Type Description
700
+ ============== ========== ===============================================
701
+ ``q`` ndarray(n) joint coordinates in units of radians or metres
702
+ ``success`` int whether a solution was found
703
+ ``iterations`` int total number of iterations
704
+ ``searches`` int total number of searches
705
+ ``residual`` float final value of cost function
706
+ ============== ========== ===============================================
707
+
708
+ If ``success == 0`` the ``q`` values will be valid numbers, but the
709
+ solution will be in error. The amount of error is indicated by
710
+ the ``residual``.
711
+
712
+ Each iteration uses the Newton-Raphson optimisation method
713
+
714
+ .. math::
715
+
716
+ \vec{q}_{k+1} = \vec{q}_k + {^0\mat{J}(\vec{q}_k)}^{-1} \vec{e}_k
717
+
718
+ Examples
719
+ --------
720
+ The following example gets a ``panda`` robot object, makes a goal
721
+ pose ``Tep``, and then solves for the joint coordinates which result in the pose
722
+ ``Tep`` using the `ikine_GN` method.
723
+
724
+ .. runblock:: pycon
725
+ >>> import roboticstoolbox as rtb
726
+ >>> panda = rtb.models.Panda()
727
+ >>> Tep = panda.fkine([0, -0.3, 0, -2.2, 0, 2, 0.7854])
728
+ >>> panda.ik_NR(Tep)
729
+
730
+ .. rubric:: Notes
731
+
732
+ When using the this method, the initial joint coordinates :math:`q_0`, should correspond
733
+ to a non-singular manipulator pose, since it uses the manipulator Jacobian.
734
+
735
+ .. rubric:: References
736
+
737
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part I:
738
+ Kinematics, Velocity, and Applications." arXiv preprint arXiv:2207.01796 (2022).
739
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part II:
740
+ Acceleration and Advanced Applications." arXiv preprint arXiv:2207.01794 (2022).
741
+
742
+ See Also
743
+ --------
744
+ ik_LM
745
+ A fast numerical inverse kinematics solver using Levenberg-Marquadt optimisation
746
+ ik_GN
747
+ A fast numerical inverse kinematics solver using Gauss-Newton optimisation
748
+
749
+ """
750
+
751
+ return self.ets(start, end).ik_NR(
752
+ Tep=Tep,
753
+ q0=q0,
754
+ ilimit=ilimit,
755
+ slimit=slimit,
756
+ tol=tol,
757
+ joint_limits=joint_limits,
758
+ mask=mask,
759
+ pinv=pinv,
760
+ pinv_damping=pinv_damping,
761
+ )
762
+
763
+ def ik_GN(
764
+ self: KinematicsProtocol,
765
+ Tep: NDArray | SE3,
766
+ end: str | Link | Gripper | None = None,
767
+ start: str | Link | Gripper | None = None,
768
+ q0: NDArray | None = None,
769
+ ilimit: int = 30,
770
+ slimit: int = 100,
771
+ tol: float = 1e-6,
772
+ mask: NDArray | None = None,
773
+ joint_limits: bool = True,
774
+ pinv: int = True,
775
+ pinv_damping: float = 0.0,
776
+ ) -> tuple[NDArray, int, int, int, float]:
777
+ r"""
778
+ Fast numerical inverse kinematics by Gauss-Newton optimization
779
+
780
+ :param Tep: The desired end-effector pose or pose trajectory
781
+ :param end: the link considered as the end-effector
782
+ :param start: the link considered as the base frame, defaults to the robots's base frame
783
+ :param q0: initial joint configuration (default to random valid joint
784
+ configuration constrained by the joint limits of the robot)
785
+ :param ilimit: maximum number of iterations per search
786
+ :param slimit: maximum number of search attempts
787
+ :param tol: final error tolerance
788
+ :param mask: a mask vector which weights the end-effector error priority.
789
+ Corresponds to translation in X, Y and Z and rotation about X, Y and Z
790
+ respectively
791
+ :param joint_limits: constrain the solution to being within the joint limits of
792
+ the robot (reject solution with invalid joint configurations and perform
793
+ another search up to the slimit)
794
+ :param pinv: Use the pseudo-inverse instead of the normal matrix inverse
795
+ :param pinv_damping: Damping factor for the pseudo-inverse
796
+ :returns: tuple (q, success, iterations, searches, residual)
797
+
798
+ ``sol = ets.ik_GN(Tep)`` are the joint coordinates (n) corresponding
799
+ to the robot end-effector pose ``Tep`` which is an ``SE3`` or ``ndarray`` object.
800
+ This method can be used for robots with any number of degrees of freedom. This
801
+ is a fast solver implemented in C++.
802
+
803
+ See the :ref:`Inverse Kinematics Docs Page <IK>` for more details and for a
804
+ **tutorial** on numerical IK, see `here <https://bit.ly/3ak5GDi>`_.
805
+
806
+ .. note::
807
+
808
+ When using this method with redundant robots (>6 DoF), ``pinv`` must be set to ``True``
809
+
810
+ The return value ``sol`` is a tuple with elements:
811
+
812
+ ============== ========== ===============================================
813
+ Element Type Description
814
+ ============== ========== ===============================================
815
+ ``q`` ndarray(n) joint coordinates in units of radians or metres
816
+ ``success`` int whether a solution was found
817
+ ``iterations`` int total number of iterations
818
+ ``searches`` int total number of searches
819
+ ``residual`` float final value of cost function
820
+ ============== ========== ===============================================
821
+
822
+ If ``success == 0`` the ``q`` values will be valid numbers, but the
823
+ solution will be in error. The amount of error is indicated by
824
+ the ``residual``.
825
+
826
+ Each iteration uses the Gauss-Newton optimisation method
827
+
828
+ .. math::
829
+
830
+ \vec{q}_{k+1} &= \vec{q}_k +
831
+ \left(
832
+ {\mat{J}(\vec{q}_k)}^\top
833
+ \mat{W}_e \
834
+ {\mat{J}(\vec{q}_k)}
835
+ \right)^{-1}
836
+ \bf{g}_k \\
837
+ \bf{g}_k &=
838
+ {\mat{J}(\vec{q}_k)}^\top
839
+ \mat{W}_e
840
+ \vec{e}_k
841
+
842
+ where :math:`\mat{J} = {^0\mat{J}}` is the base-frame manipulator Jacobian. If
843
+ :math:`\mat{J}(\vec{q}_k)` is non-singular, and :math:`\mat{W}_e = \mat{1}_n`, then
844
+ the above provides the pseudoinverse solution. However, if :math:`\mat{J}(\vec{q}_k)`
845
+ is singular, the above can not be computed and the GN solution is infeasible.
846
+
847
+ Examples
848
+ --------
849
+ The following example gets a ``panda`` robot object, makes a goal
850
+ pose ``Tep``, and then solves for the joint coordinates which result in the pose
851
+ ``Tep`` using the `ikine_GN` method.
852
+
853
+ .. runblock:: pycon
854
+ >>> import roboticstoolbox as rtb
855
+ >>> panda = rtb.models.Panda()
856
+ >>> Tep = panda.fkine([0, -0.3, 0, -2.2, 0, 2, 0.7854])
857
+ >>> panda.ik_GN(Tep)
858
+
859
+ .. rubric:: Notes
860
+
861
+ When using the this method, the initial joint coordinates :math:`q_0`, should correspond
862
+ to a non-singular manipulator pose, since it uses the manipulator Jacobian.
863
+
864
+ .. rubric:: References
865
+
866
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part I:
867
+ Kinematics, Velocity, and Applications." arXiv preprint arXiv:2207.01796 (2022).
868
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part II:
869
+ Acceleration and Advanced Applications." arXiv preprint arXiv:2207.01794 (2022).
870
+
871
+ See Also
872
+ --------
873
+ ik_NR
874
+ A fast numerical inverse kinematics solver using Newton-Raphson optimisation
875
+ ik_GN
876
+ A fast numerical inverse kinematics solver using Gauss-Newton optimisation
877
+
878
+ """
879
+
880
+ return self.ets(start, end).ik_GN(
881
+ Tep=Tep,
882
+ q0=q0,
883
+ ilimit=ilimit,
884
+ slimit=slimit,
885
+ tol=tol,
886
+ joint_limits=joint_limits,
887
+ mask=mask,
888
+ pinv=pinv,
889
+ pinv_damping=pinv_damping,
890
+ )
891
+
892
+ def ikine_LM(
893
+ self: KinematicsProtocol,
894
+ Tep: NDArray | SE3,
895
+ end: str | Link | Gripper | None = None,
896
+ start: str | Link | Gripper | None = None,
897
+ q0: ArrayLike | None = None,
898
+ ilimit: int = 30,
899
+ slimit: int = 100,
900
+ tol: float = 1e-6,
901
+ mask: ArrayLike | None = None,
902
+ joint_limits: bool = True,
903
+ seed: int | None = None,
904
+ k: float = 1.0,
905
+ method: L["chan", "wampler", "sugihara"] = "chan",
906
+ kq: float = 0.0,
907
+ km: float = 0.0,
908
+ ps: float = 0.0,
909
+ pi: NDArray | float = 0.3,
910
+ **kwargs,
911
+ ):
912
+ r"""
913
+ Levenberg-Marquadt Numerical Inverse Kinematics Solver
914
+
915
+ :param Tep: The desired end-effector pose
916
+ :param end: the link considered as the end-effector
917
+ :param start: the link considered as the base frame, defaults to the robots's base frame
918
+ :param q0: The initial joint coordinate vector
919
+ :param ilimit: How many iterations are allowed within a search before a new search
920
+ is started
921
+ :param slimit: How many searches are allowed before being deemed unsuccessful
922
+ :param tol: Maximum allowed residual error E
923
+ :param mask: A 6 vector which assigns weights to Cartesian degrees-of-freedom
924
+ error priority
925
+ :param joint_limits: Reject solutions with joint limit violations
926
+ :param seed: A seed for the private RNG used to generate random joint coordinate
927
+ vectors
928
+ :param k: Sets the gain value for the damping matrix Wn in the next iteration
929
+ :param method: One of "chan", "sugihara" or "wampler". Defines which method is used
930
+ to calculate the damping matrix Wn in the ``step`` method
931
+ :param kq: The gain for joint limit avoidance. Setting to 0.0 will remove this
932
+ completely from the solution
933
+ :param km: The gain for maximisation. Setting to 0.0 will remove this completely
934
+ from the solution
935
+ :param ps: The minimum angle/distance (in radians or metres) in which the joint is
936
+ allowed to approach to its limit
937
+ :param pi: The influence angle/distance (in radians or metres) in null space motion
938
+ becomes active
939
+
940
+ A method which provides functionality to perform numerical inverse kinematics (IK)
941
+ using the Levemberg-Marquadt method.
942
+
943
+ See the :ref:`Inverse Kinematics Docs Page <IK>` for more details and for a
944
+ **tutorial** on numerical IK, see `here <https://bit.ly/3ak5GDi>`_.
945
+
946
+ The operation is defined by the choice of the ``method`` kwarg.
947
+
948
+ The step is deined as
949
+
950
+ .. math::
951
+
952
+ \vec{q}_{k+1}
953
+ &=
954
+ \vec{q}_k +
955
+ \left(
956
+ \mat{A}_k
957
+ \right)^{-1}
958
+ \bf{g}_k \\
959
+ %
960
+ \mat{A}_k
961
+ &=
962
+ {\mat{J}(\vec{q}_k)}^\top
963
+ \mat{W}_e \
964
+ {\mat{J}(\vec{q}_k)}
965
+ +
966
+ \mat{W}_n
967
+
968
+ where :math:`\mat{W}_n = \text{diag}(\vec{w_n})(\vec{w_n} \in \mathbb{R}^n_{>0})` is a
969
+ diagonal damping matrix. The damping matrix ensures that :math:`\mat{A}_k` is
970
+ non-singular and positive definite. The performance of the LM method largely depends
971
+ on the choice of :math:`\mat{W}_n`.
972
+
973
+ *Chan's Method*
974
+
975
+ Chan proposed
976
+
977
+ .. math::
978
+
979
+ \mat{W}_n
980
+ =
981
+ λ E_k \mat{1}_n
982
+
983
+ where λ is a constant which reportedly does not have much influence on performance.
984
+ Use the kwarg `k` to adjust the weighting term λ.
985
+
986
+ *Sugihara's Method*
987
+
988
+ Sugihara proposed
989
+
990
+ .. math::
991
+
992
+ \mat{W}_n
993
+ =
994
+ E_k \mat{1}_n + \text{diag}(\hat{\vec{w}}_n)
995
+
996
+ where :math:`\hat{\vec{w}}_n \in \mathbb{R}^n`, :math:`\hat{w}_{n_i} = l^2 \sim 0.01 l^2`,
997
+ and :math:`l` is the length of a typical link within the manipulator. We provide the
998
+ variable `k` as a kwarg to adjust the value of :math:`w_n`.
999
+
1000
+ *Wampler's Method*
1001
+
1002
+ Wampler proposed :math:`\vec{w_n}` to be a constant. This is set through the `k` kwarg.
1003
+
1004
+ Examples
1005
+ --------
1006
+ The following example makes a ``panda`` robot object, makes a goal
1007
+ pose ``Tep``, and then solves for the joint coordinates which result in the pose
1008
+ ``Tep`` using the `ikine_LM` method.
1009
+
1010
+ .. runblock:: pycon
1011
+ >>> import roboticstoolbox as rtb
1012
+ >>> panda = rtb.models.Panda()
1013
+ >>> Tep = panda.fkine([0, -0.3, 0, -2.2, 0, 2, 0.7854])
1014
+ >>> panda.ikine_LM(Tep)
1015
+
1016
+ .. rubric:: Notes
1017
+
1018
+ The value for the ``k`` kwarg will depend on the ``method`` chosen and the arm you are
1019
+ using. Use the following as a rough guide ``chan, k = 1.0 - 0.01``,
1020
+ ``wampler, k = 0.01 - 0.0001``, and ``sugihara, k = 0.1 - 0.0001``
1021
+
1022
+ When using the this method, the initial joint coordinates :math:`q_0`, should correspond
1023
+ to a non-singular manipulator pose, since it uses the manipulator Jacobian.
1024
+
1025
+ This class supports null-space motion to assist with maximising manipulability and
1026
+ avoiding joint limits. These are enabled by setting kq and km to non-zero values.
1027
+
1028
+ .. rubric:: References
1029
+
1030
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part I:
1031
+ Kinematics, Velocity, and Applications." arXiv preprint arXiv:2207.01796 (2022).
1032
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part II:
1033
+ Acceleration and Advanced Applications." arXiv preprint arXiv:2207.01794 (2022).
1034
+
1035
+ See Also
1036
+ --------
1037
+ :py:class:`~roboticstoolbox.robot.IK.IK_LM`
1038
+ An IK Solver class which implements the Levemberg Marquadt optimisation technique
1039
+ ikine_NR
1040
+ Implements the :py:class:`~roboticstoolbox.robot.IK.IK_NR` class as a method within the :py:class:`Robot` class
1041
+ ikine_GN
1042
+ Implements the :py:class:`~roboticstoolbox.robot.IK.IK_GN` class as a method within the :py:class:`Robot` class
1043
+ ikine_QP
1044
+ Implements the :py:class:`~roboticstoolbox.robot.IK.IK_QP` class as a method within the :py:class:`Robot` class
1045
+
1046
+
1047
+ .. versionchanged:: 1.0.4
1048
+ Added the Levemberg-Marquadt IK solver method on the `Robot` class
1049
+
1050
+ """
1051
+
1052
+ return self.ets(start, end).ikine_LM(
1053
+ Tep=Tep,
1054
+ q0=q0,
1055
+ ilimit=ilimit,
1056
+ slimit=slimit,
1057
+ tol=tol,
1058
+ joint_limits=joint_limits,
1059
+ mask=mask,
1060
+ seed=seed,
1061
+ k=k,
1062
+ method=method,
1063
+ kq=kq,
1064
+ km=km,
1065
+ ps=ps,
1066
+ pi=pi,
1067
+ **kwargs,
1068
+ )
1069
+
1070
+ def ikine_NR(
1071
+ self: KinematicsProtocol,
1072
+ Tep: NDArray | SE3,
1073
+ end: str | Link | Gripper | None = None,
1074
+ start: str | Link | Gripper | None = None,
1075
+ q0: ArrayLike | None = None,
1076
+ ilimit: int = 30,
1077
+ slimit: int = 100,
1078
+ tol: float = 1e-6,
1079
+ mask: ArrayLike | None = None,
1080
+ joint_limits: bool = True,
1081
+ seed: int | None = None,
1082
+ pinv: bool = False,
1083
+ kq: float = 0.0,
1084
+ km: float = 0.0,
1085
+ ps: float = 0.0,
1086
+ pi: NDArray | float = 0.3,
1087
+ **kwargs,
1088
+ ):
1089
+ r"""
1090
+ Newton-Raphson Numerical Inverse Kinematics Solver
1091
+
1092
+ :param Tep: The desired end-effector pose
1093
+ :param end: the link considered as the end-effector
1094
+ :param start: the link considered as the base frame, defaults to the robots's base frame
1095
+ :param q0: The initial joint coordinate vector
1096
+ :param ilimit: How many iterations are allowed within a search before a new search
1097
+ is started
1098
+ :param slimit: How many searches are allowed before being deemed unsuccessful
1099
+ :param tol: Maximum allowed residual error E
1100
+ :param mask: A 6 vector which assigns weights to Cartesian degrees-of-freedom
1101
+ error priority
1102
+ :param joint_limits: Reject solutions with joint limit violations
1103
+ :param seed: A seed for the private RNG used to generate random joint coordinate
1104
+ vectors
1105
+ :param pinv: If True, will use the pseudoinverse in the `step` method instead of
1106
+ the normal inverse
1107
+ :param kq: The gain for joint limit avoidance. Setting to 0.0 will remove this
1108
+ completely from the solution
1109
+ :param km: The gain for maximisation. Setting to 0.0 will remove this completely
1110
+ from the solution
1111
+ :param ps: The minimum angle/distance (in radians or metres) in which the joint is
1112
+ allowed to approach to its limit
1113
+ :param pi: The influence angle/distance (in radians or metres) in null space motion
1114
+ becomes active
1115
+
1116
+ A method which provides functionality to perform numerical inverse kinematics (IK)
1117
+ using the Newton-Raphson method.
1118
+
1119
+ See the :ref:`Inverse Kinematics Docs Page <IK>` for more details and for a
1120
+ **tutorial** on numerical IK, see `here <https://bit.ly/3ak5GDi>`_.
1121
+
1122
+ .. note::
1123
+
1124
+ When using this method with redundant robots (>6 DoF), ``pinv`` must be set to ``True``
1125
+
1126
+ Each iteration uses the Newton-Raphson optimisation method
1127
+
1128
+ .. math::
1129
+
1130
+ \vec{q}_{k+1} = \vec{q}_k + {^0\mat{J}(\vec{q}_k)}^{-1} \vec{e}_k
1131
+
1132
+ Examples
1133
+ --------
1134
+ The following example gets a ``panda`` robot object, makes a goal
1135
+ pose ``Tep``, and then solves for the joint coordinates which result in the pose
1136
+ ``Tep`` using the `ikine_NR` method.
1137
+
1138
+ .. runblock:: pycon
1139
+ >>> import roboticstoolbox as rtb
1140
+ >>> panda = rtb.models.Panda()
1141
+ >>> Tep = panda.fkine([0, -0.3, 0, -2.2, 0, 2, 0.7854])
1142
+ >>> panda.ikine_NR(Tep)
1143
+
1144
+ .. rubric:: Notes
1145
+
1146
+ When using the this method, the initial joint coordinates :math:`q_0`, should correspond
1147
+ to a non-singular manipulator pose, since it uses the manipulator Jacobian.
1148
+
1149
+ This class supports null-space motion to assist with maximising manipulability and
1150
+ avoiding joint limits. These are enabled by setting kq and km to non-zero values.
1151
+
1152
+ .. rubric:: References
1153
+
1154
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part I:
1155
+ Kinematics, Velocity, and Applications." arXiv preprint arXiv:2207.01796 (2022).
1156
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part II:
1157
+ Acceleration and Advanced Applications." arXiv preprint arXiv:2207.01794 (2022).
1158
+
1159
+ See Also
1160
+ --------
1161
+ :py:class:`~roboticstoolbox.robot.IK.IK_NR`
1162
+ An IK Solver class which implements the Newton-Raphson optimisation technique
1163
+ ikine_LM
1164
+ Implements the :py:class:`~roboticstoolbox.robot.IK.IK_LM` class as a method within the :py:class:`ETS` class
1165
+ ikine_GN
1166
+ Implements the :py:class:`~roboticstoolbox.robot.IK.IK_GN` class as a method within the :py:class:`ETS` class
1167
+ ikine_QP
1168
+ Implements the :py:class:`~roboticstoolbox.robot.IK.IK_QP` class as a method within the :py:class:`ETS` class
1169
+
1170
+
1171
+ .. versionchanged:: 1.0.4
1172
+ Added the Newton-Raphson IK solver method on the `Robot` class
1173
+
1174
+ """
1175
+
1176
+ return self.ets(start, end).ikine_NR(
1177
+ Tep=Tep,
1178
+ q0=q0,
1179
+ ilimit=ilimit,
1180
+ slimit=slimit,
1181
+ tol=tol,
1182
+ joint_limits=joint_limits,
1183
+ mask=mask,
1184
+ seed=seed,
1185
+ pinv=pinv,
1186
+ kq=kq,
1187
+ km=km,
1188
+ ps=ps,
1189
+ pi=pi,
1190
+ **kwargs,
1191
+ )
1192
+
1193
+ def ikine_GN(
1194
+ self: KinematicsProtocol,
1195
+ Tep: NDArray | SE3,
1196
+ end: str | Link | Gripper | None = None,
1197
+ start: str | Link | Gripper | None = None,
1198
+ q0: ArrayLike | None = None,
1199
+ ilimit: int = 30,
1200
+ slimit: int = 100,
1201
+ tol: float = 1e-6,
1202
+ mask: ArrayLike | None = None,
1203
+ joint_limits: bool = True,
1204
+ seed: int | None = None,
1205
+ pinv: bool = False,
1206
+ kq: float = 0.0,
1207
+ km: float = 0.0,
1208
+ ps: float = 0.0,
1209
+ pi: NDArray | float = 0.3,
1210
+ **kwargs,
1211
+ ):
1212
+ r"""
1213
+ Gauss-Newton Numerical Inverse Kinematics Solver
1214
+
1215
+ :param Tep: The desired end-effector pose
1216
+ :param end: the link considered as the end-effector
1217
+ :param start: the link considered as the base frame, defaults to the robots's base frame
1218
+ :param q0: The initial joint coordinate vector
1219
+ :param ilimit: How many iterations are allowed within a search before a new search
1220
+ is started
1221
+ :param slimit: How many searches are allowed before being deemed unsuccessful
1222
+ :param tol: Maximum allowed residual error E
1223
+ :param mask: A 6 vector which assigns weights to Cartesian degrees-of-freedom
1224
+ error priority
1225
+ :param joint_limits: Reject solutions with joint limit violations
1226
+ :param seed: A seed for the private RNG used to generate random joint coordinate
1227
+ vectors
1228
+ :param pinv: If True, will use the pseudoinverse in the `step` method instead of
1229
+ the normal inverse
1230
+ :param kq: The gain for joint limit avoidance. Setting to 0.0 will remove this
1231
+ completely from the solution
1232
+ :param km: The gain for maximisation. Setting to 0.0 will remove this completely
1233
+ from the solution
1234
+ :param ps: The minimum angle/distance (in radians or metres) in which the joint is
1235
+ allowed to approach to its limit
1236
+ :param pi: The influence angle/distance (in radians or metres) in null space motion
1237
+ becomes active
1238
+
1239
+ A method which provides functionality to perform numerical inverse kinematics (IK)
1240
+ using the Gauss-Newton method.
1241
+
1242
+ See the :ref:`Inverse Kinematics Docs Page <IK>` for more details and for a
1243
+ **tutorial** on numerical IK, see `here <https://bit.ly/3ak5GDi>`_.
1244
+
1245
+ .. note::
1246
+
1247
+ When using this method with redundant robots (>6 DoF), ``pinv`` must be set to ``True``
1248
+
1249
+ Each iteration uses the Gauss-Newton optimisation method
1250
+
1251
+ .. math::
1252
+
1253
+ \vec{q}_{k+1} &= \vec{q}_k +
1254
+ \left(
1255
+ {\mat{J}(\vec{q}_k)}^\top
1256
+ \mat{W}_e \
1257
+ {\mat{J}(\vec{q}_k)}
1258
+ \right)^{-1}
1259
+ \bf{g}_k \\
1260
+ \bf{g}_k &=
1261
+ {\mat{J}(\vec{q}_k)}^\top
1262
+ \mat{W}_e
1263
+ \vec{e}_k
1264
+
1265
+ where :math:`\mat{J} = {^0\mat{J}}` is the base-frame manipulator Jacobian. If
1266
+ :math:`\mat{J}(\vec{q}_k)` is non-singular, and :math:`\mat{W}_e = \mat{1}_n`, then
1267
+ the above provides the pseudoinverse solution. However, if :math:`\mat{J}(\vec{q}_k)`
1268
+ is singular, the above can not be computed and the GN solution is infeasible.
1269
+
1270
+ Examples
1271
+ --------
1272
+ The following example gets a ``panda`` robot object, makes a goal
1273
+ pose ``Tep``, and then solves for the joint coordinates which result in the pose
1274
+ ``Tep`` using the `ikine_GN` method.
1275
+
1276
+ .. runblock:: pycon
1277
+ >>> import roboticstoolbox as rtb
1278
+ >>> panda = rtb.models.Panda()
1279
+ >>> Tep = panda.fkine([0, -0.3, 0, -2.2, 0, 2, 0.7854])
1280
+ >>> panda.ikine_GN(Tep)
1281
+
1282
+ .. rubric:: Notes
1283
+
1284
+ When using the this method, the initial joint coordinates :math:`q_0`, should correspond
1285
+ to a non-singular manipulator pose, since it uses the manipulator Jacobian.
1286
+
1287
+ This class supports null-space motion to assist with maximising manipulability and
1288
+ avoiding joint limits. These are enabled by setting kq and km to non-zero values.
1289
+
1290
+ .. rubric:: References
1291
+
1292
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part I:
1293
+ Kinematics, Velocity, and Applications." arXiv preprint arXiv:2207.01796 (2022).
1294
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part II:
1295
+ Acceleration and Advanced Applications." arXiv preprint arXiv:2207.01794 (2022).
1296
+
1297
+ See Also
1298
+ --------
1299
+ :py:class:`~roboticstoolbox.robot.IK.IK_NR`
1300
+ An IK Solver class which implements the Newton-Raphson optimisation technique
1301
+ ikine_LM
1302
+ Implements the :py:class:`~roboticstoolbox.robot.IK.IK_LM` class as a method within the :py:class:`ETS` class
1303
+ ikine_NR
1304
+ Implements the :py:class:`~roboticstoolbox.robot.IK.IK_NR` class as a method within the :py:class:`ETS` class
1305
+ ikine_QP
1306
+ Implements the :py:class:`~roboticstoolbox.robot.IK.IK_QP` class as a method within the :py:class:`ETS` class
1307
+
1308
+
1309
+ .. versionchanged:: 1.0.4
1310
+ Added the Gauss-Newton IK solver method on the `Robot` class
1311
+
1312
+ """
1313
+
1314
+ return self.ets(start, end).ikine_GN(
1315
+ Tep=Tep,
1316
+ q0=q0,
1317
+ ilimit=ilimit,
1318
+ slimit=slimit,
1319
+ tol=tol,
1320
+ joint_limits=joint_limits,
1321
+ mask=mask,
1322
+ seed=seed,
1323
+ pinv=pinv,
1324
+ kq=kq,
1325
+ km=km,
1326
+ ps=ps,
1327
+ pi=pi,
1328
+ **kwargs,
1329
+ )
1330
+
1331
+ def ikine_QP(
1332
+ self: KinematicsProtocol,
1333
+ Tep: NDArray | SE3,
1334
+ end: str | Link | Gripper | None = None,
1335
+ start: str | Link | Gripper | None = None,
1336
+ q0: ArrayLike | None = None,
1337
+ ilimit: int = 30,
1338
+ slimit: int = 100,
1339
+ tol: float = 1e-6,
1340
+ mask: ArrayLike | None = None,
1341
+ joint_limits: bool = True,
1342
+ seed: int | None = None,
1343
+ kj=1.0,
1344
+ ks=1.0,
1345
+ kq: float = 0.0,
1346
+ km: float = 0.0,
1347
+ ps: float = 0.0,
1348
+ pi: NDArray | float = 0.3,
1349
+ **kwargs,
1350
+ ):
1351
+ r"""
1352
+ Quadratic Programming Numerical Inverse Kinematics Solver
1353
+
1354
+ :param Tep: The desired end-effector pose
1355
+ :param end: the link considered as the end-effector
1356
+ :param start: the link considered as the base frame, defaults to the robots's base frame
1357
+ :param q0: The initial joint coordinate vector
1358
+ :param ilimit: How many iterations are allowed within a search before a new search
1359
+ is started
1360
+ :param slimit: How many searches are allowed before being deemed unsuccessful
1361
+ :param tol: Maximum allowed residual error E
1362
+ :param mask: A 6 vector which assigns weights to Cartesian degrees-of-freedom
1363
+ error priority
1364
+ :param joint_limits: Reject solutions with joint limit violations
1365
+ :param seed: A seed for the private RNG used to generate random joint coordinate
1366
+ vectors
1367
+ :param kj: A gain for joint velocity norm minimisation
1368
+ :param ks: A gain which adjusts the cost of slack (intentional error)
1369
+ :param kq: The gain for joint limit avoidance. Setting to 0.0 will remove this
1370
+ completely from the solution
1371
+ :param km: The gain for maximisation. Setting to 0.0 will remove this completely
1372
+ from the solution
1373
+ :param ps: The minimum angle/distance (in radians or metres) in which the joint is
1374
+ allowed to approach to its limit
1375
+ :param pi: The influence angle/distance (in radians or metres) in null space motion
1376
+ becomes active
1377
+ :raises ImportError: If the package ``qpsolvers`` is not installed
1378
+
1379
+ A method that provides functionality to perform numerical inverse kinematics
1380
+ (IK) using a quadratic progamming approach.
1381
+
1382
+ See the :ref:`Inverse Kinematics Docs Page <IK>` for more details and for a
1383
+ **tutorial** on numerical IK, see `here <https://bit.ly/3ak5GDi>`_.
1384
+
1385
+ Each iteration uses the following approach
1386
+
1387
+ .. math::
1388
+
1389
+ \vec{q}_{k+1} = \vec{q}_{k} + \dot{\vec{q}}.
1390
+
1391
+ where the QP is defined as
1392
+
1393
+ .. math::
1394
+
1395
+ \min_x \quad f_o(\vec{x}) &= \frac{1}{2} \vec{x}^\top \mathcal{Q} \vec{x}+ \mathcal{C}^\top \vec{x}, \\
1396
+ \text{subject to} \quad \mathcal{J} \vec{x} &= \vec{\nu}, \\
1397
+ \mathcal{A} \vec{x} &\leq \mathcal{B}, \\
1398
+ \vec{x}^- &\leq \vec{x} \leq \vec{x}^+
1399
+
1400
+ with
1401
+
1402
+ .. math::
1403
+
1404
+ \vec{x} &=
1405
+ \begin{pmatrix}
1406
+ \dvec{q} \\ \vec{\delta}
1407
+ \end{pmatrix} \in \mathbb{R}^{(n+6)} \\
1408
+ \mathcal{Q} &=
1409
+ \begin{pmatrix}
1410
+ \lambda_q \mat{1}_{n} & \mathbf{0}_{6 \times 6} \\ \mathbf{0}_{n \times n} & \lambda_\delta \mat{1}_{6}
1411
+ \end{pmatrix} \in \mathbb{R}^{(n+6) \times (n+6)} \\
1412
+ \mathcal{J} &=
1413
+ \begin{pmatrix}
1414
+ \mat{J}(\vec{q}) & \mat{1}_{6}
1415
+ \end{pmatrix} \in \mathbb{R}^{6 \times (n+6)} \\
1416
+ \mathcal{C} &=
1417
+ \begin{pmatrix}
1418
+ \mat{J}_m \\ \bf{0}_{6 \times 1}
1419
+ \end{pmatrix} \in \mathbb{R}^{(n + 6)} \\
1420
+ \mathcal{A} &=
1421
+ \begin{pmatrix}
1422
+ \mat{1}_{n \times n + 6} \\
1423
+ \end{pmatrix} \in \mathbb{R}^{(l + n) \times (n + 6)} \\
1424
+ \mathcal{B} &=
1425
+ \eta
1426
+ \begin{pmatrix}
1427
+ \frac{\rho_0 - \rho_s}
1428
+ {\rho_i - \rho_s} \\
1429
+ \vdots \\
1430
+ \frac{\rho_n - \rho_s}
1431
+ {\rho_i - \rho_s}
1432
+ \end{pmatrix} \in \mathbb{R}^{n} \\
1433
+ \vec{x}^{-, +} &=
1434
+ \begin{pmatrix}
1435
+ \dvec{q}^{-, +} \\
1436
+ \vec{\delta}^{-, +}
1437
+ \end{pmatrix} \in \mathbb{R}^{(n+6)},
1438
+
1439
+ where :math:`\vec{\delta} \in \mathbb{R}^6` is the slack vector,
1440
+ :math:`\lambda_\delta \in \mathbb{R}^+` is a gain term which adjusts the
1441
+ cost of the norm of the slack vector in the optimiser,
1442
+ :math:`\dvec{q}^{-,+}` are the minimum and maximum joint velocities, and
1443
+ :math:`\dvec{\delta}^{-,+}` are the minimum and maximum slack velocities.
1444
+
1445
+ Examples
1446
+ --------
1447
+ The following example gets a ``panda`` robot object, makes a goal
1448
+ pose ``Tep``, and then solves for the joint coordinates which result in the pose
1449
+ ``Tep`` using the `ikine_QP` method.
1450
+
1451
+ .. runblock:: pycon
1452
+ >>> import roboticstoolbox as rtb
1453
+ >>> panda = rtb.models.Panda()
1454
+ >>> Tep = panda.fkine([0, -0.3, 0, -2.2, 0, 2, 0.7854])
1455
+ >>> panda.ikine_QP(Tep)
1456
+
1457
+ .. rubric:: Notes
1458
+
1459
+ When using the this method, the initial joint coordinates :math:`q_0`, should correspond
1460
+ to a non-singular manipulator pose, since it uses the manipulator Jacobian.
1461
+
1462
+ This class supports null-space motion to assist with maximising manipulability and
1463
+ avoiding joint limits. These are enabled by setting kq and km to non-zero values.
1464
+
1465
+ .. rubric:: References
1466
+
1467
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part I:
1468
+ Kinematics, Velocity, and Applications." arXiv preprint arXiv:2207.01796 (2022).
1469
+ - J. Haviland, and P. Corke. "Manipulator Differential Kinematics Part II:
1470
+ Acceleration and Advanced Applications." arXiv preprint arXiv:2207.01794 (2022).
1471
+
1472
+ See Also
1473
+ --------
1474
+ :py:class:`~roboticstoolbox.robot.IK.IK_NR`
1475
+ An IK Solver class which implements the Newton-Raphson optimisation technique
1476
+ ikine_LM
1477
+ Implements the :py:class:`~roboticstoolbox.robot.IK.IK_LM` class as a method within the :py:class:`ETS` class
1478
+ ikine_GN
1479
+ Implements the :py:class:`~roboticstoolbox.robot.IK.IK_GN` class as a method within the :py:class:`ETS` class
1480
+ ikine_NR
1481
+ Implements the :py:class:`~roboticstoolbox.robot.IK.IK_NR` class as a method within the :py:class:`ETS` class
1482
+
1483
+
1484
+ .. versionchanged:: 1.0.4
1485
+ Added the Quadratic Programming IK solver method on the `Robot` class
1486
+
1487
+ """
1488
+
1489
+ return self.ets(start, end).ikine_QP(
1490
+ Tep=Tep,
1491
+ q0=q0,
1492
+ ilimit=ilimit,
1493
+ slimit=slimit,
1494
+ tol=tol,
1495
+ joint_limits=joint_limits,
1496
+ mask=mask,
1497
+ seed=seed,
1498
+ ks=ks,
1499
+ kj=kj,
1500
+ kq=kq,
1501
+ km=km,
1502
+ ps=ps,
1503
+ pi=pi,
1504
+ **kwargs,
1505
+ )