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)