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 通信中间件。
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 及其依赖项:
安装 ROS 2.
还必须安装一些 Python 依赖项(使用
核心
或适切
):吁核心 安装 --用户 -U 经验===3.3.4 pyros-genmsg 设置工具
设置 Micro XRCE-DDS 代理和客户端
为了让 ROS 2 与 PX4 通信、 uXRCE-DDS 客户端 必须在 PX4 上运行,并连接到配套计算机上运行的微型 XRCE-DDS 代理。
设置代理
该代理可安装在配套计算机的 途径.下面我们将展示如何从源代码中构建独立代理,并连接到在 PX4 模拟器上运行的客户端。
设置并启动代理:
打开终端。
输入以下命令,从源代码中获取并构建代理:
吁Git 复制 https://github.com/eProsima/Micro-XRCE-DDS-Agent.git CD Micro-XRCE-DDS-Agent mkdir 构建 CD 构建 cmake .. 生产 苏都 生产 安装 苏都 ldconfig /usr/local/lib/
启动代理,设置连接到模拟器上运行的 uXRCE-DDS 客户端:
吁MicroXRCEAgent udp4 -p 8888
代理已开始运行,但在启动 PX4(下一步)之前不会有太大变化。
信息
您可以让代理在此终端中运行!请注意,每个连接通道只允许使用一个代理。
启动客户端
PX4 模拟器会自动启动 uXRCE-DDS 客户端,连接到本地主机的 UDP 端口 8888。
启动模拟器(和客户端):
在 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 的主题。
构建工作空间
创建和构建工作区:
打开一个新终端。
创建并导航到一个新的工作区目录:
吁mkdir -p ~/ws_sensor_combined/src/ CD ~/ws_sensor_combined/src/
信息
工作区文件夹的命名规范可以简化工作区的管理。
克隆示例资源库并 px4_msgs 到
/src
目录(该主要
分支是默认克隆的,与我们运行的 PX4 版本一致):吁Git 复制 https://github.com/PX4/px4_msgs.git Git 复制 https://github.com/PX4/px4_ros_com.git
将 ROS 2 开发环境的源代码导入当前终端,并使用以下命令编译工作区
胶管
:这将生成
/src
使用源工具链。
运行示例
要运行刚刚构建的可执行文件,需要将源代码 local_setup.bash
.这样就可以访问当前工作区的环境钩子。换句话说,它可以在当前终端中使用刚刚创建的可执行文件。
信息
ROS2 入门教程 建议您 新建终端 用于运行可执行文件。
新航站楼
导航到工作区目录的顶层,并获取 ROS 2 环境的源代码(本例中为 "Humble"):
资料来源
local_setup.bash
.吁消息来源 install/local_setup.bash
现在启动示例。注意这里我们使用
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 传感器数据(来自 监听器示例源代码):
...
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 使用的本地/世界和主体框架是不同的。
框架 | 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、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++ 库,并导入了 传感器组合
节点订阅的消息:
#include <rclcpp/rclcpp.hpp>;
#include <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.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 专题。
私人
rclcpp::订阅<;px4_msgs::信息::传感器组合>::SharedPtr subscription_;
};
的实例化 传感器组合监听器
类作为 ROS 节点是在 主要
功能。
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 标头。
#include 时间顺序<chrono>;
#include <rclcpp/rclcpp.hpp>;
#include <px4_msgs/msg/debug_vect.hpp>;
使用 命名空间 标准::计时器;
然后,代码会创建一个 DebugVectAdvertiser
类的子类。 rclcpp::Node
基类。
类 DebugVectAdvertiser : 公 rclcpp::节点
{
下面的代码为何时发送信息创建了一个函数。信息根据定时回调发送,该回调根据定时器每秒发送两条信息。
公众:
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 节点是在 主要
功能。
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 库应包含在桌面软件包和基础软件包中。安装方法如图所示:
其他信息
- PX4 中的 ROS 2:向 XRCE-DDS 无缝过渡的技术细节 - 巴勃罗-加里多 & 努诺-马克斯(youtube)
- DDS 和 ROS 中间件实施