功能集的执行

由操作手控制系统、视觉系统、触觉、力觉等各子系统的专用CPU来执行的。各个功能都是为了执行由该子系统所指定的机器人基本功能的命令,从并行过程监控来看,功能集占有对于子系统的宏输入输出命令这一位置。并且,各功能由startIO这个监控调用来启动,即:startIOfanction(argument)这个监控调用,将变量和功能执行指令传递给子系统,并将产生这个命令的过程转移到waiting状态,等待功能执行的结束.在子系统方面,被指示的功能处理一结束,对监控的外部中断就发生。监控接受这个中断,并将在waiting状态下处于等待的过程转移到ready状态。从启动功能一直到其结束,这段时闻因各个功能的不同而互不相同。例如,在为了启动移动臂的put-arm-reference这个功能中,仅是把臂的移动目标值置于子系统的目标寄存器,其执行过程在极短时间内完成。与此相对,在对于视觉系统的template-matching这个功能中,从子系统被启动,读进图像数据,进行模块比较,--直到计算取得了一致的模块的种类及其位置和角度后,才发出对监控的结束中断。这两个例子,在处理时间上有很大差别,在put-arm-reference的情况下,由startIO这个监控调用启动之后,我们可以看到虽然一度转移到waiting状态是没有意义的,但和其它功能用同样的方式管理作比较,它却使系统变得单纯。

从并行动作的多个过程上看,常常是有同样功能的执行被同时请求。在这种形况下,关于使用同样输人输出装置的功能的执行,有必要事先进行相互排除。作为前边所说的假想机器人的独立输入输出装置,有臂、手、触觉传感器、力传感器、视觉五个,设这些装置名为semaphore,若利用signal及wait的监控调用,则相互排除很容易实现。例如,put-arm-reference这个功能,将arm这个装置名作为semaphore用,根据下列监控调用序列来实现相互排除。

wait(arm)

startl0put-arm-reference(X,Y,Z,,a,)

signal(arm)

在所有使用put-arm-reference这个功能的情况中,如上所述,若用wait(arm),signal(arm)围置的话,则arm这个装置是能够一次被一个过程使用的,在5.4节中,虽给出种种传感器相互作用的程序示例,但为了将程序的骨架单纯化之后进行说明,省略了

对上述那样相互排除的描述。实际上,为了让程序无矛盾地执行,事先进行相互排除是安全的。

在关于机器人的感觉或行动的程序中,必须考虑实时程序的运动速度。为此,事先追加delay(time)这个监控调用。delay(time)这个监控调用,让过程的执行仅在由time指定的时间内休止。即一旦发生这个监控调用,则监控即把执行中的过程转移到waiting状态,待被指定的时间一到,则发生时间中断,这个过程便从waiting转移到ready.在下节给出的程序示例中,为了控制臂或手的目标值更新定时,使用了delay.


随便看看