Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5664878
  • 博文数量: 1320
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 15754
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1320)

文章存档

2020年(104)

2019年(193)

2018年(81)

2017年(80)

2016年(70)

2015年(52)

2014年(41)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: 其他平台

2020-06-15 18:15:25

译自 https://index.ros.org/doc/ros2/

ROS是一个中间件, 用于在不同进程间匿名发布订阅传递消息. ROS2的核心是ROS网络 ROS Graph. ROS网络是指在在不同节点间的相互通讯的连接关系. 

ROS Graph的概念包括
节点 nodes - 通过 ROS client library 和其他节点通讯, 也可发布订阅主题, 提供ROS服务. 各个节点可以在同个进程中, 也可在不同进程中, 也可在不同的机器上, 多个节点通过分布式发现进程 discovery 来建立联系, 并且只会和具有相同兼容性 - 服务质量设置的节点进行通讯.
消息: messages
主题: topics
发现: discovery - 自定运行的进程, 通过此进程节点之间仙湖发现建立连接.

ROS client library: 包括 rclcpp 和 rclpy 也有一些其他社区支持的客户端语言支持程序
发现的过程:
    1. 节点启动, 向相同ROS域名(ROS_DOMAIN_ID环境变量)的节点广播.  其他节点收到广播后返回自身的信息.
    2. 节点会定时广播自身信息, 避免新上线的节点错过最初的发现工程.
    3. 节点下线也会广播

ROS2 DDS的关系.
    ROS2 是建立在DDS基础上的,  DDS程序被用来发现节点,序列化,和传递信息.  例如分布式发现节点, 控制传输中不同的通讯质量.
    DDS 是一个被很多公司实现的工业标准.  例如 RTI的connext 和 ePromima的FastRTPS. ROS2支持很多种DDS的实现方式, 区别在于用户要考虑其法律协议,跨平台, 多种场景对应不同的实现, 以及支持的硬件环境等等.
    ROS2 有一个RMW软件包, 利用DDS程序提供的API和工具来实现ROS中间件接口. 也可以同时使用多个 RMW实现.

客户端程序库 RCL.  RCL底层为C的实现, 以便于多种语言进行包装.
    RCL的核心: 
        命名和命名空间
        时间 (实际时间或模拟时间)
        参数
        终端输出
        线程模型
        跨进程通讯
    
ROS接口 :  消息和服务.
     需要传经 msg / srv 文件.
        .msg 文件
             fieldtype  fieldname  空格隔开.  变量名必须小写开始, 下划线分割, 但不能下划线结束. 也不能有连续的两个下划线.
             例如: int32  my_int
                     int32[]  unbounded_int_array
                     int8[5]  five_int_array
                     uint8[<=5]  up_to_five_int_array
                        string my_str  没有限制的字串
                     string[<=5] up_to_five_unbounded_str
                     string<=10  up_to_ten_char_string
                     string<=10[]  unbounded_array of string up to ten chars each
                     string<=10[<=5] up_to_five_strings  each up_to_ten_chars

                     
             例如  foxy\share\unique_identifier_msgs\msg\UUID.msg的内容为   uint8[16] uuid
            fieldtype 域类型有内部的(内部类型可以使用数组来定义), 也可以自定义(geometry_msgs/PoseStamped). 
    
默认值定义    fieldtype  fieldname  def_val
        uint8    x   42
        string   name   "join"  用单引号也可以.
        int32[]  samples [-100, 50, -0, 50, 100]

常量定义 fieldtype  fieldname=const_val  常量名字必须大写.
        uint8    X=42

服务文件定义
    服务文件包含一个请求和一个回应消息, 之间用 --- 分割.

    例如  foxy\share\std_srvs\srv\SetBool.srv的内容为
    bool data # e.g. for hardware enabling / disabling
    ---
    bool success   # indicate successful run of triggered service
    string message # informational, e.g. for error messages

------------------------------------------------------------------------------------------------------------------
服务质量
    ROS2提供了分股的QoS控制规则. 用以优化微调节点通讯.  在ROS1中仅支持 TCP, 而 ROS2因为DDS传输的灵活配置, 通过核实的QoS配置可以使得ROS2像TCP一样可靠,也可以像UDP一样高效. 对于在一个易丢数据的无线网中, 可以使用一个高效的QoS规则. 对于实时计算的场景中可以使用高可靠的Qos规则.
   
    一组服务质量规则组合在一起产生一个QoS配置文件,  设置合适的QoS配置文件不是容易的事情, ROS2预先提供了一些常用情境下的配置文件.

    QoS配置文件可以应用于发布者/订阅者/服务提供者/客户端. 如果他们之间使用了不同的QoS配置文件, 有可能无法建立连接.

    QoS配置文件包括以下"
        历史:  History
                Keep Last / Keep All
        深度: Depth 
            队列大小.  只有 Keep Last 才有效.
        可靠性 Reliablility
            最高效率: 有可能丢高
            高可靠性
: 保证成功, 有可能发送多次.
        耐久力 Durability
            本地缓存  Trasient local 发送者会为尚未加入的节点保存未接收的数据.
            自动挥发  Volatile  不会特意保存数据
    与ROS1对比, 深度和历史是一样的, ROS1的UDPROS对应高效模式, TCPROS其实也是UDP实现的.

    默认的发布者和订阅者的QoS配置文件为 可靠模式,自动挥发,存储最后.
    服务和参数
:可靠, 耐久力.
    传感器: 高效, 低深度队列.
    























阅读(36) | 评论(0) | 转发(0) |
0

上一篇:ROS2 安装.

下一篇:ROS2 Foxy on WIndows

给主人留下些什么吧!~~