diff --git a/packages/Matlab/README.md b/packages/MATLAB/README.md similarity index 98% rename from packages/Matlab/README.md rename to packages/MATLAB/README.md index 58758b8..1674098 100644 --- a/packages/Matlab/README.md +++ b/packages/MATLAB/README.md @@ -49,7 +49,7 @@ Author: Huan Weng, Bill Hunt, Mikhail Todes, Jarvis Schultz Contact: huanweng@u.northwestern.edu -Package Version: 1.0.1 +Package Version: 1.1.0 Matlab Version: R2017b diff --git a/packages/Matlab/mr/Adjoint.m b/packages/MATLAB/mr/Adjoint.m similarity index 100% rename from packages/Matlab/mr/Adjoint.m rename to packages/MATLAB/mr/Adjoint.m diff --git a/packages/Matlab/mr/AxisAng3.m b/packages/MATLAB/mr/AxisAng3.m similarity index 100% rename from packages/Matlab/mr/AxisAng3.m rename to packages/MATLAB/mr/AxisAng3.m diff --git a/packages/Matlab/mr/AxisAng6.m b/packages/MATLAB/mr/AxisAng6.m similarity index 100% rename from packages/Matlab/mr/AxisAng6.m rename to packages/MATLAB/mr/AxisAng6.m diff --git a/packages/Matlab/mr/CartesianTrajectory.m b/packages/MATLAB/mr/CartesianTrajectory.m similarity index 100% rename from packages/Matlab/mr/CartesianTrajectory.m rename to packages/MATLAB/mr/CartesianTrajectory.m diff --git a/packages/Matlab/mr/ComputedTorque.m b/packages/MATLAB/mr/ComputedTorque.m similarity index 100% rename from packages/Matlab/mr/ComputedTorque.m rename to packages/MATLAB/mr/ComputedTorque.m diff --git a/packages/Matlab/mr/CubicTimeScaling.m b/packages/MATLAB/mr/CubicTimeScaling.m similarity index 100% rename from packages/Matlab/mr/CubicTimeScaling.m rename to packages/MATLAB/mr/CubicTimeScaling.m diff --git a/packages/Matlab/mr/DistanceToSE3.m b/packages/MATLAB/mr/DistanceToSE3.m similarity index 100% rename from packages/Matlab/mr/DistanceToSE3.m rename to packages/MATLAB/mr/DistanceToSE3.m diff --git a/packages/Matlab/mr/DistanceToSO3.m b/packages/MATLAB/mr/DistanceToSO3.m similarity index 100% rename from packages/Matlab/mr/DistanceToSO3.m rename to packages/MATLAB/mr/DistanceToSO3.m diff --git a/packages/Matlab/mr/EndEffectorForces.m b/packages/MATLAB/mr/EndEffectorForces.m similarity index 100% rename from packages/Matlab/mr/EndEffectorForces.m rename to packages/MATLAB/mr/EndEffectorForces.m diff --git a/packages/Matlab/mr/EulerStep.m b/packages/MATLAB/mr/EulerStep.m similarity index 100% rename from packages/Matlab/mr/EulerStep.m rename to packages/MATLAB/mr/EulerStep.m diff --git a/packages/Matlab/mr/FKinBody.m b/packages/MATLAB/mr/FKinBody.m similarity index 100% rename from packages/Matlab/mr/FKinBody.m rename to packages/MATLAB/mr/FKinBody.m diff --git a/packages/Matlab/mr/FKinSpace.m b/packages/MATLAB/mr/FKinSpace.m similarity index 100% rename from packages/Matlab/mr/FKinSpace.m rename to packages/MATLAB/mr/FKinSpace.m diff --git a/packages/Matlab/mr/ForwardDynamics.m b/packages/MATLAB/mr/ForwardDynamics.m similarity index 100% rename from packages/Matlab/mr/ForwardDynamics.m rename to packages/MATLAB/mr/ForwardDynamics.m diff --git a/packages/Matlab/mr/ForwardDynamicsTrajectory.m b/packages/MATLAB/mr/ForwardDynamicsTrajectory.m similarity index 100% rename from packages/Matlab/mr/ForwardDynamicsTrajectory.m rename to packages/MATLAB/mr/ForwardDynamicsTrajectory.m diff --git a/packages/Matlab/mr/GravityForces.m b/packages/MATLAB/mr/GravityForces.m similarity index 100% rename from packages/Matlab/mr/GravityForces.m rename to packages/MATLAB/mr/GravityForces.m diff --git a/packages/Matlab/mr/IKinBody.m b/packages/MATLAB/mr/IKinBody.m similarity index 100% rename from packages/Matlab/mr/IKinBody.m rename to packages/MATLAB/mr/IKinBody.m diff --git a/packages/Matlab/mr/IKinSpace.m b/packages/MATLAB/mr/IKinSpace.m similarity index 100% rename from packages/Matlab/mr/IKinSpace.m rename to packages/MATLAB/mr/IKinSpace.m diff --git a/packages/Matlab/mr/InverseDynamics.m b/packages/MATLAB/mr/InverseDynamics.m similarity index 100% rename from packages/Matlab/mr/InverseDynamics.m rename to packages/MATLAB/mr/InverseDynamics.m diff --git a/packages/Matlab/mr/InverseDynamicsTrajectory.m b/packages/MATLAB/mr/InverseDynamicsTrajectory.m similarity index 100% rename from packages/Matlab/mr/InverseDynamicsTrajectory.m rename to packages/MATLAB/mr/InverseDynamicsTrajectory.m diff --git a/packages/Matlab/mr/JacobianBody.m b/packages/MATLAB/mr/JacobianBody.m similarity index 100% rename from packages/Matlab/mr/JacobianBody.m rename to packages/MATLAB/mr/JacobianBody.m diff --git a/packages/Matlab/mr/JacobianSpace.m b/packages/MATLAB/mr/JacobianSpace.m similarity index 100% rename from packages/Matlab/mr/JacobianSpace.m rename to packages/MATLAB/mr/JacobianSpace.m diff --git a/packages/Matlab/mr/JointTrajectory.m b/packages/MATLAB/mr/JointTrajectory.m similarity index 100% rename from packages/Matlab/mr/JointTrajectory.m rename to packages/MATLAB/mr/JointTrajectory.m diff --git a/packages/Matlab/mr/MassMatrix.m b/packages/MATLAB/mr/MassMatrix.m similarity index 100% rename from packages/Matlab/mr/MassMatrix.m rename to packages/MATLAB/mr/MassMatrix.m diff --git a/packages/Matlab/mr/MatrixExp3.m b/packages/MATLAB/mr/MatrixExp3.m similarity index 100% rename from packages/Matlab/mr/MatrixExp3.m rename to packages/MATLAB/mr/MatrixExp3.m diff --git a/packages/Matlab/mr/MatrixExp6.m b/packages/MATLAB/mr/MatrixExp6.m similarity index 100% rename from packages/Matlab/mr/MatrixExp6.m rename to packages/MATLAB/mr/MatrixExp6.m diff --git a/packages/Matlab/mr/MatrixLog3.m b/packages/MATLAB/mr/MatrixLog3.m similarity index 54% rename from packages/Matlab/mr/MatrixLog3.m rename to packages/MATLAB/mr/MatrixLog3.m index fa50a47..bdb41d9 100644 --- a/packages/Matlab/mr/MatrixLog3.m +++ b/packages/MATLAB/mr/MatrixLog3.m @@ -15,25 +15,23 @@ % 1.2092 0 -1.2092 % -1.2092 1.2092 0 -if NearZero(norm(R - eye(3))) - so3mat = zeros(3); -elseif NearZero(trace(R) + 1) +acosinput = (trace(R) - 1) / 2; +if acosinput >= 1 + so3mat = zeros(3); +elseif acosinput <= -1 if ~NearZero(1 + R(3, 3)) - omg = (1 / sqrt(2 * (1 + R(3, 3)))) * [R(1, 3); R(2, 3); 1 + R(3, 3)]; + omg = (1 / sqrt(2 * (1 + R(3, 3)))) ... + * [R(1, 3); R(2, 3); 1 + R(3, 3)]; elseif ~NearZero(1 + R(2, 2)) - omg = (1 / sqrt(2 * (1 + R(2, 2)))) * [R(1, 2); 1 + R(2, 2); R(3, 2)]; + omg = (1 / sqrt(2 * (1 + R(2, 2)))) ... + * [R(1, 2); 1 + R(2, 2); R(3, 2)]; else - omg = (1 / sqrt(2 * (1 + R(1, 1)))) * [1 + R(1, 1); R(2, 1); R(3, 1)]; + omg = (1 / sqrt(2 * (1 + R(1, 1)))) ... + * [1 + R(1, 1); R(2, 1); R(3, 1)]; end so3mat = VecToso3(pi * omg); else - acosinput = (trace(R) - 1) / 2; - if acosinput > 1 - acosinput = 1; - elseif acosinput < -1 - acosinput = -1; - end - theta = acos(acosinput); + theta = acos(acosinput); so3mat = theta * (1 / (2 * sin(theta))) * (R - R'); end end \ No newline at end of file diff --git a/packages/Matlab/mr/MatrixLog6.m b/packages/MATLAB/mr/MatrixLog6.m similarity index 58% rename from packages/Matlab/mr/MatrixLog6.m rename to packages/MATLAB/mr/MatrixLog6.m index 1ca2e48..f717eab 100644 --- a/packages/Matlab/mr/MatrixLog6.m +++ b/packages/MATLAB/mr/MatrixLog6.m @@ -17,20 +17,14 @@ % 0 0 0 0 [R, p] = TransToRp(T); -if NearZero(norm(R - eye(3))) +omgmat = MatrixLog3(R); +if isequal(omgmat, zeros(3)) expmat = [zeros(3), T(1: 3, 4); 0, 0, 0, 0]; else - acosinput = (trace(R) - 1) / 2; - if acosinput > 1 - acosinput = 1; - elseif acosinput < -1 - acosinput = -1; - end - theta = acos(acosinput); - omgmat = MatrixLog3(R); - expmat = [ omgmat, (eye(3) - omgmat / 2 ... - + (1 / theta - cot(theta / 2) / 2) ... - * omgmat * omgmat / theta) * p; - 0, 0, 0, 0]; + theta = acos((trace(R) - 1) / 2); + expmat = [omgmat, (eye(3) - omgmat / 2 ... + + (1 / theta - cot(theta / 2) / 2) ... + * omgmat * omgmat / theta) * p; + 0, 0, 0, 0]; end end \ No newline at end of file diff --git a/packages/Matlab/mr/NearZero.m b/packages/MATLAB/mr/NearZero.m similarity index 100% rename from packages/Matlab/mr/NearZero.m rename to packages/MATLAB/mr/NearZero.m diff --git a/packages/Matlab/mr/Normalize.m b/packages/MATLAB/mr/Normalize.m similarity index 100% rename from packages/Matlab/mr/Normalize.m rename to packages/MATLAB/mr/Normalize.m diff --git a/packages/Matlab/mr/ProjectToSE3.m b/packages/MATLAB/mr/ProjectToSE3.m similarity index 100% rename from packages/Matlab/mr/ProjectToSE3.m rename to packages/MATLAB/mr/ProjectToSE3.m diff --git a/packages/Matlab/mr/ProjectToSO3.m b/packages/MATLAB/mr/ProjectToSO3.m similarity index 100% rename from packages/Matlab/mr/ProjectToSO3.m rename to packages/MATLAB/mr/ProjectToSO3.m diff --git a/packages/Matlab/mr/QuinticTimeScaling.m b/packages/MATLAB/mr/QuinticTimeScaling.m similarity index 100% rename from packages/Matlab/mr/QuinticTimeScaling.m rename to packages/MATLAB/mr/QuinticTimeScaling.m diff --git a/packages/Matlab/mr/RotInv.m b/packages/MATLAB/mr/RotInv.m similarity index 100% rename from packages/Matlab/mr/RotInv.m rename to packages/MATLAB/mr/RotInv.m diff --git a/packages/Matlab/mr/RpToTrans.m b/packages/MATLAB/mr/RpToTrans.m similarity index 100% rename from packages/Matlab/mr/RpToTrans.m rename to packages/MATLAB/mr/RpToTrans.m diff --git a/packages/Matlab/mr/ScrewToAxis.m b/packages/MATLAB/mr/ScrewToAxis.m similarity index 100% rename from packages/Matlab/mr/ScrewToAxis.m rename to packages/MATLAB/mr/ScrewToAxis.m diff --git a/packages/Matlab/mr/ScrewTrajectory.m b/packages/MATLAB/mr/ScrewTrajectory.m similarity index 100% rename from packages/Matlab/mr/ScrewTrajectory.m rename to packages/MATLAB/mr/ScrewTrajectory.m diff --git a/packages/Matlab/mr/SimulateControl.m b/packages/MATLAB/mr/SimulateControl.m similarity index 100% rename from packages/Matlab/mr/SimulateControl.m rename to packages/MATLAB/mr/SimulateControl.m diff --git a/packages/Matlab/mr/TestIfSE3.m b/packages/MATLAB/mr/TestIfSE3.m similarity index 100% rename from packages/Matlab/mr/TestIfSE3.m rename to packages/MATLAB/mr/TestIfSE3.m diff --git a/packages/Matlab/mr/TestIfSO3.m b/packages/MATLAB/mr/TestIfSO3.m similarity index 100% rename from packages/Matlab/mr/TestIfSO3.m rename to packages/MATLAB/mr/TestIfSO3.m diff --git a/packages/Matlab/mr/TransInv.m b/packages/MATLAB/mr/TransInv.m similarity index 100% rename from packages/Matlab/mr/TransInv.m rename to packages/MATLAB/mr/TransInv.m diff --git a/packages/Matlab/mr/TransToRp.m b/packages/MATLAB/mr/TransToRp.m similarity index 100% rename from packages/Matlab/mr/TransToRp.m rename to packages/MATLAB/mr/TransToRp.m diff --git a/packages/Matlab/mr/VecTose3.m b/packages/MATLAB/mr/VecTose3.m similarity index 100% rename from packages/Matlab/mr/VecTose3.m rename to packages/MATLAB/mr/VecTose3.m diff --git a/packages/Matlab/mr/VecToso3.m b/packages/MATLAB/mr/VecToso3.m similarity index 100% rename from packages/Matlab/mr/VecToso3.m rename to packages/MATLAB/mr/VecToso3.m diff --git a/packages/Matlab/mr/VelQuadraticForces.m b/packages/MATLAB/mr/VelQuadraticForces.m similarity index 100% rename from packages/Matlab/mr/VelQuadraticForces.m rename to packages/MATLAB/mr/VelQuadraticForces.m diff --git a/packages/Matlab/mr/ad.m b/packages/MATLAB/mr/ad.m similarity index 100% rename from packages/Matlab/mr/ad.m rename to packages/MATLAB/mr/ad.m diff --git a/packages/Matlab/mr/se3ToVec.m b/packages/MATLAB/mr/se3ToVec.m similarity index 100% rename from packages/Matlab/mr/se3ToVec.m rename to packages/MATLAB/mr/se3ToVec.m diff --git a/packages/Matlab/mr/so3ToVec.m b/packages/MATLAB/mr/so3ToVec.m similarity index 100% rename from packages/Matlab/mr/so3ToVec.m rename to packages/MATLAB/mr/so3ToVec.m diff --git a/packages/Mathematica/ModernRobotics.m b/packages/Mathematica/ModernRobotics.m index c85b1e6..9c9615f 100644 --- a/packages/Mathematica/ModernRobotics.m +++ b/packages/Mathematica/ModernRobotics.m @@ -11,7 +11,7 @@ (* :Author: Huan Weng, Jarvis Schultz, Mikhail Todes*) (* :Contact: huanweng@u.northwestern.edu*) (* :Summary: This package is the code library accompanying the book. *) -(* :Package Version: 1.0.1 *) +(* :Package Version: 1.1.0*) (* :Mathematica Version: 11.3 *) (* Tested in Mathematica 11.3 *) @@ -53,7 +53,7 @@ Returns the inverse (transpose). invR = RotInv[{{0,0,1},{1,0,0},{0,1,0}}] Output: {{0,1,0},{0,0,1},{1,0,0}}" - + VecToso3::usage= "VecToso3[omg]: @@ -300,7 +300,7 @@ Returns the corresponding se(3) representation of exponential coordinates. Example: Input: - se3mat = MatrixLog6[{{1,0,0,0},{0,0,-1,0},{0,1,0,3},{0,0,0,1}}] + se3mat = MatrixLog6[{{1,0,0,0},{0,0,-1,0},{0,1,0,3},{0,0,0,1}}]//N Output: {{0,0,0,0},{0,0,-1.5708,2.35619},{0,1.5708,0,2.35619},{0,0,0,0}}" @@ -1289,10 +1289,11 @@ Returns the corresponding space Jacobian (6xn real numbers). MatrixLog3[R_]:=Module[ {acosinput,theta,omgmat}, + acosinput=(Tr[R]-1)/2; Which[ - NearZero[Norm[R-IdentityMatrix[3]]], + acosinput>=1, Return[ConstantArray[0,{3,3}]], - NearZero[Tr[R]+1], + acosinput<=-1, Which[ Not[NearZero[R[[3,3]]+1]], Return[VecToso3[ @@ -1311,11 +1312,9 @@ Returns the corresponding space Jacobian (6xn real numbers). ]] ], True, - acosinput=(Tr[R]-1)/2; - Which[acosinput>1,acosinput=1,acosinput<-1,acosinput=-1]; theta=ArcCos[acosinput]; omgmat=(R-R\[Transpose])/(2*Sin[theta]); - Return[theta*omgmat] + Return[theta*omgmat] ] ] @@ -1408,20 +1407,18 @@ Returns the corresponding space Jacobian (6xn real numbers). MatrixLog6[T_]:=Module[ {R,p,acosinput,theta,omgmat}, {R,p}=TransToRp[T]; + omgmat=MatrixLog3[R]; If[ - NearZero[Norm[R-IdentityMatrix[3]]], + omgmat==ConstantArray[0,{3,3}], ArrayFlatten[ {{ConstantArray[0,{3,3}],{T[[1;;3,4]]}\[Transpose]},{0,0}} ], - acosinput=(Tr[R]-1)/2; - Which[acosinput>1,acosinput=1,acosinput<-1,acosinput=-1]; - theta=ArcCos[acosinput]; - omgmat=MatrixLog3[R]; + theta=ArcCos[(Tr[R]-1)/2]; Return[ArrayFlatten[{ {omgmat,(IdentityMatrix[3]-omgmat/2+ (1/theta-Cot[theta/2]/2)*omgmat.omgmat/theta).p}, {0,0} - }]] + }]] ] ] diff --git a/packages/Python/modern_robotics/__version__.py b/packages/Python/modern_robotics/__version__.py index 3ff7e14..d930acc 100644 --- a/packages/Python/modern_robotics/__version__.py +++ b/packages/Python/modern_robotics/__version__.py @@ -1,2 +1,2 @@ -__version__ = '1.0.1' +__version__ = '1.1.0' diff --git a/packages/Python/modern_robotics/core.py b/packages/Python/modern_robotics/core.py index 401521e..18cb64e 100644 --- a/packages/Python/modern_robotics/core.py +++ b/packages/Python/modern_robotics/core.py @@ -6,7 +6,7 @@ *************************************************************************** Author: Huan Weng, Bill Hunt, Jarvis Schultz, Mikhail Todes, Email: huanweng@u.northwestern.edu -Date: July 2018 +Date: January 2018 *************************************************************************** Language: Python Also available in: MATLAB, Mathematica @@ -158,9 +158,10 @@ def MatrixLog3(R): [ 1.20919958, 0, -1.20919958], [-1.20919958, 1.20919958, 0]]) """ - if NearZero(np.linalg.norm(R - np.eye(3))): + acosinput = (np.trace(R) - 1) / 2.0 + if acosinput >= 1: return np.zeros((3, 3)) - elif NearZero(np.trace(R) + 1): + elif acosinput <= -1: if not NearZero(1 + R[2][2]): omg = (1.0 / np.sqrt(2 * (1 + R[2][2]))) \ * np.array([R[0][2], R[1][2], 1 + R[2][2]]) @@ -172,11 +173,6 @@ def MatrixLog3(R): * np.array([1 + R[0][0], R[1][0], R[2][0]]) return VecToso3(np.pi * omg) else: - acosinput = (np.trace(R) - 1) / 2.0 - if acosinput > 1: - acosinput = 1 - elif acosinput < -1: - acosinput = -1 theta = np.arccos(acosinput) return theta / 2.0 / np.sin(theta) * (R - np.array(R).T) @@ -392,27 +388,21 @@ def MatrixLog6(T): [0, 0, 0, 0]]) """ R, p = TransToRp(T) - if NearZero(np.linalg.norm(R - np.eye(3))): + omgmat = MatrixLog3(R) + if np.array_equal(omgmat, np.zeros((3, 3))): return np.r_[np.c_[np.zeros((3, 3)), [T[0][3], T[1][3], T[2][3]]], [[0, 0, 0, 0]]] else: - acosinput = (np.trace(R) - 1) / 2.0 - if acosinput > 1: - acosinput = 1 - elif acosinput < -1: - acosinput = -1 - theta = np.arccos(acosinput) - omgmat = MatrixLog3(R) + theta = np.arccos((np.trace(R) - 1) / 2.0) return np.r_[np.c_[omgmat, np.dot(np.eye(3) - omgmat / 2.0 \ + (1.0 / theta - 1.0 / np.tan(theta / 2.0) / 2) \ - * np.dot(omgmat,omgmat) / theta,[T[0][3], - T[1][3], - T[2][3]])], + * np.dot(omgmat,omgmat) / theta,[T[0][3], + T[1][3], + T[2][3]])], [[0, 0, 0, 0]]] - def ProjectToSO3(mat): """Returns a projection of mat into SO(3)