去年和rukia,robin和futou在实验室准备预选赛,做了一些 3D humaniod的一些工作。记得当时服务器做得还很不好,agent 稍微一跳就跳到天上去了,到地上时还重重弹了好几下。我们最后调出了一个 能够走三十几步的agent, 害得我们乐了好久。
还是从跑比赛开始吧。 在安装服务器中configure的时候记得加上 -enabled-kerosin 即 ./configure –enabled-kerosin
服务器安装完成之后可以这么来跑比赛。
1. ./app/simspark/simpark 加载 server
2. ./app/monitorspark/monitorspark 加载 Monitor
3. ./app/agentspark/agentspark 加载 agent
这三个命令都是在 rcssserver3D 目录下运行的
这样子做完了,就可以在monitor中看到有一个humaniod站在球场中央。很是壮观。值得一提的是,当时的monitor做得还挺不错的,感觉很柔和。用方向键可以移动视角,放开键的时候视角还小移了一段距离。这种类似惯性的处理,让人感觉很真实。
接下来的事就是开发agent,最简单最快的方法当然是从 agentspark 入手。agentspark 提供了消息的接收解析发送,同时也提供了一些动作,这些看看源代码就可以很清楚了。源码在 ./app/agentspark 中。
agent 的动作控制,我们当时是这样做的。设置一系列中间状态,然后通过比例控制使agent的状态依次达到这些预定的中间状态。我们当时用的是最简单的方法,大家应该去尝试一些新的方法,比如PID。3D类人组的核心就在这里。
还有一些文件需要注意,app/simspark/rsg 这个目录下存储了比赛用的物体 的结构信息。比如现在用的 agent/soccerbot.rsg . 这个可能是今年国际比赛用的机器人模型。我是从 SoccerbotBehavior::Init() 函数找到这边的。从这里可以得到不少有用的信息,比如可以从 Effector 知道某个关节的 控制命令.
从下可以看出 larm_eff_1_2 是一个控制命令
(node UniversalJointEffector
(setName larm_eff_1_2)
)
我也就记得这么多了,等想到了再补充吧。^_^