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,769 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""
|
|
3
|
+
@author Jesse Haviland
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import time
|
|
7
|
+
import io
|
|
8
|
+
import sys
|
|
9
|
+
import roboticstoolbox as rp
|
|
10
|
+
import numpy as np
|
|
11
|
+
from roboticstoolbox.backends.Connector import Connector
|
|
12
|
+
|
|
13
|
+
from roboticstoolbox.backends.PyPlot.RobotPlot import RobotPlot
|
|
14
|
+
from roboticstoolbox.backends.PyPlot.EllipsePlot import EllipsePlot, ShapePlot
|
|
15
|
+
from spatialmath.base.argcheck import getvector
|
|
16
|
+
from spatialgeometry import Shape
|
|
17
|
+
|
|
18
|
+
# from roboticstoolbox.tools import Ticker
|
|
19
|
+
|
|
20
|
+
_mpl = False
|
|
21
|
+
_pil = None
|
|
22
|
+
_ipy_display = None
|
|
23
|
+
_ipy_image = None
|
|
24
|
+
_ipy_svg = None
|
|
25
|
+
_ipy_clear_output = None
|
|
26
|
+
|
|
27
|
+
try:
|
|
28
|
+
import matplotlib
|
|
29
|
+
import matplotlib.pyplot as plt
|
|
30
|
+
|
|
31
|
+
# from mpl_toolkits.mplot3d import Axes3D
|
|
32
|
+
from matplotlib.widgets import Slider
|
|
33
|
+
|
|
34
|
+
matplotlib.rcParams["pdf.fonttype"] = 42
|
|
35
|
+
matplotlib.rcParams["ps.fonttype"] = 42
|
|
36
|
+
plt.style.use("ggplot")
|
|
37
|
+
matplotlib.rcParams["font.size"] = 7
|
|
38
|
+
matplotlib.rcParams["lines.linewidth"] = 0.5
|
|
39
|
+
matplotlib.rcParams["xtick.major.size"] = 1.5
|
|
40
|
+
matplotlib.rcParams["ytick.major.size"] = 1.5
|
|
41
|
+
matplotlib.rcParams["axes.labelpad"] = 1
|
|
42
|
+
plt.rc("grid", linestyle="-", color="#dbdbdb")
|
|
43
|
+
_mpl = True
|
|
44
|
+
except ImportError: # pragma nocover
|
|
45
|
+
pass
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
from IPython.display import display as _ipy_display
|
|
49
|
+
from IPython.display import Image as _ipy_image
|
|
50
|
+
from IPython.display import SVG as _ipy_svg
|
|
51
|
+
from IPython.display import clear_output as _ipy_clear_output
|
|
52
|
+
except ImportError: # pragma nocover
|
|
53
|
+
pass
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class PyPlot(Connector):
|
|
57
|
+
"""
|
|
58
|
+
Graphical backend using matplotlib
|
|
59
|
+
|
|
60
|
+
matplotlib is a common and highly portable graphics library for Python,
|
|
61
|
+
but has relatively limited 3D capability.
|
|
62
|
+
|
|
63
|
+
Example:
|
|
64
|
+
|
|
65
|
+
.. code-block:: python
|
|
66
|
+
:linenos:
|
|
67
|
+
|
|
68
|
+
import roboticstoolbox as rtb
|
|
69
|
+
|
|
70
|
+
robot = rtb.models.DH.Panda() # create a robot
|
|
71
|
+
|
|
72
|
+
pyplot = rtb.backends.PyPlot() # create a PyPlot backend
|
|
73
|
+
pyplot.add(robot) # add the robot to the backend
|
|
74
|
+
robot.q = robot.qz # set the robot configuration
|
|
75
|
+
pyplot.step() # update the backend and graphical view
|
|
76
|
+
|
|
77
|
+
.. note:: PyPlot is the default backend, and ``robot.plot(q)`` effectively
|
|
78
|
+
performs lines 7-8 above.
|
|
79
|
+
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
def __init__(self):
|
|
83
|
+
|
|
84
|
+
super(PyPlot, self).__init__()
|
|
85
|
+
self.robots = []
|
|
86
|
+
self.ellipses = []
|
|
87
|
+
self.shapes = []
|
|
88
|
+
self.render_mode = "window"
|
|
89
|
+
self.inline_every_n = 1
|
|
90
|
+
self.inline_format = "svg"
|
|
91
|
+
self.inline_dpi = None
|
|
92
|
+
self._inline_step_count = 0
|
|
93
|
+
self._inline_display_handle = None
|
|
94
|
+
self._inline_is_jl = False
|
|
95
|
+
|
|
96
|
+
if not _mpl: # pragma nocover
|
|
97
|
+
raise ImportError(
|
|
98
|
+
"\n\nYou do not have matplotlib installed, do:\n"
|
|
99
|
+
"pip install matplotlib\n\n"
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
def __repr__(self):
|
|
103
|
+
s = ""
|
|
104
|
+
for robot in self.robots:
|
|
105
|
+
s += f" robot: {robot.name}\n"
|
|
106
|
+
for ellipse in self.ellipses:
|
|
107
|
+
s += f" ellipse: {ellipse}\n"
|
|
108
|
+
for shape in self.shapes:
|
|
109
|
+
s += f" shape: {shape}\n"
|
|
110
|
+
|
|
111
|
+
if s == "":
|
|
112
|
+
return f"PyPlot3D backend, t = {self.sim_time}, empty scene"
|
|
113
|
+
else:
|
|
114
|
+
return f"PyPlot3D backend, t = {self.sim_time}, scene:\n" + s
|
|
115
|
+
|
|
116
|
+
def launch(self, name=None, fig=None, ax=None, limits=None, **kwargs):
|
|
117
|
+
"""
|
|
118
|
+
Launch a graphical interface
|
|
119
|
+
|
|
120
|
+
```env = launch()``` creates a blank 3D matplotlib figure and returns
|
|
121
|
+
a reference to the backend.
|
|
122
|
+
|
|
123
|
+
Optional keyword arguments
|
|
124
|
+
--------------------------
|
|
125
|
+
ax
|
|
126
|
+
Existing Matplotlib 3D axes to render into.
|
|
127
|
+
render_mode
|
|
128
|
+
One of ``'window'``, ``'notebook-widget'``, or ``'notebook-inline'``.
|
|
129
|
+
inline_every_n
|
|
130
|
+
Push one inline frame every N simulation steps (inline mode only).
|
|
131
|
+
inline_format
|
|
132
|
+
Inline frame format: ``'svg'`` (default) or ``'png'``.
|
|
133
|
+
inline_dpi
|
|
134
|
+
DPI for PNG inline frames only. Ignored for SVG.
|
|
135
|
+
"""
|
|
136
|
+
|
|
137
|
+
super().launch()
|
|
138
|
+
|
|
139
|
+
self.render_mode = _resolve_render_mode(kwargs.get("render_mode"))
|
|
140
|
+
self.inline_every_n = max(1, int(kwargs.get("inline_every_n", 1)))
|
|
141
|
+
self.inline_format = kwargs.get("inline_format", "svg")
|
|
142
|
+
if self.inline_format not in ["png", "svg"]:
|
|
143
|
+
raise ValueError("inline_format must be either 'png' or 'svg'")
|
|
144
|
+
inline_dpi = kwargs.get("inline_dpi", None)
|
|
145
|
+
if inline_dpi is not None:
|
|
146
|
+
inline_dpi = float(inline_dpi)
|
|
147
|
+
if inline_dpi <= 0:
|
|
148
|
+
raise ValueError("inline_dpi must be > 0")
|
|
149
|
+
self.inline_dpi = inline_dpi
|
|
150
|
+
self._inline_step_count = 0
|
|
151
|
+
self._inline_display_handle = None
|
|
152
|
+
self._inline_is_jl = sys.platform == "emscripten"
|
|
153
|
+
|
|
154
|
+
self.limits = limits
|
|
155
|
+
if limits is not None:
|
|
156
|
+
self.limits = getvector(limits, 6)
|
|
157
|
+
|
|
158
|
+
projection = "ortho"
|
|
159
|
+
labels = ["X", "Y", "Z"]
|
|
160
|
+
|
|
161
|
+
if name is None:
|
|
162
|
+
name = "Robotics Toolbox for Python"
|
|
163
|
+
|
|
164
|
+
if ax is not None:
|
|
165
|
+
if fig is not None and ax.figure is not fig:
|
|
166
|
+
raise ValueError("ax does not belong to fig")
|
|
167
|
+
|
|
168
|
+
# Caller supplied axes; reuse its parent figure.
|
|
169
|
+
self.ax = ax
|
|
170
|
+
self.fig = ax.figure
|
|
171
|
+
else:
|
|
172
|
+
if fig is None:
|
|
173
|
+
self.fig = plt.figure(name)
|
|
174
|
+
else:
|
|
175
|
+
self.fig = fig
|
|
176
|
+
manager = getattr(self.fig.canvas, "manager", None)
|
|
177
|
+
if manager is not None and hasattr(manager, "set_window_title"):
|
|
178
|
+
manager.set_window_title(name)
|
|
179
|
+
|
|
180
|
+
# Create a 3D axes
|
|
181
|
+
self.ax = self.fig.add_subplot(111, projection="3d", proj_type=projection)
|
|
182
|
+
|
|
183
|
+
if not hasattr(self.ax, "set_zbound"):
|
|
184
|
+
raise ValueError("ax must be a 3D matplotlib axes")
|
|
185
|
+
|
|
186
|
+
if ax is None:
|
|
187
|
+
self.fig.subplots_adjust(left=-0.09, bottom=0, top=1, right=0.99)
|
|
188
|
+
|
|
189
|
+
self.ax.set_facecolor("white")
|
|
190
|
+
manager = getattr(self.ax.figure.canvas, "manager", None)
|
|
191
|
+
if manager is not None and hasattr(manager, "set_window_title"):
|
|
192
|
+
manager.set_window_title(
|
|
193
|
+
f"Robotics Toolbox for Python (Figure {self.ax.figure.number})"
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
self.ax.set_xbound(-0.5, 0.5)
|
|
197
|
+
self.ax.set_ybound(-0.5, 0.5)
|
|
198
|
+
self.ax.set_zbound(0.0, 0.5)
|
|
199
|
+
|
|
200
|
+
self.ax.set_xlabel(labels[0])
|
|
201
|
+
self.ax.set_ylabel(labels[1])
|
|
202
|
+
self.ax.set_zlabel(labels[2])
|
|
203
|
+
|
|
204
|
+
if limits is not None:
|
|
205
|
+
self.ax.set_xlim3d([limits[0], limits[1]])
|
|
206
|
+
self.ax.set_ylim3d([limits[2], limits[3]])
|
|
207
|
+
self.ax.set_zlim3d([limits[4], limits[5]])
|
|
208
|
+
|
|
209
|
+
self.limits = limits
|
|
210
|
+
|
|
211
|
+
# disable the display of value under cursor
|
|
212
|
+
# self.ax.format_coord = lambda x, y: ''
|
|
213
|
+
|
|
214
|
+
# add time display in top-right corner
|
|
215
|
+
self.timer = self.fig.text(0.85, 0.95, "")
|
|
216
|
+
|
|
217
|
+
# In inline notebook mode (notably JupyterLite), keeping this figure
|
|
218
|
+
# registered with pyplot can trigger repeated auto-display of blank
|
|
219
|
+
# Figure reprs. Detach it and drive rendering via _push_inline_frame().
|
|
220
|
+
if self.render_mode == "notebook-inline":
|
|
221
|
+
plt.close(self.fig)
|
|
222
|
+
|
|
223
|
+
if self.render_mode == "window":
|
|
224
|
+
plt.ion()
|
|
225
|
+
plt.show()
|
|
226
|
+
else:
|
|
227
|
+
if self.render_mode == "notebook-inline":
|
|
228
|
+
plt.ioff()
|
|
229
|
+
else:
|
|
230
|
+
plt.ion()
|
|
231
|
+
if self.render_mode != "notebook-inline":
|
|
232
|
+
self.fig.canvas.draw()
|
|
233
|
+
|
|
234
|
+
self.sim_time = 0
|
|
235
|
+
|
|
236
|
+
# # Set the signal handler and a 0.1 second plot updater
|
|
237
|
+
# signal.signal(signal.SIGALRM, self._plot_handler)
|
|
238
|
+
# signal.setitimer(signal.ITIMER_REAL, 0.1, 0.1)
|
|
239
|
+
# TODO still need to finish this, and get Jupyter animation working
|
|
240
|
+
|
|
241
|
+
def step(self, dt=0.05):
|
|
242
|
+
"""
|
|
243
|
+
Update the graphical scene
|
|
244
|
+
|
|
245
|
+
:param dt: time step in seconds, defaults to 50 (0.05 s)
|
|
246
|
+
:type dt: int, optional
|
|
247
|
+
|
|
248
|
+
``env.step(args)`` triggers an update of the 3D scene in the matplotlib
|
|
249
|
+
window referenced by ``env``.
|
|
250
|
+
|
|
251
|
+
.. note::
|
|
252
|
+
|
|
253
|
+
- Each robot in the scene is updated based on
|
|
254
|
+
their control type (position, velocity, acceleration, or torque).
|
|
255
|
+
- Upon acting, the other three of the four control types will be
|
|
256
|
+
updated in the internal state of the robot object.
|
|
257
|
+
- The control type is defined by the robot object, and not all
|
|
258
|
+
robot objects support all control types.
|
|
259
|
+
- Execution is blocked for the specified interval
|
|
260
|
+
|
|
261
|
+
"""
|
|
262
|
+
|
|
263
|
+
super().step()
|
|
264
|
+
|
|
265
|
+
# update the robot's state
|
|
266
|
+
for rpl in self.robots:
|
|
267
|
+
robot = rpl.robot
|
|
268
|
+
|
|
269
|
+
if rpl.readonly or robot.control_mode == "p":
|
|
270
|
+
pass # pragma: no cover
|
|
271
|
+
elif robot.control_mode == "v":
|
|
272
|
+
for i in range(robot.n):
|
|
273
|
+
robot.q[i] += robot.qd[i] * (dt)
|
|
274
|
+
elif robot.control_mode == "a": # pragma: no cover
|
|
275
|
+
pass
|
|
276
|
+
else: # pragma: no cover
|
|
277
|
+
raise ValueError(
|
|
278
|
+
"Invalid robot.control_type. Must be one of 'p', 'v', or 'a'"
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
# plt.ioff()
|
|
282
|
+
|
|
283
|
+
# update all ellipses
|
|
284
|
+
for ellipse in self.ellipses:
|
|
285
|
+
ellipse.draw()
|
|
286
|
+
|
|
287
|
+
# update all shapes
|
|
288
|
+
for shape in self.shapes:
|
|
289
|
+
shape.draw()
|
|
290
|
+
|
|
291
|
+
# update all robots
|
|
292
|
+
for robot in self.robots:
|
|
293
|
+
robot.draw()
|
|
294
|
+
|
|
295
|
+
self._set_axes_equal()
|
|
296
|
+
|
|
297
|
+
# update time and display it on plot
|
|
298
|
+
if self.sim_time > 0:
|
|
299
|
+
self.timer.set_text(f"t = {self.sim_time:.2f}")
|
|
300
|
+
self.sim_time += dt
|
|
301
|
+
|
|
302
|
+
# plt.ion()
|
|
303
|
+
|
|
304
|
+
if self.render_mode == "window":
|
|
305
|
+
plt.draw()
|
|
306
|
+
plt.pause(dt)
|
|
307
|
+
elif self.render_mode == "notebook-widget":
|
|
308
|
+
plt.draw()
|
|
309
|
+
self.fig.canvas.draw_idle()
|
|
310
|
+
time.sleep(dt)
|
|
311
|
+
else:
|
|
312
|
+
if self._inline_step_count % self.inline_every_n == 0:
|
|
313
|
+
self._push_inline_frame()
|
|
314
|
+
self._inline_step_count += 1
|
|
315
|
+
time.sleep(dt)
|
|
316
|
+
|
|
317
|
+
def reset(self):
|
|
318
|
+
"""
|
|
319
|
+
Reset the graphical scene
|
|
320
|
+
|
|
321
|
+
``env.reset()`` triggers a reset of the 3D scene in the matplotlib
|
|
322
|
+
window referenced by ``env``. It is restored to the original state
|
|
323
|
+
defined by ``launch()``.
|
|
324
|
+
"""
|
|
325
|
+
# TODO what does this actually do for matplotlib??
|
|
326
|
+
|
|
327
|
+
super().reset()
|
|
328
|
+
|
|
329
|
+
def restart(self):
|
|
330
|
+
"""
|
|
331
|
+
Restart the graphics display
|
|
332
|
+
|
|
333
|
+
``env.restart()`` triggers a restart of the matplotlib view referenced
|
|
334
|
+
by ``env``. It is closed and relaunched to the original state defined
|
|
335
|
+
by ``launch()``.
|
|
336
|
+
|
|
337
|
+
"""
|
|
338
|
+
# TODO what does this actually do for matplotlib??
|
|
339
|
+
|
|
340
|
+
super().restart()
|
|
341
|
+
|
|
342
|
+
def close(self):
|
|
343
|
+
"""
|
|
344
|
+
``env.close()`` gracefully closes the matplotlib window
|
|
345
|
+
referenced by ``env``.
|
|
346
|
+
"""
|
|
347
|
+
# TODO what does this actually do for matplotlib??
|
|
348
|
+
|
|
349
|
+
super().close()
|
|
350
|
+
|
|
351
|
+
# signal.setitimer(signal.ITIMER_REAL, 0)
|
|
352
|
+
plt.close(self.fig)
|
|
353
|
+
|
|
354
|
+
#
|
|
355
|
+
# Methods to interface with the robots created in other environments
|
|
356
|
+
#
|
|
357
|
+
|
|
358
|
+
def add(
|
|
359
|
+
self,
|
|
360
|
+
ob,
|
|
361
|
+
readonly=False,
|
|
362
|
+
display=True,
|
|
363
|
+
jointaxes=True,
|
|
364
|
+
jointlabels=False,
|
|
365
|
+
eeframe=True,
|
|
366
|
+
shadow=True,
|
|
367
|
+
name=True,
|
|
368
|
+
options=None,
|
|
369
|
+
):
|
|
370
|
+
"""
|
|
371
|
+
Add a robot to the graphical scene
|
|
372
|
+
|
|
373
|
+
:param ob: The object to add to the plot (robot or ellipse)
|
|
374
|
+
:type ob: DHRobot or EllipsePlot
|
|
375
|
+
:param readonly: Do not update the state of the object
|
|
376
|
+
(i.e. display not simulate), defaults to False
|
|
377
|
+
:type readonly: bool, optional
|
|
378
|
+
:param display: Display the object, defaults to True
|
|
379
|
+
:type display: bool, optional
|
|
380
|
+
:param jointaxes: Show the joint axes of the robot with arrows,
|
|
381
|
+
defaults to True
|
|
382
|
+
:type jointaxes: bool, optional
|
|
383
|
+
:param eeframe: Show the end-effector frame of the robot,
|
|
384
|
+
defaults to True
|
|
385
|
+
:type eeframe: bool, optional
|
|
386
|
+
:param shadow: Display a shadow of the robot on the x-y gound plane,
|
|
387
|
+
defaults to True
|
|
388
|
+
:type shadow: bool, optional
|
|
389
|
+
:param name: Display the name of the robot, defaults to True
|
|
390
|
+
:type name: bool, optional
|
|
391
|
+
|
|
392
|
+
``id = env.add(robot)`` adds the ``robot`` to the graphical
|
|
393
|
+
environment.
|
|
394
|
+
|
|
395
|
+
.. note::
|
|
396
|
+
|
|
397
|
+
- ``robot`` must be of an appropriate class.
|
|
398
|
+
- Adds the robot object to a list of robots which will be updated
|
|
399
|
+
when the ``step()`` method is called.
|
|
400
|
+
|
|
401
|
+
"""
|
|
402
|
+
|
|
403
|
+
super().add()
|
|
404
|
+
|
|
405
|
+
if (
|
|
406
|
+
isinstance(ob, rp.DHRobot)
|
|
407
|
+
or isinstance(ob, rp.ERobot)
|
|
408
|
+
or isinstance(ob, rp.Robot)
|
|
409
|
+
):
|
|
410
|
+
self.robots.append(
|
|
411
|
+
RobotPlot(
|
|
412
|
+
ob,
|
|
413
|
+
self,
|
|
414
|
+
readonly,
|
|
415
|
+
display,
|
|
416
|
+
jointaxes,
|
|
417
|
+
jointlabels,
|
|
418
|
+
eeframe,
|
|
419
|
+
shadow,
|
|
420
|
+
name,
|
|
421
|
+
options,
|
|
422
|
+
)
|
|
423
|
+
)
|
|
424
|
+
self.robots[-1].draw()
|
|
425
|
+
id = len(self.robots)
|
|
426
|
+
|
|
427
|
+
elif isinstance(ob, EllipsePlot):
|
|
428
|
+
ob.ax = self.ax
|
|
429
|
+
self.ellipses.append(ob)
|
|
430
|
+
self.ellipses[-1].draw()
|
|
431
|
+
id = len(self.ellipses)
|
|
432
|
+
|
|
433
|
+
elif isinstance(ob, Shape):
|
|
434
|
+
# recreate the shape using matplotlib
|
|
435
|
+
self.shapes.append(ShapePlot(ob))
|
|
436
|
+
self.shapes[-1].draw(ax=self.ax)
|
|
437
|
+
id = len(self.shapes)
|
|
438
|
+
|
|
439
|
+
self._set_axes_equal()
|
|
440
|
+
|
|
441
|
+
if self.render_mode == "notebook-inline":
|
|
442
|
+
# In inline/JupyterLite mode, push a frame immediately so static
|
|
443
|
+
# plots (eg. plot_vellipse/plot_fellipse) are visible without step().
|
|
444
|
+
self._push_inline_frame()
|
|
445
|
+
else:
|
|
446
|
+
plt.draw() # matplotlib refresh
|
|
447
|
+
plt.show(block=False)
|
|
448
|
+
|
|
449
|
+
return id
|
|
450
|
+
|
|
451
|
+
def remove(self, id):
|
|
452
|
+
"""
|
|
453
|
+
Remove a robot or shape from the graphical scene
|
|
454
|
+
|
|
455
|
+
:param id: The id of the robot to remove. Can be either the DHLink or
|
|
456
|
+
GraphicalRobot
|
|
457
|
+
:type id: class:`~roboticstoolbox.robot.DHRobot.DHRobot`,
|
|
458
|
+
class:`roboticstoolbox.backends.VPython.graphics_robot.GraphicalRobot`
|
|
459
|
+
:param fig_num: The canvas index to delete the robot from, defaults to
|
|
460
|
+
the initial one
|
|
461
|
+
:type fig_num: int, optional
|
|
462
|
+
:raises ValueError: Figure number must be between 0 and total number
|
|
463
|
+
of canvases
|
|
464
|
+
:raises TypeError: Input must be a DHLink or GraphicalRobot
|
|
465
|
+
|
|
466
|
+
``env.remove(robot)`` removes the ``robot`` from the graphical
|
|
467
|
+
environment.
|
|
468
|
+
"""
|
|
469
|
+
# TODO should be an id to remove?
|
|
470
|
+
|
|
471
|
+
super().remove()
|
|
472
|
+
|
|
473
|
+
def hold(self): # pragma: no cover
|
|
474
|
+
"""
|
|
475
|
+
hold() keeps the plot open i.e. stops the plot from closing once
|
|
476
|
+
the main script has finished.
|
|
477
|
+
|
|
478
|
+
"""
|
|
479
|
+
|
|
480
|
+
# signal.setitimer(signal.ITIMER_REAL, 0)
|
|
481
|
+
plt.ioff()
|
|
482
|
+
|
|
483
|
+
# keep stepping the environment while figure is open
|
|
484
|
+
while True:
|
|
485
|
+
if not plt.fignum_exists(self.fig.number):
|
|
486
|
+
break
|
|
487
|
+
self.step()
|
|
488
|
+
|
|
489
|
+
def getframe(self):
|
|
490
|
+
global _pil
|
|
491
|
+
|
|
492
|
+
if _pil is None:
|
|
493
|
+
try:
|
|
494
|
+
import PIL
|
|
495
|
+
|
|
496
|
+
_pil = PIL.Image.frombytes
|
|
497
|
+
except ImportError: # pragma nocover
|
|
498
|
+
pass
|
|
499
|
+
|
|
500
|
+
if _pil is None:
|
|
501
|
+
raise RuntimeError(
|
|
502
|
+
"to save movies PIL must be installed:\npip3 install PIL"
|
|
503
|
+
)
|
|
504
|
+
|
|
505
|
+
# make the background white, looks better than grey stipple
|
|
506
|
+
self.ax.xaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
|
|
507
|
+
self.ax.yaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
|
|
508
|
+
self.ax.zaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
|
|
509
|
+
plt.gcf().canvas.draw()
|
|
510
|
+
|
|
511
|
+
# render the frame and save as a PIL image in the list
|
|
512
|
+
canvas = self.fig.canvas
|
|
513
|
+
return _pil("RGB", canvas.get_width_height(), canvas.tostring_rgb())
|
|
514
|
+
|
|
515
|
+
def _push_inline_frame(self):
|
|
516
|
+
# Push a snapshot into notebook output for inline animation.
|
|
517
|
+
if _ipy_display is None:
|
|
518
|
+
return
|
|
519
|
+
|
|
520
|
+
buf = io.BytesIO()
|
|
521
|
+
if self.inline_format == "svg":
|
|
522
|
+
if _ipy_svg is None:
|
|
523
|
+
return
|
|
524
|
+
self.fig.savefig(buf, format="svg")
|
|
525
|
+
frame = _ipy_svg(data=buf.getvalue().decode("utf-8"))
|
|
526
|
+
else:
|
|
527
|
+
if _ipy_image is None:
|
|
528
|
+
return
|
|
529
|
+
self.fig.savefig(buf, format="png", dpi=self.inline_dpi)
|
|
530
|
+
frame = _ipy_image(data=buf.getvalue())
|
|
531
|
+
|
|
532
|
+
if self._inline_is_jl and _ipy_clear_output is not None:
|
|
533
|
+
_ipy_clear_output(wait=True)
|
|
534
|
+
_ipy_display(frame)
|
|
535
|
+
return
|
|
536
|
+
|
|
537
|
+
if self._inline_display_handle is None:
|
|
538
|
+
self._inline_display_handle = _ipy_display(frame, display_id=True)
|
|
539
|
+
elif hasattr(self._inline_display_handle, "update"):
|
|
540
|
+
self._inline_display_handle.update(frame)
|
|
541
|
+
else:
|
|
542
|
+
_ipy_display(frame)
|
|
543
|
+
|
|
544
|
+
#
|
|
545
|
+
# Private methods
|
|
546
|
+
#
|
|
547
|
+
|
|
548
|
+
# def _plot_handler(self, sig, frame):
|
|
549
|
+
# try:
|
|
550
|
+
# plt.pause(0.001)
|
|
551
|
+
# except(AttributeError):
|
|
552
|
+
# pass
|
|
553
|
+
|
|
554
|
+
def _set_axes_equal(self):
|
|
555
|
+
"""
|
|
556
|
+
Make axes of 3D plot have equal scale so that spheres appear as
|
|
557
|
+
spheres, cubes as cubes, etc.. This is one possible solution to
|
|
558
|
+
Matplotlib's ax.set_aspect('equal') and ax.axis('equal') not
|
|
559
|
+
working for 3D.
|
|
560
|
+
|
|
561
|
+
"""
|
|
562
|
+
|
|
563
|
+
if self.limits is not None:
|
|
564
|
+
return
|
|
565
|
+
|
|
566
|
+
self.ax.autoscale(enable=True, axis="both", tight=False)
|
|
567
|
+
|
|
568
|
+
x_limits = self.ax.get_xlim3d()
|
|
569
|
+
y_limits = self.ax.get_ylim3d()
|
|
570
|
+
z_limits = self.ax.get_zlim3d()
|
|
571
|
+
|
|
572
|
+
x_range = abs(x_limits[1] - x_limits[0])
|
|
573
|
+
x_middle = np.mean(x_limits)
|
|
574
|
+
y_range = abs(y_limits[1] - y_limits[0])
|
|
575
|
+
y_middle = np.mean(y_limits)
|
|
576
|
+
z_range = abs(z_limits[1] - z_limits[0])
|
|
577
|
+
z_middle = np.mean(z_limits)
|
|
578
|
+
|
|
579
|
+
# The plot bounding box is a sphere in the sense of the infinity
|
|
580
|
+
# norm, hence I call half the max range the plot radius.
|
|
581
|
+
plot_radius = 0.5 * max([x_range, y_range, z_range])
|
|
582
|
+
|
|
583
|
+
self.ax.set_xlim3d([x_middle - plot_radius, x_middle + plot_radius])
|
|
584
|
+
self.ax.set_ylim3d([y_middle - plot_radius, y_middle + plot_radius])
|
|
585
|
+
self.ax.set_zlim3d([z_middle - plot_radius, z_middle + plot_radius])
|
|
586
|
+
|
|
587
|
+
def _add_teach_panel(self, robot, q):
|
|
588
|
+
|
|
589
|
+
if _isnotebook():
|
|
590
|
+
raise RuntimeError("cannot use teach panel under Jupyter")
|
|
591
|
+
|
|
592
|
+
fig = self.fig
|
|
593
|
+
|
|
594
|
+
# Add text to the plots
|
|
595
|
+
def text_trans(text, q): # pragma: no cover
|
|
596
|
+
T = robot.fkine(q)
|
|
597
|
+
t = np.round(T.t, 3)
|
|
598
|
+
r = np.round(T.rpy("deg"), 3)
|
|
599
|
+
text[0].set_text("x: {0}".format(t[0]))
|
|
600
|
+
text[1].set_text("y: {0}".format(t[1]))
|
|
601
|
+
text[2].set_text("z: {0}".format(t[2]))
|
|
602
|
+
text[3].set_text("r: {0}".format(r[0]))
|
|
603
|
+
text[4].set_text("p: {0}".format(r[1]))
|
|
604
|
+
text[5].set_text("y: {0}".format(r[2]))
|
|
605
|
+
|
|
606
|
+
# Update the self state in mpl and the text
|
|
607
|
+
def update(val, text, robot): # pragma: no cover
|
|
608
|
+
for j in range(robot.n):
|
|
609
|
+
if robot.isrevolute(j):
|
|
610
|
+
robot.q[j] = np.radians(self.sjoint[j].val)
|
|
611
|
+
else:
|
|
612
|
+
robot.q[j] = self.sjoint[j].val
|
|
613
|
+
|
|
614
|
+
teach_vellipse = getattr(self, "_teach_vellipse", None)
|
|
615
|
+
if teach_vellipse is not None:
|
|
616
|
+
teach_vellipse.q = robot.q
|
|
617
|
+
|
|
618
|
+
teach_fellipse = getattr(self, "_teach_fellipse", None)
|
|
619
|
+
if teach_fellipse is not None:
|
|
620
|
+
teach_fellipse.q = robot.q
|
|
621
|
+
|
|
622
|
+
text_trans(text, robot.q)
|
|
623
|
+
|
|
624
|
+
fig.subplots_adjust(left=0.25)
|
|
625
|
+
text = []
|
|
626
|
+
|
|
627
|
+
x1 = 0.04
|
|
628
|
+
x2 = 0.22
|
|
629
|
+
yh = 0.04
|
|
630
|
+
ym = 0.5 - (robot.n * yh) / 2 + 0.17 / 2
|
|
631
|
+
|
|
632
|
+
self.axjoint = []
|
|
633
|
+
self.sjoint = []
|
|
634
|
+
|
|
635
|
+
qlim = robot.todegrees(robot.qlim)
|
|
636
|
+
|
|
637
|
+
# if np.all(qlim == 0): # pragma: no cover
|
|
638
|
+
# qlim[0, :] = -180
|
|
639
|
+
# qlim[1, :] = 180
|
|
640
|
+
|
|
641
|
+
# Set the pose text
|
|
642
|
+
T = robot.fkine(q)
|
|
643
|
+
t = np.round(T.t, 3)
|
|
644
|
+
r = np.round(T.rpy(), 3)
|
|
645
|
+
|
|
646
|
+
fig.text(
|
|
647
|
+
0.02,
|
|
648
|
+
1 - ym + 0.25,
|
|
649
|
+
"End-effector Pose",
|
|
650
|
+
fontsize=9,
|
|
651
|
+
weight="bold",
|
|
652
|
+
color="#4f4f4f",
|
|
653
|
+
)
|
|
654
|
+
text.append(
|
|
655
|
+
fig.text(
|
|
656
|
+
0.03, 1 - ym + 0.20, "x: {0}".format(t[0]), fontsize=9, color="#2b2b2b"
|
|
657
|
+
)
|
|
658
|
+
)
|
|
659
|
+
text.append(
|
|
660
|
+
fig.text(
|
|
661
|
+
0.03, 1 - ym + 0.16, "y: {0}".format(t[1]), fontsize=9, color="#2b2b2b"
|
|
662
|
+
)
|
|
663
|
+
)
|
|
664
|
+
text.append(
|
|
665
|
+
fig.text(
|
|
666
|
+
0.03, 1 - ym + 0.12, "z: {0}".format(t[2]), fontsize=9, color="#2b2b2b"
|
|
667
|
+
)
|
|
668
|
+
)
|
|
669
|
+
text.append(
|
|
670
|
+
fig.text(
|
|
671
|
+
0.15, 1 - ym + 0.20, "r: {0}".format(r[0]), fontsize=9, color="#2b2b2b"
|
|
672
|
+
)
|
|
673
|
+
)
|
|
674
|
+
text.append(
|
|
675
|
+
fig.text(
|
|
676
|
+
0.15, 1 - ym + 0.16, "p: {0}".format(r[1]), fontsize=9, color="#2b2b2b"
|
|
677
|
+
)
|
|
678
|
+
)
|
|
679
|
+
text.append(
|
|
680
|
+
fig.text(
|
|
681
|
+
0.15, 1 - ym + 0.12, "y: {0}".format(r[2]), fontsize=9, color="#2b2b2b"
|
|
682
|
+
)
|
|
683
|
+
)
|
|
684
|
+
fig.text(
|
|
685
|
+
0.02,
|
|
686
|
+
1 - ym + 0.06,
|
|
687
|
+
"Joint angles",
|
|
688
|
+
fontsize=9,
|
|
689
|
+
weight="bold",
|
|
690
|
+
color="#4f4f4f",
|
|
691
|
+
)
|
|
692
|
+
|
|
693
|
+
for j in range(robot.n):
|
|
694
|
+
ymin = (1 - ym) - j * yh
|
|
695
|
+
ax = fig.add_axes([x1, ymin, x2, 0.03], facecolor="#dbdbdb")
|
|
696
|
+
self.axjoint.append(ax)
|
|
697
|
+
|
|
698
|
+
if robot.isrevolute(j):
|
|
699
|
+
slider = Slider(
|
|
700
|
+
ax=ax,
|
|
701
|
+
label="q" + str(j),
|
|
702
|
+
valmin=qlim[0, j],
|
|
703
|
+
valmax=qlim[1, j],
|
|
704
|
+
valinit=np.degrees(q[j]),
|
|
705
|
+
valfmt="% .1f°",
|
|
706
|
+
)
|
|
707
|
+
else:
|
|
708
|
+
slider = Slider(
|
|
709
|
+
ax=ax,
|
|
710
|
+
label="q" + str(j),
|
|
711
|
+
valmin=qlim[0, j],
|
|
712
|
+
valmax=qlim[1, j],
|
|
713
|
+
valinit=robot.q[j],
|
|
714
|
+
valfmt="% .1f",
|
|
715
|
+
)
|
|
716
|
+
|
|
717
|
+
slider.on_changed(lambda x: update(x, text, robot))
|
|
718
|
+
self.sjoint.append(slider)
|
|
719
|
+
robot.q = q
|
|
720
|
+
self.step()
|
|
721
|
+
|
|
722
|
+
|
|
723
|
+
def _isnotebook():
|
|
724
|
+
"""
|
|
725
|
+
Determine if code is being run from a Jupyter notebook or JupyterLite
|
|
726
|
+
|
|
727
|
+
``_isnotebook`` is True if running Jupyter notebook, JupyterLite, or similar, else False
|
|
728
|
+
|
|
729
|
+
:references:
|
|
730
|
+
|
|
731
|
+
- https://stackoverflow.com/questions/15411967/how-can-i-check-if-code-
|
|
732
|
+
is-executed-in-the-ipython-notebook/39662359#39662359
|
|
733
|
+
"""
|
|
734
|
+
import sys
|
|
735
|
+
|
|
736
|
+
# Check if running in Pyodide/JupyterLite
|
|
737
|
+
if sys.platform == "emscripten":
|
|
738
|
+
return True
|
|
739
|
+
|
|
740
|
+
# Fall back to checking IPython shell type
|
|
741
|
+
try:
|
|
742
|
+
shell = get_ipython().__class__.__name__
|
|
743
|
+
if shell == "ZMQInteractiveShell":
|
|
744
|
+
return True # Jupyter notebook or qtconsole
|
|
745
|
+
elif shell == "TerminalInteractiveShell":
|
|
746
|
+
return False # Terminal running IPython
|
|
747
|
+
else:
|
|
748
|
+
return False # Other type (?)
|
|
749
|
+
except NameError:
|
|
750
|
+
return False # Probably standard Python interpreter
|
|
751
|
+
|
|
752
|
+
|
|
753
|
+
def _resolve_render_mode(render_mode=None):
|
|
754
|
+
if render_mode is not None:
|
|
755
|
+
if render_mode not in ["window", "notebook-widget", "notebook-inline"]:
|
|
756
|
+
raise ValueError(
|
|
757
|
+
"render_mode must be one of 'window', "
|
|
758
|
+
"'notebook-widget', or 'notebook-inline'"
|
|
759
|
+
)
|
|
760
|
+
return render_mode
|
|
761
|
+
|
|
762
|
+
if not _isnotebook():
|
|
763
|
+
return "window"
|
|
764
|
+
|
|
765
|
+
backend = matplotlib.get_backend().lower()
|
|
766
|
+
if "ipympl" in backend or "widget" in backend or "nbagg" in backend:
|
|
767
|
+
return "notebook-widget"
|
|
768
|
+
|
|
769
|
+
return "notebook-inline"
|