Ardupilot开源代码之Rover上路 - 后续3

Ardupilot开源代码之Rover上路 - 后续3

  • 1. 源由
  • 2. 深度配置
    • 2.1 编码器
    • 2.2 WS2812B LED灯带
    • 2.3 4GLTE超视距
      • 2.3.1 摄像头
      • 2.3.2 QGC OSD虚拟遥控
      • 2.3.3 QGC外接JoyStick遥控
    • 2.4 伴机电脑供电
  • 3. 实测效果
  • 4. 遗留&后续
    • 4.1 设置倒车按钮
    • 4.2 MP无法连接ESP8266
    • 4.3 高精度编码器问题
    • 4.4 OV5647 720P@30FPS 马赛克问题
      • 4.4.1 现象1 -Copter
      • 4.4.2 现象2 - Rover
      • 4.4.3 噪点马赛克现象
        • 光线不足
        • 感光元件质量
        • 数字处理算法
        • 镜头质量
        • 环境因素
        • 解决方法
  • 5. 参考资料

1. 源由

开源项目最主要的问题就是所有配置是开放式的,程序是迭代式开发的。
尤其随着技术的层出不穷,应用领域和范围的不断拓展,深度配置随着情况不同会遇到各种阻碍。

好了,接下来我们就总结下关于几个比较繁琐的配置问题。

2. 深度配置

2.1 编码器

当前APM不支持高精度编码器,由于时序问题会导致APM程序Crash。

注:建议购买此AKM Rover的选用13PPR的编码器。

为此,这里做了一些Work Around:

  1. 将中断允许的额度扩大6倍

Internal Errors 0x2000000 with WheelEncoder – ArduRover 4.5.2

diff --git a/libraries/AP_HAL_ChibiOS/GPIO.cpp b/libraries/AP_HAL_ChibiOS/GPIO.cpp
index f62bd73c27..55c7dd7c55 100644
--- a/libraries/AP_HAL_ChibiOS/GPIO.cpp
+++ b/libraries/AP_HAL_ChibiOS/GPIO.cpp
@@ -601,7 +601,7 @@ void GPIO::timer_tick()// allow 100k interrupts/second max for GPIO interrupt sources, which is// 10k per 100ms call to timer_tick()#if HAVE_GPIO_PINS
-    const uint16_t quota = 10000U;
+    const uint16_t quota = 60000U;for (uint8_t i=0; i<ARRAY_SIZE(_gpio_tab); i++) {if (_gpio_tab[i].isr_quota != 1) {// Reset quota for next tick
  1. 通过算术逻辑,设计欺骗策略

Are these motors compatible with ArduRover 4.5?

在这里插入图片描述

  1. 放弃2轮编码器,降低中断数量

Rover 4.5.2 encoder GPIO interrupt quota increase causing crash dump, any idea?

  1. 配置左轮编码器
S1 – ESC – left motor
S3 – left motor encoder B
S4 – left motor encoder AS2 – ESC – right motor
S5 – right motor encoder B
S6 – right motor encoder AS8 - ground steering servo

在这里插入图片描述在这里插入图片描述

2.2 WS2812B LED灯带

Ardupilot - NeoPixel style WS2812B,灯带参数配置如下:

SERVO13_FUNCTION = 120NTF_LED_BRIGHT = 3
NTF_LED_LEN = 8
NTF_LED_OVERRIDE = 0
NTF_LED_TYPES = 256

在这里插入图片描述

2.3 4GLTE超视距

2.3.1 摄像头

将四轴上的模块整个搬过来:Ardupilot Rpanion 4GLTE 网络性能测试 - 国内中转

2.3.2 QGC OSD虚拟遥控

在这里插入图片描述

2.3.3 QGC外接JoyStick遥控

  • TX12连接手机
  • Rover连接QGC

此时,将会在设备页面增加一个Joystick的选项,进行手柄的设置(基本步骤大家自己根据4个tab页面一个一个过一下吧)。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2.4 伴机电脑供电

之前是采用了一颗14500 850mAH的电池来对RaspberryPi3B+/4GLTE/OV5647供电,工作市场大约20分钟???反正不太够,本次切换到主电源上,由分电板供电。

在这里插入图片描述

3. 实测效果

手机QGC控制,操作有点不稳,大家将就着看看~~~

ArduRover 4.5.2 Rpanion 4G LTE 邻里漫步

ArduRover with Cat

4. 遗留&后续

4.1 设置倒车按钮

类似汽车的操作:

  1. 默认前进挡:深踩油门,加速前进
  2. 挂倒挡:深踩油门,加速后退
  • throttle up from the bottom, speed up and move forward

4.2 MP无法连接ESP8266

虽然EPS32已经是最新的1.2.3版本,但是与MP1.3.81版本仍然连不上。

注:这个问题暂时并不着急,因为已经有伴机电脑连上了,这个小模块就没什么用了。不过后续我们将会跟进下,据反馈可能是模块固件版本是否支持MAVLink2.0的问题。

  • 4.3 DEV can’t connect thru esp8266 wifi
  • ESP8266 WiFi connection
  • 64bit Windows 11 + MP 1.3.81 Can’t UDP connect 8266WiFi module (v1.2.3) #3356

4.3 高精度编码器问题

OpenCTR采用的是STM32 F407,当前采用的H743性能应该远高于407。所以是否有进一步提升的空间,这个可能需要结构代码架构,以及内部设计进行讨论。

但是,这个不影响我们出去浪了。。。。。

  • Internal Errors 0x2000000 with WheelEncoder – ArduRover 4.5.2

4.4 OV5647 720P@30FPS 马赛克问题

遇到一个非常奇怪,但是对于专业人士可能一看就知道问题。摄像头运动、暗场景马赛克现象,下面大家看下一个过程:

4.4.1 现象1 -Copter

  1. 起飞前,静止状态

在这里插入图片描述
2. 起飞移动状态,场景并不是很暗,前面有稍许障碍物,但是出现了马赛克

在这里插入图片描述
3. 继续运动,场景开阔,亮度有所提高,依旧马赛克

在这里插入图片描述
4. 持续一段时间,逐步就没有上述现象了

在这里插入图片描述

4.4.2 现象2 - Rover

  1. 起步前,静态状态,上方隐约有一些暗方块;动态视频持续有

在这里插入图片描述
2. 倒退移动过程中,马赛克方块增多

在这里插入图片描述
3. 移动过程中,右侧暗部较左侧亮部方块更加明显

在这里插入图片描述
4. 该环境持续有马赛克现象

在这里插入图片描述

4.4.3 噪点马赛克现象

摄像头产生噪点和马赛克现象的原因可能有多种,主要包括以下几点:

光线不足
  • 低光环境:在光线不足的环境中,摄像头的感光元件(如CMOS或CCD传感器)需要增加感光度(ISO)来捕捉足够的光线。这会导致图像中出现较多的噪点。
  • ISO过高:提高ISO虽然可以在低光环境中捕捉更多的细节,但也会带来更多的数字噪点,影响图像质量。
感光元件质量
  • 传感器尺寸:较小尺寸的传感器在相同的光线条件下比大尺寸的传感器更容易产生噪点。
  • 传感器技术:较老或低质量的传感器在处理光线时,容易产生更多的噪点。
数字处理算法
  • 噪点处理算法:摄像头内置的噪点处理算法如果不够先进或者设置不当,可能会无法有效地减少噪点,或者在处理噪点时导致图像出现马赛克现象。
  • 压缩算法:图像在压缩过程中,如果压缩率过高,容易出现马赛克现象,特别是在低光或高动态范围的场景中。
镜头质量
  • 镜头光圈:较小的光圈会减少进入传感器的光量,导致低光情况下的噪点增加。
  • 镜头清洁度:镜头表面如果有污渍或灰尘,会影响光线进入传感器的质量,从而导致图像质量下降,出现噪点。
环境因素
  • 温度:传感器在高温环境下工作时,更容易产生噪点。
  • 电磁干扰:周围环境中的电磁干扰也可能影响摄像头的正常工作,导致噪点增加。
解决方法
  • 增加光源:尽可能增加拍摄环境中的光源,减少感光度(ISO)的使用。
  • 选择高质量摄像头:使用传感器和镜头质量更高的摄像头。
  • 使用三脚架:在低光环境中使用三脚架,可以使用较低的ISO和较长的曝光时间,减少噪点。
  • 定期清洁镜头:保持镜头清洁,避免污渍和灰尘影响拍摄质量。
  • 检查摄像头设置:确保摄像头的噪点处理和压缩设置优化。

通过上述方法,可以有效减少摄像头拍摄时出现的噪点和马赛克现象,提升图像质量。

5. 参考资料

【1】Ardupilot开源代码之Rover上路计划
【2】Ardupilot开源代码之Rover上路 - 后续1
【3】Ardupilot开源代码之Rover上路 - 后续2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【知识拓展】ngrok-高性价比的内网穿透工具

前言 使用google colab运行的web应用无法打开进行测试。 第一时间想到是否有相关工具能将内网映射到外网供访问。于是找到了ngrok。 ngrok 是什么&#xff0c;我们为什么要使用它&#xff1f; ngrok官网是一个全球分布的反向代理&#xff0c;无论您在哪里运行&#xff0c;它…

【车载开发系列】Autosar中的VFB

【车载开发系列】Autosar中的VFB # 【车载开发系列】Autosar中的VFB 【车载开发系列】Autosar中的VFB一. 什么是VFB二. VFB的优点与缺点1&#xff09;VFB的缺点2&#xff09;VFB的好处 三. RTE与VFB之间关系四. 总线架构模式 一. 什么是VFB Virtual Functional Bus。它就是虚拟…

解决Vue项目部署到服务器之后前端向后端发送请求报错404的问题(centos使用docker实现nginx的反向代理)

场景重现&#xff1a; 由于现在流行前后端分离的部署方式&#xff0c;但是按照正确方法部署&#xff08;如何部署可参考&#xff1a;&#xff09;之后&#xff0c;发现明明前后端都部署好了并且运行成功&#xff0c;但是前端发送的请求都是404。明明在vue项目中配置了跨域的相…

【Spring Boot】深度复盘在开发搜索引擎项目中重难点的整理,以及遇到的困难和总结

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【Spring Boot】深度复盘在开发搜索引擎项目中重难点的整理&#xff0c;以及遇到的困难和总结 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 什么是搜索引…

AJAX初级

AJAX的概念&#xff1a; 使用浏览器的 XMLHttpRequest 对象 与服务器通信 浏览器网页中&#xff0c;使用 AJAX技术&#xff08;XHR对象&#xff09;发起获取省份列表数据的请求&#xff0c;服务器代码响应准备好的省份列表数据给前端&#xff0c;前端拿到数据数组以后&#xf…

TENT: FULLY TEST-TIME ADAPTATION BY ENTROPY MINIMIZATION--论文笔记

论文笔记 资料 1.代码地址 https://github.com/DequanWang/tent 2.论文地址 https://arxiv.org/abs/2006.10726 1论文摘要的翻译 在这种完全测试时适应的情况下&#xff0c;模型只有测试数据和自身参数。我们建议通过测试熵最小化&#xff08;tent&#xff09;进行适应&…

虚拟化技术[2]之存储虚拟化

存储虚拟化 存储虚拟化简介存储虚拟化一般模型存储虚拟化实现方式基于主机存储虚拟化基于存储设备存储虚拟化基于网络存储虚拟化 案例分析&#xff1a;VMFSVMFS功能 存储虚拟化简介 存储虚拟化&#xff1a;将存储网络中的各个分散且异构的存储设备按照一定的策略映射成一个统一…

C++学习笔记(19)——模板

目录 模板参数与非类型模板参数 模板参数 类型模板参数——传递类型 非类型模板参数——传递数量 C11希望array替代静态数组&#xff0c;但实际上vector包揽了一切 模板总结 优点&#xff1a; 缺点&#xff1a; 模板特化&#xff1a;针对某些类型进行特殊化处理 特化…

P451 try-Catch异常处理

//基本使用演示代码 public static void main(String[] args) { int num1 10; int num2 0; try { int res num1 / num2; }catch (Exception e) { System.out.println(e.getMessage()); } } public class TryCatchDetail { public static void main(String[] args) { //1. 如…

ubuntu20.04 终端 设置字体大小

##ubuntu20.04 Terminal 终端 设置字体大小 ##打开Terminal 终端&#xff0c;点击Preferences设置字体大小 ##点击unnamed选项卡&#xff0c;打钩Custom font 设置 字体大小

三前奏:获取/ 读取/ 评估数据【数据分析】

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 前面的博客 数据分析—技术栈和开发环境搭建 …

二叉树——堆详解

目录 前言&#xff1a; 一、堆的结构 二、向上调整和向下调整 2.1 向上调整 2.2 向下调整 2.3 向上调整和向下调整时间复杂度比较 三、堆的实现 3.1 堆的初始化 3.2 堆的销毁 3.3 堆的插入 3.4堆的删除 3.5 取堆顶元素 3.6 对堆判空 四、堆排序 五、TOP-K 问题 六、代码总…

你真正了解 Java 中的 Date 类吗?以及如何正确使用它

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

pygame raycasting纹理

插值原理 原理 color&#xff08;x&#xff09;(x-x1)/(x2-x1)(color2-color1)color1 x1<x<x2 假如说x伪3 那么color&#xff08;3-x1&#xff09;/(x2-x1)(color2-color1)color 可是图片纹理 这里不需要两种颜色&#xff0c;只需要获得碰撞点坐标后&#xff0c;如果…

安卓玩机搞机技巧综合资源----自己手机制作证件照的几种方法 免费制作证件照

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

ES基础概念

本文不介绍如何使用ES&#xff08;使用ES见&#xff1a;&#xff09; 1.ES生态圈 ES&#xff1a; Logstash&#xff1a;数据处理服务程序&#xff0c;解析转换加工数据&#xff1b; Kibana&#xff1a;数据展示、集群管理&#xff0c;数据可视化、ES管理与监控、报表等&#xf…

Nature期刊的等级和分类

Nature期刊不用过多介绍&#xff0c;学术界人员都对其有所了解&#xff0c;可以和Science&#xff0c;Cell比肩&#xff0c;Nature旗下创办了很多子刊&#xff0c;系列期刊有一百多种&#xff0c;当然其含金量各有不同&#xff0c;nature旗下的期刊等级你是否都了解了。 Nature…

设计模式——概述

1.设计模式定义 ​ 设计模式是软件设计中常见问题的典型解决方案,可用于解决代码中反复出现的设计问题。设计模式的出现可以让我们站在前人的肩膀上&#xff0c;通过一些成熟的设计方案来指导新项目的开发和设计&#xff0c;以便于我们开发出具有更好的灵活性和可扩展性&#…

JAVAEE之线程(10)_线程池、线程池的创建、实现线程池

一 线程池 1.1为什么要有线程池&#xff1f; 线程池顾名思义是由多个线程所组成&#xff0c;作用就是减少线程的建立与销毁&#xff0c;与数据库连接池相同概念&#xff0c;为了减少连接与释放&#xff0c;从而降低消耗提升效率。 1.2 线程池的优势 总体来说&#xff0c;线程…

【数据分析面试】53.推送消息的分布情况(SQL)

题目 我们有两个表&#xff0c;一个是 notification_deliveries 表&#xff0c;另一个是包含 created 和购买 conversion dates 的 users 表。如果用户没有购买&#xff0c;那么 conversion_date 列为 NULL。 编写一个查询&#xff0c;以获取用户转换前的推送通知总数的分布情…