跳至内容

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 --递归
敲击 ./PX4-Autopilot/Tools/setup/ubuntu.sh
CD PX4-Autopilot/
生产 px4_sitl

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

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

安装 ROS 2

安装 ROS 2 及其依赖项:

  1. 安装 ROS 2.

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

    核心 安装 --用户 -U 经验===3.3.4 pyros-genmsg 设置工具

设置 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_compx4_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"):

  2. 资料来源 local_setup.bash.

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

    ros2 launch px4_ros_com sensor_combined_listener.launch.py

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

收到 数据 传感器 合并
================================
ts: 870938190
gyro_rad[0]: 0.00341645
gyro_rad[1]: 0.00626475
gyro_rad[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 传感器数据(来自 监听器示例源代码):

cpp
...
rmw_qos_profile_t qos_profile = rmw_qos_profile_sensor_data;
汽车 优先权 = rclcpp::服务质量(rclcpp::QoS 初始化(qos_profile.history、 5), qos_profile);

订阅_ =->创建订阅<;px4_msgs::信息传感器组合>;("/fmu/out/sensor_combined";, qos、
...

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

ROS 2 & PX4 框架约定

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

框架PX4ROS
身体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、Gazebo 和 PX4 时间同步

默认情况下,ROS 2 和 PX4 之间的时间同步由 uXRCE-DDS 中间件 和时间同步统计数据可监听桥接主题 /fmu/out/timesync_status.当 uXRCE-DDS 客户端在飞行控制器上运行,而代理程序在配套计算机上运行时,由于时间偏移、时间漂移和通信延迟会被计算出来并自动补偿,因此这是理想的行为。

对于仿真场景Gazebo模拟,PX4 使用仿真场景Gazebo /时钟 作为 时间源 而不是。这个时钟与操作系统时钟总是略微不同步(实时系数永远不会正好为一),甚至可以运行得更快或更慢,这取决于 用户偏好.请注意,这与 模拟同步 Gazebo Classic 采用的程序。

因此,ROS2 用户在以下方面有两种选择 时间源 的节点。

ROS2 节点使用操作系统时钟作为时间源

本页和"...... "中考虑的就是这种情况。 船外控制 这也是 ROS2 节点的标准行为。操作系统时钟充当时间源,因此只有在仿真实时系数非常接近 1 时才能使用。然后,uXRCE-DDS 客户端的时间同步器会将 ROS2 端的操作系统时钟与 PX4 端的 Gazebo 时钟桥接起来。用户无需进一步操作。

ROS2 节点使用 Gazebo 时钟作为时间源

在这种情况下,ROS2 也会使用 Gazebo /时钟 主题作为时间源。如果 Gazebo 仿真运行时的实时因子不同,或者 ROS2 需要与 Gazebo 直接交互,那么这种方法就有意义了。在 ROS2 方面,与 Gazebo 的直接交互是通过 ros_gz_桥 的软件包 ros_gz 仓库通读 repo包装 READMEs,根据 ROS2 和 Gazebo 的版本,找出需要安装的正确版本。

一旦安装了软件包并确定了来源,节点 参数桥 提供桥接功能,可用于创建单向的 /时钟

玫瑰2 运行 ros_gz_桥 参数桥 /clock@rosgraph_msgs/msg/Clock[gz.msgs.Clock

此时,必须指示每个 ROS2 节点使用新桥接的 /时钟 而不是操作系统的时间源,这是通过设置参数 使用模拟时间每种 节点)到 (见 ROS 时钟和时间设计).

ROS2 端所需的修改到此为止。在 PX4 端,只需停止 uXRCE-DDS 时间同步,设置参数 uxrce_dds_synct错误.这样,Gazebo 将成为 ROS2 和 PX4 的主要和唯一时间源。

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++ 库,并导入了 传感器组合 节点订阅的消息:

cpp
#include <rclcpp/rclcpp.hpp>;
#include <px4_msgs/msg/sensor_combined.hpp>;

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

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

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

cpp
公众:
	不含糊 传感器组合监听器() : 节点("sensor_combined_listener";)
	{
		rmw_qos_profile_t qos_profile = rmw_qos_profile_sensor_data;
		汽车 优先权 = rclcpp::服务质量(rclcpp::QoS 初始化(qos_profile.history、 5), qos_profile);
		
		订阅_ =->创建订阅<;px4_msgs::信息传感器组合>;("/fmu/out/sensor_combined";, qos、
		[]( px4_msgs::信息::传感器组合::UniquePtr 信息) {
			标准::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: ";          <<; msg->timestamp    <<; 标准::endl;
			标准::cout <<; "gyro_rad[0]:"; <<; msg->gyro_rad[0]  <<; 标准::endl;
			标准::cout <<; "gyro_rad[1]: "; <<; msg->gyro_rad[1]  <<; 标准::endl;
			标准::cout <<; "gyro_rad[2]: "; <<; msg->gyro_rad[2]  <<; 标准::endl;
			标准::cout <<; "gyro_integral_dt: "; <<; msg->gyro_integral_dt <<; 标准::endl;
			标准::cout <<; "accelerometer_timestamp_relative: "; <<; msg->accelerometer_timestamp_relative <<; 标准::endl;
			标准::cout <<; "accelerometer_m_s2[0]: "; <<; msg->accelerometer_m_s2[0] <<; 标准::endl;
			标准::cout <<; "加速度计_m_s2[1]: "; <<; msg->accelerometer_m_s2[1] <<; 标准::endl;
			标准::cout <<; "accelerometer_m_s2[2]: "; <<; msg->accelerometer_m_s2[2] <<; 标准::endl;
			标准::cout <<; "accelerometer_integral_dt: "; <<; msg->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 专题。

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

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

cpp
int 主要(int 参数, 烧焦 *参数[])
{
	标准::cout <<; "Starting sensor_combined listener node..."; <<; 标准::endl;
	setvbuf(stdout、 NULL,_ionbf,bufsiz);
	rclcpp::启动(argc, argv);
	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 标头。

cpp
#include 时间顺序<chrono>;
#include <rclcpp/rclcpp.hpp>;
#include <px4_msgs/msg/debug_vect.hpp>;

使用 命名空间 标准::计时器;

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

cpp
 DebugVectAdvertiser :  rclcpp::节点
{

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

cpp
公众:
	DebugVectAdvertiser() : 节点("debug_vect_advertiser";) {
		出版商_ =->创建出版商<;px4_msgs::信息::DebugVect>;("fmu/debug_vect/in";, 10);
		汽车 定时器回调 =
		[]()->;空白 {
			汽车 debug_vect = px4_msgs::信息::调试向量();
			debug_vect.timestamp = 标准::计时器::时间点播报<;标准::计时器::微秒>(标准::计时器::稳定时钟::现在()).自时间起().计数();
			标准::string name = "测试";;
			标准::抄袭(名字。兴办(), name.最后(), debug_vect.name.兴办());
			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.timestamp、debug_vect.x、debug_vect.y、debug_vect.z);
->出版商_->;发布(debug_vect);
		};
		定时器 =->;创建隔离墙计时器(500毫秒, timer_callback);
	}

私人
	rclcpp::定时器基数::SharedPtr timer_;
	rclcpp::出版商<;px4_msgs::信息::调试向量>::SharedPtr publisher_;
};

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

cpp
int 主要(int 参数, 烧焦 *参数[])
{
	标准::cout <<; "Starting debug_vect advertiser node..."; <<; 标准::endl;
	setvbuf(stdout、 NULL,_ionbf,bufsiz);
	rclcpp::启动(argc, argv);
	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 启动 -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 可见的主题:

玫瑰2 主题 清单

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

/fmu/in/obstacle_distance
/fmu/in/offboard_control_mode
/fmu/in/board_computer_status
...

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

ros2 主题回声

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

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

玫瑰2 主题 回响 /fmu/out/vehicle_status

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

---
时间戳:1675931593364359
上膛时间: 0
起飞时间: 0
arming_state:1
latest_arming_reason: 0
latest_disarming_reason: 0
nav_state_timestamp:3296000
nav_state_user_intention:4
nav_state:4
故障检测器状态:0
hil_state:0
...
---

ros2 主题 hz

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

ros2 主题 hz /fmu/out/sensor_combined

输出结果如下

平均数 率: 248.187
  分钟 0.000s 最大 0.012s 标准 dev: 0.00147s 窗户 2724
平均数 率: 248.006
  分钟 0.000s 最大 0.012s 标准 dev: 0.00147s 窗户 2972
平均数 率: 247.330
  分钟 0.000s 最大 0.012s 标准 dev: 0.00148s 窗户 3212
平均数 率: 247.497
  分钟 0.000s 最大 0.012s 标准 dev: 0.00149s 窗户 3464
平均数 率: 247.458
  分钟 0.000s 最大 0.012s 标准 dev: 0.00149s 窗户 3712
平均数 率: 247.485
  分钟 0.000s 最大 0.012s 标准 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 库应包含在桌面软件包和基础软件包中。安装方法如图所示:

其他信息