当前位置: 首页 > wzjs >正文

深圳罗湖疫情最新消息seo服务商

深圳罗湖疫情最新消息,seo服务商,国内优秀网站网址,餐饮网站建设前言 本章是详细介绍ROS2通信中间件中rmw模块软件框架。 不了解背景的同学请先看: ROS2软件架构全面解析-学习如何设计通信中间件框架: link rmw框架 rmw是为兼容各种DDS组件而设计的中间件抽象层:the middleware abstraction layer called rmw (ROS…

前言

本章是详细介绍ROS2通信中间件中rmw模块软件框架。
不了解背景的同学请先看:

  • ROS2软件架构全面解析-学习如何设计通信中间件框架: link

rmw框架

  • rmw是为兼容各种DDS组件而设计的中间件抽象层:the middleware abstraction layer called rmw (ROS MiddleWare)
  • 用户可以根据性能、软件许可或支持的平台等各种约束条件,选择不同的RMW 实现,也就是基于DDS协议的组件
  • 提供丰富的自由度让用户选择DDS协议实现组件,只要实现了rmw Layer规定的接口就可以装载到ROS2系统中完成消息传递

rmw软件架构

  • rmw Layer本人划分是主要两个文件夹:rmw、rmw_implementation
    在这里插入图片描述
  • rmw Layer主要的内容是规定DDS组件的功能接口:rmw.h、init.h 头文件,本身逻辑功能不多。rmw_validate_node_name实现在rmw Layer validate_node_name.c文件中,对node name 有效性进行验证,算逻辑代码多的文件了。
  • rmw_implementation模块中有一个动态函数调用框架,能够把DDS实现组件的函数接口直接提供给rcl Layer调用,能够让rcl Layer调用到DDS组件中。
//function.cpp
RMW_INTERFACE_FN(rmw_send_response,rmw_ret_t, RMW_RET_ERROR,3, ARG_TYPES(const rmw_service_t *, rmw_request_id_t *, void *))
  • rmw_send_response就是在rcl Layer service.c文件中调用的,rmw implementation通过RMW_INTERFACE_FN进行封装动态调用到选择的DDS组件。主要功能是在RMW_INTERFACE_FN Macro中。
#define CALL_SYMBOL(symbol_name, ReturnType, error_value, ArgTypes, arg_values) \if (!symbol_ ## symbol_name) { \/* only necessary for functions called before rmw_init */ \symbol_ ## symbol_name = get_symbol(#symbol_name); \} \if (!symbol_ ## symbol_name) { \/* error message set by get_symbol() */ \return error_value; \} \typedef ReturnType (* FunctionSignature)(ArgTypes); \FunctionSignature func = reinterpret_cast<FunctionSignature>(symbol_ ## symbol_name); \return func(arg_values);// cppcheck-suppress preprocessorErrorDirective
#define RMW_INTERFACE_FN(name, ReturnType, error_value, _NR, ...) \void * symbol_ ## name = nullptr; \ReturnType name(EXPAND(ARGS_ ## _NR(__VA_ARGS__))) \{ \CALL_SYMBOL( \name, ReturnType, error_value, ARG_TYPES(__VA_ARGS__), \EXPAND(ARG_VALUES_ ## _NR(__VA_ARGS__))); \}
  • RMW_INTERFACE_FN Macro用于定义一个函数,CALL_SYMBOL Macro调用负责动态加载调用传入名字的函数体
  • 比如rmw implementation设置的cyclonedds就会调入到如下代码实现
// rmw_node.cpp    rmw_cyclonedds_cpp文件夹目录
extern "C" rmw_ret_t rmw_send_response(const rmw_service_t * service,rmw_request_id_t * request_header, void * ros_response){}

rmw集成方式

  • rmw模组通过CMake会编译为rmw库,然后再rcl CMakeList中引入编译,使用的时候直接引入头文件就可以使用接口函数
// rmw CMakeLists.txt
cmake_minimum_required(VERSION 3.5)project(rmw)# Default to C99
if(NOT CMAKE_C_STANDARD)set(CMAKE_C_STANDARD 99)
endif()//rcl CMakeLists.txt
# specific order: dependents before dependencies
ament_target_dependencies(${PROJECT_NAME}"rcl_interfaces""rcl_logging_interface""rcl_yaml_param_parser""rcutils""rmw""rmw_implementation"${RCL_LOGGING_IMPL}"rosidl_runtime_c""tracetools"
)
  • rmw implementation package.xml支持集成rmw_connextdds、rmw_cyclonedds、rmw_fastrtps几种DDS实现,具体使用是通过RMW_IMPLEMENTATION系统属性设置的。

DDS组件

  • 目前提供三种DDS实现:connextdds、cyclonedds、fastrtps。
  • 还有一个dds_common作为一个共有的DDS模块,提供功能支持对其他差异化DDS。
http://www.dtcms.com/wzjs/372150.html

相关文章:

  • 大货车找事做下载怎么网站全能优化大师
  • 软件测试流程武汉seo哪家好
  • c2c电商网站有哪些网络推广的工作好做吗
  • 天津学网站建设品牌营销策划公司排名
  • 深圳网站开发专业团队html模板网站
  • 网站建设行业发展趋势快速提高排名
  • 网站上登录系统制作哈尔滨网络优化公司有哪些
  • 网站建设品牌好大一html网页制作作业
  • 西安网站制作排名公众号推广费用一般多少
  • 潍坊建设网站公司电话网络营销手段有哪些方式
  • wordpress views插件长沙seo排名收费
  • 网站建设教程特别棒湖南岚鸿权 威网站测速工具
  • 谢岗仿做网站百度账号登录不了
  • 大气个人网站源码数据分析师
  • 哪里有网站建设官网百度贴吧广告投放价格
  • 南昌有哪些企业网站宝安网站建设
  • 网站建设成功案例怎么写百度做广告费用
  • 手机网站模板 phpseo查询官方网站
  • 西安网站建设官网网站收录查询工具
  • 微信辅助网站制作网络营销策略实施的步骤
  • 防水网站怎么做厦门网
  • 动漫做h免费网站广州百度搜索排名优化
  • 35互联做的网站惠州企业网站seo
  • 北京专业网站制作介绍今日热点新闻事件及评论
  • 泰安泰斗网络科技有限公司谷歌seo公司
  • 网站制作最seo长尾快速排名
  • 乐山网站制作公司成都网站seo推广
  • 北京形势紧张温州企业网站排名优化
  • 自己创建网站的注意事项手机网站模板
  • 做网站公司牛鼻子seo专业课程