< >
Home » ROS2与Matlab入门教程 » ROS2与Matlab入门教程-通过ROS2从Simulink连接到启用ROS的机器人

ROS2与Matlab入门教程-通过ROS2从Simulink连接到启用ROS的机器人

说明:

  • 介绍如何配置Simulink模型以从基于ROS的单独模拟器发送和接收信息

  • 介绍如何配置Simulink以使用ROS2连接到单独的机器人模拟器

  • 介绍如何向模拟机器人发送速度命令

  • 介绍如何从模拟机器人接收位置信息

介绍:

  • 使用 Simulink 连接到启用 ROS 的物理机器人或启用 ROS 的机器人模拟器,例如Gazebo

步骤:

  • 将为差动驱动机器人启动一个基于 ROS 的模拟器,以及一个通过 ROS 2 网络重放 ROS 消息的 ROS 桥

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

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

    文件,并将条目替换为主机和 VM IP 地址。在不同子网下进行通信

请输入图片描述

  • 在 Ubuntu 桌面上,单击“ Gazebo Empty ”图标启动 Gazebo 世界。

  • 单击“ ROS Bridge ”图标,在 ROS 和 ROS 2 网络之间中继消息。

请输入图片描述

  • 在主机上的 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
  • 模拟器接收和发送有关以下主题的消息:

  • 接收geometry_msgs/Twist有关 /cmd_vel 主题的速度命令消息。

  • nav_msgs/Odometry向/odom主题发送消息。

  • 打开现有模型,连接到 ROS 2 网络后,打开示例模型

open_system( 'robotROS2ConnectToRobotExample' );

请输入图片描述

  • 配置 Simulink 以连接到 ROS 2 网络

  • 在Simulation选项卡Prepare gallery 中,单击ROS TOOLBOX下的ROS Network

  • 在Configure ROS Network Addresses对话框中,在Domain ID (ROS 2)下,将ID设置为25。此 ID 值与 Ubuntu 虚拟机上的 ROS 2 网络的域 ID 匹配,接收来自 ROS 网络中 Gazebo 的消息

请输入图片描述

  • 向机器人发送速度命令

  • 创建一个向模拟器发送控制命令(线速度和角速度)的发布者。使用Slider Gain块使这些速度可调

  • ROS使用右手坐标系,所以X轴在前,Y轴在左,Z轴在上。使用geometry_msgs/Twist消息发送控制命令,其中linear.x指示线性前进速度(以米/秒为单位),并angular.z指示围绕 Z 轴的角速度(以弧度/秒为单位)

  • 打开一个新的 Simulink 模型

  • 在ROS选项卡的CONNECT下,单击Select a ROS Network并选择Robot Operating System 2 (ROS 2)

  • 从库浏览器中的ROS 工具箱> ROS 2选项卡中,将发布块拖到模型中。双击块

  • 将主题源设置为指定您自己的. /cmd_vel在主题字段中输入。单击消息类型旁边的选择,从下拉列表中选择,然后单击确定。geometry_msgs/Twist

  • 从库浏览器的ROS 工具箱> ROS 2选项卡中,将空白消息块拖放到模型中。双击块

  • 单击消息类型旁边的选择并选择。geometry_msgs/Twist

  • 将采样时间设置为0.01并单击确定

  • 从Library Browser的Simulink > Signal Routing选项卡中,将Bus Assignment模块拖到模型中

  • 将Blank Message模块的输出连接到Bus Assignment模块的输入,并将Bus输出连接到Publish模块的输入。Bus

  • 在Modeling 选项卡中,单击Update Model以确保正确传播总线信息。忽略错误“在输入总线信号中找不到总线分配块'无标题/总线分配'中的选定信号'signal1'”,如果它出现。下一步将解决此错误

  • 双击Bus Assignment模块。??? signal1在右侧列表框中选择并单击删除。在左侧列表框中,展开linear和angular属性。选择线性> x和角度> z并单击选择。单击“确定”关闭模块掩码

请输入图片描述

  • 添加一个Constant模块、一个Gain模块和两个Slider Gain模块。如下图所示将它们连接在一起,并将增益值设置为-1

请输入图片描述

  • 将线速度滑块的限制和当前参数分别设置0.0为2.0和1.0。将转向增益滑块的相应参数设置-1.0为1.0, 和0.1

  • 从机器人接收位置信息

  • 创建订阅者以接收发送到该/odom主题的消息。您还将提取机器人的位置并在 XY 平面上绘制它的路径

  • 从库浏览器的ROS 工具箱> ROS 2选项卡中,将订阅块拖到模型中。双击块

  • 将Topic source设置为Select From ROS network,然后单击Topic框旁边的Select 。为主题选择“/odom”,然后单击“确定” 。请注意,消息类型是自动设置的。nav_msgs/Odometry

  • 从Library Browser的Simulink > Signal Routing选项卡中,将Bus Selector模块拖到模型中

  • 将Subscribe模块的Msg输出端口连接到Bus Selector模块的输入端口。在Modeling选项卡中,单击Update Model以确保正确传播总线信息

  • 双击Bus Selector模块。在右侧列表框中选择??? signal1和并单击Remove。在左侧列表框中,展开姿势>姿势>位置并选择x和y。单击选择,然后单击确定

请输入图片描述

  • 从Library Browser的Simulink > Sinks选项卡中,将一个XY Graph模块拖到模型中。将Bus Selector模块的输出端口X和Y输出端口连接到XY Graph模块的输入端口

  • 下图显示了完成的模型。为了您的方便,其中包含一个预配置的模型

请输入图片描述

  • 配置和运行模型

  • 在建模选项卡中,单击模型设置。在Solver窗格中,将Type设置为Fixed-step并将Fixed-step size设置为0.01

  • 将模拟停止时间设置为inf

  • 单击运行开始模拟

  • 在模拟器和 XY 图中,您都应该看到机器人在圆周运动

  • 在模拟运行时,更改Slider Gain块的值以控制机器人。双击XY Graph块并根据需要更改X和Y轴限制(您可以在模拟运行时执行此操作)

  • 要停止模拟,请单击停止

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

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


标签: ros2与matlab入门教程