加载中
加载中
表情图片
评为精选
鼓励
加载中...
分享
加载中...
文件下载
加载中...
修改排序
加载中...
关于较为精确的无人机续航计算与电池选择策略
yuanfeng2021/02/13原创 航空技术 IP:湖南
关键词
无人机续航续航计算长续航

arturia_pendragon.jpg

呆毛王镇楼


本文是上篇文章(https://www.kechuang.org/t/85479)的补充

上篇文章并未考虑电机力效的变化,而事实上电机力效的变化并不可忽略

现在讨论以续航为核心的最优策略,需要考虑电机力效的变化

精确考虑电机力效过于复杂,这里我们采用程序拟合

拟合我们直接用直线,系数的确定有两种算法

1.采用模拟退火算法(优点是方便改成其他曲线如抛物线之类)

C++
#include<bits/stdc++.h> #define double long double using namespace std; double x[1000]; double fx[1000]; double a=-0.004,b=6.0,A=-0.004,B=6.0int n; double f(double x,double a1,double b1)//拟合的模型函数 { return a1*x+b1;//这里可以改成任何函数进行拟合 } double E(double a1,double b1)//计算方差 { double ans=0; for(int i=0;i<n;i++) { ans+=(fx[i]-(f(x[i],a1,b1)))*(fx[i]-(f(x[i],a1,b1))); } cout<<ans<<endl; return ans; } void s(void) { double t=2000000.0;//温度 while(t>=0.000001)     {      double A=a+(((rand()%10000))-5000)*t;      double B=(b+(((rand()%10000))-5000)*0.00001*t);      if(E(A,B)<E(a,b))//如果新的系数方差比较小      {      a=A;      b=B; } t*=0.99; } } int main() { cin>>n; for(int i=0;i<n;i++) cin>>x[i]>>fx[i]; for(int i=0;i<3;i++) s();//退火 cout<<a<<" "<<b;     return 0; }


有了拟合的关系式,我们就可以方便的用程序计算我们需要的电池选择策略

以群友提供的力效图为例

QQ图片20201021133251.jpg

10

77 6.42

186 5

283 4.62

361 4.24

432 3.96

499 3.75

571 3.63

633 3.49

698 3.4

758 3.31

这组数据的效果:

截图_2020-10-21_21-40-30.png

画出图像

无标题.png

可见,拟合的效果还是可以的

但是缺点也明显--调参过于困难

2.回归直线法(优点是准确快速)

C++
#include<bits/stdc++.h> using namespace std; double a,b,ax,ay,fm,fz,s; double x[10000],y[10000],n; int main() {     cin>>n>>s; for(int i=1;i<=n;i++) { cin>>x[i]>>y[i]; ax+=x[i]; ax*=s; ay+=y[i]; } ax/=n; ay/=n; for(int i=1;i<=n;i++) { fz+=(x[i]-ax)*(y[i]-ay); fm+=(x[i]-ax)*(x[i]-ax); } b=fz/fm; a=ay-b*ax; cout<<b<<" "<<a; return 0; }

根据前一篇文章的结论,我们知道

upload_downloader_1613224057509_19366490.gif

其中,t为续航时间,k1,k2分别是力效和电池容量(w/h)和质量(g)的比例

注意这里为了方便(厂商一般给的电机参数表都是以g为单位)质量单位为克

我们便可以写出计算无人机最佳电池质量的程序

C++
#include<bits/stdc++.h> using namespace std; double a,b,ax,ay,fm,fz,k1,k2,md,s; double x[10000],y[10000],n; int main() {     cin>>n>>s; for(int i=1;i<=n;i++) { cin>>x[i]>>y[i]; ax+=x[i]; x[i]*=s; ay+=y[i]; } ax/=n; ay/=n; for(int i=1;i<=n;i++) { fz+=(x[i]-ax)*(y[i]-ay); fm+=(x[i]-ax)*(x[i]-ax); } b=fz/fm; a=ay-b*ax; cin>>k2>>md; double ansm=0,anst=0; for(int m=1;m<100000;m++) { k1=b*(m+md)+a; if(anst<(k1*k2*(m/(m+md)))) { ansm=m; anst=(k1*k2*(m/(m+md))); } } cout<<ansm<<" "<<anst; return 0; }


比如说,用以上电机,电池采用特斯拉拆机18650(k2值在0.5左右),无人机本身重500g

那么我输入:

10 1//数据10组,轴数1

77 6.42

186 5

283 4.62

361 4.24

432 3.96

499 3.75

571 3.63

633 3.49

698 3.4

758 3.31

0.5 500//k2=0.5 无人机(不含电池)500g

程序便输出

366 0.532954

也就是说,最佳电池质量是366g 续航0.53小时

也就是大约7节18650

当然不可能上7节,所以我们上6节(3s2p)

这便是最佳电池策略(续航方面)


[修改于 4年2个月前 - 2021/03/13 21:42:32]

+5  科创币    虎哥    2021/02/20 资瓷
来自:航空航天 / 航空技术
3
新版本公告
~~空空如也
yuanfeng 作者
4年2个月前 IP:湖南
891139

attachment icon 计算.rar 370.06KB RAR 55次下载


编译了一下,有兴趣的可以下下来玩玩

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
WCHEN
3年10个月前 IP:浙江
895094

请问   最上面的一排 10  1从哪来的

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
WCHEN
3年10个月前 IP:浙江
895095

知道了啊

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
yuanfeng
进士 机友 笔友
文章
7
回复
92
学术分
0
2019/07/21注册,9天12时前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:湖南
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的