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

摘要                                            

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

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

2.google-cartographer机器人SLAM建图nginx

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

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

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



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

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

4.1.状态机                 

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

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

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

相关文章
相关标签/搜索