# ROS 2 用户指南

ROS 2-PX4 架构提供了 ROS 2 和 PX4 之间的深度集成,允许 ROS 2 订阅者或发布者节点与 PX4 uORB 主题直接对接。

本主题概述了体系结构和应用管道,并介绍了如何设置和使用带有 PX4 的 ROS 2。

备注

从 PX4 v1.14 开始,ROS 2 使用 uXRCE-DDS 中间件,取代 FastRTPS 中间件(1.13 版不支持 uXRCE-DDS)。

迁移指南 解释了将 ROS 2 应用程序从 PX4 v1.13 移植到 PX4 v1.14 所需的步骤。

如果您仍在使用 PX4 v1.13,请按照以下说明进行操作 PX4 v1.13 文档 (打开新窗口).

# 概述

ROS 2 的应用管道非常简单,这要归功于使用了 uXRCE-DDS 通信中间件。

采用 ROS 2 的 uXRCE-DDS 架构

uXRCE-DDS 中间件包括在 PX4 上运行的客户端和在配套计算机上运行的代理,两者之间通过串行、UDP、TCP 或自定义链路进行双向数据交换。代理作为客户端的代理,负责发布和订阅全球 DDS 数据空间中的主题。

PX4 uxrce_dds_client 在构建时生成,并默认包含在 PX4 固件中。它包括通用微型 XRCE-DDS 客户端代码和 PX4 专用翻译代码,用于发布到 uORB 主题或从 uORB 主题发布。生成到客户端的 uORB 消息子集列于 PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml (打开新窗口).生成器使用源代码树中的 uORB 报文定义: PX4-Autopilot/msg (打开新窗口) 来创建发送 ROS 2 消息的代码。

ROS 2 应用程序需要在具有 一样 用于在 PX4 固件中创建 uXRCE-DDS 客户端模块的消息定义。您可以通过克隆接口包来包含这些定义 PX4/px4_msgs (打开新窗口) 到您的 ROS 2 工作区中(版本库中的分支与不同 PX4 版本的信息相对应)。

请注意,微型 XRCE-DDS 代理人 本身不依赖客户端代码。它可以从 消息来源 (打开新窗口) 它可以独立运行,也可以作为 ROS 构建的一部分,或者作为快照安装。

请注意,uXRCE-DDS 客户端默认内置在固件中,但除模拟器构建外不会自动启动。

备注

在 PX4v1.13 和更早的版本中,ROS 2 取决于以下定义 px4_ros_com (打开新窗口).该 repo 已不再需要,但包含有用的示例。

# 安装和设置

支持 PX4 开发的 ROS 2 平台是 Ubuntu 22.04 上的 ROS 2 "Humble"和 Ubuntu 20.04 上的 ROS 2 "Foxy"。

推荐使用 ROS 2 "Humble",因为它是当前的 ROS 2 LTS 发行版。ROS 2 "Foxy"已于 2023 年 5 月到期,但仍然稳定,可与 PX4 一起使用。

备注

PX4 在 Ubuntu 22.04 上的测试情况不如在 Ubuntu 20.04 上那么好(在撰写本文时)。 经典仿真场景Gazebo.

设置 ROS 2 以与 PX4 配合使用:

自动安装的其他架构依赖项,如 快速 DDS不包括在内。

# 安装 PX4

您需要安装 PX4 开发工具链才能使用模拟器。

备注

ROS 2 对 PX4 的唯一依赖是一组信息定义,它从 px4_msgs (打开新窗口).只有在需要模拟器(如本指南中的情况)或创建可发布自定义 uORB 主题的构建时,才需要安装 PX4。

按常规方法在 Ubuntu 上建立 PX4 开发环境:

CD
Git 克隆 https://github.com/PX4/PX4-Autopilot.git --recursive
敲击 ./PX4-Autopilot/Tools/setup/ubuntu.sh
CD PX4-Autopilot/
生产 px4_sitl

请注意,上述命令将为您的 Ubuntu 版本安装推荐的模拟器。如果您想安装 PX4 但保留现有的模拟器安装,请运行 ubuntu.sh 上面有 --无模拟工具 旗子

有关更多信息和故障排除,请参阅: Ubuntu 开发环境下载 PX4 信号源.

# 安装 ROS 2

安装 ROS 2 及其依赖项:

  1. 安装 ROS 2.

    • 还必须安装一些 Python 依赖项(使用 核心适切):

      核心 安装 --user -U empy pyros-genmsg setuptools
      

    # 设置 Micro XRCE-DDS 代理和客户端

    为了让 ROS 2 与 PX4 通信、 uXRCE-DDS 客户端 必须在 PX4 上运行,并连接到配套计算机上运行的微型 XRCE-DDS 代理。

    # 设置代理

    该代理可安装在配套计算机的 途径.下面我们将展示如何从源代码中构建独立代理,并连接到在 PX4 模拟器上运行的客户端。

    设置并启动代理:

    1. 打开终端。

    2. 输入以下命令,从源代码中获取并构建代理:

      Git 克隆 https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
      CD Micro-XRCE-DDS-Agent
      mkdir 构建
      CD 构建 cmake ..
      生产
      苏都 生产 安装
      苏都 ldconfig /usr/local/lib/
      
    3. 启动代理,设置连接到模拟器上运行的 uXRCE-DDS 客户端:

      MicroXRCEAgent udp4 -p 8888
      

    代理已开始运行,但在启动 PX4(下一步)之前不会有太大变化。

    备注

    您可以让代理在此终端中运行!请注意,每个连接通道只允许使用一个代理。

    # 启动客户端

    PX4 模拟器会自动启动 uXRCE-DDS 客户端,连接到本地主机的 UDP 端口 8888。

    启动模拟器(和客户端):

    1. PX4 自动驾驶仪 的 repo。

      代理和客户端现在正在运行,应该可以连接。

      PX4 终端显示 NuttShell/PX4 系统控制台 PX4 启动和运行时的输出。一旦代理连接,输出应包括 信息 显示创建数据写入器的信息:

      ...INFO [uxrce_dds_client]已与时间偏移 1675929429203524us 同步 INFO [uxrce_dds_client]成功创建了 rt/fmu/out/failsafe_flags 数据写入器,主题 id:83 INFO [uxrce_dds_client]成功创建 rt/fmu/out/sensor_combined 数据写入器,主题 id:168 INFO [uxrce_dds_client]成功创建 rt/fmu/out/timesync_status 数据写入器,主题 id:188 ...
      

      微型 XRCE-DDS 代理终端也应开始显示输出,因为在 DDS 网络中创建了等效主题:

      ...[1675929445.268957] info | ProxyClient.cpp | create_publisher | 已创建发布者 | client_key: 0x00000001, publisher_id:0x0DA(3), participant_id:0x001(1) [1675929445.269521] info | ProxyClient.cpp | create_datawriter | 创建数据写入器 | client_key: 0x00000001, datawriter_id:0x0DA(5), publisher_id:0x0DA(3) [1675929445.270412] info | ProxyClient.cpp | create_topic | topic created | client_key: 0x00000001, topic_id:0x0DF(2), participant_id:0x001(1) ...
      

      # 构建 ROS 2 工作区

      本节介绍如何在主目录下创建 ROS 2 工作区(根据需要修改命令,将源代码放在其他地方)。

      px4_ros_com (打开新窗口)px4_msgs (打开新窗口) 软件包克隆到工作区文件夹中,然后将 胶管 工具来构建工作区。运行示例时使用 ros2 启动.

      备注

      该示例构建了 ROS 2 监听器 示例应用程序,位于 px4_ros_com (打开新窗口). px4_msgs (打开新窗口) 这样,示例才能解释 PX4 ROS 2 的主题。

      # 构建工作空间

      创建和构建工作区:

      1. 打开一个新终端。

      2. 创建并导航到一个新的工作区目录:

        mkdir -p ~/ws_sensor_combined/src/
        CD ~/ws_sensor_combined/src/
        

        备注

        工作区文件夹的命名规范可以简化工作区的管理。

      3. 克隆示例资源库并 px4_msgs (打开新窗口)/src 目录(该 主要 分支是默认克隆的,与我们运行的 PX4 版本一致):

        Git 克隆 https://github.com/PX4/px4_msgs.git
        Git 克隆 https://github.com/PX4/px4_ros_com.git
        
      4. 将 ROS 2 开发环境的源代码导入当前终端,并使用以下命令编译工作区 胶管:

          这将生成 /src 使用源工具链。

        # 运行示例

        要运行刚刚构建的可执行文件,需要将源代码 local_setup.bash.这样就可以访问当前工作区的环境钩子。换句话说,它可以在当前终端中使用刚刚创建的可执行文件。

        备注

        ROS2 入门教程 (打开新窗口) 建议您 新建终端 用于运行可执行文件。

        新航站楼

        1. 导航到工作区目录的顶层,并获取 ROS 2 环境的源代码(本例中为 "Humble"):

          • 资料来源 local_setup.bash.

            消息来源 install/local_setup.bash
            
          • 现在启动示例。注意这里我们使用 ros2 启动具体说明如下。

            ros2 launch px4_ros_com sensor_combined_listener.launch.py
            

          如果运行正常,您就可以在启动 ROS 监听器的终端/控制台上看到数据被打印出来:

          传感器接收到的综合数据
          ================================
          ts: 870938190
          陀螺仪[0]: 0.00341645
          陀螺仪[1]: 0.00626475
          陀螺仪[2]: -0.000515705 gyro_integral_dt: 4739
          相对加速度计时间戳: 0
          加速度计_m_s2[0]: -0.273381 加速度计_m_s2[1]: 0.0949186
          加速度计_m_s2[2]: -9.76044 加速度计积分 dt: 4739
          

          # 控制载具

          控制应用程序,ROS 2 应用程序:

          • 订阅(收听)PX4 发布的遥测主题
          • 发布到导致 PX4 执行某些操作的主题。

          您可以使用的主题在 dds_topics.yaml (打开新窗口)您可以在 uORB 信息参考.例如 载具全球位置 可用于获取载具的全局位置,而 载具指令 可用于指挥起飞和着陆等操作。

          ROS 2 应用实例 下面的示例提供了如何使用这些主题的具体例子。

          # 兼容性问题

          本节包含的信息可能会影响您编写 ROS 代码的方式。

          # ROS 2 用户服务质量设置

          订阅 PX4 发布的主题的 ROS 2 代码 必须 指定适当(兼容)的 QoS 设置,以便监听主题。具体来说,节点应使用 ROS 2 预定义的 QoS 传感器数据(来自 监听器示例源代码):

          ...
          rmw_qos_profile_t qos_profile = rmw_qos_profile_sensor_data;
          汽车 优先权 = rclcpp::服务质量(rclcpp::QoS 初始化(qos_profile.历史, 5), qos_profile);
          
          订阅_ = ->;创建订阅<;px4_msgs::信息::传感器组合>;("/fmu/out/sensor_combined";, 优先权,
          ...
          

          之所以需要这样做,是因为 ROS 2 默认 服务质量 (QoS) 设置 (打开新窗口) 与 PX4 使用的设置不同。并不是所有的发布者-订阅者组合都能在 PX4 中使用。 可进行 Qos 设置 (打开新窗口),结果发现 ROS 2 的订阅默认设置并非如此!请注意,ROS 代码在发布时不必设置 QoS 设置(在这种情况下,PX4 设置与 ROS 默认设置兼容)。

          # ROS 2 & PX4 框架约定

          ROS 和 PX4 使用的本地/世界和主体框架是不同的。

          框架 PX4 ROS
          身体 FRD (X Forward,Y R右,Z D拥有) FLU (X Forward,Y Lft,Z Up)
          世界 FRD 或 NED(X North, Y East,Z D拥有) FLU 或 ENU(X EY North, Z Up)

          TIP

          参见 REP105:移动平台的坐标框架 (打开新窗口) 了解有关 ROS 框架的更多信息。

          下图显示了这两个框架(左侧为 FRD,右侧为 FLU)。

          参考框架

          通过 FRD(NED)公约的日期是 一应俱全 除非在相关的报文定义中明确指定,否则 PX4 主题无法与 ROS 2 接口。因此,希望与 PX4 接口的 ROS 2 节点必须遵守帧约定。

          • 要将一个向量从 ENU 旋转到 NED,必须进行两个基本旋转:

            • 先绕 Z-轴(向上)、
            • 然后围绕 X-轴(旧东/新北)。
          • 要将一个向量从 NED 旋转到 ENU,必须进行两个基本旋转:

            • 先绕 Z-轴(向下)、
            • 然后围绕 X-轴(旧北/新东)。请注意,这两种操作在数学上是等价的。
          • 要将矢量从 FLU 旋转到 FRD,需要绕着 X-轴(前)即可。

          • 要将一个矢量从 FRD 旋转到 FLU,需要绕着 X-轴(前)即可。

          需要旋转的矢量举例如下:

          与矢量类似,代表载具(车身框架)相对于世界框架的姿态的量词也需要进行转换。

          PX4/px4_ros_com (打开新窗口) 提供共享库 帧变换 (打开新窗口) 以轻松进行此类转换。

          # ROS 2 应用实例

          # ROS 2 监听器

          ROS 2 听众示例 (打开新窗口)px4_ros_com (打开新窗口) repo 演示了如何编写 ROS 节点来监听 PX4 发布的主题。

          在此,我们考虑 sensor_combined_listener.cpp (打开新窗口) 节点下 px4_ros_com/src/examples/listeners,它订阅了 传感器组合 留言

          备注

          构建 ROS 2 工作区 演示了如何构建和运行这个示例。

          代码首先导入了与 ROS 2 中间件连接所需的 C++ 库,并导入了 传感器组合 节点订阅的消息:

          #包括 <rclcpp/rclcpp.hpp>;
          #包括 <px4_msgs/msg/sensor_combined.hpp>;
          

          然后创建一个 传感器组合监听器 类的子类。 rclcpp::Node 基类。

          /** * @brief 传感器组合 uORB 主题数据回调 */
           传感器组合监听器 :  rclcpp::节点
          {
          

          会创建一个回调函数,当 传感器组合 接收 uORB 信息(现在是微型 XRCE-DDS 信息),并在每次接收信息时输出信息字段的内容。

          :
          	不含糊 传感器组合监听器() : 节点("sensor_combined_listener";)
          	{
          		rmw_qos_profile_t qos_profile = rmw_qos_profile_sensor_data;
          		汽车 优先权 = rclcpp::服务质量(rclcpp::QoS 初始化(qos_profile.历史, 5), qos_profile);
          		
          		订阅_ = ->;创建订阅<;px4_msgs::信息::传感器组合>;("/fmu/out/sensor_combined";, 优先权,
          		[]( px4_msgs::信息::传感器组合::UniquePtr msg) {
          			标准::cout <<; "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
          			标准::cout <<; "接收到的传感器综合数据";   <<; 标准::endl;
          			标准::cout <<; "============================="   <<; 标准::endl;
          			标准::cout <<; ts: ";          <<; 信息->;时戳    <<; 标准::endl;
          			标准::cout <<; "gyro_rad[0]:"; <<; 信息->;陀螺仪[0]  <<; 标准::endl;
          			标准::cout <<; "gyro_rad[1]: "; <<; 信息->;陀螺仪[1]  <<; 标准::endl;
          			标准::cout <<; "gyro_rad[2]: "; <<; 信息->;陀螺仪[2]  <<; 标准::endl;
          			标准::cout <<; "gyro_integral_dt: "; <<; 信息->;陀螺积分 <<; 标准::endl;
          			标准::cout <<; "accelerometer_timestamp_relative: "; <<; 信息->;相对加速度计时间戳 <<; 标准::endl;
          			标准::cout <<; "accelerometer_m_s2[0]: "; <<; 信息->;加速度计_m_s2[0] <<; 标准::endl;
          			标准::cout <<; "加速度计_m_s2[1]: "; <<; 信息->;加速度计_m_s2[1] <<; 标准::endl;
          			标准::cout <<; "accelerometer_m_s2[2]: "; <<; 信息->;加速度计_m_s2[2] <<; 标准::endl;
          			标准::cout <<; "accelerometer_integral_dt: "; <<; 信息->;加速度计积分 <<; 标准::endl;
          		});
          	}
          

          备注

          订阅根据以下条件设置 QoS 配置文件 rmw_qos_profile_sensor_data.之所以需要这样做,是因为用户的默认 ROS 2 QoS 配置文件与发布商的 PX4 配置文件不兼容。更多信息请参阅 ROS 2 用户服务质量设置,

          下面几行为 传感器组合 uORB 主题,它可以与一个或多个兼容的 ROS 2 订阅者相匹配。 FMU/SENSOR_COMBED/UT ROS 2 专题。

          私人:
          	rclcpp::订阅<;px4_msgs::信息::传感器组合>;::SharedPtr subscription_;
          };
          

          的实例化 传感器组合监听器 类作为 ROS 节点是在 主要 功能。

          int 主要(int 参数, 烧焦 *参数[])
          {
          	标准::cout <<; "Starting sensor_combined listener node..."; <<; 标准::endl;
          	setvbuf(数据输出, NULL, _IONBF, BUFSIZ);
          	rclcpp::启动(参数, 参数);
          	rclcpp::后旋(标准::共享<;传感器组合监听器>;());
          
          	rclcpp::关闭();
          	返回 0;
          }
          

          该示例的相关启动文件位于 launch/sensor_combined_listener.launch.py (打开新窗口).这样就可以使用 ros2 启动 指挥。

          # ROS 2 广告商

          ROS 2 广告节点向 DDS/RTPS 网络(也就是 PX4 自动驾驶仪)发布数据。

          例如 debug_vect_advertiser.cpp 根据 px4_ros_com/src/advertisers首先,我们导入所需的头文件,包括 debug_vect msg 标头。

          #包括 时间顺序<chrono>;
          #包括 <rclcpp/rclcpp.hpp>;
          #包括 <px4_msgs/msg/debug_vect.hpp>;
          
          使用 命名空间 标准::计时器;
          

          然后,代码会创建一个 DebugVectAdvertiser 类的子类。 rclcpp::Node 基类。

           DebugVectAdvertiser :  rclcpp::节点
          {
          

          下面的代码为何时发送信息创建了一个函数。信息根据定时回调发送,该回调根据定时器每秒发送两条信息。

          :
          	DebugVectAdvertiser() : 节点("debug_vect_advertiser";) {
          		出版商_ = ->;创建出版商<;px4_msgs::信息::调试向量>;("fmu/debug_vect/in";, 10);
          		汽车 定时器回调 =
          		[]()->;空白 {
          			汽车 debug_vect = px4_msgs::信息::调试向量();
          			debug_vect.时戳 = 标准::计时器::时间点播报<;标准::计时器::微秒>;(标准::计时器::稳定时钟::现在()).自时间起().计数();
          			标准::字符串名称 = "测试";;
          			标准::抄袭(名字.兴办(), 名字.最后(), debug_vect.名字.兴办());
          			debug_vect.x = 1.0;
          			debug_vect.y = 2.0;
          			debug_vect.z = 3.0;
          			RCLCPP_INFO(->;get_logger(), "\033[97m Publishing debug_vect: time: %llu x: %f y: %f z: %f \033[0m";,
                                          debug_vect.时戳, debug_vect.x, debug_vect.y, debug_vect.z);
          			->;出版商_->;发布(debug_vect);
          		};
          		定时器 = ->;创建隔离墙计时器(500毫秒, 定时器回调);
          	}
          
          私人:
          	rclcpp::定时器基数::SharedPtr timer_;
          	rclcpp::出版商<;px4_msgs::信息::调试向量>;::SharedPtr publisher_;
          };
          

          的实例化 DebugVectAdvertiser 类作为 ROS 节点是在 主要 功能。

          int 主要(int 参数, 烧焦 *参数[])
          {
          	标准::cout <<; "Starting debug_vect advertiser node..."; <<; 标准::endl;
          	setvbuf(数据输出, NULL, _IONBF, BUFSIZ);
          	rclcpp::启动(参数, 参数);
          	rclcpp::后旋(标准::共享<;DebugVectAdvertiser>;());
          
          	rclcpp::关闭();
          	返回 0;
          }
          

          # 机外控制

          有关如何在 PX4 上使用板外控制的完整参考示例,请参阅: ROS 2 机外控制示例.

          # 使用飞行控制器硬件

          在飞行控制器上使用 PX4 运行 ROS 2 与在模拟器上使用 PX4 几乎是一样的。唯一不同的是,您需要同时启动代理 和客户,并根据通信信道进行适当设置。

          更多信息,请参见 启动 uXRCE-DDS.

          # 自定义 uORB 主题

          ROS 2 需要具备 一样 信息定义用于在 PX4 固件中创建 uXRCE-DDS 客户端模块,以便解释信息。这些定义存储在 ROS 2 接口包中 PX4/px4_msgs (打开新窗口) 并通过 CI 在 主要 和发布分支。请注意,PX4 源代码中的所有信息都存在于版本库中,但只有在 dds_topics.yaml 将作为 ROS 2 的主题提供。因此

          • 如果您使用的是 PX4 主版本或发布版本,可以通过克隆接口软件包来获取报文定义 PX4/px4_msgs (打开新窗口) 进入你的工作空间。

          • 如果要创建或修改 uORB 信息,必须从 PX4 源代码树中手动更新工作区中的信息。一般来说,这意味着你要更新 dds_topics.yaml (打开新窗口),克隆接口包,然后通过将新的/修改过的报文定义从 PX4-Autopilot/msg (打开新窗口) 到其 信息 文件夹假设 PX4-Autopilot 位于您的主目录中 ~px4_msgs~/px4_ros_com/src/那么命令可能是

            rm ~/px4_ros_com/src/px4_msgs/msg/*.msg
            cp ~/PX4-Autopilot/mgs/*.msg ~/px4_ros_com/src/px4_msgs/msg/
            

            备注

            从技术上讲 dds_topics.yaml (打开新窗口) 完全定义了 PX4 uORB 主题和 ROS 2 信息之间的关系。更多信息请参见 uXRCE-DDS > DDS 主题 YAML.

          # 自定义主题名称空间

          自定义主题名称空间可在构建时应用(更改 dds_topics.yaml (打开新窗口))或运行时(对多车运行有用):

          • 一种可能性是使用 -n 选项时启动 uxrce_dds_client 命令行。这种技术既可用于模拟,也可用于实际载具。
          • 通过设置环境变量 px4_uxrce_dds_ns 然后再开始模拟。

          备注

          在运行时更改命名空间会将所需的命名空间作为前缀附加到所有 主题 中的字段 dds_topics.yaml (打开新窗口).因此,类似这样的命令

          uxrce_dds_client start -n uav_1
          

          px4_uxrce_dds_ns=uav_1 生产 PX4_SITL GZ_X500
          

          将在命名空间下生成主题:

          /uav_1/fmu/in/  # 为订阅者
          /uav_1/fmu/out/ # 为出版商
          

          # ros2 CLI

          ros2 CLI (打开新窗口) 是使用 ROS 的有用工具。例如,您可以用它来快速检查主题是否正在发布,如果有的话,还可以详细检查它们。 px4_msg 工作区中的该命令还能让你通过启动文件启动更复杂的 ROS 系统。下面演示了几种可能性。

          # ros2 主题列表

          使用 ros2 主题列表 列出 ROS 2 可见的主题:

          ros2 主题列表
          

          如果 PX4 已连接到代理,结果将是主题类型列表:

          /fmu/in/obstacle_distance /fmu/in/offboard_control_mode /fmu/in/onboard_computer_status ...
          

          请注意,工作区不需要使用 px4_msgs 主题类型信息是报文有效载荷的一部分。

          # ros2 主题回声

          使用 ros2 主题回声 以显示特定主题的细节。

          ros2 主题列表要使其正常工作,您必须在工作区中构建了 px4_msgs 和来源 local_setup.bash 以便 ROS 可以解读这些信息。

          ros2主题 回响 /fmu/out/vehicle_status
          

          该命令将在主题更新时回传主题详细信息。

          --- timestamp:1675931593364359 armed_time: 0 takeoff_time: 0 arming_state:1 latest_arming_reason: 0 latest_disarming_reason: 0 nav_state_timestamp:3296000 nav_state_user_intention:4 nav_state:4 failure_detector_status:0 hil_state:0 ...---
          

          # ros2 主题 hz

          您可以使用 ros2 主题 hz.例如,要获取 传感器组合:

          ros2 主题 hz /fmu/out/sensor_combined
          

          输出结果如下

          平均率: 248.187
            分钟 0最多 0.000 秒: 0.012s std dev: 0.00147 秒窗口: 2724
          平均率: 248.006
            分钟 0最多 0.000 秒: 0.012s std dev: 0.00147 秒窗口: 2972
          平均率: 247.330
            分钟 0最多 0.000 秒: 0.012s std dev: 0.00148s 窗口: 3212
          平均率: 247.497
            分钟 0最多 0.000 秒: 0.012s std dev: 0.00149 秒窗口: 3464
          平均率: 247.458
            分钟 0最多 0.000 秒: 0.012s std dev: 0.00149 秒窗口: 3712
          平均率: 247.485
            分钟 0最多 0.000 秒: 0.012s std dev: 0.00148s 窗口: 3960
          

          # ros2 启动

          ros2 启动 命令用于启动 ROS 2 启动文件。例如,上面我们使用 ros2 launch px4_ros_com sensor_combined_listener.launch.py 来启动监听器示例。

          你不需要启动文件,但如果你有一个复杂的 ROS 2 系统,需要启动多个组件,启动文件就非常有用了。

          有关启动文件的信息,请参阅 ROS 2 教程 > 创建启动文件 (打开新窗口)

          # 故障排除

          # 缺失的依赖项

          标准安装应包括 ROS 2 所需的所有工具。

          如果有遗漏,可单独添加:

          • 胶管 构建工具应位于开发工具中。可以通过以下方式安装

            苏都 适切 安装 python3-colcon-common-extensions
            
          • 转换库使用的 Eigen3 库应包含在桌面软件包和基础软件包中。安装方法如图所示:

            # 其他信息