Sensor Fusion Orientation Estimation update
[platform/core/system/sensor-framework.git] / SensorFusion / Quat2Euler.m
1 function euler = Quat2Euler(q)\r
2 % Quat2Euler\r
3 %\r
4 % Copyright (c) 2014 Samsung Electronics Co., Ltd.\r
5 %\r
6 % Licensed under the Apache License, Version 2.0 (the "License");\r
7 % you may not use this file except in compliance with the License.\r
8 % You may obtain a copy of the License at\r
9 %\r
10 % http://www.apache.org/licenses/LICENSE-2.0\r
11 %\r
12 % Unless required by applicable law or agreed to in writing, software\r
13 % distributed under the License is distributed on an "AS IS" BASIS,\r
14 % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
15 % See the License for the specific language governing permissions and\r
16 % limitations under the License.\r
17 \r
18 % Converts a quaternion orientation to ZYX Euler angles where phi is a\r
19 % rotation around X, theta around Y and psi around Z.\r
20 \r
21     R(1,1,:) = 2.*q(:,1).^2-1+2.*q(:,2).^2;\r
22     R(2,1,:) = 2.*(q(:,2).*q(:,3)-q(:,1).*q(:,4));\r
23     R(3,1,:) = 2.*(q(:,2).*q(:,4)+q(:,1).*q(:,3));\r
24     R(3,2,:) = 2.*(q(:,3).*q(:,4)-q(:,1).*q(:,2));\r
25     R(3,3,:) = 2.*q(:,1).^2-1+2.*q(:,4).^2;\r
26 \r
27     phi = atan2(R(3,2,:), R(3,3,:) );\r
28     theta = -atan(R(3,1,:) ./ sqrt(1-R(3,1,:).^2) );\r
29     psi = atan2(R(2,1,:), R(1,1,:) );\r
30 \r
31     euler = [phi(1,:)' theta(1,:)' psi(1,:)'];\r
32 end