智能车制作

 找回密码
 注册

扫一扫,访问微社区

楼主: 林夕22
打印 上一主题 下一主题

[软件类] 速度控制的问题

  [复制链接]

4

主题

85

帖子

0

精华

高级会员

Rank: 4

积分
531
威望
362
贡献
99
兑换币
0
注册时间
2012-1-6
在线时间
35 小时
11#
 楼主| 发表于 2012-5-12 11:24:06 | 只看该作者
来电5566 发表于 2012-5-12 00:21
那真的积分不足吧,慢慢的网上加i试试啊,我是这个搞的,和中心值一起改

什么中心值啊?
回复 支持 反对

使用道具 举报

4

主题

85

帖子

0

精华

高级会员

Rank: 4

积分
531
威望
362
贡献
99
兑换币
0
注册时间
2012-1-6
在线时间
35 小时
12#
 楼主| 发表于 2012-5-13 16:10:32 | 只看该作者
Goolloo 发表于 2012-5-12 00:15
是每5ms增加一次修正量,100ms的时候达到一开始计算的修正值是吗?

不是,是每毫秒速度值都在改变,只是不断逼近计算出来的值。、
g_fSpeedControlOut = fValue * (float)(g_nSpeedControlPeriod + 1.0) / (float)100.0 + g_fSpeedControlOutOld;
这个语句没毫秒都在调用,nSpeedControlPeriod 从1加到99,等于99时, g_fSpeedControlOut就等于g_fSpeedControlOutNew了。
回复 支持 反对

使用道具 举报

6

主题

85

帖子

0

精华

高级会员

Rank: 4

积分
500
威望
317
贡献
87
兑换币
0
注册时间
2012-2-1
在线时间
48 小时
毕业学校
重庆工商大学
13#
发表于 2012-5-13 22:13:03 | 只看该作者
林夕22 发表于 2012-5-12 11:24
什么中心值啊?

就是陀螺仪垂直时候的零偏,我是这个搞的,不知道你的行不行啊
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
418
威望
254
贡献
100
兑换币
4
注册时间
2012-1-5
在线时间
32 小时
14#
发表于 2012-5-13 22:44:30 | 只看该作者
我加了速度控制,往一边走能回,往另一边就回补了了,搞的我都开始怀疑直立控制调好了没
回复 支持 反对

使用道具 举报

4

主题

85

帖子

0

精华

高级会员

Rank: 4

积分
531
威望
362
贡献
99
兑换币
0
注册时间
2012-1-6
在线时间
35 小时
15#
 楼主| 发表于 2012-5-14 16:23:46 | 只看该作者
来电5566 发表于 2012-5-13 22:13
就是陀螺仪垂直时候的零偏,我是这个搞的,不知道你的行不行啊

这个值不是确定的吗?要改吗?
回复 支持 反对

使用道具 举报

12

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
989
威望
554
贡献
241
兑换币
51
注册时间
2012-2-24
在线时间
97 小时
16#
发表于 2012-5-14 23:09:04 | 只看该作者
本帖最后由 风少 于 2012-5-14 23:18 编辑
林夕22 发表于 2012-5-11 20:25
由于速度是每 100 毫秒进行一次计算。为了使得速度控制更加平滑,该函数将速度输出变化量平均分配到 20 步 ...


fValue = g_fSpeedControlOutNew - g_fSpeedControlOutOld;
g_fSpeedControlOut = fValue * (g_nSpeedControlPeriod + 1) / SPEED_CONTROL_PERIOD + g_fSpeedControlOutOld;
首先,这个在100ms内 g_fSpeedControlOutNew 和 g_fSpeedControlOutOld应该是不变的吧,还有 g_nSpeedControlPeriod  这个量是干什么的啊?到底具体如何平滑啊?请教……谢谢
回复 支持 反对

使用道具 举报

4

主题

85

帖子

0

精华

高级会员

Rank: 4

积分
531
威望
362
贡献
99
兑换币
0
注册时间
2012-1-6
在线时间
35 小时
17#
 楼主| 发表于 2012-5-15 11:28:33 | 只看该作者
风少 发表于 2012-5-14 23:09
fValue = g_fSpeedControlOutNew - g_fSpeedControlOutOld;
g_fSpeedControlOut = fValue * (g_nSpee ...

这个在100ms内 g_fSpeedControlOutNew 和 g_fSpeedControlOutOld是不变的

g_fSpeedControlOut = fValue * (float)(g_nSpeedControlPeriod + 1.0) / (float)100.0 + g_fSpeedControlOutOld;

这个语句每毫秒都在调用,nSpeedControlPeriod 从1加到99,等于99时, g_fSpeedControlOut就等于g_fSpeedControlOutNew了。()

回复 支持 反对

使用道具 举报

12

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
989
威望
554
贡献
241
兑换币
51
注册时间
2012-2-24
在线时间
97 小时
18#
发表于 2012-5-15 21:06:20 | 只看该作者
林夕22 发表于 2012-5-15 11:28
这个在100ms内 g_fSpeedControlOutNew 和 g_fSpeedControlOutOld是不变的

g_fSpeedControlOut = fValu ...

你是定义的1ms中断是吧,我有个问题就是当100ms的时候,那么1ms中断里面的几乎所有的程序都要被执行(因为不同函数调用的时间都可以被100ms整除),那么这样有可能中断里面的程序还没执行完下一个中断就又开始了,也就是说我不太懂官网上说的定义一个1ms中断,那么5ms,10ms,100ms之类的函数怎么调用啊?请高手指点一下,谢谢!
回复 支持 反对

使用道具 举报

43

主题

256

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1258

优秀会员奖章活跃会员奖章

威望
839
贡献
109
兑换币
2
注册时间
2012-3-22
在线时间
155 小时
19#
发表于 2012-5-15 22:02:05 | 只看该作者
林夕22 发表于 2012-5-15 11:28
这个在100ms内 g_fSpeedControlOutNew 和 g_fSpeedControlOutOld是不变的

g_fSpeedControlOut = fValu ...

nSpeedControlPeriod 从1加到99,等于99时, g_fSpeedControlOut就等于g_fSpeedControlOutNew了。()

那到了99 再让它从1开始循环。还是怎么找?为什么我的加上速度之后总是抖呢?
回复 支持 反对

使用道具 举报

4

主题

85

帖子

0

精华

高级会员

Rank: 4

积分
531
威望
362
贡献
99
兑换币
0
注册时间
2012-1-6
在线时间
35 小时
20#
 楼主| 发表于 2012-5-16 09:19:42 | 只看该作者
风少 发表于 2012-5-15 21:06
你是定义的1ms中断是吧,我有个问题就是当100ms的时候,那么1ms中断里面的几乎所有的程序都要被执行(因为 ...

我的理解是:每个1ms中断里不是所有程序都会执行,只有满足IF条件的时候才会执行。里面的g_n1MSEventCount在累加,定于1执行一个,等于2执行一个,一直大于等于5后然后清零。加起来就是5ms中断。100ms的话就是在每个5ms内计数,没进去一次就加1,等于20的时候就是100ms了。不知道这样有没有说清楚。
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-5-19 07:07 , Processed in 0.042905 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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