roboticstoolbox-python 1.3.0__cp312-cp312-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.cp312-win_amd64.pyd +0 -0
- roboticstoolbox/frne.cp312-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,1097 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
@author: Jesse Haviland
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numpy import array, ndarray, deg2rad, eye, pi
|
|
8
|
+
from numpy.linalg import inv as npinv
|
|
9
|
+
import roboticstoolbox as rtb
|
|
10
|
+
from spatialmath.base import (
|
|
11
|
+
trotx,
|
|
12
|
+
troty,
|
|
13
|
+
trotz,
|
|
14
|
+
issymbol,
|
|
15
|
+
tr2rpy,
|
|
16
|
+
trot2,
|
|
17
|
+
transl2,
|
|
18
|
+
tr2xyt,
|
|
19
|
+
)
|
|
20
|
+
from copy import deepcopy
|
|
21
|
+
from roboticstoolbox.fknm import ET_T, ET_init, ET_update
|
|
22
|
+
from spatialmath.base import getvector
|
|
23
|
+
from spatialmath import SE3, SE2
|
|
24
|
+
from typing import Optional, Callable, Union, TYPE_CHECKING
|
|
25
|
+
|
|
26
|
+
# from spatialmath.base.types import ArrayLike
|
|
27
|
+
from roboticstoolbox.tools.types import ArrayLike, NDArray
|
|
28
|
+
|
|
29
|
+
if TYPE_CHECKING: # pragma: nocover
|
|
30
|
+
import sympy
|
|
31
|
+
|
|
32
|
+
Sym = sympy.core.symbol.Symbol # type: ignore
|
|
33
|
+
else: # pragma: nocover
|
|
34
|
+
Sym = None
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class BaseET:
|
|
38
|
+
def __init__(
|
|
39
|
+
self,
|
|
40
|
+
axis: str,
|
|
41
|
+
eta: Union[float, Sym, None] = None,
|
|
42
|
+
axis_func: Optional[Callable[[Union[float, Sym]], ndarray]] = None,
|
|
43
|
+
T: Optional[ndarray] = None,
|
|
44
|
+
jindex: Optional[int] = None,
|
|
45
|
+
unit: str = "rad",
|
|
46
|
+
flip: bool = False,
|
|
47
|
+
qlim: Optional[ArrayLike] = None,
|
|
48
|
+
):
|
|
49
|
+
self._axis = axis
|
|
50
|
+
|
|
51
|
+
# A flag to check if the ET is a static joint with a symbolic value
|
|
52
|
+
# Defaults to False as is set to True if eta is a symbol below
|
|
53
|
+
self._isstaticsym = False
|
|
54
|
+
|
|
55
|
+
if eta is None:
|
|
56
|
+
self._eta = None
|
|
57
|
+
else:
|
|
58
|
+
if axis[0] == "R" and unit.lower().startswith("deg"):
|
|
59
|
+
if not issymbol(eta):
|
|
60
|
+
self.eta = deg2rad(float(eta))
|
|
61
|
+
else:
|
|
62
|
+
self.eta = eta
|
|
63
|
+
|
|
64
|
+
self._axis_func = axis_func
|
|
65
|
+
self._flip = flip
|
|
66
|
+
self._jindex = jindex
|
|
67
|
+
|
|
68
|
+
if qlim is not None:
|
|
69
|
+
self._qlim: Union[NDArray, None] = getvector(qlim, 2, out="array")
|
|
70
|
+
else:
|
|
71
|
+
self._qlim: Union[NDArray, None] = None
|
|
72
|
+
|
|
73
|
+
if self.eta is None:
|
|
74
|
+
if T is None:
|
|
75
|
+
self._joint = True
|
|
76
|
+
self._T = eye(4).copy(order="F")
|
|
77
|
+
if axis_func is None:
|
|
78
|
+
raise TypeError("For a variable joint, axis_func must be specified")
|
|
79
|
+
else:
|
|
80
|
+
self._joint = False
|
|
81
|
+
self._T = T.copy(order="F")
|
|
82
|
+
else:
|
|
83
|
+
# This is a static joint
|
|
84
|
+
if issymbol(eta):
|
|
85
|
+
self._isstaticsym = True
|
|
86
|
+
|
|
87
|
+
self._joint = False
|
|
88
|
+
if axis_func is not None:
|
|
89
|
+
self._T = axis_func(self.eta).copy(order="F")
|
|
90
|
+
else:
|
|
91
|
+
raise TypeError(
|
|
92
|
+
"For a static joint either both `eta` and `axis_func` "
|
|
93
|
+
"must be specified otherwise `T` must be supplied"
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
# Initialise the C object which holds ET data
|
|
97
|
+
# This returns a reference to said C data
|
|
98
|
+
self.__fknm = self.__init_c()
|
|
99
|
+
|
|
100
|
+
def __init_c(self):
|
|
101
|
+
"""
|
|
102
|
+
Super Private method which initialises a C object to hold ET Data
|
|
103
|
+
"""
|
|
104
|
+
if self.jindex is None:
|
|
105
|
+
jindex = 0
|
|
106
|
+
else:
|
|
107
|
+
jindex = self.jindex
|
|
108
|
+
|
|
109
|
+
if self.qlim is None:
|
|
110
|
+
if self.axis[0] == "R":
|
|
111
|
+
qlim = array([-pi, pi])
|
|
112
|
+
else:
|
|
113
|
+
qlim = array([0, 1])
|
|
114
|
+
else:
|
|
115
|
+
qlim = self.qlim
|
|
116
|
+
|
|
117
|
+
return ET_init(
|
|
118
|
+
self._isstaticsym,
|
|
119
|
+
self.isjoint,
|
|
120
|
+
self.isflip,
|
|
121
|
+
jindex,
|
|
122
|
+
self.__axis_to_number(self.axis),
|
|
123
|
+
self._T,
|
|
124
|
+
qlim,
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
def __update_c(self):
|
|
128
|
+
"""
|
|
129
|
+
Super Private method which updates the C object which holds ET Data
|
|
130
|
+
"""
|
|
131
|
+
if self.jindex is None:
|
|
132
|
+
jindex = 0
|
|
133
|
+
else:
|
|
134
|
+
jindex = self.jindex
|
|
135
|
+
|
|
136
|
+
if self.qlim is None:
|
|
137
|
+
if self.axis[0] == "R":
|
|
138
|
+
qlim = array([-pi, pi])
|
|
139
|
+
else:
|
|
140
|
+
qlim = array([0, 1])
|
|
141
|
+
else:
|
|
142
|
+
qlim = self.qlim
|
|
143
|
+
|
|
144
|
+
ET_update(
|
|
145
|
+
self.fknm,
|
|
146
|
+
self._isstaticsym,
|
|
147
|
+
self.isjoint,
|
|
148
|
+
self.isflip,
|
|
149
|
+
jindex,
|
|
150
|
+
self.__axis_to_number(self.axis),
|
|
151
|
+
self._T,
|
|
152
|
+
qlim,
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
def __str__(self):
|
|
156
|
+
eta_str = ""
|
|
157
|
+
|
|
158
|
+
if self.isjoint:
|
|
159
|
+
if self.jindex is None:
|
|
160
|
+
eta_str = "q"
|
|
161
|
+
else:
|
|
162
|
+
eta_str = f"q{self.jindex}"
|
|
163
|
+
elif issymbol(self.eta):
|
|
164
|
+
# Check if symbolic
|
|
165
|
+
eta_str = f"{self.eta}"
|
|
166
|
+
elif self.isrotation and self.eta is not None:
|
|
167
|
+
eta_str = f"{self.eta * (180.0 / pi):.4g}°"
|
|
168
|
+
elif not self.iselementary:
|
|
169
|
+
if isinstance(self, ET):
|
|
170
|
+
T = self.A()
|
|
171
|
+
rpy = tr2rpy(T) * 180.0 / pi
|
|
172
|
+
if T[:3, -1].any() and rpy.any():
|
|
173
|
+
eta_str = (
|
|
174
|
+
f"{T[0, -1]:.4g}, {T[1, -1]:.4g}, {T[2, -1]:.4g};"
|
|
175
|
+
f" {rpy[0]:.4g}°, {rpy[1]:.4g}°, {rpy[2]:.4g}°"
|
|
176
|
+
)
|
|
177
|
+
elif T[:3, -1].any():
|
|
178
|
+
eta_str = f"{T[0, -1]:.4g}, {T[1, -1]:.4g}, {T[2, -1]:.4g}"
|
|
179
|
+
elif rpy.any():
|
|
180
|
+
eta_str = f"{rpy[0]:.4g}°, {rpy[1]:.4g}°, {rpy[2]:.4g}°"
|
|
181
|
+
else:
|
|
182
|
+
eta_str = "" # pragma: nocover
|
|
183
|
+
elif isinstance(self, ET2):
|
|
184
|
+
T = self.A()
|
|
185
|
+
xyt = tr2xyt(T)
|
|
186
|
+
xyt[2] *= 180 / pi
|
|
187
|
+
eta_str = f"{xyt[0]:.4g}, {xyt[1]:.4g}; {xyt[2]:.4g}°"
|
|
188
|
+
|
|
189
|
+
else:
|
|
190
|
+
eta_str = f"{self.eta:.4g}"
|
|
191
|
+
|
|
192
|
+
return f"{self.axis}({eta_str})"
|
|
193
|
+
|
|
194
|
+
def __repr__(self):
|
|
195
|
+
s_eta = "" if self.eta is None else f"eta={self.eta}"
|
|
196
|
+
s_T = (
|
|
197
|
+
f"T={repr(self._T)}"
|
|
198
|
+
if (self.eta is None and self.axis_func is None)
|
|
199
|
+
else ""
|
|
200
|
+
)
|
|
201
|
+
s_flip = "" if not self.isflip else f"flip={self.isflip}"
|
|
202
|
+
s_qlim = "" if self.qlim is None else f"qlim={repr(self.qlim)}"
|
|
203
|
+
s_jindex = "" if self.jindex is None else f"jindex={self.jindex}"
|
|
204
|
+
|
|
205
|
+
kwargs = [s_eta, s_T, s_jindex, s_flip, s_qlim]
|
|
206
|
+
s_kwargs = ", ".join(filter(None, kwargs))
|
|
207
|
+
|
|
208
|
+
start = "ET" if isinstance(self, ET) else "ET2"
|
|
209
|
+
|
|
210
|
+
return f"{start}.{self.axis}({s_kwargs})"
|
|
211
|
+
|
|
212
|
+
def _repr_pretty_(self, p, cycle):
|
|
213
|
+
"""
|
|
214
|
+
Pretty string for IPython
|
|
215
|
+
|
|
216
|
+
:param p: pretty printer handle (ignored)
|
|
217
|
+
:param cycle: pretty printer flag (ignored)
|
|
218
|
+
|
|
219
|
+
Print stringified version when variable is displayed in IPython, ie. on
|
|
220
|
+
a line by itself.
|
|
221
|
+
|
|
222
|
+
Example::
|
|
223
|
+
|
|
224
|
+
[In [1]: e
|
|
225
|
+
Out [1]: tx(1)
|
|
226
|
+
"""
|
|
227
|
+
p.text(str(self)) # pragma: nocover
|
|
228
|
+
|
|
229
|
+
def __deepcopy__(self, memo):
|
|
230
|
+
cls = self.__class__
|
|
231
|
+
result = cls.__new__(cls)
|
|
232
|
+
memo[id(self)] = result
|
|
233
|
+
|
|
234
|
+
for k, v in self.__dict__.items():
|
|
235
|
+
if k != "_BaseET__fknm":
|
|
236
|
+
setattr(result, k, deepcopy(v, memo))
|
|
237
|
+
|
|
238
|
+
result.__fknm = result.__init_c()
|
|
239
|
+
return result
|
|
240
|
+
|
|
241
|
+
def __eq__(self, other):
|
|
242
|
+
return repr(self) == repr(other)
|
|
243
|
+
|
|
244
|
+
def __axis_to_number(self, axis: str) -> int:
|
|
245
|
+
"""
|
|
246
|
+
Private convenience function which converts the axis string to an
|
|
247
|
+
integer for faster processing in the C extensions
|
|
248
|
+
"""
|
|
249
|
+
if isinstance(self, ET2):
|
|
250
|
+
return 0
|
|
251
|
+
|
|
252
|
+
if axis[0] == "R":
|
|
253
|
+
if axis[1] == "x":
|
|
254
|
+
return 0
|
|
255
|
+
elif axis[1] == "y":
|
|
256
|
+
return 1
|
|
257
|
+
elif axis[1] == "z":
|
|
258
|
+
return 2
|
|
259
|
+
elif axis[0] == "t":
|
|
260
|
+
if axis[1] == "x":
|
|
261
|
+
return 3
|
|
262
|
+
elif axis[1] == "y":
|
|
263
|
+
return 4
|
|
264
|
+
elif axis[1] == "z":
|
|
265
|
+
return 5
|
|
266
|
+
return 0
|
|
267
|
+
|
|
268
|
+
@property
|
|
269
|
+
def fknm(self):
|
|
270
|
+
return self.__fknm
|
|
271
|
+
|
|
272
|
+
@property
|
|
273
|
+
def eta(self) -> Union[float, Sym, None]:
|
|
274
|
+
"""
|
|
275
|
+
Get the transform constant
|
|
276
|
+
|
|
277
|
+
Returns
|
|
278
|
+
-------
|
|
279
|
+
ets
|
|
280
|
+
The constant η if set
|
|
281
|
+
|
|
282
|
+
Examples
|
|
283
|
+
--------
|
|
284
|
+
.. runblock:: pycon
|
|
285
|
+
>>> from roboticstoolbox import ET
|
|
286
|
+
>>> e = ET.tx(1)
|
|
287
|
+
>>> e.eta
|
|
288
|
+
>>> e = ET.Rx(90, 'deg')
|
|
289
|
+
>>> e.eta
|
|
290
|
+
>>> e = ET.ty()
|
|
291
|
+
>>> e.eta
|
|
292
|
+
|
|
293
|
+
Notes
|
|
294
|
+
-----
|
|
295
|
+
- If the value was given in degrees it will be converted and
|
|
296
|
+
stored internally in radians
|
|
297
|
+
"""
|
|
298
|
+
return self._eta
|
|
299
|
+
|
|
300
|
+
@eta.setter
|
|
301
|
+
def eta(self, value: Union[float, Sym]) -> None:
|
|
302
|
+
"""
|
|
303
|
+
Set the transform constant
|
|
304
|
+
|
|
305
|
+
Parameters
|
|
306
|
+
----------
|
|
307
|
+
value
|
|
308
|
+
The transform constant η
|
|
309
|
+
|
|
310
|
+
Notes
|
|
311
|
+
-----
|
|
312
|
+
- No unit conversions are applied, it is assumed to be in
|
|
313
|
+
radians.
|
|
314
|
+
"""
|
|
315
|
+
self._eta = value if issymbol(value) else float(value)
|
|
316
|
+
|
|
317
|
+
@property
|
|
318
|
+
def axis_func(
|
|
319
|
+
self,
|
|
320
|
+
) -> Union[Callable[[Union[float, Sym]], ndarray], None]:
|
|
321
|
+
return self._axis_func
|
|
322
|
+
|
|
323
|
+
@property
|
|
324
|
+
def axis(self) -> str:
|
|
325
|
+
"""
|
|
326
|
+
The transform type and axis
|
|
327
|
+
|
|
328
|
+
Returns
|
|
329
|
+
-------
|
|
330
|
+
axis
|
|
331
|
+
The transform type and axis
|
|
332
|
+
|
|
333
|
+
Examples
|
|
334
|
+
--------
|
|
335
|
+
.. runblock:: pycon
|
|
336
|
+
>>> from roboticstoolbox import ET
|
|
337
|
+
>>> e = ET.tx(1)
|
|
338
|
+
>>> e.axis
|
|
339
|
+
>>> e = ET.Rx(90, 'deg')
|
|
340
|
+
>>> e.axis
|
|
341
|
+
|
|
342
|
+
"""
|
|
343
|
+
return self._axis
|
|
344
|
+
|
|
345
|
+
@property
|
|
346
|
+
def isjoint(self) -> bool:
|
|
347
|
+
"""
|
|
348
|
+
Test if ET is a joint
|
|
349
|
+
|
|
350
|
+
Returns
|
|
351
|
+
-------
|
|
352
|
+
isjoint
|
|
353
|
+
True if a joint
|
|
354
|
+
|
|
355
|
+
Examples
|
|
356
|
+
--------
|
|
357
|
+
.. runblock:: pycon
|
|
358
|
+
>>> from roboticstoolbox import ET
|
|
359
|
+
>>> e = ET.tx(1)
|
|
360
|
+
>>> e.isjoint
|
|
361
|
+
>>> e = ET.tx()
|
|
362
|
+
>>> e.isjoint
|
|
363
|
+
|
|
364
|
+
"""
|
|
365
|
+
return self._joint
|
|
366
|
+
|
|
367
|
+
@property
|
|
368
|
+
def isflip(self) -> bool:
|
|
369
|
+
"""
|
|
370
|
+
Test if ET joint is flipped
|
|
371
|
+
|
|
372
|
+
A flipped joint uses the negative of the joint variable, ie. it rotates
|
|
373
|
+
or moves in the opposite direction.
|
|
374
|
+
|
|
375
|
+
Returns
|
|
376
|
+
-------
|
|
377
|
+
isflip
|
|
378
|
+
True if joint is flipped
|
|
379
|
+
|
|
380
|
+
Examples
|
|
381
|
+
--------
|
|
382
|
+
.. runblock:: pycon
|
|
383
|
+
>>> from roboticstoolbox import ET
|
|
384
|
+
>>> e = ET.tx()
|
|
385
|
+
>>> e.T(1)
|
|
386
|
+
>>> eflip = ET.tx(flip=True)
|
|
387
|
+
>>> eflip.T(1)
|
|
388
|
+
|
|
389
|
+
"""
|
|
390
|
+
|
|
391
|
+
return self._flip
|
|
392
|
+
|
|
393
|
+
@property
|
|
394
|
+
def isrotation(self) -> bool:
|
|
395
|
+
"""
|
|
396
|
+
Test if ET is a rotation
|
|
397
|
+
|
|
398
|
+
Returns
|
|
399
|
+
-------
|
|
400
|
+
isrotation
|
|
401
|
+
True if a rotation
|
|
402
|
+
|
|
403
|
+
Examples
|
|
404
|
+
--------
|
|
405
|
+
.. runblock:: pycon
|
|
406
|
+
>>> from roboticstoolbox import ET
|
|
407
|
+
>>> e = ET.tx(1)
|
|
408
|
+
>>> e.isrotation
|
|
409
|
+
>>> e = ET.rx()
|
|
410
|
+
>>> e.isrotation
|
|
411
|
+
|
|
412
|
+
"""
|
|
413
|
+
|
|
414
|
+
return self.axis[0] == "R"
|
|
415
|
+
|
|
416
|
+
@property
|
|
417
|
+
def istranslation(self) -> bool:
|
|
418
|
+
"""
|
|
419
|
+
Test if ET is a translation
|
|
420
|
+
|
|
421
|
+
Returns
|
|
422
|
+
-------
|
|
423
|
+
istranslation
|
|
424
|
+
True if a translation
|
|
425
|
+
|
|
426
|
+
Examples
|
|
427
|
+
--------
|
|
428
|
+
.. runblock:: pycon
|
|
429
|
+
>>> from roboticstoolbox import ET
|
|
430
|
+
>>> e = ET.tx(1)
|
|
431
|
+
>>> e.istranslation
|
|
432
|
+
>>> e = ET.rx()
|
|
433
|
+
>>> e.istranslation
|
|
434
|
+
|
|
435
|
+
"""
|
|
436
|
+
|
|
437
|
+
return self.axis[0] == "t"
|
|
438
|
+
|
|
439
|
+
@property
|
|
440
|
+
def qlim(self) -> Union[ndarray, None]:
|
|
441
|
+
return self._qlim
|
|
442
|
+
|
|
443
|
+
@qlim.setter
|
|
444
|
+
def qlim(self, qlim_new: Union[ArrayLike, None]) -> None:
|
|
445
|
+
if qlim_new is not None:
|
|
446
|
+
qlim_new = getvector(qlim_new, 2, out="array")
|
|
447
|
+
self._qlim = qlim_new
|
|
448
|
+
self.__update_c()
|
|
449
|
+
|
|
450
|
+
@property
|
|
451
|
+
def jindex(self) -> Union[int, None]:
|
|
452
|
+
"""
|
|
453
|
+
Get ET joint index
|
|
454
|
+
|
|
455
|
+
Returns
|
|
456
|
+
-------
|
|
457
|
+
jindex
|
|
458
|
+
The assigmed joint index
|
|
459
|
+
|
|
460
|
+
Allows an ET to be associated with a numbered joint in a robot.
|
|
461
|
+
|
|
462
|
+
Examples
|
|
463
|
+
--------
|
|
464
|
+
.. runblock:: pycon
|
|
465
|
+
>>> from roboticstoolbox import ET
|
|
466
|
+
>>> e = ET.tx()
|
|
467
|
+
>>> print(e)
|
|
468
|
+
>>> e = ET.tx(j=3)
|
|
469
|
+
>>> print(e)
|
|
470
|
+
>>> print(e.jindex)
|
|
471
|
+
|
|
472
|
+
"""
|
|
473
|
+
|
|
474
|
+
return self._jindex
|
|
475
|
+
|
|
476
|
+
@jindex.setter
|
|
477
|
+
def jindex(self, j):
|
|
478
|
+
if not isinstance(j, int) or j < 0:
|
|
479
|
+
raise ValueError(f"jindex is {j}, must be an int >= 0")
|
|
480
|
+
self._jindex = j
|
|
481
|
+
self.__update_c()
|
|
482
|
+
|
|
483
|
+
@property
|
|
484
|
+
def iselementary(self) -> bool:
|
|
485
|
+
"""
|
|
486
|
+
Test if ET is an elementary transform
|
|
487
|
+
|
|
488
|
+
Returns
|
|
489
|
+
-------
|
|
490
|
+
iselementary
|
|
491
|
+
True if an elementary transform
|
|
492
|
+
|
|
493
|
+
Notes
|
|
494
|
+
-----
|
|
495
|
+
- ET's may not actually be "elementary", it can be a complex
|
|
496
|
+
mix of rotations and translations.
|
|
497
|
+
|
|
498
|
+
See Also
|
|
499
|
+
--------
|
|
500
|
+
:func:`compile`
|
|
501
|
+
|
|
502
|
+
"""
|
|
503
|
+
|
|
504
|
+
return self.axis[0] != "S"
|
|
505
|
+
|
|
506
|
+
def inv(self):
|
|
507
|
+
r"""
|
|
508
|
+
Inverse of ET
|
|
509
|
+
|
|
510
|
+
The inverse of a given ET.
|
|
511
|
+
|
|
512
|
+
Returns
|
|
513
|
+
-------
|
|
514
|
+
inv
|
|
515
|
+
Inverse of the ET
|
|
516
|
+
|
|
517
|
+
Examples
|
|
518
|
+
--------
|
|
519
|
+
.. runblock:: pycon
|
|
520
|
+
>>> from roboticstoolbox import ET
|
|
521
|
+
>>> e = ET.Rz(2.5)
|
|
522
|
+
>>> print(e)
|
|
523
|
+
>>> print(e.inv())
|
|
524
|
+
|
|
525
|
+
""" # noqa
|
|
526
|
+
|
|
527
|
+
inv = deepcopy(self)
|
|
528
|
+
|
|
529
|
+
if inv.isjoint:
|
|
530
|
+
inv._flip ^= True
|
|
531
|
+
elif not inv.iselementary:
|
|
532
|
+
inv._T = npinv(inv._T).copy(order="F")
|
|
533
|
+
elif inv._eta is not None:
|
|
534
|
+
inv._T = npinv(inv._T).copy(order="F")
|
|
535
|
+
inv._eta = -inv._eta
|
|
536
|
+
|
|
537
|
+
inv.__update_c()
|
|
538
|
+
|
|
539
|
+
return inv
|
|
540
|
+
|
|
541
|
+
def A(self, q: Union[float, Sym] = 0.0) -> ndarray:
|
|
542
|
+
"""
|
|
543
|
+
Evaluate an elementary transformation
|
|
544
|
+
|
|
545
|
+
Parameters
|
|
546
|
+
----------
|
|
547
|
+
q
|
|
548
|
+
Is used if this ET is variable (a joint)
|
|
549
|
+
|
|
550
|
+
Returns
|
|
551
|
+
-------
|
|
552
|
+
T
|
|
553
|
+
The SE(3) or SE(2) matrix value of the ET
|
|
554
|
+
|
|
555
|
+
Examples
|
|
556
|
+
--------
|
|
557
|
+
.. runblock:: pycon
|
|
558
|
+
>>> from roboticstoolbox import ET
|
|
559
|
+
>>> e = ET.tx(1)
|
|
560
|
+
>>> e.A()
|
|
561
|
+
>>> e = ET.tx()
|
|
562
|
+
>>> e.A(0.7)
|
|
563
|
+
|
|
564
|
+
"""
|
|
565
|
+
try:
|
|
566
|
+
# Try and use the C implementation, flip is handled in C
|
|
567
|
+
return ET_T(self.__fknm, q)
|
|
568
|
+
except TypeError:
|
|
569
|
+
# We can't use the fast version, lets use Python instead
|
|
570
|
+
if self.isjoint:
|
|
571
|
+
if self.isflip:
|
|
572
|
+
q = -q # type: ignore
|
|
573
|
+
|
|
574
|
+
if self.axis_func is not None:
|
|
575
|
+
return self.axis_func(q)
|
|
576
|
+
else: # pragma: no cover
|
|
577
|
+
raise TypeError("axis_func not defined")
|
|
578
|
+
else: # pragma: no cover
|
|
579
|
+
return self._T
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
class ET(BaseET):
|
|
583
|
+
def __init__(self, **kwargs):
|
|
584
|
+
super().__init__(**kwargs)
|
|
585
|
+
|
|
586
|
+
def __mul__(self, other: "ET") -> "rtb.ETS":
|
|
587
|
+
return rtb.ETS([self, other])
|
|
588
|
+
|
|
589
|
+
def __add__(self, other: "ET") -> "rtb.ETS":
|
|
590
|
+
return self.__mul__(other)
|
|
591
|
+
|
|
592
|
+
@property
|
|
593
|
+
def s(self) -> ndarray: # pragma: nocover
|
|
594
|
+
if self.axis[1] == "x":
|
|
595
|
+
if self.axis[0] == "R":
|
|
596
|
+
return array([0, 0, 0, 1, 0, 0])
|
|
597
|
+
else:
|
|
598
|
+
return array([1, 0, 0, 0, 0, 0])
|
|
599
|
+
elif self.axis[1] == "y":
|
|
600
|
+
if self.axis[0] == "R":
|
|
601
|
+
return array([0, 0, 0, 0, 1, 0])
|
|
602
|
+
else:
|
|
603
|
+
return array([0, 1, 0, 0, 0, 0])
|
|
604
|
+
else:
|
|
605
|
+
if self.axis[0] == "R":
|
|
606
|
+
return array([0, 0, 0, 0, 0, 1])
|
|
607
|
+
else:
|
|
608
|
+
return array([0, 0, 1, 0, 0, 0])
|
|
609
|
+
|
|
610
|
+
@classmethod
|
|
611
|
+
def Rx(
|
|
612
|
+
cls, eta: Union[float, Sym, None] = None, unit: str = "rad", **kwargs
|
|
613
|
+
) -> "ET":
|
|
614
|
+
"""
|
|
615
|
+
Pure rotation about the x-axis
|
|
616
|
+
|
|
617
|
+
- ``ET.Rx(η)`` is an elementary rotation about the x-axis by a
|
|
618
|
+
constant angle η
|
|
619
|
+
- ``ET.Rx()`` is an elementary rotation about the x-axis by a variable
|
|
620
|
+
angle, i.e. a revolute robot joint. ``j`` or ``flip`` can be set in
|
|
621
|
+
this case.
|
|
622
|
+
|
|
623
|
+
Parameters
|
|
624
|
+
----------
|
|
625
|
+
η
|
|
626
|
+
rotation about the x-axis
|
|
627
|
+
unit
|
|
628
|
+
angular unit, "rad" [default] or "deg"
|
|
629
|
+
j
|
|
630
|
+
Explicit joint number within the robot
|
|
631
|
+
flip
|
|
632
|
+
Joint moves in opposite direction
|
|
633
|
+
|
|
634
|
+
Returns
|
|
635
|
+
-------
|
|
636
|
+
Rx
|
|
637
|
+
An elementary transform
|
|
638
|
+
|
|
639
|
+
See Also
|
|
640
|
+
--------
|
|
641
|
+
:func:`ET`
|
|
642
|
+
:func:`isrotation`
|
|
643
|
+
|
|
644
|
+
:SymPy: supported
|
|
645
|
+
"""
|
|
646
|
+
|
|
647
|
+
return cls(axis="Rx", eta=eta, axis_func=trotx, unit=unit, **kwargs)
|
|
648
|
+
|
|
649
|
+
@classmethod
|
|
650
|
+
def Ry(
|
|
651
|
+
cls, eta: Union[float, Sym, None] = None, unit: str = "rad", **kwargs
|
|
652
|
+
) -> "ET":
|
|
653
|
+
"""
|
|
654
|
+
Pure rotation about the y-axis
|
|
655
|
+
|
|
656
|
+
- ``ET.Ry(η)`` is an elementary rotation about the y-axis by a
|
|
657
|
+
constant angle η
|
|
658
|
+
- ``ET.Ry()`` is an elementary rotation about the y-axis by a variable
|
|
659
|
+
angle, i.e. a revolute robot joint. ``j`` or ``flip`` can be set in
|
|
660
|
+
this case.
|
|
661
|
+
|
|
662
|
+
Parameters
|
|
663
|
+
----------
|
|
664
|
+
η
|
|
665
|
+
rotation about the y-axis
|
|
666
|
+
unit
|
|
667
|
+
angular unit, "rad" [default] or "deg"
|
|
668
|
+
j
|
|
669
|
+
Explicit joint number within the robot
|
|
670
|
+
flip
|
|
671
|
+
Joint moves in opposite direction
|
|
672
|
+
|
|
673
|
+
Returns
|
|
674
|
+
-------
|
|
675
|
+
Ry
|
|
676
|
+
An elementary transform
|
|
677
|
+
|
|
678
|
+
See Also
|
|
679
|
+
--------
|
|
680
|
+
:func:`ET`
|
|
681
|
+
:func:`isrotation`
|
|
682
|
+
|
|
683
|
+
:SymPy: supported
|
|
684
|
+
"""
|
|
685
|
+
return cls(axis="Ry", eta=eta, axis_func=troty, unit=unit, **kwargs)
|
|
686
|
+
|
|
687
|
+
@classmethod
|
|
688
|
+
def Rz(
|
|
689
|
+
cls, eta: Union[float, Sym, None] = None, unit: str = "rad", **kwargs
|
|
690
|
+
) -> "ET":
|
|
691
|
+
"""
|
|
692
|
+
Pure rotation about the z-axis
|
|
693
|
+
|
|
694
|
+
- ``ET.Rz(η)`` is an elementary rotation about the z-axis by a
|
|
695
|
+
constant angle η
|
|
696
|
+
- ``ET.Rz()`` is an elementary rotation about the z-axis by a variable
|
|
697
|
+
angle, i.e. a revolute robot joint. ``j`` or ``flip`` can be set in
|
|
698
|
+
this case.
|
|
699
|
+
|
|
700
|
+
Parameters
|
|
701
|
+
----------
|
|
702
|
+
η
|
|
703
|
+
rotation about the z-axis
|
|
704
|
+
unit
|
|
705
|
+
angular unit, "rad" [default] or "deg"
|
|
706
|
+
j
|
|
707
|
+
Explicit joint number within the robot
|
|
708
|
+
flip
|
|
709
|
+
Joint moves in opposite direction
|
|
710
|
+
|
|
711
|
+
Returns
|
|
712
|
+
-------
|
|
713
|
+
Rz
|
|
714
|
+
An elementary transform
|
|
715
|
+
|
|
716
|
+
See Also
|
|
717
|
+
--------
|
|
718
|
+
:func:`ET`
|
|
719
|
+
:func:`isrotation`
|
|
720
|
+
|
|
721
|
+
:SymPy: supported
|
|
722
|
+
"""
|
|
723
|
+
return cls(axis="Rz", eta=eta, axis_func=trotz, unit=unit, **kwargs)
|
|
724
|
+
|
|
725
|
+
@classmethod
|
|
726
|
+
def tx(cls, eta: Union[float, Sym, None] = None, **kwargs) -> "ET":
|
|
727
|
+
"""
|
|
728
|
+
Pure translation along the x-axis
|
|
729
|
+
|
|
730
|
+
- ``ET.tx(η)`` is an elementary translation along the x-axis by a
|
|
731
|
+
distance constant η
|
|
732
|
+
- ``ET.tx()`` is an elementary translation along the x-axis by a
|
|
733
|
+
variable distance, i.e. a prismatic robot joint. ``j`` or ``flip``
|
|
734
|
+
can be set in this case.
|
|
735
|
+
|
|
736
|
+
Parameters
|
|
737
|
+
----------
|
|
738
|
+
η
|
|
739
|
+
translation distance along the z-axis
|
|
740
|
+
j
|
|
741
|
+
Explicit joint number within the robot
|
|
742
|
+
flip
|
|
743
|
+
Joint moves in opposite direction
|
|
744
|
+
|
|
745
|
+
Returns
|
|
746
|
+
-------
|
|
747
|
+
tx
|
|
748
|
+
An elementary transform
|
|
749
|
+
|
|
750
|
+
See Also
|
|
751
|
+
--------
|
|
752
|
+
:func:`ET`
|
|
753
|
+
:func:`istranslation`
|
|
754
|
+
|
|
755
|
+
:SymPy: supported
|
|
756
|
+
"""
|
|
757
|
+
|
|
758
|
+
# this method is 3x faster than using lambda x: transl(x, 0, 0)
|
|
759
|
+
def axis_func(eta):
|
|
760
|
+
# fmt: off
|
|
761
|
+
return array([
|
|
762
|
+
[1, 0, 0, eta],
|
|
763
|
+
[0, 1, 0, 0],
|
|
764
|
+
[0, 0, 1, 0],
|
|
765
|
+
[0, 0, 0, 1]
|
|
766
|
+
])
|
|
767
|
+
# fmt: on
|
|
768
|
+
|
|
769
|
+
return cls(axis="tx", axis_func=axis_func, eta=eta, **kwargs)
|
|
770
|
+
|
|
771
|
+
@classmethod
|
|
772
|
+
def ty(cls, eta: Union[float, Sym, None] = None, **kwargs) -> "ET":
|
|
773
|
+
"""
|
|
774
|
+
Pure translation along the y-axis
|
|
775
|
+
|
|
776
|
+
- ``ET.ty(η)`` is an elementary translation along the y-axis by a
|
|
777
|
+
distance constant η
|
|
778
|
+
- ``ET.ty()`` is an elementary translation along the y-axis by a
|
|
779
|
+
variable distance, i.e. a prismatic robot joint. ``j`` or ``flip``
|
|
780
|
+
can be set in this case.
|
|
781
|
+
|
|
782
|
+
Parameters
|
|
783
|
+
----------
|
|
784
|
+
η
|
|
785
|
+
translation distance along the y-axis
|
|
786
|
+
j
|
|
787
|
+
Explicit joint number within the robot
|
|
788
|
+
flip
|
|
789
|
+
Joint moves in opposite direction
|
|
790
|
+
|
|
791
|
+
Returns
|
|
792
|
+
-------
|
|
793
|
+
ty
|
|
794
|
+
An elementary transform
|
|
795
|
+
|
|
796
|
+
See Also
|
|
797
|
+
--------
|
|
798
|
+
:func:`ET`
|
|
799
|
+
:func:`istranslation`
|
|
800
|
+
|
|
801
|
+
:SymPy: supported
|
|
802
|
+
"""
|
|
803
|
+
|
|
804
|
+
def axis_func(eta):
|
|
805
|
+
# fmt: off
|
|
806
|
+
return array([
|
|
807
|
+
[1, 0, 0, 0],
|
|
808
|
+
[0, 1, 0, eta],
|
|
809
|
+
[0, 0, 1, 0],
|
|
810
|
+
[0, 0, 0, 1]
|
|
811
|
+
])
|
|
812
|
+
# fmt: on
|
|
813
|
+
|
|
814
|
+
return cls(axis="ty", eta=eta, axis_func=axis_func, **kwargs)
|
|
815
|
+
|
|
816
|
+
@classmethod
|
|
817
|
+
def tz(cls, eta: Union[float, Sym, None] = None, **kwargs) -> "ET":
|
|
818
|
+
"""
|
|
819
|
+
Pure translation along the z-axis
|
|
820
|
+
|
|
821
|
+
- ``ET.tz(η)`` is an elementary translation along the z-axis by a
|
|
822
|
+
distance constant η
|
|
823
|
+
- ``ET.tz()`` is an elementary translation along the z-axis by a
|
|
824
|
+
variable distance, i.e. a prismatic robot joint. ``j`` or ``flip``
|
|
825
|
+
can be set in this case.
|
|
826
|
+
|
|
827
|
+
Parameters
|
|
828
|
+
----------
|
|
829
|
+
η
|
|
830
|
+
translation distance along the z-axis
|
|
831
|
+
j
|
|
832
|
+
Explicit joint number within the robot
|
|
833
|
+
flip
|
|
834
|
+
Joint moves in opposite direction
|
|
835
|
+
|
|
836
|
+
Returns
|
|
837
|
+
-------
|
|
838
|
+
tz
|
|
839
|
+
An elementary transform
|
|
840
|
+
|
|
841
|
+
See Also
|
|
842
|
+
--------
|
|
843
|
+
:func:`ET`
|
|
844
|
+
func:`istranslation`
|
|
845
|
+
|
|
846
|
+
:SymPy: supported
|
|
847
|
+
"""
|
|
848
|
+
|
|
849
|
+
def axis_func(eta):
|
|
850
|
+
# fmt: off
|
|
851
|
+
return array([
|
|
852
|
+
[1, 0, 0, 0],
|
|
853
|
+
[0, 1, 0, 0],
|
|
854
|
+
[0, 0, 1, eta],
|
|
855
|
+
[0, 0, 0, 1]
|
|
856
|
+
])
|
|
857
|
+
# fmt: on
|
|
858
|
+
|
|
859
|
+
return cls(axis="tz", axis_func=axis_func, eta=eta, **kwargs)
|
|
860
|
+
|
|
861
|
+
@classmethod
|
|
862
|
+
def SE3(cls, T: Union[ndarray, SE3], **kwargs) -> "ET":
|
|
863
|
+
"""
|
|
864
|
+
A static SE3
|
|
865
|
+
|
|
866
|
+
- ``ET.T(η)`` is an elementary translation along the z-axis by a
|
|
867
|
+
distance constant η
|
|
868
|
+
- ``ET.tz()`` is an elementary translation along the z-axis by a
|
|
869
|
+
variable distance, i.e. a prismatic robot joint. ``j`` or ``flip``
|
|
870
|
+
can be set in this case.
|
|
871
|
+
|
|
872
|
+
Parameters
|
|
873
|
+
----------
|
|
874
|
+
T
|
|
875
|
+
The SE3 trnasformation matrix
|
|
876
|
+
|
|
877
|
+
Returns
|
|
878
|
+
-------
|
|
879
|
+
SE3
|
|
880
|
+
An elementary transform
|
|
881
|
+
|
|
882
|
+
See Also
|
|
883
|
+
--------
|
|
884
|
+
:func:`ET`
|
|
885
|
+
:func:`istranslation`
|
|
886
|
+
|
|
887
|
+
:SymPy: supported
|
|
888
|
+
"""
|
|
889
|
+
|
|
890
|
+
trans = T.A if isinstance(T, SE3) else T
|
|
891
|
+
|
|
892
|
+
return cls(axis="SE3", T=trans, **kwargs)
|
|
893
|
+
|
|
894
|
+
|
|
895
|
+
class ET2(BaseET):
|
|
896
|
+
def __init__(self, **kwargs):
|
|
897
|
+
super().__init__(**kwargs)
|
|
898
|
+
|
|
899
|
+
def __mul__(self, other: "ET2") -> "rtb.ETS2":
|
|
900
|
+
return rtb.ETS2([self, other])
|
|
901
|
+
|
|
902
|
+
def __add__(self, other: "ET2") -> "rtb.ETS2":
|
|
903
|
+
return self.__mul__(other)
|
|
904
|
+
|
|
905
|
+
@property
|
|
906
|
+
def s(self) -> ndarray: # pragma: nocover
|
|
907
|
+
if self.axis[0] == "R":
|
|
908
|
+
return array([0, 0, 0, 1])
|
|
909
|
+
if self.axis[1] == "x":
|
|
910
|
+
return array([1, 0, 0, 0])
|
|
911
|
+
elif self.axis[1] == "y":
|
|
912
|
+
return array([0, 1, 0, 0])
|
|
913
|
+
else:
|
|
914
|
+
return array([0, 0, 1, 0])
|
|
915
|
+
|
|
916
|
+
@classmethod
|
|
917
|
+
def R(
|
|
918
|
+
cls, eta: Union[float, Sym, None] = None, unit: str = "rad", **kwargs
|
|
919
|
+
) -> "ET2":
|
|
920
|
+
"""
|
|
921
|
+
Pure rotation
|
|
922
|
+
|
|
923
|
+
- ``ET2.R(η)`` is an elementary rotation by a constant angle η
|
|
924
|
+
- ``ET2.R()`` is an elementary rotation by a variable angle, i.e. a
|
|
925
|
+
revolute robot joint. ``j`` or ``flip`` can be set in
|
|
926
|
+
this case.
|
|
927
|
+
|
|
928
|
+
Parameters
|
|
929
|
+
----------
|
|
930
|
+
η
|
|
931
|
+
rotation angle
|
|
932
|
+
unit
|
|
933
|
+
angular unit, "rad" [default] or "deg"
|
|
934
|
+
j
|
|
935
|
+
Explicit joint number within the robot
|
|
936
|
+
flip
|
|
937
|
+
Joint moves in opposite direction
|
|
938
|
+
|
|
939
|
+
Returns
|
|
940
|
+
-------
|
|
941
|
+
R
|
|
942
|
+
An elementary transform
|
|
943
|
+
|
|
944
|
+
Notes
|
|
945
|
+
-----
|
|
946
|
+
- In the 2D case this is rotation around the normal to the
|
|
947
|
+
xy-plane.
|
|
948
|
+
|
|
949
|
+
See Also
|
|
950
|
+
--------
|
|
951
|
+
:func:`ET2`, :func:`isrotation`
|
|
952
|
+
|
|
953
|
+
"""
|
|
954
|
+
|
|
955
|
+
return cls(
|
|
956
|
+
axis="R", eta=eta, axis_func=lambda theta: trot2(theta), unit=unit, **kwargs
|
|
957
|
+
)
|
|
958
|
+
|
|
959
|
+
@classmethod
|
|
960
|
+
def tx(
|
|
961
|
+
cls, eta: Union[float, Sym, None] = None, unit: str = "rad", **kwargs
|
|
962
|
+
) -> "ET2":
|
|
963
|
+
"""
|
|
964
|
+
Pure translation along the x-axis
|
|
965
|
+
|
|
966
|
+
- ``ET2.tx(η)`` is an elementary translation along the x-axis by a
|
|
967
|
+
distance constant η
|
|
968
|
+
- ``ET2.tx()`` is an elementary translation along the x-axis by a
|
|
969
|
+
variable distance, i.e. a prismatic robot joint. ``j`` or ``flip``
|
|
970
|
+
can be set in this case.
|
|
971
|
+
|
|
972
|
+
Parameters
|
|
973
|
+
----------
|
|
974
|
+
η
|
|
975
|
+
translation distance along the x-axis
|
|
976
|
+
j
|
|
977
|
+
Explicit joint number within the robot
|
|
978
|
+
flip
|
|
979
|
+
Joint moves in opposite direction
|
|
980
|
+
|
|
981
|
+
Returns
|
|
982
|
+
-------
|
|
983
|
+
tx
|
|
984
|
+
An elementary transform
|
|
985
|
+
|
|
986
|
+
See Also
|
|
987
|
+
--------
|
|
988
|
+
:func:`ET2`
|
|
989
|
+
:func:`istranslation`
|
|
990
|
+
|
|
991
|
+
"""
|
|
992
|
+
|
|
993
|
+
return cls(axis="tx", eta=eta, axis_func=lambda x: transl2(x, 0), **kwargs)
|
|
994
|
+
|
|
995
|
+
@classmethod
|
|
996
|
+
def ty(
|
|
997
|
+
cls, eta: Union[float, Sym, None] = None, unit: str = "rad", **kwargs
|
|
998
|
+
) -> "ET2":
|
|
999
|
+
"""
|
|
1000
|
+
Pure translation along the y-axis
|
|
1001
|
+
|
|
1002
|
+
- ``ET2.tx(η)`` is an elementary translation along the y-axis by a
|
|
1003
|
+
distance constant η
|
|
1004
|
+
- ``ET2.tx()`` is an elementary translation along the y-axis by a
|
|
1005
|
+
variable distance, i.e. a prismatic robot joint. ``j`` or ``flip``
|
|
1006
|
+
can be set in this case.
|
|
1007
|
+
|
|
1008
|
+
Parameters
|
|
1009
|
+
----------
|
|
1010
|
+
η
|
|
1011
|
+
translation distance along the y-axis
|
|
1012
|
+
j
|
|
1013
|
+
Explicit joint number within the robot
|
|
1014
|
+
flip
|
|
1015
|
+
Joint moves in opposite direction
|
|
1016
|
+
|
|
1017
|
+
Returns
|
|
1018
|
+
-------
|
|
1019
|
+
ty
|
|
1020
|
+
An elementary transform
|
|
1021
|
+
|
|
1022
|
+
See Also
|
|
1023
|
+
--------
|
|
1024
|
+
:func:`ET2`
|
|
1025
|
+
|
|
1026
|
+
"""
|
|
1027
|
+
|
|
1028
|
+
return cls(axis="ty", eta=eta, axis_func=lambda y: transl2(0, y), **kwargs)
|
|
1029
|
+
|
|
1030
|
+
@classmethod
|
|
1031
|
+
def SE2(cls, T: Union[ndarray, SE2], **kwargs) -> "ET2":
|
|
1032
|
+
"""
|
|
1033
|
+
A static SE2
|
|
1034
|
+
|
|
1035
|
+
- ``ET2.T(η)`` is an elementary translation along the z-axis by a
|
|
1036
|
+
distance constant η
|
|
1037
|
+
- ``ET2.tz()`` is an elementary translation along the z-axis by a
|
|
1038
|
+
variable distance, i.e. a prismatic robot joint. ``j`` or ``flip``
|
|
1039
|
+
can be set in this case.
|
|
1040
|
+
|
|
1041
|
+
Parameters
|
|
1042
|
+
----------
|
|
1043
|
+
T
|
|
1044
|
+
The SE2 trnasformation matrix
|
|
1045
|
+
|
|
1046
|
+
Returns
|
|
1047
|
+
-------
|
|
1048
|
+
SE2
|
|
1049
|
+
An elementary transform
|
|
1050
|
+
|
|
1051
|
+
See Also
|
|
1052
|
+
--------
|
|
1053
|
+
:func:`ET2`
|
|
1054
|
+
:func:`istranslation`
|
|
1055
|
+
|
|
1056
|
+
:SymPy: supported
|
|
1057
|
+
"""
|
|
1058
|
+
|
|
1059
|
+
trans = T.A if isinstance(T, SE2) else T
|
|
1060
|
+
|
|
1061
|
+
return cls(axis="SE2", T=trans, **kwargs)
|
|
1062
|
+
|
|
1063
|
+
def A(self, q: Union[float, Sym] = 0.0) -> ndarray:
|
|
1064
|
+
"""
|
|
1065
|
+
Evaluate an elementary transformation
|
|
1066
|
+
|
|
1067
|
+
Parameters
|
|
1068
|
+
----------
|
|
1069
|
+
q
|
|
1070
|
+
Is used if this ET2 is variable (a joint)
|
|
1071
|
+
|
|
1072
|
+
Returns
|
|
1073
|
+
-------
|
|
1074
|
+
T
|
|
1075
|
+
The SE(2) matrix value of the ET2
|
|
1076
|
+
|
|
1077
|
+
Examples
|
|
1078
|
+
--------
|
|
1079
|
+
.. runblock:: pycon
|
|
1080
|
+
>>> from roboticstoolbox import ET2
|
|
1081
|
+
>>> e = ET2.tx(1)
|
|
1082
|
+
>>> e.A()
|
|
1083
|
+
>>> e = ET2.tx()
|
|
1084
|
+
>>> e.A(0.7)
|
|
1085
|
+
|
|
1086
|
+
"""
|
|
1087
|
+
|
|
1088
|
+
if self.isjoint:
|
|
1089
|
+
if self.isflip:
|
|
1090
|
+
q = -1.0 * q
|
|
1091
|
+
|
|
1092
|
+
if self.axis_func is not None:
|
|
1093
|
+
return self.axis_func(q)
|
|
1094
|
+
else: # pragma: no cover
|
|
1095
|
+
raise TypeError("axis_func not defined")
|
|
1096
|
+
else: # pragma: no cover
|
|
1097
|
+
return self._T
|