实时记录运动轨迹插件_Matlab Mobile高逼格实时记录GPS运动轨迹(各项参数统计计算)——无第三方包依赖...

本文介绍了如何使用Matlab Mobile App实时记录并分析运动轨迹,包括GPS数据的获取、轨迹参数的计算,以及在PC端进行地图上的实时轨迹展示。通过MathWorks账号,无需MATLAB Licence即可实现数据的云端存储和后期分析。
摘要由CSDN通过智能技术生成

本文主要分为两个部分,第一部分使用Matlab Mobile记录传感器数据,第二部分是在PC端或移动端进行轨迹参数的分析。甚至还可以对运动数据进行机器学习建模,预测你的动作(run、walk、jump,...)!无需matlab licence! 无需matlab licence! 无需matlab licence!你只需要注册一个MathWorks账号保存手机传感器数据到云端即可!

一、Matlab Mobile

手机端下载好matlab mobile app,登录自己注册的账号,可以无需“连接到MathWorks Clound",因为该App支持记录离线的传感器数据(包括加速度、磁场、方向、角速度、位置五大类数据)。本文只使用位置(Position)类别数据,这里面又细分为纬度,经度,海拔高度,速度,水平定位精度,方位角,时间戳等。点击传感器

记录好你个人的运动数据后,可以设置自动/手动上传.mat数据到matlab drive云端。过后你可以自己下载到本地进行分析使用。(有个小缺点就是数据不能通过微信分享出去。。。)

二、PC端地理图轨迹实时分析

看效果图:

上面只显示了'satellite'、'streets'两种基础图层,更丰富的参考这里。

code:

%% matlab mobile传感器数据,从手机导入到本地即可

clear;close all;clc;

load('sensorlog_20200402_193813.mat');

latitude = Position.latitude;

longtitude = Position.longitude;

altitude = Position.altitude;

timestamp = Position.Timestamp;

speed = Position.speed;

course = Position.course;

nums = length(latitude);

%% 画二维图全局配置

basemap = 'satellite';% 设置基础图层为卫星地图

f = figure('OuterPosition',get(groot,'ScreenSize'));% figure最大化

gx = geoaxes(f);

h = animatedline(gx,'MaximumNumPoints',Inf,...

'Color','g','LineWidth',4);

geobasemap(gx,basemap);

text(gx,latitude(1),longtitude(1),'Start','Color','b','FontSize',30);%起点

t = text(gx,latitude(1),longtitude(1),'Start',...

'Color','r',...

'FontSize',30,...

'FontWeight','bold',...

'FontAngle','italic');

InSet = get(gx, 'TightInset');% 获取axes尺寸

set(gx, 'Position', [InSet(1:2), 1-InSet(1)-InSet(3), 1-InSet(2)-InSet(4)]);% axes 填充整个figure

%% 实时画二维图

isSaveGIF = 0;

isSaveVideo = 0;

if isSaveGIF

[A,map] = rgb2ind(imresize(frame2im(getframe),[320,640]),256);

imwrite(A,map,'runParams.gif','LoopCount',Inf,'DelayTime',0.1);

end

if isSaveVideo

v = VideoWriter('runParams.avi');

open(v);

end

cumSumDistance = 0;% 累计距离(km)

cumLatitude=[];

cumLongtitude = [];

index = 2;%从第二个记录数据开始,第一个为起点

while isvalid(gx)&&(index<=nums) % 关闭窗口或者数据循环完毕为结束

% 当前经纬度

currentLatitude = latitude(index);

currentLongtitude = longtitude(index);

cumLatitude = [cumLatitude;currentLatitude];

cumLongtitude = [cumLongtitude;currentLongtitude];

addpoints(h,currentLatitude,currentLongtitude)

pt1 = [latitude(index-1,:),longtitude(index-1,:)];

pt2 = [latitude(index,:),longtitude(index,:)];

cumSumDistance = cumSumDistance + deg2km(distance(pt1,pt2));

t.Position = [currentLatitude,currentLongtitude];

t.String = sprintf('时间:%s\n累计距离:%.2f km\n当前速度:%.2fm/s\n海拔高度:%3g米\n方位角:%.2f度',...

datestr(timestamp(index)),cumSumDistance,speed(index),altitude(index),course(index));

% 显示合理的坐标范围

rangeLatitude = max(cumLatitude)-min(cumLatitude);

rangeLongtitude = max(cumLongtitude)-min(cumLongtitude);

geolimits(gx,[min(cumLatitude)-0.5*rangeLatitude,max(cumLatitude)+0.5*rangeLatitude],...

[min(cumLongtitude)-0.5*rangeLongtitude, max(cumLongtitude)+0.5*rangeLongtitude]);%自适应调整地理图范围

drawnow

% 保存动画

if isSaveGIF

if(mod(index,10)==0)

[A,map] = rgb2ind(imresize(frame2im(getframe),[320,640]),256);

imwrite(A,map,'runParams.gif','WriteMode','append','DelayTime',0.2);

end

end

if isSaveVideo

writeVideo(v,getframe(gx));

end

index = index+1;

end

if isSaveVideo

close(v);

end

%% 画三维图

uif = uifigure('Position',get(groot,'ScreenSize'));

g = geoglobe(uif);

geoplot3(g,latitude,longtitude,altitude,'c')

三、Reference

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值