OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7325|回复: 11

匿名四轴一段程序不太理解,求指教

[复制链接]

8

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2015-12-23
在线时间
38 小时
发表于 2016-3-25 21:45:31 | 显示全部楼层 |阅读模式
5金钱
void CONTROL(float rol_now, float pit_now, float yaw_now, float rol_tar, float pit_tar, float yaw_tar)
{
        u16 moto1=0,moto2=0,moto3=0,moto4=0;
        vs16 throttle;
       
        float rol = rol_tar + rol_now;
        float pit = pit_tar + pit_now;
        float yaw = yaw_tar + yaw_now;
       
        throttle = Rc_Get.THROTTLE - 1000;
        if(throttle<0)        throttle=0;
       
        PID_ROL.IMAX = throttle/2;       
        Get_MxMi(PID_ROL.IMAX,1000,0);
        PID_PIT.IMAX = PID_ROL.IMAX;
       
        PID_ROL.pout = PID_ROL.P * rol;
        PID_PIT.pout = PID_PIT.P * pit;
       
        if(rol_tar*rol_tar<0.1 && pit_tar*pit_tar<0.1 && rol_now*rol_now<30 && pit_now*pit_now<30 && throttle>300)
        {
                PID_ROL.iout += PID_ROL.I * rol;
                PID_PIT.iout += PID_PIT.I * pit;
                PID_ROL.iout = Get_MxMi(PID_ROL.iout,PID_ROL.IMAX,-PID_ROL.IMAX);
                PID_PIT.iout = Get_MxMi(PID_PIT.iout,PID_PIT.IMAX,-PID_PIT.IMAX);
        }
        else if(throttle<200)
        {
                PID_ROL.iout = 0;
                PID_PIT.iout = 0;
        }
       
        PID_ROL.dout = PID_ROL.D * MPU6050_GYRO_LAST.X;
        PID_PIT.dout = PID_PIT.D * MPU6050_GYRO_LAST.Y;
       
        PID_YAW.pout = PID_YAW.P * yaw;
        vs16 yaw_d;
        if(1480>Rc_Get.YAW || Rc_Get.YAW>1520)
        {
                yaw_d = MPU6050_GYRO_LAST.Z + (Rc_Get.YAW-1500)*10;
                GYRO_I.Z = 0;
        }
        else
                yaw_d = MPU6050_GYRO_LAST.Z;
        PID_YAW.dout = PID_YAW.D * yaw_d;
       
        PID_ROL.OUT = PID_ROL.pout + PID_ROL.iout + PID_ROL.dout;
        PID_PIT.OUT = PID_PIT.pout + PID_PIT.iout + PID_PIT.dout;
        PID_YAW.OUT = PID_YAW.pout + PID_YAW.iout + PID_YAW.dout;
       
        if(throttle>200)
        {
                moto1 = throttle - PID_ROL.OUT - PID_PIT.OUT + PID_YAW.OUT;
                moto2 = throttle + PID_ROL.OUT - PID_PIT.OUT - PID_YAW.OUT;
                moto3 = throttle + PID_ROL.OUT + PID_PIT.OUT + PID_YAW.OUT;
                moto4 = throttle - PID_ROL.OUT + PID_PIT.OUT - PID_YAW.OUT;
        }
        else
        {
                moto1 = 0;
                moto2 = 0;
                moto3 = 0;
                moto4 = 0;
        }
        if(ARMED)        Moto_PwmRflash(moto1,moto2,moto3,moto4);
        else                        Moto_PwmRflash(0,0,0,0);
}
在上面这段程序里面为什么rol,pit,yaw,要等与后面那两项相加呢?PID的操控不是应该跟误差有关吗?(rol_tar,pit_tar,yaw_tar为目标角度(或是与现在的差值?),rol_now,pit_now,yaw_now为当前角度)




希望能够得到大家帮助,谢谢大家了!!!

最佳答案

查看完整内容[请看2#楼]

好吧,确实是,两者符号相反,其实是偏差值
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2015-12-23
在线时间
38 小时
 楼主| 发表于 2016-3-25 21:45:32 | 显示全部楼层
745021926 发表于 2016-3-25 22:10
打个断点仿真下,看看正负号

好吧,确实是,两者符号相反,其实是偏差值
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2016-3-25 22:00:29 | 显示全部楼层
float rol = rol_tar + rol_now;
        float pit = pit_tar + pit_now;
        float yaw = yaw_tar + yaw_now;

按道理说这个确实应该是减号....
博观而约取,厚积而薄发。
回复

使用道具 举报

8

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2015-12-23
在线时间
38 小时
 楼主| 发表于 2016-3-25 22:07:44 | 显示全部楼层
745021926 发表于 2016-3-25 22:00
float rol = rol_tar + rol_now;
        float pit = pit_tar + pit_now;
        float yaw = yaw_tar  ...

他的那个视频讲解也跳过了这个部分
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2016-3-25 22:10:39 | 显示全部楼层
陈俣 发表于 2016-3-25 22:07
他的那个视频讲解也跳过了这个部分

打个断点仿真下,看看正负号
博观而约取,厚积而薄发。
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2016-3-26
在线时间
2 小时
发表于 2016-3-26 13:42:53 | 显示全部楼层
您好,您有匿名的源代码,可以分享一下么,感激不尽。547420883@qq.com
谢谢大神!!!!
回复

使用道具 举报

8

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2015-12-23
在线时间
38 小时
 楼主| 发表于 2016-3-26 15:08:47 | 显示全部楼层
5474208833 发表于 2016-3-26 13:42
您好,您有匿名的源代码,可以分享一下么,感激不尽。
谢谢大神!!!!

已发送,注意查收
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-2-27
在线时间
8 小时
发表于 2017-3-30 09:16:35 | 显示全部楼层
陈俣 发表于 2016-3-25 22:07
他的那个视频讲解也跳过了这个部分

你好,能否给我也发一份匿名的源代码,现在移植上位机老是出问题,想参考一下,969878365@qq.com 感激不尽
回复

使用道具 举报

3

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2017-3-18
在线时间
87 小时
发表于 2017-3-30 18:06:32 | 显示全部楼层
你好 ,能不能也给我发一份匿名的代码?1780502317@qq.com     ,    万分感谢!!!
回复

使用道具 举报

陈大帅哥 该用户已被删除
发表于 2017-4-1 17:24:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

Smithereens 该用户已被删除
发表于 2017-4-10 16:54:03 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

37

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2016-6-10
在线时间
191 小时
发表于 2017-4-10 17:23:36 | 显示全部楼层
大哥,我也觉得应该是减号,为什么两者符号就相反了呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 22:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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