1、来源:https://ww2.mathworks.cn/help/robotics/examples/feedback-control-of-a-ros-enabled-robot.html

如何使用 simlink来控制基于gazebo模拟器中运行的turtlebot机器人。

发现一个类似的翻译(可以参考):https://linhuican.gitbooks.io/matlab-ros/content/

在本例中, 运行一个实现简单闭环比例控制器的模型。控制器从gazebo中接收位置信息 ,并发送速度命令将机器人驱动到指定位置。在模型运行时调整一些参数, 可以观察到对模拟机器人的影响。

下图总结了 simulink 和机器人模拟器之间的交互 (图中的箭头表示 ros 消息传输)。"/odom" 主题传达位置信息, "/mobile_base/commands/velocity" 主题传递速度命令。

 

 

任务 1-启动机器人模拟器并配置模拟墨水

按照通过simulink连接ROS支持的机器人(翻译)示例中的步骤执行以下操作:

  • (1)启动 matlab或 gazebo中的机器人模型

  • (2)配置Simulink以连接到 ros 网络

任务 2-打开现有模型

在MATLAB命令行输入:open_system('robotROSFeedbackControlExample.slx');
该模型实现了差动移动机器人的比例控制器。在每个时间步长上, 算法都会将机器人定向到所需的位置, 并将其向前推进。一旦达到所需的位置, 算法将停止机器人。

 
  • 双击比例控制器:其中距离阈值: 如果机器人距离所需位置的距离更近, 则会停止线性速度: 机器人的正向线性速度增益: 校正机器人方向时的比例增益。如下:

任务 3-运行模型

在此任务中, 运行模型并在机器人模拟器中观察机器人的移动。

任务 4-观察传入消息的速率

在此任务中, 使用基于 matlab 的模拟器来观察传入消息的时间和速率。

  • 关闭任何现有的机器人模拟器图形窗口。(因为之前是在虚拟机下的turtlebot机器人,需要暂时关闭虚拟机,然后在simulink中配置网络设置为默认)如下:

  • 单击 "模拟" 中的 "播放" 按钮开始模拟。

  • 打开 "Scope" 块。观察订阅块的isnew输出始终为零, 表示没有收到/odom 主题的消息。图的水平轴表示模拟时间。

  • 然后在 matlab 命令行中, 键入ExampleHelperSimulinkRobotROS以启动基于 matlab 的机器人模拟器。此模拟器在大约 20 hz 的壁钟运行时间内发布/odom 消息。

  • 在 "Scope" 显示中,观察 isnew输出的值为 1, 大约速率为每秒 20倍, 以经过的壁钟时间为单位。

这种矛盾现象的原因是仿真时间的进程和真是时间不同,仿真执行循环根据模型的复杂度和计算机的速度决定。(参阅Simulation Loop Phase)。如果使能的子系统没有被应用,那么模型将一直重复处理相同的消息(最新接收的),导致控制消息的浪费处理和多余发布。使能子系统帮助确认模型仅仅处理真正的新消息。

使能子系统:

总结

此示例演示了如何使用 simulink 对模拟机器人进行简单的闭环控制。它还演示了如何使用使能子系统来减少 ros 网络中的开销。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐