ardupilot的libraries之PID

2023-05-16

         在源码的libraries中,有两个关于PID的源文件文件夹,一个叫AC_PID,另一个是PID。AC_PID中又细分为AC_HELI_PID、AC_P和AC_PID, 这里我们只讨论AC_PID。PID文件夹中只有一个PID类,下面分别列出这两个类中的属性和方法,并大致描述其功能和实现细节,源码请自己下载阅读。

    AC_PID

    构造函数(略)

    float       get_pid(float error, float dt);      //计算PID控制器的输出,其实是分别调用了下面的get_p、get_i、get_d函数
    float       get_pi(float error, float dt);      //计算PI控制器输出
    float       get_p(float error) const;          //计算p输出
    float       get_i(float error, float dt);        //计算i输出,其中有积分限幅,由_imax决定
    float       get_d(float error, float dt);      //计算d输出,首先判断上一次的微分值是否有效,避免上一次值不确定导致大的输出,并且有20HZ的低通滤波器

    /// Reset the PID integrator
    ///
    void        reset_I();           //将积分值置0,上一次微分值置为NAN

    /// Load gain properties
    ///
    void        load_gains();

    /// Save gain properties
    ///
    void        save_gains();
    
    /// Sets filter Alpha for D-term LPF
    void        set_d_lpf_alpha(int16_t cutoff_frequency, float time_step);     //计算滤波器系数

       PID

     构造函数(略)

       float        get_pid(float error, float scaler = 1.0);   //计算PID控制器的输出,与上面用到的方法类似,不同点1.如果两次计算的时间大于1秒,则重置积分值,避免大的波动;2有一个scaler可以对输出值进行整体的比例运算,而不用调整PID三个参数,默认为1.

    // get_pid() constrained to +/- 4500
    int16_t     get_pid_4500(float error, float scaler = 1.0);      //限制PID的输出在+/-4500之间

    /// Reset the PID integrator
    ///
    void        reset_I();

    /// Load gain properties
    ///
    void        load_gains();

    /// Save gain properties
    ///
    void        save_gains();

         可以看出,两个PID实现基本一致,在细节处理上不太一样,具体各自用在什么地方还不太清楚,这里只是做个笔记,随着学习加深会进一步完善。




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

ardupilot的libraries之PID 的相关文章

  • C - 获取用popen打开的进程的PID

    我有一个用 C 编写的程序 它使用 popen 打开另一个程序 我想获取该程序的 pid 或某种处理程序 以便在一定时间限制后 或者在它超出某些 ram 和 stdout 限制时杀死它 我认为这必须用ptrace来完成 它需要PID 但我不
  • 将第二个 JNI 库包含到我的 Android 项目 (OpenCV) 后出现错误

    我正在尝试将 OpenCV 添加到我现有的 Android 项目中 但在合并它们时遇到以下错误 12 08 16 15 21 951 22052 22052 ai inbi face recognition robot E AndroidR
  • 使用 config.site 构建 *.pc 时 @libdir@ 不正确?

    我正在 Fedora x86 64 上工作 它用 lib64 usr lib64和朋友 我有以下内容 pc in file cat libcryptopp pc in prefix prefix exec prefix exec prefi
  • 有没有办法确定 Linux PID 是否暂停?

    我有一个 python 脚本 它使用 SIGSTOP 和 SIGCONT 命令与 os kill 来暂停或恢复进程 有没有办法判断相关PID是处于暂停状态还是恢复状态 您可以从进程的 proc 目录 proc
  • 用于为 Java 应用程序构建交互式 shell 的库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找可以让我创建交互式 shell 的 Java 库 我已经做了一些搜索 但还没有找到很多 我发现的大部分内容都是用于向我的应用程序
  • 包含的 C++/C 头文件的实现在哪里?

    这可能看起来有点愚蠢 但这已经困扰了一段时间了 当我在我的C C程序中包含一些别人编写的头文件时 编译器如何知道头文件中声明的类成员函数的实现在哪里 假设我想编写一些利用 OpenCV 库的程序 通常我想使用 include
  • 打印 pid_t 的正确 printf 说明符是什么

    我目前正在使用显式转换为 long 并使用 ld用于印刷pid t 是否有一个说明符 例如 z for size t for pid t 如果不是最好的打印方式是什么pid t 没有这样的说明符 我认为你在做什么 铸造pid t to lo
  • CodeIgniter 和 Javascript/Jquery 库

    正如标题所说 我试图弄清楚如何在 CI 上使用 javascript 和 jquery 库 遵循以下指令the docs http codeigniter com user guide libraries javascript html 我
  • 引用 google-play-services 库

    我正在使用 Google Maps Android API v2 开发一个项目 当我开始引用 google play services lib 时遇到问题 我的项目图标上出现一个红色感叹号 并且 问题 选项卡中出现一条错误消息 我使用的是
  • 有没有办法链接linux的线程TID和pthread_t“线程ID”

    在 Linux 上 线程由pthread t或 TID 我正在寻找这两种线程 id 之间的桥梁 given a pthread t我可以得到它吗TID 显然 https stackoverflow com questions 558469
  • 如何在 Eclipse 的 Java EE 透视图中隐藏引用的库?

    Eclipse 的普通 Java 透视图似乎很好地隐藏了引用库 在项目中的 引用库 文件夹中 不幸的是 Java EE 视角似乎没有同样的功能 并且启用它并不直观 谁能解释一下这个问题 引用的库 视图在 Java 透视图中的 Package
  • 如何查看linux中特定进程每5秒的内存消耗情况

    我只是想知道如何找到特定进程在特定时间 比如5秒 的内存消耗 我是linux新手 因此 详细的步骤将不胜感激 Use top p PID其中 PID 是进程 ID 应显示有关进程的信息 包括使用的系统内存百分比 类型d以及一个以秒为单位的整
  • 查看用户最近执行的Android任务

    我想查看我的 Android 手机最近的任务 我尝试了一些来自互联网的代码 但没有一个能正常工作 我只想获取用户最后执行的应用程序的PID和名称 例如 如果我执行计算器应用程序 然后执行我创建的最近任务应用程序 则该应用程序应该能够告诉我类
  • 2D Python 游戏编程的工具包选项 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 OS X 静态库中包含 nib?

    我看过几篇关于 iOS 的文章讨论这个主题 但是一两次提到 OS X 只是说构建一个框架而不是静态库 我找不到有合适框架说明的帖子 我已将项目创建为静态库 并相应地对整个项目进行了编码 现在 我只想将我的框架放入演示应用程序中 但它抱怨缺少
  • 在 Android 中将 XML 转换为 JSON 对象

    我有一个 XML 字符串 如下所示
  • 我应该在新项目中使用“请求”模块吗?

    The 请求 模块 https github com request request长期以来一直是 Node js 的标准 他们最近已弃用 https github com request request issues 3142图书馆 我正
  • 如何使库与调用者脚本 PropertiesService 一起工作?

    直到谷歌将导入 导出 API 扩展到容器绑定的 Apps 脚本项目 https code google com p google apps script issues issues detail id 2922 我已将项目的大部分内容移至可
  • 。 + 选项卡“自动完成”在 Jupyter Notebook 中不起作用

    因此 我似乎无法使用 来自动完成方法 Jupyter Notebook 中的选项卡 目前运行的是 Jupyter 6 0 1 我尝试了以下方法但没有成功 sudo easy install readline conda install c
  • 如何构建 Boost::program_options

    我想使用 boost program options 安装boost后 我认为我必须单独构建program options http www boost org doc libs 1 43 0 more getting started wi

随机推荐

  • Linux c socket 实现http

    include lt stdio h gt include lt sys socket h gt include lt sys types h gt include lt time h gt include lt errno h gt in
  • 跌倒检测和识别1:跌倒检测数据集(含下载链接)

    跌倒检测和识别1 xff1a 跌倒检测数据集 含下载链接 目录 跌倒检测和识别1 xff1a 跌倒检测数据集 含下载链接 1 前言 2 跌倒姿态 xff1a 站立 弯腰 蹲下 躺下 3 跌倒检测数据集 xff1a xff08 1 xff09
  • 跌倒检测和识别2:YOLOv5实现跌倒检测(含跌倒检测数据集和训练代码)

    跌倒检测和识别2 xff1a YOLOv5实现跌倒检测 含跌倒检测数据集和训练代码 目录 跌倒检测和识别2 xff1a YOLOv5实现跌倒检测 含跌倒检测数据集和训练代码 1 前言 2 跌倒检测数据集说明 xff08 1 xff09 跌倒
  • 跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测)

    跌倒检测和识别3 xff1a Android实现跌倒检测 含源码 xff0c 可实时跌倒检测 目录 跌倒检测和识别3 xff1a Android实现跌倒检测 含源码 xff0c 可实时跌倒检测 1 前言 2 跌倒检测数据集说明 3 基于YO
  • 跌倒检测和识别4:C++实现跌倒检测(含源码,可实时跌倒检测)

    跌倒检测和识别4 xff1a C 43 43 实现跌倒检测 含源码 xff0c 可实时跌倒检测 目录 跌倒检测和识别4 xff1a C 43 43 实现跌倒检测 含源码 xff0c 可实时跌倒检测 1 前言 2 跌倒检测模型 xff08 Y
  • 接口测试工具:Postman

    无论是接口调试还是接口测试 xff0c postman都算的上很优秀的工具 xff0c 好多接口测试平台 接口测试工具框架的设计也都能看到postman的影子 xff0c 我们真正了解了这款工具 xff0c 才可以在这个基础上进行自己的设计
  • ROS实验笔记之——move_base_simple/goal

    本博文打算通过节点发布导航的坐标让机器人自动移动到目标点 通过自定义节点来实现导航功能 nbsp 目录 创建仿真环境 编写导航发布者 move base msgs MoveBaseActionGoal Message 实现代码 参考资料 n
  • ROS实验笔记之——自主搭建四旋翼无人机

    最近搭建了一台小的四旋翼无人机 xff0c 本博文记录一下搭建的过程以及一些问题 请问我博客就记录了自己做实验的搭建的飞机有什么问题 xff1f xff1f xff1f 目录 组装 飞行前准备 试飞 组装 首先是一系列的散装原件 到最后搭建
  • ROS实验笔记之——基于l515激光相机的FLVIS与MLMapping

    之前博客 ROS实验笔记之 VINS Mono在l515上的实现 在l515上实现了vins xff0c 博客 ROS实验笔记之 SLAM无人驾驶初入门 配置flvis并跑了对应的kitti数据集 本博文在l515上先实现flvis然后再用
  • Chapter 2. ROS 创建和编译功能包

    1 创建ROS功能包 使用catkin create pkg命令来创建一个新的catkin程序包 首先切换到之前通过创建catkin工作空间教程创建的catkin工作空间中的src目录下 xff1a ros workspace span c
  • linux ulimit命令用法解析

    以下内容转载自 xff1a http www linuxidc com Linux 2012 10 72782 htm Linux对于每个用户 xff0c 系统限制其最大进程数 为提高性能 xff0c 可以根据设备资源情况 xff0c 设置
  • 机体坐标系的角速度分量

    一 角速度分量 机体坐标系的三个角速度分量 xff0c 是机体坐标系相对于地面坐标系的转动角速度在机体坐标系各轴上的分量 其中 xff1a 角速度 xff50 xff0c 与机体轴 xff58 重合一致 xff1b 角速度 xff51 xf
  • 使用Realsense测试aruco_ros包

    01 准备工作 安装realsense ros安装aruco ros span class token builtin class name cd span ur ws src span class token function git s
  • DIY遥控船(一):电调和舵机的驱动[使用STC89C52]

    在动力模型中 xff0c 有两样东西是最基本 最必要的 xff0c 即舵机和无刷电机 舵机提供转动特定角度的功能 xff0c 而无刷电机需要由电调 xff0d xff0d 电子调速器驱动 舵机 舵机又叫伺服电机 xff0c 可以按照输入的指
  • GD32VF103之CRC

    在GD32VF103内部有一个CRC 循环冗余校验计算单元 xff0c 使用它可以对数据的完整性和正确性进行校验 xff0c 比如固件的完整性和正确性校验 通信数据的校验等 它使用固定的32位多项式 xff1a 0x4C11DB7 xff1
  • GD32VF103之GPIO最小配置

    longan nano是Sipeed xff08 矽速科技 xff09 推出的开发板 xff0c 使用兆易创新的gd32vf103cbt6芯片 xff0c 该芯片是基于芯来科技的Nuclei Bumblebee处理器的32位通用微控制器 x
  • Linux控制I2C/SMBus设备

    平台 xff1a 树莓派 bcm2835 Raspberry Pi 3 Model B Rev 1 2 I2C是Philips开发的一种两线通信协议 xff0c 常用于一些对速度要求不高的小型器件上 SMBus是系统管理总线 xff0c 基
  • ArduPilot/APM源码学习笔记(一)

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

    本来是想把GRUB2装到U盘 xff0c 却不小心把电脑的GRUB搞坏了 原因可能是我执行命令grub install时没有加任何参数 xff0c 由于不知道没有参数怎么执行 xff0c 我赶紧ctrl 43 c终止了安装 xff0c 最后
  • ardupilot的libraries之PID

    在源码的libraries中 xff0c 有两个关于PID的源文件文件夹 xff0c 一个叫AC PID xff0c 另一个是PID AC PID中又细分为AC HELI PID AC P和AC PID xff0c 这里我们只讨论AC PI