ROS kinetic自定义路径规划算法
文章目录
- 前言
- 一、Navigation源码的编译
- 1.Navigation二进制版的卸载
- 2.Navigation源码的安装步骤
- 二、RRT*路径规划算法的移植
- 1.RRT*路径规划插件
- 三、在机器人仿真环境下的调用
- 四、实验现象
- 总结
前言
本文章使用古月居中的ROS移动机器人仿真环境,通过对Navigation源码的编译,实现利用自己的路径规划算法进行路径规划的目的。在该篇文章中以移植的为RRT*算法为例,该算法的特点读者可以自行百度学习了解,
一、Navigation源码的编译
首先根据的自己的ROS版本下载相应版本的Navigation源码(如果已安装二进制版的导航功能包需将其卸载),作者使用的是kinetic版本的Navigation,源码链接,也可以自行去github搜索下载。
1.Navigation二进制版的卸载
在终端中执行如下指令:
首先安装依赖项
sudo apt-get install ros-kinetic-navigation*
移除原有的navigation功能包
sudo apt-get remove ros-kinetic-navigation
sudo apt-get remove ros-kinetic-navigation-experimental
然后再到工作空间中下载navigation,或者直接将其拷贝在(工作空间/src)文件夹下,执行
catkin_make
2.Navigation源码的安装步骤
具体的安装步骤可参考这篇文章,或许有可能报错可以根据提示安装对应的依赖即可。
二、RRT*路径规划算法的移植
1.RRT*路径规划插件
该部分的源码见链接。在下载的功能包中内容如下:
其中src和include文件夹中分别存放源文件和头文件。需要注意的有如下几点:
(1)在CMakeLists.txt文件中:
add_library(${PROJECT_NAME}src/RRTstar_ros.cpp
)
执行这条语句将会在工作空间/devel/lib中编译生成相应的动态链接库——lib(工程名字).so,里面PROJECT_NAME为工程名,当然也可以自己定义,但是为了方便和区分一般会使用工程名。
(2)编辑插件描述文件
在RRT*功能包中有一个名为:rrt_star_planner_plugin.xml的文件。内容如下:
<library path="lib/librrt_star_global_planner"><class name="RRTstar_planner/RRTstarPlannerROS" type="RRTstar_planner::RRTstarPlannerROS" base_class_type="nav_core::BaseGlobalPlanner"><description>This is RRT Star Global Planner Plugin by Rafael Barreto.</description></class>
</library>
其中library path描述该功能包到library的相对路径;class name为插件名字,插件名字通常使用命名空间/类名称的形式进行命名,如(RRTstar_planner/RRTstarPlannerROS);type表示功能类的类型全名;base_class_type表示实现插件的基类名称;description描述功能类的功能。有关该文件的详细信息可以参考该文档。
(3)在ROS包系统中注册路径规划插件
在package.xml文件中的末尾有如下语句:
<export><!-- Other tools can request additional information be placed here --><nav_core plugin="${prefix}/rrt_star_planner_plugin.xml"/></export>
其中${prefix}/将会自动确定rrt_star_planner_plugin.xml文件的完整路径。该文件的详细描述可参考这篇文档。
在对功能包进行编译完成后可通过如下指令进行查看路径规划算法是否成功注册到ROS系统中。
rospack plugins --attrib=plugin nav_core
成功则可以从列表中看到自己定义的路径规划插件,如下图:
三、在机器人仿真环境下的调用
本文以古月居论坛中提供的ROS仿真机器人为例,对其用到的路径规划方法进行修改,以到达到在ROS中使用自定义路径规划方法的目的。该部分主要分为以下几步:
1、在工作空间目录下的src/mrobot_navigation/mrobot目录下分别创建名为base_global_planner_params.yaml和move_base_params.yaml的两个文件。
(1)base_global_planner_params.yaml内容为:
GlobalPlanner:allow_unknown: falsedefault_tolerance: 0.2visualize_potential: falseuse_dijkstra: falseuse_quadratic: trueuse_grid_path: falseold_navfn_behavior: falselethal_cost: 253neutral_cost: 50cost_factor: 3.0publish_potential: trueorientation_mode: 0orientation_window_size: 1
(2)move_base_params.yaml的内容为:
#base_global_planner: global_planner/GlobalPlanner
base_global_planner: RRTstar_planner/RRTstarPlannerROS
#base_global_planner: astar_planner/AstarPlanner
base_local_planner: dwa_local_planner/DWAPlannerROSshutdown_costmaps: falsecontroller_frequency: 5.0 #before 5.0
controller_patience: 3.0planner_frequency: 0.5
planner_patience: 5.0oscillation_timeout: 10.0
oscillation_distance: 0.2conservative_reset_dist: 0.1 #distance from an obstacle at which it will unstuck itselfcost_factor: 1.0
neutral_cost: 55
lethal_cost: 253
这里面一些具体的参数设置读者可以去自行百度搜索查阅,在这里就不做赘述了。
2、对工作空间目录下的src/mrobot_navigation/launch目录下的move_base.launch文件进行修改,该步主要是将第一步中创建的文件目录添加的move_base.launch文件中。修改完成后内容如下:
<launch><node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true"><rosparam file="$(find mrobot_navigation)/config/mrobot/costmap_common_params.yaml" command="load" ns="global_costmap" /><rosparam file="$(find mrobot_navigation)/config/mrobot/costmap_common_params.yaml" command="load" ns="local_costmap" /><rosparam file="$(find mrobot_navigation)/config/mrobot/local_costmap_params.yaml" command="load" /><rosparam file="$(find mrobot_navigation)/config/mrobot/global_costmap_params.yaml" command="load" /><rosparam file="$(find mrobot_navigation)/config/mrobot/base_local_planner_params.yaml" command="load" /><rosparam file="$(find mrobot_navigation)/config/mrobot/base_global_planner_params.yaml" command="load" /><rosparam file="$(find mrobot_navigation)/config/mrobot/move_base_params.yaml" command="load" /></node></launch>
3、对工作空间进行编译,在编译完成后,分别在终端中输入以下指令:
roslaunch mrobot_gazebo mrobot_laser_nav_gazebo.launch
roslaunch mrobot_navigation fake_nav_cloister_demo.launch
有可能会出现如下图所示错误:
可以使用如下命令添加路径:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:[path of your ros package]
例如:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/zgd/ROS_Works/shenlan_ws/src
这时可能出现如下错误:
原因是因为在使用路径规划器进行路径规划时机器人长时间困在一小片区域,这时可以通过启动move_base的自恢复机制重新进行路径规划。主要对通过对move_base_params.yaml文件中的这两个参数进行调整:
oscillation_timeout: 0.0 #10.0
oscillation_distance: 0.5 #0.2
四、实验现象
Gazbo中的仿真环境:
rviz的仿真:
实验结果并不是很好,可能是路径规划器的一些参数还需修改,RRT*算法相比于astar算法花费的时间确实较长。
总结
该篇文章的主要目的主要是对自定义路径规划算法的移植进行了介绍,这其中所涉及路径规划算法的详细原理读者可以自行搜索查阅,由于作者学识水平有限,在文章中难免会出现欠妥的地方,希望大家指出一起学习。
ROS kinetic自定义路径规划算法相关推荐
- ROS常用局部路径规划算法比较
本博文主要讨论ROS导航包中集成的局部路径规划算法,DWA.TEB.MPC等算法在使用过程中的各自的优缺点.以下均为自己在使用过程中总结的经验及查阅资料得来,如有理解不到位的地方,还希望在评论区多多讨 ...
- (一)路径规划算法---Astar实现自定义的全局路径规划插件
Astar实现自定义的全局路径规划插件 文章目录 Astar实现自定义的全局路径规划插件 1.插件功能包的建立 2. 相关步骤 2.1 建立工作空间和环境变量的配置 2.2 建立功能包 2.3 添加源 ...
- 【硬核】 ROS Navigation 局部路径规划常见算法
简介 最近,作者参加了关于RMUS 高校 SimReal挑战赛,首次接触到了机器人导航领域,这里记录一下这段时间的收货.sim2real的全称是simulation to reality,是强化学 ...
- ros自己写避障算法_基于ROS系统自主路径规划与避障小车的研究
龙源期刊网 http://www.qikan.com.cn 基于 ROS 系统自主路径规划与避障小车的 研究 作者:李阳 卢健 何耀帧 来源:<科技风> 2018 年第 04 期 摘 要: ...
- 基于SSD的自动路径规划算法
目录 1.场景需求 2.路径规划算法简介 2.1 .PRM算法简介 2.2.RRT算法简介 3.基于SSD的自动路径规划算法简介 4.基于SSD的自动路径规划算法详解 4.1.利用外置摄像头获取图像或 ...
- 苏宁 11.11:仓库内多 AGV 协作的全局路径规划算法研究
本文为『InfoQ x 苏宁 2018双十一』技术特别策划系列文章之一. 1. 背景 随着物联网和人工智能的发展,越来越多的任务渐渐的被机器人取代,机器人逐渐在发展中慢慢进入物流领域,"智能 ...
- DWA局部路径规划算法论文阅读:The Dynamic Window Approach to Collision Avoidance。
DWA(动态窗口)算法是用于局部路径规划的算法,已经在ROS中实现,在move_base堆栈中:http://wiki.ros.org/dwa_local_planner DWA算法第一次提出应该是1 ...
- 招聘路径规划算法工程师岗位
工作职责: 1.负责导航定位领域路径规划相关算法的研发平台搭建和仿真验证: 2.负责将相关算法实现到产品的嵌入式系统中. 任职要求: 1.自动化.电子工程.计算机科学或相关专业硕士及以上学历,拥有汽车 ...
- Timed-Elastic-Band局部路径规划算法
早前做工程时尝试了teb局部规划算法,觉得效果非常好.由于时间关系,并未深入了解,仅依靠做对比实验调节作者给出的接口参数满足工程需求.抽空看了一下作者关于teb算法的论文,记录一些笔记. teb局部路 ...
- 【ROS-Navigation】—— Astar路径规划算法解析
文章目录 前言 1. 导航的相关启动和配置文件 1.1 demo01_gazebo.launch 1.2 nav06_path.launch 1.3 nav04_amcl.launch 1.4 nav ...
最新文章
- 新手入门深度学习 | 2-4:时间序列数据建模流程示例
- 【收藏】vuejs学习笔记github地址
- Netflix:通过可视化和统计学改进用户QoE
- java 统计数字个数_统计数字问题(Java)
- js如何设置浏览器全屏效果?
- VUE.JS 组件化开发实践
- Android代码混淆方法,Android 代码混淆零基础入门
- 技术讲坛新模式,积分制
- 用于Elasticsearch数据可视化和分析的强大工具
- HDFS存储架构剖析
- 英语总结系列(二十六):唠唠我的二月英语历程
- 算法模板java_我的Java设计模式-模板方法模式
- Ubuntu使用记录:直接使用root账户登录
- 计算机网络安全 单词
- C语言自学笔记(20)
- LVS负载均衡群集——NAT地址转换
- 【苦练基本功】代码整洁之道 pt2(第4章-第6章)
- 利用matlab的newff构建BP神经网络来实现数据的逼近和拟合
- 视频教程-从理论到实战:在园区网中部属IPv6-网络技术
- python里ipo是什么意思呢_IPO 指的是什么?公开募股和所谓的上市之间有什么区别?...
热门文章
- rainmeter使用教程_如何使用Rainmeter自定义Windows桌面
- 天堂2服务端服务器名字修改,如何制作L2J天堂2单机版源码服务端教程.doc
- ROS入门教程(一)
- Sketch实例教程:制作一个时钟
- 知网不能下载PDF?CAJ格式太鸡肋?
- 磁力搜索引擎ZSKY一键安装包
- 二、安装Robot framework-selenium2library
- html和css命名标准,CSS命名规则和命名方法
- 使用cmd命令删除服务
- 打印机怎么无线扫描到计算机,富士施乐打印机CM215fw无线扫描到电脑功能的使使用教程...