关于较为精确的无人机续航计算与电池选择策略
yuanfeng 2021-2-13原创 航空技术
关键词
无人机续航续航计算长续航

arturia_pendragon.jpg

呆毛王镇楼


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

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

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

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

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

#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.0; 
int 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;
}
/*本程序由yuanfneg创作,发布于科创论坛 */


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

以群友提供的力效图为例

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.回归直线法(优点是准确快速)

#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为单位)质量单位为克

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

#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)

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


[修改于 10 天前 - 2021-02-20 17:15:22]

+5  科创币    虎哥   2021-02-20   资瓷
来自:航天航空 / 航空技术
yuanfeng 作者
10天4时前
1楼

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


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

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

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

所属专业
上级专业
同级专业
%7B%22isDisplay%22%3Atrue%7D

仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传
空空如也~
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
学术分隐藏
{{submitted?"":"投诉或举报"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png
插入公式
分享回复:{{shareId}}
加载中...
评论控制
加载中...
文号:{{pid}}
加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
加入关注取消关注
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
建议修改
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
下载资料
{{fileName}}
大小:{{size}}
下载当前附件将花费 {{costMessage}}
你当前剩余 {{holdMessage}}
{{fileName}}
大小:{{size}}
当前附件免费。
你已购买过此附件,下载当前附件不需要花费积分。
加载中...
{{errorInfo}}
附件已丢失
当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}