旅游网站设计分析,苏州旅游攻略,福州网站制作案例,哈尔滨市信息网本教程将展示如何创建你自己的 Behavior 插件。 Behavior 插件运行在 behavior server 中。与 planner server 和 controller server 不同#xff0c;每个 behavior 都会拥有自己独立的 action server。 planner 和 controller 之所以可以共用同一种 API#xff0c;是因为它们…本教程将展示如何创建你自己的 Behavior 插件。Behavior 插件运行在 behavior server 中。与 planner server 和 controller server 不同每个 behavior 都会拥有自己独立的 action server。planner 和 controller 之所以可以共用同一种 API是因为它们完成的是同一类任务。但recovery恢复行为可以用于执行各种各样的任务因此每个 behavior 都可以拥有自己专用的 action 消息定义和 action server。这种设计使 behavior server 具有极高的灵活性从而能够支持几乎任何可以想象得到、且不需要与其他模块复用统一接口的行为动作。细致解释首先先看nav2是什么架构然后恢复行为中本次nav2的教程就是在recover里面再添加一个Behavior插件参考Writing a New Behavior Plugin — Nav2 1.0.0 documentation复现参考教程做的1下载代码git clone https://github.com/ros-navigation/navigation2_tutorials.git cd navigation2_tutorials git check branch humble(2)把所需的代码资源复制过来mkdir work_space mkdir src cd src cp .././navigation2_tutorials-humble/nav2_sms_behavior .././work_space/src/(3)解读nav2的插件机制a. nav2可以不用再cmaklists里面显式链接动态库而可以通过pluginlib直接再运行时加载动态库。b. 在./src/nav2_sms_behavior/src/send_sms.cpp里PLUGINLIB_EXPORT_CLASS(nav2_sms_behavior::SendSms, nav2_core::Behavior)显式导出基类第一个是要导出的类第二个是其基类.hpp里是间接继承c. 在./src/nav2_sms_behavior/behavior_plugin.xml里library pathnav2_sms_behavior_plugin class namenav2_sms_behavior/SendSms typenav2_sms_behavior::SendSms base_class_typenav2_core::Behavior descriptionThis is an example plugin which produces an SMS text message behavior./description /class /library这个其实就是插件的描述文件d. 在./src/nav2_sms_behavior/CMakeLists.txt里pluginlib_export_plugin_description_file(nav2_core behavior_plugin.xml)第一个参数是插件基类包的名字第二个.xml描述文件的路径d. 在./src/nav2_sms_behavior/package.xml里...... export build_typeament_cmake/build_type nav2_core plugin${prefix}/behavior_plugin.xml / /export ......在package.xml里声明这个包导出了一个nav2_core类型的插件插件描述文件在 behavior_plugin.xml。4从/opt/ros/humble/share/nav2_bringup/params里把nav2_params.yaml复制过来。mkdir src/nav2_sms_behavior/config cp /opt/ros/humble/share/nav2_bringup/params/nav2_params.yaml src/nav2_sms_behavior/config/修改nav2_params.yamlhumble:behavior_server: ros__parameters: costmap_topic: local_costmap/costmap_raw footprint_topic: local_costmap/published_footprint cycle_frequency: 10.0 behavior_plugins: [spin, backup, drive_on_heading, assisted_teleop, wait,send_sms] spin: plugin: nav2_behaviors/Spin backup: plugin: nav2_behaviors/BackUp drive_on_heading: plugin: nav2_behaviors/DriveOnHeading wait: plugin: nav2_behaviors/Wait assisted_teleop: plugin: nav2_behaviors/AssistedTeleop send_sms: plugin: nav2_sms_behavior/SendSms account_sid: ... # your sid auth_token: ... # your token from_number: ... # your number to_number: ... # the operations center number global_frame: odom robot_base_frame: base_link transform_tolerance: 0.1 use_sim_time: true simulate_ahead_time: 2.0 max_rotational_vel: 1.0 min_rotational_vel: 0.4 rotational_acc_lim: 3.25运行colcon build source install/setup.bash export GAZEBO_MODEL_PATH$GAZEBO_MODEL_PATH:/opt/ros/humble/share/turtlebot3_gazebo/models export TURTLEBOT3_MODELwaffle #自己注意修改路径 ros2 launch nav2_bringup tb3_simulation_launch.py headless:False params_file:/home/amonk/MyWorkSpace/learn_nav2/work_space/src/nav2_sms_behavior/config/nav2_params.yamlGAZEBO和RVIZ成功启动我们再来查看节点的action_server是否被正确加载了ros2 node info /behavior_server成功加载6在新终端中运行ros2 action send_goal send_sms nav2_sms_behavior/action/SendSms {message : Hellosource install/setup.bash Navigation2 World }成功运行