ZRTOS的应用篇(2)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
前几天老四看见了两个年轻人,每人扛着一架精致直升机模型正沿着街道走。一问得知他们正在做实验,飞机是日本进口的能飞<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />3000米高,速度可达70公里/小时,值数万之巨。小时候曾玩过航模,当时的直升机模型完全是自制的,用桐木做骨架,薄绵纸做蒙皮,发动机是同伴的父亲(当时的驻美联络主任)从美国买回来的。虽然当时国内也生产发动机,但质量很差,发动困难,容易熄火,功率调节功能也很差(压缩式的完全没有,热火式的也常出毛病)。后来在美国逛hobby shop 方知发动机价格不菲 (100+ 至数百美刀),不禁对那同伴的父亲多了几分敬意,当时驻外人员的美刀是很少的,能用这点钱给儿子买“奢侈品”,真是难能可贵。
基于老四的那段经历,对这两人的实验就很感兴趣,问他们是什么实验(老四问:是定线路还是定任务)。其中一人告诉老四是做定线路飞行,老四问是否用GPS,回答曰yes,老四问控制芯片是16位还是32位,回答曰32位,老四又问用了多少读写内存(RAM),回答曰128M。老四当时即被雷倒:以本人的直觉以16位芯片的运算能力,控制直升机作定路线飞行,当能胜任。因此老四随口道:我用16位芯片,12K读写内存就能实现这项任务。由于还要赶路,就没有与他们做进一步的讨论。如果能看到本拙文的话,欢迎他们多多批评。好了,闲话少说,言归正传。
1、问题综述
大家在电视新闻常看到,美军从某某巡洋舰先后向不同的方向发射数枚导弹,它们将同时命中同一个目标。在上述的任务中,美军用的很成功的一项技术是GPS导航。有人也许会说,这项任务听起来很复杂呀,一定要用LINUX,Window CE 等平台来实现,于是乎32位芯片128M读写内存都出现在老四所看到的一幕中。 其实采用ZRTOS技术,一个普通16位芯片,4-12K芯片内部的读写内存,几十K的机器代码就可以完成上述任务。在这个问题中有两个关键点:一是参数设计,二是控制任务设计。
2、参数设计
在上述任务中至少有一个参数:即飞行器的路线和时间。路线和时间可以模型成一系列的三维空间折线和到达折线节点的时间。作战参谋应事先选好飞行路线,在发射进入倒计时时,将参数下载到飞行器中去。选线应由专用计算机软件完成,操作员可以用笔或鼠标在地图上画出线路,并能实现其他特定功能,比方说软件可自动选择线路的标高使其沿地面做贴地飞行,或沿着太阳光的方向飞向目标等。一旦上述运算完成,本参数的核心数据就形成了:节点数(4bytes)、空间坐标(3x节点数x 4bytes)、时间(节点数x 4bytes)。
除了飞行路线的参数外,还可能有其他参数,比方说结构的振型/质量分布参数等。在后面的章节中(控制设计)还会对参数做出进一步的讨论。
3、控制任务设计与编程
应有二个控制任务,即维持稳定控制任务和操纵(定路线)任务。
3.1 维持稳定控制任务
在传统的设计中,维持稳定往往是由空气动力设计(如机翼的上反角等)来完成的,但是这种设计会减少飞行器的机动性,而机动性对躲避对方拦截、寻找目标而言是至关重要的。因此,F16的空气动力设计是不稳定体系,如果没有维持稳定控制任务(CPU),任何人都不可能操纵F16。然而据说操纵F16,是一种享受。除了机动性外,维持稳定控制任务还可大大地增加成员的舒适性,在许多最新设计的舰船都采用了此项技术。
在维持稳定控制任务设计时,可将系统模型为质心运动(6个自由度)再加若干个结构振型组成的。结构振型可采用Ritz振型以减少振型个数。系统总的自由度n可在10个以下。结构的振型/质量分布应设计成参数,以便适应不同的飞行器。分析时可用达兰贝尔原理列出广义坐标的方程,采用变分原理,时间间隔10ms-100ms
以下是设计与编程的几个要注意的地方:
1. 应采用可变步长(时间)
2. 尽量采用无条件收敛的计算方法
3. 不要用复杂的公式或解析法计算某外力,把它们放到放在方程的左边进行迭代
4. 如果5次迭代都不能搞定,那么此方法有问题,很可能不收敛,要另求它途
5. 操纵应使用驱动器,任务在write时,如设备空闲,应立即返回OK,同时设备开始动作;如果设备不闲(正在动作),应立即返回ERROR或pended
6. Stay away MATLAB?
3.2 操纵任务
有时控制可以很简单,比方说从节点A到节点B有x公里,预计y秒准时到达,除了按预定速度航行外,假定每秒检查/修正一次,如果n秒时距离少于n x /y,则说明晚点了,速度可按插值法增加。复杂的速度-距离控制可用参数。
线路/位置控制中的标高控制可参考上述的速度-距离的方式进行。
对于直升机的操纵而言,主旋翼轴的指向和发动机的输出功率的大小是关键因素,这方面直升机的操纵与火箭类似。
线路/位置控制中的水平运动的控制可采用以下方法:从节点A到节点B的直线为理想线路,在起点先用合力(动力、操纵力、风力等)指向节点B,由于合力的方向其实是无法准确得到的,在下一时刻(比方说下一秒)飞行器不会在理想线路上,如果位于线路的左边,说明上一时刻对合力方向的估计偏左,则在本时刻,操纵力需要右偏。同时任务也学习合力,在以后的估计中做出更好的判断。
3.3 编程
#pragma CONST_SEG PARAMETER_ROM
static volatile const long _geo_fences[] = //some test data used by software designer
{
6, //6 nodes
0xCA214E98,//longitude, 0. 83819e-7 degree/bit, node 1
0x203D9F07,//latitude, 0. 83819e-7 degree/bit
200,//altitude, 0.125 m/bit
0,//launch moment, in second
0xCA26F1EE,//longitude node 2
0x203D9F07,//latitude
400, //altitude
20,//current moment, in seconds
0xCA29C399,//longitude node 3
0x2043425D,//latitude
400, //altitude
40,//current moment, in seconds
0xCA26F1EE,//longitude node 4
0x2048E5B3,//latitude
400, //altitude
60,//current moment, in seconds
0xCA214E98,//longitude node 5
0x2048E5B3,//latitude
400, //altitude
0xCA1E7CED,//longitude node 6
0x2043425D,//latitude
400, //altitude
};
static const char far description_1[] = "Geo-Fence boundary array of longitude/latitude/altitude/time";
static const parameter_type __FAR__ geo_boundary = {
GEO_FENCE_BOUNDARY, //U16, the name identifier of the parameter
_far_PTR, //far pointer
(long) _geo_fences,// parameter data
sizeof(_geo_fences),// size of the parameter
description_1,//description of the parameter
};
//more parameter here…
#pragma CONST_SEG DEFAULT
static long * geo_boundary; //trip geo boundary data
//initialization
void geo_fence_init(void)
{
add_init_list((long) _geo_fence_init);
}
static void _geo_fence_init(void)
{
parameter_type * __FAR__ _geo_fence; //parameter of geo fence
rtos_taskSpawn(RTOS_DEFAULT_PRIORITY, (RTOS_FUNCPTR) geo_fence_task,0);//
//spawn other tasks here
addParameter((parameter_type * __FAR__) &geo_boundary); //add geo fence parameter
_geo_fence = getParameter((parameter_type * __FAR__) &geo_boundary);
geo.boundary = (long * __FAR__) _geo_fence->para; //get geo boundary
//more initialization here
}
static void geo_fence_task(void)
{
//…
}
文章评论(0条评论)
登录后参与讨论