ROS2_Ros介绍以及与Ros1的区别

架构

 开发方式 :
  1.节点的“编写自己的main函数”的风格 显式编写 main 函数创建节点,然后硬编码初始化逻辑
  2.以 Component 形式编写节点。特别是需要动态启停组件、多组件进程共享、生命周期管理时
     组件仅能编译为共享库,因此它没有主函数
     Component 同样继承自 rclcpp::Node。与普通节点使用相同的基类,使得编写 Component 的代码与普通节点完全兼容。
        通过类加载器(Class Loader) 和 组件容器(Component Container),Component 可被动态加载到同一进程
     Component 的本质是一种模块化、可插拔的代码单元,既可独立运行为节点,也可动态加载到容器进程中,
      这使得向现有代码添加常见概念(如生命周期:继承 rclcpp_lifecycle::LifecycleNode)变得更容易
	 ros2 launch 可用于通过专门的启动动作自动化 
     使得一个类成为组件,该类应该使用 rclcpp_components 包中的宏(RCLCPP_COMPONENTS_REGISTER_NODE)在代码中进行自我注册
    《在单个进程中组合多个节点》
  ROS 2 daemon是一个守护进程作用与 master 在 ROS 1 中的作用类似。
    但是,与 ROS 1 不同,它不是必需的,而是一种优化。
   ROS 2 节点可以在没有它的情况下运行,这与 ROS 1 节点在没有主节点的情况下无法运行不同。
     对于想要启动、快速执行某些任务然后关闭的节点来说-- ROS 2 守护进程。
	   在后台有一个长期运行的程序,它保存了ROS网络中的信息。这样就可以更加快速的处理请求和提供快速响应

命令结构

 ros1命令 
    roscore  rosnode
	rosrun   roslaunch
	rostopic  rosmsg  rosparam rosservice rosbag
    启动主节点:roscore
    查看节点状态:rosnode
    运行可执行节点:rosrun
    启用多个节点:roslaunch
    管理话题:rostopic
    管理服务:rosservice
    查看信息类型:rosmsg 
    查看服务的类型:rossrv
    录制/回放话题数据:rosbag

ros2对应

    ros2
	   node
	   run  launch
       topic msg  param service  srv  bag‌

ros2cli 
    component:与组件相关的各种子命令
    daemon   :与守护进程相关的各种子命令
    doctor   :检查ROS设置和其他潜在问题  
	security :与安全相关的各种子命令
	lifecycle:与生命周期相关的各种子命令	
    action:与动作相关的各种子命令
    interface:显示ROS接口信息 
    pkg:与包相关的各种子命令
    multicast:与多播相关的各种子命令 		 

 主题、服务、操作或参数
 包名为turtlesim,可执行文件名为turtlesim_node
   主题 的发布者-订阅者模型
   服务 基于呼叫和响应模型  只是服务类型有两个部分:一个用于请求的消息,另一个用于响应
   参数 是节点的配置值   在运行时更改参数  ROS2参数是由键值对组成的
  
业务原因:
  机器人的控制可以分为两种类型:开环控制和闭环控制
        控制导航程序,控制机械臂运动,控制小乌龟旋转等 
		
   话题 适用于节点间单向的频繁的数据传输,topic 
   服务 则适用于节点间双向的数据传递,service 
   参数 则用于动态调整节点的设置 parameter
ROS2针对控制场景,基于原有的话题和服务,设计了动作(Action)这一通信方式	 
  action 动作是ROS 2中的通信类型之一,用于长时间运行的任务。由三部分组成:目标、反馈和结果
          动作就像服务一样,允许您执行长时间运行的任务,提供定期反馈,并且可以取消 
    Action适用于长时的,需要过程反馈的工作。
 参数是由服务构建出来了,
 而Action是由话题和服务共同构建出来的(一个Action = 三个服务+两个话题)
   三个服务分别是:一个用于请求,一个用于响应,一个用于反馈
     1.目标传递服务 2.结果传递服务 3.取消执行服务 
   两个话题:1.反馈话题(服务发布,客户端订阅) 
             2.状态话题(服务端发布,客户端订阅)		  
    ROS 2 的一个独特通信模式是动作。操作是面向目标的异步通信接口,具有请求、响应、定期反馈和取消功能
 .msg / .srv / .action 文件		  

ROS1 编译开发

  Package.xml文件 :引入了package.xml来描述软件包的依赖关系,简化了包管理。
  CMakeLists.txt :规范了构建脚本的书写方式,提高了可读性和易用性。
  工作空间的概念 :引入了工作空间(Workspace)概念,允许开发者在一个地方编译和管理多个软件包
  catkin_package 
source /opt/ros/melodic/setup.bash
  目录:
     分别是 src 、 devel 、和 build 。
	 
    $ cd ~/catkin_ws #回到工作空间,catkin_make必须在工作空间下执行
    $ catkin_make    #开始编译
    $ source ~/catkin_ws/devel/setup.bash #刷新坏境
       一个 package 下必须包含 CMakeLists.txt 和 package.xml 两个文件
          include 和 src 分别存放头文件(*.h)和源程序文件(*.c/*.cpp等);
           scripts 存放脚本文件(比如Python文件 *.py,shell文件 *.sh);
           launch 存放 launch文件(*.launch),用于批量运行多个可执行文件;
           config 存放配置文件(*.yaml等);
     build:编译空间
         存放CMake和catkin的缓存信息、配置信息和其他中间文件。缓存和中间文件
     devel:开发空间
        存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等
    catkin_make install 把install文件夹分享给其他人就可以

ROS2 编译开发

    src:代码空间
    install:安装空间
    build:编译空间
    log:日志空间

 rosversion -d
     `rosdistro`(ROS Distro)是发行版的简称,它是一系列ROS软件包、库和工具的集合,代表了ROS的一个特定版本
	 ROS_DISTRO
常用工具
rosdeps:检查工程代码的依赖
colcon:编译项目 colcon 是一个构建软件包集合的命令行工具,
    是ros构建工具catkin_make、catkin_make_isolated、catkin_tools 和ament_tools的迭代版本,
 
rqt:以插件的形式实现各种GUI工	  
功能包
     ros2 pkg list   列出所有功能包
     ros2 pkg executables <package_name> 列出所指的功能包里的所有可执行文件
     ros2 pkg xml <package_name>  列出所指的功能包里的清单描述文件manifest.xml文件

 colcon build --packages-up-to example_action_rclcpp
 source install/setup.bash 
 ros2 run example_action_rclcpp  action_robot_01

ROS2 安全

DDS-Security定义了以下五个SPI:
    ● 身份验证(Authentication):对给定域参与者的身份进行验证。
    ● 访问控制(Access control):对经过身份验证的域参与者能够执行的DDS相关操作强制实行各种限制。
    ● 加密(Cryptographic):对所有必需的加密、签名和散列操作进行处理。
    ● 日志记录(Logging):提供审计DDS-Security相关事件的能力。
    ● 数据标记(Data tagging):提供向数据样本添加标记的能力	 
ROS 2的安全功能目前仅使用了前三个SPI 
  身份验证(Authentication)公钥基础设施PKI(Public Key Infrastructure)
  访问控制插件 治理(Governance)文件:一个签名的XML文档   权限(Permissions)文件:一个签名的、包含域参与者各项权限的XML文
  加密(Cryptographic
   enclaves子文件夹内的某个目录中查找安全文件  
      由六个文件建立。其中三个文件定义了 enclave 的身份,而另外三个文件定义了授予 enclave 的权限
         identity_ca.cert.pem    permissions_ca.cert.pem 
        环境变量 “ROS_SECURITY_ENABLE”   充当 enclave 的 ROS 2 安全功能的主“开/关”开关
		环境变量 “ROS_SECURITY_STRATEGY” 定义域参与者
SROS2 是 ROS 2 的安全扩展,基于 DDS(Data Distribution Service)的安全功能,   
    ros-rolling-sros2:SROS2 工具包,用于管理安全配置


生命周期 (Lifecycle, LC) 节点 ros2中加入了一种区别于普通的node节点的管理节点LifecycleNode,这种节点有点像是状态机,会在几种不同的状态中切换。
   LifecycleNode 节点的状态主要分为基本状态(Primary States)和切换状态(Transition States
     节点使用 rclcpp_lifecycle::LifecycleNode 而不是常用的 rclcpp::Node
	ros2 lifecycle nodes - 列出所有 LC 节点

发现机制(Discovery)
     ROS2的节点发现通过底层中间件自动完成,
     相同ROS域名(ROS domain, 可以通过设置ROS_DOMAIN_ID环境变量来设置)
通信接口主题(topics)、服务(services)或动作(actions),使用一种简化的描述语言来描述这些接口,叫做接口定义语言(IDL)		

ROS2底层框架

  ROS 2 Client Library)层  client libraries  
      rclcpp = C++ 客户端程序库         ROS1的UDPROS(只在roscpp里面)
      rclpy = Python 客户端程序库
	ROS2 client Library <rcl :c implementation >ROS客户端程序库(RCL) 
    rcl(Common functionality for other ROS Client Libraries)模块
  rmw(ROS MiddleWare)模块 rmw软件架构主要由两个核心文件夹构成:rmw和rmw_implementation
     rmw (ros middleware interface): 相对底层的接⼝层,直接和DDS交互,C语⾔实现
      它负责接收上层client libraries发出的请求,验证其有效性,并通过RMW层与底层中间件进行交互,最终将响应返回给上层client libraries。	
	  默认的 rmw_fastrtps_cpp
	其中的adapter ,可以通过这一抽象层,用户可以根据实际需求选择不同的DDS实现组件
     插件机制
       ROS 2 使用插件机制(基于 pluginlib)来加载不同的 rmw 实现。用户可以通过配置文件或环境变量(如 RMW_IMPLEMENTATION)选择具体的 DDS 实现。
	   基于eProsima的Fast RTPS库
  DDS(Data Distribution Service,数据分发服务)
     ros_to_dds组件,该组件主要为⽤⼾直接访问DDS层提供接⼝

参考

  https://www.ncnynl.com/ros2docs/cn/humble/Tutorials.html		
  https://fishros.com/d2lros2/#/	
  https://github.com/ros2/ros2cli	
posted @ 2025-06-16 18:04  辰令  阅读(169)  评论(0)    收藏  举报