学习使用ROS Toolbox的一些记录

开始使用ROS工具箱

ROS工具箱提供了一个接口,将MATLAB® 和Simulink® 与机器人操作系统(ROS和ROS 2)连接起来,使您能够创建一个ROS节点网络。该工具箱包含MATLAB函数和Simulink模块,用于导入、分析和回放rosbag文件中记录的ROS数据。您也可以连接到活跃的ROS网络来访问ROS消息。
该工具箱允许您通过桌面模拟和连接到外部机器人模拟器(如Gazebo)来验证ROS节点。ROS工具箱支持c++代码生成(使用Simulink Coder™),使您能够自动生成ROS节点。

1.从ROS开始

本例将介绍:
1在MATLAB中建立ROS
2获取关于ROS网络功能的信息
3获取关于ROS消息的信息

1.1 ROS术语

ROS网络由机器人系统的不同部分(如规划器或摄像头接口)组成,它们通过ROS进行通信。网络可以分布在多台机器上。
ROS master负责协调ROS网络的不同部分。它由主URI(Uniform Resource Identifier)标识,该URI指定主服务器运行的机器的主机名或IP地址。
一个ROS节点包含一组相关的ROS功能(例如发布者、订阅者和服务)。一个ROS网络可以有许多ROS节点。发布者、订阅者和服务是处理数据的不同类型的ROS实体。它们使用消息交换数据。
发布者将消息发送到特定的主题(如“里程数”),该主题的订阅者接收这些消息。一个主题可以与多个发布者和订阅者关联。

1.2初始化ROS网络

使用 rosinit 去初始化ROS网络。默认情况下,rosinit 在MATLAB中创建一个ROS主节点,并启动一个连接到主节点的全局节点。全局节点被其他ROS功能自动使用。

rosinit
Launching ROS Core...
Done in 0.77356 seconds.
Initializing ROS master on http://172.29.207.151:57188.
Initializing global node /matlab_global_node_12045 with NodeURI http://dcc345885glnxa64:35297/ and MasterURI http://localhost:57188.

使用 rosnode list 查看ROS网络中的所有节点。注意,唯一可用的节点是 rosinit 创建的全局节点。

rosnode list
/matlab_global_node_12045

使用 exampleHelperROSCreateSampleNetwork 给ROS网络添加三个额外节点和示例发布者与订阅者。

exampleHelperROSCreateSampleNetwork
/matlab_global_node_12045
/node_1
/node_2
/node_3

图中显示了ROS网络的当前状态。MATLAB全局节点断开连接,因为它目前没有任何发布者、订阅者或服务。

1.3 话题

使用 rostopic list 查看ROS网络中的可用话题。有四个话题:/pose, / roout, /scan和/tf。默认的话题:rosout和tf始终存在于ROS网络中。另外两个话题是作为示例网络的一部分创建的。

rostopic list
/pose  
/rosout
/scan  
/tf 

使用 rostopic info <topicname> 获取关于特定话题的特定信息。下面的命令显示 节点 /node_1 发布(发送消息给) /pose 话题,节点 /node_2 订阅(接收来自话题的消息) /pose 话题。

rostopic info /pose
Type: geometry_msgs/Twist
 
Publishers:
* /node_1 (http://dcc345885glnxa64:42939/)
 
Subscribers:
* /node_2 (http://dcc345885glnxa64:42477/)

使用rosnode info <nodename> 获取特定节点的信息。例如,node_1发布到/pose、/ roout和/tf话题,订阅 /scan 话题并提供服务:/node_1/get_logger和/node_1/set_logger_level。默认的日志服务:get_loggers和set_logger_level由在ROS网络中创建的所有节点提供。

rosnode info /node_1
Node: [/node_1]
URI: [http://dcc345885glnxa64:42939/]
 
Publications (3 Active Topics): 
 * /pose
 * /rosout
 * /tf
 
Subscriptions (1 Active Topics): 
 * /scan
 
Services (2 Active): 
 * /node_1/get_loggers
 * /node_1/set_logger_level

1.4 服务

ROS服务提供了一种跨ROS网络的程序调用机制。服务客户端向服务器发送请求消息,服务器处理请求中的信息并返回响应消息(参见Call and provider ROS Services)。使用rosservice list查看ROS网络中所有可用的服务器。下面的命令显示了两个服务(/add和/reply)以及所有节点的默认记录器服务。

rosservice list
/add
/matlab_global_node_12045/get_loggers
/matlab_global_node_12045/set_logger_level
/node_1/get_loggers
/node_1/set_logger_level
/node_2/get_loggers
/node_2/set_logger_level
/node_3/get_loggers
/node_3/set_logger_level
/reply

使用 rosservice info <servicename> 获取特定服务的信息。

rosservice info /add
Node: /node_3
URI: rosrpc://dcc345885glnxa64:48307
Type: roscpp_tutorials/TwoInts
Args: MessageType A B

1.5消息

发布者、订阅者和服务使用 ROS messages 交换信息。每个ROS messages 都有一个相关的消息类型,该类型定义了 messages 中信息的数据类型和布局。

使用rostopic type <topicname>查看话题使用的消息类型。下面的命令显示 /pose 话题使用类型为geometry_msgs/Twist的消息。

rostopic type /pose
geometry_msgs/Twist

使用rosmsg show <messagetype>命令查看消息类型的属性。geometric y_msgs/Twist消息类型有两个属性,Linear和Angular。每个属性都是一个类型为geometry_msgs/Vector3的消息,该消息又有三个类型为double的属性。

rosmsg show geometry_msgs/Twist
% This expresses velocity in free space broken into its Linear and Angular parts.
Vector3  Linear
Vector3  Angular
rosmsg show geometry_msgs/Vector3
% This represents a vector in free space. 
% It is only meant to represent a direction. Therefore, it does not
% make sense to apply a translation to it (e.g., when applying a 
% generic rigid transformation to a Vector3, tf2 will only apply the
% rotation). If you want your data to be translatable too, use the
% geometry_msgs/Point message instead.

double X
double Y
double Z

使用rosmsg list 查看MATLAB中可用的消息类型的完整列表。

1.6 关闭ROS网络

使用examplehelperrosshutdownsamplennetwork从ROS网络中删除示例节点、发布者和订阅者。只有在前面使用examplehelperrosstartsamplennetwork创建示例网络时,才需要此命令。

exampleHelperROSShutDownSampleNetwork

在MATLAB中使用rosshutdown关闭ROS网络。这将关闭由rosinit启动的ROS主节点,并删除全局节点。使用ROS网络后,建议使用rosshutdown。

rosshutdown
Shutting down global node /matlab_global_node_12045 with NodeURI http://dcc345885glnxa64:35297/ and MasterURI http://localhost:57188.
Shutting down ROS master on http://172.29.207.151:57188.

2. 连接到ROS网络

一个ROS网络由一个ROS主节点和多个ROS节点组成。ROS主机通过跟踪所有活跃的ROS实体来促进ROS网络中的通信。每个节点都需要向ROS主机注册,以便能够与网络的其他部分通信。MATLAB®可以启动ROS master,或master可以在MATLAB之外启动(例如,在不同的计算机上)。

当使用ROS时,通常遵循以下步骤:
1.连接到ROS网络。要连接到ROS网络,可以在MATLAB中创建ROS主服务器或连接到现有的ROS主服务器。在这两种情况下,MATLAB还将创建自己的ROS节点(称为MATLAB全局节点)并向主节点注册。rosinit功能管理这个过程。
2.交换数据。一旦连接,MATLAB将通过发布者、订阅者和服务与其他ROS节点交换数据。
3.断开与ROS网络连接。调用rosshutdown函数来断开MATLAB与ROS网络的连接。

2.1 在MATLAB中创建一个ROS Master

在MATLAB中创建ROS master,调用rosinit,不带任何参数。该函数还创建全局节点,MATLAB使用该节点与ROS网络中的其他节点通信。

rosinit
Launching ROS Core...
Done in 0.53007 seconds.
Initializing ROS master on http://172.29.207.162:57063.
Initializing global node /matlab_global_node_94513 with NodeURI http://dcc434238glnxa64:43127/ and MasterURI http://localhost:57063.

MATLAB外部的ROS节点现在可以加入ROS网络。它们可以使用MATLAB主机的主机名或IP地址连接到MATLAB中的ROS master。

您可以通过调用 rosshutdown 来关闭ROS主节点和全局节点。

rosshutdown
Shutting down global node /matlab_global_node_94513 with NodeURI http://dcc434238glnxa64:43127/ and MasterURI http://localhost:57063.
Shutting down ROS master on http://172.29.207.162:57063.

2.2 连接到外部ROS Master

还可以使用rosinit命令连接到外部ROS主机(例如在机器人或虚拟机上运行)。可以通过两种方式指定主服务器的地址:通过IP地址或运行主服务器的计算机的主机名。
在每次调用rosinit之后,必须在使用不同的语法调用rosinit之前调用rosshutdown。为了简单起见,在这些示例中省略了对rosshutdown的这些调用。

'master_host'是一个示例主机名,'192.168.1.1'是外部ROS主机的一个示例IP地址。根据外部主机驻留在网络中的位置调整这些地址。如果在指定的地址没有找到主服务器,这些命令将失败。

rosinit('192.168.1.1')
rosinit('master_host')

两个对rosinit的调用都假定主机在端口11311上接受网络连接,该端口是标准的ROS主端口。如果master运行在不同的端口上,您可以将它指定为第二个参数。连接到主机名为master_host,端口为12000的ROS master,使用以下命令:

rosinit('master_host',12000)

如果你知道主节点的整个统一资源标识符(URI),你可以创建全局节点并使用以下语法连接到主节点:

rosinit('http://192.168.1.1:12000')

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值