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轴限制(您可以在模拟运行时执行此操作)
要停止模拟,请单击停止
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号