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,455 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Python Bug Planner
|
|
3
|
+
@Author: Peter Corke, original MATLAB code and Python version
|
|
4
|
+
@Author: Kristian Gibson, initial MATLAB port
|
|
5
|
+
"""
|
|
6
|
+
# from numpy import disp
|
|
7
|
+
# from scipy import integrate
|
|
8
|
+
|
|
9
|
+
# from spatialmath.pose2d import SE2
|
|
10
|
+
from spatialmath import base
|
|
11
|
+
from spatialmath.base.animate import *
|
|
12
|
+
from scipy.ndimage import *
|
|
13
|
+
|
|
14
|
+
# from matplotlib import cm
|
|
15
|
+
import matplotlib.pyplot as plt
|
|
16
|
+
|
|
17
|
+
# from matplotlib import animation
|
|
18
|
+
from roboticstoolbox.mobile.PlannerBase import PlannerBase
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class Bug2(PlannerBase):
|
|
22
|
+
"""
|
|
23
|
+
Construct a Bug2 reactive navigator
|
|
24
|
+
|
|
25
|
+
:param occgrid: occupancy grid
|
|
26
|
+
:type occgrid: :class:`OccGrid` instance or ndarray(N,M)
|
|
27
|
+
:param kwargs: common arguments for :class:`PlannerBase` superclass
|
|
28
|
+
:return: Bug2 reactive navigator
|
|
29
|
+
:rtype: Bug2 instance
|
|
30
|
+
|
|
31
|
+
Creates an object which simulates an automaton, capable of omnidirectional
|
|
32
|
+
motion, finding a path across an occupancy grid using only a bump sensor.
|
|
33
|
+
|
|
34
|
+
:reference: "Path-Planning Strategies for a Point Mobile Automaton Moving
|
|
35
|
+
Amidst Unknown Obstacles of Arbitrary Shape", Lumelsky and Stepanov,
|
|
36
|
+
Algorithmica (1987)2, pp.403-430
|
|
37
|
+
|
|
38
|
+
.. note:: This class is not a planner, even though it subclasses
|
|
39
|
+
:class:`PlannerBase`. It can produce very inefficient paths.
|
|
40
|
+
|
|
41
|
+
:author: Kristian Gibson and Peter Corke, based on MATLAB version by Peter Corke
|
|
42
|
+
:seealso: :class:`PlannerBase`
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
def __init__(self, **kwargs):
|
|
46
|
+
super().__init__(ndims=2, **kwargs)
|
|
47
|
+
|
|
48
|
+
self.H = [] # hit points
|
|
49
|
+
self._j = 0
|
|
50
|
+
self._step = 1
|
|
51
|
+
self._m_line = None
|
|
52
|
+
self._edge = None
|
|
53
|
+
self._k = None
|
|
54
|
+
|
|
55
|
+
@property
|
|
56
|
+
def m_line(self):
|
|
57
|
+
"""
|
|
58
|
+
Get m-line
|
|
59
|
+
|
|
60
|
+
:return: m-line in homogeneous form
|
|
61
|
+
:rtype: ndarray(3)
|
|
62
|
+
|
|
63
|
+
This is the m-line computed for the last :meth:`run`.
|
|
64
|
+
"""
|
|
65
|
+
return self._m_line
|
|
66
|
+
|
|
67
|
+
# override query method of base class
|
|
68
|
+
def run(
|
|
69
|
+
self,
|
|
70
|
+
start=None,
|
|
71
|
+
goal=None,
|
|
72
|
+
animate=False,
|
|
73
|
+
pause=0.001,
|
|
74
|
+
trail=True,
|
|
75
|
+
movie=None,
|
|
76
|
+
**kwargs,
|
|
77
|
+
):
|
|
78
|
+
"""
|
|
79
|
+
Find a path using Bug2 reactive navigation algorithm
|
|
80
|
+
|
|
81
|
+
:param start: starting position
|
|
82
|
+
:type start: array_like(2)
|
|
83
|
+
:param goal: goal position
|
|
84
|
+
:type goal: array_like(2)
|
|
85
|
+
:param animate: show animation of robot moving over the map,
|
|
86
|
+
defaults to False
|
|
87
|
+
:type animate: bool, optional
|
|
88
|
+
:param movie: save animation as a movie, defaults to None. Is either
|
|
89
|
+
name of movie or a tuple (filename, frame interval)
|
|
90
|
+
:type movie: str or tuple(str, float), optional
|
|
91
|
+
:param trail: show the path followed by the robot, defaults to True
|
|
92
|
+
:type current: bool, optional
|
|
93
|
+
:return: path from ``start`` to ``goal``
|
|
94
|
+
:rtype: ndarray(2,N)
|
|
95
|
+
|
|
96
|
+
Compute the path from ``start`` to ``goal`` assuming the robot is capable
|
|
97
|
+
of 8-way motion from its current cell to the next.
|
|
98
|
+
|
|
99
|
+
.. note:: ``start`` and ``goal`` are given as (x,y) coordinates in the
|
|
100
|
+
occupancy grid map, not as matrix row and column coordinates.
|
|
101
|
+
|
|
102
|
+
:seealso: :meth:`Bug2.plot`
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
# make sure start and goal are set and valid
|
|
106
|
+
# super().query(start=start, goal=goal, dtype=np.int, **kwargs)
|
|
107
|
+
# make sure start and goal are set and valid
|
|
108
|
+
self.start = self.validate_endpoint(start, dtype=int)
|
|
109
|
+
self.goal = self.validate_endpoint(goal, dtype=int)
|
|
110
|
+
|
|
111
|
+
# compute the m-line
|
|
112
|
+
# create homogeneous representation of the line
|
|
113
|
+
# line*[x y 1]' = 0
|
|
114
|
+
self._m_line = hom_line(self.start, self.goal)
|
|
115
|
+
|
|
116
|
+
if movie is not None:
|
|
117
|
+
animate = True
|
|
118
|
+
|
|
119
|
+
if animate:
|
|
120
|
+
self.plot()
|
|
121
|
+
self.plot_m_line()
|
|
122
|
+
plt.pause(0.05)
|
|
123
|
+
|
|
124
|
+
# movie = MovieWriter(movie)
|
|
125
|
+
|
|
126
|
+
robot = self.start
|
|
127
|
+
self._step = 1
|
|
128
|
+
path = robot
|
|
129
|
+
h = None
|
|
130
|
+
|
|
131
|
+
(trail_line,) = plt.plot(0, 0, "y.", label="robot path")
|
|
132
|
+
(trailHead,) = plt.plot(0, 0, "ko", zorder=10)
|
|
133
|
+
|
|
134
|
+
# iterate using the next() method until we reach the goal
|
|
135
|
+
while True:
|
|
136
|
+
if animate:
|
|
137
|
+
trailHead.set_data(robot[0], robot[1])
|
|
138
|
+
if trail:
|
|
139
|
+
trail_line.set_data(path.T)
|
|
140
|
+
|
|
141
|
+
if pause > 0:
|
|
142
|
+
plt.pause(pause)
|
|
143
|
+
# plt.draw()
|
|
144
|
+
# plt.show(block=False)
|
|
145
|
+
# plt.gcf().canvas.flush_events()
|
|
146
|
+
|
|
147
|
+
# movie.add()
|
|
148
|
+
|
|
149
|
+
# move to next point on path
|
|
150
|
+
robot = self.next(robot)
|
|
151
|
+
|
|
152
|
+
# # have we been here before, ie. in a loop
|
|
153
|
+
# if any([all(robot == x) for x in path]):
|
|
154
|
+
# raise RuntimeError('trapped')
|
|
155
|
+
|
|
156
|
+
# are we there yet?
|
|
157
|
+
if robot is None:
|
|
158
|
+
break
|
|
159
|
+
else:
|
|
160
|
+
path = np.vstack((path, robot))
|
|
161
|
+
|
|
162
|
+
# movie.done()
|
|
163
|
+
if animate:
|
|
164
|
+
trailHead.remove()
|
|
165
|
+
|
|
166
|
+
return path
|
|
167
|
+
|
|
168
|
+
def plot_m_line(self, ls=None):
|
|
169
|
+
"""
|
|
170
|
+
Plot m-line
|
|
171
|
+
|
|
172
|
+
:param ls: linestyle, defaults to ``"k--"``
|
|
173
|
+
:type ls: str, optional
|
|
174
|
+
|
|
175
|
+
Plots the m-line on the current axes.
|
|
176
|
+
"""
|
|
177
|
+
if ls is None:
|
|
178
|
+
ls = "k--"
|
|
179
|
+
|
|
180
|
+
x_min, x_max = plt.gca().get_xlim()
|
|
181
|
+
y_min, y_max = plt.gca().get_ylim()
|
|
182
|
+
if self._m_line[1] == 0:
|
|
183
|
+
# handle the case that the line is vertical
|
|
184
|
+
plt.plot(
|
|
185
|
+
[self._start[0], self._start[0]], [y_min, y_max], "k--", label="m-line"
|
|
186
|
+
)
|
|
187
|
+
else:
|
|
188
|
+
# regular line
|
|
189
|
+
x = np.array([[x_min, 1], [x_max, 1]])
|
|
190
|
+
y = -x @ np.r_[self._m_line[0], self._m_line[2]]
|
|
191
|
+
y = y / self._m_line[1]
|
|
192
|
+
plt.plot([x_min, x_max], y, ls, zorder=10, label="m-line")
|
|
193
|
+
|
|
194
|
+
def next(self, position):
|
|
195
|
+
"""
|
|
196
|
+
One step of the finite state automaton
|
|
197
|
+
|
|
198
|
+
:param position: current robot position
|
|
199
|
+
:type position: ndarray(2)
|
|
200
|
+
:raises RuntimeError: robot is trapped
|
|
201
|
+
:return: next robot position
|
|
202
|
+
:rtype: ndarray(2)
|
|
203
|
+
"""
|
|
204
|
+
|
|
205
|
+
l = None
|
|
206
|
+
y = None
|
|
207
|
+
|
|
208
|
+
if all(self._goal == position):
|
|
209
|
+
return None # we have arrived
|
|
210
|
+
|
|
211
|
+
if self._step == 1:
|
|
212
|
+
# Step 1. Move along the M-line toward the goal
|
|
213
|
+
self.message(f"{position}: moving along the M-line (step 1)")
|
|
214
|
+
# motion on line toward goal
|
|
215
|
+
d = self._goal - position
|
|
216
|
+
if abs(d[0]) > abs(d[1]):
|
|
217
|
+
# line slope less than 45 deg
|
|
218
|
+
dx = 1 if d[0] >= 0 else -1 # np.sign(d[0])
|
|
219
|
+
l = self._m_line
|
|
220
|
+
y = -((position[0] + dx) * l[0] + l[2]) / l[1]
|
|
221
|
+
dy = int(round(y - position[1]))
|
|
222
|
+
else:
|
|
223
|
+
# line slope greater than 45 deg
|
|
224
|
+
dy = 1 if d[1] >= 0 else -1 # np.sign(d[1])
|
|
225
|
+
l = self._m_line
|
|
226
|
+
x = -((position[1] + dy) * l[1] + l[2]) / l[0]
|
|
227
|
+
dx = int(round(x - position[0]))
|
|
228
|
+
|
|
229
|
+
# detect if next step is an obstacle
|
|
230
|
+
if self.isoccupied(position + np.r_[dx, dy]):
|
|
231
|
+
self.message(f" {position}: obstacle at {position + np.r_[dx, dy]}")
|
|
232
|
+
self.H.append(position) # save hit point
|
|
233
|
+
self._step = 2 # transition to step 2
|
|
234
|
+
self.message(f" {position}: change to step 2")
|
|
235
|
+
|
|
236
|
+
# get a list of all the points around the obstacle
|
|
237
|
+
self._edge, _ = edgelist(self.occgrid.grid == 0, position)
|
|
238
|
+
self._k = 0
|
|
239
|
+
else:
|
|
240
|
+
n = position + np.array([dx, dy])
|
|
241
|
+
|
|
242
|
+
if self._step == 2:
|
|
243
|
+
# Step 2. Move around the obstacle until we reach a point
|
|
244
|
+
# on the M-line closer than when we started.
|
|
245
|
+
|
|
246
|
+
self.message(f"{position}: moving around the obstacle (step 2)")
|
|
247
|
+
if self._k < len(self._edge):
|
|
248
|
+
n = self._edge[self._k] # next edge point
|
|
249
|
+
else:
|
|
250
|
+
# we are at the end of the list of edge points, we
|
|
251
|
+
# are back where we started. Step 2.c test.
|
|
252
|
+
plt.show(block=True)
|
|
253
|
+
raise RuntimeError("robot is trapped")
|
|
254
|
+
|
|
255
|
+
# are we on the M-line now ?
|
|
256
|
+
if abs(np.inner(np.r_[position, 1], self._m_line)) <= 0.5:
|
|
257
|
+
self.message(f" {position}: crossed the M-line")
|
|
258
|
+
|
|
259
|
+
# are we closer than when we encountered the obstacle?
|
|
260
|
+
if base.norm(position - self._goal) < base.norm(
|
|
261
|
+
self.H[-1] - self._goal
|
|
262
|
+
):
|
|
263
|
+
self._step = 1 # transition to step 1
|
|
264
|
+
self.message(f" {position}: change to step 1")
|
|
265
|
+
return n
|
|
266
|
+
|
|
267
|
+
# no, keep going around
|
|
268
|
+
self._k += 1
|
|
269
|
+
|
|
270
|
+
return n
|
|
271
|
+
|
|
272
|
+
def query(self):
|
|
273
|
+
raise NotImplementedError("This class has no query method")
|
|
274
|
+
|
|
275
|
+
def plan(self):
|
|
276
|
+
raise NotImplementedError("This class has no plan method")
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
# Ported from Peter Corke's edgelist function found:
|
|
280
|
+
# https://github.com/petercorke/toolbox-common-matlab/blob/master/edgelist.m
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
# these are directions of 8-neighbours in a clockwise direction
|
|
284
|
+
# fmt: off
|
|
285
|
+
_dirs = np.array([
|
|
286
|
+
[-1, 0],
|
|
287
|
+
[-1, 1],
|
|
288
|
+
[ 0, 1],
|
|
289
|
+
[ 1, 1],
|
|
290
|
+
[ 1, 0],
|
|
291
|
+
[ 1, -1],
|
|
292
|
+
[ 0, -1],
|
|
293
|
+
[-1, -1],
|
|
294
|
+
])
|
|
295
|
+
# fmt: on
|
|
296
|
+
def edgelist(im, p, direction=1):
|
|
297
|
+
"""
|
|
298
|
+
Find edge of a region
|
|
299
|
+
|
|
300
|
+
:param im: binary image
|
|
301
|
+
:type im: ndarray(h,w,int)
|
|
302
|
+
:param p: initial point
|
|
303
|
+
:type p: array_like(2)
|
|
304
|
+
:param direction: direction to traverse region, +1 clockwise [default], -1
|
|
305
|
+
counter-clockwise
|
|
306
|
+
:type direction: int, optional
|
|
307
|
+
:raises ValueError: initial point is not on the edge
|
|
308
|
+
:raises RuntimeError: not able to find path to the goal
|
|
309
|
+
:return: edge list, direction vector list
|
|
310
|
+
:rtype: tuple of lists
|
|
311
|
+
|
|
312
|
+
``edge, dirs = edgelist(im, seed)`` is the boundary/contour/edge of a region
|
|
313
|
+
in the binary image ``im``. ``seed=[X,Y]`` is the coordinate of a point on
|
|
314
|
+
the edge of the region of interest, but belonging to the region.
|
|
315
|
+
|
|
316
|
+
``edge`` is a list of coordinates (2) of edge pixels of a region in theThe
|
|
317
|
+
elements of the edgelist are NumPy ndarray(2).
|
|
318
|
+
|
|
319
|
+
``dirs`` is a list of integers representing the direction of the edge from
|
|
320
|
+
the corresponding point in ``edge`` to the next point in ``edge``. The
|
|
321
|
+
integers in the range 0 to 7 represent directions: W SW S SE E NW N NW
|
|
322
|
+
respectively.
|
|
323
|
+
|
|
324
|
+
- Coordinates are given and returned assuming the matrix is an image, so the
|
|
325
|
+
indices are always in the form (x,y) or (column,row).
|
|
326
|
+
- ``im` is a binary image where 0 is assumed to be background, non-zero
|
|
327
|
+
is an object.
|
|
328
|
+
- ``p`` must be a point on the edge of the region.
|
|
329
|
+
- The initial point is always the first and last element of the returned edgelist.
|
|
330
|
+
- 8-direction chain coding can give incorrect results when used with
|
|
331
|
+
blobs founds using 4-way connectivty.
|
|
332
|
+
|
|
333
|
+
:Reference:
|
|
334
|
+
|
|
335
|
+
- METHODS TO ESTIMATE AREAS AND PERIMETERS OF BLOB-LIKE OBJECTS: A COMPARISON
|
|
336
|
+
Luren Yang, Fritz Albregtsen, Tor Lgnnestad and Per Grgttum
|
|
337
|
+
IAPR Workshop on Machine Vision Applications Dec. 13-15, 1994, Kawasaki
|
|
338
|
+
|
|
339
|
+
"""
|
|
340
|
+
p = base.getvector(p, 2, dtype=int)
|
|
341
|
+
if direction > 0:
|
|
342
|
+
neighbours = np.arange(start=0, stop=8, step=1)
|
|
343
|
+
else:
|
|
344
|
+
neighbours = np.arange(start=7, stop=-1, step=-1)
|
|
345
|
+
|
|
346
|
+
try:
|
|
347
|
+
pix0 = im[p[1], p[0]] # color of pixel we start at
|
|
348
|
+
except:
|
|
349
|
+
raise ValueError("specified coordinate is not within image")
|
|
350
|
+
|
|
351
|
+
q = adjacent_point(im, p, pix0)
|
|
352
|
+
|
|
353
|
+
# find an adjacent point outside the blob
|
|
354
|
+
if q is None:
|
|
355
|
+
raise ValueError("no neighbour outside the blob")
|
|
356
|
+
|
|
357
|
+
d = None
|
|
358
|
+
e = [p] # initialize the edge list
|
|
359
|
+
dir = [] # initialize the direction list
|
|
360
|
+
p0 = None
|
|
361
|
+
|
|
362
|
+
while True:
|
|
363
|
+
# find which direction is Q
|
|
364
|
+
dq = q - p
|
|
365
|
+
for kq in range(0, 8):
|
|
366
|
+
# get index of neighbour's direction in range [1,8]
|
|
367
|
+
if np.all(dq == _dirs[kq]):
|
|
368
|
+
break
|
|
369
|
+
|
|
370
|
+
# now test for directions relative to Q
|
|
371
|
+
for j in neighbours:
|
|
372
|
+
# get index of neighbour's direction in range [1,8]
|
|
373
|
+
k = (j + kq) % 8
|
|
374
|
+
# if k > 7:
|
|
375
|
+
# k = k - 7
|
|
376
|
+
|
|
377
|
+
# compute coordinate of the k'th neighbour
|
|
378
|
+
nk = p + _dirs[k]
|
|
379
|
+
|
|
380
|
+
try:
|
|
381
|
+
if im[nk[1], nk[0]] == pix0:
|
|
382
|
+
# if this neighbour is in the blob it is the next edge pixel
|
|
383
|
+
p = nk
|
|
384
|
+
break
|
|
385
|
+
except:
|
|
386
|
+
raise ValueError("Something went wrong calculating edgelist")
|
|
387
|
+
|
|
388
|
+
q = nk
|
|
389
|
+
|
|
390
|
+
dir.append(k)
|
|
391
|
+
# check if we are back where we started
|
|
392
|
+
if p0 is None:
|
|
393
|
+
p0 = p # make a note of where we started
|
|
394
|
+
else:
|
|
395
|
+
if all(p == p0):
|
|
396
|
+
break
|
|
397
|
+
|
|
398
|
+
# keep going, add this point to the edgelist
|
|
399
|
+
e.append(p)
|
|
400
|
+
|
|
401
|
+
return e, dir
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
# Ported from Peter Corke's adjacent_point function found:
|
|
405
|
+
# https://github.com/petercorke/toolbox-common-matlab/blob/master/edgelist.m
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
def adjacent_point(im, seed, pix0):
|
|
409
|
+
"""Find adjacent point
|
|
410
|
+
|
|
411
|
+
:param im: occupancy grid
|
|
412
|
+
:type im: ndarray(m,n)
|
|
413
|
+
:param seed: initial point
|
|
414
|
+
:type seed: ndarray(2)
|
|
415
|
+
:param pix0: value of occupancy grid at ``seed`` coordinate
|
|
416
|
+
:type pix0: int
|
|
417
|
+
:return: coordinate of a neighbour
|
|
418
|
+
:rtype: ndarray(2) or None
|
|
419
|
+
|
|
420
|
+
Is a neighbouring point of the coordinate ``seed`` that is not within the
|
|
421
|
+
region containing the coordinate ``seed``, ie. it is a neighbour but
|
|
422
|
+
outside.
|
|
423
|
+
"""
|
|
424
|
+
p = None
|
|
425
|
+
|
|
426
|
+
for d in _dirs:
|
|
427
|
+
p = seed + d
|
|
428
|
+
try:
|
|
429
|
+
if im[p[1], p[0]] != pix0:
|
|
430
|
+
return p
|
|
431
|
+
except:
|
|
432
|
+
pass
|
|
433
|
+
|
|
434
|
+
return None
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
# Implementation of Peter Corke's matlab homline function from:
|
|
438
|
+
# https://github.com/petercorke/spatialmath-matlab/blob/master/homline.m
|
|
439
|
+
def hom_line(p1, p2):
|
|
440
|
+
line = np.cross(np.r_[p1[0], p1[1], 1], np.r_[p2[0], p2[1], 1])
|
|
441
|
+
|
|
442
|
+
# normalize so that the result of x*l' is the pixel distance
|
|
443
|
+
# from the line
|
|
444
|
+
return line / np.linalg.norm(line[0:2])
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
if __name__ == "__main__":
|
|
448
|
+
from roboticstoolbox import rtb_load_matfile
|
|
449
|
+
|
|
450
|
+
vars = rtb_load_matfile("data/map1.mat")
|
|
451
|
+
map = vars["map"]
|
|
452
|
+
|
|
453
|
+
bug2 = Bug2(occgrid=map)
|
|
454
|
+
# bug.plan()
|
|
455
|
+
path = bug2.run([20, 10], [50, 35], animate=True)
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import math
|
|
2
|
+
import scipy.integrate
|
|
3
|
+
import scipy.optimize
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
# import matplotlib.pyplot as plt
|
|
7
|
+
from collections import namedtuple
|
|
8
|
+
from roboticstoolbox.mobile import *
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def solvepath(x, q0=[0, 0, 0], **kwargs):
|
|
12
|
+
# x[:4] is 4 coeffs of curvature polynomial
|
|
13
|
+
# x[4] is total path length
|
|
14
|
+
# q0 is initial state of the vehicle
|
|
15
|
+
maxcurvature = 0
|
|
16
|
+
|
|
17
|
+
def dotfunc(s, q, poly):
|
|
18
|
+
# q = (x, y, θ)
|
|
19
|
+
# qdot = (cosθ, sinθ, ϰ)
|
|
20
|
+
k = poly[0] * s**3 + poly[1] * s**2 + poly[2] * s + poly[3]
|
|
21
|
+
# k = ((poly[0] * s + poly[1]) * s + poly[2]) * s + poly[3]
|
|
22
|
+
|
|
23
|
+
# save maximum curvature for this path solution
|
|
24
|
+
nonlocal maxcurvature
|
|
25
|
+
maxcurvature = max(maxcurvature, abs(k))
|
|
26
|
+
|
|
27
|
+
theta = q[2]
|
|
28
|
+
return math.cos(theta), math.sin(theta), k
|
|
29
|
+
|
|
30
|
+
cpoly = x[:4]
|
|
31
|
+
s_f = x[4]
|
|
32
|
+
sol = scipy.integrate.solve_ivp(dotfunc, [0, s_f], q0, args=(cpoly,), **kwargs)
|
|
33
|
+
return sol.y, maxcurvature
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def xcurvature(x):
|
|
37
|
+
# inequality constraint function, must be non-negative
|
|
38
|
+
_, maxcurvature = solvepath(x, q0=(0, 0, 0))
|
|
39
|
+
return maxcurvature
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def costfunc(x, start, goal):
|
|
43
|
+
# final cost of path from start with params
|
|
44
|
+
# p[0:4] is polynomial: k0, a, b, c
|
|
45
|
+
# p[4] is s_f
|
|
46
|
+
|
|
47
|
+
# integrate the path for this curvature polynomial and length
|
|
48
|
+
# path is 3xN
|
|
49
|
+
path, _ = solvepath(x, q0=start)
|
|
50
|
+
|
|
51
|
+
# cost is configuration error at end of path
|
|
52
|
+
e = np.linalg.norm(path[:, -1] - np.r_[goal])
|
|
53
|
+
|
|
54
|
+
return e
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class CurvaturePolyPlanner(PlannerBase):
|
|
58
|
+
def __init__(self, curvature=None):
|
|
59
|
+
r"""
|
|
60
|
+
Continuous curvature path planner
|
|
61
|
+
|
|
62
|
+
:param curvature: , defaults to None
|
|
63
|
+
:type curvature: _type_, optional
|
|
64
|
+
|
|
65
|
+
================== ========================
|
|
66
|
+
Feature Capability
|
|
67
|
+
================== ========================
|
|
68
|
+
Plan :math:`\SE{2}`
|
|
69
|
+
Obstacle avoidance No
|
|
70
|
+
Curvature Continuous
|
|
71
|
+
Motion Forwards only
|
|
72
|
+
================== ========================
|
|
73
|
+
|
|
74
|
+
Example:
|
|
75
|
+
|
|
76
|
+
.. runblock:: pycon
|
|
77
|
+
|
|
78
|
+
>>> from roboticstoolbox import DubinsPlanner
|
|
79
|
+
>>> from math import pi
|
|
80
|
+
>>> planner = CurvaturePolyPlanner()
|
|
81
|
+
>>> path, status = planner.query(start=(0, 0, pi/2), goal=(1, 0, pi/2))
|
|
82
|
+
>>> print(path[:5,:])
|
|
83
|
+
>>> print(status)
|
|
84
|
+
"""
|
|
85
|
+
super().__init__(ndims=3)
|
|
86
|
+
self.curvature = curvature
|
|
87
|
+
|
|
88
|
+
def query(self, start, goal):
|
|
89
|
+
r"""
|
|
90
|
+
Find a path betwee two configurations
|
|
91
|
+
|
|
92
|
+
:param start: start configuration :math:`(x, y, \theta)`
|
|
93
|
+
:type start: array_like(3), optional
|
|
94
|
+
:param goal: goal configuration :math:`(x, y, \theta)`
|
|
95
|
+
:type goal: array_like(3), optional
|
|
96
|
+
:return: path and status
|
|
97
|
+
:rtype: ndarray(N,3), namedtuple
|
|
98
|
+
|
|
99
|
+
The path comprises points equally spaced at a distance of ``stepsize``.
|
|
100
|
+
|
|
101
|
+
The returned status value has elements:
|
|
102
|
+
|
|
103
|
+
+-------------------+-----------------------------------------------+
|
|
104
|
+
| Element | Description |
|
|
105
|
+
+-------------------+-----------------------------------------------+
|
|
106
|
+
| ``length`` | total path length |
|
|
107
|
+
+-------------------+-----------------------------------------------+
|
|
108
|
+
| ``maxcurvature`` | maximum curvature on path |
|
|
109
|
+
+-------------------+-----------------------------------------------+
|
|
110
|
+
| ``poly`` | curvature polynomial coefficients |
|
|
111
|
+
+-------------------+-----------------------------------------------+
|
|
112
|
+
|
|
113
|
+
"""
|
|
114
|
+
goal = np.r_[goal]
|
|
115
|
+
start = np.r_[start]
|
|
116
|
+
self._start = start
|
|
117
|
+
self._goal = goal
|
|
118
|
+
|
|
119
|
+
# initial estimate of path length is Euclidean distance
|
|
120
|
+
d = np.linalg.norm(goal[:2] - start[:2])
|
|
121
|
+
# state vector is kappa_0, a, b, c, s_f
|
|
122
|
+
|
|
123
|
+
if self.curvature is not None:
|
|
124
|
+
nlcontraints = (
|
|
125
|
+
scipy.optimize.NonlinearConstraint(xcurvature, 0, self.curvature),
|
|
126
|
+
)
|
|
127
|
+
else:
|
|
128
|
+
nlcontraints = ()
|
|
129
|
+
|
|
130
|
+
sol = scipy.optimize.minimize(
|
|
131
|
+
costfunc,
|
|
132
|
+
[0, 0, 0, 0, d],
|
|
133
|
+
constraints=nlcontraints,
|
|
134
|
+
bounds=[(None, None), (None, None), (None, None), (None, None), (d, None)],
|
|
135
|
+
args=(start, goal),
|
|
136
|
+
)
|
|
137
|
+
print(sol)
|
|
138
|
+
path, maxcurvature = solvepath(
|
|
139
|
+
sol.x, q0=start, dense_output=True, max_step=1e-2
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
status = namedtuple("CurvaturePolyStatus", ["length", "maxcurvature", "poly"])(
|
|
143
|
+
sol.x[4], maxcurvature, sol.x[:4]
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
return path.T, status
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
if __name__ == "__main__":
|
|
150
|
+
from math import pi
|
|
151
|
+
|
|
152
|
+
# start = (1, 1, pi/4)
|
|
153
|
+
# goal = (-3, -3, -pi/4)
|
|
154
|
+
# start = (0, 0, -pi/4)
|
|
155
|
+
# goal = (1, 2, pi/4)
|
|
156
|
+
|
|
157
|
+
start = (0, 0, pi / 2)
|
|
158
|
+
goal = (1, 0, pi / 2)
|
|
159
|
+
|
|
160
|
+
planner = CurvaturePolyPlanner()
|
|
161
|
+
path, status = planner.query(start, goal)
|
|
162
|
+
print("start", path[0, :])
|
|
163
|
+
print("goal", path[-1, :])
|
|
164
|
+
|
|
165
|
+
print(status)
|
|
166
|
+
planner.plot(path, block=True)
|
|
167
|
+
|
|
168
|
+
## attempt polynomial scaling, doesnt seem to work
|
|
169
|
+
# sf = status.s_f
|
|
170
|
+
# c = status.poly
|
|
171
|
+
# print(c)
|
|
172
|
+
|
|
173
|
+
# print(solvepath(np.r_[c, sf], start))
|
|
174
|
+
|
|
175
|
+
# for i in range(4):
|
|
176
|
+
# c[i] /= sf ** (3-i)
|
|
177
|
+
|
|
178
|
+
# print(solvepath(np.r_[c, 1], start))
|
|
179
|
+
# print(c)
|