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