roboticstoolbox-python 1.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- roboticstoolbox/__init__.py +107 -0
- roboticstoolbox/backends/Connector.py +113 -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 +256 -0
- roboticstoolbox/backends/PyPlot/PyPlot.py +778 -0
- roboticstoolbox/backends/PyPlot/PyPlot2.py +537 -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 +165 -0
- roboticstoolbox/bin/__init__.py +0 -0
- roboticstoolbox/bin/_bintools.py +61 -0
- roboticstoolbox/bin/rtbtool.py +404 -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 +1591 -0
- roboticstoolbox/blocks/mobile.py +522 -0
- roboticstoolbox/blocks/quad_model.py +132 -0
- roboticstoolbox/blocks/spatial.py +245 -0
- roboticstoolbox/blocks/uav.py +949 -0
- roboticstoolbox/demo/__init__.py +0 -0
- roboticstoolbox/demo/eigdemo.py +112 -0
- roboticstoolbox/demo/tripleangledemo.py +239 -0
- roboticstoolbox/demo/twistdemo.py +175 -0
- roboticstoolbox/ets/ET.py +439 -0
- roboticstoolbox/ets/ET2.py +179 -0
- roboticstoolbox/ets/ETS.py +2013 -0
- roboticstoolbox/ets/ETS2.py +449 -0
- roboticstoolbox/ets/_ET.py +668 -0
- roboticstoolbox/ets/_ETS.py +781 -0
- roboticstoolbox/ets/__init__.py +11 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Cholesky +45 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/CholmodSupport +48 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Core +384 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Dense +7 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Eigen +2 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Eigenvalues +60 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Geometry +59 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Householder +29 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/IterativeLinearSolvers +48 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Jacobi +32 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/KLUSupport +41 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/LU +47 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/MetisSupport +35 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/OrderingMethods +70 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/PaStiXSupport +49 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/PardisoSupport +35 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/QR +50 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/QtAlignedMalloc +39 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/SPQRSupport +34 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/SVD +50 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Sparse +34 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/SparseCholesky +37 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/SparseCore +69 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/SparseLU +50 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/SparseQR +36 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/StdDeque +27 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/StdList +26 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/StdVector +27 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/SuperLUSupport +64 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/UmfPackSupport +40 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Cholesky/LDLT.h +688 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Cholesky/LLT.h +558 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ArithmeticSequence.h +413 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Array.h +417 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ArrayBase.h +226 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ArrayWrapper.h +209 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Assign.h +90 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/AssignEvaluator.h +1010 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Assign_MKL.h +178 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/BandMatrix.h +353 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Block.h +448 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/BooleanRedux.h +162 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CommaInitializer.h +164 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ConditionEstimator.h +175 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CoreEvaluators.h +1741 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CoreIterators.h +132 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseBinaryOp.h +183 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseTernaryOp.h +197 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseUnaryOp.h +103 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseUnaryView.h +132 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DenseBase.h +701 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DenseCoeffsBase.h +685 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DenseStorage.h +652 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Diagonal.h +258 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DiagonalMatrix.h +391 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DiagonalProduct.h +28 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Dot.h +318 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/EigenBase.h +160 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ForceAlignedAccess.h +150 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Fuzzy.h +155 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/GeneralProduct.h +465 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/GenericPacketMath.h +1040 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/GlobalFunctions.h +194 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/IO.h +258 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/IndexedView.h +237 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Inverse.h +117 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Map.h +171 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/MapBase.h +310 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/MathFunctions.h +2057 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/MathFunctionsImpl.h +200 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Matrix.h +565 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/MatrixBase.h +547 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/NestByValue.h +85 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/NoAlias.h +109 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/NumTraits.h +335 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/PermutationMatrix.h +605 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/PlainObjectBase.h +1128 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Product.h +191 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ProductEvaluators.h +1179 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Random.h +218 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Redux.h +515 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Ref.h +381 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Replicate.h +142 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Reshaped.h +454 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ReturnByValue.h +119 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Reverse.h +217 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Select.h +164 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/SelfAdjointView.h +365 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Solve.h +188 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/SolveTriangular.h +235 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/SolverBase.h +168 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/StableNorm.h +251 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/StlIterators.h +463 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Stride.h +116 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Swap.h +68 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Transpose.h +464 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Transpositions.h +386 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/TriangularMatrix.h +1001 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/VectorBlock.h +96 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/VectorwiseOp.h +784 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Visitor.h +381 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX/Complex.h +372 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX/PacketMath.h +1574 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX512/MathFunctions.h +362 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX512/PacketMath.h +2303 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/Complex.h +417 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/MathFunctions.h +90 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/PacketMath.h +2711 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/CUDA/Complex.h +258 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/Half.h +942 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/Settings.h +49 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/Complex.h +584 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/PacketMath.h +4587 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SSE/Complex.h +351 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/ZVector/Complex.h +426 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/StlFunctors.h +166 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +317 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixVector.h +518 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/Parallelizer.h +180 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/BlasUtil.h +583 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/Constants.h +563 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/DisableStupidWarnings.h +106 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/IntegralConstant.h +272 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/MKL_support.h +137 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/Macros.h +1464 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/Memory.h +1163 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/Meta.h +812 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/NonMPL2.h +3 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/StaticAssert.h +221 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/XprHelper.h +856 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/RealQZ.h +657 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/RealSchur.h +558 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/Tridiagonalization.h +561 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/AlignedBox.h +486 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/AngleAxis.h +247 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/EulerAngles.h +114 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Homogeneous.h +501 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Hyperplane.h +282 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/OrthoMethods.h +235 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/ParametrizedLine.h +232 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Quaternion.h +870 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Rotation2D.h +199 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/RotationBase.h +206 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Scaling.h +188 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Transform.h +1563 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Translation.h +202 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Umeyama.h +166 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Householder/BlockHouseholder.h +110 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Householder/Householder.h +176 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Householder/HouseholderSequence.h +545 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +229 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Jacobi/Jacobi.h +483 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/Determinant.h +117 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/FullPivLU.h +877 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/InverseImpl.h +432 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/PartialPivLU.h +624 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/arch/InverseSize4.h +351 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/MetisSupport/MetisSupport.h +137 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/OrderingMethods/Amd.h +435 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/OrderingMethods/Ordering.h +153 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/HouseholderQR.h +434 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/BDCSVD.h +1366 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/JacobiSVD.h +812 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/SVDBase.h +376 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/AmbiVector.h +378 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/CompressedStorage.h +274 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseAssign.h +270 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseBlock.h +571 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseColEtree.h +206 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseDot.h +98 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseMap.h +305 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseMatrixBase.h +398 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparsePermutation.h +178 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseProduct.h +181 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseRedux.h +49 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseRef.h +397 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseTranspose.h +92 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseUtil.h +186 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseVector.h +478 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseView.h +254 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/TriangularSolver.h +315 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU.h +923 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +375 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseQR/SparseQR.h +758 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/StlSupport/StdDeque.h +116 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/StlSupport/StdList.h +106 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/StlSupport/StdVector.h +131 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/StlSupport/details.h +84 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/Image.h +82 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/Kernel.h +79 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/RealSvd2x2.h +55 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/blas.h +440 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/lapack.h +152 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/lapacke.h +16292 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/lapacke_mangling.h +17 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/ArrayCwiseBinaryOps.h +358 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/BlockMethods.h +1442 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/ReshapedMethods.h +149 -0
- roboticstoolbox/ets/cpp-extensions/README.md +73 -0
- roboticstoolbox/ets/cpp-extensions/fknm_nb.cpp +534 -0
- roboticstoolbox/ets/cpp-extensions/ik.cpp +301 -0
- roboticstoolbox/ets/cpp-extensions/ik.h +59 -0
- roboticstoolbox/ets/cpp-extensions/linalg.cpp +316 -0
- roboticstoolbox/ets/cpp-extensions/linalg.h +64 -0
- roboticstoolbox/ets/cpp-extensions/methods.cpp +372 -0
- roboticstoolbox/ets/cpp-extensions/methods.h +32 -0
- roboticstoolbox/ets/cpp-extensions/structs.cpp +24 -0
- roboticstoolbox/ets/cpp-extensions/structs.h +62 -0
- roboticstoolbox/ets/fknm.py +366 -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 +194 -0
- roboticstoolbox/mobile/drivers.py +397 -0
- roboticstoolbox/mobile/landmarkmap.py +181 -0
- roboticstoolbox/mobile/sensors.py +789 -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 +81 -0
- roboticstoolbox/models/DH/Hyper3d.py +83 -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 +80 -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 +213 -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 +153 -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 +70 -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 +45 -0
- roboticstoolbox/models/URDF/Fetch.py +96 -0
- roboticstoolbox/models/URDF/Frankie.py +67 -0
- roboticstoolbox/models/URDF/FrankieOmni.py +94 -0
- roboticstoolbox/models/URDF/Jaco.py +49 -0
- roboticstoolbox/models/URDF/KinovaGen3.py +63 -0
- roboticstoolbox/models/URDF/LBR.py +57 -0
- roboticstoolbox/models/URDF/PR2.py +66 -0
- roboticstoolbox/models/URDF/Panda.py +60 -0
- roboticstoolbox/models/URDF/Puma560.py +90 -0
- roboticstoolbox/models/URDF/UR10.py +43 -0
- roboticstoolbox/models/URDF/UR3.py +43 -0
- roboticstoolbox/models/URDF/UR5.py +64 -0
- roboticstoolbox/models/URDF/URDFRobot.py +402 -0
- roboticstoolbox/models/URDF/Valkyrie.py +110 -0
- roboticstoolbox/models/URDF/YuMi.py +107 -0
- roboticstoolbox/models/URDF/__init__.py +51 -0
- roboticstoolbox/models/URDF/px100.py +48 -0
- roboticstoolbox/models/URDF/px150.py +48 -0
- roboticstoolbox/models/URDF/rx150.py +48 -0
- roboticstoolbox/models/URDF/rx200.py +48 -0
- roboticstoolbox/models/URDF/vx300.py +48 -0
- roboticstoolbox/models/URDF/vx300s.py +48 -0
- roboticstoolbox/models/URDF/wx200.py +48 -0
- roboticstoolbox/models/URDF/wx250.py +48 -0
- roboticstoolbox/models/URDF/wx250s.py +48 -0
- roboticstoolbox/models/__init__.py +7 -0
- roboticstoolbox/models/catalog.py +226 -0
- roboticstoolbox/robot/BaseRobot.py +2589 -0
- roboticstoolbox/robot/DHFactor.py +522 -0
- roboticstoolbox/robot/DHLink.py +949 -0
- roboticstoolbox/robot/DHRobot.py +2591 -0
- roboticstoolbox/robot/Dynamics.py +1537 -0
- roboticstoolbox/robot/ELink.py +23 -0
- roboticstoolbox/robot/ERobot.py +25 -0
- roboticstoolbox/robot/Gripper.py +242 -0
- roboticstoolbox/robot/IK.py +1378 -0
- roboticstoolbox/robot/Link.py +1557 -0
- roboticstoolbox/robot/PoERobot.py +352 -0
- roboticstoolbox/robot/Robot.py +2157 -0
- roboticstoolbox/robot/RobotKinematics.py +1505 -0
- roboticstoolbox/robot/RobotPlottingMPL.py +355 -0
- roboticstoolbox/robot/RobotProto.py +156 -0
- roboticstoolbox/robot/__init__.py +57 -0
- roboticstoolbox/robot/cpp-extensions/README.md +29 -0
- roboticstoolbox/robot/cpp-extensions/frne.h +96 -0
- roboticstoolbox/robot/cpp-extensions/frne_nb.cpp +237 -0
- roboticstoolbox/robot/cpp-extensions/ne.c +495 -0
- roboticstoolbox/robot/cpp-extensions/vmath.c +163 -0
- roboticstoolbox/robot/cpp-extensions/vmath.h +32 -0
- roboticstoolbox/robot/frne.py +51 -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 +108 -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 +1930 -0
- roboticstoolbox/tools/urdf/utils.py +50 -0
- roboticstoolbox_python-1.4.0.dist-info/METADATA +664 -0
- roboticstoolbox_python-1.4.0.dist-info/RECORD +610 -0
- roboticstoolbox_python-1.4.0.dist-info/WHEEL +5 -0
- roboticstoolbox_python-1.4.0.dist-info/entry_points.txt +6 -0
- roboticstoolbox_python-1.4.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,781 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
@author: Jesse Haviland
|
|
5
|
+
@author: Peter Corke
|
|
6
|
+
|
|
7
|
+
Shared base for ETS (3D) and ETS2 (2D) - see roboticstoolbox.ets.ETS /
|
|
8
|
+
roboticstoolbox.ets.ETS2 for the concrete classes. This module exists
|
|
9
|
+
separately so ETS.py and ETS2.py can each import BaseETS without importing
|
|
10
|
+
each other (BaseETS is depended on by both, so it can't depend on either
|
|
11
|
+
without a cycle).
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
from collections.abc import MutableSequence
|
|
16
|
+
from functools import wraps, cached_property
|
|
17
|
+
import numpy as np
|
|
18
|
+
from numpy.random import uniform
|
|
19
|
+
from numpy.linalg import inv, det, cond, svd
|
|
20
|
+
from spatialmath import SE3, SE2
|
|
21
|
+
from spatialmath.base import (
|
|
22
|
+
getvector,
|
|
23
|
+
issymbol,
|
|
24
|
+
tr2jac,
|
|
25
|
+
verifymatrix,
|
|
26
|
+
tr2jac2,
|
|
27
|
+
t2r,
|
|
28
|
+
rotvelxform,
|
|
29
|
+
simplify,
|
|
30
|
+
getmatrix,
|
|
31
|
+
)
|
|
32
|
+
from roboticstoolbox.tools.params import rtb_get_param
|
|
33
|
+
|
|
34
|
+
from roboticstoolbox.ets.fknm import (
|
|
35
|
+
ETS_init,
|
|
36
|
+
ETS_fkine,
|
|
37
|
+
ETS_jacob0,
|
|
38
|
+
ETS_jacobe,
|
|
39
|
+
ETS_hessian0,
|
|
40
|
+
ETS_hessiane,
|
|
41
|
+
IK_NR_c,
|
|
42
|
+
IK_GN_c,
|
|
43
|
+
IK_LM_c,
|
|
44
|
+
)
|
|
45
|
+
from copy import deepcopy
|
|
46
|
+
from roboticstoolbox.ets._ET import BaseET
|
|
47
|
+
from typing import overload, TypeVar
|
|
48
|
+
from typing import Literal as L
|
|
49
|
+
from roboticstoolbox.tools.types import ArrayLike, NDArray
|
|
50
|
+
|
|
51
|
+
T = TypeVar("T", bound="BaseETS")
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _dirties_fknm(func):
|
|
55
|
+
@wraps(func)
|
|
56
|
+
def wrapper(self, *args, **kwargs):
|
|
57
|
+
result = func(self, *args, **kwargs)
|
|
58
|
+
self._fknm_stale = True
|
|
59
|
+
return result
|
|
60
|
+
return wrapper
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class BaseETS(MutableSequence):
|
|
64
|
+
def __init__(self):
|
|
65
|
+
self._data: list = []
|
|
66
|
+
self._fknm_stale = True
|
|
67
|
+
self._BaseETS__fknm = None
|
|
68
|
+
|
|
69
|
+
# ------------------------------------------------------------------
|
|
70
|
+
# MutableSequence abstract methods
|
|
71
|
+
# ------------------------------------------------------------------
|
|
72
|
+
|
|
73
|
+
def __len__(self) -> int:
|
|
74
|
+
return len(self._data)
|
|
75
|
+
|
|
76
|
+
@_dirties_fknm
|
|
77
|
+
def __setitem__(self, i, value):
|
|
78
|
+
self._data[i] = value
|
|
79
|
+
|
|
80
|
+
@_dirties_fknm
|
|
81
|
+
def __delitem__(self, i):
|
|
82
|
+
del self._data[i]
|
|
83
|
+
|
|
84
|
+
@_dirties_fknm
|
|
85
|
+
def insert(self, index: int, value) -> None:
|
|
86
|
+
self._data.insert(index, value)
|
|
87
|
+
|
|
88
|
+
def __repr__(self) -> str:
|
|
89
|
+
return repr(self._data)
|
|
90
|
+
|
|
91
|
+
def __eq__(self, other: object) -> bool:
|
|
92
|
+
if isinstance(other, BaseETS):
|
|
93
|
+
return self._data == other._data
|
|
94
|
+
return NotImplemented
|
|
95
|
+
|
|
96
|
+
__hash__ = None # type: ignore[assignment]
|
|
97
|
+
|
|
98
|
+
def __radd__(self, other):
|
|
99
|
+
# lets sum() work without an explicit start value, since its
|
|
100
|
+
# default start is the int 0, which has no idea how to compose
|
|
101
|
+
# with an ETS/ETS2
|
|
102
|
+
if other == 0:
|
|
103
|
+
return self
|
|
104
|
+
return NotImplemented
|
|
105
|
+
|
|
106
|
+
# ------------------------------------------------------------------
|
|
107
|
+
# C handle: lazy build on first use after any mutation
|
|
108
|
+
# ------------------------------------------------------------------
|
|
109
|
+
|
|
110
|
+
@property
|
|
111
|
+
def _fknm(self):
|
|
112
|
+
if self._fknm_stale:
|
|
113
|
+
self._copy_to_cpp()
|
|
114
|
+
return self._BaseETS__fknm
|
|
115
|
+
|
|
116
|
+
def _copy_to_cpp(self):
|
|
117
|
+
self._BaseETS__fknm = ETS_init(
|
|
118
|
+
[et.fknm for et in self._data],
|
|
119
|
+
self.n,
|
|
120
|
+
self.m,
|
|
121
|
+
)
|
|
122
|
+
self._fknm_stale = False
|
|
123
|
+
|
|
124
|
+
def __str__(self, q: str | None = None):
|
|
125
|
+
"""
|
|
126
|
+
Pretty prints the ETS
|
|
127
|
+
|
|
128
|
+
``q`` controls how the joint variables are displayed:
|
|
129
|
+
|
|
130
|
+
- None, format depends on number of joint variables
|
|
131
|
+
- one, display joint variable as q
|
|
132
|
+
- more, display joint variables as q0, q1, ...
|
|
133
|
+
- if a joint index was provided, use this value
|
|
134
|
+
- "", display all joint variables as empty parentheses ``()``
|
|
135
|
+
- "θ", display all joint variables as ``(θ)``
|
|
136
|
+
- format string with passed joint variables ``(j, j+1)``, so "θ{0}"
|
|
137
|
+
would display joint variables as θ0, θ1, ... while "θ{1}" would
|
|
138
|
+
display joint variables as θ1, θ2, ... ``j`` is either the joint
|
|
139
|
+
index, if provided, otherwise a sequential value.
|
|
140
|
+
|
|
141
|
+
:param q: control how joint variables are displayed
|
|
142
|
+
:returns: Pretty printed ETS
|
|
143
|
+
:rtype: str
|
|
144
|
+
|
|
145
|
+
Examples
|
|
146
|
+
--------
|
|
147
|
+
|
|
148
|
+
.. runblock:: pycon
|
|
149
|
+
|
|
150
|
+
>>> from roboticstoolbox import ET
|
|
151
|
+
>>> e = ET.Rz() * ET.tx(1) * ET.Rz()
|
|
152
|
+
>>> print(e[:2])
|
|
153
|
+
>>> print(e)
|
|
154
|
+
>>> print(e.__str__(""))
|
|
155
|
+
>>> print(e.__str__("θ{0}")) # numbering from 0
|
|
156
|
+
>>> print(e.__str__("θ{1}")) # numbering from 1
|
|
157
|
+
>>> # explicit joint indices
|
|
158
|
+
>>> e = ET.Rz(jindex=3) * ET.tx(1) * ET.Rz(jindex=4)
|
|
159
|
+
>>> print(e)
|
|
160
|
+
>>> print(e.__str__("θ{0}"))
|
|
161
|
+
|
|
162
|
+
Angular parameters are converted to degrees, except if they
|
|
163
|
+
are symbolic.
|
|
164
|
+
|
|
165
|
+
.. runblock:: pycon
|
|
166
|
+
>>> from roboticstoolbox import ET
|
|
167
|
+
>>> from spatialmath.base import symbol
|
|
168
|
+
>>> theta, d = symbol('theta, d')
|
|
169
|
+
>>> e = ET.Rx(theta) * ET.tx(2) * ET.Rx(45, 'deg') * ET.Ry(0.2) * ET.ty(d)
|
|
170
|
+
>>> str(e)
|
|
171
|
+
|
|
172
|
+
"""
|
|
173
|
+
|
|
174
|
+
es = []
|
|
175
|
+
j = 0
|
|
176
|
+
c = 0
|
|
177
|
+
s = None
|
|
178
|
+
unicode = rtb_get_param("unicode")
|
|
179
|
+
|
|
180
|
+
# An empty SE3
|
|
181
|
+
if len(self._data) == 0:
|
|
182
|
+
return "SE3()"
|
|
183
|
+
|
|
184
|
+
if q is None:
|
|
185
|
+
if len(self.joints()) > 1:
|
|
186
|
+
q = "q{0}"
|
|
187
|
+
else:
|
|
188
|
+
q = "q"
|
|
189
|
+
|
|
190
|
+
# For et in the object, display it, data comes from properties
|
|
191
|
+
# which come from the named tuple
|
|
192
|
+
for et in self._data:
|
|
193
|
+
if et.isjoint:
|
|
194
|
+
# A custom name from a string `param` descriptor (e.g.
|
|
195
|
+
# "theta2") already encodes any leading sign itself, so it
|
|
196
|
+
# takes over the whole "q0"/"-q0" formatting below rather
|
|
197
|
+
# than combining with it.
|
|
198
|
+
if et._joint_name is not None:
|
|
199
|
+
s = f"{et.kind}({et._joint_name})"
|
|
200
|
+
j += 1
|
|
201
|
+
es.append(s)
|
|
202
|
+
continue
|
|
203
|
+
|
|
204
|
+
if q is not None:
|
|
205
|
+
if et.jindex is None: # pragma: nocover this is no longer possible
|
|
206
|
+
_j = j
|
|
207
|
+
else:
|
|
208
|
+
_j = et.jindex
|
|
209
|
+
qvar = q.format(
|
|
210
|
+
_j, _j + 1
|
|
211
|
+
)
|
|
212
|
+
# else:
|
|
213
|
+
# qvar = ""
|
|
214
|
+
|
|
215
|
+
if et.isflip:
|
|
216
|
+
s = f"{et.kind}(-{qvar})"
|
|
217
|
+
else:
|
|
218
|
+
s = f"{et.kind}({qvar})"
|
|
219
|
+
j += 1
|
|
220
|
+
|
|
221
|
+
elif et.isrotation:
|
|
222
|
+
if issymbol(et.param):
|
|
223
|
+
s = f"{et.kind}({et.param})"
|
|
224
|
+
else:
|
|
225
|
+
s = f"{et.kind}({et.param * 180 / np.pi:.4g}°)"
|
|
226
|
+
|
|
227
|
+
elif et.istranslation:
|
|
228
|
+
try:
|
|
229
|
+
s = f"{et.kind}({et.param:.4g})"
|
|
230
|
+
except TypeError: # pragma: nocover
|
|
231
|
+
s = f"{et.kind}({et.param})"
|
|
232
|
+
|
|
233
|
+
elif not et.iselementary:
|
|
234
|
+
s = str(et)
|
|
235
|
+
c += 1
|
|
236
|
+
|
|
237
|
+
es.append(s)
|
|
238
|
+
|
|
239
|
+
if unicode:
|
|
240
|
+
return " \u2295 ".join(es)
|
|
241
|
+
else: # pragma: nocover
|
|
242
|
+
return " * ".join(es)
|
|
243
|
+
|
|
244
|
+
def _repr_pretty_(self, p, cycle):
|
|
245
|
+
"""
|
|
246
|
+
Pretty string for IPython
|
|
247
|
+
|
|
248
|
+
Print stringified version when variable is displayed in IPython, ie. on
|
|
249
|
+
a line by itself.
|
|
250
|
+
|
|
251
|
+
:param p: pretty printer handle (ignored)
|
|
252
|
+
:param cycle: pretty printer flag (ignored)
|
|
253
|
+
|
|
254
|
+
Examples
|
|
255
|
+
--------
|
|
256
|
+
|
|
257
|
+
In [1]: e
|
|
258
|
+
Out [1]: R(q0) ⊕ tx(1) ⊕ R(q1) ⊕ tx(1)
|
|
259
|
+
|
|
260
|
+
"""
|
|
261
|
+
|
|
262
|
+
print(self.__str__()) # pragma: nocover
|
|
263
|
+
|
|
264
|
+
def joint_idx(self) -> list[int]:
|
|
265
|
+
"""
|
|
266
|
+
Get index of joint transforms
|
|
267
|
+
|
|
268
|
+
:returns: indices of transforms that are joints
|
|
269
|
+
:rtype: ndarray
|
|
270
|
+
|
|
271
|
+
Examples
|
|
272
|
+
--------
|
|
273
|
+
|
|
274
|
+
.. runblock:: pycon
|
|
275
|
+
|
|
276
|
+
>>> from roboticstoolbox import ET
|
|
277
|
+
>>> e = ET.Rz() * ET.tx(1) * ET.Rz() * ET.tx(1)
|
|
278
|
+
>>> e.joint_idx()
|
|
279
|
+
|
|
280
|
+
"""
|
|
281
|
+
|
|
282
|
+
return np.where([e.isjoint for e in self])[0] # type: ignore
|
|
283
|
+
|
|
284
|
+
def joints(self) -> list[BaseET]:
|
|
285
|
+
"""
|
|
286
|
+
Get a list of the variable ETs with this ETS
|
|
287
|
+
|
|
288
|
+
:returns: list of ETs that are joints
|
|
289
|
+
:rtype: list[BaseET]
|
|
290
|
+
|
|
291
|
+
Examples
|
|
292
|
+
--------
|
|
293
|
+
|
|
294
|
+
.. runblock:: pycon
|
|
295
|
+
|
|
296
|
+
>>> from roboticstoolbox import ET
|
|
297
|
+
>>> e = ET.Rz() * ET.tx(1) * ET.Rz() * ET.tx(1)
|
|
298
|
+
>>> e.joints()
|
|
299
|
+
|
|
300
|
+
"""
|
|
301
|
+
|
|
302
|
+
return [e for e in self if e.isjoint]
|
|
303
|
+
|
|
304
|
+
def split(self, method: str = "last") -> list["BaseETS"]:
|
|
305
|
+
"""
|
|
306
|
+
Split ETS into link segments
|
|
307
|
+
|
|
308
|
+
:param method: one of ``"first"`` or ``"last"`` (default).
|
|
309
|
+
:returns: ``[base, *segments, gripper]`` -- a list of length
|
|
310
|
+
``n_joints + 2``. ``base``/``gripper`` are empty ETS when the
|
|
311
|
+
method has no concept of one.
|
|
312
|
+
|
|
313
|
+
Split an ETS into segments representing links, plus a base and gripper segment.
|
|
314
|
+
Unpack with ``base, *segments, gripper = ets.split(method)``.
|
|
315
|
+
|
|
316
|
+
The behaviour depends on the ``method`` argument:
|
|
317
|
+
|
|
318
|
+
* ``"first"``: each link segment begins with a joint and continues upto, but not
|
|
319
|
+
including the next joint. Any constant ET before the first joint are part of
|
|
320
|
+
the base. There are no gripper ET, they are included in the last link segment.
|
|
321
|
+
* ``"last"``: each link segment ends with a joint and include all ET after the
|
|
322
|
+
previous joint. Any constant ET after the last joint are part of the gripper.
|
|
323
|
+
There are no base ET, they are included in the first link segment.
|
|
324
|
+
|
|
325
|
+
.. runblock:: pycon
|
|
326
|
+
>>> from roboticstoolbox.ets.ETS import *
|
|
327
|
+
>>> e = tz(1) * Rx("q1") * tx(2) * Ry("q2") * ty(3) * Rz("q3") * tz(4)
|
|
328
|
+
>>> base, *segments, gripper = e.split("first")
|
|
329
|
+
>>> print("|".join(str(_) for _ in segments), f"+ base={str(base)}, gripper={str(gripper)}")
|
|
330
|
+
>>> base, *segments, gripper = e.split("last")
|
|
331
|
+
>>> print("|".join(str(_) for _ in segments), f"+ base={str(base)}, gripper={str(gripper)}")
|
|
332
|
+
"""
|
|
333
|
+
|
|
334
|
+
segments = []
|
|
335
|
+
joint_idx = self.joint_idx()
|
|
336
|
+
head = self[0:0]
|
|
337
|
+
tail = self[0:0]
|
|
338
|
+
|
|
339
|
+
match method.lower():
|
|
340
|
+
|
|
341
|
+
case "first":
|
|
342
|
+
head = self[0:joint_idx[0]]
|
|
343
|
+
start = len(head)
|
|
344
|
+
for k in joint_idx[1:]:
|
|
345
|
+
ets_j = self[start: k]
|
|
346
|
+
start = k
|
|
347
|
+
segments.append(self.__class__(ets_j))
|
|
348
|
+
segments.append(self.__class__(self[joint_idx[-1]:]))
|
|
349
|
+
case "last":
|
|
350
|
+
start = 0
|
|
351
|
+
for k in joint_idx:
|
|
352
|
+
ets_j = self[start : k + 1]
|
|
353
|
+
start = k + 1
|
|
354
|
+
segments.append(self.__class__(ets_j))
|
|
355
|
+
tail = self[start:]
|
|
356
|
+
case _:
|
|
357
|
+
raise ValueError(f"unknown split method '{method}'")
|
|
358
|
+
|
|
359
|
+
return [head] + segments + [tail] # type: ignore
|
|
360
|
+
|
|
361
|
+
def jindex_set(self) -> set[int]: #
|
|
362
|
+
"""
|
|
363
|
+
Get set of joint indices
|
|
364
|
+
|
|
365
|
+
:returns: set of unique joint indices
|
|
366
|
+
:rtype: set[int]
|
|
367
|
+
|
|
368
|
+
Examples
|
|
369
|
+
--------
|
|
370
|
+
|
|
371
|
+
.. runblock:: pycon
|
|
372
|
+
|
|
373
|
+
>>> from roboticstoolbox import ET
|
|
374
|
+
>>> e = ET.Rz(jindex=1) * ET.tx(jindex=2) * ET.Rz(jindex=1) * ET.tx(1)
|
|
375
|
+
>>> e.jindex_set()
|
|
376
|
+
|
|
377
|
+
"""
|
|
378
|
+
|
|
379
|
+
return set([self[j].jindex for j in self.joint_idx()]) # type: ignore
|
|
380
|
+
|
|
381
|
+
@cached_property
|
|
382
|
+
def jindices(self) -> NDArray:
|
|
383
|
+
"""
|
|
384
|
+
Get an array of joint indices
|
|
385
|
+
|
|
386
|
+
:returns: array of unique joint indices
|
|
387
|
+
:rtype: ndarray
|
|
388
|
+
|
|
389
|
+
Examples
|
|
390
|
+
--------
|
|
391
|
+
|
|
392
|
+
.. runblock:: pycon
|
|
393
|
+
|
|
394
|
+
>>> from roboticstoolbox import ET
|
|
395
|
+
>>> e = ET.Rz(jindex=1) * ET.tx(jindex=2) * ET.Rz(jindex=1) * ET.tx(1)
|
|
396
|
+
>>> e.jindices
|
|
397
|
+
|
|
398
|
+
"""
|
|
399
|
+
|
|
400
|
+
return np.array([j.jindex for j in self.joints()]) # type: ignore
|
|
401
|
+
|
|
402
|
+
@property
|
|
403
|
+
def qlim(self):
|
|
404
|
+
r"""
|
|
405
|
+
Get/Set Joint limits
|
|
406
|
+
|
|
407
|
+
Limits are extracted from the link objects. If joints limits are
|
|
408
|
+
not set for:
|
|
409
|
+
|
|
410
|
+
- a revolute joint [-𝜋. 𝜋] is returned
|
|
411
|
+
- a prismatic joint an exception is raised
|
|
412
|
+
|
|
413
|
+
:param new_qlim: new joint limits to set
|
|
414
|
+
:type new_qlim: ndarray(2,n)
|
|
415
|
+
:returns: array of joint limit values
|
|
416
|
+
:rtype: ndarray(2,n)
|
|
417
|
+
:raises ValueError: unset limits for a prismatic joint
|
|
418
|
+
|
|
419
|
+
Examples
|
|
420
|
+
--------
|
|
421
|
+
|
|
422
|
+
.. runblock:: pycon
|
|
423
|
+
|
|
424
|
+
>>> import roboticstoolbox as rtb
|
|
425
|
+
>>> robot = rtb.models.DH.Puma560()
|
|
426
|
+
>>> robot.qlim
|
|
427
|
+
|
|
428
|
+
"""
|
|
429
|
+
|
|
430
|
+
limits = np.zeros((2, self.n))
|
|
431
|
+
|
|
432
|
+
for i, et in enumerate(self.joints()):
|
|
433
|
+
if et.isrotation:
|
|
434
|
+
if et.qlim is None:
|
|
435
|
+
v = [-np.pi, np.pi]
|
|
436
|
+
else:
|
|
437
|
+
v = et.qlim
|
|
438
|
+
elif et.istranslation:
|
|
439
|
+
if et.qlim is None:
|
|
440
|
+
raise ValueError("undefined prismatic joint limit")
|
|
441
|
+
else:
|
|
442
|
+
v = et.qlim
|
|
443
|
+
else:
|
|
444
|
+
raise ValueError("Undefined Joint Type") # pragma: nocover
|
|
445
|
+
limits[:, i] = v
|
|
446
|
+
|
|
447
|
+
return limits
|
|
448
|
+
|
|
449
|
+
@qlim.setter
|
|
450
|
+
def qlim(self, new_qlim: ArrayLike):
|
|
451
|
+
new_qlim = np.array(new_qlim)
|
|
452
|
+
|
|
453
|
+
if new_qlim.shape == (2,) and self.n == 1:
|
|
454
|
+
new_qlim = new_qlim.reshape(2, 1)
|
|
455
|
+
|
|
456
|
+
if new_qlim.shape != (2, self.n):
|
|
457
|
+
raise ValueError("new_qlim must be of shape (2, n)")
|
|
458
|
+
|
|
459
|
+
for j, i in enumerate(self.joint_idx()):
|
|
460
|
+
et = self[i]
|
|
461
|
+
et.qlim = new_qlim[:, j]
|
|
462
|
+
self[i] = et
|
|
463
|
+
|
|
464
|
+
@property
|
|
465
|
+
def structure(self) -> str:
|
|
466
|
+
"""
|
|
467
|
+
Joint structure string
|
|
468
|
+
|
|
469
|
+
A string comprising the characters 'R' or 'P' which indicate the types
|
|
470
|
+
of joints in order from left to right.
|
|
471
|
+
|
|
472
|
+
:returns: a string indicating the joint types
|
|
473
|
+
:rtype: str
|
|
474
|
+
|
|
475
|
+
Examples
|
|
476
|
+
--------
|
|
477
|
+
|
|
478
|
+
.. runblock:: pycon
|
|
479
|
+
|
|
480
|
+
>>> from roboticstoolbox import ET
|
|
481
|
+
>>> e = ET.tz() * ET.tx(1) * ET.Rz() * ET.tx(1)
|
|
482
|
+
>>> e.structure
|
|
483
|
+
|
|
484
|
+
"""
|
|
485
|
+
|
|
486
|
+
return "".join(
|
|
487
|
+
["R" if self._data[i].isrotation else "P" for i in self.joint_idx()]
|
|
488
|
+
)
|
|
489
|
+
|
|
490
|
+
@property
|
|
491
|
+
def n(self) -> int:
|
|
492
|
+
"""
|
|
493
|
+
Number of joints
|
|
494
|
+
|
|
495
|
+
:returns: the number of joints in the ETS
|
|
496
|
+
:rtype: int
|
|
497
|
+
|
|
498
|
+
Counts the number of joints in the ETS.
|
|
499
|
+
|
|
500
|
+
Examples
|
|
501
|
+
--------
|
|
502
|
+
|
|
503
|
+
.. runblock:: pycon
|
|
504
|
+
|
|
505
|
+
>>> from roboticstoolbox import ET
|
|
506
|
+
>>> e = ET.Rx() * ET.tx(1) * ET.tz()
|
|
507
|
+
>>> e.n
|
|
508
|
+
|
|
509
|
+
See Also
|
|
510
|
+
--------
|
|
511
|
+
:func:`joints`
|
|
512
|
+
|
|
513
|
+
"""
|
|
514
|
+
|
|
515
|
+
return sum(1 for et in self._data if et.isjoint)
|
|
516
|
+
|
|
517
|
+
@property
|
|
518
|
+
def m(self) -> int:
|
|
519
|
+
"""
|
|
520
|
+
Number of transforms
|
|
521
|
+
|
|
522
|
+
:returns: the number of transforms in the ETS
|
|
523
|
+
:rtype: int
|
|
524
|
+
|
|
525
|
+
Counts the number of transforms in the ETS.
|
|
526
|
+
|
|
527
|
+
Examples
|
|
528
|
+
--------
|
|
529
|
+
|
|
530
|
+
.. runblock:: pycon
|
|
531
|
+
|
|
532
|
+
>>> from roboticstoolbox import ET
|
|
533
|
+
>>> e = ET.Rx() * ET.tx(1) * ET.tz()
|
|
534
|
+
>>> e.m
|
|
535
|
+
|
|
536
|
+
"""
|
|
537
|
+
|
|
538
|
+
return len(self._data)
|
|
539
|
+
|
|
540
|
+
@overload
|
|
541
|
+
def data(self: "ETS") -> list[ET]: ... # pragma: nocover
|
|
542
|
+
|
|
543
|
+
@overload
|
|
544
|
+
def data(self: "ETS2") -> list[ET2]: ... # pragma: nocover
|
|
545
|
+
|
|
546
|
+
@property
|
|
547
|
+
def data(self):
|
|
548
|
+
return self._data
|
|
549
|
+
|
|
550
|
+
@data.setter
|
|
551
|
+
@overload
|
|
552
|
+
def data(self: "ETS", new_data: list[ET]): ... # pragma: nocover
|
|
553
|
+
|
|
554
|
+
@data.setter
|
|
555
|
+
@overload
|
|
556
|
+
def data(self: "ETS", new_data: list[ET2]): ... # pragma: nocover
|
|
557
|
+
|
|
558
|
+
@data.setter
|
|
559
|
+
def data(self, new_data):
|
|
560
|
+
self._data = new_data
|
|
561
|
+
self._fknm_stale = True
|
|
562
|
+
|
|
563
|
+
def inv(self: T) -> T:
|
|
564
|
+
r"""
|
|
565
|
+
Inverse of ETS
|
|
566
|
+
|
|
567
|
+
The inverse of a given ETS. It is computed as the inverse of the
|
|
568
|
+
individual ETs in the reverse order.
|
|
569
|
+
|
|
570
|
+
.. math::
|
|
571
|
+
|
|
572
|
+
(\mathbf{E}_0, \mathbf{E}_1 \cdots \mathbf{E}_{n-1} )^{-1} = (\mathbf{E}_{n-1}^{-1}, \mathbf{E}_{n-2}^{-1} \cdots \mathbf{E}_0^{-1}{n-1} )
|
|
573
|
+
|
|
574
|
+
:returns: Inverse of the ETS
|
|
575
|
+
|
|
576
|
+
Examples
|
|
577
|
+
--------
|
|
578
|
+
|
|
579
|
+
.. runblock:: pycon
|
|
580
|
+
|
|
581
|
+
>>> from roboticstoolbox import ET
|
|
582
|
+
>>> e = ET.Rz(jindex=2) * ET.tx(1) * ET.Rx(jindex=3,flip=True) * ET.tx(1)
|
|
583
|
+
>>> print(e)
|
|
584
|
+
>>> print(e.inv())
|
|
585
|
+
|
|
586
|
+
.. rubric:: Notes
|
|
587
|
+
|
|
588
|
+
- It is essential to use explicit joint indices to account for
|
|
589
|
+
the reversed order of the transforms.
|
|
590
|
+
|
|
591
|
+
"""
|
|
592
|
+
|
|
593
|
+
return self.__class__([et.inv() for et in reversed(self._data)]) # type: ignore[call-arg]
|
|
594
|
+
|
|
595
|
+
@overload
|
|
596
|
+
def __getitem__(self: "BaseETS", i: int) -> BaseET: ...
|
|
597
|
+
|
|
598
|
+
@overload
|
|
599
|
+
def __getitem__(self: "ETS", i: int) -> ET: ...
|
|
600
|
+
|
|
601
|
+
@overload
|
|
602
|
+
def __getitem__(self: "ETS", i: slice) -> "ETS": ...
|
|
603
|
+
|
|
604
|
+
@overload
|
|
605
|
+
def __getitem__(self: "ETS2", i: int) -> ET2: ...
|
|
606
|
+
|
|
607
|
+
@overload
|
|
608
|
+
def __getitem__(self: "ETS2", i: slice) -> "ETS2": ...
|
|
609
|
+
|
|
610
|
+
def __getitem__(self, i):
|
|
611
|
+
"""
|
|
612
|
+
Index or slice an ETS
|
|
613
|
+
|
|
614
|
+
:param i: the index or slice
|
|
615
|
+
:returns: elementary transform if ``i`` is an int, otherwise an ETS
|
|
616
|
+
of the same concrete type as ``self`` (a slice of an ETS is
|
|
617
|
+
still an ETS)
|
|
618
|
+
|
|
619
|
+
Examples
|
|
620
|
+
--------
|
|
621
|
+
|
|
622
|
+
.. runblock:: pycon
|
|
623
|
+
|
|
624
|
+
>>> from roboticstoolbox import ET
|
|
625
|
+
>>> e = ET.Rz() * ET.tx(1) * ET.Rz() * ET.tx(1)
|
|
626
|
+
>>> e[0]
|
|
627
|
+
>>> e[1]
|
|
628
|
+
>>> e[1:3]
|
|
629
|
+
|
|
630
|
+
"""
|
|
631
|
+
if isinstance(i, slice):
|
|
632
|
+
return self.__class__(self._data[i])
|
|
633
|
+
return self._data[i]
|
|
634
|
+
|
|
635
|
+
def __deepcopy__(self, memo):
|
|
636
|
+
new_data = []
|
|
637
|
+
|
|
638
|
+
for data in self:
|
|
639
|
+
new_data.append(deepcopy(data))
|
|
640
|
+
|
|
641
|
+
cls = self.__class__
|
|
642
|
+
result = cls(new_data)
|
|
643
|
+
memo[id(self)] = result
|
|
644
|
+
return result
|
|
645
|
+
|
|
646
|
+
def plot(self, *args, **kwargs):
|
|
647
|
+
from roboticstoolbox.robot.Robot import Robot, Robot2
|
|
648
|
+
# Deferred (like Robot/Robot2 above): BaseETS can't import the
|
|
649
|
+
# concrete ETS without a cycle (ETS.py imports BaseETS from here).
|
|
650
|
+
from roboticstoolbox.ets.ETS import ETS
|
|
651
|
+
|
|
652
|
+
if isinstance(self, ETS):
|
|
653
|
+
robot = Robot(self)
|
|
654
|
+
else:
|
|
655
|
+
robot = Robot2(self)
|
|
656
|
+
|
|
657
|
+
robot.plot(*args, **kwargs)
|
|
658
|
+
|
|
659
|
+
def teach(self, *args, **kwargs):
|
|
660
|
+
from roboticstoolbox.robot.Robot import Robot, Robot2
|
|
661
|
+
from roboticstoolbox.ets.ETS import ETS
|
|
662
|
+
|
|
663
|
+
if isinstance(self, ETS):
|
|
664
|
+
robot = Robot(self)
|
|
665
|
+
else:
|
|
666
|
+
robot = Robot2(self)
|
|
667
|
+
|
|
668
|
+
robot.teach(*args, **kwargs)
|
|
669
|
+
|
|
670
|
+
def random_q(self, i: int = 1) -> NDArray:
|
|
671
|
+
"""
|
|
672
|
+
Generate a random valid joint configuration
|
|
673
|
+
|
|
674
|
+
:param i: number of configurations to generate
|
|
675
|
+
:returns: random joint configuration
|
|
676
|
+
:rtype: ndarray(n,) or ndarray(i,n)
|
|
677
|
+
|
|
678
|
+
Generates a random q vector within the joint limits defined by
|
|
679
|
+
``self.qlim``.
|
|
680
|
+
|
|
681
|
+
Examples
|
|
682
|
+
--------
|
|
683
|
+
|
|
684
|
+
.. runblock:: pycon
|
|
685
|
+
|
|
686
|
+
>>> import roboticstoolbox as rtb
|
|
687
|
+
>>> robot = rtb.models.Panda()
|
|
688
|
+
>>> ets = robot.ets()
|
|
689
|
+
>>> q = ets.random_q()
|
|
690
|
+
>>> q
|
|
691
|
+
|
|
692
|
+
"""
|
|
693
|
+
|
|
694
|
+
if i == 1:
|
|
695
|
+
q = np.zeros(self.n)
|
|
696
|
+
|
|
697
|
+
for i in range(self.n):
|
|
698
|
+
q[i] = uniform(self.qlim[0, i], self.qlim[1, i])
|
|
699
|
+
|
|
700
|
+
else:
|
|
701
|
+
q = np.zeros((i, self.n))
|
|
702
|
+
|
|
703
|
+
for j in range(i):
|
|
704
|
+
for i in range(self.n):
|
|
705
|
+
q[j, i] = uniform(self.qlim[0, i], self.qlim[1, i])
|
|
706
|
+
|
|
707
|
+
return q
|
|
708
|
+
|
|
709
|
+
def swap(self, i: int) -> None:
|
|
710
|
+
"""
|
|
711
|
+
Swap two transforms in the ETS
|
|
712
|
+
|
|
713
|
+
:param i: index of first transform
|
|
714
|
+
|
|
715
|
+
Swaps the two transforms at indices ``i`` and ``i+1``. This is useful for
|
|
716
|
+
changing the order of commutative transforms in an ETS.
|
|
717
|
+
|
|
718
|
+
Examples
|
|
719
|
+
--------
|
|
720
|
+
|
|
721
|
+
.. runblock:: pycon
|
|
722
|
+
|
|
723
|
+
>>> from roboticstoolbox import ET
|
|
724
|
+
>>> e = ET.Rz() * ET.tx(1) * ET.Rx() * ET.Rz(1)
|
|
725
|
+
>>> print(e)
|
|
726
|
+
>>> e.swap(1)
|
|
727
|
+
>>> print(e)
|
|
728
|
+
|
|
729
|
+
"""
|
|
730
|
+
if i < 0 or i >= len(self._data) - 1:
|
|
731
|
+
raise IndexError("Index out of range") # pragma: nocover
|
|
732
|
+
|
|
733
|
+
e1 = self._data[i]
|
|
734
|
+
e2 = self._data[i + 1]
|
|
735
|
+
if e1.kind == e2.kind:
|
|
736
|
+
self._data[i], self._data[i + 1] = self._data[i + 1], self._data[i]
|
|
737
|
+
self._fknm_stale = True
|
|
738
|
+
else:
|
|
739
|
+
raise ValueError("Transforms are not commutative") # pragma: nocover
|
|
740
|
+
|
|
741
|
+
def merge(self, i: int) -> None:
|
|
742
|
+
"""
|
|
743
|
+
Merge two transforms in the ETS
|
|
744
|
+
|
|
745
|
+
:param i: index of first transform
|
|
746
|
+
|
|
747
|
+
Merges the two transforms at indices ``i`` and ``i+1``. This is useful for
|
|
748
|
+
reducing the number of transforms in an ETS.
|
|
749
|
+
|
|
750
|
+
Examples
|
|
751
|
+
--------
|
|
752
|
+
|
|
753
|
+
.. runblock:: pycon
|
|
754
|
+
|
|
755
|
+
>>> from roboticstoolbox import ET
|
|
756
|
+
>>> from math import pi
|
|
757
|
+
>>> e = ET.Rz() * ET.tx(1) * ET.tx(2) * ET.Rz(1)
|
|
758
|
+
>>> print(e)
|
|
759
|
+
>>> e.merge(1)
|
|
760
|
+
>>> print(e)
|
|
761
|
+
>>> e = ET.tx(1) * ET.Rx() * ET.Rx(pi/2) * ET.tx(2)
|
|
762
|
+
>>> print(e)
|
|
763
|
+
>>> e.merge(1)
|
|
764
|
+
>>> print(e)
|
|
765
|
+
|
|
766
|
+
"""
|
|
767
|
+
if i < 0 or i >= len(self._data) - 1:
|
|
768
|
+
raise IndexError("Index out of range") # pragma: nocover
|
|
769
|
+
e1 = self._data[i]
|
|
770
|
+
e2 = self._data[i + 1]
|
|
771
|
+
if e1.kind != e2.kind:
|
|
772
|
+
raise ValueError("Transforms are not the same type") # pragma: nocover
|
|
773
|
+
|
|
774
|
+
elif (e1.isjoint + e2.isjoint) == 2:
|
|
775
|
+
raise ValueError("Transforms are both joints") # pragma: nocover
|
|
776
|
+
|
|
777
|
+
else:
|
|
778
|
+
self._data[i].param = e1.param + e2.param
|
|
779
|
+
del self._data[i + 1]
|
|
780
|
+
self._fknm_stale = True
|
|
781
|
+
|