精华内容
下载资源
问答
  • 树莓派飞控之姿态解算代码流程 ​ 写这篇的时候,目前飞机可以达到在60%的油门下,达到自稳的情况。但是无法悬停,计划把姿态解算相关的代码左下解读。欢迎交流。这里不做数学原理等推导,因为本人才疏学浅。 实验...

    树莓派飞控之姿态解算代码流程

    ​ 写这篇的时候,目前飞机可以达到在60%的油门下,达到自稳的情况。但是无法悬停,计划把姿态解算相关的代码左下解读。欢迎交流。这里不做数学原理等推导,因为本人才疏学浅。

    实验环境

    飞控:树莓派

    传感器:mpu6050,qmc5883l。(都是iic接口驱动)。

    算法:9轴数据融合,转换4元数。最终使用ROLL,PITCH,YAW表示飞控的姿态。

    代码流程

    /* 传感器器件初始化 */
    void sensorsInit(void)
    {
    	  initBoardAlignment();//
        pthread_mutex_init(&state_control, NULL);
    	  gyroInit(500); //
    	  accInit(500); //传感器初始化
        compassInit();//初始化qmc5883l磁力计
    	  if (pthread_create(&sensorsThreadId,NULL, sensorsTask,NULL)) {
    		    _DEBUG(DEBUG_NORMAL, "sensorsThreadId create failed\n");
    	  } else {
    		    _DEBUG(DEBUG_NORMAL, "start sensorsThreadId thread...\n");
    	  }
    }
    
    /*传感器任务*/
    void *sensorsTask(void *arg)
    {
        Axis3f gyro, accel, mag; //float x,y,z的结构体
        _DEBUG(DEBUG_NORMAL, " sensorsThreadId thread...\n");
        struct timeval tv_c;
        struct timeval tv_l;
        float timeDiff=0;
        float tick = 0.0f;
        while (1)
        {
              gettimeofday(&tv_c,NULL);
              timeDiff=GET_SEC_TIMEDIFF(tv_c,tv_l);
              if(timeDiff > 0.001080) {
                    tick += timeDiff;
                    pthread_mutex_lock(&state_control);
                    //_DEBUG(DEBUG_ATTITUDE,"%f\n", timeDiff );
                    gyroUpdate(&gyro);
                    accUpdate(&accel);
                    if((tick - 0.1) > 0.001){//采集频率约10hz
                        compassUpdate(&mag);
                        tick = 0.0f;
                    }
                    sensorData.gyro = gyro;
                    sensorData.acc = accel;
                    sensorData.mag = mag;
                    pthread_mutex_unlock(&state_control);
                    UPDATE_LAST_TIME(tv_c,tv_l);
            } 
            usleep(200);
    	 }
    }
    
    

    ​ 以上代码开启一个采集传感器数据的线程,经过调整,采集的频率可以在800HZ-1000HZ左右,linux的线程无法做到每一次采集的时间都固定,如果有什么好方法,求告知交流。

    ​ sensorData是结构体,全局变量,封装了加速度,陀螺仪,磁力计的共9轴的数据。extern给另外姿态控制的线程使用,这个线程就专门采集需要的原始数据。

    ​ 注意事项,mpu6050,5883L,静止平放的状态下,初始化需要进行去除零偏。采集的频率不宜太低,因为电机高速转动的时候,震动会影响数据的平滑。同样采集的频率也不能超过1000HZ,超过频率R/W传感器,会出错。另外确保iic驱动没有错误,和高效率,开始的时候,用wiringPi库,效率低。

    ​ 目前认为仍然没有做到完美的是,静止输出的时候,在已经减去零偏的情况下,原始数据仍然有0.05左右的误差,理想状态下6050的6轴数据应该为0,目前解决方法是采集到原始数据,经过二阶滤波,下一步解决方案是,加上deadband,把数据做平滑。

    ​ 下一篇写传感器的初始化,采集的流程。滤波的效果等。

    展开全文
  • 最近代码已经整理差不多,开始了漫长的调试,试图在电机转动的时候调节到平衡状态。遇到了飞机震动造成的姿态也随之起伏的问题。...接下来的计划是,把方向也加到飞控调节中,结合PID自动调节,再做测试。
         最近代码已经整理差不多,开始了漫长的调试,试图在电机转动的时候调节到平衡状态。遇到了飞机震动造成的姿态也随之起伏的问题。
         看了下前辈的说法,是飞机共振。需要减震,需要滤波,关于滤波,用的是卡尔漫滤波,目前还没什么好方法解决。而且也不太懂原理。
    

    float pidUpdate(PidObject* pid, const float error)
    {
    float output;

    pid->error = error;   
    
    pid->integ += pid->error * pid->dt;
    
    //»ý·ÖÏÞ·ù
    if (pid->integ > pid->iLimit)
    {
    	pid->integ = pid->iLimit;
    }
    else if (pid->integ < -pid->iLimit)
    {
    	pid->integ = -pid->iLimit;
    }
    
    pid->deriv = (pid->error - pid->prevError) / pid->dt;
    
    pid->outP = pid->kp * pid->error;
    pid->outI = pid->ki * pid->integ;
    pid->outD = pid->kd * pid->deriv;
    
    output = pid->outP + pid->outI + pid->outD;
    
    //Êä³öÏÞ·ù
    if (pid->outputLimit != 0)
    {
    	if (output > pid->outputLimit)
    		output = pid->outputLimit;
    	else if (output < -pid->outputLimit)
    		output = -pid->outputLimit;
    }
    
    pid->prevError = pid->error;
    
    pid->out = output;
    return output;
    

    }
    串级PID代码精髓就这些,大同小异,最关键还是调参数。以下说下对于调整的心得:
    1.内环我觉得是惯性环,就是说保持现有状态不变。当有外力作用变化时候,在合适的参数下,会有一定阻力,阻止飞机的调整。
    2外环我觉得是调节环,就是对差值的调节。
    3调节先调节内环P,I,D,P我只调节到差不多会产生抖动,再加上D,也是差不多抖动了就开始调节外环P,当飞机能出现变化,向着平衡趋势,就微调。
    循环以上的做法,直到感觉有平稳的感觉,所以是XJB调了。
    接下来的计划是,把方向也加到飞控调节中,结合PID自动调节,再做测试。

    展开全文
  • 我昨天在室内试飞过带树莓派飞控了。飞行期间树莓派没有死机,我用另一台电脑远程登上去,然后minicom看了串口收到的数传数据没什么问题。今天晚上打算下楼用gps定点飞行一下。先传个昨天飞完了的照片,视频等今晚...

    我昨天在室内试飞过带树莓派的飞控了(M2.5*4+4)。飞行期间树莓派没有死机,我用另一台电脑远程登上去,然后minicom看了串口收到的数传数据没什么问题。今天晚上打算下楼用gps定点飞行一下。先传个昨天飞完了的照片,视频等今晚室外飞了再传。

     

    昨天家里抓了个老鼠,然后我用热成像仪观察了一下,这是没开灯时的效果,中间红点是老鼠。

    这是开灯的效果,我在老鼠身上也盖了个老鼠板,所以这个热量是透过老鼠板检测到的。中间的红色是老鼠,左下角的红色是上面灯光的反射。

    我这个是用手机的热成像模块拍的,网上也有卖支持linux的热成像模块,同一个公司出的方案,我看了资料可以支持树莓派,这样我可以把它装到飞机上远程回传了。就是有2个问题,一个是分辨率比较低只有80*60,在天上不一定能看清什么,另外价格比较贵在2000左右。

    展开全文
  • MPU6050,QMC5833L,PCA9685,减震板,大疆电机4个,9450桨4个(建议多备),树莓派3b一个。sbus接受,遥控器配对。 硬件说完了,代码框架如下。这里要非常感谢原子哥的开源代码和cleanflight的代码,目前最终的...

    在这里插入图片描述
    螺旋桨刚拆下来,目前已经在调试PID,roll和pitch的自稳效果已经有成效,这大半年来的努力准备要飞起来了,在这里做刚总结。
    目前需要的硬件清单如下:
    MPU6050,QMC5833L,PCA9685,减震板,大疆电机4个,9450桨4个(建议多备),树莓派3b一个。sbus接受,遥控器配对。
    硬件说完了,代码框架如下。这里要非常感谢原子哥的开源代码和cleanflight的代码,目前最终的代码框架就是移植于原子哥的开源飞控。
    在这里插入图片描述主要代码在drivers,fc,flight,sensors,config这几个文件夹中。drivers传感器驱动的代码,fc是遥控器接收,flight是飞控姿态,pid控制,电机输出。sensors传感器采集。

    环境搭建准备

    目前使用到的模块都是iic接口,树莓派默认的iic速率只有100kb/s,速度不够,一次采集的线程需要的时间要10ms,达不到要求。这里需要改下/boot/config.txt,在dtparam=i2c_arm=on,后增加 :i2c_arm_baudrate=1000000,听说树莓派只能支持400kb/s的速率。具体没得测试。重启后,一次采集的时间可以在2ms幅度左右,效果很好。
    其次,树莓派有4个核,需要做些改变准备腾出一个cpu专门跑程序。具体操作,搜索树莓派,实时,这两个关键字,会有提示。在代码里面把程序优先级提到最高的99。到此,准备工作结束。

    最基本的飞控结构

    在这里插入图片描述这是我认为最简单飞控的结构。看过的代码,多数都是在rtos系统上运行的,而且是模块化,这样结构清晰,容易学习。目前移植的原子哥程序,在linux中使用多线程进行数据采集,姿态解算,命令接收等操作。

    调试参数的心得

    1姿态解算的数据需要:6050的6轴,qmc5883l的3轴数据,之后再进行数据融合,但是此前,6050的数据需要经过滤波,还有去除0漂,因为高频震动,数据毛刺会很高,代码中有一个二阶低通滤波,如果采集速率足够高,效果是非常好的。
    2遥控器数据转换到PCA9685的输出,也就是遥控数据驱动电机的转换。
    3最要紧的是PID,目前花的时间最多就是这里,同时飞控的安装结构有需要调整。这样对飞的平稳是很有帮助。

    展开全文
  • 树莓派飞控的四轴无人机

    千次阅读 2020-09-18 14:52:54
    为什么拿树莓派飞控 市面上有很多机遇stm32的现成飞控和教程 我碰巧有做一个无人机的想法,而且手上刚好有树莓派4b一个 树莓派支持pyrhon编程和实时调控 需要准备的材料 电流电压匹配的电机、电调和电池 我选择的...
  • 教程:使用树莓派连接Pixhawk飞控

    万次阅读 多人点赞 2017-09-13 17:09:46
    教程:使用树莓派连接Pixhawk飞控树莓派可以与Pixhawk飞控相连,读取飞控中的状态信息,同时对飞控发送指令。树莓派作为一个更高性能的计算平台,可以运行图像识别、机器学习、实时路径规划等程序,为开源无人机带来...
  • 表现为pixracer一直快速闪黄灯,数传和地面站连不上,mavros也无法读取到飞控的数据。 但是如果用usb线连接电脑和pixracer,则可以连接地面站 这说明树莓派usb口供电能力不足,pixracer还需要单独供电 或者把...
  • 树莓派结合Pixhawk飞控实现四轴双目视觉避障

    千次阅读 多人点赞 2019-04-28 19:56:21
    本文将介绍如何使用树莓派结合PIX飞控实现无人机双目视觉避障的功能。 主要硬件 我们以双目摄像头+树莓派+Pixhawk飞控来实现功能: 双目摄像头与树莓派通过USB接口来连接,树莓派和Pixhawk飞控通过串口来通信。 ...
  • 教程:使用树莓派连接Pixhawk飞控 树莓派可以与Pixhawk飞控相连,读取飞控中的状态信息,同时对飞控发送指令。树莓派作为一个更高性能的计算平台,可以运行图像识别、机器学习、实时路径规划等程序,为开源无人机...
  • 本项目使用手头现有的硬件,旨在将树莓派Zero作为飞控图传使用,本以为会很简单,但是软件适配方面遇到一些问题,困扰了很久。 1. 硬件部分 我们首先来看看硬件列表: Raspberry Pi Zero v1.3 otg table & ...
  • 我写了个串口接收程序,然后仿照c#地面站写了解码的程序,测试下来可以用。...跑下来没问题后可以放到树莓派飞控上试试看。 接下来还要写一个socket转发程序。转发串口数据再解码。 #!/usr/bin/python # coding...
  • 树莓派4B与Pixhawk4飞控之状态监控读取飞控配置树莓派配置程序代码总结 先看看装备,上节就说了,这树莓派的壳子我喜欢 历经九九八十一难,终于把树莓派和Pixhawk4飞控接通了,中间尝试了多种方法,四处碰壁,期间...
  • 你就算是电脑给STM32通过串口烧录程序也是工地的呀对不对,开发板和电脑都是插的同一个插座,或者...所以你树莓派要和飞控串口通信还是得把树莓派弄到无人机的电池上供电才行,或者飞控通过电脑的USB供电。 ...
  • QGC通过网络连接飞控(树莓派+ROS桥接MavLink)

    千次阅读 热门讨论 2018-11-07 12:57:40
    1. 为树莓派刷ubuntu  因为无界面的ubuntu在连接无线,设置自动登录等方面的设置比较复杂,我经过各种百度尝试后,均没有成功,所以我放弃了.转而又刷了ubuntu mate(带界面).然后连接了无线,设置了自动登录,静态IP.自...
  • 树莓派4B之Pc端Qgc地面站与Pixhawk飞控连接 终究是贫穷限制了我的进步,树莓派终究是树莓派。 我已经不准备把目标识别放进树莓派了,所以只能另寻他法。 树莓派只是配置了Dronekit相关库,想要跟Pc地面站连接的话,...
  • 手把手教你 树莓派4b的buster系统 安装ROS与MAVROS 准备:树莓派4b 一个 32G内存卡一个 树莓派官方raspbian buster (我是选择完整桌面版本) 链接:https://www.raspberrypi.org/downloads/raspbian/ win10 连接...
  • 寻找了一段时间,发现Dronekit-Python可以实现脱离遥控器来控制无人机,找到了一些较好的教程,但是中间也踩了一些坑。 先转载一下教程,遇到的哪些坑以后再写
  • stm32悬停飞控已经调试完毕了,接下来要给自己立个flag,要把电脑带上天。 决定带个树莓派上天,然后加上4g模块,以后可能还会带sdr。 打算分三步走: 1.用独立的树莓派标准版,树莓派上接usb串口,然后串口接数...
  • --树莓派安装Dronekit及读取飞控数据 原创 CJKK 苍穹四轴DIY 2020-02-08 前面的2篇教程分别介绍了树莓派在飞行器上的安装 和 ubuntu-mate系统的安装及基本设置。现在我们可以使用笔记本ubuntu终端通过ssh命令远程...

空空如也

空空如也

1 2 3 4 5
收藏数 96
精华内容 38
关键字:

树莓派飞控