欢迎来到天天文库
浏览记录
ID:51674035
大小:726.58 KB
页数:5页
时间:2020-03-14
《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.advertise6、>() 从这个指向 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
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
此文档下载收益归作者所有