关于分布式飞行仿真控制系统设计的思考
什么是控制系统 我通常把控制系统理解为一套“观察状态、做出判断、发出指令并修正结果”的机制。它会先获取被控制对象的当前状态,例如位置、速度、姿态、温度或任务进度;然后将这些状态和期望目标进行比较;最后通过某种执行机构或软件指令,让系统逐步靠近期望状态。 在我看来,一个典型的控制系统往往包含三个部分:输入、控制器和输出。输入描述系统当前发生了什么,控制器负责根据规则、算法或人工指令做决策,输出则作用到具体对象上。比如恒温空调会读取当前温度,和设定温度比较后决定是否制冷;自动驾驶仪会读取飞机姿态、高度和航向,再调整舵面或油门,使飞机保持在预定航迹上。 放到飞行仿真的场景里,我不太愿意把控制系统只看成几个按钮或命令接口,而是更愿意把它看成连接仿真模型、任务流程、设备状态和人工操作的一层协调机制。它既要能表达“我希望系统变成什么状态”,也要能持续感知“系统现在处于什么状态”,并在二者不一致时进行调度和修正。 在这篇设计思考里,我关注的主要目标是总体仿真控制。因此我希望这套控制系统承担的不只是单一对象的控制逻辑,还包括多个模拟器的接入与协同、各模拟器自身状态的管理,以及整个仿真任务运行状态...
在c++中嵌入python解释器
还是哪个展示应力模型的项目, 由于是基于之前的项目的, 而之前的项目的gui是qt做的, 之前又没有告诉我需要嵌入这个程序, 而我python的已经写完了 所以开始研究嵌入方案 首先需要确定python是否独立运行于老的gui程序 如果独立运行的情况, 我需要在python端额外写一个网络模块来和老gui程序进行交互,两边都得改, 怪麻烦的, 不考虑 非独立运行的话, 就需要嵌入python解释器来执行我写的python代码 准备 首先我们先安装 pybind11 库, 这是个 head-only 的库, 所以只需要下载源码, 在项目中添加头文件搜索的路径即可 先下载, 最简单的方案就是去github下载zip(he 为了不出现违法收入, 我们使用gitee的镜像, 链接 直接一键下载或者使用git # if has sshgit clone git@gitee.com:mirrors/pybind11.git# or use httpsgit clone https://gitee.com/mirrors/pybind11.git 如果是项目是cmake的话可以直接用 Fetc...
算法-2024-12-25
今天的题目是三数相加两件套 分别是 三数之和 最接近的三数之和 以下是题解 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293class Solution {public: vector<vector<int>> threeSum(vector<int> &nums) { if (nums.size() < 3) return {}; if (nums.size() == 3 && !(nums[0] + nums[1] + nums[2])) return {nums}; sort(nums.begin(...
算法-2024-12-23
今天的题目是罗马数字两件套 分别是 整数转罗马数字 罗马数字转整数 以下是题解 1234567891011121314151617181920212223242526272829303132333435constexpr array<char const *, 13> roman{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};constexpr array<int, 13> arabic{1000, 900, 500, 400, 100, 90, 50, ...
算法-2024-12-19
今天的题目是 leetcode 的 字符串转换整数 写的比较垃圾 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465class Solution { constexpr static char kSpace = ' '; constexpr static char kMinus = '-'; constexpr static char kPlus = '+'; bool prefix_checked = false; bool is_minus = false; bool number_checked = false;public: int myAtoi(string s) { using limit_t = ::std::numeric_limits<::std::int32_t>...
pyvista初试
跳槽后工作没那么忙了, 遂开始写博客打法时间. 因为现在的项目需要加载三维模型并显示应力, 所以需要vtk, 为了开发简单, 选择了python 开发环境 需要 python > 3.8 使用 pip 进行安装 pip install pyvista 使用 conda 进行安装 需要有Anaconda环境 conda install -c conda-forge pyvista 详情参考 官方文档. 尝试 尝试官方示例 import pyvistamesh = pyvista.Sphere()mesh.plot() 可以看到 from pyvista import examplesmesh = examples.download_dragon()mesh['scalars'] = mesh.points[:, 1]mesh.plot(cpos='xy', cmap='plasma') 可以看到 更多请查看 官方文档 尝试通过excel或csv提供数据 为了方便,这里我们需要使用pandas.pyvistaqt.py...
anaconda安装
为什么需要 anaconda python 本身提供了一个项目级别的虚拟环境 但是如果我们需要在不同的项目中使用不同的python版本 这就是python自己提供的 venv 无法做到的事情 所以我们需要一个外部的环境管理器来做这种级别的隔离 这就是使用 anaconda 的原因 下载和安装 通过官网或者清华镜像站下载 官网需要注册, 所以通常建议在镜像站下载 这里主要描述linux下的安装 先下载 wget --user-agent="Mozilla" https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/${select_version}.sh 这里加user-agent是因为清华源http请求需要这个 安装前需要对下载下来的 sh 文件授权 chmod 777 ./${select_version}.sh 直接执行脚本按照提示安装即可 基本使用 安装完成后会有一个 conda 指令, 通常情况下我们通过这个指令进行操作 # 安装包conda install $p...