基于CompactRIO的家居监控机器人
扫描二维码
随时随地手机看文章
选用NI CompactRIO作为机器人的“小脑”。NI CompactRIO是美国NI公司的工业级嵌入式控制器,集成以太网接口和RS232串行接口,具有体积小,高可靠性,高性能,低功耗等优点。
将各种设备的控制算法例如机械臂运动控制,头部运动控制,导航算法,基于以太网的光雷达数据采集,与大脑通讯等程序部署在RT中;将数字信号采集,例如限位开关和紧急停止逻辑还有编码器数据采集和处理,地盘运动伺服控制等算法部署在FPGA中。
选用工业嵌入式触摸平板电脑IPC作为机器人的“大脑”。部署WinCE,具有人机界面功能以及触摸屏交互功能,部署控制人脸识别模块以及语音识别算法,智能家居监控管理算法等。
用FSM来封装每个设备对象:
Finite-state machine (FSM)称为有限状态机广泛用于数字电路和计算机程序。我们使用了两种状态机来封装设备。String Based Queued State Machine基于字符串队列状态机和普通基于枚举的状态机。使用状态机作为一种机制来处理单个设备的状态转换,或者说,用状态机这种行为模型来用于单个设备的事件处理。
图 2 LIDAR 状态机
例如光雷达的状态机框图,它具有4个状态,Idle,Start,Running,Stop。在Running状态中,程序不断向光雷达发送指令读取数据,然后由一个Shared Variable来传出数据。使用一个LIRAR.vi来封装这个状态机。
图 3 Remote Control ReacTIon 状态机
图3是一个远程控制指令解析状态机,它使用String Based Queued State Machine来实现。这样的好处是,可以使用队列来组织动作,较为灵活地实现各种不同组合以及复杂度。
每一个设备的状态机都用一个独立的vi来封装,并且单独进行测试,这样也有利于工程化。
多状态机的协作:
单个状态机只能完成部分功能,我们需要把所有设备状态机集成起来,按照一定的通讯机制拼装成一个完整的机器人。
由于所有的设备状态机都由一个VI来封装,只需要把他们拖入一个主vi中,就能调用他们。如图所示:
图 4状态机集成
状态机之间是通过Shared Variable来实现接受外部指令输入以及自身状态输出的。同样,这些Shared Variable都用一个VI进行封装以便进行管理。
这样,一个状态机便可视为一个子系统。既然是系统,自然有系统的输入和输出,通过get,set等方法的vi,外部系统便可对这些子系统进行操作或者交互。如图所示,底盘状态机使用getCommand.vi方法获取外部命令。
图 5 getCommand.vi
使用setCommand.vi方法让外部系统传输命令给地盘状态机。
图6 MobileBase.lvlib:setCommand.vi
底盘使用sendState.vi发送底盘状态机状态信息。如图所示:
图 7 MobileBase.lvlib.sendState.vi
使用getState.vi方法获取地盘状态机信息。
图 8 getState.vi
导航算法:
图 9家居监控机器人定位导航软件控制框图