点击蓝字 关注我们
摘要:本文中,我们将介绍日本软银公司(SoftBank)的服务机器人Pepper如何将ROS集成到Pepper的NAOqi 系统上和自动导航和个性化设置的工作原理。
//
01
Pepper的硬件和软件
Pepper机器人身高1.2米,总共有20个自由度,其中身体有17个自由度,底座有3个自由度。该机器人有一个IMU,它与车轮的编码器结合,提供里程计的航位推算(DR,Dead-Reckoning)。为了避免碰到障碍物,机器配备了两个声纳,两个红外传感器和六个激光器,其中三个探测身体下方,另外三个探测机器人周围的障碍物。它的轮子旁边还有三个碰撞传感器,用于万一与障碍物发生碰撞时进行停车操作。
在感知方面,Pepper配备2个2D摄像头,分别位于额头上方和嘴巴下方。考虑到机器人的高度,高清晰度的成像是机器人所必需的,因为通过该装置测量出用户的平均高度。Pepper的一只眼睛还装有华硕Xtion 3D传感器,用于定位和导航。
在计算能力方面,Pepper配备1.9GHz四核Atom处理器和4GB内存。此外,机器人的操作系统是NAOqi OS,一个基于Gentoo的GNU/Linux发行版。出于安全原因,开发人员没有根权限,sudo命令只能用于关闭或重新启动机器人。
02
集成ROS和NAOqi系统
本文中,我们将介绍如何将ROS集成到Pepper机器人和NAOqi 系统中。类似的工作已经在NAO机器人上完成了,但是在这里我们提出了一种交叉编译的替代方法,即使用带有Pepper操作系统NAOqi OS的虚拟机。
A
NAOqi系统和框架
Pepper由可执行文件NAOqi控制,当操作系统NAOqi OS启动时自动启动。如下图所示,NAOqi就像是一个中间代理人,并加载包含一个或多个模块的库,这些模块使用代理发布它们的方法。
NAOqi是个跨平台的编程框架,可支持Python、C++、Java等编程语言
NAOqi可执行文件附带了一个核心模块列表和一个公共API接口,其功能划分为如下组:
• NAOqi Core:处理通信、模块管理、内存访问、情感识别等模块;
•NAOqi Motion:实现动作、导航任务、低位关节位置和基准速度控制的模块;
•NAOqi Audio:控制动作语音、语音识别、录音的模块;
•NAOqi Vision:斑点检测、照片捕捉、基本定位、地标检测模块;
•NAOqi People Perception:专注于人机交互的模块,具有人脸检测、凝视分析和人跟踪等;
•NAOqi Sensors:读取激光、声纳和触摸传感器的模块
NAOqi系统工作过程
B
ROS接口用于定位和导航
机器人操作系统(ROS)是一个开源中间件框架,带有用于机器人软件开发的库和工具。它包括最先进的算法,一个进程间通信框架和可视化工具。由于它的硬件抽象和包管理,以及用于感知、规划和定位的许多算法,它被用在许多机器人身上和研究小组的研究。
在ROS中,处理单元称为节点,节点通过主题或服务进行通信。主题遵循发布者/订阅者模式,而服务使用客户机/服务器模型。总有一个主协调节点,但是其他节点可以分布,允许在多台机器上进行分布式操作。
ROS社区支持一个ROS接口节点来桥接ROS和NAOqi系统。它同时作为ROS节点和NAOqi模块运行,并将NAOqi调用转换为标准类型的ROS服务和主题。
因此,在我们的工作中,我们使用ROS作为工具,使Pepper与最先进的导航技术和基本的可视化工具集成。此外,一旦ROS接口开始运行,开发人员就可以为Pepper创建具有标准类型和通信的软件,从特定的硬件中抽象出来。这也使得在其他机器人和模拟之间移植代码变得很容易。
自主导航(Autonomous Navigation)
Pepper机器人关于ROS系统应用科研案例
为了自主导航,机器人需要有一张环境地图,并使用它的里程数和感知能力来估计它在地图上的位置。传统的方法是使用SLAM (simultaneous localization and mapping)利用激光测距仪构建环境的2D地图,然后使用预构建的地图对机器人进行定位。
尽管机器人有3个水平激光传感器来测量它与周围障碍物的距离,但它们提供的点很少,这使得使用这种传感器进行SLAM或定位是不切实际的。Pepper上的激光只用于避免与障碍物碰撞。因此,我们使用3D传感器来获取深度图像,并将其转换为模拟的2D激光扫描。转换激光扫描然后可以用于2D SLAM,定位和导航。也可以旋转头部来增加模拟激光扫描的视野。
用于在Pepper上使用ROS运行本地化和导航的软件体系结构(如下图所示)有一个中心元素,即ROS接口。ROS接口在NAOqi中注册为一个模块,然后它通过NAOqi API进行调用,以读取Pepper的传感器并向底座发送速度命令。
在从Pepper读取传感器数据后,ROS接口使用标准ROS类型发布深度图像和测程仪。另一个节点订阅深度图像并将其转换为激光扫描。ROS社区提供了一个简单的包,深度成像到激光扫描,可以执行这种转换。然而,这个包适合从固定和水平安装的3D传感器获得的图像,在一个较低的高度上,使它们能够容易检测在地上的障碍物。
Pepper机器人中用于ROS定位和导航的软件架构,ROS节点用蓝色表示,箭头表示主题上的通信。
由于Pepper的3D传感器位于头部,可以移动和改变方向。因此,我们改用了另外两个包,第一个包从深度图像转换为点云(depth image proc),第二个包从3D点云创建2D激光扫描(pointcloud to laserscan)。最后一个节点可以将其参考帧的3D数据转换到其他目标帧,在点的最小和最大高度进行灵活地转换。它还允许我们在机器人的头部向下倾斜时进行转换。
定位和导航(Localization and Navigation)
在发布了激光扫描和测程技术后,加上地图服务器给出的地图,机器人可以使用自适应蒙特卡洛定位的AMCL在地图帧中进行定位。最后,利用地图、定位后的姿态估计和避障激光扫描,机器人可以自动导航到目标位置。这个目标位置可以通过rviz之类的可视化工具给出,甚至可以通过用户请求的语音交互间接给出。导航节点找到从当前位置到目标位置的最优路径,同时避开地图中的障碍物和导航时第一次看到的障碍物。最后,导航节点还会找到应该发送给机器人的速度命令,以便机器人遵循计划的路径。ROS接口然后通过将标准ROS类型的velocity命令转换为NAOqi的函数调用来关闭循环,以便发送命令。
在下图中,我们显示了在IBM研究位置本地化和导航的真实Pepper的可视化。地图使用Gmapping(基于网格的SLAM)构建,黑色为障碍物,浅灰色为自由空间。激光扫描模拟的深度图像显示为重叠一面墙的红点。全局规划器使用带有膨胀障碍物的地图(ROS costmap)来确定可导航空间,规划器从成本图中找到从当前位置到目的地的最优路径。另一个局部成本图的确定仅使用来自模拟激光扫描的观察。最后,用粒子滤波估计机器人的位置,在机器人周围用红色箭头表示的图像中。粒子云的大小显示了机器人姿态估计的不确定性。
在预先构建的环境地图中移动时,真实Pepper的可视化:黑色代表障碍物,浅灰色代表自由空间,深灰色代表未探索的区域;全局地图用蓝色和浅紫色表示;绿线为从当前位置到目的地的最优路径。
如上图所示,在预先构建的环境地图中移动时,真实Pepper的可视化:黑色代表障碍物,浅灰色代表自由空间,深灰色代表未探索的区域;全局地图用蓝色和浅紫色表示;绿线为从当前位置到目的地的最优路径
既然ROS和NAOqi都支持分布式体系结构,那么图中的方案与节点运行的位置无关,无论是在本地的Pepper上,还是在远程的其他机器上。但是如前所述,任何具有实时约束的东西都应该在机器人上本地运行。因为本地化和导航非常关键,所以我们在机器人上本地运行ROS接口和所有其他ROS节点,以保持控制循环速率,除了在Ubuntu系统上远程运行的可视化之外。
为了成功地实现前面描述的方法,我们必须在机器人上安装和运行ROS。我们之前说过,为了在机器人上运行C++,我们需要将其交叉编译到机器人操作系统。但是,除了交叉编译,还有一种替代方法,我们发现它更容易用于在机器人上安装ROS。
软件开发的替代方案
软件开发的替代方案是使用软银提供的虚拟机和Pepper的操作系统相同。虽然Pepper没有软件开发工具或包管理器,但虚拟机提供了开发人员工具,如gcc、cmake以及用于Gentoo的emerge和portage包树。更重要的是,虚拟机具有根权限,因此我们可以编译和安装任何需要的第三方系统依赖。
虚拟机使构建第三方库变得更容易,可以通过ssh复制文件,轻松地将这些库移植到Pepper机器人。通过将文件放在主目录下的某个文件夹中,并将环境路径变量LD _LIBRARY_PATH和PYTHONPATH指向正确的目录,可以在机器人上不需要管理特权的情况下完成这一点。此外,当通过包管理器安装系统依赖项时,虚拟NAOqi OS将在名为opennao-的文件夹中创建一个包含头文件和库的压缩文件。
在主目录下。通过在虚拟机中安装系统依赖并轻松地将文件复制到机器人,这个过程使得间接安装Pepper的系统依赖非常容易。软银建议不要升级虚拟机中的系统,因为包是在那之后构建的。
可能与机器人上的NAOqi OS不兼容。在安装了所需的系统依赖项之后,我们可以在虚拟机中从其源代码编译ROS。为了运行我们的实验,我们需要编译ROS核心包和导航包,以及所有的ROS依赖。虽然大多数需要的ROS包是基于catkin的,但一些导航堆栈需要的ROS包是纯cmake包。因此,为了编译这些包,我们需要创建一个单独的工作区,并用catkin make isolation命令编译它。我们发现,这个命令在Gentoo上不完全支持,但是可以通过安装dpkg (Debian的包维护系统)来修复。
同样,我们可以通过在虚拟机中编译它并通过ssh将文件移动到Pepper上,从而间接地在Pepper上安装ROS,只需要将环境和ROS路径变量更新到正确的目录。最后,在Pepper上安装ROS的步骤如下:
•使用NAOqi OS (VM)下载虚拟机;
•将ROS源代码下载到VM;
•编译VM上的系统依赖性,如log4cxx、apr-util、yaml等;
•在发布模式下使用catkin_make_isolated在VM上编译ROS软件包以便同时编译catkin和pure cmake软件包(为了成功进行编译,可能需要在一个工作区中将pure cmake软件包分开,在另一个工作区用catkin_make替代catkin包编译);
•复制ROS安装文件夹和opennao-disto文件夹的系统依赖到Pepper的主目录;
•更改ROS变量和环境路径变量LD_LIBRARY_PATH和PYTHONPATH,以指向正确的目录。
参考文献:
[1] L. L. Forero, J. M. Yanez, and J. Ruiz-del Solar, “Integration of the ´ros framework in soccer robotics: the nao case,”
[2] D. Fox,“Adapting the sample size in particle fifilters through kldsampling,”
[3] G. Grisetti, C. Stachniss, and W. Burgard, “Improving grid-basedslam with rao-blackwellized particle fifilters by adaptive proposals andselective resampling,”
[4]“Pepper-Robot ROS Stack,” http://wiki.ros.org/pepper robot.
[5]“Cross-compiling ROS for NAOqi,”
http://wiki.ros.org/nao/Installation/compileWithToolchain.
[6] “NAOqi API and documentation,” http://doc.aldebaran.com/2-4/.
[7] “IBM Speech to Text webservice,”
https://www.ibm.com/watson/developercloud/speech-to-text.html.
发现“分享”和“赞”了吗,戳我看看吧