搜索
bottom↓
回复: 17

无人机定点悬停,这样可行吗?

[复制链接]

出0入0汤圆

发表于 2019-7-29 19:34:10 | 显示全部楼层 |阅读模式

用遥控器控制无人机时,根据目标位置和当前无人机的位置,不断调整油门和控制左右的遥杆,使无人机基本实现定点悬停(控制效果主要看个人技术),如果能知道无人机的三维坐标,通过算法直接调整调整油门和控制左右的遥杆对应变量的赋值,能否实现自动定位悬停?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2019-7-29 19:50:15 | 显示全部楼层
无人机当不碰遥控器的时候就是悬停

出0入0汤圆

发表于 2019-7-29 19:55:31 | 显示全部楼层
其实问题的关键就是如何实时、准确的获取自己的当前位置。
GPS是米级别的误差,陀螺仪本身有偏置、温漂还会受到震动影响,气压计受温度和气流影响

如何将不同传感器的数据融合到一起,这是个学问
一旦知道自己的位置,就像你说的,控制4个电机就行了,当然,这还是一门学问

出0入0汤圆

 楼主| 发表于 2019-7-29 20:04:10 | 显示全部楼层
JY-MCU 发表于 2019-7-29 19:50
无人机当不碰遥控器的时候就是悬停

我的无人机没有像超声波传感器或者气压计这类可测高的传感器,所以不能实现定高

出0入0汤圆

 楼主| 发表于 2019-7-29 20:07:26 | 显示全部楼层
zgxcom123 发表于 2019-7-29 19:55
其实问题的关键就是如何实时、准确的获取自己的当前位置。
GPS是米级别的误差,陀螺仪本身有偏置、温漂还会 ...

那么关键是实现三维定位,如果在定位实现的前提下,那我的这个想法或者做法是可实现的。可否这样理解?

出0入1074汤圆

发表于 2019-7-29 20:08:52 | 显示全部楼层
记得是要加光流传感器,或UWB之类的辅助站

出0入0汤圆

 楼主| 发表于 2019-7-29 20:12:12 | 显示全部楼层
Himem 发表于 2019-7-29 20:08
记得是要加光流传感器,或UWB之类的辅助站

看到一些论文用光流传感器实现无人机悬停

出0入0汤圆

发表于 2019-7-29 20:21:12 | 显示全部楼层
这个已经很容易了。开源飞控做的很好了。

出0入0汤圆

 楼主| 发表于 2019-7-29 20:22:33 | 显示全部楼层
ttoto 发表于 2019-7-29 20:21
这个已经很容易了。开源飞控做的很好了。

能否给个链接

出5入157汤圆

发表于 2019-7-29 20:28:19 | 显示全部楼层
那个几百架飞行器组成图案的不就是定点吗?

出0入0汤圆

 楼主| 发表于 2019-7-29 20:31:03 | 显示全部楼层
网络攻城师 发表于 2019-7-29 20:28
那个几百架飞行器组成图案的不就是定点吗?

没错,但是不知道是怎么实现的。

出5入157汤圆

发表于 2019-7-29 20:37:34 | 显示全部楼层
余松灿 发表于 2019-7-29 20:31
没错,但是不知道是怎么实现的。

他们有自己的算法吧,不是一般的飞控,每架飞行器相互握手协议?超声波测距?GPS补偿?我也不懂

便宜飞控也就50元起,淘宝一大把,里面就是陀螺仪,能保持平稳,因为四轴多轴,斜了就会飞走,便宜的也能自己静止不动。

还有先进点的带GPS补偿的。比如大疆的,300元起,你要是做什么试验可以买来试试,也有很多开源的飞控

出5入157汤圆

发表于 2019-7-29 20:39:49 | 显示全部楼层
外国好多试验,用预先放置好的多点摄像头检测反馈,在房间里,可以飞各种特技。很炫酷,一个响指,呼拉一群飞行器在你身后,帅的一比

出0入0汤圆

 楼主| 发表于 2019-7-29 20:43:25 | 显示全部楼层
网络攻城师 发表于 2019-7-29 20:37
他们有自己的算法吧,不是一般的飞控,每架飞行器相互握手协议?超声波测距?GPS补偿?我也不懂

便宜飞 ...

我买的飞控188,不能悬停 。起飞之后左右飘。

出5入157汤圆

发表于 2019-7-29 20:50:18 | 显示全部楼层
余松灿 发表于 2019-7-29 20:43
我买的飞控188,不能悬停 。起飞之后左右飘。

你没校准吧?要放平,自检校准啥的,各家都不一样。。你问问卖家,188元不算最差,微风时也不至于乱漂

好几年前玩过四轴,现在不玩了,到处禁飞

出0入0汤圆

 楼主| 发表于 2019-7-29 20:57:45 | 显示全部楼层
网络攻城师 发表于 2019-7-29 20:50
你没校准吧?要放平,自检校准啥的,各家都不一样。。你问问卖家,188元不算最差,微风时也不至于乱漂

...

看来我没买到靠谱的飞控 。它程序是由校准的,而且通过遥控器按键再次校准。卖家告诉如果飞不稳通过遥控器按键调整,比如起飞往前飘,就用按键按几下,再试飞再调整。。。。。。

出0入0汤圆

发表于 2019-7-29 21:02:46 | 显示全部楼层

pixhawk + pxflow

出0入0汤圆

 楼主| 发表于 2019-8-2 11:10:24 | 显示全部楼层
网络攻城师 发表于 2019-7-29 20:50
你没校准吧?要放平,自检校准啥的,各家都不一样。。你问问卖家,188元不算最差,微风时也不至于乱漂

...

在初始化的过程中会调用如下的函数,这个就是校准吧?
void MpuGetOffset(void) //校准
{
        int32_t buffer[6]={0};
        int16_t i;  
        uint8_t k=30;
        const int8_t MAX_GYRO_QUIET = 5;//限制前后两次陀螺仪输出的偏差范围
        const int8_t MIN_GYRO_QUIET = -5;       
/*           wait for calm down                                                                      */
        int16_t LastGyro[3] = {0};
        int16_t ErrorGyro[3];       
        /*           set offset initial to zero                    */
       
        memset(MpuOffset,0,12);
        MpuOffset[2] = 8192;   //set offset from the 8192  因为Z轴静止时也是有值的。
        //在获取参考值时禁止系统调度时钟,即获取到陀螺仪加速度计的参考值之后再开始大循环
       
        //在校准过程中关闭TIM3
        TIM_ITConfig(  //使能或者失能指定的TIM中断
                TIM3, //TIM2
                TIM_IT_Update ,
                DISABLE  //使能
                );       
        while(k--)//30次前后两次输出的偏差都在范围内
        {
                do
                {
                        delay_ms(10);
                        MpuGetData();
                        for(i=0;i<3;i++)
                        {
                                ErrorGyro = pMpu[i+3] - LastGyro;
                                LastGyro = pMpu[i+3];       
                        }                       
                }while ((ErrorGyro[0] >  MAX_GYRO_QUIET )|| (ErrorGyro[0] < MIN_GYRO_QUIET)
                                        ||(ErrorGyro[1] > MAX_GYRO_QUIET )|| (ErrorGyro[1] < MIN_GYRO_QUIET)
                                        ||(ErrorGyro[2] > MAX_GYRO_QUIET )|| (ErrorGyro[2] < MIN_GYRO_QUIET)
                                                );//不在限制范围内则一直循环
        }       

/*     throw first 100  group data and make 256 group average as offset      */       
        for(i=0;i<356;i++)//一共获取356次,舍弃前100次,用后256次的平均值作为参考值
        {               
                MpuGetData();
                if(100 <= i)
                {
                        uint8_t k;
                        for(k=0;k<6;k++)
                        {
                                buffer[k] += pMpu[k];
                        }
                }
        }

        for(i=0;i<6;i++)
        {
                MpuOffset = buffer>>8;
        }
        TIM_ITConfig(  //使能或者失能指定的TIM中断
                TIM3, //TIM2
                TIM_IT_Update ,
                ENABLE  //使能
                );
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-4 17:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表