本项目使用px4flow模块测速,与飞控的通讯方式为I2C。
安装时因注意光流模块与飞控的方向。
(一) 为什么使用光流模块?
在悬停时,若采用开环控制,由于一些不可控的外界因素,四旋翼会晃动,稳定性不能满足要求。此时可采用速度闭环控制,将x和y方向的速度返回,形成一个位置闭环,保证x和y方向的速度为0,便能消除晃动,增强稳定性。
也可采用位置闭环控制,将x和y的位置变换返回,形成一个位置闭环,保证x和y方向的位置变化为0。
(二) 光流测速,测距,定点原理
当目标物体在摄像机前运动或者摄像机在环境中移动时,目标图像是在发生变化的,图像灰度模式的表面运动就称为光流。简单理解,光流就是通过检测图像中光点和暗点的移动,来判断图像中像素点相对于飞行器的移动速度。
举个例子,当我们做火车时,可以看到窗外的树在不断地向后“流动”,通过树向后流动的速度,我们可以估计当前火车的速度。光流模块就是基于这个原理,检测两帧图像中“树”的相对位置,由于拍摄两帧图片的时间差是固定的,便可以计算出像素点的移动速度。若我们知道“树”和相机的距离,便可以计算当前的实际速度。
测距:对速度进行积分就可以得到位移。
定点:利用光流模块返回的位置信息或者速度信息,形成一个闭环控制,即可实现定点。
(三) Px4flow模块调试步骤
1. 现在并安装Q GroundControl;
2. 用usb线连接电脑和光流模块,QGC会自动检测PX4flow;
3. 烧写固件,一般可以自动在线更新。也可以根据需求烧写自定义的固件;
4. 打开analyze,查看光流模块数据是否正常(水平匀速移动光流模块,看输出值是否稳定);
5. 若上述步骤完成,即可将光流模块连接到飞控板。
(四) 飞控定位思路
1. 分别计算x和y方向的速度误差(目标速度为0)
2. 累计误差(用于积分),累计误差需要限幅(误差无限累计后会造成溢出,导致积分环节出错。比如有符号数溢出,输出突变)
3. 计算PID
output= p* error+ i* error_sum+d*( error- error_old);
4. 输出限幅(防止输出超过pwm的调节范围)
5. 保存当前误差
error_old =error
(五) 代码