roboticstoolbox-python 1.4.0__py3-none-any.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 +107 -0
- roboticstoolbox/backends/Connector.py +113 -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 +256 -0
- roboticstoolbox/backends/PyPlot/PyPlot.py +778 -0
- roboticstoolbox/backends/PyPlot/PyPlot2.py +537 -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 +165 -0
- roboticstoolbox/bin/__init__.py +0 -0
- roboticstoolbox/bin/_bintools.py +61 -0
- roboticstoolbox/bin/rtbtool.py +404 -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 +1591 -0
- roboticstoolbox/blocks/mobile.py +522 -0
- roboticstoolbox/blocks/quad_model.py +132 -0
- roboticstoolbox/blocks/spatial.py +245 -0
- roboticstoolbox/blocks/uav.py +949 -0
- roboticstoolbox/demo/__init__.py +0 -0
- roboticstoolbox/demo/eigdemo.py +112 -0
- roboticstoolbox/demo/tripleangledemo.py +239 -0
- roboticstoolbox/demo/twistdemo.py +175 -0
- roboticstoolbox/ets/ET.py +439 -0
- roboticstoolbox/ets/ET2.py +179 -0
- roboticstoolbox/ets/ETS.py +2013 -0
- roboticstoolbox/ets/ETS2.py +449 -0
- roboticstoolbox/ets/_ET.py +668 -0
- roboticstoolbox/ets/_ETS.py +781 -0
- roboticstoolbox/ets/__init__.py +11 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Cholesky +45 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/CholmodSupport +48 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Core +384 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Dense +7 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Eigen +2 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Eigenvalues +60 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Geometry +59 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Householder +29 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/IterativeLinearSolvers +48 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Jacobi +32 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/KLUSupport +41 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/LU +47 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/MetisSupport +35 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/OrderingMethods +70 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/PaStiXSupport +49 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/PardisoSupport +35 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/QR +50 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/QtAlignedMalloc +39 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/SPQRSupport +34 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/SVD +50 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/Sparse +34 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/SparseCholesky +37 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/SparseCore +69 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/SparseLU +50 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/SparseQR +36 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/StdDeque +27 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/StdList +26 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/StdVector +27 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/SuperLUSupport +64 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/UmfPackSupport +40 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Cholesky/LDLT.h +688 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Cholesky/LLT.h +558 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ArithmeticSequence.h +413 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Array.h +417 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ArrayBase.h +226 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ArrayWrapper.h +209 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Assign.h +90 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/AssignEvaluator.h +1010 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Assign_MKL.h +178 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/BandMatrix.h +353 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Block.h +448 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/BooleanRedux.h +162 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CommaInitializer.h +164 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ConditionEstimator.h +175 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CoreEvaluators.h +1741 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CoreIterators.h +132 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseBinaryOp.h +183 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseTernaryOp.h +197 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseUnaryOp.h +103 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/CwiseUnaryView.h +132 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DenseBase.h +701 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DenseCoeffsBase.h +685 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DenseStorage.h +652 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Diagonal.h +258 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DiagonalMatrix.h +391 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/DiagonalProduct.h +28 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Dot.h +318 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/EigenBase.h +160 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ForceAlignedAccess.h +150 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Fuzzy.h +155 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/GeneralProduct.h +465 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/GenericPacketMath.h +1040 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/GlobalFunctions.h +194 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/IO.h +258 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/IndexedView.h +237 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Inverse.h +117 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Map.h +171 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/MapBase.h +310 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/MathFunctions.h +2057 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/MathFunctionsImpl.h +200 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Matrix.h +565 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/MatrixBase.h +547 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/NestByValue.h +85 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/NoAlias.h +109 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/NumTraits.h +335 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/PermutationMatrix.h +605 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/PlainObjectBase.h +1128 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Product.h +191 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ProductEvaluators.h +1179 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Random.h +218 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Redux.h +515 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Ref.h +381 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Replicate.h +142 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Reshaped.h +454 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/ReturnByValue.h +119 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Reverse.h +217 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Select.h +164 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/SelfAdjointView.h +365 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Solve.h +188 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/SolveTriangular.h +235 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/SolverBase.h +168 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/StableNorm.h +251 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/StlIterators.h +463 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Stride.h +116 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Swap.h +68 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Transpose.h +464 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Transpositions.h +386 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/TriangularMatrix.h +1001 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/VectorBlock.h +96 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/VectorwiseOp.h +784 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/Visitor.h +381 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX/Complex.h +372 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX/PacketMath.h +1574 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX512/MathFunctions.h +362 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX512/PacketMath.h +2303 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/Complex.h +417 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/MathFunctions.h +90 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/AltiVec/PacketMath.h +2711 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/CUDA/Complex.h +258 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/Half.h +942 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/Settings.h +49 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/Complex.h +584 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/PacketMath.h +4587 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SSE/Complex.h +351 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/ZVector/Complex.h +426 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/StlFunctors.h +166 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +317 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixVector.h +518 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/Parallelizer.h +180 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/BlasUtil.h +583 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/Constants.h +563 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/DisableStupidWarnings.h +106 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/IntegralConstant.h +272 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/MKL_support.h +137 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/Macros.h +1464 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/Memory.h +1163 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/Meta.h +812 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/NonMPL2.h +3 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/StaticAssert.h +221 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Core/util/XprHelper.h +856 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/RealQZ.h +657 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/RealSchur.h +558 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Eigenvalues/Tridiagonalization.h +561 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/AlignedBox.h +486 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/AngleAxis.h +247 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/EulerAngles.h +114 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Homogeneous.h +501 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Hyperplane.h +282 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/OrthoMethods.h +235 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/ParametrizedLine.h +232 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Quaternion.h +870 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Rotation2D.h +199 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/RotationBase.h +206 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Scaling.h +188 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Transform.h +1563 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Translation.h +202 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/Umeyama.h +166 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Householder/BlockHouseholder.h +110 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Householder/Householder.h +176 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Householder/HouseholderSequence.h +545 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +229 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/Jacobi/Jacobi.h +483 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/Determinant.h +117 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/FullPivLU.h +877 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/InverseImpl.h +432 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/PartialPivLU.h +624 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/LU/arch/InverseSize4.h +351 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/MetisSupport/MetisSupport.h +137 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/OrderingMethods/Amd.h +435 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/OrderingMethods/Ordering.h +153 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/HouseholderQR.h +434 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/BDCSVD.h +1366 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/JacobiSVD.h +812 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/SVDBase.h +376 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/AmbiVector.h +378 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/CompressedStorage.h +274 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseAssign.h +270 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseBlock.h +571 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseColEtree.h +206 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseDot.h +98 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseMap.h +305 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseMatrixBase.h +398 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparsePermutation.h +178 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseProduct.h +181 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseRedux.h +49 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseRef.h +397 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseTranspose.h +92 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseUtil.h +186 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseVector.h +478 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/SparseView.h +254 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseCore/TriangularSolver.h +315 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU.h +923 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +375 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SparseQR/SparseQR.h +758 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/StlSupport/StdDeque.h +116 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/StlSupport/StdList.h +106 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/StlSupport/StdVector.h +131 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/StlSupport/details.h +84 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/Image.h +82 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/Kernel.h +79 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/RealSvd2x2.h +55 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/blas.h +440 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/lapack.h +152 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/lapacke.h +16292 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/misc/lapacke_mangling.h +17 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/ArrayCwiseBinaryOps.h +358 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/BlockMethods.h +1442 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
- roboticstoolbox/ets/cpp-extensions/Eigen/src/plugins/ReshapedMethods.h +149 -0
- roboticstoolbox/ets/cpp-extensions/README.md +73 -0
- roboticstoolbox/ets/cpp-extensions/fknm_nb.cpp +534 -0
- roboticstoolbox/ets/cpp-extensions/ik.cpp +301 -0
- roboticstoolbox/ets/cpp-extensions/ik.h +59 -0
- roboticstoolbox/ets/cpp-extensions/linalg.cpp +316 -0
- roboticstoolbox/ets/cpp-extensions/linalg.h +64 -0
- roboticstoolbox/ets/cpp-extensions/methods.cpp +372 -0
- roboticstoolbox/ets/cpp-extensions/methods.h +32 -0
- roboticstoolbox/ets/cpp-extensions/structs.cpp +24 -0
- roboticstoolbox/ets/cpp-extensions/structs.h +62 -0
- roboticstoolbox/ets/fknm.py +366 -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 +194 -0
- roboticstoolbox/mobile/drivers.py +397 -0
- roboticstoolbox/mobile/landmarkmap.py +181 -0
- roboticstoolbox/mobile/sensors.py +789 -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 +81 -0
- roboticstoolbox/models/DH/Hyper3d.py +83 -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 +80 -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 +213 -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 +153 -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 +70 -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 +45 -0
- roboticstoolbox/models/URDF/Fetch.py +96 -0
- roboticstoolbox/models/URDF/Frankie.py +67 -0
- roboticstoolbox/models/URDF/FrankieOmni.py +94 -0
- roboticstoolbox/models/URDF/Jaco.py +49 -0
- roboticstoolbox/models/URDF/KinovaGen3.py +63 -0
- roboticstoolbox/models/URDF/LBR.py +57 -0
- roboticstoolbox/models/URDF/PR2.py +66 -0
- roboticstoolbox/models/URDF/Panda.py +60 -0
- roboticstoolbox/models/URDF/Puma560.py +90 -0
- roboticstoolbox/models/URDF/UR10.py +43 -0
- roboticstoolbox/models/URDF/UR3.py +43 -0
- roboticstoolbox/models/URDF/UR5.py +64 -0
- roboticstoolbox/models/URDF/URDFRobot.py +402 -0
- roboticstoolbox/models/URDF/Valkyrie.py +110 -0
- roboticstoolbox/models/URDF/YuMi.py +107 -0
- roboticstoolbox/models/URDF/__init__.py +51 -0
- roboticstoolbox/models/URDF/px100.py +48 -0
- roboticstoolbox/models/URDF/px150.py +48 -0
- roboticstoolbox/models/URDF/rx150.py +48 -0
- roboticstoolbox/models/URDF/rx200.py +48 -0
- roboticstoolbox/models/URDF/vx300.py +48 -0
- roboticstoolbox/models/URDF/vx300s.py +48 -0
- roboticstoolbox/models/URDF/wx200.py +48 -0
- roboticstoolbox/models/URDF/wx250.py +48 -0
- roboticstoolbox/models/URDF/wx250s.py +48 -0
- roboticstoolbox/models/__init__.py +7 -0
- roboticstoolbox/models/catalog.py +226 -0
- roboticstoolbox/robot/BaseRobot.py +2589 -0
- roboticstoolbox/robot/DHFactor.py +522 -0
- roboticstoolbox/robot/DHLink.py +949 -0
- roboticstoolbox/robot/DHRobot.py +2591 -0
- roboticstoolbox/robot/Dynamics.py +1537 -0
- roboticstoolbox/robot/ELink.py +23 -0
- roboticstoolbox/robot/ERobot.py +25 -0
- roboticstoolbox/robot/Gripper.py +242 -0
- roboticstoolbox/robot/IK.py +1378 -0
- roboticstoolbox/robot/Link.py +1557 -0
- roboticstoolbox/robot/PoERobot.py +352 -0
- roboticstoolbox/robot/Robot.py +2157 -0
- roboticstoolbox/robot/RobotKinematics.py +1505 -0
- roboticstoolbox/robot/RobotPlottingMPL.py +355 -0
- roboticstoolbox/robot/RobotProto.py +156 -0
- roboticstoolbox/robot/__init__.py +57 -0
- roboticstoolbox/robot/cpp-extensions/README.md +29 -0
- roboticstoolbox/robot/cpp-extensions/frne.h +96 -0
- roboticstoolbox/robot/cpp-extensions/frne_nb.cpp +237 -0
- roboticstoolbox/robot/cpp-extensions/ne.c +495 -0
- roboticstoolbox/robot/cpp-extensions/vmath.c +163 -0
- roboticstoolbox/robot/cpp-extensions/vmath.h +32 -0
- roboticstoolbox/robot/frne.py +51 -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 +108 -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 +1930 -0
- roboticstoolbox/tools/urdf/utils.py +50 -0
- roboticstoolbox_python-1.4.0.dist-info/METADATA +664 -0
- roboticstoolbox_python-1.4.0.dist-info/RECORD +610 -0
- roboticstoolbox_python-1.4.0.dist-info/WHEEL +5 -0
- roboticstoolbox_python-1.4.0.dist-info/entry_points.txt +6 -0
- roboticstoolbox_python-1.4.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,706 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Python EKF Planner
|
|
5
|
+
@Author: Peter Corke, original MATLAB code and Python version
|
|
6
|
+
@Author: Kristian Gibson, initial MATLAB port
|
|
7
|
+
|
|
8
|
+
Based on code by Paul Newman, Oxford University,
|
|
9
|
+
http://www.robots.ox.ac.uk/~pnewman
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from collections import namedtuple
|
|
13
|
+
|
|
14
|
+
import numpy as np
|
|
15
|
+
import scipy as sp
|
|
16
|
+
import matplotlib.pyplot as plt
|
|
17
|
+
from matplotlib import animation
|
|
18
|
+
|
|
19
|
+
import spatialmath.base as smb
|
|
20
|
+
|
|
21
|
+
"""
|
|
22
|
+
Monte-carlo based localisation for estimating vehicle pose based on
|
|
23
|
+
odometry and observations of known landmarks.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
# TODO: refactor this and EKF, RNG, history, common plots, animation, movie
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ParticleFilter:
|
|
30
|
+
def __init__(
|
|
31
|
+
self,
|
|
32
|
+
robot,
|
|
33
|
+
sensor,
|
|
34
|
+
R,
|
|
35
|
+
L,
|
|
36
|
+
nparticles=500,
|
|
37
|
+
seed=0,
|
|
38
|
+
x0=None,
|
|
39
|
+
verbose=False,
|
|
40
|
+
animate=False,
|
|
41
|
+
history=True,
|
|
42
|
+
workspace=None,
|
|
43
|
+
):
|
|
44
|
+
"""
|
|
45
|
+
Particle filter
|
|
46
|
+
|
|
47
|
+
:param robot: robot motion model
|
|
48
|
+
:type robot: :class:`VehicleBase` subclass,
|
|
49
|
+
:param sensor: vehicle mounted sensor model
|
|
50
|
+
:type sensor: :class:`SensorBase` subclass
|
|
51
|
+
:param R: covariance of the zero-mean Gaussian noise added to the particles at each step (diffusion)
|
|
52
|
+
:type R: ndarray(3,3)
|
|
53
|
+
:param L: covariance used in the sensor likelihood model
|
|
54
|
+
:type L: ndarray(2,2)
|
|
55
|
+
:param nparticles: number of particles, defaults to 500
|
|
56
|
+
:type nparticles: int, optional
|
|
57
|
+
:param seed: random number seed, defaults to 0
|
|
58
|
+
:type seed: int, optional
|
|
59
|
+
:param x0: initial state, defaults to [0, 0, 0]
|
|
60
|
+
:type x0: array_like(3), optional
|
|
61
|
+
:param verbose: display extra debug information, defaults to False
|
|
62
|
+
:type verbose: bool, optional
|
|
63
|
+
:param history: retain step-by-step history, defaults to True
|
|
64
|
+
:type history: bool, optional
|
|
65
|
+
:param workspace: dimension of workspace, see :func:`~spatialmath.base.graphics.expand_dims`
|
|
66
|
+
:type workspace: scalar, array_like(2), array_like(4)
|
|
67
|
+
|
|
68
|
+
This class implements a Monte-Carlo estimator or particle filter for
|
|
69
|
+
vehicle state, based on odometry, a landmark map, and landmark
|
|
70
|
+
observations. The state of each particle is a possible vehicle
|
|
71
|
+
configuration :math:`(x,y,\theta)`. Bootstrap particle resampling is
|
|
72
|
+
used.
|
|
73
|
+
|
|
74
|
+
The working area is defined by ``workspace`` or inherited from the
|
|
75
|
+
landmark map attached to the ``sensor`` (see
|
|
76
|
+
:func:`~spatialmath.base.graphics.expand_dims`):
|
|
77
|
+
|
|
78
|
+
============== ======= =======
|
|
79
|
+
``workspace`` x-range y-range
|
|
80
|
+
============== ======= =======
|
|
81
|
+
A (scalar) -A:A -A:A
|
|
82
|
+
[A, B] A:B A:B
|
|
83
|
+
[A, B, C, D] A:B C:D
|
|
84
|
+
============== ======= =======
|
|
85
|
+
|
|
86
|
+
Particles are initially distributed uniform randomly over this area.
|
|
87
|
+
|
|
88
|
+
Example::
|
|
89
|
+
|
|
90
|
+
V = np.diag([0.02, np.radians(0.5)]) ** 2
|
|
91
|
+
robot = Bicycle(covar=V, animation="car", workspace=10)
|
|
92
|
+
robot.control = RandomPath(workspace=robot)
|
|
93
|
+
|
|
94
|
+
map = LandmarkMap(nlandmarks=20, workspace=robot.workspace)
|
|
95
|
+
|
|
96
|
+
W = np.diag([0.1, np.radians(1)]) ** 2
|
|
97
|
+
sensor = RangeBearingSensor(robot, map, covar=W, plot=True)
|
|
98
|
+
|
|
99
|
+
R = np.diag([0.1, 0.1, np.radians(1)]) ** 2
|
|
100
|
+
L = np.diag([0.1, 0.1])
|
|
101
|
+
pf = ParticleFilter(robot, sensor, R, L, nparticles=1000)
|
|
102
|
+
|
|
103
|
+
pf.run(T=10)
|
|
104
|
+
|
|
105
|
+
map.plot()
|
|
106
|
+
robot.plot_xy()
|
|
107
|
+
pf.plot_xy()
|
|
108
|
+
|
|
109
|
+
plt.plot(pf.get_std()[:100,:])
|
|
110
|
+
|
|
111
|
+
.. note:: Set ``seed=0`` to get different behaviour from run to run.
|
|
112
|
+
|
|
113
|
+
:seealso: :meth:`run`
|
|
114
|
+
"""
|
|
115
|
+
self._robot = robot
|
|
116
|
+
self._sensor = sensor
|
|
117
|
+
self.R = R
|
|
118
|
+
self.L = L
|
|
119
|
+
self.nparticles = nparticles
|
|
120
|
+
self._animate = animate
|
|
121
|
+
|
|
122
|
+
# self.dim = sensor.map.dim
|
|
123
|
+
self._history = []
|
|
124
|
+
self.x = ()
|
|
125
|
+
self.weight = ()
|
|
126
|
+
self.w0 = 0.05
|
|
127
|
+
self._x0 = x0
|
|
128
|
+
|
|
129
|
+
# create a private random number stream if required
|
|
130
|
+
self._random = np.random.default_rng(seed)
|
|
131
|
+
self._seed = seed
|
|
132
|
+
|
|
133
|
+
self._keep_history = history # keep history
|
|
134
|
+
self._htuple = namedtuple("PFlog", "t odo xest std weights")
|
|
135
|
+
|
|
136
|
+
if workspace is not None:
|
|
137
|
+
self._dim = smb.expand_dims(workspace)
|
|
138
|
+
else:
|
|
139
|
+
self._dim = sensor.map.workspace
|
|
140
|
+
|
|
141
|
+
self._workspace = self.robot.workspace
|
|
142
|
+
# self._init()
|
|
143
|
+
|
|
144
|
+
def __str__(self):
|
|
145
|
+
# ParticleFilter.char Convert to string
|
|
146
|
+
#
|
|
147
|
+
# PF.char() is a string representing the state of the ParticleFilter
|
|
148
|
+
# object in human-readable form.
|
|
149
|
+
#
|
|
150
|
+
# See also ParticleFilter.display.
|
|
151
|
+
|
|
152
|
+
def indent(s, n=2):
|
|
153
|
+
spaces = " " * n
|
|
154
|
+
return s.replace("\n", "\n" + spaces)
|
|
155
|
+
|
|
156
|
+
s = f"ParticleFilter object: {self.nparticles} particles"
|
|
157
|
+
s += "\nR: " + smb.array2str(self.R)
|
|
158
|
+
s += "\nL: " + smb.array2str(self.L)
|
|
159
|
+
if self.robot is not None:
|
|
160
|
+
s += indent("\nrobot: " + str(self.robot))
|
|
161
|
+
|
|
162
|
+
if self.sensor is not None:
|
|
163
|
+
s += indent("\nsensor: " + str(self.sensor))
|
|
164
|
+
return s
|
|
165
|
+
|
|
166
|
+
@property
|
|
167
|
+
def robot(self):
|
|
168
|
+
"""
|
|
169
|
+
Get robot object
|
|
170
|
+
|
|
171
|
+
:return: robot used in simulation
|
|
172
|
+
:rtype: :class:`VehicleBase` subclass
|
|
173
|
+
"""
|
|
174
|
+
return self._robot
|
|
175
|
+
|
|
176
|
+
@property
|
|
177
|
+
def sensor(self):
|
|
178
|
+
"""
|
|
179
|
+
Get sensor object
|
|
180
|
+
|
|
181
|
+
:return: sensor used in simulation
|
|
182
|
+
:rtype: :class:`SensorBase` subclass
|
|
183
|
+
"""
|
|
184
|
+
return self._sensor
|
|
185
|
+
|
|
186
|
+
@property
|
|
187
|
+
def map(self):
|
|
188
|
+
"""
|
|
189
|
+
Get map object
|
|
190
|
+
|
|
191
|
+
:return: map used in simulation
|
|
192
|
+
:rtype: :class:`LandmarkMap` subclass
|
|
193
|
+
"""
|
|
194
|
+
return self._map
|
|
195
|
+
|
|
196
|
+
@property
|
|
197
|
+
def verbose(self):
|
|
198
|
+
"""
|
|
199
|
+
Get verbosity state
|
|
200
|
+
|
|
201
|
+
:return: verbosity
|
|
202
|
+
:rtype: bool
|
|
203
|
+
"""
|
|
204
|
+
return self._verbose
|
|
205
|
+
|
|
206
|
+
@property
|
|
207
|
+
def history(self):
|
|
208
|
+
"""
|
|
209
|
+
Get EKF simulation history
|
|
210
|
+
|
|
211
|
+
:return: simulation history
|
|
212
|
+
:rtype: list of namedtuples
|
|
213
|
+
|
|
214
|
+
At each simulation timestep a namedtuple of is appended to the history
|
|
215
|
+
list. It contains, for that time step, estimated state and covariance,
|
|
216
|
+
and sensor observation.
|
|
217
|
+
|
|
218
|
+
:seealso: :meth:`get_t` :meth:`get_xy` :meth:`get_std`
|
|
219
|
+
:meth:`get_Pnorm`
|
|
220
|
+
"""
|
|
221
|
+
return self._history
|
|
222
|
+
|
|
223
|
+
@property
|
|
224
|
+
def workspace(self):
|
|
225
|
+
"""
|
|
226
|
+
Size of robot workspace
|
|
227
|
+
|
|
228
|
+
:return: workspace bounds [xmin, xmax, ymin, ymax]
|
|
229
|
+
:rtype: ndarray(4)
|
|
230
|
+
|
|
231
|
+
Returns the bounds of the workspace as specified by constructor
|
|
232
|
+
option ``workspace``
|
|
233
|
+
"""
|
|
234
|
+
return self._workspace
|
|
235
|
+
|
|
236
|
+
@property
|
|
237
|
+
def random(self):
|
|
238
|
+
"""
|
|
239
|
+
Get private random number generator
|
|
240
|
+
|
|
241
|
+
:return: NumPy random number generator
|
|
242
|
+
:rtype: :class:`numpy.random.Generator`
|
|
243
|
+
|
|
244
|
+
Has methods including:
|
|
245
|
+
|
|
246
|
+
- ``integers(low, high, size, endpoint)``
|
|
247
|
+
- ``random(size)``
|
|
248
|
+
- ``uniform``
|
|
249
|
+
- ``normal(mean, std, size)``
|
|
250
|
+
- ``multivariate_normal(mean, covar, size)``
|
|
251
|
+
|
|
252
|
+
The generator is initialized with the seed provided at constructor
|
|
253
|
+
time every time ``init`` is called.
|
|
254
|
+
|
|
255
|
+
"""
|
|
256
|
+
return self._random
|
|
257
|
+
|
|
258
|
+
def _init(self, x0=None, animate=False, ax=None):
|
|
259
|
+
# ParticleFilter.init Initialize the particle filter
|
|
260
|
+
#
|
|
261
|
+
# PF.init() initializes the particle distribution and clears the
|
|
262
|
+
# history.
|
|
263
|
+
#
|
|
264
|
+
# Notes::
|
|
265
|
+
# - If initial particle states were given to the constructor the states are
|
|
266
|
+
# set to this value, else a random distribution over the map is used.
|
|
267
|
+
# - Invoked by the run() method.
|
|
268
|
+
|
|
269
|
+
self.robot.init()
|
|
270
|
+
self.sensor.init()
|
|
271
|
+
|
|
272
|
+
# clear the history
|
|
273
|
+
self._history = []
|
|
274
|
+
|
|
275
|
+
# create a new private random number generator
|
|
276
|
+
if self._seed is not None:
|
|
277
|
+
self._random = np.random.default_rng(self._seed)
|
|
278
|
+
|
|
279
|
+
self._t = 0
|
|
280
|
+
|
|
281
|
+
# initialize particles
|
|
282
|
+
if x0 is None:
|
|
283
|
+
x0 = self._x0
|
|
284
|
+
if x0 is None:
|
|
285
|
+
# create initial particle distribution as uniformly randomly distributed
|
|
286
|
+
# over the map workspace and heading angles
|
|
287
|
+
x = self.random.uniform(
|
|
288
|
+
self.workspace[0], self.workspace[1], size=(self.nparticles,)
|
|
289
|
+
)
|
|
290
|
+
y = self.random.uniform(
|
|
291
|
+
self.workspace[2], self.workspace[3], size=(self.nparticles,)
|
|
292
|
+
)
|
|
293
|
+
t = self.random.uniform(-np.pi, np.pi, size=(self.nparticles,))
|
|
294
|
+
self.x = np.c_[x, y, t]
|
|
295
|
+
|
|
296
|
+
if animate:
|
|
297
|
+
# display the initial particles
|
|
298
|
+
(self.h,) = ax.plot(
|
|
299
|
+
self.x[:, 0],
|
|
300
|
+
self.x[:, 1],
|
|
301
|
+
"go",
|
|
302
|
+
zorder=0,
|
|
303
|
+
markersize=3,
|
|
304
|
+
markeredgecolor="none",
|
|
305
|
+
alpha=0.3,
|
|
306
|
+
label="particle",
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
self.weight = np.ones((self.nparticles,))
|
|
310
|
+
|
|
311
|
+
def run(self, T=10, x0=None):
|
|
312
|
+
"""
|
|
313
|
+
Run the particle filter simulation
|
|
314
|
+
|
|
315
|
+
:param T: maximum simulation time in seconds
|
|
316
|
+
:type T: float
|
|
317
|
+
:param x0: Initial state, defaults to value given to Vehicle constructor
|
|
318
|
+
:type x0: array_like(3) or array_like(2)
|
|
319
|
+
|
|
320
|
+
Simulates the motion of a vehicle (under the control of a driving agent)
|
|
321
|
+
and the particle-filter estimator. The steps are:
|
|
322
|
+
|
|
323
|
+
- initialize the filter, vehicle and vehicle driver agent, sensor
|
|
324
|
+
- for each time step:
|
|
325
|
+
|
|
326
|
+
- step the vehicle and its driver agent, obtain odometry
|
|
327
|
+
- take a sensor reading
|
|
328
|
+
- execute the EKF
|
|
329
|
+
- save information as a namedtuple to the history list for later display
|
|
330
|
+
|
|
331
|
+
:seealso: :meth:`history` :meth:`landmark` :meth:`landmarks`
|
|
332
|
+
:meth:`get_xy` :meth:`get_t` :meth:`get_std`
|
|
333
|
+
:meth:`plot_xy`
|
|
334
|
+
"""
|
|
335
|
+
|
|
336
|
+
self._init(x0=x0)
|
|
337
|
+
|
|
338
|
+
# anim = Animate(opt.movie)
|
|
339
|
+
|
|
340
|
+
# display the initial particles
|
|
341
|
+
ax = smb.axes_logic(None, 2)
|
|
342
|
+
if self._animate:
|
|
343
|
+
(self.h,) = ax.plot(
|
|
344
|
+
self.x[:, 0],
|
|
345
|
+
self.x[:, 1],
|
|
346
|
+
"go",
|
|
347
|
+
zorder=0,
|
|
348
|
+
markersize=3,
|
|
349
|
+
markeredgecolor="none",
|
|
350
|
+
alpha=0.3,
|
|
351
|
+
label="particle",
|
|
352
|
+
)
|
|
353
|
+
# set(self.h, 'Tag', 'particles')
|
|
354
|
+
|
|
355
|
+
# self.robot.plot()
|
|
356
|
+
|
|
357
|
+
# iterate over time
|
|
358
|
+
import time
|
|
359
|
+
|
|
360
|
+
for i in range(round(T / self.robot.dt)):
|
|
361
|
+
self._step()
|
|
362
|
+
# time.sleep(0.2)
|
|
363
|
+
plt.pause(0.2)
|
|
364
|
+
# plt.draw()
|
|
365
|
+
# anim.add()
|
|
366
|
+
# anim.close()
|
|
367
|
+
|
|
368
|
+
def run_animation(self, T=10, x0=None, format=None, file=None):
|
|
369
|
+
"""
|
|
370
|
+
Run the particle filter simulation
|
|
371
|
+
|
|
372
|
+
:param T: maximum simulation time in seconds
|
|
373
|
+
:type T: float
|
|
374
|
+
:param x0: Initial state, defaults to value given to Vehicle constructor
|
|
375
|
+
:type x0: array_like(3) or array_like(2)
|
|
376
|
+
:param format: Output format
|
|
377
|
+
:type format: str, optional
|
|
378
|
+
:param file: File name
|
|
379
|
+
:type file: str, optional
|
|
380
|
+
:return: Matplotlib animation object
|
|
381
|
+
:rtype: :meth:`matplotlib.animation.FuncAnimation`
|
|
382
|
+
|
|
383
|
+
Simulates the motion of a vehicle (under the control of a driving agent)
|
|
384
|
+
and the particle-filter estimator and returns an animation
|
|
385
|
+
in various formats::
|
|
386
|
+
|
|
387
|
+
``format`` ``file`` description
|
|
388
|
+
============ ========= ============================
|
|
389
|
+
``"html"`` str, None return HTML5 video
|
|
390
|
+
``"jshtml"`` str, None return JS+HTML video
|
|
391
|
+
``"gif"`` str return animated GIF
|
|
392
|
+
``"mp4"`` str return MP4/H264 video
|
|
393
|
+
``None`` return a ``FuncAnimation`` object
|
|
394
|
+
|
|
395
|
+
The allowables types for ``file`` are given in the second column. A str
|
|
396
|
+
value is the file name. If ``None`` is an option then return the video as a string.
|
|
397
|
+
|
|
398
|
+
For the last case, a reference to the animation object must be held if used for
|
|
399
|
+
animation in a Jupyter cell::
|
|
400
|
+
|
|
401
|
+
anim = robot.run_animation(T=20)
|
|
402
|
+
|
|
403
|
+
The steps are:
|
|
404
|
+
|
|
405
|
+
- initialize the filter, vehicle and vehicle driver agent, sensor
|
|
406
|
+
- for each time step:
|
|
407
|
+
|
|
408
|
+
- step the vehicle and its driver agent, obtain odometry
|
|
409
|
+
- take a sensor reading
|
|
410
|
+
- execute the EKF
|
|
411
|
+
- save information as a namedtuple to the history list for later display
|
|
412
|
+
|
|
413
|
+
:seealso: :meth:`history` :meth:`landmark` :meth:`landmarks`
|
|
414
|
+
:meth:`get_xy` :meth:`get_t` :meth:`get_std`
|
|
415
|
+
:meth:`plot_xy`
|
|
416
|
+
"""
|
|
417
|
+
|
|
418
|
+
fig, ax = plt.subplots()
|
|
419
|
+
|
|
420
|
+
nframes = round(T / self.robot.dt)
|
|
421
|
+
anim = animation.FuncAnimation(
|
|
422
|
+
fig=fig,
|
|
423
|
+
# func=lambda i: self._step(animate=True, pause=False),
|
|
424
|
+
# init_func=lambda: self._init(animate=True),
|
|
425
|
+
func=lambda i: self._step(),
|
|
426
|
+
init_func=lambda: self._init(ax=ax, animate=True),
|
|
427
|
+
frames=nframes,
|
|
428
|
+
interval=self.robot.dt * 1000,
|
|
429
|
+
blit=False,
|
|
430
|
+
repeat=False,
|
|
431
|
+
)
|
|
432
|
+
# anim._interval = self.dt*1000/2
|
|
433
|
+
# anim._repeat = True
|
|
434
|
+
ret = None
|
|
435
|
+
if format == "html":
|
|
436
|
+
ret = anim.to_html5_video() # convert to embeddable HTML5 animation
|
|
437
|
+
elif format == "jshtml":
|
|
438
|
+
ret = anim.to_jshtml() # convert to embeddable Javascript/HTML animation
|
|
439
|
+
elif format == "gif":
|
|
440
|
+
anim.save(
|
|
441
|
+
file, writer=animation.PillowWriter(fps=1 / self.dt)
|
|
442
|
+
) # convert to GIF
|
|
443
|
+
ret = None
|
|
444
|
+
elif format == "mp4":
|
|
445
|
+
anim.save(
|
|
446
|
+
file, writer=animation.FFMpegWriter(fps=1 / self.dt)
|
|
447
|
+
) # convert to mp4/H264
|
|
448
|
+
ret = None
|
|
449
|
+
elif format == None:
|
|
450
|
+
# return the anim object
|
|
451
|
+
return anim
|
|
452
|
+
else:
|
|
453
|
+
raise ValueError("unknown format")
|
|
454
|
+
|
|
455
|
+
if ret is not None and file is not None:
|
|
456
|
+
with open(file, "w") as f:
|
|
457
|
+
f.write(ret)
|
|
458
|
+
ret = None
|
|
459
|
+
plt.close(fig)
|
|
460
|
+
return ret
|
|
461
|
+
# self._init(x0=x0)
|
|
462
|
+
|
|
463
|
+
# # anim = Animate(opt.movie)
|
|
464
|
+
|
|
465
|
+
# # display the initial particles
|
|
466
|
+
# ax = smb.axes_logic(None, 2)
|
|
467
|
+
# if self._animate:
|
|
468
|
+
# (self.h,) = ax.plot(
|
|
469
|
+
# self.x[:, 0],
|
|
470
|
+
# self.x[:, 1],
|
|
471
|
+
# "go",
|
|
472
|
+
# zorder=0,
|
|
473
|
+
# markersize=3,
|
|
474
|
+
# markeredgecolor="none",
|
|
475
|
+
# alpha=0.3,
|
|
476
|
+
# label="particle",
|
|
477
|
+
# )
|
|
478
|
+
# # set(self.h, 'Tag', 'particles')
|
|
479
|
+
|
|
480
|
+
# # self.robot.plot()
|
|
481
|
+
|
|
482
|
+
# # iterate over time
|
|
483
|
+
# import time
|
|
484
|
+
|
|
485
|
+
# for i in range(round(T / self.robot.dt)):
|
|
486
|
+
# self._step()
|
|
487
|
+
# # time.sleep(0.2)
|
|
488
|
+
# plt.pause(0.2)
|
|
489
|
+
# # plt.draw()
|
|
490
|
+
# # anim.add()
|
|
491
|
+
# # anim.close()
|
|
492
|
+
|
|
493
|
+
def _step(self):
|
|
494
|
+
|
|
495
|
+
# fprintf('---- step\n')
|
|
496
|
+
odo = self.robot.step(animate=self._animate) # move the robot
|
|
497
|
+
|
|
498
|
+
# update the particles based on odometry
|
|
499
|
+
self._predict(odo)
|
|
500
|
+
|
|
501
|
+
# get a sensor reading
|
|
502
|
+
z, lm_id = self.sensor.reading()
|
|
503
|
+
|
|
504
|
+
if z is not None:
|
|
505
|
+
self._observe(z, lm_id)
|
|
506
|
+
# fprintf(' observe beacon #d\n', lm_id)
|
|
507
|
+
|
|
508
|
+
self._select()
|
|
509
|
+
|
|
510
|
+
# our estimate is simply the mean of the particles
|
|
511
|
+
x_est = self.x.mean(axis=0)
|
|
512
|
+
std_est = self.x.std(axis=0)
|
|
513
|
+
|
|
514
|
+
# std is more complex for angles, need to account for 2pi wrap
|
|
515
|
+
std_est[2] = np.sqrt(np.sum(smb.angdiff(self.x[:, 2], x_est[2]) ** 2)) / (
|
|
516
|
+
self.nparticles - 1
|
|
517
|
+
)
|
|
518
|
+
|
|
519
|
+
# display the updated particles
|
|
520
|
+
# set(self.h, 'Xdata', self.x(:,1), 'Ydata', self.x(:,2), 'Zdata', self.x(:,3))
|
|
521
|
+
|
|
522
|
+
if self._animate:
|
|
523
|
+
self.h.set_xdata(self.x[:, 0])
|
|
524
|
+
self.h.set_ydata(self.x[:, 1])
|
|
525
|
+
|
|
526
|
+
# if ~isempty(self.anim)
|
|
527
|
+
# self.anim.add()
|
|
528
|
+
|
|
529
|
+
if self._keep_history:
|
|
530
|
+
hist = self._htuple(
|
|
531
|
+
self.robot._t, odo.copy(), x_est, std_est, self.weight.copy()
|
|
532
|
+
)
|
|
533
|
+
self._history.append(hist)
|
|
534
|
+
|
|
535
|
+
def plot_pdf(self):
|
|
536
|
+
"""
|
|
537
|
+
Plot particle PDF
|
|
538
|
+
|
|
539
|
+
Displays a discrete PDF of vehicle position. Creates a 3D plot where
|
|
540
|
+
the x- and y-axes are the estimated vehicle position and the z-axis is
|
|
541
|
+
the particle weight. Each particle is represented by a a vertical line
|
|
542
|
+
segment of height equal to particle weight.
|
|
543
|
+
"""
|
|
544
|
+
|
|
545
|
+
ax = smb.plotvol3()
|
|
546
|
+
for (x, y, t), weight in zip(self.x, self.weight):
|
|
547
|
+
# ax.plot([x, x], [y, y], [0, weight], 'r')
|
|
548
|
+
ax.plot([x, x], [y, y], [0, weight], "skyblue", linewidth=3)
|
|
549
|
+
ax.plot(x, y, weight, "k.", markersize=6)
|
|
550
|
+
|
|
551
|
+
ax.grid(True)
|
|
552
|
+
ax.set_xlabel("X")
|
|
553
|
+
ax.set_ylabel("Y")
|
|
554
|
+
ax.set_xlim()
|
|
555
|
+
ax.set_zlabel("particle weight")
|
|
556
|
+
ax.view_init(29, 59)
|
|
557
|
+
|
|
558
|
+
def _predict(self, odo):
|
|
559
|
+
# step 2
|
|
560
|
+
# update the particle state based on odometry and a random perturbation
|
|
561
|
+
|
|
562
|
+
# Straightforward code:
|
|
563
|
+
#
|
|
564
|
+
# for i=1:self.nparticles
|
|
565
|
+
# x = self.robot.f( self.x(i,:), odo)' + sqrt(self.R)*self.randn[2,0]
|
|
566
|
+
# x[2] = angdiff(x[2])
|
|
567
|
+
# self.x(i,:) = x
|
|
568
|
+
#
|
|
569
|
+
# Vectorized code:
|
|
570
|
+
|
|
571
|
+
self.x = self.robot.f(self.x, odo) + self.random.multivariate_normal(
|
|
572
|
+
(0, 0, 0), self.R, size=self.nparticles
|
|
573
|
+
)
|
|
574
|
+
self.x[:, 2] = smb.angdiff(self.x[:, 2])
|
|
575
|
+
|
|
576
|
+
def _observe(self, z, lm_id):
|
|
577
|
+
# step 3
|
|
578
|
+
# predict observation and score the particles
|
|
579
|
+
|
|
580
|
+
# Straightforward code:
|
|
581
|
+
#
|
|
582
|
+
# for p = 1:self.nparticles
|
|
583
|
+
# # what do we expect observation to be for this particle?
|
|
584
|
+
# # use the sensor model h(.)
|
|
585
|
+
# z_pred = self.sensor.h( self.x(p,:), lm_id)
|
|
586
|
+
#
|
|
587
|
+
# # how different is it
|
|
588
|
+
# innov[0] = z[0] - z_pred[0]
|
|
589
|
+
# innov[1] = angdiff(z[1], z_pred[1])
|
|
590
|
+
#
|
|
591
|
+
# # get likelihood (new importance). Assume Gaussian but any PDF works!
|
|
592
|
+
# # If predicted obs is very different from actual obs this score will be low
|
|
593
|
+
# # ie. this particle is not very good at predicting the observation.
|
|
594
|
+
# # A lower score means it is less likely to be selected for the next generation...
|
|
595
|
+
# # The weight is never zero.
|
|
596
|
+
# self.weight(p) = exp(-0.5*innov'*inv(self.L)*innov) + 0.05
|
|
597
|
+
# end
|
|
598
|
+
#
|
|
599
|
+
# Vectorized code:
|
|
600
|
+
|
|
601
|
+
invL = np.linalg.inv(self.L)
|
|
602
|
+
z_pred = self.sensor.h(self.x, lm_id)
|
|
603
|
+
z_pred[:, 0] = z[0] - z_pred[:, 0]
|
|
604
|
+
z_pred[:, 1] = smb.angdiff(z[1], z_pred[:, 1])
|
|
605
|
+
|
|
606
|
+
LL = -0.5 * np.r_[invL[0, 0], invL[1, 1], 2 * invL[0, 1]]
|
|
607
|
+
e = (
|
|
608
|
+
np.c_[z_pred[:, 0] ** 2, z_pred[:, 1] ** 2, z_pred[:, 0] * z_pred[:, 1]]
|
|
609
|
+
@ LL
|
|
610
|
+
)
|
|
611
|
+
self.weight = np.exp(e) + self.w0
|
|
612
|
+
|
|
613
|
+
def _select(self):
|
|
614
|
+
# step 4
|
|
615
|
+
# select particles based on their weights
|
|
616
|
+
#
|
|
617
|
+
# particles with large weights will occupy a greater percentage of the
|
|
618
|
+
# y axis in a cummulative plot
|
|
619
|
+
cdf = np.cumsum(self.weight) / self.weight.sum()
|
|
620
|
+
|
|
621
|
+
# so randomly (uniform) choosing y values is more likely to correspond to
|
|
622
|
+
# better particles...
|
|
623
|
+
iselect = self.random.uniform(0, 1, size=(self.nparticles,))
|
|
624
|
+
|
|
625
|
+
# find the particle that corresponds to each y value (just a look up)
|
|
626
|
+
interpfun = sp.interpolate.interp1d(
|
|
627
|
+
cdf,
|
|
628
|
+
np.arange(self.nparticles),
|
|
629
|
+
assume_sorted=True,
|
|
630
|
+
kind="nearest",
|
|
631
|
+
fill_value="extrapolate",
|
|
632
|
+
)
|
|
633
|
+
inextgen = interpfun(iselect).astype(int)
|
|
634
|
+
|
|
635
|
+
# copy selected particles for next generation..
|
|
636
|
+
self.x = self.x[inextgen, :]
|
|
637
|
+
|
|
638
|
+
def get_t(self):
|
|
639
|
+
"""
|
|
640
|
+
Get time from simulation
|
|
641
|
+
|
|
642
|
+
:return: simulation time vector
|
|
643
|
+
:rtype: ndarray(n)
|
|
644
|
+
|
|
645
|
+
Return simulation time vector, starts at zero. The timestep is an
|
|
646
|
+
attribute of the ``robot`` object.
|
|
647
|
+
"""
|
|
648
|
+
return np.array([h.t for h in self._history])
|
|
649
|
+
|
|
650
|
+
def get_xyt(self):
|
|
651
|
+
r"""
|
|
652
|
+
Get estimated vehicle trajectory
|
|
653
|
+
|
|
654
|
+
:return: vehicle trajectory where each row is configuration :math:`(x, y, \theta)`
|
|
655
|
+
:rtype: ndarray(n,3)
|
|
656
|
+
|
|
657
|
+
:seealso: :meth:`plot_xy` :meth:`run` :meth:`history`
|
|
658
|
+
"""
|
|
659
|
+
return np.array([h.xest[:2] for h in self._history])
|
|
660
|
+
|
|
661
|
+
def get_std(self):
|
|
662
|
+
r"""
|
|
663
|
+
Get standard deviation of particles
|
|
664
|
+
|
|
665
|
+
:return: standard deviation of vehicle position estimate
|
|
666
|
+
:rtype: ndarray(n,2)
|
|
667
|
+
|
|
668
|
+
Return the standard deviation :math:`(\sigma_x, \sigma_y)` of the
|
|
669
|
+
particle cloud at each time step.
|
|
670
|
+
|
|
671
|
+
:seealso: :meth:`get_xyt`
|
|
672
|
+
"""
|
|
673
|
+
return np.array([h.std for h in self._history])
|
|
674
|
+
|
|
675
|
+
def plot_xy(self, block=None, **kwargs):
|
|
676
|
+
r"""
|
|
677
|
+
Plot estimated vehicle position
|
|
678
|
+
|
|
679
|
+
:param args: position arguments passed to :meth:`~matplotlib.axes.Axes.plot`
|
|
680
|
+
:param kwargs: keywords arguments passed to :meth:`~matplotlib.axes.Axes.plot`
|
|
681
|
+
:param block: hold plot until figure is closed, defaults to None
|
|
682
|
+
:type block: bool, optional
|
|
683
|
+
|
|
684
|
+
Plot the estimated vehicle path in the xy-plane.
|
|
685
|
+
|
|
686
|
+
:seealso: :meth:`get_xy`
|
|
687
|
+
"""
|
|
688
|
+
xyt = self.get_xyt()
|
|
689
|
+
plt.plot(xyt[:, 0], xyt[:, 1], **kwargs)
|
|
690
|
+
if block is not None:
|
|
691
|
+
plt.show(block=block)
|
|
692
|
+
|
|
693
|
+
|
|
694
|
+
if __name__ == "__main__":
|
|
695
|
+
from roboticstoolbox import *
|
|
696
|
+
|
|
697
|
+
map = LandmarkMap(20, workspace=10)
|
|
698
|
+
V = np.diag([0.02, np.deg2rad(0.5)]) ** 2
|
|
699
|
+
robot = Bicycle(covar=V, animation="car", workspace=map)
|
|
700
|
+
robot.control = RandomPath(workspace=map)
|
|
701
|
+
W = np.diag([0.1, np.deg2rad(1)]) ** 2
|
|
702
|
+
sensor = RangeBearingSensor(robot, map, covar=W, plot=True)
|
|
703
|
+
R = np.diag([0.1, 0.1, np.deg2rad(1)]) ** 2
|
|
704
|
+
L = np.diag([0.1, 0.1])
|
|
705
|
+
pf = ParticleFilter(robot, sensor=sensor, R=R, L=L, nparticles=1000, animate=True)
|
|
706
|
+
pf.run(T=10)
|