构建思路,走通一条路
- 手柄控制,控制机器人动作,机器人同时传回数据,主操作者根据传回的数据更新地图。
更新地图
- 主操作者初始化地图
- A操作者发消息
- 主操作者更新(坐标示例:100,-50)
- 主操作者收到数据就更新
- 主操作者发现数据不一样才更新
- 主操作者更新,是在核心中计算并更新UI还是在消息类中计算,在核心中更新?
- 如果在核心中计算
- A操作者每隔一个时间间隔发送消息,主操作者接受到消息的DO仅仅是将消息写入到robot position cluster控件中,(更新坐标数据)而由核心函数进行计算和更新
- 这样的好处是,所有计算都在主操作者核心中,不用设计主操作者类的数据成员。不足是核心函数将变得很庞大
- 而且while循环更新频率不知道怎么确定
- 如果在消息处理函数DO中计算
- DO中需要处理主操作者类的数据成员,即所有关于地图的计算数据都要放入到主操作者类中,这个有点麻烦,而且程序不可读。
- 在DO中计算完后,只需更新图片控件引用即可
- 先在核心中计算吧,简单一些
在核心中计算
- 修改A核心函数
- 调用了主操作者的LOG EVENT MESSAGE 消息的 send 函数,需要传入robot position cluster 数据
- 修改主操作者的消息类的数据结构,添加robot position cluster
- 修改此消息的 send 函数,此时会发现消息自动解绑,多了一个 robot positon cluster
- 调用此消息的 send 函数
- 至此,发送端已经构造完毕
- 注意:A核心函数中确保调用“读取调用方待入队列”函数;
- 注意:已知问题会产生。当A操作者和B操作者同时发送同一消息时,比如send log event.vi,会导致主操作者UI结束后,其他操作者程序不能结束。
- 修改主操作者核心
- 主操作者收到消息后会调用DO.VI,所以会修改DO.VI
- DO.VI调用成员函数 log event.vi 函数
- 修改DO.VI,添加 robot position cluster 数据的解绑
- 修改主操作者的数据结构,创建UI控件及引用
- 在主操作者核心中创建robot position cluster 控件
- 在主操作者数据结构中添加引用
- 怎样创建控件的引用
- 在函数面板上创建簇控件的引用,右击簇引用的输出端口,创建输出控件,然后右击生成的输出控件,转换为输入控件
- 到前面板,将这个输入控件剪切到*.ctl中
- 修改LOG EVENT.VI ,用输入的robot position 来修改UI控件
- 利用“引用”功能
- 复制引用的“value”属性,直接将输入簇的值写入引用的value属性中,达到修改的目的
- 此时可以收到不断改变的坐标数据,在主操作者UI上添加一个循环,更新地图即可
- 先在TEST.VI上面做一个试验,再将程序框图复制到主操作者核心函数中
- 使用局部变量读取收到的robot position cluster 数据,在循环中更新地图控件
- 改进
- 使用通知器来同步线程,而不是用两个高速循环,这样太消耗计算机资源
- 考虑在子操作者中完成计算任务,主操作者只是将子操作者的前面板载入
- 到底是在DO中完成计算任务,还是在核心函数中完成计算任务?
下一步作业
2015/10/29 9:35
规划
- 主操作者不作UI显示,只作为数据决策和消息传递(传递子操作者发送过来的数据)
- 主操作者只作传递消息只用,不做UI显示,可能会做一点点初始化的运算(命令解释?)。
- 在下文中,当我们讲某子操作者传递消息到某子操作者中,都隐含地通过了主操作者
- 子操作者作为计算和显示的地方
- 比如有下列子操作者:手柄,先锋机器人,地图显示器
- 手柄操作者不断发送布尔指令,将消息发送到先锋机器人,先锋机器人响应此消息并做出动作
- 响应此消息,是通过消息的DO函数逐个处理消息还是通过核心函数循环接受消息?还是通过通知器等线程运行控制手段?
- 先锋机器人操作者在运行过程中循环发送坐标数据到地图显示器
- 地图显示器DO处理这个消息并更新地图数据
- 注意:可在地图显示器的核心函数中做地图的初始化!
- 将地图显示器操作者的前面板打开,这样可以同时看到多个操作者的显示界面,扩充了视野
- 计划
- 制作地图显示器操作者,将功能移到子操作者中去
- 主操作者循环发送消息到地图显示器操作者,使其能够更新地图,并能够查看其前面板
- 制作手柄操作者,使其能够发送布尔消息,制作模拟的坐标变换工作
- 使手柄操作能够控制地图更新,即按上按钮,点能够向上运动
- 制作先锋机器人操作者,先锋机器人既要响应动作,又要循环发送消息
- 分析工作
- 消息种类,消息设计
- 消息的数据结构,优先级和其他必须的信息
- 远景规划
- 子操作者还应该能够通过网络连接与远程计算机系统连接
- 打造一个计算性能好,可维护性好的分布式集群机器人控制系统!