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 子系统确保模型只对真正的新消息做出反应。如果不使用启用的子系统,模型将一遍又一遍地重复处理相同的(最近收到的)消息,从而导致浪费的处理和命令消息的冗余发布
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号