《ROS理论与实践》学习笔记(九)机器人自主导航
《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
- 全局路径规划(global planner)
包括了全局最优路径的规划,一般采用Dijkstra(距离)或者A*算法(时间) - 本地实时规划(local planner)
规划机器人每个周期内的线速度、角速度,使之尽量符合全局最优路径,实现实时避障功能,通常采用Trajectory Rollout和Dynamic Window Approaches算法 - 动作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理论与实践》学习笔记(九)机器人自主导航相关推荐
- ROS(Noetic)学习笔记 创建机器人URDF模型并在rviz中显示过程中遇到的一些问题
背景环境: Ubuntu 20.04 ROS-Noetic 所学教程:<ROS机器人开发实践>chapter 6_2 问题描述及解决方法: 报错:无法启动节点<robot_state ...
- <笔记>机器人操作系统ROS理论与实践--第一讲:认识ROS
<笔记>机器人操作系统ROS理论与实践--第一讲:认识ROS 前言 一.为什么需要ROS 二.ROS的总体设计 1.一个目标 2.五个特点 3.四位一体 三.ROS的系统实现--三个层次 ...
- ROS机器人入门课程《ROS理论与实践》零基础教程(推荐课程)
ROS的入门,对于纯小白的我来说很是痛苦,尤其是听完古月老师的21讲之后,更是浇灭了学习的兴趣,当时还在考虑要不要他的买课,还是算了,反正也听不懂,,,!!! 在一番挣扎之后,发现了赵虚左老师的课程, ...
- ROS理论与实践(以移动机器人为例)连载(十)【完结】 ——机器人综合应用—“迷宫寻宝”
这讲会提供示例代码! Content 1. "迷宫寻宝" 之任务发布 2. "迷宫寻宝" 之任务分析 3. "迷宫寻宝" 之具体实现 ①机器 ...
- ROS学习笔记九:用C++编写ROS发布与订阅
ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...
- ROS学习笔记-多机器人通信(1)-实现两台机器通信
ROS是一个分布式的计算环境.一个正在运行的ROS可以在多个机器人之间分布成几十甚至上百个节点.取决于系统的配置方式,任何节点可能需要随时与任何其他节点进行通信,为实现使用同一个master控制多台机 ...
- ROS理论与实践——二、ROS基础
ROS理论与实践--二.ROS基础 前言 一.创建工作空间 1 什么是工作空间 2 创建流程 二.创建功能包 1 创建命令 2 创建流程 三.ROS通信编程 1 话题编程 1.1 话题编程流程 1.2 ...
- 古月ROS入门21讲学习笔记
古月ROS入门21讲学习笔记 1.VMware+Ubuntu18.04+ROS安装 2.Linux命令 3.ROS是什么 ROS中的通信机制 ROS的开发工具 ROS的应用功能 ROS中的生态系统 老 ...
- 古月居ROS入门21讲学习笔记P9
古月居ROS入门21讲学习笔记P9 工作空间(workspace) 创建工作空间 创建功能包 实操 创建工作空间 创建功能包 老师在B站的原视频 链接: [古月居]古月·ROS入门21讲 | 一学就会 ...
最新文章
- poj3096(set的应用)
- 上周热点回顾(12.18-12.24)
- c语言如何扩大字体,C语言图形汉字及放大显示程序
- 更改图书信息c语言编码,图书管理系统C语言实现源代码.pdf
- matlab2014a VS2010混合编程
- PSPNet 使用问题
- 总在说思科华为认证 可你真的清楚它们的区别吗?
- Vscode的Tab 键设定
- 服务器Socket概述与实例
- 读书笔记-《Head First 软件开发》
- Redis 3种集群方式,别傻傻分不清!
- [Excel启用编辑]的影响与关闭
- 应聘web前端开发面试时问到的基础问题
- 高级前端基础-JavaScript抽象语法树AST
- 有监督、半监督、无监督、弱监督、自监督
- 三年大厂面试官——二面题(偏难)
- 酒店点餐系统开发详解(三)
- 【备战美赛】Lingo与规划问题
- Sweet Home 3D软件简单使用教程。
- 电子烟TPD/烟油TDP检测步骤