PX4源码开发人员文档(一)——软件架构.doc

PX4源码开发人员文档(一)——软件架构.doc

ID:51674035

大小:726.58 KB

页数:5页

时间:2020-03-14

PX4源码开发人员文档(一)——软件架构.doc_第1页
PX4源码开发人员文档(一)——软件架构.doc_第2页
PX4源码开发人员文档(一)——软件架构.doc_第3页
PX4源码开发人员文档(一)——软件架构.doc_第4页
PX4源码开发人员文档(一)——软件架构.doc_第5页
资源描述:

《PX4源码开发人员文档(一)——软件架构.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、软件架构PX4在广播消息网络内,按照一组节点(nodes )的形式进行组织,网络之间使用像如“姿态”和“位置”之类的语义通道来传递系统状态。软件的堆栈结构主要分为四层:·应用程序接口:提供给app开发人员,使开发人员可以使用ROS  或者DroneAPI。这一接口设计尽可能简洁和扁平,并尽量多的隐藏复杂性。· 应用框架:这是一组核心缺省应用程序(节点),运行核心的飞行控制。· 函数库:这一层包括针对机器核心操作的所有系统函数库和功能·操作系统:最后一层,提供硬件驱动、网络通信、UAVCAN和故障

2、安全(failsafe)系统。内部进程通信(InterProcessCommunication,IPC)PX4 平台的封装提供了跨平台的无锁发布 -订阅模式( publish–subscribepattern) 对象请求处理器。取决于平台/操作系统,完成这个的后端可能是uORB,或者Linux上的ROS/DDS(datadeliveryservice)。封装可扩展,也可作为消息系统提供支持,比如ØMQ 。所有这些后端的共同特点是,它们都允许发送数据到一个像如“位置”这样的语义订阅主题(topic

3、),并使多个接收器跨进程的收到这一数据。IPC性能发布(Publication)到订阅(subscription)之间的延迟:·uORB:23us@168 MHz STM32F4· ROS:TBD·ROS2/DDS:185us@1.6 GHz IntelPentium4and2 GB RAMrunningWindowsXP(details)·ZeroMQ:170us@1.6 GHz IntelPentium4and2 GB RAMrunningWindowsXP(details)安全和保护模型飞

4、行核心与主要应用级处理过程隔离,以确保独立于高层级系统状态的机器核心操作,保持稳定。PX4应用程序框架PX4应用程序框架在所有平台上代码兼容,(比如 Pixhawk/NuttX,又比如, SnapDragon/Linux),独立并将中间设备作为传输层。节点句柄(NodeHandle)节点句柄是每一个连接到中间设备的发布器(publisher)或者订阅器(subscriber)的核心数据结构(一个节点可以同时是发布器和订阅器)。一个节点是一个逻辑单元,每一个进程都可以有多于一个的节点(虽然这并不是

5、典型的形式)。1.px4::NodeHandle n();  数据结构对于所有相关的中间设备实现,PX4根据储存在“msg”中的定义文件自动生成据结构。发布(publication)通过使用节点句柄通告(advertise)订阅主题( topic)来创建一个新的发布(publication)。注意这个模板,是订阅主题的数据结构。1.px4::Publisher* rc_channels_pub = n.advertise

6、>()  从这个指向 rc_channels_pub 的句柄的指针,可以用于发布数据1.px4_rc_channels rc_channels_msg;  2.rc_channels_msg.data().timestamp_last_valid= px4::get_time_micros();  3._rc_channels_pub->publish(rc_channels_msg);  订阅(Subscription)通过订阅一个订阅主题创建一个新的发布。注意模板,是订阅主题的数据结构。使用

7、订阅共有三个选择:1.           使用订阅主题的句柄,进行手动复制操作。2.           作为函数的回调(callback),在订阅主题更新时,函数被调用。3.           作为类方法的回调(相当于函数,但是是C++类型的)单纯订阅除非手动调用复制方法,否则数据不会被复制。1.unsigned min_interval =500;  2._sub_rc_chan = _n.subscribe(min_interval);  函数回调每次

8、订阅主题更新,则'rc_channels_callback_function'被调用。[cpp] viewplaincopy1.unsigned min_interval =500;  2._n.subscribe(rc_channels_callback_function, min_interval);  类方法回调相当于前面函数的例子。1._n.subscribe(&SubscriberExample::rc_channel

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。