支持 ros 的机器人的反馈控制(翻译与实操)
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...
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 网络中的开销。
更多推荐
所有评论(0)