< >
Home » ROS2与Matlab入门教程 » ROS2与Matlab入门教程-ROS2上启用ROS的机器人的反馈控制

ROS2与Matlab入门教程-ROS2上启用ROS的机器人的反馈控制

说明:

  • 介绍如何使用Simulink控制通过ROS2网络在Gazebo机器人模拟器中运行的模拟机器人

介绍:

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

  • 下图总结了 Simulink 和机器人模拟器之间的交互(图中箭头表示 ROS 2 消息传输)。/odom主题传达位置信息,主题/cmd_vel传达速度命令

请输入图片描述

  • 启动机器人模拟器并配置 Simulink

  • 在此任务中,您将为差动驱动机器人启动基于 ROS 的模拟器,启动 ROS 桥配置 MATLAB® 与机器人模拟器的连接

  • 使用Gazebo 和 Simulated TurtleBot 入门中的说明下载虚拟机​​

  • 打开VM 主目录中的DEFAULT_FASTRTPS_PROFILE.xml

    文件,并将条目替换为主机和 VM IP 地址。要在不同子网下进行通信,请参阅连接到 ROS 2 网络中的在子网外进行通信部分

请输入图片描述

  • 在 Ubuntu 桌面上,单击Gazebo Empty图标以启动空的 Gazebo 世界

请输入图片描述

请输入图片描述

  • 单击ROS 桥图标以启动 ROS 桥以在 Simulink ROS 2 节点和 Turtlebot3 启用 ROS 的机器人之间中继消息

  • 在主机上的 MATLAB 中,使用'ROS_DOMAIN_ID'环境变量为ROS 2 网络设置正确的域 ID,25以匹配机器人模拟器 ROS 桥设置并运行ros2 topic list以验证机器人模拟器中的主题在 MATLAB 中是否可见

setenv('ROS_DOMAIN_ID','25')
ros2 topic list 

/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/比例控制器' );

请输入图片描述

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

-Desired Position(在模型的顶层):(X,Y)坐标中的所需位置

  • Distance Threshold:如果距离所需位置的距离小于此距离,则机器人停止

  • Linear Velocity : 机器人的前向线速度

  • Gain :修正机器人方向时的比例增益

  • 该模型还有一个模拟速率控制模块(在模型的顶层)。此模块确保模拟更新间隔遵循挂钟经过的时间

  • 配置 Simulink 并运行模型

  • 在此任务中,您将配置 Simulink 以通过 ROS 2 与启用 ROS 的机器人模拟器进行通信,运行模型并观察机器人在机器人模拟器中的行为

  • 为 ROS 2 配置网络设置

  • 在Simulation选项卡下的PREPARE中,选择ROS Toolbox > ROS Network

  • 在Configure ROS Network Addresses中,将 ROS 2 Domain ID 值设置为25,并将 ROS 2 RMW Implementation 设置为rmw_fastrtps_cpp

  • 单击确定以应用更改并关闭对话框

请输入图片描述

  • 运行模型

  • 在屏幕上放置窗口,以便您可以观察 Simulink 模型和机器人模拟器

  • 单击 Simulink 中的 Play 按钮开始仿真

  • 在模拟运行时,双击Desired Position模块并将 Constant 值更改为[2 3]。观察机器人是否改变了它的航向

  • 在仿真运行时,打开Proportional Controller子系统并双击Linear Velocity (slider)模块。将滑块移动到 2。观察机器人速度的增加

  • 单击 Simulink 中的 Stop 按钮以停止仿真

  • 观察传入消息的速率

  • 在此任务中,您将观察传入消息的时间和速率

  • 单击 Simulink 中的 Play 按钮开始仿真

  • 打开范围块。观察Subscribe块的IsNew输出始终为零,表示没有收到 /odom 主题的消息。图的水平轴表示模拟时间

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

  • 在 Scope 显示中,观察IsNew输出的值 1 大约为每秒 20 次,在经过的挂钟时间内

请输入图片描述

  • 与挂钟时间的同步归因于模拟速率控制模块。通常,Simulink 仿真在自由运行的循环中执行,其速度取决于模型的复杂性和计算机速度(请参阅仿真循环阶段(Simulink))。Simulation Rate Control模块尝试调节 Simulink 执行,以便在可能的情况下每次更新花费 0.02 秒的挂钟时间(这等于模型的基本采样时间)

  • 此外,Proportional Controller 和 Command Velocity Publisher 的 Enabled 子系统确保模型只对真正的新消息做出反应。如果不使用启用的子系统,模型将一遍又一遍地重复处理相同的(最近收到的)消息,从而导致浪费的处理和命令消息的冗余发布

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与matlab入门教程