《坎巴拉太空计划》krpc模组|0.5.4|文档(中译版)——教程与示例:自动驾驶
本翻译基于 [kRPC 官方文档](https://krpc.github.io/krpc)遵循 LGPL v3 许可。 部分内容可能受 GPLv3 或 MIT 许可约束详见原始仓库。 Copyright 2015-2023 kRPC Org.本教程和示例脚本合集详细说明了如何使用 kRPC 的功能特性。自动驾驶kRPC 提供了一个自动驾驶仪可用于将航天器保持在选定的姿态。它会自动调整以适应不同尺寸和控制能力的航天器。本教程解释自动驾驶的工作原理、如何配置它以及背后的数学原理。概述自动驾驶的输入包括一个参考系定义零旋转的位置目标俯仰 (pitch) 和航向 (heading) 角度以及可选的目标滚转 (roll) 角度当没有指定滚转角时自动驾驶会尝试消除滚转轴上的任何旋转但不会试图保持特定的滚转角。下面的图表显示了自动驾驶的高级概览。首先当前旋转和目标旋转被用来计算旋转航天器使其面对目标所需的目标角速度。接下来该角速度在航天器的俯仰、偏航和滚转轴上的分量被传递给三个 PID 控制器。这些控制器的输出被用作航天器的控制输入。有几个影响自动驾驶运行的参数显示在图表的左侧。它们将在下一节中介绍。配置自动驾驶有几个参数会影响自动驾驶的行为。这些参数的默认值在大多数情况下应该就足够了但你可以根据需要调整它们。停止时间 (stopping time)是航天器完全停止所需的最长时间。这限制了航天器的最大角速度。它是一个包含三个停止时间的向量分别对应俯仰、滚转和偏航轴。每个轴的默认值为 0.5 秒。减速时间 (deceleration time)是自动驾驶在接近目标方向时减速航天器到停止所需的最小时间。这是一个最小值因为如果航天器没有足够的角加速度所需时间可能会更长。它是一个包含三个减速时间的向量以秒为单位分别对应俯仰、滚转和偏航轴。每个轴的默认值为 5 秒。减小该值会使自动驾驶更激进地减速更快地将航天器转向目标。但过小可能导致超调。为了避免超调停止时间应小于减速时间。这给了自动驾驶一些备用加速度以调整航天器旋转中的误差例如由于气动力变化引起的误差。衰减角度 (attenuation angle)设置了自动驾驶认为航天器接近目标方向的区域。在这个区域内目标速度会根据航天器离目标的接近程度进行衰减。它是一个角度值以度为单位分别对应俯仰、滚转和偏航轴。每个轴的默认值为 1 度。这种衰减可以防止当航天器指向正确方向时控制量的振荡。如果你发现航天器仍然振荡尝试增大这个值。到达峰值时间 (time to peak)以秒为单位PID 控制器调整航天器角速度到目标角速度所需的时间。减小该值会使控制器更激进地尝试匹配目标速度。它是一个包含三个时间的向量分别对应俯仰、滚转和偏航轴。每个轴的默认值为 3 秒。超调量 (overshoot)是 PID 控制器允许超过目标角速度的百分比。增大该值会使控制器更激进地尝试匹配目标速度但会导致更多超调。它是一个包含三个值的向量范围在 0 到 1 之间分别对应俯仰、滚转和偏航轴。每个轴的默认值为 0.01。计算目标角速度目标角速度是将航天器旋转到目标方向所需的角速度。通过对俯仰、偏航和滚转轴分别计算目标角速度并求和得到。如果没有设置滚转角则滚转轴上的目标角速度简单地设为 0。给定轴上的目标角速度 \(\omega\) 由角度误差 \(\theta\) 通过以下函数计算该函数的方程如下\[\begin{aligned}\omega -\frac{\theta}{\lvert\theta\rvert}\min \big(\omega_{max},\sqrt{2 \alpha \lvert\theta\rvert} \cdot f_a(\theta)\big) \\\text{其中} \\\alpha \frac{\omega_{max}}{t_{decel}} \\\omega_{max} \frac{\tau_{max}t_{stop}}{I} \\f_a(\theta) \frac{1}{1 e^{-6/\theta_a(\lvert\theta\rvert - \theta_a)}}\end{aligned}\]其推理和推导过程如下航天器需要旋转到。这意味着当为负时目标角速度需要为正当为正时目标角速度需要为负。这是通过乘以项实现的当时为 -1。我们希望航天器以最大角速度 \(\omega_{max}\) 旋转该速度由停止时间 \(t_{stop}\) 决定。利用匀加速运动方程可推导如下\[\begin{aligned}\omega \alpha t \\\Rightarrow \omega_{\text{max}} \alpha_{\text{max}} t_{\text{stop}} \\ \frac{\tau_{\text{max}} t_{\text{stop}}}{I}\end{aligned}\]其中 \(\tau_{max}\) 是航天器能产生的最大力矩\(I\) 是其转动惯量。我们希望航天器在面对目标时从速度 \(\omega_{max}\) 运动到静止所需的时间为 \(t_{decel}\)减速时间。并且希望它使用恒定加速度 \(\alpha\) 来完成。利用匀加速运动方程我们可以根据当前角度误差 \(\theta\) 推导出目标速度 \(\omega\)\[\begin{aligned}\omega \alpha t \\\Rightarrow \alpha \frac{\omega}{t} \frac{\omega_{\text{max}}}{t_{\text{decel}}} \\\theta \frac{1}{2} \alpha t^2\Rightarrow t \sqrt{\frac{2 \theta}{\alpha}} \\\Rightarrow \omega \alpha \sqrt{\frac{2 \theta}{\alpha}} \sqrt{2 \alpha \theta}\end{aligned}\]为了防止航天器指向目标方向时发生振荡目标角速度曲线在 \(\theta 0\) 处的梯度需要为 0并且随 \(\theta\) 的增大/减小而平滑地增大/减小。上面计算得到的目标角速度并不满足这一条件。为了解决这个问题我们乘以一个具有所需形状的衰减函数。下图显示了衰减函数的形状红线、先前计算的目标速度蓝线以及两者相乘的结果黑色虚线衰减函数的公式是一个逻辑函数其形式如下\[f_a(\theta) \frac{1}{1 e^{-6/\theta_a(\lvert\theta\rvert - \theta_a)}}\]注意从匀加速运动方程推导出的原始函数仅在接近衰减角度时才受衰减函数影响。这意味着自动驾驶将使用恒定的加速度来减速航天器直到它接近目标方向。调整控制器三个 PID 控制器分别对应俯仰、滚转和偏航控制轴用于控制航天器。每个控制器将目标角速度的相关分量作为输入。以下说明如何根据航天器可用的力矩和转动惯量自动调整这些控制器的增益。整个系统在单个控制轴上的原理图如下系统的输入是围绕控制轴的角速度记为 \(\omega\)。由此计算出角速度误差 \(\omega_\epsilon\) 并传递给控制器 \(C\)。这是一个需要调整的 PID 控制器。控制器的输出是控制输入 \(x\)传递给航天器。被控对象 \(H\) 描述了物理系统即控制输入如何影响航天器的角加速度。对其求导得到航天器新的角速度然后反馈回来计算新的误差。对于控制器 \(C\)我们使用比例-积分 (PI) 控制器。注意控制器没有微分项这样系统表现为二阶系统因此易于调整。控制器在 \(s\) 域的传递函数为\[C(s) K_P K_I s^{-1}\]从原理图来看被控对象 \(H\) 的传递函数为\[H(s) \frac{\omega_\epsilon(s)}{X(s)}\]\(x\) 是航天器的控制输入即施加到航天器的可用力矩 \(\tau_{max}\) 的百分比。称之为当前力矩记为 \(\tau\)。数学上可以表示为\[\tau x \tau_{max}\]结合角运动方程可得角加速度与控制输入的关系\[\begin{aligned}I \text{航天器的转动惯量} \\\tau I \omega_\epsilon \\\Rightarrow \omega_\epsilon \frac{x\tau_{max}}{I}\end{aligned}\]对其进行拉普拉斯变换得到\[\begin{aligned}\mathcal{L}(\omega_\epsilon(t)) s\omega_\epsilon(s) \\ \frac{sX(s)\tau_{max}}{I} \\\Rightarrow \frac{\omega_\epsilon(s)}{X(s)} \frac{\tau_{max}}{I}\end{aligned}\]现在我们可以将 \(H\) 的传递函数重写为\[\begin{aligned}G_{OL}(s) C(S) \cdot H(s) \cdot s^{-1} \\ (K_P K_I s^{-1}) \frac{\tau_{max}}{Is}\end{aligned}\]整个系统的开环传递函数为\[\begin{aligned}G_{OL}(s) C(S) \cdot H(s) \cdot s^{-1} \\ (K_P K_I s^{-1}) \frac{\tau_{max}}{Is}\end{aligned}\]闭环传递函数为\[\begin{aligned}G(s) \frac{G_{OL}(s)}{1 G_{OL}(s)} \\ \frac{a K_P s a K_I}{s^2 a K_P s a K_I}\text{ 其中 } a \frac{\tau_{max}}{I}\end{aligned}\]系统的特征方程因此为\[\Phi s^2 \frac{\tau_{max}}{I} K_P s \frac{\tau_{max}}{I} K_I\]标准二阶系统的特征方程为\[\begin{aligned}\Phi_{standard} s^2 2 \zeta \omega_0 s \omega_0^2\end{aligned}\]其中 \(\zeta\) 是阻尼比\(\omega_0\) 是系统的固有频率。在这些方程之间匹配系数并重新排列得到用 \(\zeta\) 和 \(\omega_0\) 表示的 PI 控制器增益\[\begin{aligned}K_P \frac{2 \zeta \omega_0 I}{\tau_{max}} \\K_I \frac{I\omega_0^2}{\tau_{max}}\end{aligned}\]现在我们需要对系统设定一些性能要求这将允许我们确定 \(\zeta\) 和 \(\omega_0\) 的值从而确定控制器的增益。二阶系统的超调百分比为\[O e^{-\frac{\pi\zeta}{\sqrt{1-\zeta^2}}}\]其输出达到第一个峰值所需的时间为\[T_P \frac{\pi}{\omega_0\sqrt{1-\zeta^2}}\]这些公式可以重新排列用超调量和到达峰值时间来表示 \(\zeta\) 和 \(\omega_0\)\[\begin{aligned}\zeta \sqrt{\frac{\ln^2(O)}{\pi^2\ln^2(O)}} \\\omega_0 \frac{\pi}{T_P\sqrt{1-\zeta^2}}\end{aligned}\]默认情况下kRPC 使用值 \(O 0.01\) 和 \(T_P 3\)。边界情况在发射台上时在这种情况下自动驾驶无法旋转航天器。这意味着控制器中的积分项会累积到很大的值。即使航天器指向正确的方向也是如此因为计算误差中的微小浮点数变化也会导致积分项增加。因此积分项被固定为零以解决这个问题。可用角加速度为零时这可能是由于航天器上的反作用轮耗尽电力导致航天器没有力矩而引起的。在这种情况下自动驾驶对航天器也几乎或完全没有控制能力。这意味着控制器中的积分项会随着时间的推移累积到很大的值。这是通过将积分项在可用角加速度降至一个较小阈值以下时固定为零来解决的。这种情况还会导致控制器增益自动调整出现问题随着可用角加速度趋近于零控制器增益趋向于无穷大。当它等于零时自动调整会导致除以零。因此当可用加速度低于阈值时自动调整也会被禁用。这会使控制器增益保持在其当前值直到可用加速度重新升高。

相关新闻

Java开发者必备:多JDK版本切换与管理实战

Java开发者必备:多JDK版本切换与管理实战

1. 为什么Java开发者需要掌握多JDK版本切换 刚接手一个遗留Java项目时,我发现编译报错提示需要JDK 8环境,而我的开发机默认是JDK 17。这种场景在Java开发中实在太常见了——不同项目可能要求不同版本的JDK,企业级应用可能还在用JDK 8&#x…

2026/10/10 15:15:17 阅读更多 →
从 Windows 11 到 Ubuntu 26.04:我的软件迁移实录(下)—— 微信、邮件、NAS、开发环境与 AI 工具迁移

从 Windows 11 到 Ubuntu 26.04:我的软件迁移实录(下)—— 微信、邮件、NAS、开发环境与 AI 工具迁移

下面继续记录我的实际迁移过程。11. PuTTY → TabbyWindowsPuTTYUbuntuTabbyWindows 下,我主要使用 PuTTY 登录 Linux 服务器。PuTTY 很稳定,但界面和使用方式相对传统。迁移到 Ubuntu 后,我选择了 Tabby。Tabby 支持:SSH&#xf…

2026/10/5 1:38:20 阅读更多 →
兼顾瘙痒与肝功能司拉德帕seladelparLivdelzi提升患者长期生活质量

兼顾瘙痒与肝功能司拉德帕seladelparLivdelzi提升患者长期生活质量

顽固性瘙痒是原发性胆汁性胆管炎患者最难以忍受的伴随症状,超过60%的中晚期PBC患者会出现中重度瘙痒,严重影响睡眠、日常工作与情绪状态,既往部分治疗药物虽然能改善肝功能生化指标,却会不同程度加重瘙痒症状,陷入“肝…

2026/10/10 0:20:43 阅读更多 →

最新新闻

SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0学生信息管理系统实战

SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0学生信息管理系统实战

接手过一个学生信息管理系统的小项目,技术栈正好是SpringBoot2 Vue3 MyBatis-Plus MySQL8.0,标题里这套组合一眼看去很常见,但真正从零落地的时候,细节远比想象中多。当初团队里有人建议用老掉牙的JSP那套,也有人建…

2026/10/13 2:34:32 阅读更多 →
SpringBoot+Vue私房菜定制上门服务系统开发实战解析

SpringBoot+Vue私房菜定制上门服务系统开发实战解析

一个 SpringBoot Vue 的私房菜定制上门服务系统,光看标题可能觉得就是一个普通的管理系统,但真正动手做过的人会知道,这类“定制 上门 多角色”的业务模型,远比表面看起来复杂。它不是简单的 CRUD 堆砌,订单状态的流…

2026/10/13 2:34:32 阅读更多 →
ModernZ键盘快捷键绑定教程:input.conf中script-binding与script-message完全指南

ModernZ键盘快捷键绑定教程:input.conf中script-binding与script-message完全指南

音视频UI组件 【免费下载链接】ModernZ A sleek and modern OSC for mpv. This project is a fork of ModernX that enhances functionality by adding more features while preserving the core standards of mpvs OSC. 项目地址: https://gitcode.com/gh_mirrors/…

2026/10/13 2:34:32 阅读更多 →
数据结构第一章重难点全梳理:逻辑结构、存储结构与复杂度分析

数据结构第一章重难点全梳理:逻辑结构、存储结构与复杂度分析

很多人在学一门新课程时,最容易忽略的偏偏是第一张。第一张通常看起来“全是概念、没有代码”,感觉像是空话,于是翻两页就过去了,等后面真正写程序、做算法题时才发现什么都对不上。这次我把自己重新整理的《数据结构》第一章笔记…

2026/10/13 2:34:32 阅读更多 →
修仙AI小镇xianxia-AI-town:大模型驱动的修仙模拟器,NPC与玩家为何能平权?完整解读

修仙AI小镇xianxia-AI-town:大模型驱动的修仙模拟器,NPC与玩家为何能平权?完整解读

【免费下载链接】xianxia-AI-town-AI- 大模型驱动的npc决策,npc和玩家平权 项目地址: https://gitcode.com/gh_mirrors/xi/xianxia-AI-town-AI- 点击查看 免费下载 修仙AI小镇(xianxia-AI-town)是一款大模型驱动的修仙模拟游戏&a…

2026/10/13 2:34:32 阅读更多 →
SpringBoot+Vue学生成绩分析与可视化平台全解析

SpringBoot+Vue学生成绩分析与可视化平台全解析

每年毕业季我都能在技术社区里看到大量和“成绩管理系统”相关的提问,这个题目属于那种“看起来老套、实则非常能打”的典型选题。特别是把Java、Vue、SpringBoot这三个词绑在一起的时候,它考查的已经不只是“会写增删改查”,而是完整的前后端…

2026/10/13 2:33:32 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →