roboticstoolbox-python 1.3.0__cp313-cp313-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.cp313-win_amd64.pyd +0 -0
- roboticstoolbox/frne.cp313-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,771 @@
|
|
|
1
|
+
from abc import ABC
|
|
2
|
+
import numpy as np
|
|
3
|
+
import scipy as sp
|
|
4
|
+
from math import pi, sin, cos
|
|
5
|
+
import matplotlib.pyplot as plt
|
|
6
|
+
from spatialmath import base
|
|
7
|
+
import roboticstoolbox as rtb
|
|
8
|
+
from collections.abc import Iterable
|
|
9
|
+
|
|
10
|
+
"""
|
|
11
|
+
Sensor Sensor superclass
|
|
12
|
+
|
|
13
|
+
An abstract superclass to represent robot navigation sensorself.
|
|
14
|
+
|
|
15
|
+
Methods::
|
|
16
|
+
plot plot a line from robot to map feature
|
|
17
|
+
display print the parameters in human readable form
|
|
18
|
+
char convert to string
|
|
19
|
+
|
|
20
|
+
Properties::
|
|
21
|
+
robot The Vehicle object on which the sensor is mounted
|
|
22
|
+
map The PointMap object representing the landmarks around the robot
|
|
23
|
+
|
|
24
|
+
Reference::
|
|
25
|
+
|
|
26
|
+
Robotics, Vision & Control,
|
|
27
|
+
Peter Corke,
|
|
28
|
+
Springer 2011
|
|
29
|
+
|
|
30
|
+
See also RangeBearingSensor, EKF, Vehicle, Landmarkself.
|
|
31
|
+
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class SensorBase(ABC):
|
|
36
|
+
# TODO, pose option, wrt vehicle
|
|
37
|
+
|
|
38
|
+
# robot
|
|
39
|
+
# map
|
|
40
|
+
|
|
41
|
+
# verbose
|
|
42
|
+
|
|
43
|
+
# ls
|
|
44
|
+
# animate # animate sensor measurements
|
|
45
|
+
# interval # measurement return subsample factor
|
|
46
|
+
# fail
|
|
47
|
+
# delay
|
|
48
|
+
|
|
49
|
+
def __init__(
|
|
50
|
+
self,
|
|
51
|
+
robot,
|
|
52
|
+
map,
|
|
53
|
+
every=1,
|
|
54
|
+
fail=[],
|
|
55
|
+
plot=False,
|
|
56
|
+
delay=0.1,
|
|
57
|
+
seed=0,
|
|
58
|
+
verbose=False,
|
|
59
|
+
):
|
|
60
|
+
"""Sensor.Sensor Sensor object constructor
|
|
61
|
+
%
|
|
62
|
+
# S = Sensor(VEHICLE, MAP, OPTIONS) is a sensor mounted on a vehicle
|
|
63
|
+
# described by the Vehicle subclass object VEHICLE and observing landmarks
|
|
64
|
+
# in a map described by the LandmarkMap class object self.
|
|
65
|
+
%
|
|
66
|
+
# Options::
|
|
67
|
+
# 'animate' animate the action of the laser scanner
|
|
68
|
+
# 'ls',LS laser scan lines drawn with style ls (default 'r-')
|
|
69
|
+
# 'skip', I return a valid reading on every I'th call
|
|
70
|
+
# 'fail',T sensor simulates failure between timesteps T=[TMIN,TMAX]
|
|
71
|
+
%
|
|
72
|
+
# Notes::
|
|
73
|
+
# - Animation shows a ray from the vehicle position to the selected
|
|
74
|
+
# landmark.
|
|
75
|
+
"""
|
|
76
|
+
self._robot = robot
|
|
77
|
+
self._map = map
|
|
78
|
+
self._every = every
|
|
79
|
+
self._fail = fail
|
|
80
|
+
|
|
81
|
+
self._verbose = verbose
|
|
82
|
+
|
|
83
|
+
self.delay = 0.1
|
|
84
|
+
|
|
85
|
+
self._animate = plot
|
|
86
|
+
|
|
87
|
+
self._seed = seed
|
|
88
|
+
self.init()
|
|
89
|
+
|
|
90
|
+
def init(self):
|
|
91
|
+
"""
|
|
92
|
+
Initialize sensor (superclass)
|
|
93
|
+
|
|
94
|
+
- reseed the random number generator
|
|
95
|
+
- reset the counter for handling the ``every`` and ``fail`` options
|
|
96
|
+
"""
|
|
97
|
+
self._random = np.random.default_rng(self._seed)
|
|
98
|
+
self._count = 0
|
|
99
|
+
|
|
100
|
+
def __str__(self):
|
|
101
|
+
"""
|
|
102
|
+
Convert sensor parameters to a string (superclass)
|
|
103
|
+
%
|
|
104
|
+
# s = self.char() is a string showing sensor parameters in
|
|
105
|
+
# a compact human readable format.
|
|
106
|
+
"""
|
|
107
|
+
s = f"{self.__class__.__name__} sensor class\n"
|
|
108
|
+
s += " " + str(self.map)
|
|
109
|
+
return s
|
|
110
|
+
|
|
111
|
+
def __repr__(self):
|
|
112
|
+
return str(self)
|
|
113
|
+
|
|
114
|
+
@property
|
|
115
|
+
def robot(self):
|
|
116
|
+
"""
|
|
117
|
+
Robot associated with sensor (superclass)
|
|
118
|
+
|
|
119
|
+
:return: robot
|
|
120
|
+
:rtype: :class:`VehicleBase` subclass
|
|
121
|
+
"""
|
|
122
|
+
return self._robot
|
|
123
|
+
|
|
124
|
+
@property
|
|
125
|
+
def map(self):
|
|
126
|
+
"""
|
|
127
|
+
Landmark map associated with sensor (superclass)
|
|
128
|
+
|
|
129
|
+
:return: robot
|
|
130
|
+
:rtype: :class:`LandmarkMap`
|
|
131
|
+
"""
|
|
132
|
+
return self._map
|
|
133
|
+
|
|
134
|
+
@property
|
|
135
|
+
def random(self):
|
|
136
|
+
"""
|
|
137
|
+
Get private random number generator (superclass)
|
|
138
|
+
|
|
139
|
+
:return: NumPy random number generator
|
|
140
|
+
:rtype: :class:`numpy.random.Generator`
|
|
141
|
+
|
|
142
|
+
Has methods including:
|
|
143
|
+
|
|
144
|
+
- :meth:`integers(low, high, size, endpoint) <numpy.random.Generator.integers>`
|
|
145
|
+
- :meth:`random(size) <numpy.random.Generator.random>`
|
|
146
|
+
- :meth:`uniform(low, high, size) <numpy.random.Generator.uniform>`
|
|
147
|
+
- :meth:`normal(mean, std, size) <numpy.random.Generator.normal>`
|
|
148
|
+
- :meth:`multivariate_normal(mean, covar, size) <numpy.random.Generator.multivariate_normal>`
|
|
149
|
+
|
|
150
|
+
The generator is initialized with the seed provided at constructor
|
|
151
|
+
time every time :meth:`init` is called.
|
|
152
|
+
|
|
153
|
+
:seealso: :meth:`init`
|
|
154
|
+
"""
|
|
155
|
+
return self._random
|
|
156
|
+
|
|
157
|
+
@property
|
|
158
|
+
def verbose(self):
|
|
159
|
+
"""
|
|
160
|
+
Get verbosity state
|
|
161
|
+
|
|
162
|
+
:return: verbosity
|
|
163
|
+
:rtype: bool
|
|
164
|
+
"""
|
|
165
|
+
return self._verbose
|
|
166
|
+
|
|
167
|
+
def plot(self, id):
|
|
168
|
+
"""
|
|
169
|
+
Plot sensor observation
|
|
170
|
+
|
|
171
|
+
:param id: landmark id
|
|
172
|
+
:type id: int
|
|
173
|
+
|
|
174
|
+
Draws a line from the robot to landmark ``id``.
|
|
175
|
+
|
|
176
|
+
.. note::
|
|
177
|
+
- The line is drawn using the ``line_style`` given at constructor time
|
|
178
|
+
|
|
179
|
+
"""
|
|
180
|
+
pass
|
|
181
|
+
|
|
182
|
+
# if isempty(self.ls)
|
|
183
|
+
# return
|
|
184
|
+
# end
|
|
185
|
+
|
|
186
|
+
# h = findobj(gca, 'tag', 'sensor')
|
|
187
|
+
# if isempty(h)
|
|
188
|
+
# # no sensor line, create one
|
|
189
|
+
# h = plot(0, 0, self.ls, 'tag', 'sensor')
|
|
190
|
+
# end
|
|
191
|
+
|
|
192
|
+
# # there is a sensor line animate it
|
|
193
|
+
|
|
194
|
+
# if lm_id == 0
|
|
195
|
+
# set(h, 'Visible', 'off')
|
|
196
|
+
# else
|
|
197
|
+
# xi = self.self.map(:,lm_id)
|
|
198
|
+
# set(h, 'Visible', 'on', 'XData', [self.robot.x[0], xi[0]], 'YData', [self.robot.x[1], xi[1]])
|
|
199
|
+
# end
|
|
200
|
+
# pause(self.delay)
|
|
201
|
+
|
|
202
|
+
# drawnow
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
# ======================================================================== #
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
# visibility function, for one id, or return list of visible
|
|
209
|
+
# covar can be 2x2 or (2,)
|
|
210
|
+
# .W property
|
|
211
|
+
class RangeBearingSensor(SensorBase):
|
|
212
|
+
def __init__(
|
|
213
|
+
self,
|
|
214
|
+
robot,
|
|
215
|
+
map,
|
|
216
|
+
line_style=None,
|
|
217
|
+
poly_style=None,
|
|
218
|
+
covar=None,
|
|
219
|
+
range=None,
|
|
220
|
+
angle=None,
|
|
221
|
+
plot=False,
|
|
222
|
+
seed=0,
|
|
223
|
+
**kwargs,
|
|
224
|
+
):
|
|
225
|
+
r"""
|
|
226
|
+
Range and bearing angle sensor
|
|
227
|
+
|
|
228
|
+
:param robot: model of robot carrying the sensor
|
|
229
|
+
:type robot: :class:`VehicleBase` subclass
|
|
230
|
+
:param map: map of landmarks
|
|
231
|
+
:type map: :class:`LandmarkMap` instance
|
|
232
|
+
:param polygon: polygon style for sensing region, see :class:`~spatialmath.base.graphics.plot_polygon`, defaults to None
|
|
233
|
+
:type polygon: dict, optional
|
|
234
|
+
:param covar: covariance matrix for sensor readings, defaults to None
|
|
235
|
+
:type covar: ndarray(2,2), optional
|
|
236
|
+
:param range: maximum range :math:`r_{max}` or range span :math:`[r_{min}, r_{max}]`, defaults to None
|
|
237
|
+
:type range: float or array_like(2), optional
|
|
238
|
+
:param angle: angular field of view, from :math:`[-\theta, \theta]` defaults to None
|
|
239
|
+
:type angle: float, optional
|
|
240
|
+
:param plot: animate the sensor beams, defaults to False
|
|
241
|
+
:type plot: bool, optional
|
|
242
|
+
:param seed: random number seed, defaults to 0
|
|
243
|
+
:type seed: int, optional
|
|
244
|
+
:param kwargs: arguments passed to :class:`SensorBase`
|
|
245
|
+
|
|
246
|
+
Sensor object that returns the range and bearing angle :math:`(r,
|
|
247
|
+
\beta)` to a point landmark from a robot-mounted sensor. The sensor
|
|
248
|
+
measurements are corrupted with zero-mean Gaussian noise with covariance
|
|
249
|
+
``covar``.
|
|
250
|
+
|
|
251
|
+
The sensor can have a maximum range, or a minimum and maximum range. The
|
|
252
|
+
sensor can also have a restricted angular field of view.
|
|
253
|
+
|
|
254
|
+
The sensing region can be displayed by setting the polygon parameter
|
|
255
|
+
which can show an outline or a filled polygon. This is updated every
|
|
256
|
+
time :meth:`reading` is called, based on the current configuration of
|
|
257
|
+
the ``robot``.
|
|
258
|
+
|
|
259
|
+
.. runblock:: pycon
|
|
260
|
+
|
|
261
|
+
>>> from roboticstoolbox import Bicycle, LandmarkMap, RangeBearingSensor
|
|
262
|
+
>>> from math import pi
|
|
263
|
+
>>> robot = Bicycle()
|
|
264
|
+
>>> map = LandmarkMap(20)
|
|
265
|
+
>>> sensor = RangeBearingSensor(robot, map, range=(0.5, 20), angle=pi/4)
|
|
266
|
+
>>> print(sensor)
|
|
267
|
+
|
|
268
|
+
:seealso: :class:`~roboticstoolbox.mobile.LandmarkMap` :class:`~roboticstoolbox.mobile.EKF`
|
|
269
|
+
"""
|
|
270
|
+
|
|
271
|
+
# TODO change plot option to animate, but RVC3 uses plot
|
|
272
|
+
|
|
273
|
+
# call the superclass constructor
|
|
274
|
+
super().__init__(robot, map, **kwargs)
|
|
275
|
+
|
|
276
|
+
self._line_style = line_style
|
|
277
|
+
self._poly_style = poly_style
|
|
278
|
+
|
|
279
|
+
if covar is None:
|
|
280
|
+
self._W = np.zeros((2, 2))
|
|
281
|
+
elif base.isvector(covar, 2):
|
|
282
|
+
self._W = np.diag(covar)
|
|
283
|
+
elif base.ismatrix(covar, (2, 2)):
|
|
284
|
+
self._W = covar
|
|
285
|
+
else:
|
|
286
|
+
raise ValueError("bad value for covar, must have shape (2,) or (2,2)")
|
|
287
|
+
|
|
288
|
+
if range is None:
|
|
289
|
+
self._r_range = None
|
|
290
|
+
elif isinstance(range, Iterable):
|
|
291
|
+
self._r_range = base.getvector(range, 2)
|
|
292
|
+
else:
|
|
293
|
+
self._r_range = [0, range]
|
|
294
|
+
|
|
295
|
+
if angle is None:
|
|
296
|
+
self._theta_range = None
|
|
297
|
+
elif isinstance(angle, Iterable):
|
|
298
|
+
self._theta_range = base.getvector(angle, 2)
|
|
299
|
+
else:
|
|
300
|
+
self._theta_range = [-angle, angle]
|
|
301
|
+
|
|
302
|
+
self._animate = plot
|
|
303
|
+
self._landmarklog = []
|
|
304
|
+
|
|
305
|
+
self._random = np.random.default_rng(seed)
|
|
306
|
+
|
|
307
|
+
def __str__(self):
|
|
308
|
+
s = super().__str__()
|
|
309
|
+
s += f"\n W = {base.array2str(self._W)}\n"
|
|
310
|
+
|
|
311
|
+
s += f" sampled every {self._every} samples\n"
|
|
312
|
+
if self._r_range is not None:
|
|
313
|
+
s += f" range: ({self._r_range[0]}: {self._r_range[1]})\n"
|
|
314
|
+
if self._theta_range is not None:
|
|
315
|
+
s += f" angle: ({self._theta_range[0]:.3g}: {self._theta_range[1]:.3g})\n"
|
|
316
|
+
return s.rstrip()
|
|
317
|
+
|
|
318
|
+
def init(self):
|
|
319
|
+
"""
|
|
320
|
+
Initialize sensor
|
|
321
|
+
|
|
322
|
+
- reseed the random number generator
|
|
323
|
+
- reset the counter for handling the ``every`` and ``fail`` options
|
|
324
|
+
- reset the landmark log
|
|
325
|
+
- initalize plots
|
|
326
|
+
|
|
327
|
+
:seealso: :meth:`SensorBase.init`
|
|
328
|
+
"""
|
|
329
|
+
super().init()
|
|
330
|
+
self._landmarklog = []
|
|
331
|
+
|
|
332
|
+
if self._animate:
|
|
333
|
+
self.map.plot()
|
|
334
|
+
|
|
335
|
+
@property
|
|
336
|
+
def W(self):
|
|
337
|
+
"""
|
|
338
|
+
Get sensor covariance
|
|
339
|
+
|
|
340
|
+
:return: sensor covariance
|
|
341
|
+
:rtype: ndarray(2,2)
|
|
342
|
+
|
|
343
|
+
Returns the value of the sensor covariance matrix passed to
|
|
344
|
+
the constructor.
|
|
345
|
+
"""
|
|
346
|
+
return self._covar
|
|
347
|
+
|
|
348
|
+
def reading(self):
|
|
349
|
+
r"""
|
|
350
|
+
Choose landmark and return observation
|
|
351
|
+
|
|
352
|
+
:return: range and bearing angle to a landmark, and landmark id
|
|
353
|
+
:rtype: ndarray(2), int
|
|
354
|
+
|
|
355
|
+
Returns an observation of a random visible landmark (range, bearing) and
|
|
356
|
+
the ``id`` of that landmark. The landmark is chosen randomly from the
|
|
357
|
+
set of all visible landmarks, those within the angular field of view and
|
|
358
|
+
range limit.
|
|
359
|
+
|
|
360
|
+
If constructor argument ``every`` is set then only return a valid
|
|
361
|
+
reading on every ``every`` calls.
|
|
362
|
+
|
|
363
|
+
If constructor argument ``fail`` is set then do not return a reading
|
|
364
|
+
during that specified time interval.
|
|
365
|
+
|
|
366
|
+
If no valid reading is available then return (None, None)
|
|
367
|
+
|
|
368
|
+
.. runblock:: pycon
|
|
369
|
+
|
|
370
|
+
>>> from roboticstoolbox import Bicycle, LandmarkMap, RangeBearingSensor
|
|
371
|
+
>>> from math import pi
|
|
372
|
+
>>> robot = Bicycle()
|
|
373
|
+
>>> map = LandmarkMap(20)
|
|
374
|
+
>>> sensor = RangeBearingSensor(robot, map, range=(0.5, 20), angle=pi/4)
|
|
375
|
+
>>> print(sensor.reading())
|
|
376
|
+
|
|
377
|
+
.. note::
|
|
378
|
+
|
|
379
|
+
- Noise with covariance ``W`` (set by constructor) is added to the
|
|
380
|
+
reading
|
|
381
|
+
- If ``animate`` option is set then show a line from the vehicle to
|
|
382
|
+
the landmark
|
|
383
|
+
- If ``animate`` option set and the angular and distance limits
|
|
384
|
+
are set then display the sensor field of view as a polygon.
|
|
385
|
+
|
|
386
|
+
:seealso: :meth:`h`
|
|
387
|
+
"""
|
|
388
|
+
|
|
389
|
+
# TODO probably should return K=0 to indicated invalid
|
|
390
|
+
|
|
391
|
+
# model a sensor that emits readings every interval samples
|
|
392
|
+
self._count += 1
|
|
393
|
+
|
|
394
|
+
# check conditions for NOT returning a value
|
|
395
|
+
z = []
|
|
396
|
+
lm_id = -1
|
|
397
|
+
# sample interval
|
|
398
|
+
if self._count % self._every != 0:
|
|
399
|
+
self._landmarklog.append(lm_id)
|
|
400
|
+
return (None, None)
|
|
401
|
+
|
|
402
|
+
# simulated failure, fail is a list of 2-tuples giving (start,end) times
|
|
403
|
+
# for a sensor failure
|
|
404
|
+
if self._fail is not None:
|
|
405
|
+
if any([start <= self._count < end for start, end in self._fail]):
|
|
406
|
+
self._landmarklog.append(lm_id)
|
|
407
|
+
return (None, None)
|
|
408
|
+
|
|
409
|
+
# create a polygon to indicate the active sensing area based on range+angle limits
|
|
410
|
+
# if self.animate && ~isempty(self.theta_range) && ~isempty(self.r_range)
|
|
411
|
+
# h = findobj(gca, 'tag', 'sensor-area')
|
|
412
|
+
# if isempty(h)
|
|
413
|
+
|
|
414
|
+
# th=linspace(self.theta_range[0], self.theta_range[1], 20)
|
|
415
|
+
# x = self.r_range[1] * cos(th)
|
|
416
|
+
# y = self.r_range[1] * sin(th)
|
|
417
|
+
# if self.r_range[0] > 0
|
|
418
|
+
# th = flip(th)
|
|
419
|
+
# x = [x self.r_range[0] * cos(th)]
|
|
420
|
+
# y = [y self.r_range[0] * sin(th)]
|
|
421
|
+
# else
|
|
422
|
+
# x = [x 0]
|
|
423
|
+
# y = [y 0]
|
|
424
|
+
# end
|
|
425
|
+
# # no sensor zone, create one
|
|
426
|
+
# plot_poly([x; y], 'fillcolor', 'r', 'alpha', 0.1, 'edgecolor', 'none', 'animate', 'tag', 'sensor-area')
|
|
427
|
+
# else
|
|
428
|
+
# hg = get(h, 'Parent')
|
|
429
|
+
# plot_poly(h, self.robot.x)
|
|
430
|
+
|
|
431
|
+
zk = self.visible()
|
|
432
|
+
if len(zk) > 1:
|
|
433
|
+
# more than 1 visible landmark, pick a random one
|
|
434
|
+
i = self._random.integers(len(zk))
|
|
435
|
+
z = zk[i][0]
|
|
436
|
+
lm_id = zk[i][1]
|
|
437
|
+
if self.verbose:
|
|
438
|
+
print(f"Sensor:: feature {lm_id}: ({z[0]}, {z[1]})")
|
|
439
|
+
elif len(zk) == 1:
|
|
440
|
+
# just 1 visible landmark
|
|
441
|
+
z = zk[0][0]
|
|
442
|
+
lm_id = zk[0][1]
|
|
443
|
+
if self.verbose:
|
|
444
|
+
print(f"Sensor:: feature {lm_id}: ({z[0]}, {z[1]})")
|
|
445
|
+
else:
|
|
446
|
+
if self.verbose:
|
|
447
|
+
print("Sensor:: no features\n")
|
|
448
|
+
self._landmarklog.append(lm_id)
|
|
449
|
+
return (None, None)
|
|
450
|
+
|
|
451
|
+
# compute the range and bearing from robot to feature
|
|
452
|
+
# z = self.h(self.robot.x, lm_id)
|
|
453
|
+
|
|
454
|
+
if self._animate:
|
|
455
|
+
self.plot(lm_id)
|
|
456
|
+
|
|
457
|
+
# add the reading to the landmark log
|
|
458
|
+
self._landmarklog.append(lm_id)
|
|
459
|
+
|
|
460
|
+
# add noise with covariance W
|
|
461
|
+
z += self._random.multivariate_normal((0, 0), self._W)
|
|
462
|
+
|
|
463
|
+
return z, lm_id
|
|
464
|
+
|
|
465
|
+
def visible(self):
|
|
466
|
+
"""
|
|
467
|
+
List of all visible landmarks
|
|
468
|
+
|
|
469
|
+
:return: list of visible landmarks
|
|
470
|
+
:rtype: list of int
|
|
471
|
+
|
|
472
|
+
Return a list of the id of all landmarks that are visible, that is, it
|
|
473
|
+
lies with the sensing range and field of view of the sensor at the
|
|
474
|
+
robot's current configuration.
|
|
475
|
+
|
|
476
|
+
:seealso: :meth:`isvisible` :meth:`h`
|
|
477
|
+
"""
|
|
478
|
+
# get range/bearing to all landmarks
|
|
479
|
+
z = self.h(self.robot.x)
|
|
480
|
+
zk = [(z, k) for k, z in enumerate(z)]
|
|
481
|
+
# a list of tuples, each tuple is ((range, bearing), k)
|
|
482
|
+
|
|
483
|
+
if self._r_range is not None:
|
|
484
|
+
zk = filter(lambda zk: self._r_range[0] <= zk[0][0] <= self._r_range[1], zk)
|
|
485
|
+
|
|
486
|
+
if self._theta_range is not None:
|
|
487
|
+
# find all within angular range as well
|
|
488
|
+
zk = filter(
|
|
489
|
+
lambda zk: self._theta_range[0] <= zk[0][1] <= self._theta_range[1], zk
|
|
490
|
+
)
|
|
491
|
+
|
|
492
|
+
return list(zk)
|
|
493
|
+
|
|
494
|
+
def isvisible(self, id):
|
|
495
|
+
"""
|
|
496
|
+
Test if landmark is visible
|
|
497
|
+
|
|
498
|
+
:param id: landmark id
|
|
499
|
+
:type id: int
|
|
500
|
+
:return: visibility
|
|
501
|
+
:rtype: bool
|
|
502
|
+
|
|
503
|
+
The landmark ``id`` is visible if it lies with the sensing range and
|
|
504
|
+
field of view of the sensor at the robot's current configuration.
|
|
505
|
+
|
|
506
|
+
:seealso: :meth:`visible` :meth:`h`
|
|
507
|
+
"""
|
|
508
|
+
z = self.h(self.robot.x, id)
|
|
509
|
+
|
|
510
|
+
return (
|
|
511
|
+
(self._r_range is None) or self._r_range[0] <= z[0] <= self._r_range[1]
|
|
512
|
+
) and (
|
|
513
|
+
(self._theta_range is None)
|
|
514
|
+
or self._theta_range[0] <= z[1] <= self._theta_range[1]
|
|
515
|
+
)
|
|
516
|
+
|
|
517
|
+
def h(self, x, landmark=None):
|
|
518
|
+
r"""
|
|
519
|
+
Landmark observation function
|
|
520
|
+
|
|
521
|
+
:param x: vehicle state :math:`(x, y, \theta)`
|
|
522
|
+
:type x: array_like(3), array_like(N,3)
|
|
523
|
+
:param landmark: landmark id or position, defaults to None
|
|
524
|
+
:type landmark: int or array_like(2), optional
|
|
525
|
+
:return: range and bearing angle to landmark math:`(r,\beta)`
|
|
526
|
+
:rtype: ndarray(2) or ndarray(N,2)
|
|
527
|
+
|
|
528
|
+
Return the range and bearing to a landmark:
|
|
529
|
+
|
|
530
|
+
- ``.h(x)`` is range and bearing to all landmarks, one row per landmark
|
|
531
|
+
- ``.h(x, id)`` is range and bearing to landmark ``id``
|
|
532
|
+
- ``.h(x, p)`` is range and bearing to landmark with coordinates ``p``
|
|
533
|
+
|
|
534
|
+
.. runblock:: pycon
|
|
535
|
+
|
|
536
|
+
>>> from roboticstoolbox import Bicycle, LandmarkMap, RangeBearingSensor
|
|
537
|
+
>>> from math import pi
|
|
538
|
+
>>> robot = Bicycle()
|
|
539
|
+
>>> map = LandmarkMap(20)
|
|
540
|
+
>>> sensor = RangeBearingSensor(robot, map, range=(0.5, 20), angle=pi/4)
|
|
541
|
+
>>> z = sensor.h((1, 2, pi/2), 3)
|
|
542
|
+
>>> print(z)
|
|
543
|
+
|
|
544
|
+
.. note::
|
|
545
|
+
- Noise with covariance (property ``W``) is added to each row of ``z``.
|
|
546
|
+
- Performs fast vectorized operation where ``x`` is an ndarray(n,3).
|
|
547
|
+
- The landmark is assumed to be visible, field of view and range limits are not
|
|
548
|
+
applied.
|
|
549
|
+
|
|
550
|
+
:seealso: :meth:`reading` :meth:`Hx` :meth:`Hw` :meth:`Hp`
|
|
551
|
+
"""
|
|
552
|
+
# get the landmarks, one per row
|
|
553
|
+
|
|
554
|
+
if isinstance(x, np.ndarray) and x.ndim == 2:
|
|
555
|
+
# x is Nx3 set of vehicle states, do vectorized form
|
|
556
|
+
# used by particle filter
|
|
557
|
+
x, y, t = x.T
|
|
558
|
+
else:
|
|
559
|
+
x, y, t = x
|
|
560
|
+
|
|
561
|
+
if landmark is None:
|
|
562
|
+
# self.h(XV) all landmarks
|
|
563
|
+
dx = self.map.landmarks[0, :] - x
|
|
564
|
+
dy = self.map.landmarks[1, :] - y
|
|
565
|
+
elif base.isinteger(landmark):
|
|
566
|
+
# landmark id
|
|
567
|
+
# self.h(XV, JF)
|
|
568
|
+
xlm = self.map[landmark]
|
|
569
|
+
dx = xlm[0] - x
|
|
570
|
+
dy = xlm[1] - y
|
|
571
|
+
else:
|
|
572
|
+
# landmark position
|
|
573
|
+
# self.h(XV, XF)
|
|
574
|
+
xlm = base.getvector(landmark, 2)
|
|
575
|
+
dx = xlm[0] - x
|
|
576
|
+
dy = xlm[1] - y
|
|
577
|
+
|
|
578
|
+
# compute range and bearing (Vectorized code)
|
|
579
|
+
|
|
580
|
+
z = np.c_[
|
|
581
|
+
np.sqrt(dx**2 + dy**2), base.angdiff(np.arctan2(dy, dx), t)
|
|
582
|
+
] # range & bearing as columns
|
|
583
|
+
|
|
584
|
+
if z.shape[0] == 1:
|
|
585
|
+
return z[0]
|
|
586
|
+
else:
|
|
587
|
+
return z
|
|
588
|
+
|
|
589
|
+
def Hx(self, x, landmark):
|
|
590
|
+
r"""
|
|
591
|
+
Jacobian dh/dx
|
|
592
|
+
|
|
593
|
+
:param x: vehicle state :math:`(x, y, \theta)`
|
|
594
|
+
:type x: array_like(3)
|
|
595
|
+
:param arg: landmark id or coordinate
|
|
596
|
+
:type arg: int or array_like(2)
|
|
597
|
+
:return: Jacobian matrix
|
|
598
|
+
:rtype: ndarray(2,3)
|
|
599
|
+
|
|
600
|
+
Compute the Jacobian of the observation function with respect to vehicle
|
|
601
|
+
configuration :math:`\partial h/\partial x`
|
|
602
|
+
|
|
603
|
+
- ``sensor.Hx(q, id)`` is Jacobian for landmark ``id``
|
|
604
|
+
- ``sensor.h(q, p)`` is Jacobian for landmark with coordinates ``p``
|
|
605
|
+
|
|
606
|
+
:seealso: :meth:`h` :meth:`Hp` :meth:`Hw`
|
|
607
|
+
"""
|
|
608
|
+
|
|
609
|
+
if base.isinteger(landmark):
|
|
610
|
+
# landmark index provided
|
|
611
|
+
xf = self.map[landmark]
|
|
612
|
+
else:
|
|
613
|
+
# assume it is a coordinate
|
|
614
|
+
xf = base.getvector(landmark, 2)
|
|
615
|
+
|
|
616
|
+
Delta = xf - x[:2]
|
|
617
|
+
r = base.norm(Delta)
|
|
618
|
+
# fmt: off
|
|
619
|
+
return np.array([
|
|
620
|
+
[-Delta[0] / r, -Delta[1] / r, 0],
|
|
621
|
+
[ Delta[1] / r**2, -Delta[0] / r**2, -1],
|
|
622
|
+
])
|
|
623
|
+
# fmt: on
|
|
624
|
+
|
|
625
|
+
def Hp(self, x, landmark):
|
|
626
|
+
r"""
|
|
627
|
+
Jacobian dh/dp
|
|
628
|
+
|
|
629
|
+
:param x: vehicle state :math:`(x, y, \theta)`
|
|
630
|
+
:type x: array_like(3)
|
|
631
|
+
:param arg: landmark id or coordinate
|
|
632
|
+
:type arg: int or array_like(2)
|
|
633
|
+
:return: Jacobian matrix
|
|
634
|
+
:rtype: ndarray(2,2)
|
|
635
|
+
|
|
636
|
+
Compute the Jacobian of the observation function with respect
|
|
637
|
+
to landmark position :math:`\partial h/\partial p`
|
|
638
|
+
|
|
639
|
+
- ``sensor.Hp(x, id)`` is Jacobian for landmark ``id``
|
|
640
|
+
- ``sensor.Hp(x, p)`` is Jacobian for landmark with coordinates ``p``
|
|
641
|
+
|
|
642
|
+
:seealso: :meth:`h` :meth:`Hx` :meth:`Hw`
|
|
643
|
+
"""
|
|
644
|
+
if base.isinteger(landmark):
|
|
645
|
+
xf = self.map.landmark(landmark)
|
|
646
|
+
else:
|
|
647
|
+
xf = landmark
|
|
648
|
+
x = base.getvector(x, 3)
|
|
649
|
+
|
|
650
|
+
Delta = xf - x[:2]
|
|
651
|
+
r = base.norm(Delta)
|
|
652
|
+
# fmt: off
|
|
653
|
+
return np.array([
|
|
654
|
+
[ Delta[0] / r, Delta[1] / r],
|
|
655
|
+
[-Delta[1] / r**2, Delta[0] / r**2],
|
|
656
|
+
])
|
|
657
|
+
# fmt: on
|
|
658
|
+
|
|
659
|
+
def Hw(self, x, landmark):
|
|
660
|
+
r"""
|
|
661
|
+
Jacobian dh/dw
|
|
662
|
+
|
|
663
|
+
:param x: vehicle state :math:`(x, y, \theta)`
|
|
664
|
+
:type x: array_like(3)
|
|
665
|
+
:param arg: landmark id or coordinate
|
|
666
|
+
:type arg: int or array_like(2)
|
|
667
|
+
:return: Jacobian matrix
|
|
668
|
+
:rtype: ndarray(2,2)
|
|
669
|
+
|
|
670
|
+
Compute the Jacobian of the observation function with respect
|
|
671
|
+
to sensor noise :math:`\partial h/\partial w`
|
|
672
|
+
|
|
673
|
+
- ``sensor.Hw(x, id)`` is Jacobian for landmark ``id``
|
|
674
|
+
- ``sensor.Hw(x, p)`` is Jacobian for landmark with coordinates ``p``
|
|
675
|
+
|
|
676
|
+
.. note:: ``x`` and ``landmark`` are not used to compute this.
|
|
677
|
+
|
|
678
|
+
:seealso: :meth:`h` :meth:`Hx` :meth:`Hp`
|
|
679
|
+
"""
|
|
680
|
+
return np.eye(2)
|
|
681
|
+
|
|
682
|
+
def g(self, x, z):
|
|
683
|
+
r"""
|
|
684
|
+
Landmark position from sensor observation
|
|
685
|
+
|
|
686
|
+
:param x: vehicle state :math:`(x, y, \theta)`
|
|
687
|
+
:type x: array_like(3)
|
|
688
|
+
:param z: landmark observation :math:`(r, \beta)`
|
|
689
|
+
:type z: array_like(2)
|
|
690
|
+
:return: landmark position :math:`(x, y)`
|
|
691
|
+
:rtype: ndarray(2)
|
|
692
|
+
|
|
693
|
+
Compute the world coordinate of a landmark given
|
|
694
|
+
the observation ``z`` from a vehicle state with ``x``.
|
|
695
|
+
|
|
696
|
+
:seealso: :meth:`h` :meth:`Gx` :meth:`Gz`
|
|
697
|
+
"""
|
|
698
|
+
|
|
699
|
+
range = z[0]
|
|
700
|
+
bearing = z[1] + x[2] # bearing angle in vehicle frame
|
|
701
|
+
|
|
702
|
+
# fmt: off
|
|
703
|
+
return np.r_[
|
|
704
|
+
x[0] + range * cos(bearing),
|
|
705
|
+
x[1] + range * sin(bearing)
|
|
706
|
+
]
|
|
707
|
+
# fmt: on
|
|
708
|
+
|
|
709
|
+
def Gx(self, x, z):
|
|
710
|
+
r"""
|
|
711
|
+
Jacobian dg/dx
|
|
712
|
+
|
|
713
|
+
:param x: vehicle state :math:`(x, y, \theta)`
|
|
714
|
+
:type x: array_like(3)
|
|
715
|
+
:param z: landmark observation :math:`(r, \beta)`
|
|
716
|
+
:type z: array_like(2)
|
|
717
|
+
:return: Jacobian matrix
|
|
718
|
+
:rtype: ndarray(2,3)
|
|
719
|
+
|
|
720
|
+
Compute the Jacobian of the landmark position function with respect
|
|
721
|
+
to landmark position :math:`\partial g/\partial x`
|
|
722
|
+
|
|
723
|
+
:seealso: :meth:`g`
|
|
724
|
+
"""
|
|
725
|
+
theta = x[2]
|
|
726
|
+
r, bearing = z
|
|
727
|
+
|
|
728
|
+
# fmt: off
|
|
729
|
+
return np.array([
|
|
730
|
+
[1, 0, -r*sin(theta + bearing)],
|
|
731
|
+
[0, 1, r*cos(theta + bearing)],
|
|
732
|
+
])
|
|
733
|
+
# fmt: on
|
|
734
|
+
|
|
735
|
+
def Gz(self, x, z):
|
|
736
|
+
r"""
|
|
737
|
+
Jacobian dg/dz
|
|
738
|
+
|
|
739
|
+
:param x: vehicle state :math:`(x, y, \theta)`
|
|
740
|
+
:type x: array_like(3)
|
|
741
|
+
:param z: landmark observation :math:`(r, \beta)`
|
|
742
|
+
:type z: array_like(2)
|
|
743
|
+
:return: Jacobian matrix
|
|
744
|
+
:rtype: ndarray(2,2)
|
|
745
|
+
|
|
746
|
+
Compute the Jacobian of the landmark position function with respect
|
|
747
|
+
to sensor observation :math:`\partial g/\partial z`
|
|
748
|
+
|
|
749
|
+
:seealso: :meth:`g`
|
|
750
|
+
"""
|
|
751
|
+
theta = x[2]
|
|
752
|
+
r, bearing = z
|
|
753
|
+
# fmt: off
|
|
754
|
+
return np.array([
|
|
755
|
+
[cos(theta + bearing), -r * sin(theta + bearing)],
|
|
756
|
+
[sin(theta + bearing), r * cos(theta + bearing)],
|
|
757
|
+
])
|
|
758
|
+
# fmt: on
|
|
759
|
+
|
|
760
|
+
|
|
761
|
+
if __name__ == "__main__":
|
|
762
|
+
from roboticstoolbox import Bicycle, LandmarkMap, RangeBearingSensor
|
|
763
|
+
from math import pi
|
|
764
|
+
|
|
765
|
+
robot = Bicycle()
|
|
766
|
+
map = LandmarkMap(20)
|
|
767
|
+
sensor = RangeBearingSensor(robot, map, range=(0.5, 20), angle=pi / 4)
|
|
768
|
+
print(sensor.reading())
|
|
769
|
+
print(sensor.visible())
|
|
770
|
+
print(sensor.isvisible(3))
|
|
771
|
+
print(sensor.isvisible(4))
|