软件体系结构

这个页面包括了高层软件架构。PX4是由一系列节点组织的,这些节点在一个广播通讯网络中使用语义通道像“姿势”或“位置”去交流系统状态。该软件被分层分为四个主要层次:

  • 应用程序的API:这个接口提供给应用程序开发人员,例如使用 ROSDroneAPI. 此API旨在尽可能的精简、扁平及隐藏其复杂性。
  • 应用程序框架: 这是为操作基础飞行控制的默认程序集(节点)。
  • 库: 这一层包含了所有的系统库和基本交通控制的函数。
  • 操作系统: 最后一层提供硬件驱动程序,网络,UAVCAN和故障安全系统。

PX4 Software Architecture

进程间通信

PX4平台封装提供一个跨平台无锁的 publish–subscribe pattern 对象请求代理. 依据不同的平台/操作系统其后端的实现可能是uORB, 或是Linux上的 ROS / DDS (data delivery service). 封装是可扩展的并且还可以支持如 ØMQ作为通讯系统. 所有这些后端的共同之处在于它们允许将数据发送到一个像“位置”的语义主题和使N个接收器接收这些跨进程数据。

IPC 性能

发布到订阅的延迟:

  • uORB: 23 us @ 168 MHz STM32F4
  • ROS: 待定
  • ROS2 / DDS: 185 us @ 1.6 GHz Intel Pentium 4 and 2 GB 内存 运行 Windows XP (详情)
  • ZeroMQ: 170 us @ 1.6 GHz Intel Pentium 4 and 2 GB 内存 运行 Windows XP (详情)

安全及安保模式

基础飞行被从主应用程序级的进程中隔离的,以确保基础交通操作独立的高级别系统状态的稳定性。

PX4 应用程序框架

 

本节讨论当前的C++ API。对于μORB C API 请参见 Inter Process Communication Developer Guide 文档。

节点句柄

节点句柄是每一个订阅者、发布者连接到中间件的基础数据结构(一个节点可以是发布者订阅者). 一个节点是一个逻辑单元, 一个进程可以有一个以上的节点(尽管这不是典型的案例)。

px4::NodeHandle n();
数据结构

基于存储在`msg`里的定义PX4数据结构的文件,为所有相关的中间件自动生成实现。

发布者

一个新的发布者由通知主题的节点句柄所创建。注意这个模板,这是主题的数据结构。

px4::Publisher<px4::px4_rc_channels> * rc_channels_pub = n.advertise<px4_rc_channels>()

这个rc_channels_pub句柄指针可以用来发布数据:

px4_rc_channels rc_channels_msg;
rc_channels_msg.data().timestamp_last_valid = px4::get_time_micros();
_rc_channels_pub->publish(rc_channels_msg);

订阅者

一个新的订阅者通过订阅主题所创建。注意这个模版,这是个主题的数据结构。有三种情况使用订阅:

  1. 作为一个主题句柄,手动复制操作
  2. 作为一个回调函数,在更新主题时该函数将被调用。
  3. 作为一个回调类方法(等同于回调函数,但是是C++方式)

纯订阅

数据不会被复制,除非手动调用拷贝程序。

unsigned min_interval = 500;
_sub_rc_chan = _n.subscribe<px4_rc_channels>(min_interval);

函数回调

'rc_channels_callback_function'函数将在每次更新该主题时被调用。

unsigned min_interval = 500;
_n.subscribe<px4_rc_channels>(rc_channels_callback_function, min_interval);

类方法回调

等同于函数回调的示例。

_n.subscribe<px4_rc_channels>(&SubscriberExample::rc_channels_callback, this, min_interval);

混合系统

为了解决更高级别的挑战像基于视觉的避障或复杂的控制问题,一个运行嵌入式Linux的同伴计算机是非常有帮助的。

ROS集成

PX4能通过ROS集成两个不同的APIs:或是每个应用程序本身作为一个ROS节点,或是通过mavros在嵌入式自动驾驶仪上专门运行。

DroneAPI

DroneAPI是一个高层次的应用接口-类似于提供远程过程调用(RPC)语言绑定的库。从本质上讲,它是一个告诉无人机去哪或做什么的工具,而不是基础机器人通讯/API的一部分。

参考

下面的同行评议的论文描述了高层架构:

  • Lorenz Meier, Dominik Honegger and Marc Pollefeys. PX4: A Node-Based Multithreaded Open Source Robotics Framework for Deeply Embedded Platforms, ICRA (Int. Conf. on Robotics and Automation) 2015. (to appear)
翻译跟原始页面比较起来显得有些陈旧,所以可能失效。 查看更新
本页面的其他翻译:


Quick Links

QR Code: URL of current page