精华内容
下载资源
问答
  • ROS 通信架构(一)

    2019-06-04 19:31:27
    通信架构主要包括数据的处理,过程的运行,消息的传递。 1、Node & Master Node 最小的进程单元——节点; node——可执行文件,负责机器人某个单独的功能,每个node负责某一个单独的功能,采用分布式的方式,...

    通信架构主要包括数据的处理,过程的运行,消息的传递。

    1、Node & Master

    Node

    最小的进程单元——节点; node——可执行文件,负责机器人某个单独的功能,每个node负责某一个单独的功能,采用分布式的方式,模块化分工的思想。

    Master

    通过master管理各个node

    启动master和node

    启动ROS命令

    roscore
    

    同时启动roscout(负责日志输出的一个节点)和parameer server(参数服务器,非node,存储参数配置的服务器)

    启动node:

    rosrun pkg_name node_name
    
    Master、Node以及Node之间的关系

    在这里插入图片描述

    rosrun和rosnode命令

    rosrun命令:

    rosrun [--prefix cmd] [--debug] pkg_name node_name [ARGS]
    

    rosnode 详细命令:

    在这里插入图片描述

    2、launch文件

    机器人是一个系统工程,需要同时开启很多node,ROS提供了一个同时启动master和多个node命令:

    roslaunch pkg_name file_name.launch
    

    首先启动master,在按照launch的规则执行,roslaunch一个启动工具,能够一次性把多个节点按照我们预先配置启动起来。

    launch文件遵循XML格式:

    <launch> <!--根标签-->
    <node> <!--需要启动的node及其参数-->
    <include> <!--包含其他launch-->
    <machine> <!--指定运行的机器-->
    <env-loader> <!--设置环境变量-->
    <param> <!--定义参数到参数服务器-->
    <rosparam> <!--启动yaml文件参数到参数服务器-->
    <arg> <!--定义变量-->
    <remap> <!--设定参数映射-->
    <group> <!--设定命名空间-->
    </launch> <!--根标签-->
    

    理解launch文件,通过更改launch模板满足普通项目需求。

    3、Topic

    ROS的通信方式有四种:

    • Topic主题
    • Service服务
    • Parameter Service 参数服务器
    • Actionlib 动作库

    topic是一种点对点的单项通信方式,node之间通过topic方式传递信息。

    初始化过程:

    在这里插入图片描述

    首先,publisher节点和subscriber节点都要到节点管理器进行注册,然后publisher会发布topicsubscribermaster的指挥下会订阅topic,从而建立起sub-pub之间的通信。

    整个过程是单向的。

    Subscriber接收消息会进行处理——回调(Callback)——提前定义好一个处理函数,当有消息来时就会触发这个处理函数,函数会对消息进行处理。

    topic通信属于一种异步的通信方式。

    通信示例

    摄像头画面的发布、处理、显示

    在这里插入图片描述

    ROS是一种分布式的结构,一个topic可以被多个节点同时发布,也可以同时被多个节点接收。

    分布式系统通信的好处:扩展性好、软件复用率高。

    总结

    1、topic 通信方式是异步的,发送时调用publish()方法,发送完成立即返回,不用等待反馈。

    2、subscriber通过回调函数的方式来处理消息。

    3、topic可以同时有多个subscribers,也可以同时有多个publishers。ROS中这样的例子有:/rosout、/tf等。

    操作命令

    topic几种使用命令:

    在这里插入图片描述

    4、Message

    Message就是topic内容的数据类型,也称之为topic的格式标准

    展开全文
  • ROS通信架构(一) node: 最小的进程单元。一个软件包里有多个可执行文件,一个可执行文件在运行执行之后会变成一个进程,进程在ROS中就叫做node节点。从程序来看,node就是一个可执行文件(C++或Python脚本)被...

    ROS通信架构(一)

    node:

    最小的进程单元。一个软件包里有多个可执行文件,一个可执行文件在运行执行之后会变成一个进程,进程在ROS中就叫做node节点。从程序来看,node就是一个可执行文件(C++或Python脚本)被执行;功能上来说,一个node负责一个独立的功能,很多个node完成机器人的各种操作任务(如一个node控制底盘轮子,一个node驱动摄像头获取图像,一个node驱动激光雷达,一个node传感器信息进行路径规划等)。
    基于模块化分工的思路,ROS不同功能模块之间的通信,就是节点之间的通信。例如小海龟键盘控制运动,可以直接把键盘控制改成其他的控制方式,而小海龟运动程序、机器人仿真程序则不用变化。

    Master

    节点管理器master,负责调配、管理node,在整个网络通信架构里相当于管理中心,管理着各个node。node首先要在master进行注册,master讲node拉入整个ROS程序中,node与node之间的通信首先由master牵线,之后才可以两两点对点通信。

    启动ROS:

    启动master

    roscore
    

    ROS master启动,同时rosout 和 parameter server 启动。rosout是负责日志输出的节点,用于告知用户当前系统状态(包括warning error等),并且将log记录与日志文件中。parameter server是参数服务器(不是node,是储存参数配置的一个服务器)
    在这里插入图片描述
    节点管理器依次启动node
    master启动之后,节点管理器就按照系统安排协调开始启动具体的节点。package中存放着静态的可执行文件,系统执行可执行文件,将文件加载到内存中变成动态的node。

    rosrun package_name node_ame
    

    rosrun和rosnode命令

    rosrun:

    rosrun [--prefix cmd] [--debug] pkg_name node_name [ARGS]
    

    rosrun将会寻找pkg_name下的名为node_name的可执行程序,将可选参数ARGS传入。 例如在GDB下运行ros程序:

    rosrun --prefix 'gdb -ex run --args' pkg_name node_name
    
    rosnode命令 作用
    rosnode list 列出当前运行的node信息
    rosnode info node_name 显示出node的详细信息
    rosnode kill node_name 结束某个node
    rosnode ping 测试连接节点
    rosnode machine 列出在特定机器或列表机器上运行的节点
    rosnode cleanup 清除不可到达节点的注册信息

    launch文件

    机器人是一个系统工程,通常一个机器人运行操作时要开启很多个node,对于一个复杂的机器人的启动操作,并不需要每个节点依次进行rosrun,ROS为我们提供了一个命令能一次性启动master和多个node。该命令是:

     roslaunch pkg_name file_name.launch
    

    roslaunch首先检查roscore是否运行,也即确认节点管理器是否在运行状态中(如果master没有启动,roslaunch先启动master,再按照launch文件内容启动节点)。launch文件配置好了启动规则,roslaunch可以一次性把多个节点按照预先的配置启动起来,无需打开很多个终端一个一个启动node。

    写法:

    launch文件同样也遵循着xml格式规范,是一种标签文本,它的格式包括以下标签:

    <launch>    <!--根标签-->
    <node>    <!--需要启动的node及其参数-->
    <include>    <!--包含其他launch-->
    <machine>    <!--指定运行的机器-->
    <env-loader>    <!--设置环境变量-->
    <param>    <!--定义参数到参数服务器-->
    <rosparam>    <!--启动yaml文件参数到参数服务器-->
    <arg>    <!--定义变量-->
    <remap>    <!--设定参数映射-->
    <group>    <!--设定命名空间-->
    </launch>    <!--根标签-->
    
    

    参考链接:http://wiki.ros.org/roslaunch/XML

    示例:

    官网给出的最简单的例子:

    <launch>
    	<node name="talker" pkg="rospy_tutorials" type="talker" />
    </launch>
    

    启动了一个单独的节点talker,该节点是包rospy_tutorials软件包中的节点。

    <launch>
    	<!--arg是launch标签中的变量声明,arg的name为变量名,default或者value为值-->
    	<arg name="robot" default="xbot2"/>
    	<arg name="debug" default="false"/>
    	<arg name="gui" default=="true"/>
    	<arg name="headless" default="false"/>
    	<!-- Start Gazebo with a blank world -->
    	<include file="$(find gazebo_ros)/launch/empty_world.launch">   <!--include用来嵌套仿真场景的launch文件-->
    		<arg name="world_name" value="$(find test)/worlds/myworld.world"/>
    		<arg name="debug" value="$(arg debug)"/>
    		<arg name="gui" value="$(arg gui)">
    		<arg name="paused" value="false"/>
    		<arg name="use_sim_time" value="true"/>
    		<arg name="headless" value="$(arg headless)"/>
    	</include>
    	<!-- Oh, you wanted a robot? --> <!--嵌套了机器人的launch文件-->
    	<include file="$(find test)/launch/include/$(arg robot).launch.xml"/>
    	<!--若启动RViz这个node-->
    	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find test)/urdf_gazebo.rviz"/>
    </launch>
    

    启动gazebo模拟器,导入参数内容,加入机器人模型。

    展开全文
  • EMC2是开源的数控机床控制系统软件。EMC2能移植到实时操作系统(例如ubuntu等)并根 据开发者定制完成复杂的机床和机器人实时控制。...对整个软件的架构通信机制,各模块的功能以及大致的工作流程进行深入分析。
  • ROS 机器人操作系统

    2016-07-18 16:39:38
    ROS(机器人操作系统,Robot Operating System),是专为机器人软件开发所设计出来的一套电脑操作系统架构。它是一个开源的元级操作系统(后操作系统),提供类似于...ROS的运行架构是一种使用ROS通信模块实现模块间P
    ROS(机器人操作系统,Robot Operating System),是专为机器人软件开发所设计出来的一套电脑操作系统架构。它是一个开源的元级操作系统(后操作系统),提供类似于操作系统的服务,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理,它也提供一些工具和库用于获取、建立、编写和执行多机融合的程序。

    ROS的运行架构是一种使用ROS通信模块实现模块间P2P的松耦合的网络连接的处理架构,它执行若干种类型的通讯,包括基于服务的同步RPC(远程过程调用)通讯、基于Topic的异步数据流通讯,还有参数服务器上的数据存储。

    发展目标

    ROS的首要设计目标是在机器人研发领域提高代码复用率。ROS是一种分布式处理框架(又名Nodes)。这使可执行文件能被单独设计,并且在运行时松散耦合。这些过程可以封装到数据包(Packages)和堆栈(Stacks)中,以便于共享和分发。ROS还支持代码库的联合系统。使得协作亦能被分发。这种从文件系统级别到社区一级的设计让独立地决定发展和实施工作成为可能。上述所有功能都能由ROS的基础工具实现。

    为了实现“共享与协作”这一首要目标,人们制订了ROS架构中的其他支援性目标:

    “轻便”:ROS是设计得尽可能方便简易。您不必替换主框架与系统,因为ROS编写的代码可以用于其他机器人软件框架中。毫无疑问的,ROS更易于集成与其他机器人软件框架。事实上ROS已完成与OpenRAVE、Orocos和Player的整合。

    ROS-agnostic库:【agnostic:不可知论】建议的开发模型是使用clear的函数接口书写ROS-agnostic库。

    语言独立性:ROS框架很容易在任何编程语言中执行。我们已经能在Python和C++中顺利运行,同时添加有Lisp、Octave和Java语言库。

    测试简单:ROS有一个内建的单元/组合集测试框架,称为“rostest”。这使得集成调试和分解调试很容易。

    扩展性:ROS适合于大型实时系统与大型的系统开发项目。

    ROS的概念

    ROS有三个层次的概念:分别为Filesystem level,Computation graph level, 以及Communication level。 以下内容具体的总结了这些层次及概念。除了这三个层次的概念, ROS也定义了两种名称-- Package资源名称和Graph资源名称。同样会在以下内容中提及。

    ROS 的 Filesystem Level 

    文件系统层概念就是你在碟片里面遇到的资源,例如:

    Packages:ROS的基本组织,可以包含任意格式文件。一个Package 可以包含ROS执行时处理的文件(nodes),一个ROS的依赖库,一个数据集合,配置文件或一些有用的文件在一起。

    Manifests:Manifests (manifest.xml) 提供关于Package元数据,包括它的许可信息和Package之间依赖关系,以及语言特性信息像编译旗帜(编译优化参数)。

    Stacks: Stacks 是Packages的集合,它提供一个完整的功能,像“navigation stack” Stack与版本号关联,同时也是如何发行ROS软件方式的关键。

    Manifest Stack Manifests: Stack manifests (stack.xml) 提供关于Stack元数据,包括它的许可信息和Stack之间依赖关系。

    Message (msg) types: 信息描述, 位置在路径:my_package/msg/MyMessageType.msg, 定义数据类型在ROS的 messages ROS里面。

    Service (srv) types: 服务描述,位置在路径:my_package/srv/MyServiceType.srv, 定义这个请求和相应的数据结构 在ROS services 里面。

    ROS 的 Computation Graph Level

    Computation Graph Level(计算图)就是用ROS的P2P(peer-to-peer网络传输协议)网络集中处理所有的数据。基本的Computation Graph的概念包括Node, Master, Parameter Sever,messages, services, topics, 和bags, 以上所有的这些都以不同的方式给Graph传输数据。

    Nodes: Nodes(节点)是一系列运行中的程序。ROS被设计成在一定颗粒度下的模块化系统。一个机器人控制系统通常包含许多Nodes。比如一个Node控制激光雷达,一个Node控制车轮马达,一个Node处理定位,一个Node执行路径规划,另外一个提供图形化界面等等。一个ROS节点是由Libraries ROS client library写成的, 例如 roscpp 和 rospy.

    Master: ROS Master 提供了登记列表和对其他计算图的查找。没有Master,节点将无法找到其他节点,交换消息或调用服务。

    Server Parameter Server: 参数服务器使数据按照钥匙的方式存储。目前,参数服务器是主持的组成部分。

    Messages:节点之间通过messages来传递消息。一个message是一个简单的数据结构,包含一些归类定义的区。支持标准的原始数据类型(整数、浮点数、布尔数,等)和原始数组类型。message可以包含任意的嵌套结构和数组(很类似于C语言的结构structs)

    Topics: Messages以一种发布/订阅的方式传递。一个node可以在一个给定的topic中发布消息。Topic是一个name被用于描述消息内容。一个node针对某个topic关注与订阅特定类型的数据。可能同时有多个node发布或者订阅同一个topic的消息;也可能有一个topic同时发布或订阅多个topic。总体上,发布者和订阅者不了解彼此的存在。主要的概念在于将信息的发布者和需求者解耦、分离。逻辑上,topic可以看作是一个严格规范化的消息bus。每个bus有一个名字,每个node都可以连接到bus发送和接受符合标准类型的消息。

    Services:发布/订阅模型是很灵活的通讯模式,但是多对多,单向传输对于分布式系统中经常需要的“请求/回应”式的交互来说并不合适。因此,“请求/回应” 是通过services来实现的。这种通讯的定义是一种成对的消息:一个用于请求,一个用于回应。假设一个节点提供了一个服务提供下一个name和客户使用服务发送请求消息并等待答复。ROS的客户库通常以一种远程调用的方式提供这样的交互。

    Bags: Bags是一种格式,用于存储和播放ROS消息。对于储存数据来说Bags是一种很重要的机制。例如传感器数据很难收集但却是开发与测试中必须的。

    在ROS的计算图中,ROS的Master以一个name service的方式工作。它给ROS的节点存储了topics和service的注册信息。Nodes 与Master通信从而报告它们的注册信息。当这些节点与master通信的时候,它们可以接收关于其他以注册节点的信息并且建立与其它以注册节点之间的联系。当这些注册信息改变时Master也会回馈这些节点,同时允许节点动态创建与新节点之间的连接。

    节点之间的连接是直接的; Master仅仅提供了查询信息,就像一个DNS服务器。节点订阅一个topic将会要求建立一个与发布该topics的节点的连接,并且将会在同意连接协议的基础上建立该连接。ROS里面使用最广的连接协议是TCPROS,这个协议使用标准的TCP/IP 接口。

    这样的架构允许脱钩工作(decoupled operation),通过这种方式大型或是更为复杂的系统得以建立,其中names方式是一种行之有效的手段。names方式在ROS系统中扮演极为重要的角色: topics, services, and parameters 都有各自的names。每一个ROS客户端库都支持重命名,这等同于,每一个编译成功的程序能够以另一种形似【名字】运行。

    例如,为了控制一个北阳激光测距仪(Hokuyo laser range-finder),我们可以启动这个hokuyo_node 驱动,这个驱动可以给与激光仪进行对话并且在"扫描"topic下可以发布sensor_msgs/LaserScan 的信息。为了处理数据,我们也许会写一个使用laser_filters的node来订阅"扫描"topic的信息。订阅之后,我们的过滤器将会自动开始接收激光仪的信息。 注意两边是如何脱钩工作的。 所有的hokuyo_node的节点都会完成发布"扫描",不需要知道是否有节点被订阅了。所有的过滤器都会完成"扫描"的订阅,不论知道还是不知道是否有节点在发布"扫描"。 在不引发任何错误的情况下,这两个nodes可以任何的顺序启动,终止,或者重启。

    以后我们也许会给我们的机器人加入另外一个激光器,这会导致我们重新设置我们的系统。我们所需要做的就是重新映射已经使用过的names。当我们开始我们的第一个hokuyo_node时,我们可以说它用base_scan代替了映射扫描,并且和我们的过滤器节点做相同的事。现在,这些节点将会用base_scan的topic来通信从而代替,并且将不再监听"扫描"topic的信息。然后我们就可以为我们的新激光测距仪启动另外一个hokuyo_node。


    参考文献

    http://www.ros.org/wiki/ros
    http://bbs.axnzero.com/index.php
    http://blog.sina.com.cn/digital2image2processing
    展开全文
  • MC2 是开源的数控机床控制系统软件 。 EMC2 能移植到实时操作系统 (例如 ubuntu 等 )并根 据开发者定制完成复杂的机床和机器人实时控制... 对整个软件的架构 , 通信机制 , 各模块的功能以及大致的工作流程进行深入分析
  • 基于系统的硬件架构,建立了绘图机器人的几何坐标系,通过对电机力矩及转速分析确立了绘图机器人的运动方程。所要绘制的目标图形经二值化、边缘细化、连续曲线检测等系列处理后转换为适合机器人执行的矢量图,下载至...
  • YARP机器人操作系统

    2019-10-10 17:31:27
    YARP开源自主无人操作系统是指“Yet another robot platform”, YARP的目标是通过促进代码重用、模块化和最大化研究级别的开发和协作,将用于基础架构级软件开发的工作最小化。类人机器人是一个前沿的研究领域,在...

    YARP开源自主无人操作系统是指“Yet another robot platform”, YARP的目标是通过促进代码重用、模块化和最大化研究级别的开发和协作,将用于基础架构级软件开发的工作最小化。类人机器人是一个前沿的研究领域,在传感器、执行器和处理器方面不断变化。因此,代码重用和维护是一个重大挑战,YARP是这些问题的解决方案。简而言之,YARP的主要特性包括支持进程间通信、图像处理以及一个类层次结构,以简化跨不同硬件平台的代码重用。目前YARP实现了在Windows、Linux和QNX6上的使用和测试。

    展开全文
  • ROS机器人操作系统介绍

    千次阅读 2013-06-12 17:15:12
    摘自维基百科 ROS(机器人操作系统,Robot Operating System),是专为机器人软件开发所设计出来的一套电脑操作系统架构。它是一个开源的元级操作系统(后操作系统),提供类似...ROS的运行架构是一种使用ROS通信模块
  • ROS的运行架构是一种使用ROS通信模块实现模块间P2P的松耦合的网络连接的处理架构,它执行若干种类型的通讯,包括基于服务的同步RPC(远程过程调用)通讯、基于Topic的异步数据流通讯,还有参数服务器上的数据存储。...
  • 模仿人脸表情的高逼真机器人程序功能模块: OpenCV人脸识别 基于多级回归树的人脸关键点回归 基于SVM的人脸训练集表情分类识别 3D GUI显示 蓝牙通信用于连接硬件 模仿人脸表情的高逼真机器人视频演示: 模仿人脸表情的...
  • 语音机器人架构: STM32系统板<--UART-->庆科MiCOKit STM32系统板<--SPI-->LD3320语音模块 STM32系统板<--SPI-->SD卡 STM32系统板<--并口通信-->NOKIA5110液晶(这只是我调试用一下,所以...
  • 让自己能够称为一名出色的架构师,或者成为一名出色的管理者。我对自己也抱有更大的期望了。我相信自己通过这次比赛,能够更加成熟,同时也对RT-Thread这个RTOS有了更深的理解。现在是一个AI * IOT的时代。我们一个...
  • 对于需要多传感器应用的场合,比如移动机器人的障碍物检测、超声波定位,多传感器的并行工作室一个比较麻烦的问题,在URM04采用了RS485串行通信总线的架构以后,不但可以使得32路URM04同时在线,并且不会增加用户的...
  • URM04采用了RS485串行通信总线的架构,支持多传感器的并行工作,有着两个RS-485接口,最多支持32个超声波的并联, 内置温度传感器辅助校正距离值,同时支持温度的测量 应用场合:移动机器人,停车场,安全检测,...
  • 爬虫的基础知识 概念:网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网...http超文本传输协议,是基于C/S架构进行通信的协议,运行在在...
  • 在协调控制模块中,机器人相互通信以协调其虚拟位置和虚拟速度,从而可以在有限的时间间隔内达到虚拟速度共识和由势函数确定的准确虚拟形状。 在跟踪控制模块中,实施了有限时间跟踪控制算法,以便机器人的实际速度...
  • ROS相关学习

    2020-03-10 15:19:39
    ROS并不是机器人唯一的架构方式,在实际工程问题中ROS并不能完全满足需求,但对于注重机器人知识体系的某部分的个人来说,比如专注于slam,路径规划等某方面,使用ROS相当于在一个相对稳定的架构中开发自己的模块。...
  • 分布式架构,将机器人的功能和软件做成一个个节点,然后每个节点通过 topic 进行沟通,这些节点可以部署在同一台机器上,也可以部署在不同机器上,还可以部署在互联网上。 核心概念 节点和用于节点间通信的话题与...
  • ROS札记

    2019-09-04 08:46:08
    1、制造机器人需要机械结构,电子电路,驱动程序,通信架构,组装,调试,上层算法。Ros就类似windows操作系统,在Linux上开发。鼠标键盘等对应摄像头,底盘等。它让我们更快地开发机器人。rose kinetic跟Ubuntu16. ...
  • 机器人操作系统(ROS)入门 ROS简介 什么是ROS ROS为Robot Operating ...ROS的运行架构是一种使用ROS通信模块实现模块间P2P的松耦合的网络连接的处理架构,它执行若干种类型的通讯,包括基于服务的同步RPC通讯、基于Topi
  • ROS操作系统

    千次阅读 2017-07-23 11:35:21
    ROS(机器人操作系统,Robot Operating System),是专为机器人软件开发所设计出来的一套电脑操作系统架构。它是一个开源的元级操作系统(后操作系统),提供类似于...ROS的运行架构是一种使用ROS通信模块实现模块间P
  • 在Ubuntu14.04中安装ROS Indigo

    千次阅读 2017-08-25 21:39:26
    ROS是一个面向机器人的开源元操作系统。...ROS的运行架构是一种使用ROS通信模块实现模块间P2P的松耦合的网络连接的处理架构,它执行若干种类型的通讯,包括基于服务的同步RPC(远程过程调用)通讯、基于Topic
  • 因本人项目需要搭建一套机器人控制仿真系统,控制器采用NI 的CompactRIO9035,电机驱动器使用的是elmo驱动器,对于驱动器可以支持多种总线通信方式,一般采用CAN和EtherCAT总线,如果采用CAN总线,则需要为控制买个...
  • 然后,对车路数据通信模块进行设计,包括通信方案选型和数据交互协议设计,在 Linux 下基于 TCP 协议和 ROS 机器人操作系统完成车载端程序开发,并在室内外进行功能测试。基于车路协同系统的车辆轨迹规划存在通信...
  • 股票AI机器人顾问平台 (投资资产AI组合和回测平台) 问题定义 随着非劳动收入的重要性逐渐增加,年轻人中的投资资产正在增加。 但是,由于缺乏金融知识和心理因素,买卖的时机被认为减少了。 解决方案 量化投资提供...
  • HC-SR04超声波模块常用于机器人避障、物体测距、液位检测、公共安防、停车场检测等场所。HC-SR04超声波模块主要是由两个通用的压电陶瓷超声传感器,并加外围信号处理电路构成的。 3. 小车套件 小车基础平台采购慧净...

空空如也

空空如也

1 2
收藏数 40
精华内容 16
关键字:

机器人模块通信架构