正如您所想的,Microsoft Robotics Developer Studio (RDS) 是一个用于进行机器人编程的平台。 RDS 最早在 2006 年发布,最新的版本 RDS 2008 R2 发布于 2009 年 6 月。
RDS 主要由四个组件组成:并发和协调运行时 (CCR)、分散软件服务 (DSS)、可视化编程语言 (VPL) 和可视化模拟环境 (VSE)。
不过,本文主要介绍 VPL。VPL 是一种数据流语言,这意味着您是通过在屏幕上绘制图表来创建程序 的。在运行时,消息从图表中的一个块流向另一个块,这种数据流就是程序的执行路径。由于 VPL 基于 CCR 和 DSS 构建,因此数据流可以异步发生(作为服务通知的结果),也可以并行运行。尽管 VPL 适用 于程序员新手,但是有经验的程序员会发现它对于原型设计也很有用。
本文概要介绍一个简单的 RDS 服务,该服务使用串行端口(也称为 COM 端口)来发送和接收数据。 示例代码演示了编写可重用的 RDS 服务时涉及的一些关键概念。
RDS 服务
RDS 服务使用 CCR 和 DSS 构建。它们在概念上与 Web 服务相似,因为 RDS 拥有一种面向服务的体 系结构 (SOA),该体系结构基于具象状态传输 (REST) 模型,使用分散软件服务协议 (DSSP) 在服务之间 进行通信。仔细推敲这句话,您会发现它意味着您并非直接与 RDS 服务进行通信。实际上,您是向一个 代理发送消息,而该代理担当了服务的外部接口(Web 开发人员熟悉的一种方法)。这也意味着服务可以 分布在网络上的任意位置。
使用代理会产生两个效果。首先,在服务之间发送的消息会在传输之前序列化,并在另一端反序列化 。XML 是用来传输数据的一种有用格式。其次,代理定义了一个约定 - 实际上是向其他服务公开的一组 API。
每个服务都有一个内部状态,您可以通过对该服务进行操作来检索或修改状态。这就涉及了发送请求 消息以及等待响应消息,其过程类似于大多数 Web 服务所使用的过程。
当服务的状态改变时,它可以向订阅者发送通知。这种“发布和订阅”方法使 RDS 服务有别于传统的 Web 服务,因为通知消息是异步发送给订阅者的。
当您构建一个新服务时,该服务会在 VPL 中自动变为可见,因此您可以立即开始使用它。这是 RDS 的一项关键特性,它使测试和原型设计变得非常简单 - 您不需要用 C# 来编写测试工具,因为您可以使 用 VPL。
远程控制机器人
许多简单的教学机器人拥有 8 或 16 位微控制器作为其板载大脑。但由于 RDS 运行在 Windows 上的 .NET Framework 下,它不会生成能直接在这些机器人上运行的代码。因此,必须通过通信链接对它们进 行远程控制。(替代方法是使用板载 PC,例如 MobileRobots Pioneer 3DX。)
由于大部分微控制器都支持串行端口,串行连接是一个显而易见的解决方案。但是,使用电缆来提供 链接并不是理想选择,因为它会限制机器人的移动范围。
另一种方法是通过在机器人上安装串行到蓝牙转换设备,使用蓝牙来创建无线连接。有些机器人(例 如 LEGO NXT)本身就内置了蓝牙;而另一些(例如 RoboticsConnection Stinger)拥有可选的蓝牙模块 。蓝牙是一种不错的选择,因为蓝牙现已成为大多数便携式计算机的标准配备。即使您的 PC 没有蓝牙功 能,您也可以找到价格便宜的现成 USB 蓝牙设备。
一个好消息是您不需要了解蓝牙编程,因为与机器人的连接会显示为虚拟串行端口。您使用的代码与 通过物理电缆提供串行连接时基本相同。唯一的差别是您必须在 PC 与机器人上的蓝牙设备之间建立配对 ,这样才能创建虚拟 COM 端口。
有些机器人控制器板卡拥有固件,能够使用简单的命令语言来接受命令。例如,使用来自 RoboticsConnection 的 Serializer(因使用了串行协议而得名),您可以通过 HyperTerminal 等终端 程序向控制器输入命令。命令都是您可以直接看懂的,并且您通过按 Enter 来结束每个命令。
如果您在为机器人设计您自己的协议,则需要做出一些选择。首先,您必须决定是否要发送二进制数 据。将二进制值转换为十六进制或十进制用于传输,需要更多带宽,并且会增加板载 CPU 的处理开销。 而另一方面,它又使得阅读消息非常容易,您不会由于误解了控制字符而导致任何奇怪的行为。
下一个问题是,您是希望使用固定长度的数据包,还是希望使用更加灵活的可变长度格式。固定长度 更容易解析,最适合十六进制。
当然,您还应该考虑您是否要使用校验和。对于计算机之间的通信,计算校验位非常容易。但是,如 果您希望通过手动输入命令来测试机器人,计算校验位就会变得非常棘手。使用校验和时,通常接收方会 根据命令是否成功到达,回发确认 (ACK) 或否定确认 (NAK)。您对是否使用校验和的决定归根结底取决 于连接的可靠性。