ROS与Matlab语言入门教程-使能ROS机器人的反馈控制
本例中,用户将会运行一个模型,实现一个简单的闭环比例控制器,该控制器从仿真机器人(运行在基于ROS的仿真器)接收定位信息,并发送速度指令驱动机器人到达指定地点。用户可以在运行仿真的过程中,调整参数并观察仿真机器人的运动。
Simulink和机器人仿真器的交互如下图12.1所示,图中的箭头方向表示ROS消息传输方向。“/odom”话题用于传输定位信息,“/mobile_base/commands/velocity”话题用于传输速度指令。
任务1-启动机器人仿真器和配置Simulink
根据“从Simulink连接到ROS使能的机器人”例程的步骤完成如下工作:
- 启动MATLAB或Gazebo的机器人仿真器;
- 配置Simulink以连接到ROS网络。
任务2-打开已有的模型
连接到ROS网络之后,输入命令“robotExROSFeedbackControlExample”打开“example model”。
该模型实现了差分移动机器人的比例控制器,每一个时间步进,算法都会调整机器人的方向朝着目标位置并驱动前进,一旦到达目标位置,算法则停止机器人。
注意,模型中总共有四个可调参数(由颜色块指示)。
目标位置(模型的最高层):目标位置的(X,Y)坐标;
距离阈值:当机器人距离目标位置的距离小于距离阈值,机器人则停止;
线性速度:机器人前进的线性速度;
增益:当纠正机器人方向是的比例增益。
任务3-运行模型
本任务中,用户将会运行模型并在机器人仿真器中观察机器人的行为。
把窗口放置在屏幕中的合适位置,使得用户能够同时看到Simulink模型和机器人仿真器。
点击Simulink中的“Play”按钮,启动仿真。
在仿真运行期间,双击“Desired Position”块并改变“Constant”的值为[2,3],观察机器人方向的改变。
在仿真运行期间,打开“Proportional Controller”子系统并双击“Linear Velocity (slider)”块,调整滑动条到“2”,观察机器人速度的增加。
点击Simulink中的“Stop”按钮,停止仿真。
任务4-观察输入消息速率
本任务中,用户将会使用基于MATLAB的仿真器,观察输入数据的时序和速率。
关闭全部已有的“ExampleHelperRobotSimulator”的图像窗口。
点击Simulink中的“Play”按钮,启动仿真。
打开“Scope”块,观察到“”Subscribe块的输出“IsNew”总是为零,表明没有从“/odom”话题接收到消息,横轴表示仿真时间。
在MATLAB的命令行,输入“ExampleHelperRobotSimulator”指令,启动基于MATLAB的机器人仿真器。该仿真器一大约20Hz的频率发布“/odom”的消息。(in actual elapsed time在实际运行时间)
在“Scope”的显示里,观察到“IsNew”的值偶尔为1,说明收到消息。注意,在仿真时间,输入消息并不是周期的,也不是一20Hz速率接收。
这种矛盾现象的原因是仿真时间的进程和真是时间不同,仿真执行循环根据模型的复杂度和计算机的速度决定。(参阅Simulation Loop Phase)。如果使能的子系统没有被应用,那么模型将一直重复处理相同的消息(最新接收的),导致控制消息的浪费处理和多余发布。使能子系统帮助确认模型仅仅处理真正的新消息。
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号