首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

开源机器人技术工具包(2)

开源机器人技术工具包(2)

Simbad 机器人仿真器Simbad 是一个使用 Java® 编程语言编写的三维机器人仿真器(因此它可以在 Linux 或其他支持 Java 虚拟机(或 JVM)的平台上运行);不过这个仿真器还包括了对 Python 脚本语言(通过 Jython)的支持。Simbad 设计用来研究自治机器人环境中的人工智能(AI)算法,它包括了一个 rich GUI(图形用户界面)进行可视化操作,它不但是对机器人的动作进行可视化,而且还是从机器人的角度来进行可视化的。
使得 Simbad 如此有趣的原因是它的使用非常简单,可以让我们快速创建新机器人的行为。不过尽管为 Simbad 的开发都非常简单,但是它实际上是机器人仿真的一个扩展框架。
使用这个仿真器,我们可以创建环境或对环境进行裁减,然后使用各种传感器来开发自己的机器人控制器。可用的传感器包括视觉传感器(彩色照相机)、范围传感器(声波和红外探测器)以及碰撞检测的缓冲。
这些传感器的 API 都非常清晰直观,易于使用。清单 2 中的例子展示了仿真声波用法,以及如何检测命中(对象检测到了)。
清单 2. 展示仿真声波用法的代码片段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int sonar_id, total_sonars;

// If at least one sensor has a hit
if (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 开源许可证的方式使用。
TeamBotsTeamBots 是一个可移植的多代理机器人仿真器,它可以支持动态环境中多代理控制系统的仿真,并可以提供可视化功能。与 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 的简单英式足球球员的代码片段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 语言开发的,发行版本中提供了完整的源代码和几个例子,可以帮助我们快速入门。
其他工具包有很多仿真器都为之编写的最知名的移动机器人平台之一是 Khepera。不幸的是,Khepera 已经变成了一个商业软件,而不再是开源的了。所幸的是,诸如 KControl 之类的工具包依然可以用来在 Linux 系统上为 Khepera 开发控制系统。
在 Gazebo 中有一个有趣的可以运动的三维机器人仿真器。Gazebo 不但可以对标准的机器人传感器(例如惯性度量单元、GPS 接收器和单筒相机)进行建模,而且还可以对机器人环境中使用的真实固形体物理部件进行建模。Gazebo 可以支持一个插件模型,在这个模型中我们可以将新的机器人传感器模型动态加载到环境中。
最后,一个非常有用的机器人导航工具包是 Carmen —— Carnegie Mellon Robot Navigation                                                   Toolkit。Carmen 实现了一个模块化的架构,它提供了基本的导航原语,例如故障排除、路径规划和绘图。除了提供一个两维仿真器之外,Carmen 还可以支持几个在 Linux 上运行的物理机器人平台。
构建 Linux 机器人开始构建基于 Linux 的机器人并不像我们想像的那样困难。实际上,有些高中的科学课程正在使用 Linux 和现有的可用硬件作为基于 Linux 的机器人的核心。例如,可以使用老式的 PC 主板作为系统核心(或者稍微好些的,使用老式的笔记本),并从 USB 磁盘上来引导 Linux(这比 CD-ROM 或硬盘/软盘引导消耗的电量会少很多)。板载的并口可以很容易转换成很多设备,例如将输入和输出分离开,或者驱动一组步进马达。串口可以用来接收 GPS 坐标,或者连接外部设备,例如 A/D (模拟信号到数字信号)或 D/A(数字信号到模拟信号)转换器。最后,可以购买一些便宜的 USB Web 相机来为机器人添加视觉功能。
但是真正使得 Linux 在这个环境中大放异彩的是它对环境的简化能力,从而使得所有人都可以通过 Python 之类的高级语言进行机器人控制系统的设计。位于 Maine 的 Greater Houlton Christian Academy 的 Michael Surran 最近(已经是第二年了)教授了一门高中的机器人课程,它充分利用了 Linux 和目前可用的硬件。这个课程的核心就是使用 Python。由于 Python 是一种解释语言,因此很容易来试验算法,而不需要经过长时间的编译过程(这点使得解释脚本语言显得如此有用)。
如果我们正在寻找最新的 Linux 解决方案,Carnegie Mellon University 最近在自己的 Mobile Robot Programming Lab(MRPL)中推出了 “Qwerkbot” 平台,它可以在 2.6 版本的 Linux 内核上运行。“Qwerkbot” 是一个基于 ARM9 的主板,具有 8MB 的闪存和 32MB 的SDRAM;它包括了 4 个板载的马达控制器、16 个伺服控制器、16 个数字 I/O、8 个 12 位的模拟输入,以及其他组件。
结束语机器人仿真器可以极大地简化构建物理机器人的工作。使用这些仿真器,我们可以在将自己的想法和策略放入硬件之前就对它们进行测试。幸运的是,Linux 和开源社区有很多选择,它们不但非常容易使用,而且还可以支持与硬件平台的直接链接。
返回列表