Simbad 机器人仿真器
Simbad 是一个使用 Java® 编程语言编写的三维机器人仿真器(因此它可以在 Linux 或其他支持 Java 虚拟机(或 JVM)的平台上运行);不过这个仿真器还包括了对 Python 脚本语言(通过 Jython)的支持。Simbad 设计用来研究自治机器人环境中的人工智能(AI)算法,它包括了一个 rich GUI(图形用户界面)进行可视化操作,它不但是对机器人的动作进行可视化,而且还是从机器人的角度来进行可视化的。
使得 Simbad 如此有趣的原因是它的使用非常简单,可以让我们快速创建新机器人的行为。不过尽管为 Simbad 的开发都非常简单,但是它实际上是机器人仿真的一个扩展框架。
使用这个仿真器,我们可以创建环境或对环境进行裁减,然后使用各种传感器来开发自己的机器人控制器。可用的传感器包括视觉传感器(彩色照相机)、范围传感器(声波和红外探测器)以及碰撞检测的缓冲。
这些传感器的 API 都非常清晰直观,易于使用。清单 2 中的例子展示了仿真声波用法,以及如何检测命中(对象检测到了)。
清单 2. 展示仿真声波用法的代码片段
| int sonar_id, total_sonars;// If at least one sensor has a hitif (sonars.oneHasHit()) { // Find out how many sonars are on the robot total_sonars = sonars.getNumSensors(); // Iterate through each sonar for ( sonar_id = 0 ; sonar_id < total_sonars ; sonar_id++ ) { // Does this one have a hit? if (sonars.hasHit(sonar_id)) { // Emit the details (angle, range) System.out.println( "Sonar hit at angle " + sonars.getAngle(i) + " at range " + sonars.getMeasurement(i) ); } }} |
Simbad 中的其他传感器也遵循类似的模式,它们也创建了一组直观的 API。
让 Simbad 变得如此有用的是它对机器人仿真和可视化而使用的终端。正如图 4 所显示的一样,Simbad 的终端给我们提供了世界的一个实时视图,一个提供了机器人详细信息(包括照相机)的监视器面板,以及一个用来对仿真进行管理的控制面板。
图 4. Simbad 机器人仿真器和可视化终端
Simbad 还提供了很好的文档和教程来帮助我们迅速入门,并使用 Java 和 Python 语言快速运行它。除了单一机器人仿真之外,我们还可以同时对多个机器人进行仿真。总体上来说,Simbad 仿真器是一个非常适合测试智能机器人算法的环境。Simbad 可以按照 GPL 开源许可证的方式使用。
TeamBots
TeamBots 是一个可移植的多代理机器人仿真器,它可以支持动态环境中多代理控制系统的仿真,并可以提供可视化功能。与 Simbad 之类的其他仿真器相比,TeamBots 有一点非常独特:它的控制系统具有很好的可移植性。我们可以开发自己的控制系统,并将其在仿真器上进行验证,然后再在真正的移动机器人上对控制系统进行测试(使用 Nomadic Technologies Nomad 150 机器人)。
TeamBots API 为控制系统提供了一个抽象层(参见图 5)。结果是,控制系统无法知道到底是运行在合成环境(TBSim)的仿真器内还是运行在真实环境(TBHard)的移动机器人平台内。
图 5. 控制系统的 TeamBots API 抽象层
TeamBots 仿真环境非常灵活,也很容易用来使用对象和其他机器人构建合成环境。我们很容易就可以添加墙、任意对象、路以及其他运行相同或不同控制系统的机器人。通过这种方式,我们可以构建捕食/被捕食仿真(这是是一个例子)。另外,对象不需要是静态的。我们可以添加在环境中四处移动的对象,或者机器人推动的对象(例如球)。
使用 TeamBots,我们可以对不同类型的机器人仿真进行建模。例如,在 1997 年,Georgia Tech 使用 TeamBots 赢得了美国人工智能协会(AAAI)的移动机器人竞赛,他在一个动态环境中使用了两个仿真 Nomad 150 机器人进行填料。这两个机器人的目标是对环境进行搜索,然后将蓝色对象放到蓝色柜子中,将橙色对象放到橙色柜子中(参见图 6)。为了增加竞赛的复杂性,橙色球是动态的,并且在整个环境中是不断移动的。
图 6. TeamBots 的填料仿真
在图 6 中,移动机器人 1 拿到一个蓝色对象,正在向一个蓝色柜子移动,以便将这个蓝色球放到蓝色柜子中。机器人 0 正在进行搜索。
我们在机器人英式足球选手的开发中也可以使用 TeamBots。英式足球是一项国际流行的运动,它是国际上很多大学和组织进行竞争的一个很好的平台。机器人英式足球比赛的规则可能会稍有不同(尤其是在考虑到移动平台、双足平台或 Sony Aibo 之间的差异时),但是它们都使用了这项赛事的相同的基本模型。
在图 7 中,机器人 1(黄/白)正在冲向球,试图射门。机器人 0(蓝/红)正在守门,它处于一个阻断的位置。机器人英式足球赛看起来实际上非常有趣,TeamBots 发行版提供了几个球队,我们可以使用它们来体验一下新策略。
图 7. TeamBots 在 SoccerBots 中的展示
TeamBots 为英式足球塞提供了一个 Java API,它主要关注的是球员的 “大脑”。效应器 API 允许对机器人进行调优,以特定的速度移动、踢球或简单地带球。传感器是在高层构建的,它们提供了 API 来确定球的方向、其他球员(队友和对手)的方向、目前冲锋在前面的人、守门员的位置等等。
为了让您对 TeamBots Soccer API 有个大概的了解,参见清单 3,它给出了一个非常简单的策略。这个策略(源自于 Tucker Balch 编写的 SoccerBots 源代码)简单地寻找球、冲向这个球,然后踢球(不管是否踢向球门)。这是一个随机策略,但是它展示了这个 API 的简单性。
清单 3. 使用 TeamBots SoccerBots API 的简单英式足球球员的代码片段
| public int TakeStep(){ Vec2 ball; long T; T = abstract_robot.getTime(); // Get the vector to the ball ball = abstract_robot.getBall(T); // Point ourselves to it abstract_robot.setSteerHeading(T, ball.t); // Go to it (maximum speed) abstract_robot.setSpeed(T, 1.0); // If we can kick it, do so! if (abstract_robot.canKick(T)) abstract_robot.kick(T); return(CSSTAT_OK);} |
TeamBots 发行版对于移动机器人的原型和仿真来说都是一个很好的环境,也非常适合在使用 TBHard 环境的真实机器人中使用它们。TeamBots 是开源的(由 Georgia Tech 和 Carnegie Mellon University 的 Tucker Balch 开发),可以自由用于教育和研究目的。这个仿真器是使用 Java 语言开发的,发行版本中提供了完整的源代码和几个例子,可以帮助我们快速入门。