# XBot-U机器人进阶-部署服务机器人
## 简介
该部分将介绍如何使用XBot-U科研教学平台,搭建一款室内讲解服务机器人应用。
讲解机器人的功能如下图所示:

机器人在迎宾区(建图起点)等待游览人员前来参观,游客站在机器人面前后,机器人人脸识别游客,若该游客未注册人脸,则提醒其注册;
如果该游客已注册人脸,则根据相应的问候语发出语音问候;
如果该游客已注册人脸并且被标记为VIP,则语音问候之后开启对话,识别到“带我参观”之后则进行带领参观,机器人逐渐前往已标记的关键点A、B……并说出对应关键点的讲解词。
为实现该讲解服务机器人,使用到的XBot-U功能包括:
- 机器人建图
- 机器人自主导航
- 机器人自主避障
- SLAM
- 人脸识别
- 语音交互
- 语音TTS
以下操作均采用机器人与笔记本ROS联机的方式运行,机器人为【主机】,笔记本为【从机】。
## 建图
### 停止自启服务
【主机】将机器人开机后,首先ssh登录xbot停止自启服务:
```
sudo service xbot stop
```
### 运行建图程序
将机器人放置在合适的起点,并做好标记**记住该建图起始点**。
【主机】在机器人上运行:
```
roslaunch xbot_navi build_map.launch
```
【从机】同时在笔记本从机上运行
```
roslaunch xbot_navi view_rviz.launch
```
来查看机器人的实时建图情况。
使用rviz中的2D Nav Goal工具引导机器人导航或者使用键盘遥控控制机器人在环境内移动,直到机器人建立你所需要的场所中多个讲解点即可。
### 保存地图
【主机】将地图保存到xbot_navi/map文件夹下:
```
roscd xbot_navi/map
rosrun map_server map_saver -f fuwu
```
至此,建图过程即完成,退出主机和从机终端中所有程序。
## 标点
【主机】继续接建图之后,首先修改xbot_navi/launch/load_map.launch文件中的地图文件名为刚才保存的地图fuwu。
```yaml
```
【主机】然后运行标点加载地图程序:
```
roslaunch xbot_navi load_map.launch
```
【主机】在机器人上运行标点程序:
```
rosrun xbot_navi input_keypoint.py
```
运行完成后首先在命令行提示中输入想要标记点的个数回车。
【从机】同时在笔记本从机上运行
```
roslaunch xbot_navi view_rviz.launch
```
然后在rviz中使用2D Nav Goal工具逐个点击地图上自己想要标记的点位,标记的同时也可以用鼠标指向对应的方向。
点击完成所有的标记点位之后, input_keypoint.py会提示标记完成,请退出程序。
标记后的关键点配置文件会自动保存到机器人上的xbot_navi/json/kp.json文件。
至此标点程序完成。
## 修改配置文件
以下配置文件的修改都在机器人主机上完成,建议采用远程ssh+vim的方式修改或者连接鼠标键盘显示器修改。
### 问候人脸配置文件
程序的两个配置文件存储在了xbot_navi/json目录下。
请提前在机器人上注册好人脸,并记下注册的name。
其中greet.json是问候人脸的配置文件,文件内容包括:
```
{
"wangpeng":
{
"isVIP": true,
"greet_words": "小主汪鹏您好,请问有什么吩咐?"
},
"fangyang":
{
"isVIP": true,
"greet_words": "方总您好,下面请您给客户演示一下公司的迎宾机器人小德的功能,谢谢。"
}
}
```
文件内容采用:
```
人脸注册姓名:{
是否是VIP,
识别成功后打招呼的文字。
}
```
的方式存储,isVIP字段为是否接待打开对话的关键字。
未注册用户不在该配置文件中人脸识别后机器人会说:您好,我还不认识您,如有需要请注册。
已注册人脸并且姓名在此文件中的但是非VIP的人脸识别后机器人会只打招呼说出greet_words但不对话。
已注册人脸并且姓名在此文件中并且是VIP的,则会在打招呼说出greet_words后开启语音对话。
## 关键点配置文件
关键点配置文件为上一步标点所保存的文件,kp.json。
```
[
{
"recog": false,
"play": true,
"name": "kp1",
"pose": [[-0.38369810581207275, -6.607648849487305, 0.0], [0.0, 0.0, 0.9999874980538496, -0.005000373586267479]],
"play_words": "方总您好,有客户找您,请接待。",
"chat": false
},
{
"recog": false,
"play": true,
"name": "kp2",
"pose": [[-0.01476144790649414, 0.019881725311279297, 0.0], [0.0, 0.0, 0.0, 1.0]],
"play_words": "接待已完成。",
"chat": false
}
]
```
该文件采用数组存储关键点的方式,关键点数据类型为:
```
{
在该点是否人脸识别,
是否语音播放内容,
点的名称,
点的坐标,
语音播放的内容,
是否对话
}
```
请按照自己的需求修改配置文件。
对于讲解机器人,在人脸识别后会进行一次对话,其他关键点建议不要开启语音对话和人脸识别,相应字段设为false即可。
## 运行程序
【主机】修改xbot_navi/launch/demo.launch文件,也是将该行的地图修改为建图所保存的fuwu.yaml。
```
```
请将机器人放置到上面**开始建图的所标记的起点**,朝向保持一致。
【主机】运行服务机器人程序
```
roslaunch xbot_navi demo.launch
```
然后注册过的人员站到机器人面前即可触发讲解服务机器人流程。
对话过程中“带我参观”作为关键词触发机器人前往讲解点,更多关于xbot_talker语音对话的内容,请查看[xbot_talker各模块说明](talker)。