SLAM+语音机器人DIY系列:(六)SLAM建图与自主避障导航——4.多目标点导航及任务调度

摘要                                            

通过前面的基础学习,本章进入最为激动的机器人自主导航的学习。在前面的学习铺垫后,终于迎来了最大乐趣的时刻,就是赋予我们的miiboo机器人能自由行走的生命。本章将围绕机器人SLAM建图、导航避障、巡航、监控等内容展开。本章内容:

1.在机器人上使用传感器

2.google-cartographer机器人SLAM建图

3.ros-navigation机器人自主避障导航

4.多目标点导航及任务调度

5.机器人巡航与现场监控



4.多目标点导航及任务调度        

通过前面的学习,我们已经可以通过点击地图的方式来命令机器人运动到目标点。其实,ros-navigation导航框架就是为我们提供了一个最基本的机器人自动导航接口,即单点导航。然而,在实际的机器人应用中,机器人往往要完成复杂的任务,这些复杂的任务都是由一个个基本的任务组合而成的。一般的,机器人通过状态机的形式将一个个基本任务组合在一起来进行复杂任务的调度实现。

4.1.状态机                 

这里我们只讨论有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入条件时,将从当前状态转换到另一个状态,或者仍然保持在当前状态。任何一个FSM都可以用状态转换图来描述,图中的节点表示FSM中的一个状态,有向加权边表示输入条件时状态的变化。如图49,以一个上班族的生活场景来举例说明状态机的状态转换图。矩形框表示FSM中的一个状态,有向边表示在输入条件下的状态转换过程。

(图49)有限状态机FSM举例

4.2.多目标点巡航            

机器人多目标点巡航,特别是按特定巡逻路径进行巡航是很实用的功能。这里将利用前面学到的ros-navigation单点导航、状态机、状态机任务调度的知识。我们来编写一个应用功能包实现机器人多目标点巡航。

到这里,我们慢慢清楚了miiboo机器人编程的框架思路,我们将传感器相关的底层驱动包放在~/catkin_ws/工作空间统一管理,将基于google-cartographerSLAM建图程序包放在~/catkin_ws_carto/工作空间统一管理,将基于ros-navigation的导航程序包放在~/catkin_ws_nav/工作空间统一管理,将高层应用功能包放在~/catkin_ws_apps/工作空间统一管理。miiboo机器人编程的框架思路,如图50

(图50miiboo机器人编程的框架思路

这里将建立一个叫catkin_ws_appsROS工作空间,专门用于放置日后开发的各种应用层功能包。关于创建ROS工作空间的操作,请参考前面相应部分内容,这里就不做讲解。在~/catkin_ws_apps/src/中建立一个叫patrol的功能包,建好后的patrol功能包文件结构,如图51

(图51patrol功能包文件结构

关于功能包的文件结构,大家已经很熟悉了,就不啰嗦了。这里重点讲解一下patrol_fsm.py这个文件,文件内容如图52

(图52patrol_fsm.py文件内容

这里采用python来编写多目标点巡航的逻辑,python开发ROS节点的优点是简洁高效。代码中waypoints数组里面存放的是要巡航的各个目标点,大家可以根据自己的需要进行相应的替换和增减;with patrol代码块里面实现状态机的构建;最后调用状态机的执行函数,状态机就开始工作了,也就是开始执行巡航了。

启动多目标点巡航分为3步:启动机器人上所有传感器、启动导航所需各个节点、启动多目标点巡航节点。

首先,启动机器人上所有传感器,打开终端,通过下面的命令直接启动就行了。

source ~/catkin_ws/devel/setup.bash 
roslaunch miiboo_bringup miiboo_all_sensor.launch 

然后,启动导航所需各个节点,打开终端,通过下面的命令直接启动就行了。

source ~/catkin_ws_nav/devel/setup.bash 
roslaunch miiboo_nav miiboo_nav.launch

最后,启动多目标点巡航节点,打开终端,通过下面的命令直接启动就行了。

source ~/catkin_ws_apps/devel/setup.bash 
roslaunch patrol patrol.launch

4.3.复杂多任务机器人未来展望   

机器人可以进行自动导航、人机对话、用机械臂抓取物体、物体识别等。将这些任务结合起来,利用机器人强大的大脑推理机制能完成更为复杂和智能化的任务。如果说基于状态机的复杂任务调度是1.0版本的智能,那么基于大脑推理机制的复杂任务调度将是2.0版本的智能。

我的设想是利用强化学习神经网络作为大脑推理机制的实现实体,如图53。自动导航、人机对话、用机械臂抓取物体、物体识别等任务组合的整体作为机器人与外界环境交互的动作空间,动作空间的的状态分为两种形态:执行结果、执行策略。执行结果作为强化学习神经网络的输入,而执行策略作为强化学习神经网络的输出。我们不断通过各种复杂的实际场景的粒子来训练机器人,让机器人能在复杂场景下能做正确的事情。比如说,当机器人收到主人“我渴了”的语音信息后,自动导航到桌子边,然后识别桌上的可乐,并用机械臂抓取,最后递给主人,并提醒主人“你的可乐来了”。

 (图53)强化学习神经网络作为大脑推理机制

 哈哈!这样的想法很炫酷,不过以目前的技术实现难度还比较大,所以作为未来展望分享给大家。希望和大家一起努力,在不远的将来能实现这个梦想。

后记                                                      

------SLAM+语音机器人DIY系列【目录】快速导览------

第1章:Linux基础

1.Linux简介

2.安装Linux发行版ubuntu系统

3.Linux命令行基础操作

第2章:ROS入门

1.ROS是什么

2.ROS系统整体架构

3.在ubuntu16.04中安装ROS kinetic

4.如何编写ROS的第一个程序hello_world

5.编写简单的消息发布器和订阅器

6.编写简单的service和client

7.理解tf的原理

8.理解roslaunch在大型项目中的作用

9.熟练使用rviz

10.在实际机器人上运行ROS高级功能预览

第3章:感知与大脑

1.ydlidar-x4激光雷达

2.带自校准九轴数据融合IMU惯性传感器

3.轮式里程计与运动控制

4.音响麦克风与摄像头

5.机器人大脑嵌入式主板性能对比

6.做一个能走路和对话的机器人

第4章:差分底盘设计

1.stm32主控硬件设计

2.stm32主控软件设计

3.底盘通信协议

4.底盘ROS驱动开发

5.底盘PID控制参数整定

6.底盘里程计标

第5章:树莓派3开发环境搭建

1.安装系统ubuntu_mate_16.04

2.安装ros-kinetic

3.装机后一些实用软件安装和系统设置

4.PC端与robot端ROS网络通信

5.Android手机端与robot端ROS网络通信

6.树莓派USB与tty串口号绑定

7.开机自启动ROS节点

第6章:SLAM建图与自主避障导航

1.在机器人上使用传感器

2.google-cartographer机器人SLAM建图

3.ros-navigation机器人自主避障导航

4.多目标点导航及任务调度

5.机器人巡航与现场监控

第7章:语音交互与自然语言处理

1.语音交互相关技术

2.机器人语音交互实现

3.自然语言处理云计算引擎

第8章:高阶拓展

1.miiboo机器人安卓手机APP开发

2.centos7下部署Django(nginx+uwsgi+django+python3)

----------------文章将持续更新,敬请关注-----------------

 

如果大家对博文的相关类容感兴趣,或有什么技术疑问,欢迎加入下面的《SLAM+语音机器人DIY》QQ技术交流群,一起讨论学习^_^

关于我们:

视频教程:

 

https://www.bilibili.com/video/av61448040

 

posted @ 2019-02-22 00:28 小虎哥哥爱学习 阅读(...) 评论(...) 编辑 收藏