0%

引入

常见的许多滤波如Kalman滤波等,其中本质上最后一步都是将两个测量同一个信号的不同传感器的输出信号合成为一个信号,这种最为常见的“线性融合”的滤波在数学上简单地表示为

其中即为两个待融合的信号,这里姑且称为滤波器增益,直观上上看是对两个信号做线性插值(Lerp)。传统的频域分析认为而如果,即滤波器输出与上一个输出融合,这个滤波器就是一个IIR低通滤波器。而如果系统的动力学模型已知,则可以用Kalman滤波器计算出滤最优波器增益完成融合(具体原理在如何理解Kalman滤波已经提及)。而这里下面讨论的是只知道传感器测量值以及概率分布的情况,通过最大似然估计和最大后验估计这两种统计参数估计方法两种方法给出解释

原理

对于滤波器而言其核心的原理在于滤波的准则,Kalman滤波器的准则是选择使得后验误差最小化的滤波增益,经典滤波器的准则是保留特定频带的信号而消除其他频带上的信号。同样地只知道传感器测量值以及概率分布的情况估计真实信号的滤波器也会有其准则,采用最大似然估计方法的准则称为最大似然估计,采用最大后验估计的准则称为最大后验准则。这两种方法的下面只做了最简单的两个测量值融合的分析,实际上也很容易推导至更多测量值融合以及多维联合正态分布的情况。
这里需要说明的是,后面的分析基于下面几个假设:首先待估计的真实值为,从两个测量源得到的测量值分别为,两个测量值均为独立并且存在高斯噪声,即

最大似然估计

阅读全文 »

基础知识,其中在Joan Sola - Quaternion kinematics for the error-state Kalman filter中提到了ESKF的实现,这里将按照文中的思路尝试构建一个简单的六轴算法并给出对应的解释

原理与思路

基础思路

ESKF(Error-State Kalman Filter)也是一种Kalman滤波器,基础的内容也类似如何理解Kalman滤波滤波中提到的,本质上与EKF类似,但ESKF最为核心的部分是,状态设定为实际状态的变化值即,根据推导出系统Error-State状态方程观测出系统,最后将此误差值与系统状态融合得到更新后的状态。
对于线性系统而言ESKF实际上与普通的Kalman滤波并无太大区别,但是在非线性的系统中观测比观测非线性程度会进一步减弱,并且后面我们也可以发现,最后一步误差值“加上”系统状态的定义可以是广义的,旋转的误差可以采用乘法(四元数乘法等)融合进实际姿态里,使得观测过程更加精确

另外一点,文中算法定义的旋转的误差,是一个三维的矢量,也就是之前一文中提到的so(3)的向量空间,比起其他的采用四元数直接相加的融合算法少了约束,因此这个整个滤波过程看上去更加像是拥有符合Kalman滤波器所需要的线性

阅读全文 »

数学模型

状态变量、输入/输出

状态空间方程是描述线性系统相互制约的关系的一种方式,其中主要有以下的三个变量

  • 外部环境对系统的作用也即外部施加的激励,为系统的输入,一般用多维列向量表示
  • 描述系统内部所处的行为或者运动信息的变量,为系统的状态量,一般用多维列向量表示
  • 能够从外部直接测量到的系统对外部环境的作用,为系统的输出一般用多维列向量表示

三个变量中一般可获知的变量只有系统的输入和输出,系统内部的状态量一般不能直接测量得到。同一个系统可以存在不同状态量表示的形式,其变量不一定存在物理意义。但有效状态量的数量是可以确定的,由n阶微分方程所确定的系统内部状态量向量的维数也为n,即系统状态量最大线性无关元素的个数为n

阅读全文 »

这篇文章只是提出一个运营上的模式,只是我个人经验总结而来的,仅供参考。从技术角度看向研发的管理,无非是要使制定一个计划保证研发的必要性和可行性,过程能够被量化,并确保最终结果合乎期望。下面是一个我认为研发最开始的时候应该要清楚的几个关键点,这些也可以作为一个立项模板来填写

问题定义

至少能够给出需要解决的问题的定义并说明必要性,这里一般是研发的,时间线会比较长的问题,例如说上个赛季从比赛结果来看我们出了什么问题。一般也不能是太广的问题例如所有机器人的稳定性,而是稍微的具体问题例如我们在与某个学校的比赛中因为机动性不足而处于劣势,因此需要提升步兵机器人的机动性,而后我们可以思考如何衡量机动性这一指标并给出解决方案。又或者说我们发现我们的阵容不足以击败一些强队,需要一台平衡步兵等。当然这里说明必要性也可以给出量化的指标,增强说服力。

需求分析

实际测试

阅读全文 »

RoboMaster比赛中,弹道解算是指根据视觉系统识别到的击打位置,计算云台应指向的角度的算法,这也是自动瞄准算法的最后一环。实际上相当于一个根据预测弹道轨迹反求瞄准角度的算法

理论计算

在视觉方案上计算的方案(1)(2)早已有人实现并被广泛使用,然而这两个算法均基于将弯曲的弹道补偿为直线,并且采用简单的迭代求数值解的思路编写。我认为这两个思路均比较奇怪,因为实际上在不考虑空气阻力的抛物体模型下非常容易求出解析解,而即使考虑了空气阻力计算出的结果也应与无空气阻力相近,另外迭代的危险之处在于可能存在计算失败的情况(数值上不收敛,或者方程本身是无解的)。针对这些问题,下面本文试图通过解析方法分别分析在无空气阻力模型和有空气阻力模型下求解发射角度的过程,以及一些边界情况的判定条件。

无空气阻力模型


如上图,只考虑弹丸在竖直平面(沿重力加速方向)运动的情况,假设目标(图中实心圆)距离发射点x0,竖直高度差为z0。以初始速度v将弹丸发射,发射出去的弹丸(图中空心圆)仅受重力影响。可列出如下方程

阅读全文 »

所谓电路仿真,是指对设计出的电路的实际功能进行模拟。为了最大程度确保电路在实际工程中符合预期,在如今EDA如此发达的时代几乎几乎每个电路设计的流程里面都会用仿真,采用计算机仿真也成了硬件设计的必备技能之一。下面在这里简单介绍一些常用的仿真软件以及使用。由于在RM里硬件的考察主要为超级电容模块的制作,也就是功率硬件的方向,因此这里的仿真将更加侧重于功率电源方向。

SPICE原理仿真

SPICE(Simulation Program with Integrated Circuit Emphasis)为一个早期开源的电路原理仿真的软件,后续衍生出不少的版本。这些版本也由一些半导体厂/电子厂直接开发而来,例如Candence的PSpice,Ti公司版本的PSpice以及用于模拟电路仿真的Tina-Ti,目前我们课堂上用过的NI的Multisim,ADI公司版本的LTSpice,还有开源版本的ngspice(Kicad内置的仿真软件即为这个)

就我个人而言,比较常用的是LTSpice和Tina-Ti,这两个软件可以免费使用,并且LTSpice仿真的速度极快,一般小型的电路10ms的仿真基本上秒出结果。两者均可以进行稳态/瞬态仿真,幅频相频响应仿真,对于目前能接触到的绝大部分电路均可使用。同时SPICE仿真也可以导入厂商给出的IC模型,可参考LTspice 入门教程3 导入仿真模型,对于官方库内不存在的元件也能手动添加参与仿真

阅读全文 »

本文基于RoboMaster比赛的需求编写的电控入门,其中难免存在错漏之处,后续会持续补充完善

电控简介

电控在RoboMaster里面主要的工作是完成机器人的硬件设计与接线,以及底层软件(或者我们一般指的是单片机上运行的软件)设计。硬件部分主要设计单片机主控电路板、用于接线接口的电路板、功率部分的超级电容相关的电路板,以及各个各种硬件模块间的接线。软件方面下至处理机器人中各种传感器数据的读取、各种执行器的输出、模块间的通信,上至信号处理算法,控制算法等设计。电控组在RoboMaster里面起到承接软硬件之间的作用,负责的工作也比较广,所需能力需要较为全面。

本文旨在给出一篇尽可能完整全面的指南,但对于具体全部技能和知识的掌握不要求全面,多数人在某些技能上能够做到一定深度已经可以是合格的电控成员

基础理论

阅读全文 »

比赛的意义?

首先所有竞技性比赛的最直接目标肯定是要赢,没有这一点失去了比赛的竞技性了。而赢的意义在于展现团队的技术实力,借助比赛的契机让其他人认可团队成员备赛所付出的努力。对于团队中个人发展,这个比赛最重要的意义是能够在这里学到东西并且得到认可,这些东西包括了技术,包括了对问题的分析解决能力,更包括了对于技术极致的追求。当然更现实的意义是这个比赛获奖可以评优保研加分,不过我认为这些好处对于在这个比赛里学到的东西和遇到的人来说只是最低级的那部分罢了。如果格局再放大一些,RoboMaster本身就要为社会尤其是DJI提供所认可的人才,填补大学教育在这方面的空白。
简而言之,RoboMaster对于个人发展的意义就在于锻炼学习的机会,在此基础上寻求来自其他人与社会的认可。

关于开源

在技术类的比赛中非常容易出现技术垄断的现象,在RoboMaster里面体现为一个团队掌握的技术不公开并借此在比赛中占据优势的现象,除此之外也不利于比赛本身以及各个参赛队之间技术水平的发展,以及新队伍加入到竞赛的过程。这就是比赛官方希望通过鼓励开源解决的问题,各个队伍公开技术资料交流参考,对于弱势队伍的研发的困难程度也有所降低,而反过来也可以倒逼强势队伍做出更多新技术。
但是许多开源很多时候仅仅是公开代码或图纸,在这个比赛里开源的参考意义是在于核心的设计的思想和过程,只看结果的话不一定有实际的指导意义。这也是区分所谓的“抄”与“不抄”的区别。对于开源正确的态度从来都是思考如何把它完整融入到我的设计之中,或者说我的设计最后和开源的设计有什么区别或者改进,而不是不加思考地使用一些即抄即用地开源。

队伍传承

阅读全文 »