申明:既然在网上有介绍安装B-human软件的,我就不写了,在此转载。原文地址:http://www.cnblogs.com/followyourheart/archive/2012/03/12/B-Human_Getting_Started_with_NAO.html
Chapter 2
Getting Started with NAO
E-mail:riversunok@126.com
Create-Date:2012-03-11 Sun
Lasted-Revise-time:2012-03-12 Mon
我们使用的是B-Human2011的开源代码,第二章完成的主要是将B-Human的开源代码在NAO机器人上运转起来的过程。这里将整个流程做个简要的介绍,并将各步骤中可能遇到的问题和解决的方法罗列出来。欢迎各位继续补充,拍砖!
1准备工作
需要准备的文件有:
<1>nao-system-image-robocup-1.10.52.ext3.bz2
<2>naoqi-sdk-1.10.52-linux.tar.gz
<3>bhuman11_coderelease.tar.bz2
首先请确保以上各文件放在没有中文以及空格的路径下面。
<1>是NAO机器人的1.10.52版本的系统镜像(机器人上面运行的操作系统镜像,由Aldebaran公司提供)。
为了使用B-Human软件,我们需要使用<2>( Aldebaran SDK )中的一些库和头文件, 这些库可以用<3>解压后的文件夹中Install目录下面的alcommonInstall脚本进行安装,后面加上<2>( Aldebaran SDK )的路径,这个脚本会自动将B-Human软件需要的库和头文件提取出来放到Src目录对应的目录下,使代码可以正常编译通过。
<3>解压后的文件夹下面各文件夹描述如下:
Build是编译B-Human源代码编译过程中存放生成的二进制文件和临时文件的目录。初始时不存在,后来编译的过程中才会生成这个目录。
Config包含了用于配置B-Human软件的配置文件。在Sect. 2.9和Appx. A中有关于各个文件具体的描述。
Doc包含了一些更进一步的文档资源,也是simulator和behavior的文档编译存放的目标目录。但是这里好像缺少了BehaviorDoc和SimulatorDoc两个目录(cf. Sect. 2.8),所以不能正确生成目标文档。
Install包含了创建Nao的启动盘的所有需要的文件和两个用于管理Nao无线配置的脚本文件。
Make包含了Window下的Visual Studio project files,Linux下的Makefiles,Mac系统下的XCode project files,以及用于编译代码需要的其他文件,和Copyfiles工具(用于通过有线或无线网络将编译好的本地可执行文件copy到运行时的Nao机器人上面)。
Src包含了B-Human软件的源代码。
Util包含了辅助的和第三方的库和工具(cf. Chap. 9).
2编译B-Human软件的源代码
在ubuntu下只要看sect.2.2.1(Project Generation)和sect.2.2.4(Linux Shell的部分)
sect.2.2.2和sect.2.2.3是windows和Mac系统下面的说明
2.1 安装需要的软件:
完整的命令是:
sudo apt-get install g++-4.4 make libqt4-dev qt4-dev-tools libphonon-dev ruby doxygen graphviz xsltproc openssh-client rsync
sudo apt-get install sed e2fsprogs util-linux mount grep gawk patch bzip2 tar coreutils dosfstools bash
2.2 从naoqi-sdk中提取出需要的库和头文件
运行shell,切换到Install/目录下,运行alcommonInstall脚本,后面带上的参数是naoqi-sdk-1.10.52-linux.tar.gz的路径。
2.3 编译代码
这里可以直接用make命令,也可以用codeblocks的集成开发环境。
-
直接使用make命令: 在make/Linux目录下运行generate脚本,自动在该目录下跟据模板和配置文件生成makefile,然后到shell,切换到该目录下,执行make命令,编译代码。
-
使用codeblocks集成开发环境:在Make/CodeBlocks目录下执行generate脚本,自动在该目录下跟据模板和配置文件生成codeblocks的工程文件。然后用codeblocks打开,一个一个工程编译。
2.4编译过程可能出现的问题和解决方案
Q:question, A:analysis, S:solution
1)
Q:编译失败,错误提示中有”g++ not found”的提示
A:g++版本不合适
S:首先确保完成了2.1,将需要的软件安装全了。如果还是这样,那么安装最新版g++(sudo apt-get install g++)。有些安装是10.04以上更高版本的,游客能还需要卸载掉最新的g++,安装老版本的g++。这个自行尝试。
2)
Q:用codeblocks编译失败,错头提示中有类似文件目录不存在的提示。
A:codeblocks版本不合适
S:试试安装最新版本的codeblocks (10.05版)
3)
Q:编译失败,提示某些文件找不到。
A:这个主要在SimRobot的编译过程中出现,原因是某些头文件的命名不统一,编译器不能正确找到对应的头文件。
S:找到编译对应的错误提示,将错误所在行的文件名中的大写字母改成小写字母,并添加.h后缀,重新编译,直到没有错误。
4)
Q:编译失败,提示找不到文件,错误提示中找不到的文件的路径中可以看到有乱码。
A:可能是放在有中文或空格的路径下编译了。
S:检查文件路径,将代码放在没有中文和空格的路径下面重新编译。
5)
Q:编译失败,提示缺少文件,错误提示中有“alcommon”关键字
A:没有从naoqi-sdk中提取出对应的库和头文件
S:按照2.2节进行操作,再编译
2.5 其它问题
1) 2.2.4.1 Required Sotfware小节安装缺失软件的命令中有一个软件的名字有误,xsltsproc应该为xsltproc。
2) 2.2.4.2 Compiling小节,编译如果是采用CodeBlocks这个IDE(integrated development environment集成开发环境)进行的,就要安装CodeBlocks,具体命令是:
sudo apt-get install codeblocks
3)安装软件过程如果很慢,那是因为没有配置更新源,修改更新源参考:
http://archive.cnblogs.com/a/2212905/
3让Nao动起来
Nao机器人只能从Linux系统启动。这里我们用的V1.10.52的操作系统镜像(OS image)。
正如1节中描述,这里的操作全部在Install目录下完成。
3.1 系统镜像
将系统镜像文件nao-system-image-robocup-1.10.52.ext3.bz2放到Install/images文件夹下,系统镜像只支持ext3格式,或者像这里的ext3格式的压缩格式bz2。
这里要求系统镜像的文件名和这个给定的分区表的文件名一样。如果镜像文件有不同的名字,那么需要修改flashAndInstall.sh文件第8行,修改对应的镜像名。或者在调用这个脚本的时候用-i参数,后面带上新的镜像名。
3.2创建机器人的配置文件
运行createNewRobot.sh脚本创建机器人的配置文件。这个脚本需要三个参数:a team id, a robot id, and a robot name。team id一般和Config/settings.cfg里面的team number一致,但是可以设置为任意1-254之间的数。robot name是用来作为Nao系统的主机名,存储在Nao的胸部的芯片中作为机器人的昵称。
运行creatNewRobot.sh脚本命令后,在Install/files里面,按照_interfaces_template_文件的格式生成了对应robot的网络IP配置文件。
比如:
createNewRobot.sh -t 0 -r 25 Penny
那么就会生成interfaces_penny这个文件,里面就是机器人有线和无线的配置。%teamID%会被-t后面的参数所取代,%robotPart%会被-r后面的参数所取代。在生成配置文件之前要确保_interfaces_template_文件符合我们网络的需要。比如我这里采用的无线网络的网关是192.168.0.1,所以-t后面的参数需要为0.
这里如果不将有线部分(Wired iterface)的功能注释掉,那么机器人默认就使用的是有线的网卡,而无线的IP不管用,不知道应该怎样处理才能启动无线网卡。所以我们目前采取的方法是将模板文件中有线部分的内容注释掉。
这个过程中我们还遇到的一个问题是老版本的机器人的无线使用不了的问题。新机器人是V3.3版本,老机器人是V3.2版本。新Nao的无线可以使用,但是老Nao在bhuman程序启动以后就不能通过电脑无线连接到Nao。目前考虑本身Nao的无线模块的硬件是可以使用的,应该是软件层面上的问题,可能是驱动兼容性的问题,也可能是软件操作上面的失误导致无线网卡没有正确启动。目前没有找到问题症结所在,这个有待大家一起思考解决。
3.3 无线网络配置
无线的配置文件,即机器人的无线连接的网络配置,也是在Install/files目录下。
默认的是使用wpa_supplicant.conf_default文件的配置。
文件内容:
network={
ssid="Nao"
key_mgmt=NONE
wep_key0=6c756f626f
wep_tx_keyidx=0
priority=5
}
则机器人的无线网卡会连接名为Nao的无线网,这个无线网的加密方式要求为WEP加密方式,密钥wep_key0为luobo(ASCII码形式)。这里我们使用的无线网是无线路由的,那么无线路由的无线网络名称必须为Nao,加密方式也必须设在为WEP加密方式,密码设为luobo,默认WEP密钥为wep-key1(对应wep_tx_keyidx=0)。如果你按照说明书里的步骤将wpa_supplicant.conf_default改为wpa_supplicant.conf_suffix那么在wpa_supplicant.conf_suffix中也需将相应的位置改动。
Install目录下的updateWirelessConfig.sh和switchActiveWirelessConfiguration.sh这两个脚本可以用来修改robot上面的无线网络IP配置,是在机器人工作且能与电脑通信时(一般在有线情况下)进行的操作。
3.4 刷U盘
打开Nao的头部,取出USB闪存盘,将闪存盘 插入电脑中。
用root权限运行flashAndInstall.sh,后面带上机器人的名字(3.2节创建了配置文件的机器人)作为参数。如果检测到有多于一个Nao的USB闪存盘插在电脑上,或者检测失败,那么就需要加上-d,后面带上盘的名称作为参数。
我所使用的系统是ubuntu10.10,在执行flashAndInstall.sh时会产生一个错误:bzip2的版本不支持一个标志位选项。这个错误我没有解决,对于后面好像没有影响。
如命令:sudo ./flashAndInstall.sh Penny
3.5 拷贝编译后的代码到Nao
1)将刷好的U盘插如到Nao上面,启动Nao,按Nao胸部的按钮读取Nao的IP。用ssh连接测试是否能连接上。假定机器人的IP是192.168.0.25,
则命令:root ssh root@192.168.0.25,密码:cr2011。
2)使用Make/Linux/copyfiles脚本将本地编译好的代码拷贝到Nao上面。
如:copyfiles . sh Optimized 192.168.0.25 -t red -p 2
具体参数参数说明查阅18-19页文档。
3)ssh连接到Nao,或者用login工具远程登录到Nao,执行./phase2,重启Nao。
4)重启后,按胸口的按钮,机器人就处于找球并踢球的状态,再按按钮就暂停。
到此已经成功的让Nao动起来了,后面关于如何进一步使用B-Human的软件和Nao协同工作,还有待大家一起学习,进一步深入研究。
后记:
由于自己也只是业余时间阅读代码,学习Nao,精力有限,能力也有限,所以本文权当抛砖引玉,只是希望能够通过网络结识更多的robocup爱好者,大家一起交流学习,共同进步。