RoboViz与B-Human代码发布:机器人足球领域的技术洞察
1. RoboViz的功能与应用
RoboViz是一款在机器人足球领域,尤其是3D仿真子联赛中备受关注的工具。它具有强大的可视化功能,能够直观地展示复杂的多智能体足球场景。
在展示路径规划方面,如图3(a)所示,它可以将Sim3D智能体的搜索树可视化,清晰呈现从当前状态(蓝色圆圈)到期望状态(黄色圆圈)的路径规划。被选中的路径以蓝色高亮显示,其他可选路径为白色,粉色圆圈则代表无碰撞的首个目标点。
在机器人动作展示上,图3(b)展示了NAO机器人向球门踢球的场景,而图3(c)则是在RoboViz中的可视化呈现。其中,红色和蓝色圆点表示机器人部件的中心和方向,红色向量代表机器人的朝向,蓝色圆圈表示路径。
RoboViz在RoboCup赛事中得到了广泛应用。在2011年土耳其伊斯坦布尔的RoboCup和2012年墨西哥墨西哥城的RoboCup中,其可视化功能受到了众多3D仿真子联赛队伍的欢迎。特别是在2012年RoboCup半决赛中,许多队伍在开发过程中使用了RoboViz。此外,还有一些智能体框架明确提供了对RoboViz的支持。
在RoboCup之外,RoboViz也被应用于迈阿密大学和德克萨斯大学奥斯汀分校的多智能体系统课程中。在迈阿密大学,它还被用作演示工具,以提高对RoboCup赛事的认识,并吸引学生学习计算机科学。
2. B-Human团队的背景与动机
B-Human团队最初参加人形机器人联赛,后来在2009年转战标准平台联赛(SPL),并开始使用NAO机器人。该团队在人形机器人联赛的经历使其在标准平台联赛中具有一定优势,因为在人形机器人联赛中,机器人硬件是其主要弱点,而在SPL中所有队伍使用的机器人平台相同。
B-Human团队成绩斐然,除了2012年RoboCup决赛外,赢得了所有官方比赛。该团队五次获得RoboCup德国公开赛冠军(2009 - 2013),三次获得RoboCup世界锦标赛冠军(2009、2010、2011)。
尽管在SPL中代码发布并非强制要求,但自2008年联赛开始使用NAO作为标准平台以来,B-Human团队一直在其官网(www.b - human.de/publications)发布软件。团队认为提供开源软件是促进研究和推动RoboCup联赛发展的最佳方式。
3. B-Human的软件框架
3.1 框架基础
B-Human的软件框架基于四足机器人联赛中德国队的框架。德国队是由四所(后来三所)大学组成的联合团队,在本地赛事中各自参赛,但在RoboCup中作为一个团队参赛。这种背景使得软件框架中的一些模块具有相似功能,因为它们最初是由不同大学团队的成员为本地比赛开发的。
该框架一直致力于实现硬件独立性,因此从AIBO机器人移植到Bioloid机器人再到NAO机器人并不困难。为了避免依赖特定的硬件软件,团队还抽象了Aldebaran Robotics的NaoQi,因为联赛未来可能会更换机器人平台。
自2011年以来,B-Human框架支持三种最流行的操作系统作为开发平台,包括运行Visual Studio的Microsoft Windows、运行Xcode的OS X和Linux。为了减少开发过程中的后勤开销,团队最近改用llvm/clang作为C++编译器。它可以在所有三个平台上为机器人进行交叉编译,是Xcode的原生编译器,并且可以与Linux上的任何开发环境配合使用。只有在针对Windows时,才会使用微软的编译器。此外,团队越来越多地使用C++及其预处理器的表达能力来添加新功能,而不是使用外部工具,以简化构建过程。
3.2 进程
机器人控制程序需要对外部事件做出及时响应,例如新传感器数据的获取或机器人执行器需要新的目标值。在B-Human框架中,使用进程来快速响应这些事件。这些框架进程可以通过操作系统进程或线程实现。在德国队的AIBO机器人和B-Human团队在人形机器人联赛中的机器人上,使用的是操作系统进程;而在当前NAO机器人的实现中,使用的是线程。
NAO机器人提供两种类型的传感器信息:通过Video for Linux获取的相机图像,以及通过NaoQi的设备控制管理器获取的其他信息(如实际关节角度、IMU和超声波测量值等)。后者与请求机器人执行器目标值的速度相同。因此,框架使用了三个进程:
-
认知进程(Cognition)
:以相机图像的采集速度运行(NAO V3.x为30 Hz,NAO V4为60 Hz)。
-
运动进程(Motion)
:以其他传感器测量值的提供速度运行,即100 Hz。
-
调试进程(Debug)
:提供与外部PC的网络连接,仅用于调试目的。
以下是进程的简单示意图:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A[机器人控制程序]:::process --> B[认知进程 Cognition]:::process
A --> C[运动进程 Motion]:::process
A --> D[调试进程 Debug]:::process
B --> E[相机 Cameras]:::process
C --> F[设备控制管理器 DCM]:::process
D --> G[外部PC]:::process
3.3 数据表示
B-Human软件架构中的模块通过表示(representations)来交换数据。表示是C++类的实例,主要用于存储数据,几乎不提供功能。例如,有些表示用于存储图像中检测到的对象(如球),有些表示用于存储环境中对象的模型(如球在球场上的位置),还有些表示用于一个模块向另一个模块发送请求(如以特定速度行走)。
所有表示都存储在黑板(blackboard)中。每个进程都有自己的黑板,包含该进程中使用的所有表示。这些表示可以由同一进程中的模块提供,也可以从其他进程接收。由于每个进程都有其模块处理的每个表示的副本,因此不会出现对表示的并发访问,从而保证了数据的一致性。在每个处理周期结束时,将其他进程所需的表示发送给它们,这些进程将在下一个处理周期开始时接收。
所有表示都是可流式传输的,即可以从数据流中读写。用于流式传输表示属性的C++宏不仅处理读写操作,还在运行时提供属性的名称和数据类型。这一方面可用于读写结构化、人类可读的配置文件,无需额外代码;另一方面,任何表示都可以通过PC上的调试工具在运行时进行可视化和编辑。
以下是一个简单的表示定义示例:
class BallModel : public Streamable {
void serialize(In* in, Out* out) {
STREAM_REGISTER_BEGIN
STREAM(position)
STREAM(wasLastSeen)
STREAM_REGISTER_FINISH
}
public:
Vector2<float> position;
unsigned wasLastSeen;
};
3.4 执行计算的组件
在B-Human框架中,计算由模块(modules)执行。每个模块需要一些表示作为输入来完成其工作,并为其他模块提供一个或多个表示作为输出。需求和输出之间的依赖关系定义了所有模块的执行顺序,该顺序会自动确定,以确保在执行一个模块之前,其所有需求都已由其他模块更新。这样可以检测并报告不一致的配置。同时,还会自动计算哪些表示需要在不同进程之间交换。
该架构允许存在多个提供相同表示的模块,但同一时间只有一个模块可以处于活动状态。活动模块的集合在配置文件中指定。当开发新模块时,可以通过更改配置文件或在B-Human软件运行时交互式地激活它,并重新计算模块的执行顺序,拒绝不一致的配置。这简化了软件开发,因为不同的实现可以并行存在。
为了便于替换现有实现,重要的规则是表示和模块都应该小而连贯。例如,相对于机器人的球的位置这样的小表示,允许实现一个专门计算该信息的模块,这样就可以轻松地用新模块重新实现。相反,如果一个表示包含图像中所有与足球相关的信息(球、线、球门、机器人等),则需要一个单一模块提供所有这些信息,这会使其高度复杂且难以用不同方法替换。目前,系统中大约有100个模块交换约120个表示。
以下是模块和表示之间依赖关系的简单示例:
graph LR
classDef module fill:#FFEBEB,stroke:#E68994,stroke-width:2px;
classDef representation fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A[模块1]:::module --> B[表示1]:::representation
A --> C[表示2]:::representation
D[模块2]:::module --> B
D --> E[表示3]:::representation
F[模块3]:::module --> C
F --> E
4. B-Human框架与ROS的比较
近年来,机器人操作系统(ROS)受到了广泛关注,并且一些SPL队伍在NAO机器人上使用了ROS。与B-Human框架类似,ROS也提供了计算组件和数据表示的清晰封装,但它们的底层概念和意图有所不同。
在计算执行方面,ROS中的计算由所谓的节点(nodes)完成,每个节点是一个单独的操作系统进程。而B-Human框架中的模块并不相互并行运行,而是分组在固定数量(目前为两个)的进程中。这在灵活性和处理大量CPU核心和巨大计算量的场景下相对较弱。然而,NAO机器人只有一个CPU核心(V4版本具有超线程),B-Human软件并未充分利用其全部性能,并且短期内这种情况预计不会有显著变化。B-Human当前的模块布局侧重于非常细粒度的模块化,即使是琐碎的功能(如根据另一个模块提供的里程计偏移计算总行走距离)也可以放入单独的模块中,而不会因调度和通信开销而损失反应性和效率。
在数据表示方面,ROS中与B-Human表示相对应的是消息(messages,实例化后也称为主题)。两者概念相似,都提供了流式传输和在运行时替换发送者和接收者的可能性。主要区别在于数据结构的定义方式。ROS消息在外部文件中指定,用于生成实际代码,这使得ROS能够支持不同的编程语言。而B-Human的表示直接在C++中指定,以减少外部工具、语言和编译器的数量。理论上,B-Human的表示可以添加计算功能,但通常不这样做,因为与模块不同,表示的实现不能在运行时切换。
以下是B-Human框架与ROS的比较表格:
| 比较项 | B-Human框架 | ROS |
| ---- | ---- | ---- |
| 计算执行 | 模块分组在固定数量进程中 | 节点为单独操作系统进程 |
| 数据表示定义 | 直接在C++中指定 | 在外部文件中指定 |
| 灵活性 | 相对较弱,适合NAO硬件 | 较强,适合多核计算 |
| 运行时替换 | 模块可切换,表示一般不可 | 消息发送者和接收者可切换 |
5. B-Human代码发布的影响
5.1 发布流程
自2008年以来,B-Human团队在每年的RoboCup世界锦标赛后都会发布一个带文档的软件包。这些软件包在RoboCup社区引起了广泛关注,许多队伍使用了B-Human的软件或其中的某些部分。
B-Human软件每年秋季,在冬季学期开始前不久发布。每个版本包括两部分:软件存档和团队报告,团队报告包含详细的安装和操作说明。与其他一些团队不同,B-Human不维护公共代码库,因此不会发布已发布代码的错误修复,到目前为止也没有收到使用其代码的队伍提供的错误修复。
代码发布通常包含上一次比赛中使用的所有组件(除了行为、一些特殊的踢球动作或正在进行的论文中的组件),仅进行错误修复。团队始终以BSD风格的许可证发布代码,以给予用户最大的自由。但同时,团队在许可证中添加了一些特殊的RoboCup条款:每个使用B-Human代码的队伍必须在参加下一次比赛前在联赛邮件列表中宣布这一情况,并替换模块堆栈中的多个主要部分。
5.2 对自身发展的影响
代码发布对B-Human团队自身的发展也有积极影响。一方面,团队报告作为当前学生项目的最终报告,记录了项目的成果和经验。另一方面,团队内部使用团队报告来培训每年加入的新成员。与参考一堆研究论文、README文件和Wiki页面相比,最新的团队报告成为了一个单一的信息源,包含了安装、使用和理解B-Human系统所需的所有必要信息。即使是经验丰富的团队成员也会将团队报告作为参考,因为系统的复杂性使得很难有人了解“一切”。因此,团队建议所有队伍都提供代码发布和相应的团队报告,以促进整个联赛的发展。
5.3 对联赛的影响
B-Human团队的代码发布促进了标准平台联赛的整体进步。由于所有队伍使用相同的机器人平台,共享软件可以帮助其他队伍更快地开发和改进自己的系统。通过提供开源代码,B-Human团队推动了研究的发展,鼓励其他队伍在其基础上进行创新。同时,特殊的许可证条款确保了联赛的多样性,避免了B-Human克隆队伍的主导地位,保持了比赛的竞争性和创新性。
综上所述,RoboViz和B-Human的代码发布在机器人足球领域发挥了重要作用。RoboViz的可视化功能为比赛和开发提供了有力支持,而B-Human的软件框架和代码发布促进了标准平台联赛的技术进步和发展。未来,随着技术的不断发展,我们可以期待这些工具和方法在机器人足球及相关领域发挥更大的作用。
RoboViz与B-Human代码发布:机器人足球领域的技术洞察
6. RoboViz的未来展望
RoboViz的初始目标是为整个3D仿真子联赛提供一个易用且实用的工具。在过去两年中,这一目标得到了明显体现,多个团队利用其可视化功能,并且在重大比赛中,RoboViz被用作监控工具。此外,它还在RoboCup之外的教育领域得到了应用。
展望未来,希望RoboViz能在其他RoboCup足球联赛中得到应用,例如标准平台联赛。若有团队开发跨联赛智能体并能复用相同工具,那将十分有趣。目前,RoboViz的主要版本仍专注于3D仿真子联赛,但一个分支正在开发中,该分支可使该工具适用于更多环境。开发团队RoboCanes已将其用于NAO机器人。预计这个分支在为2013年RoboCup打磨完善后,将成为主要版本。同时,为3D仿真添加对异构机器人类型的支持也将是很有价值的改进。
7. B-Human框架的潜在优化方向
虽然B-Human框架已经取得了显著的成果,但仍有一些潜在的优化方向值得探索。
7.1 性能优化
目前,B-Human软件在NAO机器人上并未充分利用其CPU性能。可以进一步优化模块的执行顺序和数据交换方式,以提高系统的整体性能。例如,通过更精细的调度算法,减少模块之间的等待时间,提高CPU的利用率。
7.2 硬件适配性增强
尽管框架一直致力于硬件独立性,但随着机器人技术的不断发展,可能会出现新的机器人平台。为了确保框架能够轻松适配这些新平台,可以进一步抽象硬件接口,减少对特定硬件软件的依赖。
7.3 功能扩展
可以考虑增加一些新的功能模块,以满足不断变化的比赛需求。例如,添加更复杂的决策模块,使机器人能够在不同的比赛场景下做出更智能的决策;或者增加对多机器人协作的支持,提高团队的整体协作能力。
8. 总结与启示
在机器人足球领域,RoboViz和B-Human的代码发布都具有重要的意义。RoboViz通过其强大的可视化功能,为比赛和开发提供了直观的支持,帮助团队更好地理解和调试复杂的多智能体足球场景。而B-Human的软件框架和代码发布则促进了标准平台联赛的技术进步和发展,通过开源共享的方式,推动了整个社区的研究和创新。
对于其他机器人开发团队来说,可以从RoboViz和B-Human的经验中得到以下启示:
-
可视化工具的重要性
:开发一个易用且功能强大的可视化工具,可以大大提高开发效率和调试效果。
-
开源共享的价值
:通过开源代码,可以促进社区的交流和合作,加速技术的发展。
-
软件框架的设计原则
:设计软件框架时,应注重硬件独立性、模块化和可扩展性,以适应不断变化的需求。
以下是一个简单的总结表格:
| 项目 | 特点 | 意义 |
| ---- | ---- | ---- |
| RoboViz | 强大的可视化功能,适用于3D仿真子联赛 | 为比赛和开发提供直观支持,促进跨领域应用 |
| B-Human框架 | 硬件独立,模块化设计,支持多操作系统 | 推动标准平台联赛技术进步,促进开源共享 |
9. 未来发展趋势
随着机器人技术的不断发展,机器人足球领域也将迎来新的挑战和机遇。以下是一些可能的未来发展趋势:
-
多机器人协作的深化
:未来的比赛将更加注重多机器人之间的协作能力,机器人需要能够更好地理解队友的意图,实现更高效的团队配合。
-
人工智能技术的应用
:人工智能技术,如深度学习、强化学习等,将在机器人足球中得到更广泛的应用,使机器人能够更好地适应不同的比赛场景,做出更智能的决策。
-
硬件技术的提升
:随着硬件技术的不断进步,机器人的性能将得到大幅提升,这将为机器人足球带来更多的可能性。
以下是未来发展趋势的简单流程图:
graph LR
classDef trend fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A[多机器人协作深化]:::trend --> B[更高效团队配合]:::trend
C[人工智能技术应用]:::trend --> D[智能决策能力提升]:::trend
E[硬件技术提升]:::trend --> F[机器人性能增强]:::trend
B --> G[比赛水平提高]:::trend
D --> G
F --> G
总之,RoboViz和B-Human的代码发布为机器人足球领域的发展奠定了坚实的基础。未来,我们期待看到更多的创新和突破,使机器人足球比赛更加精彩。
超级会员免费看

被折叠的 条评论
为什么被折叠?



