主要内容

基于ROS的机器人的反馈控制

本例向您展示了如何使用Simulink®来控制在Gazebo®机器人万博1manbetx模拟器中通过ROS 2网络运行的模拟机器人。

简介

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

下图总结了Simulink与机器人模拟器之间的交互(图中的箭头表示ROS 2消息传输)。万博1manbetx的/奥多姆主题传达位置信息,而/ cmd_velTopic传达速度命令。

启动一个机器人模拟器并配置Simulink万博1manbetx

在本任务中,您将启动一个基于ROS的差动机器人模拟器,启动ROS桥配置MATLAB®与机器人模拟器的连接。

  • 中的说明下载虚拟机开始凉亭和模拟乌龟机器人

  • 打开DEFAULT_FASTRTPS_PROFILE.xml将虚拟机主目录下的文件替换掉<地址>包含主机和虚拟机IP地址的条目。如果需要在不同子网下通信,请参见子网外通信部分连接到ROS 2网络

  • 在Ubuntu桌面上,单击露台空图标开始空凉亭世界。

  • 单击ROS桥图标启动ROS桥接,在Simulink ROS 2节点和Turtlebot3 ROS启用机器人之间中继消息。万博1manbetx

  • 在主机上的MATLAB中,使用控件为ROS 2网络设置正确的域ID“ROS_DOMAIN_ID”环境变量为25以匹配机器人模拟器ROS桥的设置并运行Ros2主题列表验证机器人模拟器中的主题在MATLAB中可见。

setenv (“ROS_DOMAIN_ID”“25”) ros2主题列表
/clock /gazebo/link_states /gazebo/model_states /gazebo/performance_metrics /imu /joint_states /odom /parameter_events /rosout /rosout_agg /scan /tf

开放现有模式

连接到ROS 2网络后,打开示例模型。

open_system (“robotROS2FeedbackControlExample.slx”);

该模型实现了差动驱动移动机器人的比例控制器。在每个时间步上,算法将机器人定向到所需的位置并驱动它前进。一旦到达想要的位置,算法就会停止机器人。

open_system (“robotROS2FeedbackControlExample /比例控制器”);

注意,模型中有四个可调参数(用彩色块表示)。

  • 期望的职位(在模型的顶层):(X,Y)坐标中的期望位置

  • 距离阈值:当机器人距离目标位置的距离小于此距离时,机器人将被停止

  • 线速度:机器人前进的线速度

  • 获得:修正机器人方位时的比例增益

该模型也有一个模拟速率控制块(在模型的顶层)。此块确保模拟更新间隔遵循时钟运行时间。

配置Simulink万博1manbetx并运行模型

在本任务中,您将配置Simulink通过ROS 2与启用ROS的机万博1manbetx器人模拟器通信,运行模型并在机器人模拟器中观察机器人的行为。

为ROS 2配置网络设置。

  • 模拟选项卡,在准备中,选择ROS工具箱> ROS网络

  • 配置ROS网络地址,将“ROS 2 Domain ID”设置为25并将ROS 2 RMW Implementation设置为rmw_fastrtps_cpp

  • 点击好吧应用更改并关闭对话框。

运行模型。

  • 在屏幕上定位窗口,以便您可以同时观察Simulink模型和机器人模拟器。万博1manbetx

  • 点击Simulink中的Play按钮开始模拟。万博1manbetx

  • 模拟正在运行时,双击期望的职位block并将Constant值更改为3 [2].观察机器人改变它的方向。

  • 在模拟运行时,打开比例控制器子系统,双击线速度(滑块)块。将滑块移动到2。观察机器人速度的增加。

  • 在Simulink中单击“停止”按钮以停止模拟。万博1manbetx

观察接收消息的速率

在这个任务中,您将观察传入消息的时间和速率。

  • 点击Simulink中的Play按钮开始模拟。万博1manbetx

  • 打开Scope块。观察到IsNew的输出订阅Block总是0,表示没有接收到/odom主题的消息。图的横轴表示模拟时间。

  • 在ROS网络中启动Gazebo Simulator,在ROS 2中启动ROS Bridge,使ROS 2网络能够接收到Gazebo Simulator发布的消息。

  • 在Scope显示中,观察IsNew输出值为1,以大约每秒20次的速度输出,以经过的时钟时间为单位。

与挂钟时间的同步是由于模拟速率控制块。通常,Simulink仿真万博1manbetx在一个自由运行的循环中执行,其速度取决于模型的复杂性和计算机的速度(参见模拟回路阶段(万博1manbetx模型))。的模拟速率控制block试图调节Simulink的执行,以便在可能的万博1manbetx情况下,每次更新在时钟时间上花费0.02秒(这等于模型的基本采样时间)。有关更多信息,请参阅块内的注释。

此外,比例控制器和命令速度发布器的Enabled子系统确保模型只对真正的新消息做出反应。如果不使用启用的子系统,模型将反复处理相同的(最近接收的)消息,导致浪费的处理和冗余的命令消息发布。

总结

本例向您展示了如何使用Simulink对模拟机器人进行简单的闭环控制。万博1manbetx它还展示了如何使用Enabled子系统来减少ROS 2网络中的开销。