【Simulink+Prescan笔记】控件介绍

GOTO控件和From控件介绍

功能介绍

  • GOTO控件:向具有指定tag的From控件发送信号。如果tag可见范围有三种:local,scoped,global,默认为local。
    在这里插入图片描述
  • From控件:用指定的tag接收来自Goto控件的信号。若要更换tag,输入新的tag后,点击“Update Tags”,Goto source也会随之更新。
    在这里插入图片描述

实验过程

  • 搭建如下布局(控件设置均使用默认值)
    在这里插入图片描述
  • 点击Run,观察Scope1,我们看到虽然Sine Wave和Scope1之间没有直接向量的线段,但Scope依然能够显示Sine Wave的正弦波,这就是Goto和From的作用。
    在这里插入图片描述

补充

Goto和From控件除了传输正弦波数据,还可以一次传输多组多种格式的数据

S-Function Builder控件

本栏参考

一文教你快速学会在matlab的simulink中调用C语言进行仿真

功能介绍

S-Function Builder用于集成 C 或 C++ 代码以创建 S-Function
在这里插入图片描述

实验过程

  • 搭建如下布局(三个常数控件的Constant Value依次为1、50、4000,Scope的输入端口个数为3)
    在这里插入图片描述
  • 双击S-Function Builder控件,弹出设置界面
    在这里插入图片描述
  • 对system_Outputs_wrapper函数进行修改,以便实现梯形曲线规划功能

打开时的默认代码:

void system_Outputs_wrapper(const real_T *u0,
                            real_T *y0)
{
/* Output_BEGIN */
/* This sample sets the output equal to the input
      y0[0] = u0[0]; 
 For complex signals use: y0[0].re = u0[0].re; 
      y0[0].im = u0[0].im;
      y1[0].re = u1[0].re;
      y1[0].im = u1[0].im;
 */
/* Output_END */
}

修改后的代码:

void sfun_Outputs_wrapper(const real_T *u0,
                          const real_T *u1,
                          const real_T *u2,
                          const real_T *t,
                          real_T *y0,
                          real_T *y1,
                          real_T *y2)
{
/* Output_BEGIN */
int Am = u0[0];
    int Vm = u1[0];
    int Pf = u2[0];
    int T = t[0];
    
    int Ta = Vm/Am;
    int Tm = (Pf - Am*Ta*Ta)/Vm;
    int Tf = 2*Ta+Tm;
    printf("%d\r\n",Tf);
    //梯形
    if(Tm>0){
        if(T <= Ta){
            y0[0] = 0.5*Am*T*T;
            y1[0] = Am*T;
            y2[0] = Am;
        }else if(T<=(Ta+Tm)){
            y0[0] = 0.5*Am*Ta*Ta + Vm*(T-Ta);
            y1[0] = Vm;
            y2[0] = 0;
        }else if(T<=(Ta+Tm+Ta)){
            y0[0] = 0.5*Am*Ta*Ta + Vm*Tm + 0.5*Am*(T-Ta-Tm)*(T-Ta-Tm);
            y1[0] = Vm-Am*(T-Ta-Tm);
            y2[0] = -Am;
        }
    }else{
    //三角形
        Ta = sqrt(Pf/Am);
        if(T<Ta){
            y0[0] = 0.5*Am*T*T;
            y1[0] = Am*T;
            y2[0] = Am;
        }else{
            y0[0] = 0.5*Am*Ta*Ta + 0.5*Am*(T-Ta)*(T-Ta);
            y1[0] = Am*Ta - Am*(T-Ta);
            y2[0] = -Am;
        }
    }
/* Output_END */
}

同时,用insert_Ports插入几个变量。默认有u0,y0,我们还需要插入输入变量u1,u2,t和输出变量y1,y2
在这里插入图片描述
最后点击Build:(此时我还将左上角S-Function Nmae的名字改成了sfun)
在这里插入图片描述
编译成功后,右侧的Build Log会显示如下记录。如果没有成功,请检查函数复制粘贴时,是否遗漏括号,插入的变量数量与名称是否一致。
在这里插入图片描述

  • 回到simulink界面,进行连线
    在这里插入图片描述

  • 然后点击Run,查看Scope的结果
    在这里插入图片描述

  • 这个显示样式并没有办法明显的区分出不同曲线的变化情况,所以我们点击左上角的齿轮符号,调整布局为三行显示,同时把Stop Time的值改为120。
    在这里插入图片描述
    在这里插入图片描述

  • 再次点击Run,我们便可以清晰的看到位置曲线、速度曲线、加速度曲线的变化趋势了。
    在这里插入图片描述

案例下载

S-Funciton的一个简单实验

补充

  • S-Function Builder 控件不支持封装。但是,可以封装包含 S-Function Builder 模块的 Subsystem 模块。有关详细信息,请参阅动态封装子系统
  • 除了使用S-Function Builder控件建立一个S-Function外,我们还可以直接创建一个S-Function。
    在这里插入图片描述
    • 通过S-Function直接创建的图标和S-Function Builder创建的图标是不一样的。
    • 双击S-Function控件时,显示的不是Builder界面,而是Parameters设置界面,我们可以点击Edit来查看默认代码,同时进行修改。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 对于S-Function Builder创建的控件,如果也想查看修改Parameters界面,可以右键单击该控件,点击Block Parameters(S-Function)

BusCreator控件和BusSelector控件

功能介绍

  • Bus Creator控件:可将一组输入信号合并成一条总线。(在配置界面设置输入信号的个数和顺序)在这里插入图片描述
  • BusSelector控件:输出从输入总线选择的信号。(在配置界面设置输入的信号和输出的信号,信号可多次重复输出或不输出)
    在这里插入图片描述

实验过程

  • 搭建如下布局(控件设置均使用默认值)
    在这里插入图片描述
  • 双击Bus Selector进入配置界面,选择signal1、signal2、signal1作为输出信号
    在这里插入图片描述
  • 设置Scope的输入端口数量为3,并以三列的布局显示,调整信号连接。
    在这里插入图片描述
    • 点击Run,观察Scope,我们可以看到正弦波和常数1都出现在了Scope界面中,并且正弦波出现了两个。
      在这里插入图片描述

案例下载

BusCreator和BusSelector的简单实验

补充

  • 除了使用BusSelector对信号选择,也可以使用Mux等对信号进行操作,Mux的作用是将相同数据类型和复/实性的输入信号合并为虚拟向量。

Inport控件和Outport控件

功能介绍

  • Inport控件:为子系统或外部输入创建输入端口。
    • Main界面
      在这里插入图片描述
      • Port number:指该端口在子系统或该模块中,是第几个输入端口。
      • Icon display:指Inport控件显示的图标,默认显示端口号。
    • Signal Attributes界面
      在这里插入图片描述
      • Data type:数据类型,通常Inherit: auto自动适应就行,有时候我们也会创建一些特殊的类型,来使用,比如上图中,在车辆模型中,我们使用的是Bus: PRESCAN_SELFSENSORDATA类型的输入数据。
      • Sample time:指定采样时间,默认为-1,表示根据模型中的模块上下文继承其采样时间。
  • Outport控件:为子系统或外部输出创建输出端口。界面与Inport控件类似。

Prescan自带的组合控件:Path Follower with Preview控件

功能介绍

在图形用户界面中选择路径跟随器模型来模拟驾驶员行为。

原理

在这里插入图片描述

  • 路径跟随器是基于最优预见控制理论,它通过最小化车辆的位置(车辆重心)和参考路径的横向误差计算最佳前轮转向角。它近似于人类驾驶员的一般行为。
  • 该算法使用10个预览点来计算方向盘角度。预览距离通过将车辆速度(单位为米/秒)乘以“预览时间”(默认为1秒)来计算。这实际上是车辆在1秒的预览时间内移动的距离。10个横向误差( e _ L a t m e\_Lat_m e_Latm)是通过首先找到轨迹上最近的点( p v p r e f , m pvp_{ref,m} pvpref,m),然后找到该点到车辆纵轴的距离来计算的。
  • 路径跟随器是一个Simulink模块,它将轨迹(路径+速度曲线)转化为车辆动力学模型的转向角输入。油门、刹车和初始速度也受到控制,但这些与轨迹速度曲线无关。

参数对话框

  • 控制器参数
    在这里插入图片描述
    Longitudinal Controller P:proportional gain,比例增益
    Longitudinal Controller I:integral gain,积分增益
    Longitudinal Controller D:integral gain,导数增益
    Longitudinal Controller AWU:anti-windup gain,AWU反饱和增益
  • 系统参数
    在这里插入图片描述
    系统参数在simulink中是不可以更改的,如果想要修改,需要在Prascan中进行修改,修改完之后重新构建,位置如下:
    在这里插入图片描述
    在这里插入图片描述

输入输出

在这里插入图片描述

输入

  • ActorOffset_Left(+)/Right(-):轨道起始位置w.r.t .全球(世界)坐标系。这些值由预扫描自动填充,并与演员活动轨迹相关。通常会连接Ground控件(输出为零)。
  • position x,y,Y:车辆实际位置。x、y是位移,Y是Z坐标偏移值,这个不知道如何解释。
  • Initial velocity:车辆初始速度。
  • Desired Velocity:车辆期望速度。车辆在一定范围内达到设定值。
  • velocity:车辆实际速度。
  • vx:车辆在x轴方向的速度分量。
  • vy:车辆在y轴方向的速度分量。
  • yaw rate:车辆的偏航速度。
  • Cornering Stiffness Tires Front:前轮胎转弯刚度,转弯时每弧度滑移角的前轮胎刚度。数值可以是90943。
  • Cornering Stiffness Tires Rear:后轮胎转弯刚度,转弯时每弧度滑移角的后轮胎刚度。数值可以是148091。
  • Steering ratio:方向盘角度与车轮角度之比。数值可以是20。

输出

  • delta_steerwheel:转向角。

  • Throttle:以0-100%的比例节流。

  • Brake pressure:制动功率为0-制动最大压力。

  • v0:初始速度

  • Auto_GearShift:自动换档的档位,0是N挡(空挡),1是前进挡(D挡位)。

  • Actor/Traj_distance:车辆重心到最近轨迹点的距离。
    在这里插入图片描述

  • Actor/Traj_angle:车辆纵轴和最近点轨迹切线之间的角度。
    在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

print_Hyon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值