💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
在无人机飞行数据中,速度的计算是一个关键的任务,影响到导航、避障、轨迹跟踪等多个应用。速度计算的方法可以根据数据来源和处理方式不同而有所不同。下面,我们比较几种常见的速度计算方法,并分析其在准确性与效率方面的表现。
1. 基于GPS数据的速度计算
**方法**:通过GPS提供的位置信息,在不同时间点计算位置变化,然后除以时间间隔得到速度。
**优点**:
- 精度高,特别是开阔区域。
- 计算简单,直接使用位置变化除以时间间隔。
**缺点**:
- 依赖于GPS信号,受环境影响较大(如城市峡谷、森林)。
- 时间延迟和采样频率会影响精度。
**准确性**:高,但依赖于GPS信号的质量。
**效率**:高,计算简单直接。
2. 基于惯性测量单元(IMU)的速度计算
**方法**:使用加速度计和陀螺仪数据,通过积分计算速度。
**优点**:
- 不依赖外部信号,可以在任何环境下使用。
- 可以提供高频率的速度数据,适用于快速动态变化的场景。
**缺点**:
- 由于积分运算,累积误差较大,需进行误差校正。
- 传感器噪声影响较大,需要复杂的滤波和融合算法。
**准确性**:中等,依赖于误差校正和滤波算法。
**效率**:中等到高,实时性好但需额外处理数据噪声。
3. 基于视觉里程计(Visual Odometry)的速度计算
**方法**:通过摄像头获取的图像序列,利用特征点匹配和运动估计算法计算速度。
**优点**:
- 适用于GPS信号弱或失效的环境,如室内或地下。
- 可以结合环境特征提供较为稳定的位置信息。
**缺点**:
- 计算复杂度高,需要大量图像处理和匹配运算。
- 对光照变化和图像质量要求较高。
**准确性**:高,特别是在结构化环境中。
**效率**:低到中等,依赖于图像处理算法的效率。
4. 多传感器融合方法
**方法**:结合GPS、IMU、视觉传感器等多种数据源,通过卡尔曼滤波或其他融合算法计算速度。
**优点**:
- 提高单一传感器方法的鲁棒性和精度。
- 能有效降低各个传感器的单独误差。
**缺点**:
- 需要复杂的传感器融合算法。
- 计算量大,对硬件要求高。
**准确性**:高,综合各传感器优点。
**效率**:中等到低,取决于融合算法的复杂度。
总结
| 方法 | 准确性 | 效率 | 适用环境 |
|-----------------|--------|---------|----------------------------|
| 基于GPS | 高 | 高 | 开阔区域 |
| 基于IMU | 中等 | 高 | 所有环境 |
| 基于视觉里程计 | 高 | 低到中等| 结构化环境,光照良好的地方|
| 多传感器融合 | 高 | 中等到低| 复杂、多变的环境 |
在实际应用中,选择合适的速度计算方法需根据无人机的任务要求、运行环境及硬件条件进行权衡。多传感器融合方法虽然复杂,但在保证高精度的同时,也能提高系统的鲁棒性,是未来发展的重要方向。
本程序实现了通过无人机位置信息计算无人机的瞬时速度,并且比较了不同求导的步长、不同半径、不同插值方法对结果的影响,还实现了对数据的预处理,即删除不可用数据的功能,不同的情况通过不同的注释组合来实现。
📚2 运行结果
主函数部分代码:
clear; %清空内存 %步长相当于时间间隔 step=1; %step=0.5; %step=0.1; %step=0.01; %对原始数据进行插值,作为结果的一个参考值 method='spline'; %样条插值 %method='linear'; %线性插值 %地球半径,用来计算距离 %r=6371e3; %平均值 r=6378e3; %赤道半径 %读取数据,将每一种数据读入到数组中 filename='POS2_data.txt'; a=importdata(filename); time=a.data(:,1); %时间 latitude=a.data(:,2); %纬度 longitude=a.data(:,3); %经度 height=a.data(:,4); %高度 v_east=a.data(:,6); %东速度 v_north=a.data(:,7); %北速度 v_up=a.data(:,8); %上升速度 %检查数据是否齐全,如果有某个数据为空,则记录下这一行的编号,最后所有数据删除此行 num=size(time); k=zeros(100,1); %预计空值的行不会大于100个 j=1; %如果遇到空值就将这一行的编号存下来 for i=1:num if isnan(time(i))||isnan(latitude(i))||isnan(longitude(i))||isnan(height(i))... ||isnan(v_east(i))||isnan(v_north(i))||isnan(v_up(i)) k(j)=i; j=j+1; end end %将所有数据的空值行删去 time(k(1:j-1),:)=[]; latitude(k(1:j-1),:)=[]; longitude(k(1:j-1),:)=[]; height(k(1:j-1),:)=[]; v_east(k(1:j-1),:)=[]; v_north(k(1:j-1),:)=[]; v_up(k(1:j-1),:)=[]; %再次获取数据大小 num=size(time); %对时间进行扩充,为等差序列 time_inter=(time(1):step:time(num(1)))'; %和速度大小为三个分量的平方和再开根 v=(v_east.^2+v_north.^2+v_up.^2).^0.5; %对原始数据进行插值,一方面解决数据间隔不相等的问题,另一方面对计算结果做个比较 v_inter=interp1(time,v,time_inter,method); lat_inter=interp1(time,latitude,time_inter,method); lon_inter=interp1(time,longitude,time_inter,method); height_inter=interp1(time,height,time_inter,method); %获取插值后的数据大小 number=size(lat_inter); num=number(1);
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
[1]徐新爱.无人机海量飞行数据快速检索方法研究[J].计算机测量与控制,2014,22(12):4181-4183+4196.
[2]王磊,王彦杰,于喜斌,等.基于气象无人机飞行状态的"野值"判定及剔除方法研究[J].传感器世界, 2014(12):5.DOI:10.3969/j.issn.1006-883X.2014.12.004.
🌈4 Matlab代码实现
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取