ROS 的naviga tion官方功能包提供了三种全局路径规划器:carrot_planner、global_planner、navfn。我们通常使用的是navfn,如果机器人执行一些特殊任务而navfn不支持的话就需要自己写一个全局路径规划区并注册到ROS系统。
ROS的全局路径规划器是以lib插件形式(pluginlib)存在的,通过配置move_base 中base_global_planner参数指定实际路径规划执行时采用的全局路径规划器,这种设计大大提高了navigation包的可扩展性。
ROS官网wiki有详细的教程指导大家如何为ROS添加自定义的全局路径规划器,操作步骤挺繁琐的,在了解原理之后我们其实可以用下文的偷懒方法实现自己的全局路径规划器。主要思路是:直接拷贝一份现成的全局路径规划器代码包,将软件包中的相关名字修改成想要的,最后实现下自己的makeplan方法即可。 1.从navigation包中拷贝carrot_planner文件夹下的所有内容到ROS源码工作目录。以小强ROS机器人为例:cd Documents/ros/src/ 进入ROS源码工作目录cp -a navigation/carrot_planner test_planner 拷贝一份carrot_planner代码到test_planner文件夹下,test可以改成自己想要的任何名字,这个名字即为下文咱们自定义的全局规划器2.开始修改名字,将拷贝的文件夹(test_planner)内的所有文件中的carrot字符换成test,包括文件名中的字符需要修改内容的文件有:test_planner/include/carrot_planner/carrot_planner.htest_planner/src/carrot_planner.cpptest_planner/bgp_plugin.xmltest_planner/CMakeLists.txttest_planner/package.xml需要修改名字的文件有:test_planner/include/carrot_planner/carrot_planner.htest_planner/src/carrot_planner.cpp需要修改名字的文件夹有:include下的carrot_planner文件夹3.尝试编译以小强ROS机器人为例:cd Documents/ros/catkin_make 4.检查test_planner是否成功注册进ROS系统rospack plugins --attrib=plugin nav_core正常的话会返回如下内容,可以查看到test_plannerrotate_recovery /home/xiaoqiang/Documents/ros/src/navigation/rotate_recovery/rotate_plugin.xmlbase_local_planner /home/xiaoqiang/Documents/ros/src/navigation/base_local_planner/blp_plugin.xmlglobal_planner /home/xiaoqiang/Documents/ros/src/navigation/global_planner/bgp_plugin.xmlnavfn /home/xiaoqiang/Documents/ros/src/navigation/navfn/bgp_plugin.xmlmove_slow_and_clear /home/xiaoqiang/Documents/ros/src/navigation/move_slow_and_clear/recovery_plugin.xmldwa_local_planner /home/xiaoqiang/Documents/ros/src/navigation/dwa_local_planner/blp_plugin.xmlclear_costmap_recovery /home/xiaoqiang/Documents/ros/src/navigation/clear_costmap_recovery/ccr_plugin.xmlcarrot_planner /home/xiaoqiang/Documents/ros/src/test_planner/bgp_plugin.xmltest_planner /home/xiaoqiang/Documents/ros/src/ test_planner/bgp_plugin.xml5.根据自己的算法重写test_planner/src/test_planner.cpp中的makeplan方法,然后重新用catkin_make编译,至此咱们的全局路径规划器就打完收工了可以在move_base中使用了6.在move_base节点中使用新建立的test_planner路径规划器在move_base的启动launch文件节点中加入如下代码即可
|