当前位置: 首页 > article >正文

【ROS的Navigation导航系统】

提示:详情可参考index.ros.org网站

文章目录

  • 一、ROS的导航系统简介
  • 二、导航系统仿真环境准备工作与运行
    • 【1】下载源代码
    • 【2】建图指令(前面如果已经创建了地图可以直接使用)
    • 【3】创建软件包
    • 【4】参考launch代码编写nav.launch文件
    • 【5】运行导航程序
    • 【6】设定导航的目标地点
  • 总结


一、ROS的导航系统简介

ROS导航系统架构图
在这里插入图片描述

global_planner全局规划器,相当于手机地图APP,它从map_server地图服务器获取全局地图数据,然后根据输入的导航目的地生成全局导航路线internal nav_msgs/Path;

local_planner负责运动控制,控制机器人底盘通信节点base_controller沿着全局导航路线进行运动;

运动过程中需要激光雷达,结合定位器amcl节点来实时给出机器人自身位置,同时还需要里程计来提升定位的可靠性;

机器人在移动过程中经常会遇到一些临时的障碍物,这些障碍物在建图的时候不存在,而在导航过程中突然出现了,因此机器人在移动过程中还需要使用激光雷达、相机等传感器来实事生成机器人周围的障碍物地图(局部地图);

当临时障碍物挡住导航路线时,local_planner会根据局部规划器里的避障算法绕开障碍物,如果无法绕开障碍物,就会激活所谓的应急机制,机器人会采取一系列应急措施尝试突破当前困境,当确认无法绕开障碍物时,会将该临时障碍物更新到全局地图里,然后请求全局规划器(global_planner)再规划一条全新的路线,从而完成导航任务;

move_base软件包里面包含了很多用于导航的功能,其中有个叫move_base的节点,它把全局规划器和局部规划器连接到了一起,同时它还维护着两个地图,分别给两个规划器使用;

move_base节点工作需要/tf、odom、/map、sensor topics这四个消息的同时输入以及导航目地点信息,它才会不断地输出速度指令给地盘节点,驱动机器人行驶去往目标点;

move_base的四组输入数据的实现:
首先运行move_base节点;
1.map_server即地图服务节点,运行该节点并将导航需要的地图文件加载进去,move_base就会自动获取这些地图数据;
2.sensor sources表示多个传感器节点,部分机器人可能安装了多个激光雷达传感器,对于仿真机器人而言,只要加载到仿真环境中,自动就会输出sensor_msgs/LaserScan、sensor_msgs/PointCloud数据到相应的话题,因此在仿真环境无需额外添加该节点;
3.odometry source里程计节点,在仿真环境中也可以由仿真机器人模型自己提供;
4.sensor transforms传感器位置的tf,这些数据在仿真环境中也是由仿真机器人自己提供的;amcl定位模块节点;

对于仿真环境,只需要将下列三个节点都运行起来,输入对应的导航目标即可开启导航功能;
move_base导航节点
map_server地图服务节点
amcl定位节点
参考资料链接:https://wiki.ros.org/move_base

二、导航系统仿真环境准备工作与运行

【1】下载源代码

前面已经安装过了wpr_simulation可以跳过这一步
cd ~/catkin_ws/src
git clone https://github.com/6-robot/wpr_simulation.git
若github超时,试试从gitee下载:
git clone https://gitee.com/s-robot/wpr_simulation.git

进入脚本文件夹,安装依赖项
cd wpr_simulation/scripts/
./install_for_noetic.sh
编译
cd ~/catkin_ws/
catkin_make

下载机器人驱动源码包(前面没有用到这个包,需要执行安装指令)
cd ~/catkin_ws/src
git clone https://github.com/6-robot/wpb_home.git
若github超时,试试从gitee下载:
git clone https://gitee.com/s-robot/wpb_home.git

进入脚本文件夹,安装依赖项
cd ~/catkin_ws/src
cd wpb_home/wpb_home_bringup/scripts/
./install_for_noetic.sh
编译
cd ~/catkin_ws/
catkin_make
等待编译完成即可
在这里插入图片描述

【2】建图指令(前面如果已经创建了地图可以直接使用)

启动SLAM仿真程序
roslaunch wpr_simulation wpb_gmapping.launch
使用键盘控制机器人运动
rosrun wpr_simulation keyboard_vel_ctrl
保存地图(生成map.pgm和map.yaml文件)
rosrun map_server map_saver -f map
将生成的两个文件(.pgm和.yaml文件)放到wpr_simulation的maps文件夹里
在这里插入图片描述

【3】创建软件包

使用launch文件启动如下三个节点:
move_base导航节点
map_server地图服务节点
amcl定位节点

进入工作空间源码目录:
cd catkin_ws/src/
创建一个新的软件包来放置launch文件(文件名称 nav_pkg):
需要添加导航需要的依赖项move_base_msgs actionlib
catkin_create_pkg nav_pkg roscpp rospy move_base_msgs actionlib
在vscode中找到nav_pkg软件包,在该目录下新建launch文件夹;
在launch文件夹中新建nav.launch文件;
在这里插入图片描述

【4】参考launch代码编写nav.launch文件

wpr_simulation/launch/wpb_demo_nav.launch
在这里插入图片描述

编写launch文件:

<launch>
	<node pkg="move_base" type="move_base" name="move_base">
        <rosparam file="$(find wpb_home_tutorials)/nav_lidar/costmap_common_params.yaml" command="load" ns="global_costmap" />
        <rosparam file="$(find wpb_home_tutorials)/nav_lidar/costmap_common_params.yaml" command="load" ns="local_costmap" />
        <rosparam file="$(find wpb_home_tutorials)/nav_lidar/global_costmap_params.yaml" command="load" />
        <rosparam file="$(find wpb_home_tutorials)/nav_lidar/local_costmap_params.yaml" command="load" />
        <param name="base_global_planner" value="global_planner/GlobalPlanner" /> 
        <param name="base_local_planner" value="wpbh_local_planner/WpbhLocalPlanner" />
	</node>
	<node pkg="map_server" type="map_server" name="map_server" args="$(find wpr_simulation)/maps/map.yaml"/>
	<node pkg="amcl" type="amcl" name="amcl"/>
</launch>

在这里插入图片描述

重新编译
cd ~/catkin_ws/
catkin_make

【5】运行导航程序

运行仿真环境:
roslaunch wpr_simulation wpb_stage_robocup.launch
运行前面编写好的launch文件
roslaunch nav_pkg nav.launch

如果不想手动编写nav.launch文件,可以运行下列参考launch文件:
roslaunch wpr_simulation wpb_demo_nav.launch

启动rviz
rosrun rviz rviz
Add-Map,选择地图话题;
Add-RobotModel;
在这里插入图片描述

【6】设定导航的目标地点

显示机器人的导航路线:
Add-Path,话题选择/move_base/GlobalPlanner/plan,此外Line Style设置为Billboards方便观察机器人导航路线;

可以使用rviz来完成:
工具栏2D Nav Goal按钮即发送导航目标点的按钮,点击该按钮,在地图上长按左键,出现的箭头即目标航点的朝向;
在这里插入图片描述在这里插入图片描述保存上述rviz配置,文件存放在nav_pkg=>rviz子目录下(没有该目录就新建),文件名称nav.rviz:
File=>Save Config As
在这里插入图片描述
修改前文中的nav.launch文件

<launch>

	<node pkg="move_base" type="move_base" name="move_base">
        <rosparam file="$(find wpb_home_tutorials)/nav_lidar/costmap_common_params.yaml" command="load" ns="global_costmap" />
        <rosparam file="$(find wpb_home_tutorials)/nav_lidar/costmap_common_params.yaml" command="load" ns="local_costmap" />
        <rosparam file="$(find wpb_home_tutorials)/nav_lidar/global_costmap_params.yaml" command="load" />
        <rosparam file="$(find wpb_home_tutorials)/nav_lidar/local_costmap_params.yaml" command="load" />
        <param name="base_global_planner" value="global_planner/GlobalPlanner" /> 
        <param name="base_local_planner" value="wpbh_local_planner/WpbhLocalPlanner" />
	</node>

	<node pkg="map_server" type="map_server" name="map_server" args="$(find wpr_simulation)/maps/map.yaml"/>

	<node pkg="amcl" type="amcl" name="amcl"/>

    <node name="rviz" pkg="rviz" type="rviz" args="-d $(find wpr_simulation)/rviz/nav.rviz"/>
    
</launch>

总结

简单介绍了ROS的导航功能,并且实现了ROS仿真机器人的导航功能。


http://www.kler.cn/a/392840.html

相关文章:

  • 大厂的 404 页面都长啥样?看看你都见过吗~~~
  • 豆瓣均分9:不容错过的9本大模型入门宝藏书籍,非常详细收藏我这一篇就够了
  • 实现 MVC 模式
  • 【Golang】Channel的ring buffer实现
  • qt QProcess详解
  • 深入解析 OpenHarmony 构建系统-4-OHOSLoader类
  • (附项目源码)Java开发语言,监督管家APP的设计与实现 58,计算机毕设程序开发+文案(LW+PPT)
  • 传奇996_19——常用函数
  • redis 原理篇 30 redis内存回收 过期key处理
  • 前端框架大比拼:React.js, Vue.js 及 Angular 的优势与适用场景探讨
  • linux,源码编译安装、rsync本地同步、rsync远程同步、inotifywaite实时同步、数据库服务基础、邮件的收发
  • LuaRocks如何安装数据库驱动?
  • Dubbo 3.x源码(24)—Dubbo服务引用源码(7)接口级服务发现订阅refreshInterfaceInvoker
  • Database Advantages (数据库系统的优点)
  • HTML文本标签学习记录
  • 乐理的学习(助音延伸,力度,速度,省略记号)
  • Rust,删除cargo安装的可执行文件
  • 计算机毕业设计Python+大模型农产品价格预测 ARIMA自回归模型 农产品可视化 农产品爬虫 机器学习 深度学习 大数据毕业设计 Django Flask
  • JVM详解:JVM的系统架构
  • IO技术详解
  • Python3.11.9+selenium,获取图片验证码以及输入验证码数字
  • UE5 样条线组件(未完待续)
  • ILRuntime热更新通过Addressables加载DLL
  • DAY113代码审计-PHPTP框架微P系统漏审项目等
  • 初识机器学习
  • vue el-date-picker 日期选择 回显后成功后无法改变的解决办法