Home » ROS与Matlab入门教程 » ROS与Matlab语言入门教程-开始使用ROS

ROS与Matlab语言入门教程-开始使用ROS

机器人操作系统(Robot Operating System ROS)是一个能够让机器人系统的不同部分发现、传输和接收数据的通信接口。MATLAB®支持ROS是基于一个函数库,该函数库使得你在MATLAB可以和基于ROS的实际机器人或者仿真机器人如Gazebo®进行数据交换。

ROS术语

  • ROS网络有机器人系统的不同部分组成,比如规划器或者摄像头接口,在ROS上进行通信。网络可以分布在多个机器上。
  • ROS主控节点负责协调ROS网络的各个部分。通过主控URI(Uniform Resource Identifier)鉴别主控节点,URI指定了主控节点运行的计算机上的宿主名或者IP地址。
  • ROS节点是包含着与ROS功能有关的集合的实体,比如发布器、订阅器和服务。一个ROS网络可以包含多个ROS节点。
  • 发布器、订阅器和服务是ROS中处理数据的不同实体,它们通过消息交换数据。
  • 发布器将消息传送到指定的话题(比如“里程计”),订阅器通过该话题接收消息。允许多个发布器和订阅器共用一个话题。
    更多信息,查阅ROS官网:Robot Operating System (ROS)和Concepts。

初始化ROS网络

使用指令“rosinit”初始化ROS。默认情况下, “rosinit” 指令在MATLAB中创建一个ROS主控节点并开始了一个“global node”节点,该节点与主控节点相连。“global node”节点能够自动的被其它ROS函数使用。代码运行示例:

rosinit

Initializing ROS master on http://bat5136glnxa64.mathworks.com:11311/.

Initializing global node /matlab_global_node_8332 with NodeURI http://bat5136glnxa64:58596/

使用指令“rosnode list”查看ROS网络中的所有节点,注意,这里只有由“rosinit”创建的一个全局节点。代码运行示例:

rosnode list

/matlab_global_node_8332

使用指令“exampleHelperROSCreateSampleNetwork”给ROS网络添加三个节点以及采样的发布器和订阅器,代码运行示例:

exampleHelperROSCreateSampleNetwork

再次使用“rosnode list”指令,可以观察到新增加了三个节点(node_1,node_2和node_3),代码运行示例:

rosnode list

/matlab_global_node_8332

/node_1

/node_2

/node_3

当前ROS网络的视觉可视化如图2.1所示,接下来探索该例子过程中,可以结构图为参考。当前MATLAB的全局节点(/matlab_global_node)由于没有任何发布器、订阅器或服务,因此处于离线状态。

请输入图片描述

话题
使用“rostopic list”指令查看ROS网络中可获得的话题,可以观察到/pose, /rosout, and /scan三个话题。其中,rosout是默认的记录话题,它在ROS网络中总是存在的。另外两个话题作为采样网络而创建。代码运行示例:

rostopic list

/pose

/rosout

/scan

使用“rostopic info”指令获得指定话题的相关信息,下面的指令显示“/node_1”发布“/pose”话题,而“node_2”订阅该话题。代码运行示例:

rostopic info /pose

Type: geometry_msgs/Twist

Publishers:

* /node_1 (http://bat5136glnxa64:51246/)

Subscribers:

* /node_2 (http://bat5136glnxa64:55141/)

使用“rosnode info”指令获得指令节点的信息,下面的指令显示节点“node_1”发布数据到话题“/pose”和“/rosout”,同时订阅了话题“/scan”的数据。代码运行示例:

rosnode info /node_1

Node: [/node_1]

URI: [http://bat5136glnxa64:51246/]

Publications (2 Active Topics):

* /pose

* /rosout

Subscriptions (1 Active Topics):

* /scan

Services (0 Active):

服务

ROS服务提供了ROS网络中的“程序调用”的机制。服务客户端向服务器发送请求信息,服务器处理请求信息并返回响应信息。(查看Calling and Providing ROS Services)

使用“rosservice list”指令查看ROS网络中所有可用的服务。运行下面的指令显示有两个可用的服务(/add和/reply)。

rosservice list

/add

/reply

使用“rosservice info”指令获取指定服务的信息。

rosservice info /add

Node: /node_3

URI: rosrpc://bat5136glnxa64:47000/

Type: roscpp_tutorials/TwoInts

Args: A B

消息

发布器、订阅器和服务使用ROS消息进行信息交换。每个ROS消息拥有一个相关的消息类型,定义了消息中的数据类型和数据结构。(查看 Working with Basic ROS Messages)

使用“rostopic type”指令查看话题使用的消息类型,下面的指令显示了“/pose”话题使用了消息类型为“geometry_msgs/Twist”。代码运行示例:

rostopic type /pose

geometry_msgs/Twist

使用“rosmsg show”指令查看消息类型的属性,“geometry_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.

double X

double Y

double Z

使用“rosmsg list”指令查看MATLAB中所有可用的消息类型,代码运行示例:

rosmsg list

ackermann_msgs/AckermannDrive

ackermann_msgs/AckermannDriveStamped

actionlib_msgs/GoalID

actionlib_msgs/GoalStatus

actionlib_msgs/GoalStatusArray

adhoc_communication/BroadcastCMgrRobotUpdate

adhoc_communication/BroadcastCMgrRobotUpdateRequest

adhoc_communication/BroadcastCMgrRobotUpdateResponse

adhoc_communication/BroadcastString

adhoc_communication/BroadcastStringRequest

adhoc_communication/BroadcastStringResponse

adhoc_communication/CMgrDimensions

adhoc_communication/CMgrRobotUpdate

adhoc_communication/ChangeMCMembership

adhoc_communication/ChangeMCMembershipRequest

adhoc_communication/ChangeMCMembershipResponse

adhoc_communication/ExpAuction

adhoc_communication/ExpCluster

adhoc_communication/ExpFrontier

adhoc_communication/ExpFrontierElement

adhoc_communication/GetGroupState

adhoc_communication/GetGroupStateRequest

adhoc_communication/GetGroupStateResponse

adhoc_communication/GetNeighbors

adhoc_communication/GetNeighborsRequest

adhoc_communication/GetNeighborsResponse

adhoc_communication/MmControl

adhoc_communication/MmListOfPoints

adhoc_communication/MmMapUpdate

adhoc_communication/MmPoint

...

关闭ROS网络

使用“exampleHelperROSShutDownSampleNetwork”指令从ROS网络中移除采样节点、发布器和订阅器。该指令仅在采样节点已经创建的情况下需要使用。

使用“rosshutdown”指令关闭MATLAB中的ROS网络,该指令关闭了由“rosinit”指令创建的ROS主控节点并删除全局节点。建议你在完成ROS网络相关工作后使用“rosshutdown”指令。运行代码示例:

rosshutdown

Shutting down global node /matlab_global_node_8332 with NodeURI http://bat5136glnxa64:58596/

Shutting down ROS master on http://bat5136glnxa64.mathworks.com:11311/.

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

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


标签: ros与matlab语言入门教程