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,349 @@
|
|
|
1
|
+
import math
|
|
2
|
+
from collections import namedtuple
|
|
3
|
+
|
|
4
|
+
import matplotlib.pyplot as plt
|
|
5
|
+
import numpy as np
|
|
6
|
+
from roboticstoolbox.mobile.PlannerBase import PlannerBase
|
|
7
|
+
|
|
8
|
+
# parameter
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
show_animation = True
|
|
12
|
+
|
|
13
|
+
# ======================================================================== #
|
|
14
|
+
|
|
15
|
+
# The following code is modified from Python Robotics
|
|
16
|
+
# https://github.com/AtsushiSakai/PythonRobotics/tree/master/PathPlanning
|
|
17
|
+
# Quintic Polynomial Planner
|
|
18
|
+
# Author: Atsushi Sakai
|
|
19
|
+
# Copyright (c) 2016 - 2022 Atsushi Sakai and other contributors: https://github.com/AtsushiSakai/PythonRobotics/contributors
|
|
20
|
+
# Released under the MIT license: https://github.com/AtsushiSakai/PythonRobotics/blob/master/LICENSE
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class _QuinticPolynomial:
|
|
24
|
+
def __init__(self, xs, vxs, axs, xe, vxe, axe, time):
|
|
25
|
+
# calc coefficient of quintic polynomial
|
|
26
|
+
# See jupyter notebook document for derivation of this equation.
|
|
27
|
+
self.a0 = xs
|
|
28
|
+
self.a1 = vxs
|
|
29
|
+
self.a2 = axs / 2.0
|
|
30
|
+
|
|
31
|
+
A = np.array(
|
|
32
|
+
[
|
|
33
|
+
[time**3, time**4, time**5],
|
|
34
|
+
[3 * time**2, 4 * time**3, 5 * time**4],
|
|
35
|
+
[6 * time, 12 * time**2, 20 * time**3],
|
|
36
|
+
]
|
|
37
|
+
)
|
|
38
|
+
b = np.array(
|
|
39
|
+
[
|
|
40
|
+
xe - self.a0 - self.a1 * time - self.a2 * time**2,
|
|
41
|
+
vxe - self.a1 - 2 * self.a2 * time,
|
|
42
|
+
axe - 2 * self.a2,
|
|
43
|
+
]
|
|
44
|
+
)
|
|
45
|
+
x = np.linalg.solve(A, b)
|
|
46
|
+
|
|
47
|
+
self.a3 = x[0]
|
|
48
|
+
self.a4 = x[1]
|
|
49
|
+
self.a5 = x[2]
|
|
50
|
+
|
|
51
|
+
def calc_point(self, t):
|
|
52
|
+
xt = (
|
|
53
|
+
self.a0
|
|
54
|
+
+ self.a1 * t
|
|
55
|
+
+ self.a2 * t**2
|
|
56
|
+
+ self.a3 * t**3
|
|
57
|
+
+ self.a4 * t**4
|
|
58
|
+
+ self.a5 * t**5
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
return xt
|
|
62
|
+
|
|
63
|
+
def calc_first_derivative(self, t):
|
|
64
|
+
xt = (
|
|
65
|
+
self.a1
|
|
66
|
+
+ 2 * self.a2 * t
|
|
67
|
+
+ 3 * self.a3 * t**2
|
|
68
|
+
+ 4 * self.a4 * t**3
|
|
69
|
+
+ 5 * self.a5 * t**4
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
return xt
|
|
73
|
+
|
|
74
|
+
def calc_second_derivative(self, t):
|
|
75
|
+
xt = 2 * self.a2 + 6 * self.a3 * t + 12 * self.a4 * t**2 + 20 * self.a5 * t**3
|
|
76
|
+
|
|
77
|
+
return xt
|
|
78
|
+
|
|
79
|
+
def calc_third_derivative(self, t):
|
|
80
|
+
xt = 6 * self.a3 + 24 * self.a4 * t + 60 * self.a5 * t**2
|
|
81
|
+
|
|
82
|
+
return xt
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def quintic_polynomials_planner(
|
|
86
|
+
sx, sy, syaw, sv, sa, gx, gy, gyaw, gv, ga, max_accel, max_jerk, dt, MIN_T, MAX_T
|
|
87
|
+
):
|
|
88
|
+
"""
|
|
89
|
+
quintic polynomial planner
|
|
90
|
+
|
|
91
|
+
input
|
|
92
|
+
s_x: start x position [m]
|
|
93
|
+
s_y: start y position [m]
|
|
94
|
+
s_yaw: start yaw angle [rad]
|
|
95
|
+
sa: start accel [m/ss]
|
|
96
|
+
gx: goal x position [m]
|
|
97
|
+
gy: goal y position [m]
|
|
98
|
+
gyaw: goal yaw angle [rad]
|
|
99
|
+
ga: goal accel [m/ss]
|
|
100
|
+
max_accel: maximum accel [m/ss]
|
|
101
|
+
max_jerk: maximum jerk [m/sss]
|
|
102
|
+
dt: time tick [s]
|
|
103
|
+
|
|
104
|
+
return
|
|
105
|
+
time: time result
|
|
106
|
+
rx: x position result list
|
|
107
|
+
ry: y position result list
|
|
108
|
+
ryaw: yaw angle result list
|
|
109
|
+
rv: velocity result list
|
|
110
|
+
ra: accel result list
|
|
111
|
+
|
|
112
|
+
"""
|
|
113
|
+
|
|
114
|
+
vxs = sv * math.cos(syaw)
|
|
115
|
+
vys = sv * math.sin(syaw)
|
|
116
|
+
vxg = gv * math.cos(gyaw)
|
|
117
|
+
vyg = gv * math.sin(gyaw)
|
|
118
|
+
|
|
119
|
+
axs = sa * math.cos(syaw)
|
|
120
|
+
ays = sa * math.sin(syaw)
|
|
121
|
+
axg = ga * math.cos(gyaw)
|
|
122
|
+
ayg = ga * math.sin(gyaw)
|
|
123
|
+
|
|
124
|
+
time, rx, ry, ryaw, rv, ra, rj = [], [], [], [], [], [], []
|
|
125
|
+
|
|
126
|
+
for T in np.arange(MIN_T, MAX_T, MIN_T):
|
|
127
|
+
xqp = _QuinticPolynomial(sx, vxs, axs, gx, vxg, axg, T)
|
|
128
|
+
yqp = _QuinticPolynomial(sy, vys, ays, gy, vyg, ayg, T)
|
|
129
|
+
|
|
130
|
+
time, rx, ry, ryaw, rv, ra, rj = [], [], [], [], [], [], []
|
|
131
|
+
|
|
132
|
+
for t in np.arange(0.0, T + dt, dt):
|
|
133
|
+
time.append(t)
|
|
134
|
+
rx.append(xqp.calc_point(t))
|
|
135
|
+
ry.append(yqp.calc_point(t))
|
|
136
|
+
|
|
137
|
+
vx = xqp.calc_first_derivative(t)
|
|
138
|
+
vy = yqp.calc_first_derivative(t)
|
|
139
|
+
v = np.hypot(vx, vy)
|
|
140
|
+
yaw = math.atan2(vy, vx)
|
|
141
|
+
rv.append(v)
|
|
142
|
+
ryaw.append(yaw)
|
|
143
|
+
|
|
144
|
+
ax = xqp.calc_second_derivative(t)
|
|
145
|
+
ay = yqp.calc_second_derivative(t)
|
|
146
|
+
a = np.hypot(ax, ay)
|
|
147
|
+
if len(rv) >= 2 and rv[-1] - rv[-2] < 0.0:
|
|
148
|
+
a *= -1
|
|
149
|
+
ra.append(a)
|
|
150
|
+
|
|
151
|
+
jx = xqp.calc_third_derivative(t)
|
|
152
|
+
jy = yqp.calc_third_derivative(t)
|
|
153
|
+
j = np.hypot(jx, jy)
|
|
154
|
+
if len(ra) >= 2 and ra[-1] - ra[-2] < 0.0:
|
|
155
|
+
j *= -1
|
|
156
|
+
rj.append(j)
|
|
157
|
+
|
|
158
|
+
if (
|
|
159
|
+
max([abs(i) for i in ra]) <= max_accel
|
|
160
|
+
and max([abs(i) for i in rj]) <= max_jerk
|
|
161
|
+
):
|
|
162
|
+
print("find path!!")
|
|
163
|
+
break
|
|
164
|
+
|
|
165
|
+
return time, np.c_[rx, ry, ryaw], rv, ra, rj
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
# ====================== RTB wrapper ============================= #
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
# Copyright (c) 2022 Peter Corke: https://github.com/petercorke/robotics-toolbox-python
|
|
172
|
+
# Released under the MIT license: https://github.com/AtsushiSakai/PythonRobotics/blob/master/LICENSE
|
|
173
|
+
class QuinticPolyPlanner(PlannerBase):
|
|
174
|
+
r"""
|
|
175
|
+
Quintic polynomial path planner
|
|
176
|
+
|
|
177
|
+
:param dt: time step, defaults to 0.1
|
|
178
|
+
:type dt: float, optional
|
|
179
|
+
:param start_vel: initial velocity, defaults to 0
|
|
180
|
+
:type start_vel: float, optional
|
|
181
|
+
:param start_acc: initial acceleration, defaults to 0
|
|
182
|
+
:type start_acc: float, optional
|
|
183
|
+
:param goal_vel: goal velocity, defaults to 0
|
|
184
|
+
:type goal_vel: float, optional
|
|
185
|
+
:param goal_acc: goal acceleration, defaults to 0
|
|
186
|
+
:type goal_acc: float, optional
|
|
187
|
+
:param max_acc: maximum acceleration, defaults to 1
|
|
188
|
+
:type max_acc: int, optional
|
|
189
|
+
:param max_jerk: maximum jerk, defaults to 0.5
|
|
190
|
+
:type min_t: float, optional
|
|
191
|
+
:param min_t: minimum path time, defaults to 5
|
|
192
|
+
:type max_t: float, optional
|
|
193
|
+
:param max_t: maximum path time, defaults to 100
|
|
194
|
+
:type max_jerk: float, optional
|
|
195
|
+
:return: Quintic polynomial path planner
|
|
196
|
+
:rtype: QuinticPolyPlanner instance
|
|
197
|
+
|
|
198
|
+
================== ========================
|
|
199
|
+
Feature Capability
|
|
200
|
+
================== ========================
|
|
201
|
+
Plan :math:`\SE{2}`
|
|
202
|
+
Obstacle avoidance No
|
|
203
|
+
Curvature Continuous
|
|
204
|
+
Motion Forwards only
|
|
205
|
+
================== ========================
|
|
206
|
+
|
|
207
|
+
Creates a planner that finds the path between two configurations in the
|
|
208
|
+
plane using forward motion only. The path is a continuous quintic polynomial
|
|
209
|
+
for x and y
|
|
210
|
+
|
|
211
|
+
.. math::
|
|
212
|
+
|
|
213
|
+
x(t) &= a_0 + a_1 t + a_2 t^2 + a_3 t^3 + a_4 t^4 + a_5 t^5 \\
|
|
214
|
+
y(t) &= b_0 + b_1 t + b_2 t^2 + b_3 t^3 + b_4 t^4 + b_5 t^5
|
|
215
|
+
|
|
216
|
+
that meets the given constraints. Trajectory time is given as a range.
|
|
217
|
+
|
|
218
|
+
:reference: "Local Path Planning And Motion Control For AGV In
|
|
219
|
+
Positioning", Takahashi, T. Hongo, Y. Ninomiya and G.
|
|
220
|
+
Sugimoto; Proceedings. IEEE/RSJ International Workshop on
|
|
221
|
+
Intelligent Robots and Systems (IROS '89) doi: 10.1109/IROS.1989.637936
|
|
222
|
+
|
|
223
|
+
.. note:: The path time is searched in the interval [``min_t``, ``max_t``] in steps
|
|
224
|
+
of ``min_t``.
|
|
225
|
+
|
|
226
|
+
Example:
|
|
227
|
+
|
|
228
|
+
.. runblock:: pycon
|
|
229
|
+
|
|
230
|
+
>>> from roboticstoolbox import QuinticPolyPlanner
|
|
231
|
+
>>> import numpy as np
|
|
232
|
+
>>> start = (10, 10, np.deg2rad(10.0))
|
|
233
|
+
>>> goal = (30, -10, np.deg2rad(20.0))
|
|
234
|
+
>>> quintic = QuinticPolyPlanner(start_vel=1)
|
|
235
|
+
>>> path, status = quintic.query(start, goal)
|
|
236
|
+
>>> print(path[:5,:])
|
|
237
|
+
|
|
238
|
+
:thanks: based on quintic polynomial planning from `Python Robotics <https://github.com/AtsushiSakai/PythonRobotics/tree/master/PathPlanning>`_
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
:seealso: :class:`Planner`
|
|
242
|
+
"""
|
|
243
|
+
|
|
244
|
+
def __init__(
|
|
245
|
+
self,
|
|
246
|
+
dt=0.1,
|
|
247
|
+
start_vel=0,
|
|
248
|
+
start_acc=0,
|
|
249
|
+
goal_vel=0,
|
|
250
|
+
goal_acc=0,
|
|
251
|
+
max_acc=1,
|
|
252
|
+
max_jerk=0.5,
|
|
253
|
+
min_t=5,
|
|
254
|
+
max_t=100,
|
|
255
|
+
):
|
|
256
|
+
|
|
257
|
+
super().__init__(ndims=3)
|
|
258
|
+
self.dt = dt
|
|
259
|
+
self.start_vel = start_vel
|
|
260
|
+
self.start_acc = start_acc
|
|
261
|
+
self.goal_vel = goal_vel
|
|
262
|
+
self.goal_acc = goal_acc
|
|
263
|
+
self.max_acc = max_acc
|
|
264
|
+
self.max_jerk = max_jerk
|
|
265
|
+
self.min_t = min_t
|
|
266
|
+
self.max_t = max_t
|
|
267
|
+
|
|
268
|
+
def query(self, start, goal):
|
|
269
|
+
r"""
|
|
270
|
+
Find a quintic polynomial path
|
|
271
|
+
|
|
272
|
+
:param start: start configuration :math:`(x, y, \theta)`
|
|
273
|
+
:type start: array_like(3), optional
|
|
274
|
+
:param goal: goal configuration :math:`(x, y, \theta)`
|
|
275
|
+
:type goal: array_like(3), optional
|
|
276
|
+
:return: path and status
|
|
277
|
+
:rtype: ndarray(N,3), namedtuple
|
|
278
|
+
|
|
279
|
+
The returned status value has elements:
|
|
280
|
+
|
|
281
|
+
========== ===================================================
|
|
282
|
+
Element Description
|
|
283
|
+
========== ===================================================
|
|
284
|
+
``t`` time to execute the path
|
|
285
|
+
``vel`` velocity profile along the path
|
|
286
|
+
``accel`` acceleration profile along the path
|
|
287
|
+
``jerk`` jerk profile along the path
|
|
288
|
+
========== ===================================================
|
|
289
|
+
|
|
290
|
+
:seealso: :meth:`Planner.query`
|
|
291
|
+
"""
|
|
292
|
+
self._start = start
|
|
293
|
+
self._goal = goal
|
|
294
|
+
|
|
295
|
+
time, path, v, a, j = quintic_polynomials_planner(
|
|
296
|
+
start[0],
|
|
297
|
+
start[1],
|
|
298
|
+
start[2],
|
|
299
|
+
self.start_vel,
|
|
300
|
+
self.start_acc,
|
|
301
|
+
goal[0],
|
|
302
|
+
goal[1],
|
|
303
|
+
goal[2],
|
|
304
|
+
self.start_vel,
|
|
305
|
+
self.start_acc,
|
|
306
|
+
self.max_acc,
|
|
307
|
+
self.max_jerk,
|
|
308
|
+
dt=self.dt,
|
|
309
|
+
MIN_T=self.min_t,
|
|
310
|
+
MAX_T=self.max_t,
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
status = namedtuple("QuinticPolyStatus", ["t", "vel", "acc", "jerk"])(
|
|
314
|
+
time, v, a, j
|
|
315
|
+
)
|
|
316
|
+
|
|
317
|
+
return path, status
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
if __name__ == "__main__":
|
|
321
|
+
from math import pi
|
|
322
|
+
|
|
323
|
+
start = (10, 10, np.deg2rad(10.0))
|
|
324
|
+
goal = (30, -10, np.deg2rad(20.0))
|
|
325
|
+
|
|
326
|
+
quintic = QuinticPolyPlanner(start_vel=1)
|
|
327
|
+
path, status = quintic.query(start, goal)
|
|
328
|
+
|
|
329
|
+
print(status)
|
|
330
|
+
quintic.plot(path)
|
|
331
|
+
|
|
332
|
+
plt.figure()
|
|
333
|
+
plt.subplot(311)
|
|
334
|
+
plt.plot(status.t, status.vel, "-r")
|
|
335
|
+
plt.ylabel("velocity (m/s)")
|
|
336
|
+
plt.grid(True)
|
|
337
|
+
|
|
338
|
+
plt.subplot(312)
|
|
339
|
+
plt.plot(status.t, status.acc, "-r")
|
|
340
|
+
plt.ylabel("accel (m/s2)")
|
|
341
|
+
plt.grid(True)
|
|
342
|
+
|
|
343
|
+
plt.subplot(313)
|
|
344
|
+
plt.plot(status.t, status.jerk, "-r")
|
|
345
|
+
plt.xlabel("Time (s)")
|
|
346
|
+
plt.ylabel("jerk (m/s3)")
|
|
347
|
+
plt.grid(True)
|
|
348
|
+
|
|
349
|
+
plt.show(block=True)
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
# ======================================================================== #
|
|
2
|
+
|
|
3
|
+
# The following code is based on code from Python Robotics
|
|
4
|
+
# https://github.com/AtsushiSakai/PythonRobotics/tree/master/PathPlanning
|
|
5
|
+
# RRTDubins planning
|
|
6
|
+
# Author: Atsushi Sakai
|
|
7
|
+
# Copyright (c) 2016 - 2022 Atsushi Sakai and other contributors: https://github.com/AtsushiSakai/PythonRobotics/contributors
|
|
8
|
+
# Released under the MIT license: https://github.com/AtsushiSakai/PythonRobotics/blob/master/LICENSE
|
|
9
|
+
|
|
10
|
+
import math
|
|
11
|
+
from collections import namedtuple
|
|
12
|
+
from roboticstoolbox.mobile.OccGrid import PolygonMap
|
|
13
|
+
|
|
14
|
+
# import rvcprint
|
|
15
|
+
from roboticstoolbox import *
|
|
16
|
+
import numpy as np
|
|
17
|
+
import matplotlib.pyplot as plt
|
|
18
|
+
|
|
19
|
+
from spatialmath import Polygon2, SE2, base
|
|
20
|
+
from roboticstoolbox.mobile.PlannerBase import PlannerBase
|
|
21
|
+
from roboticstoolbox.mobile.DubinsPlanner import DubinsPlanner
|
|
22
|
+
|
|
23
|
+
# from roboticstoolbox.mobile.OccupancyGrid import OccupancyGrid
|
|
24
|
+
try:
|
|
25
|
+
from pgraph import DGraph
|
|
26
|
+
except ImportError:
|
|
27
|
+
|
|
28
|
+
class DGraph: # pragma: no cover
|
|
29
|
+
def __init__(self, *args, **kwargs):
|
|
30
|
+
raise ImportError(
|
|
31
|
+
"RRTPlanner requires optional dependency 'pgraph'. "
|
|
32
|
+
"Install it with: pip install pgraph-python"
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class RRTPlanner(PlannerBase):
|
|
37
|
+
r"""
|
|
38
|
+
Rapidly exploring tree planner
|
|
39
|
+
|
|
40
|
+
:param map: occupancy grid
|
|
41
|
+
:type map: :class:`PolygonMap`
|
|
42
|
+
:param vehicle: vehicle kinematic model
|
|
43
|
+
:type vehicle: :class:`VehicleBase` subclass
|
|
44
|
+
:param curvature: maximum path curvature, defaults to 1.0
|
|
45
|
+
:type curvature: float, optional
|
|
46
|
+
:param stepsize: spacing between points on the path, defaults to 0.2
|
|
47
|
+
:type stepsize: float, optional
|
|
48
|
+
:param npoints: number of vertices in random tree, defaults to 50
|
|
49
|
+
:type npoints: int, optional
|
|
50
|
+
|
|
51
|
+
================== ========================
|
|
52
|
+
Feature Capability
|
|
53
|
+
================== ========================
|
|
54
|
+
Plan :math:`\SE{2}`
|
|
55
|
+
Obstacle avoidance Yes, polygons
|
|
56
|
+
Curvature Discontinuous
|
|
57
|
+
Motion Bidirectional
|
|
58
|
+
================== ========================
|
|
59
|
+
|
|
60
|
+
Creates a planner that finds the obstacle-free path between two
|
|
61
|
+
configurations in the plane using forward and backward motion. The path
|
|
62
|
+
comprises multiple Dubins curves comprising straight lines, or arcs with
|
|
63
|
+
curvature of :math:`\pm` ``curvature``. Motion along the segments may be in
|
|
64
|
+
the forward or backward direction.
|
|
65
|
+
|
|
66
|
+
Polygons are used for obstacle avoidance:
|
|
67
|
+
|
|
68
|
+
- the environment is defined by a set of polygons represented by a :class:`PolygonMap`
|
|
69
|
+
- the vehicle is defined by a single polygon specified by the ``polygon``
|
|
70
|
+
argument to its constructor
|
|
71
|
+
|
|
72
|
+
Example::
|
|
73
|
+
|
|
74
|
+
from roboticstoolbox import RRTPlanner
|
|
75
|
+
from spatialmath import Polygon2
|
|
76
|
+
from math import pi
|
|
77
|
+
|
|
78
|
+
# create polygonal obstacles
|
|
79
|
+
map = PolygonMap(workspace=[0, 10])
|
|
80
|
+
map.add([(5, 50), (5, 6), (6, 6), (6, 50)])
|
|
81
|
+
map.add([(5, 4), (5, -50), (6, -50), (6, 4)])
|
|
82
|
+
|
|
83
|
+
# create outline polygon for vehicle
|
|
84
|
+
l, w = 3, 1.5
|
|
85
|
+
vpolygon = Polygon2([(-l/2, w/2), (-l/2, -w/2), (l/2, -w/2), (l/2, w/2)])
|
|
86
|
+
|
|
87
|
+
# create vehicle model
|
|
88
|
+
vehicle = Bicycle(steer_max=1, L=2, polygon=vpolygon)
|
|
89
|
+
|
|
90
|
+
# create planner
|
|
91
|
+
rrt = RRTPlanner(map=map, vehicle=vehicle, npoints=50, seed=0)
|
|
92
|
+
# start and goal configuration
|
|
93
|
+
qs = (2, 8, -pi/2)
|
|
94
|
+
qg = (8, 2, -pi/2)
|
|
95
|
+
|
|
96
|
+
# plan path
|
|
97
|
+
rrt.plan(goal=qg)
|
|
98
|
+
path, status = rrt.query(start=qs)
|
|
99
|
+
print(path[:5,:])
|
|
100
|
+
print(status)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
:seealso: :class:`DubinsPlanner` :class:`Vehicle` :class:`PlannerBase`
|
|
104
|
+
"""
|
|
105
|
+
|
|
106
|
+
def __init__(
|
|
107
|
+
self,
|
|
108
|
+
map,
|
|
109
|
+
vehicle,
|
|
110
|
+
curvature=1.0,
|
|
111
|
+
stepsize=0.2,
|
|
112
|
+
npoints=50,
|
|
113
|
+
**kwargs,
|
|
114
|
+
):
|
|
115
|
+
super().__init__(ndims=2, **kwargs)
|
|
116
|
+
|
|
117
|
+
self.npoints = npoints
|
|
118
|
+
self.map = map
|
|
119
|
+
|
|
120
|
+
self.g = DGraph(metric="SE2")
|
|
121
|
+
|
|
122
|
+
self.vehicle = vehicle
|
|
123
|
+
if curvature is None:
|
|
124
|
+
if vehicle is not None:
|
|
125
|
+
curvature = vehicle.curvature_max
|
|
126
|
+
else:
|
|
127
|
+
curvature = 1
|
|
128
|
+
|
|
129
|
+
# print("curvature", curvature)
|
|
130
|
+
self.dubins = DubinsPlanner(curvature=curvature, stepsize=stepsize)
|
|
131
|
+
|
|
132
|
+
# self.goal_yaw_th = np.deg2rad(1.0)
|
|
133
|
+
# self.goal_xy_th = 0.5
|
|
134
|
+
|
|
135
|
+
def plan(self, goal, showsamples=True, showvalid=True, animate=False, block=None):
|
|
136
|
+
r"""
|
|
137
|
+
Plan paths to goal using RRT
|
|
138
|
+
|
|
139
|
+
:param goal: goal pose :math:`(x, y, \theta)`, defaults to previously set value
|
|
140
|
+
:type goal: array_like(3), optional
|
|
141
|
+
:param showsamples: display position part of configurations overlaid on the map, defaults to True
|
|
142
|
+
:type showsamples: bool, optional
|
|
143
|
+
:param showvalid: display valid configurations as vehicle polygons overlaid on the map, defaults to False
|
|
144
|
+
:type showvalid: bool, optional
|
|
145
|
+
:param animate: update the display as configurations are tested, defaults to False
|
|
146
|
+
:type animate: bool, optional
|
|
147
|
+
|
|
148
|
+
Compute a rapidly exploring random tree with its root at the ``goal``.
|
|
149
|
+
The tree will have ``npoints`` vertices spread uniformly randomly over
|
|
150
|
+
the workspace which is an attribute of the ``map``.
|
|
151
|
+
|
|
152
|
+
For every new point added, a Dubins path is computed to the nearest
|
|
153
|
+
vertex already in the graph. Each configuration on that path, with
|
|
154
|
+
spacing of ``stepsize``, is tested for obstacle intersection.
|
|
155
|
+
|
|
156
|
+
The configurations tested are displayed (translation only) if ``showsamples`` is
|
|
157
|
+
True. The valid configurations are displayed as vehicle polygones if ``showvalid``
|
|
158
|
+
is True. If ``animate`` is True these points are displayed during the search
|
|
159
|
+
process, otherwise a single figure is displayed at the end.
|
|
160
|
+
|
|
161
|
+
:seealso: :meth:`query`
|
|
162
|
+
"""
|
|
163
|
+
# TODO use validate
|
|
164
|
+
self.goal = np.r_[goal]
|
|
165
|
+
# self.goal = np.r_[goal]
|
|
166
|
+
self.random_init()
|
|
167
|
+
|
|
168
|
+
v = self.g.add_vertex(coord=goal)
|
|
169
|
+
v.path = None
|
|
170
|
+
|
|
171
|
+
if showsamples or showvalid:
|
|
172
|
+
self.map.plot()
|
|
173
|
+
|
|
174
|
+
self.progress_start(self.npoints)
|
|
175
|
+
count = 0
|
|
176
|
+
while count < self.npoints:
|
|
177
|
+
random_point = self.qrandom_free()
|
|
178
|
+
|
|
179
|
+
if showsamples:
|
|
180
|
+
plt.plot(random_point[0], random_point[1], "ok", markersize=2)
|
|
181
|
+
if animate:
|
|
182
|
+
plt.pause(0.02)
|
|
183
|
+
|
|
184
|
+
vnearest, d = self.g.closest(random_point)
|
|
185
|
+
|
|
186
|
+
if d > 6:
|
|
187
|
+
continue
|
|
188
|
+
path, pstatus = self.dubins.query(random_point, vnearest.coord)
|
|
189
|
+
if path is None:
|
|
190
|
+
continue
|
|
191
|
+
|
|
192
|
+
collision = False
|
|
193
|
+
for config in path:
|
|
194
|
+
if self.map.iscollision(self.vehicle.polygon(config)):
|
|
195
|
+
collision = True
|
|
196
|
+
break
|
|
197
|
+
if collision:
|
|
198
|
+
# print('collision')
|
|
199
|
+
continue
|
|
200
|
+
|
|
201
|
+
if pstatus.length > 6:
|
|
202
|
+
# print('too long')
|
|
203
|
+
continue
|
|
204
|
+
|
|
205
|
+
# we have a valid configuration to add to the graph
|
|
206
|
+
count += 1
|
|
207
|
+
self.progress_next()
|
|
208
|
+
|
|
209
|
+
# add new vertex to graph
|
|
210
|
+
vnew = self.g.add_vertex(random_point)
|
|
211
|
+
self.g.add_edge(vnew, vnearest, cost=pstatus.length)
|
|
212
|
+
vnew.path = path
|
|
213
|
+
|
|
214
|
+
if showvalid:
|
|
215
|
+
self.vehicle.polygon(random_point).plot(color="b", alpha=0.1)
|
|
216
|
+
if animate:
|
|
217
|
+
plt.pause(0.02)
|
|
218
|
+
|
|
219
|
+
if (showvalid or showsamples) and not animate:
|
|
220
|
+
if block is not None:
|
|
221
|
+
plt.show(block=block)
|
|
222
|
+
|
|
223
|
+
self.progress_end()
|
|
224
|
+
|
|
225
|
+
def query(self, start):
|
|
226
|
+
r"""
|
|
227
|
+
Find a path from start configuration
|
|
228
|
+
|
|
229
|
+
:param start: start configuration :math:`(x, y, \theta)`
|
|
230
|
+
:type start: array_like(3), optional
|
|
231
|
+
:return: path and status
|
|
232
|
+
:rtype: ndarray(N,3), namedtuple
|
|
233
|
+
|
|
234
|
+
The path comprises points equally spaced at a distance of ``stepsize``.
|
|
235
|
+
|
|
236
|
+
The returned status value has elements:
|
|
237
|
+
|
|
238
|
+
+---------------+---------------------------------------------------+
|
|
239
|
+
| Element | Description |
|
|
240
|
+
+---------------+---------------------------------------------------+
|
|
241
|
+
| ``length`` | total path length |
|
|
242
|
+
+-------------+-----------------------------------------------------+
|
|
243
|
+
| ``initial_d`` | distance from start to first vertex in graph |
|
|
244
|
+
+---------------+---------------------------------------------------+
|
|
245
|
+
| ``vertices`` | sequence of vertices in the graph |
|
|
246
|
+
+---------------+---------------------------------------------------+
|
|
247
|
+
|
|
248
|
+
"""
|
|
249
|
+
self._start = start
|
|
250
|
+
vstart, d = self.g.closest(start)
|
|
251
|
+
|
|
252
|
+
vpath, cost, _ = self.g.path_UCS(vstart, self.g[0])
|
|
253
|
+
|
|
254
|
+
print(vpath)
|
|
255
|
+
# stack the Dubins path segments
|
|
256
|
+
path = np.empty((0, 3))
|
|
257
|
+
for vertex in vpath:
|
|
258
|
+
if vertex.path is not None:
|
|
259
|
+
path = np.vstack((path, vertex.path))
|
|
260
|
+
|
|
261
|
+
status = namedtuple("RRTStatus", ["length", "initial_d", "vertices"])(
|
|
262
|
+
cost, d, vpath
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
return path, status
|
|
266
|
+
|
|
267
|
+
# def _generate_final_course(self, goal_ind):
|
|
268
|
+
# path = [[self.end.x, self.end.y]]
|
|
269
|
+
# node = self.node_list[goal_ind]
|
|
270
|
+
# while node.parent is not None:
|
|
271
|
+
# path.append([node.x, node.y])
|
|
272
|
+
# node = node.parent
|
|
273
|
+
# path.append([node.x, node.y])
|
|
274
|
+
|
|
275
|
+
# return path
|
|
276
|
+
|
|
277
|
+
# def _calc_dist_to_goal(self, x, y):
|
|
278
|
+
|
|
279
|
+
# dx = x - self.goal.x
|
|
280
|
+
# dy = y - self.end.y
|
|
281
|
+
# return math.hypot(dx, dy)
|
|
282
|
+
|
|
283
|
+
def qrandom(self):
|
|
284
|
+
r"""
|
|
285
|
+
Random configuration
|
|
286
|
+
|
|
287
|
+
:return: random configuration :math:`(x, y, \theta)`
|
|
288
|
+
:rtype: ndarray(3)
|
|
289
|
+
|
|
290
|
+
Returns a random configuration where position :math:`(x, y)`
|
|
291
|
+
lies within the bounds of the ``map`` associated with this planner.
|
|
292
|
+
|
|
293
|
+
:seealso: :meth:`qrandom_free`
|
|
294
|
+
"""
|
|
295
|
+
return self.random.uniform(
|
|
296
|
+
low=(self.map.workspace[0], self.map.workspace[2], -np.pi),
|
|
297
|
+
high=(self.map.workspace[1], self.map.workspace[3], np.pi),
|
|
298
|
+
)
|
|
299
|
+
|
|
300
|
+
def qrandom_free(self):
|
|
301
|
+
r"""
|
|
302
|
+
Random obstacle free configuration
|
|
303
|
+
|
|
304
|
+
:return: random configuration :math:`(x, y, \theta)`
|
|
305
|
+
:rtype: ndarray(3)
|
|
306
|
+
|
|
307
|
+
Returns a random obstacle free configuration where position :math:`(x,
|
|
308
|
+
y)` lies within the bounds of the ``map`` associated with this planner.
|
|
309
|
+
Iterates on :meth:`qrandom`
|
|
310
|
+
|
|
311
|
+
:seealso: :meth:`qrandom` :meth:`iscollision`
|
|
312
|
+
"""
|
|
313
|
+
# iterate for a random freespace configuration
|
|
314
|
+
while True:
|
|
315
|
+
q = self.qrandom()
|
|
316
|
+
if not self.iscollision(q):
|
|
317
|
+
return q
|
|
318
|
+
|
|
319
|
+
def iscollision(self, q):
|
|
320
|
+
r"""
|
|
321
|
+
Test if configuration is collision
|
|
322
|
+
|
|
323
|
+
:param q: vehicle configuration :math:`(x, y, \theta)`
|
|
324
|
+
:type q: array_like(3)
|
|
325
|
+
:return: collision status
|
|
326
|
+
:rtype: bool
|
|
327
|
+
|
|
328
|
+
Transforms the vehicle polygon and tests for intersection against
|
|
329
|
+
the polygonal obstacle map.
|
|
330
|
+
"""
|
|
331
|
+
return self.map.iscollision(self.vehicle.polygon(q))
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
if __name__ == "__main__":
|
|
335
|
+
from roboticstoolbox.mobile.Vehicle import Bicycle
|
|
336
|
+
|
|
337
|
+
# start and goal configuration
|
|
338
|
+
qs = (2, 8, -np.pi / 2)
|
|
339
|
+
qg = (8, 2, -np.pi / 2)
|
|
340
|
+
|
|
341
|
+
# obstacle map
|
|
342
|
+
map = PolygonMap(workspace=[0, 10])
|
|
343
|
+
map.add([(5, 50), (5, 6), (6, 6), (6, 50)])
|
|
344
|
+
# map.add([(5, 0), (6, 0), (6, 4), (5, 4)])
|
|
345
|
+
map.add([(5, 4), (5, -50), (6, -50), (6, 4)])
|
|
346
|
+
|
|
347
|
+
l = 3
|
|
348
|
+
w = 1.5
|
|
349
|
+
v0 = Polygon2([(-l / 2, w / 2), (-l / 2, -w / 2), (l / 2, -w / 2), (l / 2, w / 2)])
|
|
350
|
+
|
|
351
|
+
vehicle = Bicycle(steer_max=0.4, l=2, polygon=v0)
|
|
352
|
+
|
|
353
|
+
rrt = RRTPlanner(map=map, vehicle=vehicle, verbose=False, seed=0)
|
|
354
|
+
|
|
355
|
+
rrt.plan(goal=qg)
|
|
356
|
+
path, status = rrt.query(start=qs)
|
|
357
|
+
rrt.plot(path)
|
|
358
|
+
|
|
359
|
+
plt.show(block=True)
|