目录
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-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界面中,并且正弦波出现了两个。
- 点击Run,观察Scope,我们可以看到正弦波和常数1都出现在了Scope界面中,并且正弦波出现了两个。
案例下载
补充
- 除了使用BusSelector对信号选择,也可以使用Mux等对信号进行操作,Mux的作用是将相同数据类型和复/实性的输入信号合并为虚拟向量。
Inport控件和Outport控件
功能介绍
- Inport控件:为子系统或外部输入创建输入端口。
- Main界面
- Port number:指该端口在子系统或该模块中,是第几个输入端口。
- Icon display:指Inport控件显示的图标,默认显示端口号。
- Signal Attributes界面
- Data type:数据类型,通常Inherit: auto自动适应就行,有时候我们也会创建一些特殊的类型,来使用,比如上图中,在车辆模型中,我们使用的是Bus: PRESCAN_SELFSENSORDATA类型的输入数据。
- Sample time:指定采样时间,默认为-1,表示根据模型中的模块上下文继承其采样时间。
- Main界面
- 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:车辆纵轴和最近点轨迹切线之间的角度。