用Simulink+KSP体验飞行器控制

KSP是一款航天爱好者喜闻乐见的游戏,它有个mod叫KRPC,提供了API供外部程序调用用以操纵游戏内的飞船。最近找到一个simulink版本的api客户端实现(其实就是把python的api函数用matlab调用再封装一次):https://github.com/himemiyachikane/KRPCSimulink

于是来玩一玩:

首先实现个最简单的控制,空中定高,用两个带输出钳位的PID环,一个控制垂直速度,一个控制高度,这样一开始可以先定速上升:

image.png

由于现在还没法控制姿态,先用游戏里自带的SAS保持住姿态:

image.png

image.png

看起来很稳


再来个复杂点的,把火箭从发射台开到VAB厂房顶上:

先搭个控制姿态的流图:

由于KSP使用的是Unity引擎,里面用的四元数顺序是(x,y,z,w),而且是左手系,和通常书上的有点不一样,先要处理一下:

image.png

顺便转化成和箭体竖立时一致的Y轴向上的坐标系

KRPC似乎没法以箭体坐标系获取三轴角速度,大概是它认为从箭体坐标系看箭体本身角速度恒为零,于是先得获取从地面看的箭体三轴角速度值再转换到箭体坐标系上。

由于是箭体始终向上的用法,姿态变化不大,这之后可以直接转换成欧拉角与目标欧拉角做差输入控制器。

之后就是:

image.png

1:水平位置环路,根据水平位置误差产生水平速度目标

2:水平速度环路,根据速度误差产生姿态倾角目标

3:姿态环路,根据姿态欧拉角误差产生角速度目标

4:角速度环路,根据角速度误差输出三轴舵量控制矢量喷口和动量轮


用个状态机来控制整个系统:


这个框图的代码:

https://github.com/gym487/KRPCSimulink/

运行:untitled.slx

[修改于 14 天前 - 2019-11-05 02:21:25]

来自 科创茶话
4
2019-11-5 07:31:35
1楼

更硬核的ksp

折叠评论
加载评论中,请稍候...
折叠评论
2楼

大佬真厉害啊

折叠评论
加载评论中,请稍候...
折叠评论
3楼

KSP玩家表示支持,明年KSP2发布,可以到时候再用KSP2这么玩。

折叠评论
加载评论中,请稍候...
折叠评论
4楼

矩形弹道,好厉害

折叠评论
加载评论中,请稍候...
折叠评论
5楼

这就是一个完美的火箭控制算法仿真平台啊

折叠评论
加载评论中,请稍候...
折叠评论
6楼

+惯性导航获取位置=导弹

折叠评论
加载评论中,请稍候...
折叠评论
radio(作者)
7楼

引用 154454496 发表于 5 楼的内容:
这就是一个完美的火箭控制算法仿真平台啊

仿得并不真,但是好玩

[修改于 13 天前 - 2019-11-05 20:43:48]

折叠评论
加载评论中,请稍候...
折叠评论
2019-11-06 00:45:41
8楼

干得漂亮!多年前游戏之作,没想到真的发挥了作用

折叠评论
加载评论中,请稍候...
折叠评论
9楼

车可以控制吗?

折叠评论
加载评论中,请稍候...
折叠评论

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

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
ID:{{user.uid}}
{{user.username}}
{{user.info.certsName}}
{{user.description}}
{{format("YYYY/MM/DD", user.toc)}}注册,{{fromNow(user.tlv)}}活动
{{submitted?"":"投诉"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png