搜索
bottom↓
回复: 53

新飞控做好了--就叫老邢飞控吧

[复制链接]

出0入0汤圆

发表于 2015-10-25 17:31:41 | 显示全部楼层 |阅读模式
本帖最后由 golaced 于 2015-10-25 17:58 编辑


渣相机 请护眼!!!!!!!!
先上两张图:

新飞控

自制遥控器,之前还做了个安卓软件可以实时调参和查看姿态高度波形,之后会提供安卓包和通信协议




老版飞控和测试机架
芯片参数是论坛里常用的:
飞控板和导航板器件一样:
主控:STM32F407
IMU:MPU6050 HML5833l MS5611


目前光流已经调整差不多,可以达到基本的定点悬停视频带录制上传,并且正在结合超声波避障进行修改,以后提供详细说明,
实验室是做模式识别的未来会把OPENCV的东西移植到迷你电脑上用小飞机坐机械视觉的东西首先打算将PXflow模块代替掉

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2015-10-25 17:45:03 | 显示全部楼层
你这个是夹心汉堡吗?

出500入8汤圆

发表于 2015-10-25 18:10:04 | 显示全部楼层
图片像素真感人

出0入0汤圆

发表于 2015-10-25 18:12:14 | 显示全部楼层
LZ,拍照前把镜头上的手印擦干净了。

出0入0汤圆

发表于 2015-10-25 18:14:54 | 显示全部楼层
上资料先

出0入0汤圆

发表于 2015-10-25 19:04:34 | 显示全部楼层
大哥你这是拿10多年前的手机穿越到15年来拍照的?

出0入8汤圆

发表于 2015-10-25 19:12:07 | 显示全部楼层
这叫朦胧美。。。。。。。。。。。。。。。

出0入0汤圆

发表于 2015-10-25 19:21:53 | 显示全部楼层
楼主牛叉

出0入0汤圆

发表于 2015-10-25 19:29:55 | 显示全部楼层
看起来感觉不错

出0入0汤圆

发表于 2015-10-25 19:50:36 | 显示全部楼层
画面太美!哈哈!

出0入0汤圆

发表于 2015-10-25 20:00:22 | 显示全部楼层
楼主厉害,可否上传个定点的视频

出0入0汤圆

发表于 2015-10-25 20:04:17 | 显示全部楼层
图片感人!

出0入0汤圆

发表于 2015-10-25 21:00:29 | 显示全部楼层
楼主用什么拍的?

出0入0汤圆

发表于 2015-10-25 21:28:11 | 显示全部楼层
架子好大啊,而且感觉板子好多,好重啊,续航怎么样

出0入0汤圆

发表于 2015-10-25 21:34:52 | 显示全部楼层
治好了多年的老花眼  哈哈

出0入0汤圆

发表于 2015-10-25 21:55:27 | 显示全部楼层
防抄板最好的利器

出0入0汤圆

发表于 2015-10-25 22:22:49 | 显示全部楼层
朦胧美,看着不错...

出0入0汤圆

发表于 2015-10-26 00:33:34 | 显示全部楼层
超级喜欢那几个眼睛,不知楼主能否共享下眼睛的资料

出0入0汤圆

发表于 2015-10-26 07:05:43 | 显示全部楼层
朦朦的

出0入0汤圆

发表于 2015-10-26 08:01:50 | 显示全部楼层
防抄板

出0入0汤圆

发表于 2015-10-26 08:29:47 | 显示全部楼层
膜拜大牛。

接插件真多。

出0入0汤圆

发表于 2015-10-26 08:34:08 | 显示全部楼层
这个DIY高端了,不过还是赞一下图片像素,很感人

出0入0汤圆

发表于 2015-10-26 09:06:19 | 显示全部楼层
牛x,用DMP做的吗?

出0入0汤圆

发表于 2015-10-26 09:50:41 | 显示全部楼层
OPEN CV 好东西啊!!!如果能移植到低成本电脑那就爽歪了!!!!!!!!!11

出0入0汤圆

发表于 2015-10-26 13:15:25 | 显示全部楼层
楼主把十年前的四轴传上来了!

出0入0汤圆

 楼主| 发表于 2015-10-26 15:47:45 来自手机 | 显示全部楼层
yanpenghao 发表于 2015-10-25 21:28
架子好大啊,而且感觉板子好多,好重啊,续航怎么样

450 轴距现在带4S  4200 mah    1.7 公斤飞11
分钟吧

出0入0汤圆

 楼主| 发表于 2015-10-26 15:49:36 来自手机 | 显示全部楼层
yanpenghao 发表于 2015-10-25 21:28
架子好大啊,而且感觉板子好多,好重啊,续航怎么样

450 轴距现在带4S  4200 mah    1.7 公斤飞11
分钟吧  外面那圈是防炸鸡的基本都是它断了桨没断

出0入0汤圆

 楼主| 发表于 2015-10-26 15:54:34 来自手机 | 显示全部楼层
jifei538610 发表于 2015-10-26 00:33
超级喜欢那几个眼睛,不知楼主能否共享下眼睛的资料

就是个3d打印的把超声波模块嵌进去到时候会上传模型

出0入0汤圆

 楼主| 发表于 2015-10-26 15:58:22 来自手机 | 显示全部楼层
hyghyg1234 发表于 2015-10-26 09:06
牛x,用DMP做的吗?

就传统的四元数但是参照惯性导航书上加上了圆锥运动优化和二阶笛卡尔解算  但和arsh那个方法目前看起来没太大区别

出0入0汤圆

 楼主| 发表于 2015-10-26 15:59:56 来自手机 | 显示全部楼层
Dongshan888 发表于 2015-10-25 20:00
楼主厉害,可否上传个定点的视频

这几天比赛视频估计要11月分才有空录了

出0入0汤圆

发表于 2015-10-27 08:57:55 | 显示全部楼层
求细节,膜拜膜拜再膜拜

出0入0汤圆

发表于 2015-10-27 13:59:24 | 显示全部楼层
厉害,膜拜

出0入0汤圆

发表于 2015-10-28 15:19:39 | 显示全部楼层
一个人干的?? 的确牛逼

出0入0汤圆

 楼主| 发表于 2015-11-4 14:07:22 | 显示全部楼层
本帖最后由 golaced 于 2015-11-4 14:54 编辑

2015.11.4 号更新 老邢 上位机和通信协议(施工中)
上位机下载楼主只测试过三星note3其他没有测试不知道能不能装上


登陆界面使用请先选择连接蓝牙模块,楼主使用的链接是https://item.taobao.com/item.htm ... amp;_u=41klsj8999fe或者是手机能搜到的蓝牙转串口模块波特率9600


主界面实时显示姿态角高度和电量等信息,请不要点GPS那块还没有编辑



传感器参数显示界面


PID调参界面,调参利器,通过写入和读出可以查看PID参数是否写入,高度PID那块貌似有BUG请暂时不要使用

飞行模式写入界面


单片机接收程序(注vs16 即int型)
typedef struct PID_STA{u16 OP,OI,OD,IP,II,ID,YP,YI,YD;}PID_STA;

u8 is_lock=1;
u8 EN_FIX_GPSF=0;
u8 EN_FIX_LOCKWF=0;
u8 EN_CONTROL_IMUF=0;
u8 EN_FIX_INSF=0;
u8 EN_FIX_HIGHF=0;
u8 tx_lock=1;
u8 EN_FIX_GPS=0;
u8 EN_FIX_LOCKW=0;
u8 EN_CONTROL_IMU=0;
u8 EN_FIX_INS=0;
u8 EN_FIX_HIGH=0;
u8 EN_TX_GX=1;
u8 EN_TX_AX=1;
u8 EN_TX_HM=1;
u8 EN_TX_YRP=1;
u8 EN_TX_GPS=1;
u8 EN_TX_HIGH=1;
u8 up_load_set=0;
u8 up_load_pid=0;
u8 key_rc[6]={1,1,1,1,1,1};
u16 Yaw_sb_rc=0;

u8 cnt_rst=0,delta_pitch=0,delta_roll=0,delta_yew=0;

PID_STA HPIDt,SPIDt;       
u16 ax,ay,az,gx,gy,gz,hx,hy,hz,YM,PWM1,PWM2,PWM3,PWM4,fix_pit,fix_rol;

u16 bat_fly=840,high_f;
float ypr[3];
double GPS_W,GPS_J;
u8 data_rate,fly_mode;
void Data_Receive_Anl(u8 *data_buf,u8 num)
{
        vs16 rc_value_temp;
        u8 sum = 0;
        u8 i;
        for( i=0;i<(num-1);i++)
                sum += *(data_buf+i);
        if(!(sum==*(data_buf+num-1)))                return;                //判断sum
        if(!(*(data_buf)==0xAA && *(data_buf+1)==0xAF))                return;                //判断帧头
                if(*(data_buf+2)==0xAD)                                                                //判断功能字,=0x8a,为遥控数据
        {
       
        }
        if(*(data_buf+2)==0X01)                                                                //CMD1
        {
                if(*(data_buf+4)==0Xa0)
                        lock_tx = 1;
                else if(*(data_buf+4)==0Xa1)
                        lock_tx = 0;
                else if(*(data_buf+4)==0Xa2)
                        up_load_set = 1;
                else if(*(data_buf+4)==0Xa3)
                        up_load_pid = 1;
  }
                if(*(data_buf+2)==0X03)                                                                //CMD1
        {//飞行模式写入
                (EN_TX_GX)=*(data_buf+4);
                (EN_TX_AX)=*(data_buf+5);
                (EN_TX_HM)=*(data_buf+6);
                (EN_TX_YRP)=*(data_buf+7);
                (EN_TX_GPS)=*(data_buf+8);
                (EN_TX_HIGH)=*(data_buf+9);

                (EN_FIX_GPS)=*(data_buf+10);
                (EN_FIX_LOCKW)=*(data_buf+11);
                (EN_CONTROL_IMU)=*(data_buf+12);
                (EN_FIX_INS)=*(data_buf+13);
                (EN_FIX_HIGH)=*(data_buf+14);
  }
        if(*(data_buf+2)==0x10)                                                                //PID1
        {
                        SPID.OP = (float)((vs16)(*(data_buf+4)<<8)|*(data_buf+5));
                        SPID.OI = (float)((vs16)(*(data_buf+6)<<8)|*(data_buf+7));
                        SPID.OD = (float)((vs16)(*(data_buf+8)<<8)|*(data_buf+9));
                        SPID.IP = (float)((vs16)(*(data_buf+10)<<8)|*(data_buf+11));
                        SPID.II = (float)((vs16)(*(data_buf+12)<<8)|*(data_buf+13));
                        SPID.ID = (float)((vs16)(*(data_buf+14)<<8)|*(data_buf+15));
                        SPID.YP = (float)((vs16)(*(data_buf+16)<<8)|*(data_buf+17));
                        SPID.YI = (float)((vs16)(*(data_buf+18)<<8)|*(data_buf+19));
                        SPID.YD = (float)((vs16)(*(data_buf+20)<<8)|*(data_buf+21));
                }
                        if(*(data_buf+2)==0x11)                                                                //PID2
        {
                        HPID.OP = (float)((vs16)(*(data_buf+4)<<8)|*(data_buf+5));
                        HPID.OI = (float)((vs16)(*(data_buf+6)<<8)|*(data_buf+7));
                        HPID.OD = (float)((vs16)(*(data_buf+8)<<8)|*(data_buf+9));
                }
}



u8 TxBuffer[256];
u8 TxCounter=0;
u8 count=0;

u8 Rx_Buf[256];        //串口接收缓存
u8 RxBuffer[50];
u8 RxState = 0;
u8 RxBufferNum = 0;
u8 RxBufferCnt = 0;
u8 RxLen = 0;
u8 com_data ;
static u8 _data_len = 0,_data_cnt = 0;
void Usart2_IRQ(void)
{
        u8 com_data;
       
        if(USART2->SR & USART_SR_ORE)//ORE中断
        {
                com_data = USART2->DR;
        }

  //接收中断
        if( USART_GetITStatus(USART2,USART_IT_RXNE) )
        {
                USART_ClearITPendingBit(USART2,USART_IT_RXNE);//清除中断标志

                com_data = USART2->DR;
                                if(RxState==0&&com_data==0xAA)
                {
                        RxState=1;
                        RxBuffer[0]=com_data;
                }
                else if(RxState==1&&com_data==0xAF)
                {
                        RxState=2;
                        RxBuffer[1]=com_data;
                }
                else if(RxState==2&&com_data>0&&com_data<0XF1)
                {
                        RxState=3;
                        RxBuffer[2]=com_data;
                }
                else if(RxState==3&&com_data<50)
                {
                        RxState = 4;
                        RxBuffer[3]=com_data;
                        _data_len = com_data;
                        _data_cnt = 0;
                }
                else if(RxState==4&&_data_len>0)
                {
                        _data_len--;
                        RxBuffer[4+_data_cnt++]=com_data;
                        if(_data_len==0)
                                RxState = 5;
                }
                else if(RxState==5)
                {
                        RxState = 0;
                        RxBuffer[4+_data_cnt]=com_data;
                        Data_Receive_Anl(RxBuffer,_data_cnt+5);
                }
                else
                        RxState = 0;
        }
        //发送(进入移位)中断
        if( USART_GetITStatus(USART2,USART_IT_TXE ) )
        {
                               
                USART2->DR = TxBuffer[TxCounter++]; //写DR清除中断标志         
                if(TxCounter == count)
                {
                        USART2->CR1 &= ~USART_CR1_TXEIE;                //关闭TXE(发送中断)中断
                }


                //USART_ClearITPendingBit(USART2,USART_IT_TXE);
        }
}


单片机上传上位机程序(注意飞控使用的参数是SPIDt,需要设置一个标志位将上位机写入的参数SPID赋给 SPIDt)!!!!!!!!!!!!!

void Usart2_Send(unsigned char *DataToSend ,u8 data_num)
{
  u8 i;
        for(i=0;i<data_num;i++)
        {
                TxBuffer[count++] = *(DataToSend+i);
        }

        if(!(USART2->CR1 & USART_CR1_TXEIE))
        {
                USART_ITConfig(USART2, USART_IT_TXE, ENABLE); //打开发送中断
        }

}


void Send_Status(void)
{u8 i;        u8 sum = 0,_temp3;        vs32 _temp2 = 0;        vs16 _temp;u8 data_to_send[50];
        u8 _cnt=0;
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0x01;
        data_to_send[_cnt++]=0;

        _temp = (int)(ypr[0]*100);//Pit
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = (int)(ypr[1]*100);//Rol
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = (int)(ypr[2]*100);//Yaw
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
       _temp3=is_lock;//是否上锁
        data_to_send[_cnt++]=_temp3;
        _temp3=1;//未使用
        data_to_send[_cnt++]=_temp3;
         _temp3=EN_FIX_GPSF;//一些飞控模式标志位
        data_to_send[_cnt++]=_temp3;
        _temp3=EN_FIX_LOCKWF;
        data_to_send[_cnt++]=_temp3;
        _temp3=EN_CONTROL_IMUF;
        data_to_send[_cnt++]=_temp3;
        _temp3=EN_FIX_INSF;
        data_to_send[_cnt++]=_temp3;
        _temp3=EN_FIX_HIGHF;
        data_to_send[_cnt++]=_temp3;

       
       
       
        data_to_send[3] = _cnt-4;
       

        for( i=0;i<_cnt;i++)
                sum += data_to_send;
        data_to_send[_cnt++]=sum;
       
        Usart2_Send(data_to_send, _cnt);
}


void Send_GPS(void)
{u8 i;        u8 sum = 0;u8 data_to_send[50];
        u8 _cnt=0;
                vs32 _temp;        u8 _temp4=0;        float _temp2 =0;        vs16 _temp3=0;
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0x04;
        data_to_send[_cnt++]=0;

        _temp = (vs32)(GPS_W*1000000);
        data_to_send[_cnt++]=BYTE3(_temp);
        data_to_send[_cnt++]=BYTE2(_temp);
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = (vs32)(GPS_J*1000000);
        data_to_send[_cnt++]=BYTE3(_temp);
        data_to_send[_cnt++]=BYTE2(_temp);
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
   //hight
        _temp=(vs32)((float)high_f/10.);//高度mm
        data_to_send[_cnt++]=BYTE3(_temp);
        data_to_send[_cnt++]=BYTE2(_temp);
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp2=0;//未使用
        data_to_send[_cnt++]=BYTE3(_temp2);
        data_to_send[_cnt++]=BYTE2(_temp2);
        data_to_send[_cnt++]=BYTE1(_temp2);
        data_to_send[_cnt++]=BYTE0(_temp2);

        data_to_send[_cnt++]=BYTE1(_temp3);
        data_to_send[_cnt++]=BYTE0(_temp3);
         _temp3=0;
        data_to_send[_cnt++]=BYTE1(_temp3);
        data_to_send[_cnt++]=BYTE0(_temp3);

        data_to_send[_cnt++]=BYTE0(_temp4);
        _temp4=0;
        data_to_send[_cnt++]=BYTE0(_temp4);
       
        data_to_send[3] = _cnt-4;
       

        for( i=0;i<_cnt;i++)
                sum += data_to_send;
        data_to_send[_cnt++]=sum;
       
        Usart2_Send(data_to_send, _cnt);
}

void Send_BAT(void)
{u8 i;        u8 sum = 0;u8 data_to_send[50];
        u8 _cnt=0;
                vs32 _temp;        u8 _temp4=0;        float _temp2 =0;        vs16 _temp3=0;
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0x05;
        data_to_send[_cnt++]=0;

        _temp3 = (int)(bat_fly);//飞控电量 请自己测试缩放比例
        data_to_send[_cnt++]=BYTE1(_temp3);
        data_to_send[_cnt++]=BYTE0(_temp3);
        _temp3 = (int)(Rc_Get.AUX5);//手柄电量
        data_to_send[_cnt++]=BYTE1(_temp3);
        data_to_send[_cnt++]=BYTE0(_temp3);
        _temp3 = (int)(bat_fly);//未使用
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
       
       
        data_to_send[3] = _cnt-4;
       

        for( i=0;i<_cnt;i++)
                sum += data_to_send;
        data_to_send[_cnt++]=sum;
       
        Usart2_Send(data_to_send, _cnt);
}

void Send_Senser(void)
{u8 i;        u8 sum = 0;u8 data_to_send[50];
        u8 _cnt=0;
        vs16 _temp;
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0x08;
        data_to_send[_cnt++]=0;
        _temp = ax;
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = ay;
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = az;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = gx;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = gy;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = gz;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = hx;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = hy;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = hz;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = YM;        //油门量0~1000
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = PWM1;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = PWM2;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = PWM3;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = PWM4;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        data_to_send[3] = _cnt-4;

        for( i=0;i<_cnt;i++)
                sum += data_to_send;
        data_to_send[_cnt++] = sum;
       
        Usart2_Send(data_to_send, _cnt);
}



void Send_PID1(void)
{u8 i;        u8 sum = 0;u8 data_to_send[50];
        u8 _cnt=0;
        vs16 _temp;
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0x06;
        data_to_send[_cnt++]=0;
        _temp = SPIDt.OP;
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = SPIDt.OI;
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = SPIDt.OD;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = SPIDt.IP;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = SPIDt.II;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = SPIDt.ID;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = SPIDt.YP;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = SPIDt.YI;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = SPIDt.YD;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
       
        data_to_send[3] = _cnt-4;

        for( i=0;i<_cnt;i++)
                sum += data_to_send;
        data_to_send[_cnt++] = sum;
       
        Usart2_Send(data_to_send, _cnt);
}


void Send_PID2(void)
{u8 i;        u8 sum = 0;u8 data_to_send[50];
        u8 _cnt=0;
        vs16 _temp;
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0x07;
        data_to_send[_cnt++]=0;
        _temp = HPIDt.OP;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = HPIDt.OI;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = HPIDt.OD;       
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
       
        _temp = fix_pit;        //微调角度
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = fix_rol;        //微调角度
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
       
        data_to_send[3] = _cnt-4;

        for( i=0;i<_cnt;i++)
                sum += data_to_send;
        data_to_send[_cnt++] = sum;
       
        Usart2_Send(data_to_send, _cnt);
}

void Send_Check(u16 check)
{u8 i;        u8 sum = 0;u8 data_to_send[50];
        data_to_send[0]=0xAA;
        data_to_send[1]=0xAA;
        data_to_send[2]=0xF0;
        data_to_send[3]=3;
        data_to_send[4]=0xBA;
       
        data_to_send[5]=BYTE1(check);
        data_to_send[6]=BYTE0(check);

        for( i=0;i<7;i++)
                sum += data_to_send;
       
        data_to_send[7]=sum;

        Usart2_Send(data_to_send, 8);
}



void GOL_LINK_TASK(void)//调用50Hz
{ static u8 flag1=0;
        static u8 cnt = 0;
        switch(cnt)
        {
                case 1:
                        Send_Status();
                        break;
                case 2:
                        if(flag1)
                  Send_BAT();
                        else
                        Send_PID1();
                        break;
                case 3:
                        if(flag1)
                  Send_Senser();
                        else
                        Send_PID2();
                break;
                case 4:
                        Send_GPS();cnt = 0;
                  if(flag1)
                                flag1=0;
                        else
                                flag1=1;
                        break;
                default:cnt = 0;break;               
        }
        cnt++;       
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-11-4 14:50:27 | 显示全部楼层
golaced 发表于 2015-10-26 15:59
这几天比赛视频估计要11月分才有空录了

是国际空中那个吗?

出0入0汤圆

 楼主| 发表于 2015-11-4 14:51:22 | 显示全部楼层
怪侠封沉 发表于 2015-11-4 14:50
是国际空中那个吗?

中航工业杯

出0入0汤圆

 楼主| 发表于 2015-11-4 22:10:40 | 显示全部楼层
更新上位机下载

出0入0汤圆

发表于 2015-11-4 22:50:12 | 显示全部楼层
楼主厉害!

出0入0汤圆

发表于 2015-11-4 23:48:21 | 显示全部楼层
楼主厉害啊!

出0入0汤圆

发表于 2015-11-5 10:38:15 | 显示全部楼层
关注帖子,

出0入0汤圆

 楼主| 发表于 2015-11-8 14:07:45 | 显示全部楼层


自组山寨M100 搭载 OLD-X飞控

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-11-10 11:03:07 | 显示全部楼层
更新 光流定位测试视频 ,死区有点大定位调整不足
http://pan.baidu.com/s/1ntIS4fn

出0入0汤圆

 楼主| 发表于 2015-11-11 10:13:11 | 显示全部楼层
光棍节更新 光流定点视频 http://pan.baidu.com/s/15bO2E

出0入0汤圆

发表于 2015-11-11 10:40:34 | 显示全部楼层
golaced 发表于 2015-11-11 10:13
光棍节更新 光流定点视频 http://pan.baidu.com/s/15bO2E

这个双目是要做立体视觉么?另外,这个地方感觉怎么那么熟悉...北理工6号楼前空地?

出0入0汤圆

 楼主| 发表于 2015-11-11 11:02:38 | 显示全部楼层
dxzky 发表于 2015-11-11 10:40
这个双目是要做立体视觉么?另外,这个地方感觉怎么那么熟悉...北理工6号楼前空地? ...

没 就是下面加了个电脑棒  你也是北理的?

出0入0汤圆

发表于 2015-11-11 11:13:31 | 显示全部楼层
golaced 发表于 2015-11-11 11:02
没 就是下面加了个电脑棒  你也是北理的?

恩,上上周吧,我路过天桥上看人调四轴,是这个么?感觉做的还是挺不错的啊

出0入0汤圆

 楼主| 发表于 2015-11-11 11:28:58 | 显示全部楼层
dxzky 发表于 2015-11-11 11:13
恩,上上周吧,我路过天桥上看人调四轴,是这个么?感觉做的还是挺不错的啊 ...

有可能吧  现在学校搞四轴的挺多 你是自动化的吗

出0入0汤圆

发表于 2015-11-11 11:33:06 | 显示全部楼层
golaced 发表于 2015-11-11 11:28
有可能吧  现在学校搞四轴的挺多 你是自动化的吗

不是,我是四系的

出0入0汤圆

发表于 2015-11-18 17:46:40 | 显示全部楼层
golaced 发表于 2015-11-11 10:13
光棍节更新 光流定点视频 http://pan.baidu.com/s/15bO2E

悬停只是使用的光流,还是光流加超声波?实话效果不错精灵3不过如此。

出0入0汤圆

发表于 2015-11-18 18:32:36 | 显示全部楼层

shaodafu呃呃呃

出0入0汤圆

 楼主| 发表于 2015-11-19 17:45:27 | 显示全部楼层
nca1bd 发表于 2015-11-18 17:46
悬停只是使用的光流,还是光流加超声波?实话效果不错精灵3不过如此。

如果你每次都在同一个高度就可以不加超声波 ,但是那如何定高,悬停是没问题 ,但是移动后快速回到悬停比较难

出0入0汤圆

发表于 2015-12-3 21:54:47 | 显示全部楼层
golaced 发表于 2015-11-19 17:45
如果你每次都在同一个高度就可以不加超声波 ,但是那如何定高,悬停是没问题 ,但是移动后快速回到悬停比 ...

楼主实在高人,理念处处有超远前者的意思,超声波主要是蔽障概念要突出,我觉得现在的超声波应该是从回波的接受面入手,您可以取不同点比较,从反射波角度来判断障碍物的距离和大小,这样会更准确和有效性。我只是瞎想,不知道这样可行?

出0入0汤圆

发表于 2015-12-5 12:14:24 | 显示全部楼层
这个看起来真不错,就是图片差了点

出0入0汤圆

发表于 2017-11-13 13:53:59 | 显示全部楼层
棒!!!向楼主学习!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 08:09

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

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