• ROS-消息系统与ROS消息


    消息系统和流系统

    直接调用通常是用于诸如远程过程调用的技术
    消息系统有很多,包括 
      Apache的 ActiveMQ RabbitMQ 
      Apache的 Kafka  pulsar
      Redis
    

    场景:

     异步通信 解耦  冗余  缓冲  顺序保证
     扩展性  可恢复性  过载保护
    

    协议:

     Advanced Message Queuing Protocol
        AMQP 一个提供统一消息服务的应用层标准高级消息队列协议,
    	      是应用层协议的一个开放标准,为面向消息的中间件设计
    	基于此协议的客户端与消息中间件可传递消息,
    	    并不受客户端/中间件不同产品,不同的开发语言等条件的限制
    MQTT协议
         MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议
    STOMP(Streaming Text Orientated Message Protocol)是流文本定向消息协议,
       是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议。
    XMPP(可扩展消息处理现场协议,Extensible Messaging and Presence Protocol)是基于可扩展标记语言(XML)的协议,
       多用于即时消息(IM)以及在线现场探测
    其他基于TCP/IP自定义的协议
       有些特殊框架(如:redis、kafka、zeroMq等)根据自身需要未严格遵循MQ规范,
       而是基于TCPIP自行封装了一套协议,通过网络socket接口进行传输,实现了MQ的功能
    

    开发:

    RabbitMQ 服务器是用Erlang语言编写的
    ActiveMQ 是一个纯Java程序	
    充分定义网络协议和消息代理服务的功能语义
    

    消息交换的体系结构:

     存储转发	    多个消息发送者, 单个消息接收者
     分布式事务	    多个消息发送者, 多个消息接收者
     发布订阅	    多个消息发送者, 多个消息接收者
     基于内容的路由 多个消息发送者, 多个消息接收者
     文件传输队列	多个消息发送者, 多个消息接收者
     点对点连接		单个消息发送者, 单个消息接收者
    

    创建和发布自定义的Message

    01.进入自己的workspace-

    cd ~/myros 
    

    02. 创建一个包, 取名为 commonMsgs,用来发布编码器数据信息

    catkin_create_pkg commonMsgs roscpp rospy std_msgs
    

    03.创建msg文件

    文件夹
       文件 --》 文件后缀msg  文件格式
    

    04.编辑配置文件

    001.package.xml中添加编译依赖与执行依赖
     说明:
    	common_msgs: 
    	 |actionlib_msgs | diagnostic_msgs 
         | geometry_msgs 
         | sensor_msgs 
         | nav_msgs | shape_msgs | stereo_msgs | trajectory_msgs | visualization_msgs
    	laser_pipeline: 
    	  |laser_assembler | laser_filters | laser_geometry
    	image_pipeline: 
    	  |camera_calibration | depth_image_proc | image_proc | image_publisher 
    	  | image_rotate | image_view | stereo_image_proc		
     示例:	
       <buildtool_depend>catkin</buildtool_depend>
       <build_depend>roscpp</build_depend>
       <build_depend>rospy</build_depend>
       <build_depend>std_msgs</build_depend>
       <build_export_depend>roscpp</build_export_depend>
       <build_export_depend>rospy</build_export_depend>
       <build_export_depend>std_msgs</build_export_depend>
       
       <build_export_depend>message_generation</build_export_depend>
       
       <build_depend>geometry_msgs</build_depend>
       <build_depend>sensor_msgs</build_depend>
      
       <exec_depend>roscpp</exec_depend>
       <exec_depend>rospy</exec_depend>
       <exec_depend>std_msgs</exec_depend>
       
       <exec_depend>message_exectime</exec_depend>
       <exec_depend>geometry_msgs</exec_depend>
       <exec_depend>sensor_msgs</exec_depend>
    
    002.CMakeLists.txt编辑 msg 相关配置
      用find_packag中加入 message_generation 的依赖
        需要加入 message_generation,必须有 std_msgs
        示例	
        project(commonMsgs)
        find_package(catkin REQUIRED COMPONENTS
          roscpp
          rospy
          std_msgs
          message_generation
          geometry_msgs
          sensor_msgs
        )	
        
        
        ## Generate messages in the 'msg' folder
        add_message_files(
        FILES   ControlCommand.msg
                CAN_SpecialInfo.msg
                CAN_WheelSpeedInfo.msg
        )
        #planning
         add_message_files(
           DIRECTORY planning
           FILES Chassis.msg
                 FusionObject.msg
                 FusionObjectsArray.msg
                 RampInfo.msg
         )
    # 生成消息时依赖于 std_msgs
       generate_messages(
         DEPENDENCIES
         std_msgs
       )
    #执行时依赖
      catkin_package(
        CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
      )
    

    05.编译生成可以被Python或者C++调用的中间文件

    cd ~/myros/commonMsgs
    catkin_make
    

    06.中间文件查看:

    C++ 需要调用的中间文件
      (.../工作空间/devel/include/包名/xxx.h)
    Python 需要调用的中间文件
      (.../工作空间/devel/lib/python3/dist-packages/包名/msg)
  • 相关阅读:
    C++中 extern "C" 的两种用法
    第5章类和对象(一)
    第4章 函数和作用域
    第5章类和对象(一)
    第5章类和对象(一)续
    C++中 extern "C" 的两种用法
    extern用法详解(转)
    第4章 函数和作用域
    IOS开发中一些尺寸问题
    键盘处理IOS
  • 原文地址:https://www.cnblogs.com/ytwang/p/15029621.html
Copyright © 2020-2023  润新知