第1章:Simulink环境搭建
做轨迹规划,第一步不是写代码,而是把工具准备好。
我见过不少新手,一上来就拖模块、连信号线,结果仿真跑不通,回头一看——参数没配、模型乱放、库都不知道在哪找。嗯,这些坑我都踩过。今天咱们就把Simulink环境这块地基打牢。
本章核心:掌握Simulink的基本操作、熟悉模块库、学会配置仿真参数、养成模型文件管理的好习惯。
1.1 Simulink基础操作
打开MATLAB,在命令行输入 simulink,或者直接点工具栏上的Simulink图标。我个人习惯用快捷键——在MATLAB里直接敲 simulink 回车,快得很。
你会看到一个起始页。别急着点空白模型,先看看模板。Simulink自带了几个常用模板,比如空模型、带Solver配置的模型、还有针对嵌入式生成的模板。我建议初学者选「Blank Model」,干净,没干扰。
新建模型后,你会看到一个大白板,左边是模块库浏览器。操作其实就三件事:
- 拖模块:从库浏览器拖到画布上
- 连信号线:鼠标点在模块输出口,拖到输入口
- 双击设置参数:每个模块都有自己的参数对话框
举个例子。我想生成一个正弦波信号,再显示出来。怎么做?
- 从
Sources库拖一个Sine Wave模块 - 从
Sinks库拖一个Scope模块 - 用鼠标连线,把Sine Wave的输出连到Scope的输入
- 点运行按钮(那个绿色三角)
双击Scope,你就能看到正弦波了。就这么简单。
小技巧:连线时按住 Ctrl 键,可以在不选中端口的情况下快速连线。我在做复杂轨迹规划时,这个操作能省一半时间。
1.2 模块库介绍
Simulink的模块库,说白了就是你的工具箱。你不需要记住所有模块,但要知道常用的几类在哪。
我按使用频率给你排个序:
| 库名称 | 常用模块 | 我的使用场景 |
|---|---|---|
| Sources(信号源) | Sine Wave, Step, Constant, Ramp | 生成输入信号,比如给轨迹规划器一个阶跃指令 |
| Sinks(信号显示) | Scope, Display, To Workspace | 看波形、看数值、把数据存到MATLAB里分析 |
| Continuous(连续系统) | Integrator, Derivative, Transfer Fcn | 做运动学模型,积分求位置,微分求速度 |
| Math Operations(数学运算) | Add, Product, Gain, Saturation | 信号加减、限幅、比例缩放 |
| Signal Routing(信号路由) | Mux, Demux, Bus Creator, Switch | 合并多路信号、做条件切换 |
| Ports & Subsystems(子系统) | Subsystem, Enabled Subsystem | 把复杂逻辑封装起来,模型更整洁 |
我记得刚做机器人轨迹规划时,最常用的是 Sources 和 Continuous 这两个库。为什么?因为你要给机器人发指令(信号源),然后机器人响应(连续系统模型),就这么回事。
注意:别把 Sine Wave 和 Ramp 搞混了。Sine Wave是周期振荡,Ramp是线性增长。做轨迹规划时,Ramp常用来做速度规划,Sine Wave则用于测试系统的频率响应。
1.3 仿真参数配置
模型搭好了,点运行——结果不对?多半是仿真参数没配好。
打开菜单栏的 Simulation → Model Configuration Parameters,或者直接按 Ctrl+E。这里有几个关键参数,我一个个说:
- Start time / Stop time:仿真起止时间。做轨迹规划,一般设0到10秒就够。别设太长,浪费时间。
- Solver(求解器):这是个大坑。简单说,
ode45是默认的变步长求解器,适合大多数连续系统。但如果你做的是离散控制,比如数字控制器,就得用discrete求解器。 - Step size(步长):变步长模式下,Simulink会自动调整。但我建议你设一个最大步长,比如
0.01秒。为什么?因为步长太大,仿真结果可能不准确,尤其是做轨迹规划时,插值点会丢失。
我曾经在一个项目中,仿真结果和实际机器人运动对不上。查了两天,最后发现是求解器步长太大,导致轨迹点被跳过了。从那以后,我每次都会手动设一下最大步长。
我的推荐配置(做轨迹规划时):
- Solver: ode45(连续系统)或 discrete(离散系统)
- Max step size: 0.01
- Stop time: 根据轨迹长度定,一般5-20秒
1.4 模型文件管理
这个部分,很多人不重视。但等你模型做到几十个模块、几百条信号线时,你就知道文件管理有多重要了。
我个人的习惯是这样的:
- 一个项目一个文件夹:比如
robot_trajectory_planning/ - 模型文件命名规范:
项目名_版本号.slx,比如traj_plan_v1.slx - 不要用中文名:Simulink对中文路径支持不好,容易报错。我吃过这个亏。
- 用子系统封装:把功能相关的模块打包成子系统,模型看起来清爽,也方便复用
举个例子。一个完整的轨迹规划模型,我会分成三层:
- 顶层:信号源 + 控制器 + 机器人模型 + 结果显示
- 第二层:每个子系统内部,比如控制器里再分位置环、速度环
- 第三层:具体的数学运算和逻辑
这样做的好处是,你一眼就能看出信号流向,调试时也方便定位问题。
小建议:每次修改模型前,先另存为一个新版本。比如 v1 改完变成 v2。这样万一改坏了,还能回退。我见过有人一个模型改了一个月,最后想回到最初版本——回不去了。
知识体系总览
下面这张图,把本章的核心内容串起来了。你可以把它当作一个快速索引:
你看,这四个部分其实是环环相扣的。基础操作让你能搭模型,模块库给你提供零件,仿真参数保证结果准确,文件管理让你不迷失在模型堆里。
嗯,这一章的内容就到这里。记住我说的:工具顺手了,活才能干得快。下一章咱们开始真正动手,做第一个轨迹规划模型。