原创博文:转载请标明出处(周学伟):http://www.cnblogs.com/zxouxuewei/tag/

一.Introduction

ROS网络由单个ROS主机和多个ROS节点组成。 ROS主机通过跟踪所有活动的ROS节点来促进ROS网络中的通信。 每个节点需要向ROS主机注册,以便能够与网络的其他节点进行通信。 MATLAB可以启动ROS主机,或者主机可以在MATLAB外部启动(例如,在不同的计算机上)。 所有ROS节点向主机注册,并声明它们可以到达的网络地址。

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

此示例向您显示如何:
     1.在MATLAB中创建ROS主机。

2.连接到外部ROS主机。

二.Create a ROS Master in MATLAB

要在MATLAB中创建ROS主控,请调用rosinit而不使用任何参数。 这也将创建“全局节点”,MATLAB将使用它来与ROS网络中的其他节点通信。

rosinit

MATLAB外部的ROS节点现在可以加入ROS网络。 他们可以使用MATLAB主机的主机名或IP地址连接到MATLAB中的ROS主机。
     您可以通过调用rosshutdown关闭ROS主节点和全局节点。

rosshutdown

三.Connect to an External ROS Master

您还可以使用rosinit命令连接到外部ROS主机(例如在机器人或虚拟机上运行)。 您可以通过两种方式指定主站的地址:由IP地址或运行主站的计算机的主机名。
每次调用rosinit后,在使用不同语法调用rosinit之前,必须调用rosshutdown。 为简洁起见,在以下部分中将省略对rosshutdown的这些调用。
首先在同网段的Ubuntu主机终端上运行如下:

  1.查看IP地址

ifconfig

  2.启动ros主机

roscore


     在本示例中,使用master_host作为示例主机名,并使用192.168.1.1作为外部ROS主机的IP地址示例。 根据外部主站在网络中的位置来调整这些地址。 请注意,如果在指定的地址中找不到主站,则以下命令将失败。

rosinit('192.168.1.171')
rosinit('zxwbot-ubuntu')

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

rosinit('zxwbot-ubuntu', )
rosinit('http://192.168.1.171:12000')
rosshutdown
rosinit('http://192.168.1.171:11311')

Node Host Specification

在某些情况下,您的计算机可能连接到多个网络,并有多个IP地址。 以下图为例。

左下角的计算机运行MATLAB并连接到两个不同的网络。在一个子网中,其IP地址为73.195.120.50,在另一个子网中,其IP为192.168.1.100。此计算机想要在IP地址为192.168.1.1的TurtleBot计算机上连接到ROS主机。作为向主机注册的一部分,MATLAB全局节点必须指定其他ROS节点可以访问的IP地址或主机名。 TurtleBot上的所有节点将使用此地址在MATLAB中将数据发送到全局节点。

当使用主机的IP地址调用rosinit时,它将尝试检测用于联系主机的网络接口,并将其用作全局节点的IP地址。
如果此自动检测失败,您可以使用rosinit调用中的NodeHost名称 - 值对显式指定IP地址或主机名。所有以前的调用rosinit的方法仍然允许添加NodeHost名称 - 值对。

对于以下命令,假设您要将计算机的IP地址作为192.168.1.100通告给ROS网络。

rosinit('192.168.1.1', 'NodeHost', '192.168.1.100')
rosinit('http://192.168.1.1:11311', 'NodeHost', '192.168.1.100')
rosinit('master_host', 'NodeHost', '192.168.1.100')

一旦节点在ROS网络中注册,您可以使用命令rosnode info NODE查看它通告的地址。 NODE是ROS网络中的节点的名称。 您可以通过调用rosnode列表来查看所有注册节点的名称。

ROS Environment Variables

在高级用例中,您可能需要通过标准ROS环境变量指定ROS主机的地址和您通告的节点地址。 在前面的部分中解释的调用语法应该足以满足大多数用例。
     如果没有为rosinit提供参数,函数也将检查标准ROS环境变量的值。 这些变量是ROS_MASTER_URI,ROS_HOSTNAME和ROS_IP。 您可以使用getenv命令查看其当前值:

getenv('ROS_MASTER_URI')
getenv('ROS_HOSTNAME')
getenv('ROS_IP')

您可以使用setenv命令设置这些变量。 设置环境变量后,调用没有参数的rosinit。 ROS主机的地址由ROS_MASTER_URI指定,全局节点的通告地址由ROS_IP或ROS_HOSTNAME给定。 如果为rosinit指定其他参数,它们将覆盖环境变量中的值。

rosshutdown
setenv('ROS_MASTER_URI','http://192.168.1.1:11311')
setenv('ROS_IP','192.168.1.100')
rosinit

您不必同时设置ROS_HOSTNAME和ROS_IP。 如果两者都设置,ROS_HOSTNAME优先。

Verify Connection

要使ROS连接正常工作,必须确保所有节点都可以与主服务器和彼此进行通信。 各个节点必须与主机通信以注册订阅者,发布者和服务。 它们还必须能够彼此通信以发送和接收数据。
由于通信以这种方式工作,如果ROS网络未正确设置,则可能能够发送数据并且无法接收数据(反之亦然)。
这里是ROS网络中的通信结构的图。 有一个ROS主机和两个不同的节点向主机注册自己。 每个节点将联系主机以找到ROS网络中的另一个节点的通告地址。 一旦每个节点知道另一节点的地址,就可以建立数据交换而不涉及主机。

Connect to a ROS Network---2的更多相关文章

  1. 【记录】vmware fusion 7 windows 10 unidentified network

    今天在 vmware fusion 7 中,使用 windows 10 时,突然报出一个错误(忘记截图了),当时就要求强制重启系统,也没怎么在意,但是重启之后,发现 windows 10 居然不能联网 ...

  2. Docker-2:network containers

    docker run -d -P --name web training/webapp python app.py # -name means give the to-be-run container ...

  3. SNMP: Simple? Network Management Protocol(转)

    转自:http://www.rane.com/note161.html An SNMP Overview The Message Format The Actual Bytes Introductio ...

  4. Network Load Balancing Technical Overview--reference

    http://technet.microsoft.com/en-us/library/bb742455.aspx Abstract Network Load Balancing, a clusteri ...

  5. windows系统下安装和使用ROS的解决方案 (1 win_ros 2 rosserial_windows)

    具体请参考官网: 1  http://wiki.ros.org/win_ros 2  https://github.com/ros-windows/win_ros 3  http://wiki.ros ...

  6. Get started with ros -- 1

    原创博文:转载请标明出处(周学伟):http://www.cnblogs.com/zxouxuewei/tag/ 一.Introduction: 机器人操作系统(ROS)是使机器人系统的不同部分能够发 ...

  7. ROS教程

    Learning ROS 学习ROS Depending on your learning style and preferences, you can take two approaches to ...

  8. Network Function Virtualization for a Network Device

    An apparatus for performing network function virtualization (NFV), comprising: a memory, a processor ...

  9. ros:init()

    ros::init()是ROS程序调用的第一个函数,用于对ROS程序的初始化. ros::init()函数的声明在ROS代码中的./src/ros_comm/roscpp/include/ros/in ...

随机推荐

  1. at91sam9260 笔记1

    http://wenku.baidu.com/link?url=pK0w3c6oYX_phtiYN7PD97TivWFnwnu9yrie5b7HofmDXDVbuRciB35Izx_NGDiYz1U5 ...

  2. LVS的优点和缺点

    LVS的优点是:1.抗负载能力强.是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低.2.配置性比较低,这是一个缺点也是一个 ...

  3. EF code First数据迁移学习笔记

    准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-package EntityFramework  //安装EF环境 2.在项目下新建类(Paper) ...

  4. hbase源码系列(十二)Get、Scan在服务端是如何处理?

    继上一篇讲了Put和Delete之后,这一篇我们讲Get和Scan, 因为我发现这两个操作几乎是一样的过程,就像之前的Put和Delete一样,上一篇我本来只打算写Put的,结果发现Delete也可以 ...

  5. spring boot 使用拦截器 无法注入 配置值 、bean问题

    参考:https://www.cnblogs.com/SimonHu1993/p/8360701.html 一定要将 拦截器组件 交给spring容器进行管理,这样才能注入配置值,或者注入bean: ...

  6. jquery 回车事件实现代码

    // 键盘事件 1.keydown()  keydown事件会在键盘按下时触发. 2.keyup()  keyup事件会在按键释放时触发,也就是你按下键盘起来后的事件 3.keypress()  ke ...

  7. Android圆角图片汇总

    今天来对图片的圆角处理做一个简单小结,很多app里面都有圆角效果,根据不同的场景可以采用不同的方案,目前来说有三种方案是比较常用的 方案一 .9.png 应用场景:1.目标图片已知:2.针对布局背景; ...

  8. (笔记)Linux下的解压、压缩命令集合

    01-.tar格式解包:[*******]$ tar xvf FileName.tar打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩! ...

  9. 性能优化系列四:Tomcat优化

    一.Tomcat工作原理 1. TCP的三次握手四次挥手 三次握手: 说明: 类比于A和B打电话: A对B说:你好,我是A,你能听到我说话吗? B对A说:嗯,我能听到你说话 A对B说:好,那我们开始聊 ...

  10. Spring和mybatis的整合

    一.搭建项目开发环境 1. 新建一个maven项目SpringMybatis,项目结构如下: 说明: src/main/java 存放java代码和映射文件: com.study.springmyba ...