制作自定义路径规划. 
参考  navigation_tutorials 的 nav2_straightline_planner 

1. nav2_straightline_planner 继承自 nav2_core::GlobalPlanne, 需要重载的函数实现.
ROS2 navigation2 - 7.2 制作插件 planner 插件-LMLPHPconfigure()方法方法必须从ROS参数和所需的任何初始化设置成员变量. 
ROS2 navigation2 - 7.2 制作插件 planner 插件-LMLPHP

createPlan()方法需要开始位姿到目标位姿的实现.  返回一个 nav_msgs::msg::Path 给 planner server. ROS2 navigation2 - 7.2 制作插件 planner 插件-LMLPHP其他函数留空实现.

2. 导出插件
在插件源码最后添加  
#include "pluginlib/class_list_macros.hpp" PLUGINLIB_EXPORT_CLASS(nav2_straightline_planner::StraightLine, nav2_core::GlobalPlanner)
说明我这个源码是个插件, 在运行的时候用了probe用. 

然后建立插件的说明文件 global_planner_plugin.xml 给 ROS用.
ROS2 navigation2 - 7.2 制作插件 planner 插件-LMLPHP

3. 然后编译
CMakeLists.txt 相关

点击(此处)折叠或打开

  1. project(nav2_straightline_planner)

  2. find_package(builtin_interfaces REQUIRED)
  3. find_package(tf2_ros REQUIRED)
  4. find_package(nav2_costmap_2d REQUIRED)
  5. find_package(nav2_core REQUIRED)
  6. find_package(pluginlib REQUIRED)

  7. set(library_name ${PROJECT_NAME}_plugin)

  8. set(dependencies
  9.   rclcpp
  10.   rclcpp_action
  11.   rclcpp_lifecycle
  12.   std_msgs
  13.   visualization_msgs
  14.   nav2_util
  15.   nav2_msgs
  16.   nav_msgs
  17.   geometry_msgs
  18.   builtin_interfaces
  19.   tf2_ros
  20.   nav2_costmap_2d
  21.   nav2_core
  22.   pluginlib
  23. )
  24. add_library(${library_name} SHARED
  25.   src/straight_line_planner.cpp
  26. )
  27. ament_target_dependencies(${library_name}
  28.   ${dependencies}
  29. )
  30. target_compile_definitions(${library_name} PUBLIC "PLUGINLIB__DISABLE_BOOST_FUNCTIONS")
  31. pluginlib_export_plugin_description_file(nav2_core global_planner_plugin.xml)

  32. install(TARGETS ${library_name}
  33.   ARCHIVE DESTINATION lib
  34.   LIBRARY DESTINATION lib
  35.   RUNTIME DESTINATION lib/${PROJECT_NAME}
  36. )
  37. install(FILES global_planner_plugin.xml
  38.   DESTINATION share/${PROJECT_NAME}
  39. )
  40. ament_export_include_directories(include)
  41. ament_export_libraries(${library_name})
  42. ament_export_dependencies(${dependencies})
  43. ament_package()
在 package.xml 添加

点击(此处)折叠或打开

  1. <export>
  2.   <build_type>ament_cmake</build_type>
  3.   <nav2_core plugin="${prefix}/global_planner_plugin.xml" />
  4. </export>
3. 使用插件. 
在costmap_params.xml中.  foxy版本以及后续版本的写法. 注意参数是通过 . 传递给 插件源码的.
ROS2 navigation2 - 7.2 制作插件 planner 插件-LMLPHP
4. 测试一下吧.


10-18 13:37
查看更多