MATLAB实现手机重力加速度去除

做这个的来由是一哥们想要通过手机的加速度和方位角数据,分离出手机在无重力情况下的加速度(类似于NS健身环的功能)。
那怎么实现呢:首先我们有的数据是手机的三个方位角度α,β,γ以及xyz方向上的加速度a_x,a_y,a_z。这个问题的关键在于怎么找出重力加速度,并把它去掉,那我们可以先把手机的方位还原为初始状态,即α,β,γ均为0,通过使用欧拉角变换公式:欧拉角变换
通过欧拉角变换后,重力加速度被聚集到z分量上,直接减去一个g即可剩余的加速度即是无重力情况下的加速度。以下是基于MATLAB的方法:

close all; clear all, clc
a_init = [ 0; 5; 0];% 输入加速度。
x1 = a_init(1);
y1 = a_init(2);
z1 = a_init(3);
a_update = roating(0, 0, pi/3)*a_init;% 输入倾斜角度。
% a_update = a_update + [0; 0; 9.8];
x = a_update(1);
y = a_update(2);
z = a_update(3);
scatter3(x,y,z,'ob','filled')
hold on 
scatter3(x1,y1,z1,'or','filled')
plot3([0,x],[0,y],[0,z],'-')
plot3([0,x1],[0,y1],[0,z1],'-')
grid on 
axis([-10 10 -10 10 -10 10])


function f = roating(a, b, c)
f = [cos(a)*cos(c)+sin(a)*sin(b)*sin(c) ...
    cos(c)*sin(a)*sin(b)-cos(a)*sin(c) ...
    cos(b)*sin(a);
    
    cos(b)*sin(c) ...
    cos(b)*cos(c) ...
    -sin(b);
    
    cos(a)*sin(b)*sin(c)-sin(a)*cos(c) ...
    sin(a)*sin(c)+cos(a)*cos(c)*sin(b) ...
    cos(a)*cos(b)];
end

下图是一个实例,本实例并没有去除重力加速度(%已悬起),单纯展示一下角度的变换,y轴上加速度为5,γ旋转角度60°。红色为初始点,黑色为变换后的点。
实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WHU李相赫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值