NAO 学习——从 NAOqi 和 rviz 开始学习在 ROS 上运行 NAO

1. 开始连接一个实体 NAO

1.1 运行 nao_bringup

在开始之前,我们首先要确定三个必须的依赖包 naoqi_drivernaoqi_bridgenao_description 是否满足。这三个包可以通过包管理器或者从 github 上 clone。

为了运行nao_bringup, 需要执行下列命令:

$ roslaunch nao_bringup nao_full.launch nao_ip:=<robot_ip> roscore_ip:=<roscore_ip>

如果用的是 Python SDK,则需要执行:

$ roslaunch nao_bringup nao_full_py.launch nao_ip:=<robot_ip> roscore_ip:=<roscore_ip>

<robot_ip>是 NAO 的地址,’‘是运行 roscore 的电脑 IP 地址。因为 roscore 并不是在 NAO 上运行的,所以用这两个参数来让 NAO 找到 roscore 运行的位置是很必要的。将这两个参数修改为正确的 IP 地址,以在 NAO 和电脑之间建立正确连接。

当 nao_bringup 成功运行之后,我们就可以打开 rviz 了。

1.2 在 RVIZ 上显示 NAO

首先打开 RVIZ:

$ rosrun rviz rviz

ROS 上提供了一个预先设置好的 RVIZ 配置文件urdf.rviz,保存在~/catkin_ws/src/nao_robot/nao_description/config/下。

如果想要看到完整的 NAO 的 3D 模型,我们需要安装一个包:

$ sudo apt-get install ros-indigo-nao-meshes

在安装过程中,我们需要接受它的许可信息。安装完成后,重启一下 RVIZ。

2. 控制 NAO

如果上面的步骤都成功了,我们这个时候就已经能在 RVIZ 中看见 NAO 了。

接下来我们将用 ROS 命令来控制 NAO。

首先执行$ rosnode list,我们应该能找到/nao_walker结点。这证明 NAO 的 walker 结点已经运行。

很重要的一点是,在开始控制实体 NAO 之前,需要先将其刚化:

$ rosservice call /body_stiffness/enable "{}"

:刚化之后,就不能再用手去移动 NAO 的关节。

若想解除刚化,则只需执行:

$ rosservice call /body_stiffness/disable "{}"

刚化之后,我们就可以向 NAO 发送一个行走的命令:

$ rostopic pub -1 /cmd_vel geometry_msgs/Twist '{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}'

这条指令将会使 NAO 不断沿 x 轴方向行走,每个循环都会走一米。

若需要停止,则只需将linear中的x: 1.0修改为x: 0.0

$ rostopic pub -1 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}'

我们也可通过 ROS 一些已有的远程控制工具(如:ROS telep)来用键盘控制 NAO。

3. 在 ROS 上运行虚拟的 NAOqi

3.1 加载环境

首先,需要确保 roscore 已经运行。

然后在一个新的终端中,输入下列指令来在本地电脑运行 NAOqi,以模拟出一个 NAO:

$ ~/naoqi/naoqi-sdk-1.12.3-linux32/naoqi --verbose --broker-ip 127.0.0.1

broker-ip 地址127.0.0.1是连接本地电脑的回路地址。只有在本地安装的 ROS 才能连接 NAOqi。NAOqi API 将可以通过 broker-ip 地址访问,而 nao_driver 将成为 NAOqi API 的包装器。

接下来在一个新的终端中加载ros_driver包,以连接本地的虚拟 NAO:

$ LD_LIBRARY_PATH=~/naoqi/naoqi-sdk-1.14.5-linux64/lib:$LD_LIBRARY_PATH NAO_IP=127.0.0.1 roslaunch naoqi_driver naoqi_driver.launch force_python:=true

ROS 官网上英文教程中的这一指令貌似有错误,我用的是ROS 论坛中的解决方法。

如果运行成功,那么会看到与下列相似的输出:

1
2
3
Walker online...
.
nao_controller running...

:不要将这个路径添加到全局LD_LIBRARY_PATH中,不然可能会在运行其他程序时出错。

3.2 在 RVIZ 中查看虚拟的 NAO

首先退出之前所有正在运行的终端应用。

然后安装rospack

$ sudo apt-get install ros-fuerte-rospack

再安装一些 ROS 的可视化工具:

$ sudo apt-get install ros-fuerte-visualization

接下来重新启动roscore、NAOqi 和 nao_driver

现在我们需要启动 robot_state_publisher 并让其加载 NAO 的 URDF 模型:

$ roslaunch nao_description nao_state_publisher.launch

然后重新启动 RVIZ 即可。

在 RVIZ 中,将左部的”Displays”中的”Fixed Frame”修改为”/base_link”。若只有”/map”选项,则证明 URDF 模型没有成功加载。

右部的”Target Frame”应该是<Fixed Frame>

运行第二节中行走命令,我们就能看到 RVIZ 中的 NAO 开始行走了。