目录

01.信息物理融合系统介绍

02.CPS方法对连续动态模型建

03.使用ModelCoder进行建模

04.Modelcoder(形式化验证的代码生成工具)


01.信息物理融合系统介绍

信息物理融合系统(CPS)是对计算进程与物理进程进行集成所形成的综合系统,其行为由系统的信息部分及物理部分共同定义。嵌入式系统中的计算机与网络监测并控制物理进程,且在通常情况下这些物理进程与计算进程在反馈环路中相互影响。使用CPS方法设计嵌入式系统的过程有三个主要部分,即建模、设计与分析,如下图1。

▲图1 创建嵌入式系统需要一个建模、设计和分析的迭代过程

其中,建模是通过模拟来加深对系统的理解的过程。模型模拟了系统并反映出系统的特性。模型指明了系统能做什么。设计是对嵌入式系统的机构化创建,制定系统如何执行其功能。分析是通过剖析来深入理解系统的过程,指定了系统为什么这样运行。

如图1所示,这个过程的三个部分是有所重叠的,其中,设计过程在这三个部分中不断迭代。通常情况下,该过程从建模开始,其目标是理解问题并设计解决策略。

02.CPS方法对连续动态模型建

连续动态模型是模型中较为简单的一种,我们今天就通过物体六个自由度的建模示例来简单了解一下使用CPS方法对连续动态模型建模。

为了研究物理系统的动态性,我们需要先回顾一些经典力学的原理。首先我们从简单的运动方程着手,该方程以常微分方程(未知函数只含有一个自变量的微分方程)的形式提供了系统的模型。

物理对象的空间运动可以表示为六个自由度,如图2所示。

▲图2 飞行器的6个自由度建模(空间位置以及滚转角、偏航角和俯仰角)

其中,三个代表三维空间中的位置,另外三个代表空间中的方向。假设有三个轴x、y和z,其中,x轴的绘制递增向左上角,y轴递增向右,z轴递增向下。滚转角(roll)是绕x轴旋转的角度,0弧度表示沿着z轴方向保持水平(即该角度是相对于z轴给出的)。偏航角(yaw)是绕y轴旋转的角度,0弧度表示直接指向下方(即相对于x轴给出的角度)。俯仰角(pitch)是绕z轴的旋转角度,0弧度通常代表水平指向(即相对于x轴给出的角度)。

由此,物体的空间位置就被表示为形如f:R->R的6个函数,其中R表示为实数,定义域(前面的R)表示时间,到达域(后面的R,区别于值域,函数的值域是到达域的子集)表示某个轴上的距离或与该轴的夹角。该类形式的函数被称为时间连续信号,常常被包含在向量值函数x:R -> R³和θ:R -> R³中,其中x和θ分别代表位置与方向。

位置和方向的改变符合牛顿第二定律,该定律中力与加速度相互关联。加速度是位置的二阶导数。我们的第一个公式即公式(1),用于处理位置信息。其中,F是三个方向的力向量,M是物体的质量,x''是x对事件的二阶导数(即加速度)。

速度是加速度的积分,由以下方程给出。其中,x''(0)是三个方向的初始速度。

基于公式1,该方程可进一步演化为如下形式:

位置是速度的积分,

其中,x(0)是初始位置。基于这些方程,如果已知物体的初始位置、初始速度以及施加在物体上的三个方向的作用力(时间的函数),就可以确定物体在任意时刻的加速度、速度以及位置。

这些作用于方向的运动方程使用了转矩,即旋转形式的作用力。这又是一个作为时间函数的三元素向量,代表了作用在物体上的净旋转力。它与角速度相关,形式类似于公式1.

其中,T是三个轴上的转矩向量,I(t)是物体的转动惯量张量。转动惯量是一个3X3矩阵,其取决于物体的集合形状和方向。如果物体是个球形的,那么这个惯性在所有轴上都是相同的,因此,其将归纳为一个常标量I,此时,该方程将与公式1非常相似,如式3所示。

旋转速度是加速度的积分,如下公式所示。其中,θ'(0)即三个轴的初始旋转速度。

如果将物体看作是球形,那么使用公式(3)可以得到以下方程。

方向则是旋转速度的积分,可由以下方程计算。

其中,θ'(0)是初始方向。

如果已知物体的初始方向、初始旋转速度,以及作用在物体三个轴上的转矩是一个时间函数,使用这些方程就能随时确定物体的旋转加速度、速度以及方向。

以上就是对连续动态物体进行简单建模的过程,此方法可以得到三维物体的加速度、速度、位置、旋转加速度和方向等信息,如果物体是在平面上移动的车辆,那么可以不考虑y轴方向的运动,车辆的运动方程也可以使用此方法进行简单的建模。

03.使用ModelCoder进行建模

使用ModelCoder对式(6)进行建模,通过模型观察连续动态模型的变化:

假设参数I为1,θ(0)初始方向 = 1,方程由三部分构成:

因此,我们分别对这三部分进行建模,

第一部分,由于θ(0) = 1,我们直接使用Constant模块进行输出即可:

第二部分,这是初始方向微分与时间的乘积,假设初始方向的导函数的结果是1,用Constans模块表示,与Clock模块相乘。

对于T(α),我们知道它是一个随时间变化而变化的值,我们使用斜率为1的Ramp模块来表示,对其进行两次积分,并乘以系数1/I=1,第三部分建模如下:

最后将方程的三部分用加法器组合在一起,搭建如下模型。

对此模型进行仿真,得到的结果如下图:

通过模型仿真,我们可以看到,模型在开始之初变化不大,但是随着时间的推移,施加在某个方向上的转矩T(α)越大,物体旋转的速度也越快。

04.Modelcoder(形式化验证的代码生成工具)

由我司自主开发的ModelCoder是一款支持多种嵌入式系统建模并可以自动生成高安全可靠的C代码的软件设计和开发工具。ModelCoder支持同步数据流以及状态机等嵌入式模型,其从模型生成代码的过程经过了形式化验证,保证生成过程的正确无误性,能够用于飞控,航电,核电DCS等多个安全关键领域的嵌入式软件的设计和开发。

ModelCoder采用了最严格的形式化技术,用定理证明的方式对模型到代码的生成过程进行了严格的数学证明。和同类软件SCADE的KCG相比,KCG只是采用了模型检测技术对模型本身进行了证明,而ModelCoder无疑在技术途径上更为可靠。

END

初识CPS方法的连续动态建模相关推荐

  1. ICML 2020 | 基于连续动态系统学习更加灵活的位置编码

    论文标题: Learning to Encode Position for Transformer with Continuous Dynamical Model 论文作者: Xuanqing Liu ...

  2. 自动驾驶 4-3 二维动态建模Dynamic Modeling in 2D

    sprung mass: [车辆] 簧上质量 spring: 弹簧 damper: [车辆] 减震器 unsprung mass: 非簧载质量 tire: 轮胎 vehicle shock absor ...

  3. 4.5 自行车模型的横向动力学(第四章 车辆的动态建模)

    4.5 自行车模型的横向动力学 (Lateral Dynamics of Bicycle Model) 在前面的视频中,我们覆盖了汽车纵向动力学.在本课中,我们将涵盖基于自行车建模方法的四轮汽车的动态 ...

  4. Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理

    Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理 代理模式 JDK动态代理 CGLIB动态代理 代理模式 代理模式是23种设计模式的一种,指一个对象A通过持有另一个对象B,可以具有B ...

  5. 虚方法表与动态分派机制详解

    在上两篇中分别对方法重载[https://www.cnblogs.com/webor2006/p/9723289.html]和方法重写[https://www.cnblogs.com/webor200 ...

  6. php动态添加查询,php动态添加url查询参数的方法,php动态url参数_PHP教程

    php动态添加url查询参数的方法,php动态url参数 本文实例讲述了php动态添加url查询参数的方法.分享给大家供大家参考.具体分析如下: 这段代码可以动态为url添加key-value查询参数 ...

  7. 动态方法注入 grails_Grails动态下拉菜单

    动态方法注入 grails 最近,我有一个UI要求,客户希望从两个单独的下拉列表中选择值. 第一个下拉列表的值实质上过滤了第二个下拉列表的值. 鉴于我们支持的财务项目对UI的要求并不严格,因此我不得不 ...

  8. php动态创建属性,PHP使用方法重载实现动态创建属性的get和set方法

    在PHP中,我们不能够直接通过方法名相同,签名不同的方法来@R_404_369@重载,因为PHP是弱数据类型,不能很好的区分签名.但是,可以在PHP的类中运用__call()方法来@R_404_369 ...

  9. 【余压监控系统】实时性、数字化、智能化,自动化,连续动态监控

    余压监控系统在某高层住宅的应用方案 安科瑞 崔远航 摘要 本文介绍了余压监控系统的基本架构和功能,结合某高层住宅建设实例分析了高层民用建筑中设置此系统的优点与必要性,总结了余压监控系统的功能用于高层建 ...

最新文章

  1. [笔记]Go语言在Linux环境下输出彩色字符
  2. 数据库常用操作(未完待续)
  3. MYSQL delete语句不支持别名?
  4. Codeforces Round #541 (Div. 2)
  5. linux 独占 cpu,宋宝华:谈一谈Linux让实时 高性能任务独占CPU的事
  6. python find函数 和index的区别_使用带有find和index的map时Python2和Python3之间的区别...
  7. Python3爬虫入门之Request库的使用
  8. less知识点总结(二)
  9. python识别收件地址_Python3 自动识别地址信息
  10. 记一次“U盘拔出”后重要文件丢失的恢复之旅
  11. 史上最简单的Mybatis教程(5天就够了)
  12. PDM,读《电商产品经理宝典:电商后台系统产品逻辑全解析》
  13. sql列转行逗号连接_SQL 拼接字符串 列转行 | 学步园
  14. 如何在Mac上打开和使用AirPlay,以便在更大的显示器上进行屏幕镜像?
  15. 更新RDL文件中的数据集(DataSets)
  16. 计算机一级荷塘月色操作题,《荷塘月色》课后习题及答案
  17. AXURE RP8实战手册 网站和APP原型制作案例精粹
  18. [pyecharts1.7] 坐标轴设置:X轴、Y轴通用
  19. python中的header是什么意思_python中header是什么意思啊
  20. Orbslam2 稠密点云 +D435i实现(Ubuntu18.04)

热门文章

  1. 哈理工计算机学院保研,哈尔滨理工大学计算机科学与技术学院(专业学位)软件工程保研夏令营...
  2. Vue组件学习之组件自定义事件
  3. .net mysql操作类_ASP.NET数据库操作类实例
  4. java 页面接收参数_详解SpringMVC——接收请求参数和页面传参
  5. centos7源码安装ntp_如何安装和配置 Chrony 作为 NTP 客户端?
  6. 计算机搜索文件时找不到搜索按钮,电脑搜不到文件怎么办?文件搜索软件用起来!...
  7. c语言程序设计基础广西师范大学漓江学院,广西师范大学漓江学院试卷-计算机基础A方案.doc...
  8. Java 蓝桥杯 龟兔赛跑预测
  9. 解决IDEA Maven项目无法下载依赖
  10. Linux定时向目标服务器传输文件