Ardupliot飞控PID等参数加密屏蔽方法(针对Mission Planner的刷新参数等功能)

2023-05-16

当辛辛苦苦调试OK的参数,被别人连上飞地面站后轻松获取,是不是有点难受?本文针对四旋翼Copter4.0.7和(4.1.5)最新版本调试了两个加密方法。

4.0.7固件

在对4.0.7版本的加密过程中,主要参考了MAVLINK消息在Ardupilot中的接收和发送过程并结合MAVLINK协议定位了源码的位置。

调试原理:通过飞控与地面站之间的MAVLINK传输协议中的msgid进行代码的定位。
调试方法:通过在源码中添加send_text函数在Mission Planner对关键信息进行打印。

通过解析,有两种思路对参数进行屏蔽:

  • 1.改飞控的接受参数:在GCS_Param.cpp中,改存数据(handle_common_message()(GCS_Common.cpp)->handle_common_param_message() -> handle_param_request_list()函数中)
  • 2.改飞控的发送参数:在GCS_Common.cpp文件中,try_send_message()函数中通过对message_id进行switch-case判断跳转至在GCS_Param.cpp中的queued_param_send()函数中对改好的数据结构进行发送
  • 在源码中,飞控的接受函数的msg.msgid(MAVLINK_MSG_ID_PARAM_REQUEST_LIST)是通过memcpy函数将参数列表进行复制,如下图所示。
    在这里插入图片描述
    而飞控的发送函数中,根据调试打印的messageId(MSG_NEXT_PARAM)定位到GCS_Param.cpp中的GCS_MAVLINK::queued_param_send()函数
    在这里插入图片描述
    关键的发送参数信息定位到71~91行
    在这里插入图片描述
    内联函数mavlink_msg_param_value_send()中的
    param_name
    即为MP中的参数名字;
    _queued_parameter->cast_to_float(_queued_parameter_type)为将参数强转为浮点型后输出。如果屏蔽所有参数只需将该参数改为float(0)即可,如下图所示。
    在这里插入图片描述
    效果如下图所示。
    在这里插入图片描述
    如果对参数进行部分屏蔽,可以通过if-else分支判断结构对param_name进行字符串对比(strcmp)后执行。

----------------------------------------------------------------------分割线------------------------------------------------------------------------------

4.1.5固件

在4.1.5中使用4.0.7同样的方法修改后却不能奏效。

观察发现,新版本的固件在MP中表现之一为刷新参数速度跟之前版本比快很多,不需要挨个参数进行读取。
交流后得知,不同版本的MP会对该修改有不同的表现,如1.3.74的表现为第一次连接飞控后可读出参数,点击“刷新参数”后所有参数变为0;1.3.76版本则一直可读出参数。因此作者选择将MP更新至最新版本后统一查找问题原因。毕竟最新版飞控固件应该是和最新版上位机MP配套使用的~

Latest版本在按下“刷新参数”按键后,弹出的对话框中的内容如下图所示,出现了一个@PARAM/param.pck,意思是表示从该文件中获取参数。
在这里插入图片描述
在VSCode中对该工程中进行搜索该参数,如下图所示。
在这里插入图片描述
可以知道,新版固件文件系统提供了一个@PARAM.pck文件。是完整参数列表的压缩,通过该接口下载完整的参数列表比使用传统的MAVLINK参数消息快得多。
在这里插入图片描述
屏蔽掉"param.pck"文件的查找,直接返回false,程序会随即去调用4.0.7版本中的queued_param_send()函数去逐个读取参数,如上图所示。
如下图所示,屏蔽其他有效传输参数的代码同样可以实现效果。

在这里插入图片描述

如果想保持快速读取参数的同时屏蔽参数,需要在具体的文件写入或参数读取时对数组(replay.data等)进行字节分辨,改变具体的参数所在字节。

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

Ardupliot飞控PID等参数加密屏蔽方法(针对Mission Planner的刷新参数等功能) 的相关文章

随机推荐

  • Ubuntu下安装ROS以及使用ROS读取T265、D435i数据

    安装ROS xff1a ROS Melodic安装 智学无人小车平台 czxy com 创建ROS工作空间 xff1a 14条消息 ROS学习 第3篇 xff1a ROS基础 创建工作空间 北理工 王大东的博客 CSDN博客 ros创建工作
  • 9 AI系统伦理道德风险之权力谋取验证

    权力谋取主要评估AI是否在为了达到目的而不择手段 xff0c 这也是伦理道德性的重要指标 xff0c 需要通过有效的监督和制约机制来防止或减轻 权利谋取就是AI系统为自己谋取利益 xff0c 这里的利益是站在AI系统角度一些利益 测试权力谋
  • Python中的下划线到底什么意思?

    1 概述 在Python经常能见到含下划线 xff08 underscore xff09 修饰的的变量和方法 xff08 如 name xff0c var等 xff09 xff0c 这些下划线的作用称之为名字修饰 xff08 name de
  • Ubuntu远程,解决rviz无法在远程桌面下使用

    Ubuntu下远程桌面无法使用rviz 解决原理解释 将启动文件加入bash xff0c 避免每次export 具体操作 xff1a 1 检查主机与移动端机器的IP 主机IP 192 168 31 193 主机名 ada 也可使用ada l
  • 一个例子"入坑"布谷鸟算法(附完整py代码)

    布谷鸟是比较新的启发式最优化算法 但其与传统的遗传算法 退火算法等相比 被证明收敛速度更快 计算效率更高 文章目录 本文诞生的缘由布谷鸟算法思想简介更新位置的方式莱维飞行局部随机行走 抛出个栗子一些参数的建议完整的python实现运行结果参
  • python 实现批量post json数据测试

    服务器之前经常出现发消息就会宕机 xff0c 今天修改了部分之后 xff0c 就用python实现了一个批量post数据测试 直接上代码 url 是测试版 xff0c 你看到这份代码的时候 xff0c 应该已经不能用了 xff0c 童鞋需要
  • Linux —— 信号量

    目录 一 POSIX信号量 1 什么是信号量 2 信号量的基本原理 二 与信号量相关的操作 1 初始化信号量 2 销毁信号量 3 等待信号量 4 发布信号量 三 基于环形队列的生产者消费者模型 1 空间资源和数据资源 2 生产者和消费者申请
  • 记录学习crazepony飞控

    记录学习crazepony 开始之前 xff0c 弱弱的问一句 xff1a 大佬们你们是怎么学习飞控的呢 xff1f 如何抓住核心 xff1f 函数来回调 xff0c 变量在你不知道的地方悄悄改变着 如何才能清晰的知道如何理顺思路 xff0
  • 操作系统——中断

    操作系统是中断驱动的 计算机开机之后 xff0c 导引程序会把操作系统装入内存 xff0c 在完成一系列初始化之后 xff0c 操作系统就处于待命状态 xff0c 等待中断和系统调用 xff08 特殊的中断 xff09 xff0c 所以操作
  • 嵌入式 视频播放的基本原理

    当初看VLC代码花了不少时间 xff0c 其中很大的原因是不太了解视频播放的基本原理 现在看来 xff0c 几乎所有的视频播放器 xff0c 如VLC MPlayer Xine xff0c 包括DirectShow xff0c 在播放视频的
  • C 指针 数组 字符(串)

    首先看下C中的字符串是怎么定义的 参考链接 xff08 https m runoob com cprogramming c strings html ivk sa 61 1024320u xff09 在 C 语言中 xff0c 字符串实际上
  • 10 Model Card 保证AI模型伦理道德的好工具

    伦理道德的六个方面中每一个方面的验证都需要收集很多问题 想要通过一次性的收集整理还是很难覆盖全部的伦理道德的验证内容 所以我们应该通过有效的手段从模型建立之初就开始着手收集关于AI系统的各种信息 为伦理道德的验证提供更全面的输入和参考 Go
  • 2D Nav Goal无法使用 或 rviz-gazebo数据交互出问题

    报错一导致2D Nav Goal无法使用 xff1a 一 move base 4 process has died pid 51240 exit code 11 cmd opt ros noetic lib move base move b
  • ROS当中TF坐标系是怎么发布和管理的

    一 ROS坐标系的发布 千言万语离不开一句话tfBroadcaster sendTransform odomTrans 1 其中tfBroadcaster为专门用来发布广播的对象 需要进行这样的声明tf TransformBroadcast
  • open-embeded meta-ros

    open embeded meta ros 准备工作 ROS Robot Operating System xff09 是一个机器人软件平台 xff0c 它能为异质计算机集群提供类似操作系统的功能 ROS的前身是斯坦福人工智能实验室为了支持
  • linux下安装nodejs及npm

    如果安装nodejs和npm时 xff0c 很容易遇到npm不能匹配nodejs的版本 通过https nodejs org zh cn download releases 可以看到nodejs和npm的版本对应关系 下面的方法可以直接安装
  • vue-element-admin的二次开发

    最近也是完成了公司招聘管理系统后台的前端开发 xff0c 项目已经开始测试了近期估计就会交付使用 一直是一个人在做 xff0c 配合两个后端 xff0c 说实话这种从很多不会到一个个独立debug解决问题到最后终于完成项目的感觉真的太有成就
  • 烧写APM板的bootloader

    所需工具材料 xff1a 1 一个AVRusbasp编程器以及相应的烧写软件 xff0c 推荐progisp1 72下载链接https download csdn net download sky7723 12477620 2 AVR的US
  • APM_V2.8.0的改进说明

    APM V2 8 0版基于3DR公司出的V2 5 2版优化设计而来 xff0c 硬件功能跟V2 5 2一样 xff0c 尺寸也一样 xff0c 仍旧可以使用2 52版的外壳 不同的是V2 8 0版针对内部电路设计BUG做了改进 xff0c
  • Ardupliot飞控PID等参数加密屏蔽方法(针对Mission Planner的刷新参数等功能)

    当辛辛苦苦调试OK的参数 xff0c 被别人连上飞地面站后轻松获取 xff0c 是不是有点难受 xff1f 本文针对四旋翼Copter4 0 7和 xff08 4 1 5 xff09 最新版本调试了两个加密方法 4 0 7固件 在对4 0