Ardupilot任务调度的理解

2023-05-16

Ardupilot通过定时器定时调度一系列任务实现任务调度。
由于Ardupilot固件有基于arduino的APM发展而来,因此程序与arduino的形式类似,包含一个setup()函数与一个loop()函数。这些函数的执行与arduino的执行方式类似,其中setup()只执行一次,loop()函数在setup()函数执行后循环执行。
为了执行任务首先要将任务定义出来。在ArduCopter.cpp程序中,首先在 AP_Scheduler::Task Copter::scheduler_tasks[]中定义了一系列要完成的任务。第一个参数是要调用的函数,第二个参数通过定义tick的个数(一个tick为1/400Hz=2.5ms)来定义执行的频率。第三个参数为该任务的最大执行时间,这在后面scheduler.run(time_available)函数中将用来判断是否要继续执行该任务。
这些AP_Scheduler::Task Copter::scheduler_tasks[]数组中定义的任务将在loop()函数中scheduler.run(time_available)语句中被执行。进入scheduler.run()函数中,for (uint8_t i=0; i<_num_tasks; i++)表示飞控程序并没有设置这些任务的优先级,而是从第一个任务开始,使用一个for循环依次向下执行。其中dt = _tick_counter - _last_run[i];得到的dt用来保证这些任务按指定的频率执行。若第一个任务执行频率为100Hz,即4个tick,那么在第一次进入这个语句时dt=1,不满足下面的if (dt >= interval_ticks) 语句, _last_run[i]不变。而在loop()函数中,每进行一次循环经历2.5ms(由ins.wait_for_sample();函数保证2.5ms的周期), _tick_counter在scheduler.tick();加1,经历四个tick之后,再次进入之前提到的for循环,此时对于第一个任务dt=4,满足if (dt >= interval_ticks) 条件,任务将得到执行,之后记录下这一次执行的tick次数,赋值给 _last_run[i],以此来保证每个任务的执行频率。
在任务执行时,还会通过if (_task_time_allowed <= time_available)语句判断剩余时间是否足够执行该任务,一次来保证每次循环执行的时间。其中_task_time_allowed 就是之前在 AP_Scheduler::Task Copter::scheduler_tasks[]输入的第三个参数。
除AP_Scheduler::Task Copter::scheduler_tasks[]中定义的任务外,在loop()函数中还有一个fast_loop()函数,这个函数中的任务将以400Hz的频率执行。fast_loop()中的任务调度可以参考http://wenku.baidu.com/link?url=wRKUgK3NIKTajkGow6VTjGt0tLBBhYNzXDvHmpz2S4Vdv1lLlHBNHTBgV9mAFH7nZD49RN0m9FuM7RqUtCGGgKEasIRIGdawjNTGIautyyG中的介绍,这篇介绍非常详细。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ardupilot任务调度的理解 的相关文章

  • 无人系统板载(任务)计算机设计----Ardupilot/PX4/ROS (阿木)

    摘自 https zhuanlan zhihu com p 115418045 无人系统板载 任务 计算机设计 Ardupilot PX4 ROS 阿木实验室 已认证的官方帐号 一 大型飞行管理系统介绍 目前的小型无人系统的飞行管理系统 x
  • ArduPilot飞控之DIY-F450计划

    ArduPilot飞控之DIY F450计划 1 历史2 源由3 计划3 1 硬件3 2 软件 4 动手4 1 接线4 1 1 ELRS nano接收机4 1 2 BN880 GPS模块4 1 3 Radio Telemetry 4 2 配
  • Dronekit 搭配使用Ardupilot 和 PX4

    Dronekit是一个与无人机飞控搭配使用 xff0c 方便开发者使用代码控制无人机 个人认为它会比搭建ros来控制无人机更容易上手一些 对于Dronekit xff0c PX4被支持的较少 xff0c 不可以进行模式切换 xff0c 而对
  • ardupilot 最优化算法

    目录 文章目录 目录 摘要 1 最小二乘法 1 1定义 1 2 基本思想 1 3 基本原理 1 4举例子 1 5最小二乘法和梯度法区别 2 梯度下降法 2 1 什么是梯度 2 2 什么是梯度下降 3 牛顿迭代法 3 0 牛顿迭代 3 1 牛
  • Ardupilot飞控姿态角与姿态角速度控制过程分析(超长篇)

    目录 文章目录 目录 摘要 1 自稳模式初始化 2 自稳模式更新函数 这个代码主要把横滚输入 俯仰输入量转换成目标角度需要的范围 也就是 4500 4500 3 姿态角速度代码控制过程分析 4 电机PWM控制运算 摘要 本节主要记录自己学习
  • Ardupilot飞控添加使用诺瓦泰GPS

    Ardupilot飞控添加使用诺瓦泰双天线GPS航向角的设置 一 添加诺瓦泰GPS heading角数据包解析代码 1 打开libraries AP GPS AP GPS NOVA h xff0c 添加如下代码 xff1a struct P
  • 【踩坑实录】Mission planner+Ardupilot飞控固件配置教程

    写在前面 飞控 xff1a 雷迅CUAV V5 43 固件 xff1a Arudupilot Arduplane Stable 地面站 xff1a Mission Planner 1 3 74 之前为飞控刷写了px4固件 xff0c 并采用
  • ardupilot飞控源码框架认识

    ardupilot飞控源码框架认识 转载 xff1a https blog csdn net csshuke article details 78850898 希望对更多的人有帮助 此篇blog的目的是对px4工程有一个整体认识 xff0c
  • 解决ardupilot中使用UWB每次上电的时候坐标不一样的问题

    解决ardupilot中使用UWB每次上电的时候坐标不一样的问题 ctime 2019 08 02 22 41 07 43 0800 1564756867 标签 xff08 空格分隔 xff09 xff1a 技术 飞控 在GCS Commo
  • ArduPilot飞行前检查——PreArm解析

    ArduPilot飞行前检查 主要包括两个部分 1 初始化中遥控器输入检查 xff1b 2 1Hz解锁前检查 附 xff1a 显示地面站信息 参考文章 xff1a Ardupilot Pre Arm安全检查程序分析 1 初始化中遥控器输入检
  • ardupilot之mavlink消息--飞控接收--单向

    由于项目需要 xff0c 完成一个测试demo 本次从dronekit中发送mavlink消息给飞控 xff0c 飞控接收发来的wp信息 xff0c 然后进行修改供程序使用 首先祭出测试视频 dronekit arudpilot test
  • Pixhawk之UAV控制理论、ardupilot源码框架介绍

    一 开篇 您有无人机么 xff1f 没有 那赶紧去某宝买一套 昨天 开会开到接近下午一点钟 xff0c 收获相当大 xff0c 原本不太清楚的ardupilot框架现在也大致熟悉了 xff0c 接下来主要就是结合源码了解其控制过程了 xff
  • ArduPilot日志系统探索(一)

    先把官方网站上日志相关的说明翻译下来 xff1a ArduPilot Documentation ArduPilot documentation 页面 xff1a Logs Copter documentation 与日志记录和分析相关的主
  • 【移植Ardupilot的日志记录方法到linux上】

    移植Ardupilot的日志记录方法到linux上 说明日志结构组成日志写入操作预定义日志项运行时添加日志项的方法 单例测试编译方法查看数据其他 说明 采用二进制文件记录 xff0c 可在mission planer查看 支持所有数据类型记
  • Ardupilot SITL(Software in the Loop)软件仿真

    参考 xff1a http ardupilot org dev docs sitl native on windows html sitl native on windows 第一步 xff1a 下载MAVProxy 第二步 xff1a 下
  • Docs » Learning the ArduPilot Codebase » EKF » Extended Kalman Filter Navigation Overview and Tuning

    原文 xff1a http ardupilot org dev docs extended kalman filter html extended kalman filter navigation overview and tuning 本
  • Ardupilot任务调度的理解

    Ardupilot通过定时器定时调度一系列任务实现任务调度 由于Ardupilot固件有基于arduino的APM发展而来 xff0c 因此程序与arduino的形式类似 xff0c 包含一个setup xff08 xff09 函数与一个l
  • APM 学习 6 --- ArduPilot 线程

    ArduPilot 学习之路 6 xff0c 线程 英文原文地址 xff1a https ardupilot org dev docs learning ardupilot threading html 理解 ArduPilot 线程 线程
  • MAVROS +ardupilot +gazebo 无人机集群仿真 (一)

    MAVROS 43 ardupilot 43 gazebo 无人机集群仿真 xff08 一 xff09 无人机仿真环境搭建仿真软件安装仿真环境测试无人机多机仿真apm launch文件修改修改 iris ardupilot world修改
  • ArduPilot/APM源码学习笔记(一)

    最近开始学习ArduPilot APM飞控的源码 xff0c 源码托管在github上 源码链接 xff1a https github com diydrones ardupilot 飞控主页 xff1a http ardupilot co

随机推荐

  • Docker自动从Harbor下更新镜像

    JAVA开发Docker容器下自动更新镜像仓库的工具 前段时间在做一套分布式多租户系统 xff0c 它包括控制平台和应用服务器两部分 xff0c 应用服务器为企业客户服务 xff0c 系统会为每家企业建立一个应用服务器实例 xff0c 它存
  • C++中的exit函数

    描述 xff1a 用来立即中止当前程序的执行 xff0c 并将一个整数返回给系统 xff0c 该整数的作用与 由mian函数返回的整数 相同 xff0c 如果是0表示程序正常退出 xff1b 如果非0表示程序异常退出 头文件 span cl
  • 将uint8_t类型的16进制字符转化转换为string字符串

    碰到一个需求 xff0c 需要把硬件读到的uint8 t类型的16进制数据转化为string类型的字符串 例如 xff0c 如果读到到的数据是一个uint8 t类型的数组uint8 t code 61 5 61 0XAA 0X01 0XE3
  • C++解析json文件

    文章目录 1 JSON文件简介 1 1 1 JSON文件的语法规则1 2 JSON值的类型 2 JSON文件解析 1 JSON文件简介 1 一个项目在设计时会存在很多参数 xff0c 比如data文件路径 外设名称与相关参数 文件储存路径等
  • YOLO-YOLOV5算法原理及网络结构整理

    文章目录 零 参考链接一 前言1 1 YOLO vs Faster R CNN 二 YOLOv1 xff08 448 448 xff09 2 1实现方法2 2 损失函数2 3 leak RELU激活函数2 4总结 三 YOLOV23 1 Y
  • ubuntu 20.04.5安装python3.9缺少ffi.h文件问题

    ubuntu 20 04 5安装python3 9缺少ffi h文件问题 OK 解决
  • 视觉SLAM基础

    文章目录 零 参考链接一 视觉SLAM面试相关问题1 李群与李代数的映射关系2 李群与李代数的扰动模型3 SIFT与SURF特征的区别4 相似变换 仿射变换 射影变换的区别5 Homograph Essential Fundamental
  • 在ubuntu18.04系统上使用ROS跑ORB-SLAM3时遇到的问题总结

    1 跑TUM VI数据集dataset corridor4 512时 xff0c 从tum vi example sh中复制对应的运行命令 xff0c 输入命令后提示找不到对应的TUM 512 yaml文件 xff0c 查找对应路径发现只有
  • ubuntu1804系统安装Realsense SDK驱动和ROS Wrapper

    文章目录 1 软件安装1 1 安装realsense SDK1 2 安装Ros Wrapper 2 打开双目的开关3关闭结构光方法1 xff1a 通过可视窗口关闭方法2 xff1a 通过修改launch文件关闭 4查看相机参数 说明 xff
  • 在使用evo进行orb-slam2轨迹评估时提示时间戳没有对齐的问题

    最近使用一个orb slam2修改版跑euroc数据集 在使用evo评估绝对轨迹误差时出现下面的报错 found no matching timestamps between CameraTrajectory txt and gt MH01
  • ORB-SLAM2论文翻译

    文章转载至泡泡机器人 转载链接 链接 摘要 ORB SLAM2是基于单目 xff0c 双目和RGB D相机的一套完整的SLAM方案 它能够实现地图重用 xff0c 回环检测和重新定位的功能 无论是在室内的小型手持设备 xff0c 还是到工厂
  • ROS使用命令行查看图像消息的宽和高

    备忘 xff1a ROS在终端使用命令行查看图像消息的宽和高 span class token comment 查看图像的宽 span rostopic span class token builtin class name echo sp
  • C++读取指定目录下的所有文件

    简介 xff1a 代码备忘 xff0c 使用C 43 43 读取指定目录下的所有文件名 xff0c 并存入vector向量 需要的头文件 span class token macro property span class token di
  • ubuntu1804进行vins-fusion算法环境搭建遇到的问题汇总

    简介 xff1a 在ubuntu1804系统搭建vins fusion环境并基于euroc数据集进行测试 xff0c 对遇到的编译报错和解决办法进行汇总 1 vins fusion算法环境搭建 报错1 Chessboard cc 20 38
  • ubuntu1804搭建svo2.0环境并跑euroc数据集

    0说明 整个SVO2 0环境搭建过程按照官网的说明进行 链接 xff1a https github com uzh rpg rpg svo pro open 开发环境是ubuntu18 04 43 ROS Melodic 1工具安装 Ins
  • 使用ceres库时报错:undefined reference to `ceres::Problem::Problem()‘

    编译cmake项目链接ceres库时名称没有写对导致报错 myCeres cpp span class token punctuation span text startup 43 0x247 span class token punctu
  • qt.qpa.plugin: Could not load the Qt platform plugin “xcb“

    运行环境 ubuntu 20 04 5 使用python3 9 由于使用qt5的同时使用了opencv导致如下报错 应该是由于调用环境不兼容导致的 需要加入如下代码问题解决 import os os environ pop 34 QT QP
  • 【Ubuntu】触摸屏旋转配置

    1 主要参考这篇文章编写配置脚本 Ubuntu18 04双屏显示触屏设置 xff0c 解决触摸点和响应位置不一致的问题 iShare 123的博客 CSDN博客 ubuntu触摸屏设置 Ubuntu18 04双屏 https blog cs
  • 红外视频——行人识别

    最近在做关于红外视频的项目 xff0c 主要是对区域入侵检测 xff0c 主要是能够对行人进行识别 xff0c 又到了瓶颈期 xff0c 所以看看论文找些灵感 xff0c 下面也主要是对看到的论文的思想及实现步骤进行总结 1 Thermal
  • Ardupilot任务调度的理解

    Ardupilot通过定时器定时调度一系列任务实现任务调度 由于Ardupilot固件有基于arduino的APM发展而来 xff0c 因此程序与arduino的形式类似 xff0c 包含一个setup xff08 xff09 函数与一个l