我正在编写一个软件代理来控制模拟足球比赛中的机器人球员。最终我希望能参加 RoboCup 比赛。
在创建这样一个代理所涉及的各种挑战中,它的身体运动是我首先面临的挑战之一。我的目标模拟使用带有 22 个铰链的 Nao 机器人主体进行控制。每条腿六个,每条手臂四个,脖子两个:
(来源:sourceforge.net)
我对机器学习很感兴趣,相信一定有一些技术可以控制这个人。
在任何时间点,都知道:
- 所有 22 个铰链的角度
- 位于机器人胸部的加速度计的 X、Y、Z 输出
- 位于机器人胸部的陀螺仪的 X、Y、Z 输出
- 通过机器人头部的摄像头定位某些地标(角落、目标)
- 施加到每只脚底部的力的向量,以及给出力在脚底上的位置的向量
我想完成的任务类型是:
- 以尽可能快的速度直线奔跑
- 以定义的速度移动(即,一个根据附加输入处理快走和慢走的函数)
- 倒着走
- 现场转身
- 沿着简单的曲线运行
- 横着走
- 尽可能高地跳跃并着陆而不会摔倒
- 踢一个在你脚前的球
- 在受到意想不到的力量(被球或其他球员击中)时做出“潜意识”的稳定动作,理想情况下与上述之一同时进行
对于这些任务中的每一个,我相信我可以提出一个合适的适应度函数,但不是一组具有预期输出的训练输入。也就是说,任何机器学习方法都需要提供无监督学习。
我在开源项目中看到了一些示例,将圆函数(正弦波)以不同的幅度和相位连接到每个铰链的角度。这些似乎可以直线行走,但它们看起来都有些笨拙。不过,这并不是一种适用于我上面提到的所有任务的方法。
一些团队显然使用逆运动学,尽管我对此知之甚少。
那么,机器人双足运动/行走有哪些方法?
顺便说一句,我编写并发布了一个名为 TinMan 的 .NET 库,它提供与足球模拟服务器的基本交互。它为机器人的 22 个铰链的传感器和执行器提供了一个简单的编程模型。
您可以阅读更多关于 RoboCup 的 3D 模拟足球联赛的信息: