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.
- roboticstoolbox/__init__.py +104 -0
- roboticstoolbox/backends/Connector.py +107 -0
- roboticstoolbox/backends/Dynamixel/README.md +9 -0
- roboticstoolbox/backends/Dynamixel/dynamixel.json +581 -0
- roboticstoolbox/backends/Dynamixel/dynamixel_io.py +450 -0
- roboticstoolbox/backends/Dynamixel/dynamixel_sdk/LICENSE +201 -0
- roboticstoolbox/backends/Dynamixel/dynamixel_sdk/README.md +28 -0
- roboticstoolbox/backends/Dynamixel/dynamixel_sdk/ReleaseNote.md +181 -0
- roboticstoolbox/backends/Dynamixel/dynamixel_sdk/__init__.py +27 -0
- roboticstoolbox/backends/Dynamixel/dynamixel_sdk/group_bulk_read.py +163 -0
- roboticstoolbox/backends/Dynamixel/dynamixel_sdk/group_bulk_write.py +109 -0
- roboticstoolbox/backends/Dynamixel/dynamixel_sdk/group_sync_read.py +166 -0
- roboticstoolbox/backends/Dynamixel/dynamixel_sdk/group_sync_write.py +99 -0
- roboticstoolbox/backends/Dynamixel/dynamixel_sdk/packet_handler.py +33 -0
- roboticstoolbox/backends/Dynamixel/dynamixel_sdk/port_handler.py +155 -0
- roboticstoolbox/backends/Dynamixel/dynamixel_sdk/protocol1_packet_handler.py +548 -0
- roboticstoolbox/backends/Dynamixel/dynamixel_sdk/protocol2_packet_handler.py +1080 -0
- roboticstoolbox/backends/Dynamixel/dynamixel_sdk/robotis_def.py +75 -0
- roboticstoolbox/backends/Dynamixel/dyndata.py +121 -0
- roboticstoolbox/backends/PyPlot/EllipsePlot.py +253 -0
- roboticstoolbox/backends/PyPlot/PyPlot.py +769 -0
- roboticstoolbox/backends/PyPlot/PyPlot2.py +526 -0
- roboticstoolbox/backends/PyPlot/README.md +67 -0
- roboticstoolbox/backends/PyPlot/RobotPlot.py +247 -0
- roboticstoolbox/backends/PyPlot/RobotPlot2.py +123 -0
- roboticstoolbox/backends/PyPlot/__init__.py +4 -0
- roboticstoolbox/backends/ROS/ROS.py +129 -0
- roboticstoolbox/backends/ROS/__init__.py +3 -0
- roboticstoolbox/backends/__init__.py +39 -0
- roboticstoolbox/backends/swift/__init__.py +26 -0
- roboticstoolbox/bin/__init__.py +0 -0
- roboticstoolbox/bin/rtbtool.py +307 -0
- roboticstoolbox/blocks/Icons/250x250/armplot.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/bicycle.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/camera.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/circlepath.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/coriolis.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/ctraj.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/delta2tr.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/diffsteer.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/fdyn.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/fdynx.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/fkine.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/gravload.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/idyn.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/idynx.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/ikine.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/inertia.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/jacobian.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/jtraj.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/lspb.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/multirotor.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/multirotormixer.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/multirotorplot.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/point2tr.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/tr2delta.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/tr2t.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/unicycle.png +0 -0
- roboticstoolbox/blocks/Icons/250x250/vehicleplot.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/armplot.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/bicycle.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/camera.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/circlepath.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/coriolis.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/delta2tr.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/diffsteer.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/fdyn.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/fdynx.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/fkine.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/gravload.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/idyn.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/idynx.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/ikine.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/inertia.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/jacobian.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/jtraj.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/lspb.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/multirotor.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/multirotormixer.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/multirotorplot.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/point2tr.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/tr2delta.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/tr2t.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/unicycle.png +0 -0
- roboticstoolbox/blocks/Icons/50x50/vehicleplot.png +0 -0
- roboticstoolbox/blocks/Icons/armplot.png +0 -0
- roboticstoolbox/blocks/Icons/bicycle.png +0 -0
- roboticstoolbox/blocks/Icons/camera.png +0 -0
- roboticstoolbox/blocks/Icons/circlepath.png +0 -0
- roboticstoolbox/blocks/Icons/coriolis.png +0 -0
- roboticstoolbox/blocks/Icons/ctraj.png +0 -0
- roboticstoolbox/blocks/Icons/delta2tr.png +0 -0
- roboticstoolbox/blocks/Icons/diffsteer.png +0 -0
- roboticstoolbox/blocks/Icons/fdyn.png +0 -0
- roboticstoolbox/blocks/Icons/fdynx.png +0 -0
- roboticstoolbox/blocks/Icons/fkine.png +0 -0
- roboticstoolbox/blocks/Icons/gravload.png +0 -0
- roboticstoolbox/blocks/Icons/idyn.png +0 -0
- roboticstoolbox/blocks/Icons/idynx.png +0 -0
- roboticstoolbox/blocks/Icons/ikine.png +0 -0
- roboticstoolbox/blocks/Icons/inertia.png +0 -0
- roboticstoolbox/blocks/Icons/jacobian.png +0 -0
- roboticstoolbox/blocks/Icons/jtraj.png +0 -0
- roboticstoolbox/blocks/Icons/lspb.png +0 -0
- roboticstoolbox/blocks/Icons/multirotor.png +0 -0
- roboticstoolbox/blocks/Icons/multirotormixer.png +0 -0
- roboticstoolbox/blocks/Icons/multirotorplot.png +0 -0
- roboticstoolbox/blocks/Icons/point2tr.png +0 -0
- roboticstoolbox/blocks/Icons/tr2delta.png +0 -0
- roboticstoolbox/blocks/Icons/tr2t.png +0 -0
- roboticstoolbox/blocks/Icons/unicycle.png +0 -0
- roboticstoolbox/blocks/Icons/vehicleplot.png +0 -0
- roboticstoolbox/blocks/README.md +43 -0
- roboticstoolbox/blocks/__init__.py +6 -0
- roboticstoolbox/blocks/arm.py +1587 -0
- roboticstoolbox/blocks/mobile.py +500 -0
- roboticstoolbox/blocks/quad_model.py +132 -0
- roboticstoolbox/blocks/spatial.py +245 -0
- roboticstoolbox/blocks/uav.py +949 -0
- roboticstoolbox/core/Eigen/Cholesky +45 -0
- roboticstoolbox/core/Eigen/CholmodSupport +48 -0
- roboticstoolbox/core/Eigen/Core +384 -0
- roboticstoolbox/core/Eigen/Dense +7 -0
- roboticstoolbox/core/Eigen/Eigen +2 -0
- roboticstoolbox/core/Eigen/Eigenvalues +60 -0
- roboticstoolbox/core/Eigen/Geometry +59 -0
- roboticstoolbox/core/Eigen/Householder +29 -0
- roboticstoolbox/core/Eigen/IterativeLinearSolvers +48 -0
- roboticstoolbox/core/Eigen/Jacobi +32 -0
- roboticstoolbox/core/Eigen/KLUSupport +41 -0
- roboticstoolbox/core/Eigen/LU +47 -0
- roboticstoolbox/core/Eigen/MetisSupport +35 -0
- roboticstoolbox/core/Eigen/OrderingMethods +70 -0
- roboticstoolbox/core/Eigen/PaStiXSupport +49 -0
- roboticstoolbox/core/Eigen/PardisoSupport +35 -0
- roboticstoolbox/core/Eigen/QR +50 -0
- roboticstoolbox/core/Eigen/QtAlignedMalloc +39 -0
- roboticstoolbox/core/Eigen/SPQRSupport +34 -0
- roboticstoolbox/core/Eigen/SVD +50 -0
- roboticstoolbox/core/Eigen/Sparse +34 -0
- roboticstoolbox/core/Eigen/SparseCholesky +37 -0
- roboticstoolbox/core/Eigen/SparseCore +69 -0
- roboticstoolbox/core/Eigen/SparseLU +50 -0
- roboticstoolbox/core/Eigen/SparseQR +36 -0
- roboticstoolbox/core/Eigen/StdDeque +27 -0
- roboticstoolbox/core/Eigen/StdList +26 -0
- roboticstoolbox/core/Eigen/StdVector +27 -0
- roboticstoolbox/core/Eigen/SuperLUSupport +64 -0
- roboticstoolbox/core/Eigen/UmfPackSupport +40 -0
- roboticstoolbox/core/Eigen/src/Cholesky/LDLT.h +688 -0
- roboticstoolbox/core/Eigen/src/Cholesky/LLT.h +558 -0
- roboticstoolbox/core/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
- roboticstoolbox/core/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
- roboticstoolbox/core/Eigen/src/Core/ArithmeticSequence.h +413 -0
- roboticstoolbox/core/Eigen/src/Core/Array.h +417 -0
- roboticstoolbox/core/Eigen/src/Core/ArrayBase.h +226 -0
- roboticstoolbox/core/Eigen/src/Core/ArrayWrapper.h +209 -0
- roboticstoolbox/core/Eigen/src/Core/Assign.h +90 -0
- roboticstoolbox/core/Eigen/src/Core/AssignEvaluator.h +1010 -0
- roboticstoolbox/core/Eigen/src/Core/Assign_MKL.h +178 -0
- roboticstoolbox/core/Eigen/src/Core/BandMatrix.h +353 -0
- roboticstoolbox/core/Eigen/src/Core/Block.h +448 -0
- roboticstoolbox/core/Eigen/src/Core/BooleanRedux.h +162 -0
- roboticstoolbox/core/Eigen/src/Core/CommaInitializer.h +164 -0
- roboticstoolbox/core/Eigen/src/Core/ConditionEstimator.h +175 -0
- roboticstoolbox/core/Eigen/src/Core/CoreEvaluators.h +1741 -0
- roboticstoolbox/core/Eigen/src/Core/CoreIterators.h +132 -0
- roboticstoolbox/core/Eigen/src/Core/CwiseBinaryOp.h +183 -0
- roboticstoolbox/core/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
- roboticstoolbox/core/Eigen/src/Core/CwiseTernaryOp.h +197 -0
- roboticstoolbox/core/Eigen/src/Core/CwiseUnaryOp.h +103 -0
- roboticstoolbox/core/Eigen/src/Core/CwiseUnaryView.h +132 -0
- roboticstoolbox/core/Eigen/src/Core/DenseBase.h +701 -0
- roboticstoolbox/core/Eigen/src/Core/DenseCoeffsBase.h +685 -0
- roboticstoolbox/core/Eigen/src/Core/DenseStorage.h +652 -0
- roboticstoolbox/core/Eigen/src/Core/Diagonal.h +258 -0
- roboticstoolbox/core/Eigen/src/Core/DiagonalMatrix.h +391 -0
- roboticstoolbox/core/Eigen/src/Core/DiagonalProduct.h +28 -0
- roboticstoolbox/core/Eigen/src/Core/Dot.h +318 -0
- roboticstoolbox/core/Eigen/src/Core/EigenBase.h +160 -0
- roboticstoolbox/core/Eigen/src/Core/ForceAlignedAccess.h +150 -0
- roboticstoolbox/core/Eigen/src/Core/Fuzzy.h +155 -0
- roboticstoolbox/core/Eigen/src/Core/GeneralProduct.h +465 -0
- roboticstoolbox/core/Eigen/src/Core/GenericPacketMath.h +1040 -0
- roboticstoolbox/core/Eigen/src/Core/GlobalFunctions.h +194 -0
- roboticstoolbox/core/Eigen/src/Core/IO.h +258 -0
- roboticstoolbox/core/Eigen/src/Core/IndexedView.h +237 -0
- roboticstoolbox/core/Eigen/src/Core/Inverse.h +117 -0
- roboticstoolbox/core/Eigen/src/Core/Map.h +171 -0
- roboticstoolbox/core/Eigen/src/Core/MapBase.h +310 -0
- roboticstoolbox/core/Eigen/src/Core/MathFunctions.h +2057 -0
- roboticstoolbox/core/Eigen/src/Core/MathFunctionsImpl.h +200 -0
- roboticstoolbox/core/Eigen/src/Core/Matrix.h +565 -0
- roboticstoolbox/core/Eigen/src/Core/MatrixBase.h +547 -0
- roboticstoolbox/core/Eigen/src/Core/NestByValue.h +85 -0
- roboticstoolbox/core/Eigen/src/Core/NoAlias.h +109 -0
- roboticstoolbox/core/Eigen/src/Core/NumTraits.h +335 -0
- roboticstoolbox/core/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- roboticstoolbox/core/Eigen/src/Core/PermutationMatrix.h +605 -0
- roboticstoolbox/core/Eigen/src/Core/PlainObjectBase.h +1128 -0
- roboticstoolbox/core/Eigen/src/Core/Product.h +191 -0
- roboticstoolbox/core/Eigen/src/Core/ProductEvaluators.h +1179 -0
- roboticstoolbox/core/Eigen/src/Core/Random.h +218 -0
- roboticstoolbox/core/Eigen/src/Core/Redux.h +515 -0
- roboticstoolbox/core/Eigen/src/Core/Ref.h +381 -0
- roboticstoolbox/core/Eigen/src/Core/Replicate.h +142 -0
- roboticstoolbox/core/Eigen/src/Core/Reshaped.h +454 -0
- roboticstoolbox/core/Eigen/src/Core/ReturnByValue.h +119 -0
- roboticstoolbox/core/Eigen/src/Core/Reverse.h +217 -0
- roboticstoolbox/core/Eigen/src/Core/Select.h +164 -0
- roboticstoolbox/core/Eigen/src/Core/SelfAdjointView.h +365 -0
- roboticstoolbox/core/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
- roboticstoolbox/core/Eigen/src/Core/Solve.h +188 -0
- roboticstoolbox/core/Eigen/src/Core/SolveTriangular.h +235 -0
- roboticstoolbox/core/Eigen/src/Core/SolverBase.h +168 -0
- roboticstoolbox/core/Eigen/src/Core/StableNorm.h +251 -0
- roboticstoolbox/core/Eigen/src/Core/StlIterators.h +463 -0
- roboticstoolbox/core/Eigen/src/Core/Stride.h +116 -0
- roboticstoolbox/core/Eigen/src/Core/Swap.h +68 -0
- roboticstoolbox/core/Eigen/src/Core/Transpose.h +464 -0
- roboticstoolbox/core/Eigen/src/Core/Transpositions.h +386 -0
- roboticstoolbox/core/Eigen/src/Core/TriangularMatrix.h +1001 -0
- roboticstoolbox/core/Eigen/src/Core/VectorBlock.h +96 -0
- roboticstoolbox/core/Eigen/src/Core/VectorwiseOp.h +784 -0
- roboticstoolbox/core/Eigen/src/Core/Visitor.h +381 -0
- roboticstoolbox/core/Eigen/src/Core/arch/AVX/Complex.h +372 -0
- roboticstoolbox/core/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
- roboticstoolbox/core/Eigen/src/Core/arch/AVX/PacketMath.h +1574 -0
- roboticstoolbox/core/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
- roboticstoolbox/core/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- roboticstoolbox/core/Eigen/src/Core/arch/AVX512/MathFunctions.h +362 -0
- roboticstoolbox/core/Eigen/src/Core/arch/AVX512/PacketMath.h +2303 -0
- roboticstoolbox/core/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- roboticstoolbox/core/Eigen/src/Core/arch/AltiVec/Complex.h +417 -0
- roboticstoolbox/core/Eigen/src/Core/arch/AltiVec/MathFunctions.h +90 -0
- roboticstoolbox/core/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- roboticstoolbox/core/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- roboticstoolbox/core/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- roboticstoolbox/core/Eigen/src/Core/arch/AltiVec/PacketMath.h +2711 -0
- roboticstoolbox/core/Eigen/src/Core/arch/CUDA/Complex.h +258 -0
- roboticstoolbox/core/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- roboticstoolbox/core/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
- roboticstoolbox/core/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- roboticstoolbox/core/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- roboticstoolbox/core/Eigen/src/Core/arch/Default/Half.h +942 -0
- roboticstoolbox/core/Eigen/src/Core/arch/Default/Settings.h +49 -0
- roboticstoolbox/core/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- roboticstoolbox/core/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
- roboticstoolbox/core/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- roboticstoolbox/core/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- roboticstoolbox/core/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- roboticstoolbox/core/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- roboticstoolbox/core/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- roboticstoolbox/core/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- roboticstoolbox/core/Eigen/src/Core/arch/NEON/Complex.h +584 -0
- roboticstoolbox/core/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- roboticstoolbox/core/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
- roboticstoolbox/core/Eigen/src/Core/arch/NEON/PacketMath.h +4587 -0
- roboticstoolbox/core/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- roboticstoolbox/core/Eigen/src/Core/arch/SSE/Complex.h +351 -0
- roboticstoolbox/core/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
- roboticstoolbox/core/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
- roboticstoolbox/core/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
- roboticstoolbox/core/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- roboticstoolbox/core/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- roboticstoolbox/core/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- roboticstoolbox/core/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- roboticstoolbox/core/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- roboticstoolbox/core/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- roboticstoolbox/core/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- roboticstoolbox/core/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- roboticstoolbox/core/Eigen/src/Core/arch/ZVector/Complex.h +426 -0
- roboticstoolbox/core/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
- roboticstoolbox/core/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
- roboticstoolbox/core/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
- roboticstoolbox/core/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
- roboticstoolbox/core/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
- roboticstoolbox/core/Eigen/src/Core/functors/StlFunctors.h +166 -0
- roboticstoolbox/core/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
- roboticstoolbox/core/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
- roboticstoolbox/core/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
- roboticstoolbox/core/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
- roboticstoolbox/core/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +317 -0
- roboticstoolbox/core/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
- roboticstoolbox/core/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
- roboticstoolbox/core/Eigen/src/Core/products/GeneralMatrixVector.h +518 -0
- roboticstoolbox/core/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
- roboticstoolbox/core/Eigen/src/Core/products/Parallelizer.h +180 -0
- roboticstoolbox/core/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
- roboticstoolbox/core/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
- roboticstoolbox/core/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
- roboticstoolbox/core/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
- roboticstoolbox/core/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
- roboticstoolbox/core/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
- roboticstoolbox/core/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
- roboticstoolbox/core/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
- roboticstoolbox/core/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
- roboticstoolbox/core/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
- roboticstoolbox/core/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
- roboticstoolbox/core/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
- roboticstoolbox/core/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
- roboticstoolbox/core/Eigen/src/Core/util/BlasUtil.h +583 -0
- roboticstoolbox/core/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- roboticstoolbox/core/Eigen/src/Core/util/Constants.h +563 -0
- roboticstoolbox/core/Eigen/src/Core/util/DisableStupidWarnings.h +106 -0
- roboticstoolbox/core/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
- roboticstoolbox/core/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- roboticstoolbox/core/Eigen/src/Core/util/IntegralConstant.h +272 -0
- roboticstoolbox/core/Eigen/src/Core/util/MKL_support.h +137 -0
- roboticstoolbox/core/Eigen/src/Core/util/Macros.h +1464 -0
- roboticstoolbox/core/Eigen/src/Core/util/Memory.h +1163 -0
- roboticstoolbox/core/Eigen/src/Core/util/Meta.h +812 -0
- roboticstoolbox/core/Eigen/src/Core/util/NonMPL2.h +3 -0
- roboticstoolbox/core/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
- roboticstoolbox/core/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- roboticstoolbox/core/Eigen/src/Core/util/StaticAssert.h +221 -0
- roboticstoolbox/core/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- roboticstoolbox/core/Eigen/src/Core/util/XprHelper.h +856 -0
- roboticstoolbox/core/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
- roboticstoolbox/core/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
- roboticstoolbox/core/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
- roboticstoolbox/core/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
- roboticstoolbox/core/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
- roboticstoolbox/core/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
- roboticstoolbox/core/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
- roboticstoolbox/core/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
- roboticstoolbox/core/Eigen/src/Eigenvalues/RealQZ.h +657 -0
- roboticstoolbox/core/Eigen/src/Eigenvalues/RealSchur.h +558 -0
- roboticstoolbox/core/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
- roboticstoolbox/core/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
- roboticstoolbox/core/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
- roboticstoolbox/core/Eigen/src/Eigenvalues/Tridiagonalization.h +561 -0
- roboticstoolbox/core/Eigen/src/Geometry/AlignedBox.h +486 -0
- roboticstoolbox/core/Eigen/src/Geometry/AngleAxis.h +247 -0
- roboticstoolbox/core/Eigen/src/Geometry/EulerAngles.h +114 -0
- roboticstoolbox/core/Eigen/src/Geometry/Homogeneous.h +501 -0
- roboticstoolbox/core/Eigen/src/Geometry/Hyperplane.h +282 -0
- roboticstoolbox/core/Eigen/src/Geometry/OrthoMethods.h +235 -0
- roboticstoolbox/core/Eigen/src/Geometry/ParametrizedLine.h +232 -0
- roboticstoolbox/core/Eigen/src/Geometry/Quaternion.h +870 -0
- roboticstoolbox/core/Eigen/src/Geometry/Rotation2D.h +199 -0
- roboticstoolbox/core/Eigen/src/Geometry/RotationBase.h +206 -0
- roboticstoolbox/core/Eigen/src/Geometry/Scaling.h +188 -0
- roboticstoolbox/core/Eigen/src/Geometry/Transform.h +1563 -0
- roboticstoolbox/core/Eigen/src/Geometry/Translation.h +202 -0
- roboticstoolbox/core/Eigen/src/Geometry/Umeyama.h +166 -0
- roboticstoolbox/core/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- roboticstoolbox/core/Eigen/src/Householder/BlockHouseholder.h +110 -0
- roboticstoolbox/core/Eigen/src/Householder/Householder.h +176 -0
- roboticstoolbox/core/Eigen/src/Householder/HouseholderSequence.h +545 -0
- roboticstoolbox/core/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
- roboticstoolbox/core/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
- roboticstoolbox/core/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +229 -0
- roboticstoolbox/core/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
- roboticstoolbox/core/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
- roboticstoolbox/core/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
- roboticstoolbox/core/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
- roboticstoolbox/core/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
- roboticstoolbox/core/Eigen/src/Jacobi/Jacobi.h +483 -0
- roboticstoolbox/core/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- roboticstoolbox/core/Eigen/src/LU/Determinant.h +117 -0
- roboticstoolbox/core/Eigen/src/LU/FullPivLU.h +877 -0
- roboticstoolbox/core/Eigen/src/LU/InverseImpl.h +432 -0
- roboticstoolbox/core/Eigen/src/LU/PartialPivLU.h +624 -0
- roboticstoolbox/core/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
- roboticstoolbox/core/Eigen/src/LU/arch/InverseSize4.h +351 -0
- roboticstoolbox/core/Eigen/src/MetisSupport/MetisSupport.h +137 -0
- roboticstoolbox/core/Eigen/src/OrderingMethods/Amd.h +435 -0
- roboticstoolbox/core/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
- roboticstoolbox/core/Eigen/src/OrderingMethods/Ordering.h +153 -0
- roboticstoolbox/core/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
- roboticstoolbox/core/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
- roboticstoolbox/core/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
- roboticstoolbox/core/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
- roboticstoolbox/core/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
- roboticstoolbox/core/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
- roboticstoolbox/core/Eigen/src/QR/HouseholderQR.h +434 -0
- roboticstoolbox/core/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
- roboticstoolbox/core/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
- roboticstoolbox/core/Eigen/src/SVD/BDCSVD.h +1366 -0
- roboticstoolbox/core/Eigen/src/SVD/JacobiSVD.h +812 -0
- roboticstoolbox/core/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
- roboticstoolbox/core/Eigen/src/SVD/SVDBase.h +376 -0
- roboticstoolbox/core/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
- roboticstoolbox/core/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
- roboticstoolbox/core/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
- roboticstoolbox/core/Eigen/src/SparseCore/AmbiVector.h +378 -0
- roboticstoolbox/core/Eigen/src/SparseCore/CompressedStorage.h +274 -0
- roboticstoolbox/core/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
- roboticstoolbox/core/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseAssign.h +270 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseBlock.h +571 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseColEtree.h +206 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseDot.h +98 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseMap.h +305 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseMatrixBase.h +398 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparsePermutation.h +178 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseProduct.h +181 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseRedux.h +49 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseRef.h +397 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseTranspose.h +92 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseUtil.h +186 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseVector.h +478 -0
- roboticstoolbox/core/Eigen/src/SparseCore/SparseView.h +254 -0
- roboticstoolbox/core/Eigen/src/SparseCore/TriangularSolver.h +315 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU.h +923 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +375 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
- roboticstoolbox/core/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
- roboticstoolbox/core/Eigen/src/SparseQR/SparseQR.h +758 -0
- roboticstoolbox/core/Eigen/src/StlSupport/StdDeque.h +116 -0
- roboticstoolbox/core/Eigen/src/StlSupport/StdList.h +106 -0
- roboticstoolbox/core/Eigen/src/StlSupport/StdVector.h +131 -0
- roboticstoolbox/core/Eigen/src/StlSupport/details.h +84 -0
- roboticstoolbox/core/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
- roboticstoolbox/core/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
- roboticstoolbox/core/Eigen/src/misc/Image.h +82 -0
- roboticstoolbox/core/Eigen/src/misc/Kernel.h +79 -0
- roboticstoolbox/core/Eigen/src/misc/RealSvd2x2.h +55 -0
- roboticstoolbox/core/Eigen/src/misc/blas.h +440 -0
- roboticstoolbox/core/Eigen/src/misc/lapack.h +152 -0
- roboticstoolbox/core/Eigen/src/misc/lapacke.h +16292 -0
- roboticstoolbox/core/Eigen/src/misc/lapacke_mangling.h +17 -0
- roboticstoolbox/core/Eigen/src/plugins/ArrayCwiseBinaryOps.h +358 -0
- roboticstoolbox/core/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
- roboticstoolbox/core/Eigen/src/plugins/BlockMethods.h +1442 -0
- roboticstoolbox/core/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
- roboticstoolbox/core/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
- roboticstoolbox/core/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- roboticstoolbox/core/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
- roboticstoolbox/core/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
- roboticstoolbox/core/Eigen/src/plugins/ReshapedMethods.h +149 -0
- roboticstoolbox/core/fknm.cpp +1557 -0
- roboticstoolbox/core/fknm.h +55 -0
- roboticstoolbox/core/frne.c +351 -0
- roboticstoolbox/core/frne.h +96 -0
- roboticstoolbox/core/ik.cpp +301 -0
- roboticstoolbox/core/ik.h +59 -0
- roboticstoolbox/core/linalg.cpp +316 -0
- roboticstoolbox/core/linalg.h +64 -0
- roboticstoolbox/core/methods.cpp +372 -0
- roboticstoolbox/core/methods.h +32 -0
- roboticstoolbox/core/ne.c +493 -0
- roboticstoolbox/core/structs.cpp +24 -0
- roboticstoolbox/core/structs.h +62 -0
- roboticstoolbox/core/vmath.c +163 -0
- roboticstoolbox/core/vmath.h +32 -0
- roboticstoolbox/fknm.cp313-win_amd64.pyd +0 -0
- roboticstoolbox/frne.cp313-win_amd64.pyd +0 -0
- roboticstoolbox/mobile/Animations.py +485 -0
- roboticstoolbox/mobile/Bug2.py +455 -0
- roboticstoolbox/mobile/CurvaturePolyPlanner.py +179 -0
- roboticstoolbox/mobile/DistanceTransformPlanner.py +395 -0
- roboticstoolbox/mobile/DstarPlanner.py +591 -0
- roboticstoolbox/mobile/DubinsPlanner.py +474 -0
- roboticstoolbox/mobile/EKF.py +1617 -0
- roboticstoolbox/mobile/LatticePlanner.py +419 -0
- roboticstoolbox/mobile/OccGrid.py +613 -0
- roboticstoolbox/mobile/PRMPlanner.py +348 -0
- roboticstoolbox/mobile/ParticleFilter.py +706 -0
- roboticstoolbox/mobile/PlannerBase.py +1009 -0
- roboticstoolbox/mobile/PoseGraph.py +544 -0
- roboticstoolbox/mobile/QuinticPolyPlanner.py +349 -0
- roboticstoolbox/mobile/RRTPlanner.py +359 -0
- roboticstoolbox/mobile/ReedsSheppPlanner.py +545 -0
- roboticstoolbox/mobile/Vehicle.py +1909 -0
- roboticstoolbox/mobile/__init__.py +193 -0
- roboticstoolbox/mobile/drivers.py +390 -0
- roboticstoolbox/mobile/landmarkmap.py +181 -0
- roboticstoolbox/mobile/sensors.py +771 -0
- roboticstoolbox/models/DH/AL5D.py +121 -0
- roboticstoolbox/models/DH/Ball.py +87 -0
- roboticstoolbox/models/DH/Baxter.py +91 -0
- roboticstoolbox/models/DH/Cobra600.py +63 -0
- roboticstoolbox/models/DH/Coil.py +80 -0
- roboticstoolbox/models/DH/Hyper.py +83 -0
- roboticstoolbox/models/DH/Hyper3d.py +85 -0
- roboticstoolbox/models/DH/IRB140.py +159 -0
- roboticstoolbox/models/DH/Jaco.py +102 -0
- roboticstoolbox/models/DH/KR5.py +112 -0
- roboticstoolbox/models/DH/LWR4.py +85 -0
- roboticstoolbox/models/DH/Mico.py +102 -0
- roboticstoolbox/models/DH/Orion5.py +91 -0
- roboticstoolbox/models/DH/P8.py +80 -0
- roboticstoolbox/models/DH/Panda.py +178 -0
- roboticstoolbox/models/DH/Planar2.py +69 -0
- roboticstoolbox/models/DH/Planar3.py +51 -0
- roboticstoolbox/models/DH/Puma560.py +326 -0
- roboticstoolbox/models/DH/README.md +216 -0
- roboticstoolbox/models/DH/Sawyer.py +85 -0
- roboticstoolbox/models/DH/Stanford.py +147 -0
- roboticstoolbox/models/DH/TwoLink.py +109 -0
- roboticstoolbox/models/DH/UR10.py +124 -0
- roboticstoolbox/models/DH/UR3.py +98 -0
- roboticstoolbox/models/DH/UR5.py +98 -0
- roboticstoolbox/models/DH/Uprighttl.py +24 -0
- roboticstoolbox/models/DH/__init__.py +52 -0
- roboticstoolbox/models/ETS/Frankie.py +90 -0
- roboticstoolbox/models/ETS/GenericSeven.py +54 -0
- roboticstoolbox/models/ETS/Omni.py +74 -0
- roboticstoolbox/models/ETS/Panda.py +69 -0
- roboticstoolbox/models/ETS/Planar2.py +49 -0
- roboticstoolbox/models/ETS/Planar_Y.py +65 -0
- roboticstoolbox/models/ETS/Puma560.py +69 -0
- roboticstoolbox/models/ETS/XYPanda.py +84 -0
- roboticstoolbox/models/ETS/__init__.py +20 -0
- roboticstoolbox/models/README.md +9 -0
- roboticstoolbox/models/URDF/AL5D.py +54 -0
- roboticstoolbox/models/URDF/Fetch.py +70 -0
- roboticstoolbox/models/URDF/FetchCamera.py +71 -0
- roboticstoolbox/models/URDF/Frankie.py +75 -0
- roboticstoolbox/models/URDF/FrankieOmni.py +94 -0
- roboticstoolbox/models/URDF/KinovaGen3.py +71 -0
- roboticstoolbox/models/URDF/LBR.py +59 -0
- roboticstoolbox/models/URDF/Mico.py +68 -0
- roboticstoolbox/models/URDF/PR2.py +64 -0
- roboticstoolbox/models/URDF/Panda.py +67 -0
- roboticstoolbox/models/URDF/Puma560.py +97 -0
- roboticstoolbox/models/URDF/UR10.py +53 -0
- roboticstoolbox/models/URDF/UR3.py +53 -0
- roboticstoolbox/models/URDF/UR5.py +74 -0
- roboticstoolbox/models/URDF/Valkyrie.py +84 -0
- roboticstoolbox/models/URDF/YuMi.py +109 -0
- roboticstoolbox/models/URDF/__init__.py +53 -0
- roboticstoolbox/models/URDF/px100.py +56 -0
- roboticstoolbox/models/URDF/px150.py +56 -0
- roboticstoolbox/models/URDF/rx150.py +56 -0
- roboticstoolbox/models/URDF/rx200.py +56 -0
- roboticstoolbox/models/URDF/vx300.py +56 -0
- roboticstoolbox/models/URDF/vx300s.py +56 -0
- roboticstoolbox/models/URDF/wx200.py +56 -0
- roboticstoolbox/models/URDF/wx250.py +56 -0
- roboticstoolbox/models/URDF/wx250s.py +56 -0
- roboticstoolbox/models/__init__.py +7 -0
- roboticstoolbox/models/list.py +119 -0
- roboticstoolbox/robot/BaseRobot.py +3133 -0
- roboticstoolbox/robot/DHFactor.py +522 -0
- roboticstoolbox/robot/DHLink.py +981 -0
- roboticstoolbox/robot/DHRobot.py +2520 -0
- roboticstoolbox/robot/Dynamics.py +1620 -0
- roboticstoolbox/robot/ELink.py +23 -0
- roboticstoolbox/robot/ERobot.py +25 -0
- roboticstoolbox/robot/ET.py +1097 -0
- roboticstoolbox/robot/ETS.py +3542 -0
- roboticstoolbox/robot/Gripper.py +282 -0
- roboticstoolbox/robot/IK.py +1522 -0
- roboticstoolbox/robot/Link.py +1698 -0
- roboticstoolbox/robot/PoERobot.py +348 -0
- roboticstoolbox/robot/Robot.py +2100 -0
- roboticstoolbox/robot/RobotKinematics.py +1725 -0
- roboticstoolbox/robot/RobotProto.py +92 -0
- roboticstoolbox/robot/__init__.py +54 -0
- roboticstoolbox/tools/DHFactor.py +375 -0
- roboticstoolbox/tools/Ticker.py +53 -0
- roboticstoolbox/tools/__init__.py +54 -0
- roboticstoolbox/tools/data.py +187 -0
- roboticstoolbox/tools/jsingu.py +51 -0
- roboticstoolbox/tools/null.py +48 -0
- roboticstoolbox/tools/numerical.py +96 -0
- roboticstoolbox/tools/p_servo.py +106 -0
- roboticstoolbox/tools/params.py +11 -0
- roboticstoolbox/tools/plot.py +109 -0
- roboticstoolbox/tools/trajectory.py +1152 -0
- roboticstoolbox/tools/types.py +13 -0
- roboticstoolbox/tools/urdf/__init__.py +45 -0
- roboticstoolbox/tools/urdf/tests/data/ur5.urdf +341 -0
- roboticstoolbox/tools/urdf/tests/test_urdf.py +116 -0
- roboticstoolbox/tools/urdf/urdf.py +1976 -0
- roboticstoolbox/tools/urdf/utils.py +50 -0
- roboticstoolbox/tools/xacro/__init__.py +1148 -0
- roboticstoolbox/tools/xacro/cli.py +128 -0
- roboticstoolbox/tools/xacro/color.py +66 -0
- roboticstoolbox/tools/xacro/tests/CMakeLists.txt +4 -0
- roboticstoolbox/tools/xacro/tests/broken.xacro +1 -0
- roboticstoolbox/tools/xacro/tests/emoji.xacro +5 -0
- roboticstoolbox/tools/xacro/tests/include1.xacro +4 -0
- roboticstoolbox/tools/xacro/tests/include1.xml +1 -0
- roboticstoolbox/tools/xacro/tests/include2.xacro +4 -0
- roboticstoolbox/tools/xacro/tests/include2.xml +1 -0
- roboticstoolbox/tools/xacro/tests/robots/README +4 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/base_v0/base.gazebo.xacro +59 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/base_v0/base.transmission.xacro +24 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/base_v0/base.urdf.xacro +264 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/common.xacro +71 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/forearm_v0/forearm.gazebo.xacro +36 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/forearm_v0/forearm.transmission.xacro +20 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/forearm_v0/forearm.urdf.xacro +130 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/gazebo/gazebo.urdf.xacro +24 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/gripper_v0/gripper.gazebo.xacro +288 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/gripper_v0/gripper.transmission.xacro +50 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/gripper_v0/gripper.urdf.xacro +374 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/head_v0/head.gazebo.xacro +16 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/head_v0/head.transmission.xacro +34 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/head_v0/head.urdf.xacro +147 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/materials.urdf.xacro +52 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/pr2.urdf.xacro +157 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/pr2_1.11.4.xml +3781 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/double_stereo_camera.gazebo.xacro +16 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/double_stereo_camera.urdf.xacro +61 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/head_sensor_package.gazebo.xacro +20 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/head_sensor_package.urdf.xacro +63 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/hokuyo_lx30_laser.gazebo.xacro +39 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/hokuyo_lx30_laser.urdf.xacro +27 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/kinect_camera.gazebo.xacro +87 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/kinect_camera.urdf.xacro +55 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/kinect_prosilica_camera.gazebo.xacro +193 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/kinect_prosilica_camera.urdf.xacro +181 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/microstrain_3dmgx2_imu.gazebo.xacro +20 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/microstrain_3dmgx2_imu.urdf.xacro +25 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/projector_wg6802418.gazebo.xacro +31 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/projector_wg6802418.urdf.xacro +42 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/prosilica_gc2450_camera.gazebo.xacro +43 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/prosilica_gc2450_camera.urdf.xacro +49 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/stereo_camera.gazebo.xacro +23 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/stereo_camera.urdf.xacro +71 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/wge100_camera.gazebo.xacro +46 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/sensors/wge100_camera.urdf.xacro +47 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/shoulder_v0/shoulder.gazebo.xacro +40 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/shoulder_v0/shoulder.transmission.xacro +35 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/shoulder_v0/shoulder.urdf.xacro +167 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/tilting_laser_v0/tilting_laser.gazebo.xacro +11 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/tilting_laser_v0/tilting_laser.transmission.xacro +14 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/tilting_laser_v0/tilting_laser.urdf.xacro +60 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/torso_v0/torso.gazebo.xacro +37 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/torso_v0/torso.transmission.xacro +22 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/torso_v0/torso.urdf.xacro +122 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/upper_arm_v0/upper_arm.gazebo.xacro +39 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/upper_arm_v0/upper_arm.transmission.xacro +28 -0
- roboticstoolbox/tools/xacro/tests/robots/pr2/upper_arm_v0/upper_arm.urdf.xacro +173 -0
- roboticstoolbox/tools/xacro/tests/settings.yaml +9 -0
- roboticstoolbox/tools/xacro/tests/subdir/foo.xacro +3 -0
- roboticstoolbox/tools/xacro/tests/subdir/include-recursive.xacro +5 -0
- roboticstoolbox/tools/xacro/tests/subdir/include1.xml +1 -0
- roboticstoolbox/tools/xacro/tests/test_xacro.py +1418 -0
- roboticstoolbox/tools/xacro/xmlutils.py +152 -0
- roboticstoolbox_python-1.3.0.dist-info/METADATA +552 -0
- roboticstoolbox_python-1.3.0.dist-info/RECORD +673 -0
- roboticstoolbox_python-1.3.0.dist-info/WHEEL +5 -0
- roboticstoolbox_python-1.3.0.dist-info/entry_points.txt +6 -0
- roboticstoolbox_python-1.3.0.dist-info/licenses/LICENSE +21 -0
- spatialgeometry/__init__.py +32 -0
- spatialgeometry/geom/CollisionShape.py +419 -0
- spatialgeometry/geom/SceneGroup.py +26 -0
- spatialgeometry/geom/SceneNode.py +315 -0
- spatialgeometry/geom/Shape.py +420 -0
- spatialgeometry/geom/__init__.py +26 -0
- spatialgeometry/scene.py +107 -0
- spatialgeometry/tools/__init__.py +0 -0
- 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
|
+
)
|