视频学习-Pure Data Flow-类的创建
创建类
- 创建类的用于数据访问的VI
- 读取权限,静态或动态访问器
- 类属性-连线外观
创建Xcontrol
- 保存,命名
- 修改VI
使用操作者框架
- 怎样指定异步调用的VI呢?在打开VI引用的“类型说明符引用句柄”端口创建常量
- 然后打开资源管理器,找到想要异步调用的VI,鼠标将此VI拖动到上一步创建的常量处
总结
- 这是一个XControl控件的制作,在制作过程中使用了ACTOR操作者框架,在制作过程中创建了操作者类,消息类及队列,SIN函数创建了一个队列,并调用一个异步线程SIN_LOOP将100个SIN(X)写入消息队列中。
- 注意:这个异步线程SIN_LOOP.Vi可以看作是重写了的操作者核心函数的一个线程,另一个线程是执行一个父方法。
- 异步线程每隔50毫秒向消息队列写入一个消息,写完之后结束操作者,释放队列。
- 在XControl开始执行的时候,它读取一个队列名字,初始化一个队列,这个队列里面存储的元素是操作者的待入队列
- 注意:这个带名字,手动创建的队列是队列的队列。至于在操作者框架中,队列的队列的功能是什么,目前还不太清楚。
- 整个操作者的动能是,核心函数发送消息到队列,DO函数将接受到的消息里的值赋给Wave Form chart的引用的值,从而改变了XControl中控件的值,达到了显示的目的。
与老师交流总结-操作者框架的通用解决框架(专业术语参考Hassan Gomaa.软件建模与设计.机械工业出版社)
- 为每个边界对象创建一个操作者类,操作者作为真实世界外部对象的代理对象
- 子操作者负责显示所代理的外部对象的信息
- 子操作者不一定表示人机交互对象或代理对象,也可以表示实体对象(实体对象存储数据)或算法对象(算法对象存储算法逻辑)
- 子操作者负责输出由其他子操作者发送过来的信息
- 注意:
- 子操作者负责人机交互,信息产生和接受,1)能够接受消息并反馈消息2)能够接受消息并通过人机交互界面3)能够接受消息并输出到外部对象
- 主操作者负责信息决策及消息转发,能够快速将子操作者发送过来的信息转发给特定子操作者,并能够在转发消息之前确定是否马上转发该消息,或者修改消息内容。(本来是执行向前5M的命令,现在变成A向B发送这个命令,但请你现在不要这么做,有一个消息确认位)
- 由上一条可以得到几个指导性意见:
- 需要一个全局环境子操作者,甚至多个环境信息实体对象,用来存储数据或分析数据
- 消息内容应该合理设置,如设置确认位(用作使能位),消息类型位(用来确定主操作者应该需要哪些额外的环境决策信息)(例如,手柄操作,发出消息类型为“基本移动”类消息,消息经过主操作者时,主操作者应该向环境模型操作者发问,询问目标机器人是否能够执行这一基本命令)(高层命令应该在主操作者中决策,底层命令如自我保护,急停等应该在机器人中用行为或事件表示)
- 主操作者应该能够进行科学决策。
- 其实并不一定是主操作者进行所有决策,决策也可以交到子操作者,比如P机器人在遇到障碍时拒绝执行向前移动的信息。
最终规划
- 我要做的事,一方面是软件建模与设计,另一方面是机器人控制系统的核心部分设计,即决策模块。
- 主要参考文献:
- 人工智能机器人学导论
- 软件建模与设计
- 应该要上网查文献
用例建模
- 用例名称:手柄控制P机器人
- 概述:人通过控制手柄来实现机器人基本动作,控制中心要根据地图信息(全局环境模型)的使能来决定是否发送这条信息
- 参与者:客户
- 前置条件:建立连接,手动定义所有参数,如P机器人最大速度,急停障碍距离。
- 主序列:
- 客户提出手动控制P机器人
- 手柄操作者,按一个按钮,切换控制模式,此时在P机器人上也应该切换模式,转为手动控制模式
- 手柄操作者每隔一定时间发送一个手柄状态消息(用轮询还是事件结构?)
- 客户操作手柄,客户可以看到实时图像
- 消息通过主操作者发送到P操作者
- 并发操作:机器人接受到消息时候能够动作,并更新环境模型(矩阵),并环境模型更新地图,机器人移动过程中能够急停
- 机器人接受到消息能够调用DLL动作
- 定时发送坐标消息到环境模型子操作者,环境更新
- 环境模型操作者发送消息到地图操作者,地图更新
- 系统向用户显示环境信息,地图信息,图像信息
- 环境信息由环境模型操作者负责
- 地图信息由地图操作者负责
- 图像信息由P机器人操作者负责
- 可替代序列
- 所有错误暂时不处理
- 所有异常暂时不传递错误消息
- 后置条件:向事件中心注册,机器人开始手动动作?
- 用例分析
- 操作者:手柄操作者,地图操作者,模型信息操作者,机器人操作者
- 机器人操作者要能够做:设置机器人的所有参数,进行状态切换,在界面上显示需要的所有信息,能够向操作者发送指定的状态信息,能够使用行为进行急停。
- 机器人操作者需要确定某一件事,是运行前指定还是运行时指定,是通过控件指定还是对话框指定。