更硬核的ksp
KSP是一款航天爱好者喜闻乐见的游戏,它有个mod叫KRPC,提供了API供外部程序调用用以操纵游戏内的飞船。最近找到一个simulink版本的api客户端实现(其实就是把python的api函数用matlab调用再封装一次):XXXXXXXXXXXXXXXXXX/himemiyachikane/KRPCSimulink
于是来玩一玩:
首先实现个最简单的控制,空中定高,用两个带输出钳位的PID环,一个控制垂直速度,一个控制高度,这样一开始可以先定速上升:
由于现在还没法控制姿态,先用游戏里自带的SAS保持住姿态:
看起来很稳
再来个复杂点的,把火箭从发射台开到VAB厂房顶上:
先搭个控制姿态的流图:
由于KSP使用的是Unity引擎,里面用的四元数顺序是(x,y,z,w),而且是左手系,和通常书上的有点不一样,先要处理一下:
顺便转化成和箭体竖立时一致的Y轴向上的坐标系
KRPC似乎没法以箭体坐标系获取三轴角速度,大概是它认为从箭体坐标系看箭体本身角速度恒为零,于是先得获取从地面看的箭体三轴角速度值再转换到箭体坐标系上。
由于是箭体始终向上的用法,姿态变化不大,这之后可以直接转换成欧拉角与目标欧拉角做差输入控制器。
之后就是:
1:水平位置环路,根据水平位置误差产生水平速度目标
2:水平速度环路,根据速度误差产生姿态倾角目标
3:姿态环路,根据姿态欧拉角误差产生角速度目标
4:角速度环路,根据角速度误差输出三轴舵量控制矢量喷口和动量轮
用个状态机来控制整个系统:
hj.mp4 点击下载
这个框图的代码:
XXXXXXXXXXXXXXXXXX/gym487/KRPCSimulink/
运行:XXXXXXXXXXXx
[修改于 2年8个月前 - 2019/11/05 02:21:25]
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。