《ROS理论与实践》学习笔记(九)机器人自主导航

  • 课程内容
    • ROS中的导航框架
    • 导航框架中的关键功能包
      • move_base
      • amcl
    • 机器人自主导航案例
      • 导航仿真
      • 程序接口
      • move_base+gmapping

在学习《ROS理论与实践》课程时,记录了学习过程中的编程练习,课后作业以及发现的问题,后续会对尚未解决的问题继续分析并更新,纯小白,仅供参考。
本次学习笔记关于课程中的第八讲:机器人SLAM建图 。主要学习了ROS中的导航框架、导航框架中的关键功能包、机器人自主导航案例。
本章ROS Wiki参考链接:ROS wiki 导航


课程内容

ROS中的导航框架

ROS提供了基于move_base的导航框架,其中move_base中包括了全局规划global_planner,本地规划local_planner,恢复机制recovery_behaviors等。


导航框架中的关键功能包

move_base

具体内容Wiki链接:wiki move_base

  1. 全局路径规划(global planner)
    包括了全局最优路径的规划,一般采用Dijkstra(距离)或者A*算法(时间)
  2. 本地实时规划(local planner)
    规划机器人每个周期内的线速度、角速度,使之尽量符合全局最优路径,实现实时避障功能,通常采用Trajectory Rollout和Dynamic Window Approaches算法
  3. 动作Action
    是一种问答通信机制,C/S架构,基于ROS的消息机制实现,下面是move_base功能包中的话题和服务

amcl

具体内容Wiki链接:wiki amcl
基于蒙特卡洛定位方法,针对已有地图使用粒子滤波器跟踪一个机器人的姿态,相比于里程计定位,amcl定位还可以利用雷达等信息直接进行机器人的位姿估算,下面是amcl功能包中的话题和服务


机器人自主导航案例

导航仿真

本示例程序主要实现在Rviz中,使用2D Nav Goal工具绘制目标点,使得Gazebo中的机器人自动导航运动到目标点的功能
代码来自课程源码包,下面只给出启动代码,主要是启动了gazebo仿真环境、move_base和amcl节点

$ roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
$ roslaunch mbot_navigation nav_cloister_demo.launch

下图是仿真结果,可以看到机器人能够完成从起始点到目标点的运动

为了检测机器人导航的动态避障,在Gazebo中添加障碍物,可以在Rviz中看到导航路线的实时更新,因此该算法具有较好的避障效果。

程序接口

代码包提供了两个导航demo,通过在程序中直接设置目标点实现机器人的导航功能,设置目标点部分的代码如下:

# 设定目标点
target = Pose(Point(-5.543, -4.779, 0.000), Quaternion(0.000, 0.000, 0.645, 0.764))
goal = MoveBaseGoal()
goal.target_pose.pose = target
goal.target_pose.header.frame_id = 'map'
goal.target_pose.header.stamp = rospy.Time.now()
# 向目标进发
move_base.send_goal(goal)

move_base+gmapping

利用move_base和gmapping两个功能包的结合,实现机器人在未知环境下进行导航和实时的建图。
在Rviz中设置目标点实现机器人移动,启动代码如下:

$ roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
$ roslaunch mbot_navigation exploring_slam_demo.launch

也可以在程序中直接设置随机目标点,让机器人进行自动的导航和建图,启动代码如下:

$ roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
$ roslaunch mbot_navigation exploring_slam_demo.launch
$ rosrun mbot_navigation exploring_random.py

仿真结果如下

《ROS理论与实践》学习笔记(九)机器人自主导航相关推荐

  1. ROS(Noetic)学习笔记 创建机器人URDF模型并在rviz中显示过程中遇到的一些问题

    背景环境: Ubuntu 20.04 ROS-Noetic 所学教程:<ROS机器人开发实践>chapter 6_2 问题描述及解决方法: 报错:无法启动节点<robot_state ...

  2. <笔记>机器人操作系统ROS理论与实践--第一讲:认识ROS

    <笔记>机器人操作系统ROS理论与实践--第一讲:认识ROS 前言 一.为什么需要ROS 二.ROS的总体设计 1.一个目标 2.五个特点 3.四位一体 三.ROS的系统实现--三个层次 ...

  3. ROS机器人入门课程《ROS理论与实践》零基础教程(推荐课程)

    ROS的入门,对于纯小白的我来说很是痛苦,尤其是听完古月老师的21讲之后,更是浇灭了学习的兴趣,当时还在考虑要不要他的买课,还是算了,反正也听不懂,,,!!! 在一番挣扎之后,发现了赵虚左老师的课程, ...

  4. ROS理论与实践(以移动机器人为例)连载(十)【完结】 ——机器人综合应用—“迷宫寻宝”

    这讲会提供示例代码! Content 1. "迷宫寻宝" 之任务发布 2. "迷宫寻宝" 之任务分析 3. "迷宫寻宝" 之具体实现 ①机器 ...

  5. ROS学习笔记九:用C++编写ROS发布与订阅

    ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...

  6. ROS学习笔记-多机器人通信(1)-实现两台机器通信

    ROS是一个分布式的计算环境.一个正在运行的ROS可以在多个机器人之间分布成几十甚至上百个节点.取决于系统的配置方式,任何节点可能需要随时与任何其他节点进行通信,为实现使用同一个master控制多台机 ...

  7. ROS理论与实践——二、ROS基础

    ROS理论与实践--二.ROS基础 前言 一.创建工作空间 1 什么是工作空间 2 创建流程 二.创建功能包 1 创建命令 2 创建流程 三.ROS通信编程 1 话题编程 1.1 话题编程流程 1.2 ...

  8. 古月ROS入门21讲学习笔记

    古月ROS入门21讲学习笔记 1.VMware+Ubuntu18.04+ROS安装 2.Linux命令 3.ROS是什么 ROS中的通信机制 ROS的开发工具 ROS的应用功能 ROS中的生态系统 老 ...

  9. 古月居ROS入门21讲学习笔记P9

    古月居ROS入门21讲学习笔记P9 工作空间(workspace) 创建工作空间 创建功能包 实操 创建工作空间 创建功能包 老师在B站的原视频 链接: [古月居]古月·ROS入门21讲 | 一学就会 ...

最新文章

  1. poj3096(set的应用)
  2. 上周热点回顾(12.18-12.24)
  3. c语言如何扩大字体,C语言图形汉字及放大显示程序
  4. 更改图书信息c语言编码,图书管理系统C语言实现源代码.pdf
  5. matlab2014a VS2010混合编程
  6. PSPNet 使用问题
  7. 总在说思科华为认证 可你真的清楚它们的区别吗?
  8. Vscode的Tab 键设定
  9. 服务器Socket概述与实例
  10. 读书笔记-《Head First 软件开发》
  11. Redis 3种集群方式,别傻傻分不清!
  12. [Excel启用编辑]的影响与关闭
  13. 应聘web前端开发面试时问到的基础问题
  14. 高级前端基础-JavaScript抽象语法树AST
  15. 有监督、半监督、无监督、弱监督、自监督
  16. 三年大厂面试官——二面题(偏难)
  17. 酒店点餐系统开发详解(三)
  18. 【备战美赛】Lingo与规划问题
  19. Sweet Home 3D软件简单使用教程。
  20. 电子烟TPD/烟油TDP检测步骤

热门文章

  1. MySQL内部搜索引擎
  2. 如何批量生成文件夹并命名
  3. 牛视源码定制,抖音矩阵系统。come here
  4. 基于Java+Swing实现中国象棋游戏
  5. 安装海龟绘图类库(turtle)
  6. 论文《基于深度学习的表面缺陷检测方法综述》学习笔记
  7. 半导体显示|深天马A拟在厦门建第6代柔性AMOLED生产线项目
  8. jsp格式date类型
  9. restful规范对应的controller层注解,testng测试
  10. discord Bot 实现机器人发送私信验证码