PX4无人机飞控开发——第4篇:室内定点之光流二

2023-05-16

PX4无人机飞控开发——第4篇:室内定点之光流二

大家好我是Jones,写博客记录一下工作的痕迹,同时也对工作做一个总结,才疏学浅,难免会有很多纰漏,还请大家批评指正!

PX4无人机飞控开发系列

第1篇:仿真工具介绍
第2篇:02RTL返航模式优化
第3篇:室内定点之光流一:PID位置控制
第4篇:室内定点之光流二:EKF融合
第5篇:GAZEBO仿真


文章目录

  • PX4无人机飞控开发——第4篇:室内定点之光流二
    • PX4无人机飞控开发系列
  • 前言
  • 一、模块对比
    • 省略,见第3篇:室内定点之光流一
  • 二、方案实现
    • 1.激光雷达定高
    • 2.读取光流数据
  • 三、飞行测试
  • 总结


前言

无人机在室外飞行时通常我们采用GPS定位,一旦我们飞入室内等GPS有遮挡的环境时,GPS信号就受到了干扰,更新位置会失效。我们想办法让无人机在室内也能够“撒手”飞行,我们今天使用光流的采集无人机移动的速度,进行位移估算,通过速度和位移计算从而达到定点。



一、模块对比

省略,见第3篇:室内定点之光流一

二、方案实现

1.激光雷达定高

省略,见第3篇:室内定点之光流一

2.读取光流数据

订阅TF高度信息:

...
struct distance_sensor_s tfmini;
orb_copy(ORB_ID(distance_sensor), _distance_sensor_sub , &tfmini);
  ...

速度计算方法:(1.0*flow_dat.y/0.04)*100 1.0为高度,单位m; 0.04为间隔时间,单位s,100是m->cm的转换:

...
speed_x = flow_x * 2500.0f * ((int)tfmini.current_distance < 6 ? ((int)tfmini.current_distance <4 ? 2 : 2.5):3);//m-->cm  //1.0f*flow_x/(integration_timespan* 1e-6f);  2m
             speed_y = flow_y * 2500.0f * ((int)tfmini.current_distance < 6 ? ((int)tfmini.current_distance <4 ? 2 : 2.5):3);//m-->cm  //1.0f*flow_y/(integration_timespan* 1e-6f);  2m
 //对速度进行限幅
 speed_x = LIMIT(speed_x, -62.0f, 62.0f);//速度限制在-62cm/s到62cm/s之间
 speed_y = LIMIT(speed_y, -62.0f, 62.0f);

 sum_flow_x += speed_x*0.04f; //位移 cm  //speed_x *(integration_timespan *1e-6f);
 sum_flow_y += speed_y*0.04f; //位移 cm  //speed_y *(integration_timespan *1e-6f);

if(sum_flow_x > POS_CONTROL_LIMIT_MAX|| sum_flow_x < POS_CONTROL_LIMIT_MIN || qual < 245)
        sum_flow_x = 0.0f;
if(sum_flow_y > POS_CONTROL_LIMIT_MAX|| sum_flow_y < POS_CONTROL_LIMIT_MIN || qual < 245)
        sum_flow_y = 0.0f;
  ...

UORB发布光流消息

...
struct optical_flow_s flow;
memset(&flow, 0, sizeof(flow));

flow.timestamp = hrt_absolute_time();
flow.pixel_flow_x_integral = -(float)pixel_flow_y_integral/10000;//对齐方向
flow.pixel_flow_y_integral = (float)pixel_flow_x_integral/10000;

if(flow_pub == NULL)
	{
	   flow_pub = orb_advertise(ORB_ID(optical_flow), &flow);
	}
else
	{
	   orb_publish(ORB_ID(optical_flow), flow_pub, &flow);
	}
..

接着我们在参数设置里将FLOW_EN = 1使能,我们就可以用到EKF融合的位置,进行室内定点飞行了,“撒手”解放双手,提高飞行的安全。且在遥控器断链后依然可以安全进行降落。


三、飞行测试

1.室内光流定点测试

点击跳转->B站:PX4无人机飞控开发_03室内光流定点测试

2.室内遥控器断链自动降落测试

点击跳转->B站:PX4无人机飞控开发_04室内光流定点遥控器断链

3.室内光流定点,系留线对光流的影响测试

点击跳转->B站:PX4无人机飞控开发_05测试线缆对光流定点的影响


总结

第3篇:室内定点之光流一,采用了位置误差作为反馈值进行了位置PID闭环处理,测试定点效果还可以,但出现扰动,无人机位置出现偏移后,该方法将会把新的位置作为基准进行闭环,这样无人机将不会回到最初想设定的位置,存在此不足。
该篇章介绍光流融合的方式进行室内定点,我们采用了取巧的方式,将优象光流数据替换了PX4FLOW是光流数据,EKF融合直接订阅即可,不用修改EKF的融合代码,用最小的修改实现最大的飞行需求,且避免bug,并附上飞行视频,那我们下期见啦!

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

PX4无人机飞控开发——第4篇:室内定点之光流二 的相关文章

  • 轻松理解链表、物联网、uC/OS链表、FREERTOS链表

    先给出链表所用结构体定义 节点结构体定义 struct xLIST ITEM TickType t xItemValue 辅助值 xff0c 用于帮助节点做顺序排列 struct xLIST ITEM pxNext 指向链表下一个节点 st
  • PyQt5--StatusBar

    1 coding utf 8 2 39 39 39 3 Created on Sep 13 2018 4 5 64 author SaShuangYiBing 6 39 39 39 7 import sys 8 from PyQt5 QtW
  • U-BOOT必知必备的一些知识(常用部分)

    1 首先u boot的是干啥的 启动linux系统的 要想启动linux系统 必须初始化跑linux的DDR 一般linux镜像存储在外置存储flash位置 2 u boot从哪里获取 uboot官网有 但是支持少 可以从soc厂商定制版的
  • 以Linux认识的方式写Linux驱动之字符设备驱动

    首先我们需要知道的是Linux内核干了什么我们不关心 xff0c 我们开发驱动程序 xff0c 只关心怎么才能让Linux认识我们的驱动 xff0c 当然 xff0c 对应的驱动也有对应的应用程序 xff0c 否则 xff0c 开发这个驱动
  • 关于linux的filp->private_data解释

    首先给出filp的结构体 xff1a struct file struct file union struct list head fu list 文件对象链表指针linux include linux list h struct rcu
  • 呐,这不就是你要的C++后台开发学习路线吗?

    校招形势 在去年结束的秋季招聘中 xff0c 后台开发或服务器开发的岗位需求一度火热 xff0c 甚至超过了算法岗 不少同学从诸神黄昏的算法岗战场上退下 xff0c 转向更偏向工程能力的后台开发岗 xff0c 从而造成后台开发岗位竞争的大爆
  • 了解这些C++常用库,或许能够帮你找到合适的个人项目!

    缺项目的校招同学 xff0c 或许可以从常用库或框架中寻找能够实现个人项目的题目 文 Amazing 图 Amazing 在求职的时候 xff0c 简历上项目会直接影响能否获得笔 面试机会 但是部分同学在书写简历的时候 xff0c 往往都觉
  • java 打包部署服务器时upd或tcp server接收不到网络调试助手的数据,出现问题的可能性

    这里以upd server端为例子 服务器中的upd接收不到本地网络调试助手发过去的可能大概有以下几种可能 1 网络调试助手中的ip 端口地址没有写好 最好是127 0 0 1 本地IP地址192 168 X X 或者外网地址都试一试 2
  • 9. 对象指针与对象数组

    一 对象指针 声明形式 xff1a 类名 对象指针名 Clock c 8 3 10 Clock ptr ptr 61 amp c 通过指针访问对象成员 xff08 一般类的属性都是封装起来的 xff0c 因此通常是通过指针访问成员函数 xf
  • 使用小觅相机标准入门版运行vins

    文章目录 运行步骤概括详细步骤第一步 xff1a 下载相机驱动并编译第二步 xff1a 下载源码并编译第三步 xff1a 更新源码中的配置文件3 1 获得相机与IMU参数3 2 xff1a 修改源代码的参数文件 第四步 xff1a 运行vi
  • Linux/Centos Mondo 一键部署、镜像恢复,快速部署

    一 简介 Mondo Rescue是一个开源免费的故障恢复和备份工具 xff0c 用户可以轻松地创建系统 xff08 Linux或Windows xff09 克隆或备份的ISO镜像 xff0c 可以将这些镜像存放在CD DVD 磁带 USB
  • 嵌入式实时操作系统uC/os-II(十四)-消息邮箱及其操作

    消息邮箱的定义 把数据缓冲区的指针赋给事件控制块成员 OSEventPtr xff0c 同时使事件控制块的成员 OSEventType 为常数 OS EVENT TYPE MBOX xff0c 则该事件控制块就叫做消息邮箱 消息邮箱的数据结
  • iOS Expected ';' after top level declarator

    项目中编译出现iOS Expected 39 39 after top level declarator 原因 xff1a 未导入UIKit框架 转载于 https www cnblogs com StevenHuSir p 1044602
  • 嵌入式实时操作系统uC/os-II(十四)-消息队列

    消息队列 消息队列由三部分组成 xff1a 事件控制块 消息队列 消息 当事件控制块成员 OSEventType 值为 OS OSEVENT TYPE Q 时 xff0c 该事件控制块代表一个消息队列 消息队列的数据结构如图 6 1所示 从
  • 嵌入式实时操作系统uC/os-II(十六)-信号量集

    信号量定义 uC OS II 提供了可处理多个信号量的信号量集 其实意图如图 7 1 所示 图 7 1 信号量集的示意图 从图中可以看到 xff0c 信号量实质上就是一个多输入 多输出的组合逻辑 其输入为其他任务发出的多个信号 xff0c
  • 基于深度学习的图像识别,实现APP自动打麻将

    互联网改变了我们的生活 xff0c 现在连打麻将都在网上打了 进几年发现身边的很多朋友都在网上玩一款四川麻将APP 平时没事的时候我也玩玩 xff0c 我是一个写了几年程序的码龙 xff0c 突然有一天我有个想法我能不能用我的专业来解放我的
  • PHP常用设计模式

    单例模式 单例模式顾名思义 xff0c 就是只有一个实例 作为对象的创建模式 xff0c 单例模式确保某一个类只有一个实例 xff0c 而且自行实例化并向整个系统提供这个实例 单例模式的特点 xff1a 三私一共 xff1a 1 私有的静态
  • 飞行控制器固件项目-对比介绍(Ardupilot、PX4、LibrePilot、OpenPilot)

    ArduPilot与Pixhawk什么关系 https zhuanlan zhihu com p 109639638 无人机开源项目 8个开源无人机项目 https blog csdn net cuml0912 article detail
  • 各种控制方法在抗干扰方面的区别

    一 由来 自适应控制 AdaptiveControl AC xff1a AC旨在处理由结构参数扰动引起的不良影响 AC的思想是首先在线识别受控系统的模型参数 xff0c 然后根据识别的模型参数调整控制参数以获得良好的性能 AC在处理模型参数
  • 【深入理解】export和module.export的区别

    内部原理 exports 61 module exports 61 exports 是module exports的引用 xff0c 怎么理解这句话呢 xff1f 大概就是 var a 61 var b 61 a a 和 b 之间的区别吧

随机推荐

  • 如何保证Service在后台不被杀死?

    一 前期基础知识储备 xff08 1 xff09 为什么要保证后台Service不被杀死 xff1f 提高应用存在感 对于大厂的应用来说 xff0c 其程序 活着 不是问题 xff0c 但是为了带来更好的用户体验 xff0c 提高用户粘性
  • mybatis generator时碰到的错误及解决办法

    这篇博客简单记录下自己使用mybatis generator时碰到的错误及解决办法 本人是在macOS下进行的下列操作 问题1 mybatis generator Cannot connect to database 解决办法 xff1a
  • C# 编写 WinForm 窗体应用程序(第一期)

    C 编写 WinForm 窗体应用程序 第一期 文章目录 C 编写 WinForm 窗体应用程序 第一期 WinForm窗体应用程序简述C 创建WinForm窗体应用程序C 窗体属性 1 创建一个名为 TestForm 的窗体 2 设置 T
  • npm删除项目所有依赖和清缓存

    清缓存的办法 xff0c 一个是 npm cache verify 还有一个方法npm cache clean force 删除项目所有依赖 npm uninstall 转载于 https www cnblogs com jimaww p
  • 【我的前端】CSS在Windows下实现Mac浏览器滚动条

    Windows实现Mac浏览器滚动条 文章目录 Windows实现Mac浏览器滚动条一 自定义滚动条外观二 滑块与滚动容器之间的间距三 将滚动条悬浮在内容之上四 滚动时才出现五 完整代码六 总结说明 x1f496 x1f496 x1f496
  • python经典案例:抓交通肇事者

    抓交通肇事者 x1f496 x1f496 x1f496 x1f495 x1f495 x1f495 欢迎来到本博客 x1f495 x1f495 x1f495 x1f496 x1f496 x1f496 x1f381 支持 xff1a 如果觉得博
  • 【Python初级人工智能精讲】用Paddlehub给一段没有标点符号的文字加上合适的标点符号

    Python初级人工智能精讲 文章目录 Python初级人工智能精讲一 写在前面二 七步精讲三 模型介绍四 进入实战1 源代码2 运行效果 1 cmd方面 2 txt文件运行前后对比 五 休吃霸王餐六 每日一句 一 写在前面 今天给分享的程
  • 深度解读互联网新时代:Web3.0

    文章目录 深度解读互联网新时代 Web3 0一 Web3 中心化网络的新兴名词二 Web3 全家福 三 Web3 是互联网的货币层四 Web3 是互联网的身份层五 Web3 通过售卖数据来牟利的反击六 Web3 还拥有平台本身的一种方式七
  • 《疫情下的编程岁月》第二章:选择学习语言

    文章目录 第二章 选择学习语言 2 1 常见的编程语言介绍 C语言 C Java Python JavaScript 2 2 选择适合自己的语言 考虑自己的兴趣和目标 了解各种语言的特点 尝试不同的语言 2 3 学习路线的规划 找到适合自己
  • 每日一练c++题目日刊 | 第十期

    文章目录 第一题 xff1a 二维矩阵中的最短路径题目描述输入格式输出格式数据范围输入样例输出样例解题思路 amp C 43 43 题解算法状态转移方程 第二题 xff1a 01 串的满足条件的个数题目描述输入格式输出格式数据范围输入样例输
  • 每日一练c++题目日刊 | 第八期

    文章目录 第一题 xff1a 夏洛克侦案题目描述输入格式输出格式输入样例输出样例解题思路 amp C 43 43 题解 第一题 xff1a 夏洛克侦案 题目描述 福尔摩斯接到了一个任务 xff0c 需要帮助一位富有的英国贵族解决一件谋杀案
  • 00后少年的心力之作(已开源) | heartt(心力算法)

    00后少年的心力之作 已开源 综合性极强的文本摘要算法 heartt 大家好 xff0c 我是 heartt 算法的作者 xff0c 一名热爱编程的学习者 今天 xff0c 我要向大家介绍我的新算法 xff1a heartt 文章目录 一
  • 初读《编程之美》就想秀一下,结果还翻车了

    文章目录 一 前言 二 我的思路 三 Code 四 翻车现场 五 后续问题 一 前言 如何写一个短小的程序 xff0c 让 Windows 的任务管理器显示CPU的占用率为50 这道有趣的面试题我是这两天从 编程之美 电子版中看到的 xff
  • 每日一练c++题目日刊 | 第十二期

    文章目录 第一题题目背景故事题目描述输入描述输出描述输入样例输出样例解题思路C 43 43 参考程序 第二题题目背景故事题目描述输入描述输出描述输入样例输出样例解题思路C 43 43 参考程序 第三题题目背景故事输入描述输出描述输入样例输出
  • 在TypeScript中如何在window上定义对象

    比如我们要在window上定义 Jim 最简单的方法就是将window强制类型转换成any xff0c 但是不推荐 xff01 window as any Jim 61 233 推荐方法 xff1a 在项目中找到 d ts 文件 加上以下代
  • CSDN第25期编程竞赛部分题解报告

    第一题 xff1a 分层遍历二叉树 时间限制 1000ms 内存限制 256M 题目描述 给定一棵二叉树 节点定义如下 structNode span class token punctuation span Node 34 pLeft s
  • PX4飞控导出GPS数据拟合飞行轨迹

    前言 xff1a 想要拟合飞行轨迹 xff0c 百度了一下 xff0c 高人介绍的都是什么百度地图API xff0c 无忧地图 xff0c PYTHON 不是不好 xff0c 是尝试了一下 xff0c 注册非常麻烦 xff0c 结果没拟合出
  • ROS,GAZEBO,PX4视觉仿真

    https gitee com bingobinlw some tree master Overview Simulation Px4 command Slam map image process planning P200 AmovCar
  • PX4无人机飞控开发——第3篇:室内定点之光流一

    PX4无人机飞控开发 第3篇 xff1a 室内定点之光流一 大家好我是Jones 写博客记录一下工作的痕迹 xff0c 同时也对工作做一个总结 xff0c 才疏学浅 xff0c 难免会有很多纰漏 xff0c 还请大家批评指正 PX4无人机飞
  • PX4无人机飞控开发——第4篇:室内定点之光流二

    PX4无人机飞控开发 第4篇 xff1a 室内定点之光流二 大家好我是Jones 写博客记录一下工作的痕迹 xff0c 同时也对工作做一个总结 xff0c 才疏学浅 xff0c 难免会有很多纰漏 xff0c 还请大家批评指正 PX4无人机飞