解决ardupilot中使用UWB每次上电的时候坐标不一样的问题

2023-05-16

解决ardupilot中使用UWB每次上电的时候坐标不一样的问题

ctime:2019-08-02 22:41:07 +0800|1564756867

标签(空格分隔): 技术 飞控


在GCS_Common.cpp中,找到send_local_position函数,这个函数用来发送local_position给树莓派

get_relative_position_NED_home修改为 get_relative_position_NED_origin

后者作用为获取当前的相对坐标,前者中调用了后者,并且减去了_home的偏移坐标,照理来说使用前者应该没问题,但实际使用中发现,他这个_home的偏移似乎有问题,因此干脆不用他这个,自己在后面减去偏移就行了

偏移可从\libraries\AP_NavEKF3\AP_NavEKF3_RngBcnFusion.cpp中获得,在SelectRngBcnFusion函数中,当beacon采集了100个点做了UWB系统中心位置估测后,估测出来的位置就是偏移,即

bcnPosOffsetNED.x = receiverPos.x - stateStruct.position.x;
bcnPosOffsetNED.y = receiverPos.y - stateStruct.position.y;

将这个偏移保存下来,然后减去就是了。这里用的办法比较粗暴,直接设置全局变量off_x,off_y;

off_x=bcnPosOffsetNED.x;
off_y=bcnPosOffsetNED.y;

注意,需在.cpp中定义,
然后在要减去的地方,
写上

extern float off_x,off_y;

减去即可。

为了不破坏ardupilot原本程序的封装,重构了一下。在AP_NavEKF3_core.cpp中,增加一个函数,把偏移量返回:

Vector3f NavEKF3_core::getBcnPosOffsetNED(){   // add by huang canming in 2019.4.17
	return bcnPosOffsetNED;
}

同理,在AP_NavEKF3.cpp中,也需要增加对应代码:

Vector3f NavEKF3::getBcnPosOffsetNED(){  // add by Huangcanming in 2019.4.17
	return core[primary].getBcnPosOffsetNED();
	
}

在各自相应的头文件中,应将函数声明为public

由此,在get_relative_position_NED_origin函数中,就可以调用这些函数来获取偏移,如:

    case EKF_TYPE3: {
			Vector3f off; // add by huang canming in 2019.4.17
            Vector2f posNE;
            float posD;
            if (EKF3.getPosNE(-1,posNE) && EKF3.getPosD(-1,posD)) {
                // position is valid
                off=EKF3.getBcnPosOffsetNED();   // add by huang canming in 2019.4.17
                vec.x = posNE.x-off.x;
                vec.y = posNE.y-off.y;
                vec.z = posD;
                return true;
            }
            return false;
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决ardupilot中使用UWB每次上电的时候坐标不一样的问题 的相关文章

  • ArduPilot之GPS Glitch问题&M8N模块配置

    ArduPilot之GPS Glitch问题 amp M8N模块配置 1 源由2 现象3 视频分析3 1 配置 xff08 不理想 xff09 3 2 配置优化3 3 优化配置 43 短时间 43 3D Lock 43 Glitch3 4
  • Ardupilot之Mavros实现Ros节点控制(二)

    Ardupilot之Mavros实现Ros节点控制 xff08 二 xff09 offboard建立仿真运行 未完成mavros安装及相关设置的参考上一篇文章 Ardupilot之Mavros实现Ros节点控制 xff08 一 xff09
  • ArduPilot之开源代码调试技巧

    ArduPilot之开源代码调试技巧 1 源由2 ArduPilot Code Debugging Part13 ArduPilot Code Debugging Part24 持续更新中 5 参考资料 1 源由 对于如何调试和验证Ardu
  • ArduPilot飞控启动&运行过程简介

    ArduPilot飞控启动 amp 运行过程简介 1 源由2 Copter飞控2 1 入口2 3 运行 main loop 3 Ardunio编程3 1 setup AP Vehicle setup3 2 loop AP Vehicle l
  • Ardupilot EKF3核心算法《气压计,GPS更新融合》

    目录 文章目录 目录 摘要 1 高度融合源的选择 2 GPS的速度和位置测量序列的融合 2 1 得到GPS的观测方程 2 2 得到GPS的观测方程中的H矩阵 2 3 计算卡尔曼增益 2 2 得到GPS的测量数据 2 3 得到GPS的观测噪声
  • Ardupilot 飞控代码解锁流程分析

    摘要 本文档只有记录分析ardupilot飞控代码解锁的过程 如果有分析不到的地方 欢迎批评指导 谢谢 联系方式 18129927205 重点标志变量 flags armed 0表示没有解锁 flags armed 1表示解锁 arming
  • Ardupilot 串口代码学习

    目录 文章目录 目录 摘要 1 串口初始化 1 usb串口初始化 2 其他串口初始化 1 如何设置波特率和协议 2 GPS串口初始化 3 GPS数据更新 1 update instance 摘要 本节主要学习Ardupilot的串口资源代码
  • Ubuntu给Pix2.4.8刷Ardupilot固件

    全文基于waf编译器使用 waf命令 xff0c APM官网对于waf的使用描述 xff1a https github com ArduPilot ardupilot blob master BUILD md 前提 xff1a 已经在ubu
  • ardupilot飞控源码框架认识

    ardupilot飞控源码框架认识 转载 xff1a https blog csdn net csshuke article details 78850898 希望对更多的人有帮助 此篇blog的目的是对px4工程有一个整体认识 xff0c
  • Ardupilot自定义mavlink消息

    在ardupilot modules mavlink message definitions v1 0 commom xml文件结尾处添加自定义消息 lt 20220713WP 添加一个mavlink消息 gt lt message id
  • UWB TDOA一维定位解算

    在某些定位场景 xff0c 比如在隧道 走廊等区域 xff0c 需要用到一维解算 xff0c 下面介绍TDOA的长直线解算定位标签位置 xff08 当然也可以用TWR实现一维解算 xff09 定位模型与已知量如下 xff1a 解算不考虑z坐
  • ArduPilot飞行前检查——PreArm解析

    ArduPilot飞行前检查 主要包括两个部分 1 初始化中遥控器输入检查 xff1b 2 1Hz解锁前检查 附 xff1a 显示地面站信息 参考文章 xff1a Ardupilot Pre Arm安全检查程序分析 1 初始化中遥控器输入检
  • ardupilot在Linux上设置SITL(FlightGear)

    本页介绍如何在Linux上设置SITL xff08 软件在环路中 xff09 特定命令在Ubuntu上从12 10到16 04进行了测试 概观 SITL模拟器允许您在没有任何硬件的情况下运行Plane xff0c Copter或Rover
  • UWB使用教程

    前言 本篇文章主要对淘宝商家给的UWB资料进行整理 xff0c 方便大家快速入门 注重UWB定位模块的使用 xff0c 不解释具体的原理 实现功能 xff1a 搭建UWB基站使用上位机配置参数ROS接受UWB的定位信息修改IMU的STM32
  • 最详细UWB技术及特点介绍

    关注与分享 xff0c 是对原创最大的鼓励 这篇文章偏技术 xff0c 信息偏深 xff0c 建议大家可以先跳到感兴趣的章节阅读 xff1b 01 UWB简介 UWB是Ultra Wide Band缩写 xff0c 来源于很久之前的脉冲通信
  • win7下 pixhawk (ardupilot) 的编译

    前几天都在搞pixhawk源码编译问题 xff0c 什么在window下用Console或者eclipse xff0c 还是在Ubuntu下 xff0c 都做了 xff0c 而且把 mk文件都看了 xff0c 结果还是有bug 总结一下三种
  • ArduPilot飞控之Mission Planner模拟

    ArduPilot飞控之Mission Planner模拟 1 源由2 Mission Planner安装 amp 模拟2 1 安装Mission Planner2 2 Mission Planner模拟 3 注意事项3 1 界面语言设置3
  • SITL Simulator —— ArduPilot —— Windows

    版权声明 xff1a 本文为博主原创博文 xff0c 未经允许不得转载 xff0c 若要转载 xff0c 请说明出处并给出博文链接 参考网页 xff1a http ardupilot org dev docs sitl native on
  • ArduPilot之开源代码框架

    ArduPilot之开源代码框架 1 系统框架2 工程框架2 1 工程目录2 2 代码组成2 3 运行流程 4 硬件传感器总线4 1 I2C4 2 SPI4 3 UART4 4 CAN 5 软件设计概念6 总结7 参考资料 在研读ArduP
  • Ardupilot IMU恒温控制代码学习

    目录 文章目录 目录 摘要 第一章原理图学习 第二章恒温代码学习 1 目标温度怎么设置 摘要 本节主要学习ardupilot的IMU恒温控制代码 采用的飞控是pixhawk v5 欢迎一起交流学习 第一章原理图学习

随机推荐