登录
加入联盟
找回密码
航空人生
新一代连飞客户端下载
空管人生
中国航空运动协会推荐
WEFLY
模拟飞行玩家聊天工具
门户
文章
商城
二手市场
外包服务
模飞软件
硬件设备
飞行体验
学院
云课堂
问答
资料下载
论坛
模拟飞行
低空飞行
太空探索
航圈
资源
素材
下载
企业
无人机论坛
»
论坛
›
无人机DIY专区
›
飞控开发区
›
Pixhawk飞控
›
PX4飞控 -任务调度
返回列表
发新帖
查看:
1336
|
回复:
0
PX4飞控 -任务调度
[复制链接]
nanshi00
nanshi00
当前离线
积分
1565
窥视卡
雷达卡
48
主题
787
帖子
1565
积分
金牌飞友
金牌飞友, 积分 1565, 距离下一级还需 1435 积分
金牌飞友, 积分 1565, 距离下一级还需 1435 积分
积分
1565
飞币
775
注册时间
2017-8-28
发消息
发表于 2022-11-15 18:12:01
|
显示全部楼层
|
阅读模式
PX4所有的功能都封装在独立的模块中,uORB是任务间数据交互和同步的工具,而管理和调度每个任务,PX4也提供了一套很好的机制,这一篇我们分享PX4的任务调度机制。
我们以PX4 1.11.3版本为例
PX4的任务调度方式有两种:
任务 (Tasks): 模块在它自己的任务中运行, 具有自己的堆栈和进程优先级(这是更常见的方法)。
工作队列 (Work queues):模块在共享任务上运行, 这意味着它没有自己的堆栈。多个任务在同一堆栈上运行, 每个工作队列只有一个优先级。
工作队列的优点是 RAM 占用更少,减少任务切换,缺点是队列任务不能休眠,也不能轮询消息。对于运行时间比较长的任务应该使用Tasks或者在一个独立的工作队列中
工作队列(work Queue)用于执行周期性任务, 如传感器驱动程序。
Task
使用工作队列功能需要使用任务队列的任务需要继承ModuleBase,这个类提供了队列需要的方法,其继承关系如图所示:
由上图我们可以知道:
任务模块通过xxx_main()函数启动,这个函数是系统执行该任务的入口函数
ModuleBase类封装了任务管理所需要的基础功能,如:start、stop、status、help、info等
ModuleBase通过px4_task_spawn_cmd函数启动任务,这个函数封装了pthread的接口
Task模块通过Run函数运行任务,这里需要一个while循环,用于周期性执行
工作队列
使用工作队列功能需要继承ScheduledWorkItem,这个类提供了队列需要的方法,其继承关系如图所示:
队列执行时序图:
PX4的任务队列调用稍微复杂一些,由上述时序图,工作队列的调度设计一个高精度定时中断hrt和一个队列管理线程WorkQueueManager,它的设计目的是提供一个高精度的周期性任务调度方法。
在hrt定时器中对插入周期任务的队列检测是否到达执行时间,如果需要运行则将需要执行的周期任务添加进WorkQueue中,在高优先级线程WorkQueueRunner检测是否有插入需要运行的任务,在该线程中执行该任务。
这样设计的优点:
使用hrt的高精度定时中断可以确保周期调度的精度,这个中断运行周期为1MHz,理论最小调度分辨率为1us,远高于使用rtos的调度分辨率,它取决于rtos的时间片轮长度,一般情况是1ms
多个工作队列共享一个WorkQueueRunner线程,因此队列任务是共享堆栈的,可以减小RAM的使用
多个工作队列在一个线程中是顺序执行的,可以减少任务切换的次数
工作队列任务时间过长可能会造成线程中其他队列任务延时,因此队列任务不能运行执行时间过长的任务
以上的图表是使用 工欲善其事-4-绘制程序流程图 方法绘制,由于微信不能插入该绘图插件,因此采用图片方式上传,显示的分辨率可能有限。
源自:AcmeUavs
往期推荐阅读
往期热文(点击文章标题即可直接阅读):
我国首架35克超微侦察无人机-蜂鸟惊艳阿布扎比防务展
我国首个实用化无人机“蜂群”,中国电科单车发射48架巡飞弹
揭秘无人机自动机场 — 换电机场VS充电机场
汉王智能仿生机器鸟 !小孩大人都抢着玩
极飞的泡沫还能够吹多久?下一个暴雷的会不会是极飞?
走进飞思无人科研平台,让无人智能科研更简单
上海特金推出国内首个城市级网格化无人机管控系统
任务调度
,
调度
,
任务
,
飞控
相关帖子
•
解决 ELRS 接收机 SBUS 接F4 飞控 通电 进 DFU Bootloader 模式劫持 Jumper RC 自制 冒烟 牌 飞控
•
无人机飞控系统解析:如何实现精准姿态控制[保华润天航空无人机]
•
无人机飞控系统:技术原理与高级应用全解析![新疆无人机培训]
•
X6开源飞控四旋翼飞行大动作测试@1m轴距 即将上市,敬请期待
•
又有一款开源飞控来啦!零一科技X6飞控&OneGNSS定位模块如何呢
•
冒烟 牌 飞控 第二版 STM32 F407 ZGT6 版本 自制飞控 四轴 无人机 小 飞机 控制 第七季 第7集
•
气压计定高 PID 调节 冒烟 牌 飞控 第三版 STM32 F405 版本 自制飞控 四轴 无人机 小 飞机 控制 第十五季 第15集
•
〖T.O.P.〗出场ArduPilot固件的多旋翼飞控,跟穿越机常见的bf飞控有哪些不同?
•
《无人机驾驶员》无人机飞控原理及开源飞控网站、无人机飞行注意事项、多旋翼无人机飞行原理及飞行模式等知识-高级技师培训考试学习!
•
零一x6飞控(全地形火星车项目)开箱测试
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
加入联盟
本版积分规则
发表回复
回帖后跳转到最后一页
快速回复
返回顶部
返回列表