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:
- 将中断允许的额度扩大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
- 通过算术逻辑,设计欺骗策略
Are these motors compatible with ArduRover 4.5?
- 放弃2轮编码器,降低中断数量
Rover 4.5.2 encoder GPIO interrupt quota increase causing crash dump, any idea?
- 配置左轮编码器
S1 – ESC – left motor
S3 – left motor encoder B
S4 – left motor encoder A
S2 – ESC – right motor
S5 – right motor encoder B
S6 – right motor encoder A
S8 - ground steering servo
2.2 WS2812B LED灯带
Ardupilot - NeoPixel style WS2812B,灯带参数配置如下:
SERVO13_FUNCTION = 120
NTF_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 设置倒车按钮
类似汽车的操作:
- 默认前进挡:深踩油门,加速前进
- 挂倒挡:深踩油门,加速后退
- 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
- 起飞前,静止状态
2. 起飞移动状态,场景并不是很暗,前面有稍许障碍物,但是出现了马赛克
3. 继续运动,场景开阔,亮度有所提高,依旧马赛克
4. 持续一段时间,逐步就没有上述现象了
4.4.2 现象2 - Rover
- 起步前,静态状态,上方隐约有一些暗方块;动态视频持续有
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