有人做过基于状态机的程序架构嘛!交流交流

dch4890164 2009-07-02 12:02:07
加精
最近的一个运动控制项目,应用比较复杂。
特点如下:
1.数据比较多而且零散
2.无法清晰的将系统划分成独立的模块,这个和认识无关,控制系统里有控制耦合的概念,学控制的人知道
但是呢又需要系统中的模块有些时候需要独立处理,有些时候还必须从耦合的角度去处理多个模块
3.程式前一时刻的状态数据和后一时刻的数据相关,正常情况下我们前面执行的数据影响的是后面的,但是这个正好反过来了
前面数据处理还需要知道下一个数据是什么,但是这个时候程序还没有执行到下一条,所以还不知道是什么数据呢!呵呵所以这里肯定需要后台去处理一些事情。比如说我控制电机转180度,再反转90度,有可能要求电机转到135度的时候就开始减速了,所以有可能会有这样的要求:
move(a1,180);
move(a1,-90);
本质上并不是开线程就这么简单了,如果用通用的方法去做是不行的,因为要求是必须执行完第一句才执行第二句,这与现实相符
===========================================================
经过这些天我自己捉摸,始终无法想出很清晰很简单的办法,但是后来发现和OPENGL的需求很像,这个的确是可以用状态机来描述,但问题是我以前没有做过像状态机这种应用程序的框架,而且一般情况下我们要么是面向配方数据,要么是面对功能要求这种既要求配方数据又要求功能的的确是有些复杂
而且我怎么感觉设计模式里的东西怎么和状态机不靠边啊,我甚至硬套都套不进来啊
=====================================================
来大家谈谈想法

...全文
1839 81 打赏 收藏 转发到动态 举报
写回复
用AI写文章
81 条回复
切换为时间正序
请发表友善的回复…
发表回复
liliangke 2011-06-26
  • 打赏
  • 举报
回复
typedef void (*fun)(data* );
struct data
{
data* father; //上一个数据状态(src)
data* mother; //或者抽象为input,输入数据
fun make_fun; //具体的操作函数
int curstate; //是否是当前状态
}
data(father) data(mother | input)
\ /
\ / make_fun()
data(son)

一个简单数据结构描述,可以访问通过当前可以访问上一个状态,生成下一个状态,但是不切换当前状态数据,检测通过,切换到下一个状态,不通过,可以回朔到上一个状态,只描述下思想,我想任何的数据操作都应该是两个数据之间的操作完成,如果需要三个或者更多,当然可以改变结构为输入数据和原数据,但是在实际应用中只能保证前后有限个状态.
infochina2004 2010-03-23
  • 打赏
  • 举报
回复
按照楼主所说你的控制系统应该是一个滞后控制系统,你可以采用控制学上的滞后控制算法来实现。例如景点的PID控制算法。如果你想要进行复杂的运动控制,并且向预测未来的运动控制,建议你采用卡尔曼滤波算法。
AUTOSAR之谜 2009-09-02
  • 打赏
  • 举报
回复
我不知道。。。学习中
maple_zhj 2009-08-19
  • 打赏
  • 举报
回复
话题太广泛了,不懂。
summoneral 2009-07-13
  • 打赏
  • 举报
回复
收藏了,很好
ilovechao1314 2009-07-03
  • 打赏
  • 举报
回复
这个都没听说过,
。。。。。。。。。。。。。。。。。。。。。
jack_lu1 2009-07-03
  • 打赏
  • 举报
回复
支持,学习!
jasonM2008 2009-07-03
  • 打赏
  • 举报
回复
FUCK ,档次差太多了,不懂!
templarzq 2009-07-03
  • 打赏
  • 举报
回复
X = (Y-b)/a
X = sqrt[(Y-b)/a]
templarzq 2009-07-03
  • 打赏
  • 举报
回复
Y = aX +b
Y = aX^2 +b
其中Y是你前一个状态中的值,X是你后一个状态中的值。你可以用全局变量、接口传递,指针之类所有你能想到的方式以最快的速度传递它们就可以了。只要你的计算速度足够快,就可以越精确的模拟反馈系统
xmlxm 2009-07-03
  • 打赏
  • 举报
回复
控制系统没搞过,不过做语音系统时,是采用状态机的思想
qcj0926 2009-07-03
  • 打赏
  • 举报
回复
很好,学习中!
dch4890164 2009-07-02
  • 打赏
  • 举报
回复
呵,早就有人提出来了,可惜太笼统了
http://blog.csdn.net/vincent_lon/archive/2008/11/21/3344428.aspx
现实当中面向对象不一定是最锋利的武器哦
dch4890164 2009-07-02
  • 打赏
  • 举报
回复
耦合是指:
同类型的模块按照某种规则叠加之后所得的新模型
这是我个人理解啊
SimonYeung 2009-07-02
  • 打赏
  • 举报
回复
学习
clever101 2009-07-02
  • 打赏
  • 举报
回复
收藏,以后慢慢看!
dch4890164 2009-07-02
  • 打赏
  • 举报
回复
其实运动控制就是在做矩阵运算
X = AX + B
dch4890164 2009-07-02
  • 打赏
  • 举报
回复
呵呵刚体的运动只有两种 平移和旋转
呵呵你太武断了
zhoujianhei 2009-07-02
  • 打赏
  • 举报
回复
每一种机制都有其试用范围,不可以把开发控制系统的思路用来开发游戏,相反的也不成立。

[Quote=引用 55 楼 jennyvenus 的回复:]
做动作时,要将分散的动作细节连贯起来,是想这样吧。

至少可以判断下一个动作的方向,如果是同向的就继续,如果是反向的就刹车。

[/Quote]

如果仅是为了这样,那么就跟状态机没什么关系,运动控制是讲究算法的,例如可以使用矩阵将电机动作进行叠加。

dch4890164 2009-07-02
  • 打赏
  • 举报
回复
“就像经常听到的,有限状态机(简写为FSM)早就被AI程序员用来实现游戏智能体以体现智能感。你会发现在FSM几乎是所有视频游戏的基础构架”
加载更多回复(61)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧