转载:Pixhawk源码笔记八:添加新的参数

2023-05-16

转载:新浪@WalkAnt

 

Pixhawk源码笔记八:添加新的参数

第九部分 添加新的参数

        英文参考:http://dev.ardupilot.com/wiki/code-overview-adding-a-new-parameter/

        本节源自:http://liung.github.io/blog/apm/2014-09-02-APM-添加新的参数.html

1 在主执行代码中添加参数

        第一步:

        Step #1

        在文件Parameters.h参数类中的枚举变量(enum)的合适位置,像下面代码块最后一行一样添加你自己的新的参数。你需要注意下面这些事情:

  • 尽量在执行类似功能的参数区域添加新的参数,或者最坏的情形下就是在“Misc(混合)”区域的末尾添加。
  • 确保你添加的参数区域中还可以有编号添加新的参数。检查是否能继续添加参数的方法是:检查参数的计数,确保你所要添加的参数的上一个元素编号要小于你的下一部分代码的编号。比如,Misc部分的第一个参数起始于#20,。my_new_parameter是#36。如果下一部分参数开始于#36,那么我们就不能在这里添加这个新参数。
  • 不要在一个代码块的中间添加新的参数,那样容易造成现存参数对应的信息的改变。
  • 不要在参数旁边用“弃用(deprecated)”或“移除(remove)”做注解,这是因为一些使用者将此注释用作在eeprom上的旧的参数的默认注解,如果你添加的新参数也是这样注解,那么就让人就会看起来很奇怪和疑惑。 

enum {

        // Misc

        //

        k_param_log_bitmask = 20,

        k_param_log_last_filenumber,            // *** Deprecated - remove

                                                          // with next eeprom number

                                                                    // change

        k_param_toy_yaw_rate,                     // THOR The memory

                                                                 // location for the

                                                                  // Yaw Rate 1 = fast,

                                                                 // 2 = med, 3 = slow

 

        k_param_crosstrack_min_distance,    // deprecated - remove with next eeprom number change

        k_param_rssi_pin,

        k_param_throttle_accel_enabled,     // deprecated - remove

        k_param_wp_yaw_behavior,

        k_param_acro_trainer,

        k_param_pilot_velocity_z_max,

        k_param_circle_rate,

        k_param_sonar_gain,

        k_param_ch8_option,

        k_param_arming_check_enabled,

        k_param_sprayer,

        k_param_angle_max,

        k_param_gps_hdop_good,          // 35

        k_param_my_new_parameter,       // 36

 

        第二步:

        Step #2

        在枚举变量后面的参数类中声明上面枚举变种提到的参数。可使用的类型包括AP_Int8,AP_Int16,AP_Float,AP_Int32,AP_Vector3(目前还不支持unsigned integer无符号整型)。新的枚举变量的名称应该保持一致,只是去掉了前缀k_param_

     // 254,255: reserved

    };

 

    AP_Int16        format_version;

    AP_Int8         software_type;

 

    // Telemetry control

    //

    AP_Int16        sysid_this_mav;

    AP_Int16        sysid_my_gcs;

    AP_Int8         serial3_baud;

    AP_Int8         telem_delay;

 

    AP_Int16        rtl_altitude;

    AP_Int8         sonar_enabled;

    AP_Int8         sonar_type;       // 0 = XL, 1 = LV,

                                      // 2 = XLL (XL with 10m range)

                                      // 3 = HRLV

    AP_Float        sonar_gain;

    AP_Int8         battery_monitoring;         // 0=disabled, 3=voltage only,

                                                // 4=voltage and current

    AP_Float        volt_div_ratio;

    AP_Float        curr_amp_per_volt;

    AP_Int16        pack_capacity;              // Battery pack capacity less reserve

    AP_Int8         failsafe_battery_enabled;   // battery failsafe enabled

    AP_Int8         failsafe_gps_enabled;       // gps failsafe enabled

    AP_Int8         failsafe_gcs;               // ground station failsafe behavior

    AP_Int16        gps_hdop_good;              // GPS Hdop value below which represent a good position

    AP_Int16        my_new_parameter;                  // my new parameter's description goes here

 

        第三步:

        Step #3

        在Parameters.pde文件中向var_info表中添加变量的声明信息。

    // @Param: MY_NEW_PARAMETER

    // @DisplayName: My New Parameter

    // @Description: A description of my new parameter goes here

    // @Range: -32768 32767

    // @User: Advanced

    GSCALAR(my_new_parameter, "MY_NEW_PARAMETER", MY_NEW_PARAMETER_DEFAULT),

 

        地面站(如Mission Planner)中将使用@Param ~ @User的注释信息向使用者说明用户所设置的变量的范围等。

        第四步:

        Step #4:

        在config.h中添加你的新参数。

#ifndef MY_NEW_PARAMETER_DEFAULT

 # define MY_NEW_PARAMETER_DEFAULT      100     // default value for my new parameter

#endif

        向主执行代码添加参数的工作就完成了!添加到主代码中(并非库中)的参数就可以通过诸如g.my_new_parameter这样来使用。

2 向库中添加参数

        同样可以使用下列步骤向库中添加新的参数。以AP_Compass库为例:

        第一步:

        Step #1

        首先在库代码的.h头文件添加新的变量(如Compass.h)。可使用的类型包括AP_Int8,AP_Int16,AP_Float,AP_Int32,AP_Vector3f。然后添加你的参数的默认值(我们将在Step #2中使用)。

#define MY_NEW_PARAM_DEFAULT         100

 

class Compass

{

public:

    int16_t product_id;                         /// product id

    int16_t mag_x;                      ///< magnetic field strength along the X axis

    int16_t mag_y;                      ///< magnetic field strength along the Y axis

    int16_t mag_z;                      ///< magnetic field strength along the Z axis

    uint32_t last_update;               ///< micros() time of last update

    bool healthy;                               ///< true if last read OK

 

    /// Constructor

    ///

    Compass();

 

protected:

    AP_Int8 _orientation;

    AP_Vector3f _offset;

    AP_Float _declination;

    AP_Int8 _use_for_yaw;                       ///

    AP_Int8 _auto_declination;                  ///

    AP_Int16 _my_new_lib_parameter;              /// description of my new parameter

};

 

        第二步:

        Step #2

        然后在.cpp文件(如Compass.cpp)中添加变量包含有@Param ~ @Increment的var_info表信息,以便允许GCS向用户显示来自地面站的关于该参数值的范围设定。当添加新参数时应注意:

  • 自己添加的代码编号(下面的编号9)一定要比之前变量的大。
  • 参数的名称(如MY_NEW_P)包括对象自动添加的前缀要少于16个字符。比如罗盘对象的前缀为“COMPASS_”。

 

const AP_Param::GroupInfo Compass::var_info[] PROGMEM = {

    // index 0 was used for the old orientation matrix

 

    // @Param: OFS_X

    // @DisplayName: Compass offsets on the X axis

    // @Description: Offset to be added to the compass x-axis values to compensate for metal in the frame

    // @Range: -400 400

    // @Increment: 1

 

 

    // @Param: ORIENT

    // @DisplayName: Compass orientation

    // @Description: The orientation of the compass relative to the autopilot board.

    // @Values: 0:None,1:Yaw45,2:Yaw90,3:Yaw135,4:Yaw180,5:Yaw225,6:Yaw270,7:Yaw315,8:Roll180

    AP_GROUPINFO("ORIENT", 8, Compass, _orientation, ROTATION_NONE),

 

    // @Param: MY_NEW_P

    // @DisplayName: My New Library Parameter

    // @Description: The new library parameter description goes here

    // @Range: -32768 32767

    // @User: Advanced

    AP_GROUPINFO("MY_NEW_P", 9, Compass, _my_new_lib_parameter, MY_NEW_PARAM_DEFAULT),

 

    AP_GROUPEND

};

 

        这样,新添加的参数将以_my_new_lib_parameter包含在库中。需要指明的是:protected保护类型的参数是不能够在类外被访问的。如果我们将其变为public类型,那么我们就可以在主代码中使用compass._my_new_lib_parameter参数了。

        第三步:

        Step #3: 

        前面提到的是在已经存在的类(比如AP_Compass)中定义一个新的变量。如果你重新定义了一个新类,在这个新类中添加参数。添加参数的方法如第二步。不过你还有一个工作要做,就是将这个新类,添加到Parameters.pde文件的var_info 数组列表中去。下面加粗的代码就是一个示例。

const AP_Param::Info var_info[] PROGMEM = {

    // @Param: SYSID_SW_MREV

    // @DisplayName: Eeprom format version number

    // @Description: This value is incremented when changes are made to the eeprom format

    // @User: Advanced

    GSCALAR(format_version, "SYSID_SW_MREV",   0),

 

    // @Group: COMPASS_

    // @Path: ../libraries/AP_Compass/Compass.cpp

    GOBJECT(compass,        "COMPASS_", Compass),

 

    // @Group: INS_

    // @Path: ../libraries/AP_InertialSensor/AP_InertialSensor.cpp

    GOBJECT(ins,            "INS_", AP_InertialSensor),

 

    AP_VAREND

};

转载于:https://www.cnblogs.com/pinlyu/p/4634101.html

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

转载:Pixhawk源码笔记八:添加新的参数 的相关文章

  • pixhawk px4 添加自定义mavlink消息

    首先添加一个 uORB topic xff0c 然后添加一个 mavlink 解析程序 xff0c 这将会将一个输入的 mavlink 消息解析并传入 uORB topic 中 注 xff1a 本例程 xff0c nsh仍然看不到消息 xf
  • 【Pixhawk】Ubuntu下编译原生固件PX4

    环境 xff1a 编译主机 xff1a Ubuntu 20 0 4 xff08 官方推荐18 0 4 xff09 源码版本 xff1a PX4 1 12 0 xff08 目前最新 xff0c 截至2021 7 22 xff09 建议 尽量以
  • 【Pixhawk】PX4添加麦克纳姆轮车架

    PX4中提供了很多机架 xff0c 但要开发PX4不支持的机架类型 xff0c 需要我们自定义 比如麦克纳姆轮 1 在ROMFS px4fmu common init d airframes 下添加 hil机架文件 参考其他 命名为7000
  • pixhawk配置垂直起降无人机

    我使用的版本里面没有找到 43 型尾座式垂直起降无人机 就先用x型无人机了 查看代码 发现在init d目录下id号为13003 待续
  • Pixhawk ulog飞行日志分析

    在python下安装pyulog xff0c 在 ulog文件目录下输入ulog2csv即可将ulog转化为csv形式输出 ulog文件的保存时间 43 8即为飞行实际的时间 timestamp为时间戳 xff0c 除以10 6后单位为秒
  • PIXHAWK 4 中文资料 文档 PCB

    最先进的PX4自动驾驶仪开发工具包 PixHawk 4是PixHawk飞行控制器家族中最新最成功的产品 它是由Holybro 和 Auterion合作开发 xff0c 优化PX4 它预装了最新的PX4原生固件 它采用了目前最先进的STMic
  • APM、PIXHAWK、PX4的关系

    摘自 xff1a https bbs amovlab com forum php mod 61 viewthread amp tid 61 1202 amp extra 61 page 3D1 Pixhawk PX4 APM傻傻分不清 xf
  • 自己组装pixhawk的一些感受

    现在你叫我设置遥控器我会了 xff0c 我也清楚电调怎么接线的了 xff0c 也清楚怎么供电的了 xff0c 其实飞控的接线就四个电调的接线 xff0c 加上接收机的接线其他都是一些传感器的接线罢了 xff0c 我现在回过头看无名的无人机就
  • Pixhawk无人机教程-8.1 在Mission Planner中下载与分析日志(转载)

    摘自 xff1a https www ncnynl com archives 201608 491 html Pixhawk无人机教程 8 1 在Mission Planner中下载与分析日志 闪存日志 目录 闪存日志日志类型 闪存 VS
  • PIXHAWK添加自定义消息存储到SD卡

    四旋翼调试阶段总会出现很多难以预见的现象 xff0c 这时为了找到所出问题的原因 xff0c 就需要获得原始相关数据进行分析 xff0c pixhawk代码提供了记录飞行日志的功能 xff0c 能够将飞行中的重要数据存入SD卡中 xff0c
  • pixhawk调试过程中QGC报错显示问题及解决方案汇总

    1 室内环境下解锁无人机 xff0c 报错 xff1a Not arming geofence RTL requiers valid home 解决 xff1a 去掉安全设置里面的地理围栏 xff0c 否则只能在有GPS的环境下解锁
  • pixhawk日志ulg格式转matlab数据csv格式

    1 windows下打开Anconda Prompt xff0c 执行pip install pyulog安装pyulog包 2 在日志文件所在文件夹下执行ulog2csv 文件名 ulg即可生成相关的csv文件
  • Pixhawk学习7——位置解算

    Pixhawk的位置解算分为两部分 xff0c 第一部分主要为传感器的数据获取 xff0c 而该部分最主要的就是GPS数据的提取 第二部分为与惯性器件之间的组合导航 组合导航的好处我就不用多说了 Pixhawk代码中目前主要有两处组合导航的
  • Pixhawk_bootloader简介

    Pixhawk Bootloader引导过程简介 自己结合网络上的资源总结的内容 有不对的地方请及时指出 有侵权的请指出 QQ 4862879 Pixhawk硬件使用STM32的芯片 Cortex M3的内核有三种启动方式 xff0c 其分
  • pixhawk PX4FMU和PX4IO最底层启动过程分析

    首先 xff0c 大体了解PX4IO 与PX4FMU各自的任务 PX4IO STM32F100 为PIXHAWK 中专用于处理输入输出的部分 输入为支持的各类遥控器 PPM SPKT DSM SBUS 输出为电调的PWM 驱动信号 它与PX
  • pixhawk position_estimator_inav.cpp思路整理及数据流

    写在前面 xff1a 这篇blog主要参考pixhawk的高度解算算法解读 xff0c 并且加以扩展 xff0c 扩展到其他传感器 xff0c 其实里面处理好多只是记录了流程 xff0c 至于里面实际物理意义并不是很清楚 xff0c 也希望
  • pixhawk: px4代码初学分析:追溯电机控制--pwm输出

    追溯电机控制 pwm输出 正常工作状态下pwm输出过程简述 xff1a 其他状态下pwm输出 xff1a 正常工作状态下pwm输出过程简述 xff1a 姿态解算部分得出姿态控制量通过px4io cpp把姿态控制量发送给IOIO串口读取姿态控
  • F450机架 Pixhawk飞控实现自动避障(2019.11.29)

    之前进行无人机项目 xff0c 实现避障 巡航 定点 航拍等功能 xff0c 项目结束 xff0c 在这里进行分享经验 xff0c 项目所用器件为自己使用的 xff0c 仅供参考 xff0c 实际实现须结合自己实际情况 1 传感器选择 权盛
  • pixhawk源码下载与编译

    今天和同学在一起讨论发现自己还在看的pixhawk源码的版本好低啊 xff0c 就下个最新的吧 想起有些人还不会下载源码 xff0c 以及用什么工具查看 源码的下载我用的是git shell工具下的 xff0c px4的github网址是h
  • 树莓派结合PIXHAWK飞控实现四轴双目视觉避障

    树莓派结合Pixhawk飞控实现四轴双目视觉避障 灰信网 xff08 软件开发博客聚合 xff09 无人机双目视觉避障的实现 本文将介绍如何使用树莓派结合PIX飞控实现无人机双目视觉避障的功能 主要硬件 我们以双目摄像头 43 树莓派 43

随机推荐

  • 几款Git GUI客户端工具

    工欲善其事 xff0c 必先利其器 作为一名开发人员 xff0c 你不可能不知道git xff0c 无论你是开发自己的开源项目还是和团队一起进行大规模产品的开发 xff0c git都已经是源代码管理工具的首选 当然 xff0c 那些hard
  • 毕设(一)C#的百度api调用

    这个学期就要毕业了 xff0c 选了一个无人机地面站软件设计的题目 xff0c 这几天也开始着手做 xff0c 首先做了一个百度地图的调用 xff0c 这里因为是上位机的开发 xff0c 所有就不介绍Javascript的 调用方法 xff
  • tf-ros

    http wiki ros org cn tf Tutorials https www ncnynl com archives 201708 1881 html 1 广播变换 发布坐标之间的坐标关系 include lt ros ros h
  • Makefile shell subst $(1)

    MAKE 3 80 realpath 61 shell top srcdir scripts realpath sh 39 subst SQUOTE SQUOTE 1 39 以上Makefile思考好几天不得要领 xff1a 今天想通了 x
  • docker 卸载

    使用yum安装docker xff08 安装过程可以参照linux 安装docker xff09 xff0c 如需卸载docker可以按一下步骤操作 xff1a 1 查看当前docker状态 如果是运行状态则停掉 systemctl sto
  • VIN-Fusion config with Realsense D435i

    First shot Copy the launch file in package VINS Fusion to the directory of realsense2 cameara launch cp home william cat
  • 算法的5个层次

    对算法的掌握 xff0c 大致可以分为5个层次 听说 了解 理解 实现 应用 Level 1 xff1a 听说 知道算法名 知道算法功能 Leven 2 xff1a 了解 知道算法原理 自然语言描述 知道算法优缺点 Leven 3 xff1
  • elf文件下载出错问题

    现在遇到的是sof文件下载有问题 xff0c 不是对应的sof文件 在复制工程后 xff0c 可以在assignment gt setting中指定生成文件所在的文件夹 xff0c 防止sof文件的不对应 转载于 https www cnb
  • 搞定INTEL快速存储技术(用SSD硬盘做缓存加速)

    给朋友买了个联想 ideapad s400 超级本 xff0c 还真是锻炼我的 idea 啊 xff0c 原机不带 WIN7 系统 xff0c 所以只好自己动手装 WIN7 xff0c 并打开 24G SSD 硬盘做缓存 一 用常规方法 G
  • php取今天开始结束,PHP获取今天开始和结束的时间戳

    PHP获取今天开始和结束的时间戳 xff1a t 61 time 开始时间戳 start 61 mktime 0 0 0 date 34 m 34 t date 34 d 34 t date 34 Y 34 t 结束时间戳 end 61 m
  • Java中Semaphore(信号量)的使用

    Semaphore的作用 xff1a 在java中 xff0c 使用了synchronized关键字和Lock锁实现了资源的并发访问控制 xff0c 在同一时间只允许唯一了线程进入临界区访问资源 读锁除外 xff0c 这样子控制的主要目的是
  • git找回丢失的代码

    多人开发时找回丢失的代码 1 先保证所有分支的代码都已经提交并拉取到最新状态 2 最重要的是需要找到最近一条自己代码还存在的记录 xff0c 然后复制到最近的更早一条的提交记录的id xff0c 比如e36e9e76da144536c196
  • Docker容器进入的4种方式

    Docker容器进入的4种方式 在使用Docker创建了容器之后 xff0c 大家比较关心的就是如何进入该容器了 xff0c 其实进入Docker容器有好几多种方式 xff0c 这里我们就讲一下常用的几种进入Docker容器的方法 进入Do
  • HTTP Basic和Digest认证介绍与计算

    一 说明 web用户认证 xff0c 最开始是get提交 43 把用户名密码存放在客户端的cookie中的形式 xff1b 在意识到这样不安全之后逐渐演变成了post提交 43 把用户凭证放到了服务端的session中的形式 xff08 当
  • TeamViewer 的替代品 ZeroTier + NoMachine

    之前不怎么用 TeamViewer xff0c 最近用的多了 xff0c 特别好用 xff0c 有点上瘾 xff0c 在哪儿都能连家里的 RTX xff0c 太棒了 然后它就开始作了 有没有好的替代方案呢 xff1f 有人推荐向日葵 xff
  • Kubernetes tutorial - K8S 官方入门教程 中文翻译

    官方教程 xff0c 共 6 个小节 每一小节的第一部分是知识讲解 xff0c 第二部分是在线测试环境的入口 kubectl 的命令手册 原文地址 1 创建集群 1 1 使用 Minikube 创建集群 Kubernetes 集群 Kube
  • 两年,从纯小白到腾讯阿里,应届非计算机毕业生的2014互联网求职之路

    0 写在前面 以此文 xff0c 献给自己这两年的青葱岁月 xff0c 感谢淘宝的朗英师兄和微博的旭爷 全栈pm莹姐姐 酷炫石女王 以及我逝去的头发 参照Lucida的 9个offer xff0c 12家公司 xff0c 35场面试 一文
  • 在cmd中使用start运行exe文件闪退问题

    如果我们是使用的bat批处理文件来执行某件事 xff0c 我们可以直接使用 k参数 xff0c 或者pause命令来让容器 cmd 执行完文件后不退出 如果我们是在cmd中使用start或其他命令直接执行任务 xff0c 导致当前容器退出
  • GreenPlum 5.0的安装

    基本环境 xff1a serverIPMDW172 16 16 31SDW1172 16 16 34SDW2172 16 16 35 1 xff1a 检查操作系统是否符合要求 xff0c 以及系统设置 我这里使用的系统是CentOS 操作系
  • 转载:Pixhawk源码笔记八:添加新的参数

    转载 xff1a 新浪 64 WalkAnt 第九部分 添加新的参数 英文参考 xff1a http dev ardupilot com wiki code overview adding a new parameter 本节源自 xff1