ROS2 =============== .. code :: 培养解决问题的能力 Coding is really just problem-solving, Don't be a programmer,be a problem-solver. 写代码并不难,难得是如何解决问题,如何正确的解决问题,如何用简单高效的方案解决正确问题。 编程其实只是一个工具,一个把任务自动化的工具。学习编程是为了解决现实中的问题的。 学习新语言也是为了更高效更便捷的解决某个问题, 在问题解决之前,往往需要不断的调查,重写。 所以编程,是在培养我们自己去发现问题、解决问题的能力.而这个能力也可以运用到生活的方方面面,永远不过时。 .. 保持学习新技术的能力 .. 科技领域每天都充满着创新和迭代,我每天所接触到的新闻、话题是各种技术最前沿、创意变现和效率提升。 .. 这也促使大家去探索各种新语言、新框架、新系统和架构,才能努力赶上技术更新不落后。 .. 所以,程序员这个行业里的每个人都在不断学习、不断给自己添加新技能。 .. 做程序员让我保持高速、高效学习新技术的能力。而这种学习新技术的能力,不正是保持自己不被淘汰,各个公司都很重视的技能吗 Docker Containers ------------------ * L4T * `L4T Containers `_ * `l4t cuda `_ * `l4t-tensorrt `_ * `l4t-jetpack `_ * `l4t-ros `_ * `l4t-humble `_ .. code-block:: bash docker pull dustynv/ros:humble-desktop-l4t-r36.2.0 * Amd64 * `cuda `_ * `tensorrt `_ * Galactic * `Tutorials `_ * `API `_ .. code-block:: bash docker pull osrf/ros:galactic-desktop * doTransform * cpp * `tf2::doTransform `_ * `tier4_autoware_utils::transformPose `_ * python * https://answers.ros.org/question/222306/transform-a-pose-to-another-frame-with-tf2-in-python/ * `do_transform_pose_stamped `_ * https://github.com/ros2/geometry2/blob/1186ee1e1be1dfe3691f31ba7f13662b1f1e1b91/tf2_geometry_msgs/test/test_tf2_geometry_msgs.py#L152 * Foxy * `Tutorials `_ * `API `_ .. code-block:: bash docker pull osrf/ros:foxy-desktop -------------------------- * Packages * `ros_canopen `_ * `can_dbc_parser `_ * http://docs.ros.org/en/melodic/api/can_dbc_parser/html/annotated.html * Build .. code-block:: bash colcon build --symlink-install --packages-select-by-dep socketcan_bridge colcon build --symlink-install --packages-select socketcan_bridge ---------- * `CyberDog DDS本地及多播设置 `_ ---------- * PCL .. code:: bash pcl_voxel_grid input.pcd output.pcd -leaf 0.5,0.5,0.5 pcl_convert_pcd_ascii_binary 0/1/2 (ascii/binary/binary_compressed) [precision (ASCII)] pcl_convert_pcd_ascii_binary Town01.pcd Town01_ascii.pcd 1 # binary => ascii * Node .. code:: bash # 检查 turtlesim 是否已经安装 ros2 pkg executables turtlesim ros2 node list ros2 topic list ros2 service list ros2 action list ros2 run ros2 node list ros2 node info # 重映射 ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle ros2 lifecycle set shutdown # kill node 有待验证 * Topic .. code:: bash ros2 topic list ros2 topic list -t ros2 topic echo /turtle1/cmd_vel # 主题信息 # ros2 topic info /turtle1/cmd_vel # 消息类型 ros2 msg show std_msgs/String # dashing ros2 interface show std_msgs/String # galactic # 消息频率 ros2 topic hz /turtle1/pose # 消息发布 ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}" ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}" # 1 Hz ros2 topic pub --once /sent_messages can_msgs/msg/Frame \ "{header: { frame_id: 'map'} , id: 15, is_rtr: 0,is_extended: 0, is_error: 0, dlc: 8, data: [1,2,3,4,5,6,7,9]}" ros2 topic pub --once /sent_messages can_msgs/msg/Frame \ "{header: {stamp: {sec: 0, nanosec: 0}, frame_id: 'map'} , id: 15, is_rtr: 0,is_extended: 0, is_error: 0, dlc: 8, data: [1,2,3,4,5,6,7,9]}" * Services * Parameters .. code:: bash ros2 param list ros2 param get ros2 param set ros2 param dump ros2 param load ros2 run --ros-args --params-file * Actions * Recording adn playing back data .. code:: bash ros2 bag record ros2 bag record /turtle1/cmd_vel ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose ros2 bag info ros2 bag play subset ---- * ROS2 中文指南 * `gitbook `_ * `pdf `_ .. code-block:: bash git clone https://github.com/ros2/examples.git git clone https://hub.fastgit.org/ros2/examples.git ---- * `ROS2入门教程-创客制造 `_ --- * `订阅rtsp 发布ros2 image topic - ros2_ipcamera `_ ------- * 打包 .. code:: bash sudo apt install python3-catkin-pkg python3-bloom sudo apt-get install fakeroot sudo apt-get install debhelper # sudo apt-get install lsb-release bloom-generate rosdebian --os-name ubuntu --os-version $(lsb_release -cs) --ros-distro ${ROS_DISTRO} #bloom-generate rosdebian --os-name ubuntu --os-version focal --ros-distro galactic fakeroot debian/rules binary LGSVL -------- galactic ``````````` .. code-block:: sh apt-get install ros-galactic-lgsvl-msgs mkdir -p ros2_ws/src git clone -b galactic-devel https://github.com/lgsvl/ros2-lgsvl-bridge.git ros2_ws/src/ros2-lgsvl-bridge cd ros2_ws rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO colcon build --cmake-args '-DCMAKE_BUILD_TYPE=Release' . ~/ros2-lgsvl-bridge/install/setup.bash lgsvl_bridge [--port 9090] [--log D] ---- * `新一代机器人操作系统ROS 2技术文档 `_ * `为什么选用ROS 2?(Why ROS 2?) `_ * `Ubuntu 20.04中从源代码编译安装ROS 2相关软件包的通用步骤 `_ * `在Ubuntu 20.04上从源代码构建ROS 2最新发行版Galactic过程中遇到的问题及解决办法 `_ * `ROS 2概念 `_ * 一、概念概述——介绍了ROS 2关键概念的一般背景信息,包括以下内容: * `十七. 关于ROS_DOMAIN_ID `_ * `一. 关于 ROS2 的不同DDS/RTPS供应商 `_ * `二. 关于日志记录和日志记录器的配置 `_ * `三. 关于服务质量 QoS的设置 `_ * `四. 关于 ROS2 的客户端库 `_ * `五. 关于 ROS2 中的接口 `_ * `六. 关于ROS 2中的参数 `_ * `七. 关于话题统计 `_ * `八. 关于命令行工具 `_ * `九. 关于RQt `_ * `十. 关于多节点组合运行 `_ * `十一. 关于ament和catkin的混合(catment) `_ * `十二. 关于交叉编译 `_ * 二、核心堆栈开发人员概念——是一些更为详细的概念文章,适用于计划修改ROS 2核心或为ROS 2核心做出贡献的开发人员,包括以下内容: * `十三. 关于构建系统 `_ * `十四. 关于ROS 2的内部接口 `_ * `十五. 关于ROS 2的中间件实现 `_ * `十六. 关于ROS 2的客户端接口(客户端库) `_ * `ROS 2教程目录及各教程文章的知乎链接 `_ * 入门教程 * 入门教程一:命令行界面CLI工具 * `1.1. 配置 ROS2 环境 `_ * `1.2. turtlesim和rqt简介 `_ * `1.3. 理解ROS 2的节点 `_ * `1.4. 理解ROS 2的话题 `_ * `1.5. 理解ROS 2的服务 `_ * `1.6. 理解ROS 2的参数 `_ * `1.7. 理解ROS 2的动作 `_ * `1.8. 使用rqt_console `_ * `1.9. 创建launch文件 `_ * `1.10. 记录和回放数据 `_ * 入门教程二:客户端库 * `2.1. 创建工作空间 `_ * `2.2. 创建您的第一个ROS 2软件包 `_ * `2.3. 编写一个简单的发布者和订阅者(C++) `_ * `2.4. 编写一个简单的发布者和订阅者(Python) `_ * `2.5. 编写一个简单的服务器和客户端(C++) `_ * `2.6. 编写一个简单的服务器和客户端(Python) `_ * `2.7. 创建ROS 2 自定义msg和srv接口文件 `_ * `2.8. 扩展ROS 2的接口 `_ * `2.9. 在类中使用参数(C++) `_ * `2.10. 在类中使用参数(Python) `_ * `2.11. ros2doctor入门 `_ * 中级教程 * `3. 创建动作(action) `_ * `4. 编写动作服务器和客户端(C++) `_ * `5. 编写动作服务器和客户端(Python) `_ * `6. 用Launch启动/监视多个节点 `_ * `7. 在单个进程中组合运行多个节点 `_ * `8. 使用colcon构建软件包 `_ * 高级教程 * `9. ROS 2话题统计教程(C ++) `_ * `10. 使用快速DDS发现服务器作为发现协议[社区提供] `_ * `11. 实现自定义内存分配器 `_ * 杂项教程 * `12. IBM Cloud Kubernetes上的ROS2 [社区贡献] `_ * `13. 具有ROS 2和rviz2的Eclipse Oxygen[社区贡献] `_ * `14. 用Eclipse Oxygen在Linux上构建ROS 2 [社区贡献] `_ * `15. 为ROS 2构建实时Linux系统 [社区贡献] `_ * 演示教程 * `(一)——使用服务质量设置来处理有损网络 `_ * `(二)——具有管理生命周期的节点管理 `_ * `(三)——高效的进程内通信 `_ * ROS1 和 ROS2之间的桥接通信 * 使用 ROS1 桥接器的rosbag记录和回放话题数据 * 使用ROS 2的Turtlebot 2演示 * 使用ROS 2的TurtleBot 3演示[社区贡献] * MoveIt 2机械臂移动规划演示 * `(四)——在ROS 2上仿真TurtleBot 3机器人[社区贡献] `_ * `(五)——在robot_state_publisher 节点中使用URDF `_ * `(六)——尝试虚拟机器人演示 `_ * `(七)——在ROS 2中使用tf2 `_ * `(八)——TurtleBot 3导航仿真[社区贡献] `_ * `(九)——TurtleBot 3 SLAM仿真[社区贡献] `_ * `(十)——使用DDS-Security `_ * `(十一)——日志记录和日志记录器配置演示 `_ * `(十二)——使用ROS 2 API编写实时安全代码 `_ * `ROS 2指南 `_ * `(一)——安装故障排除 `_ * `(二)——开发ROS 2软件包 `_ * `(三)——ament_cmake用户文档 `_ * `(四)——将ROS 1启动文件迁移到ROS 2 `_ * `(五)——将YAML参数文件从ROS 1迁移到ROS 2 `_ * `(六)——通过命令行将ROS参数传递给节点 `_ * `(七)——同步与异步服务端/客户端的对比 `_ * `(八)——DDS调优信息 `_ * `(九)——rosbag2:覆写QoS策略 `_ * `(十)——使用多个ROS 2中间件实现 `_ * `(十一)——交叉编译 `_ * `(十二)——用bloom发布ROS 2软件包 `_ * `(十三)——在ROS 2中使用Python软件包 `_ * `(十四)——将RQt插件移植到Windows系统上 `_ * `(十五)——在Docker中运行ROS 2节点[社区贡献] `_ * `(十六)——ROS 2软件包维护者指南 `_ * `(十七)——构建自定义Debian软件包 `_ * `(十八)——从源代码构建RQt `_ * tf2系列教程 * `tf2系列教程(一):tf2简介 `_ * `tf2系列教程(二):在ROS 2中进行tf2简介演示 `_ * `tf2系列教程(三):在ROS 2中编写tf2静态广播者节点(Python) `_ * `tf2系列教程(四):在ROS 2中编写tf2广播者节点(Python) `_ * `tf2系列教程(五):编写tf2侦听者节点(Python) `_ * `tf2系列教程(六):添加固定坐标系(Python) `_ * `tf2系列教程(七):添加移动坐标系(Python) `_ * `tf2系列教程(八):了解ROS 2中的tf2和时间(Python) `_ * `tf2系列教程(十):四元数基础 `_ * `tf2系列教程(十一):在ROS 2中编写tf2静态广播者节点(C++) `_ * `tf2系列教程(十二):在ROS 2中编写tf2广播者节点(C++) `_ * `tf2系列教程(十三):在ROS 2中编写tf2侦听者节点(C++) `_ * `tf2系列教程(十四):在ROS 2中添加固定坐标系(C++) `_ * `tf2系列教程(十五):在ROS 2中添加移动坐标系(C++) `_ * `tf2系列教程(十六):了解ROS 2中的tf2和时间(C++) `_ * `tf2系列教程(十七):ROS 2中使用tf2进行时间旅行(C++) `_ * `tf2系列教程(九):ROS 2中使用tf2进行时间旅行(Python) `_ * `tf2系列教程(十八):在ROS 2中调试tf2的问题 `_ * `tf2系列教程(十九): 在ROS 2中使用tf2_ros::MessageFilter处理Stamped数据类型(之一)——发布相机的PointStamped消息 `_ * `tf2系列教程(十九):在ROS 2中使用tf2_ros::MessageFilter处理Stamped数据类型(之二)——侦听和使用PointStamped消息 `_ * `在ROS 2中从零开始编写相机位置消息发布与订阅节点(Python) `_ * `关于在Github上完成拉取请求(PR)后对两篇“tf2系列教程(十九)”文章中的代码进行更新的说明 `_ * `ROS2 中使用RViz2显示数据 `_ * `ROS2 中用RViz 2可视化PointCloud2数据(一) `_ * `ROS 2中用RViz 2可视化PointCloud2数据(二) `_ * `ROS 2中用RViz 2可视化PointCloud2数据(三) `_ * `ROS 2中用RViz 2仿真机械臂 `_ * MoveIt2教程 * `在Ubuntu 20.04系统中从源代码构建MoveIt 2 `_ * `MoveIt2教程(一):MoveIt2简介 `_ * `MoveIt2教程(二):MoveIt2软件安装 `_ * `MoveIt2教程(三):MoveIt2基本概念 `_ * `MoveIt2教程(四):MoveIt2中可用的规划器 `_ * `MoveIt2教程(五):插件接口 `_ * `MoveIt2教程(六):在RViz中快速上手MoveIt2 `_ * `MoveIt2教程(七):Move Group C++接口 `_ * `MoveIt2教程(八):机器人模型和机器人状态 `_ * `MoveIt2教程(九):规划场景 `_ * `MoveIt2教程(十):规划场景监视器 `_ * `MoveIt2教程(十一):规划场景ROS API `_ * `MoveIt2教程(十二):MoveItCpp教程 `_ * `MoveIt2教程(十三):URDF与SRDF `_ * `MoveIt2教程(十四):实时机械臂伺服 `_ * ROS2中的URDF系列教程 * `ROS2中的URDF系列教程(一):从零开始用URDF构建视觉机器人模型 `_ * `ROS2中的URDF系列教程(二):用URDF构建移动机器人模型 `_ * `ROS2中的URDF系列教程(三):向URDF模型添加物理和碰撞属性 `_ * `ROS2中的URDF系列教程(四):使用Xacro整理URDF文件 `_ * `ROS2中的URDF系列教程(五):如何在ROS 2中使用URDF创建仿真移动机器人(之一) `_ * `ROS2中的URDF系列教程(五):如何在ROS 2中使用URDF创建仿真移动机器人(之二) `_ * `ROS2中的URDF系列教程(六):ROS 2中如何将URDF加载到RViz `_ * `ROS2中的URDF系列教程(七):ROS 2中如何将URDF加载到Gazebo `_ * `ROS2中的URDF系列教程(八):如何将包含Xacro的URDF文件转换成SDF文件 `_ * `ROS2中的URDF系列教程(九):理解PR2机器人的URDF描述 `_ * `ROS2中的URDF系列教程(十):URDF XML规程(之一) `_ * `ROS2中的URDF系列教程(十):URDF XML规程(之二) `_ * `ROS2中的URDF系列教程(十):URDF XML规程(之三) `_ * `ROS2中的URDF系列教程(十):URDF XML规程(之四) `_ * `ROS2中的URDF系列教程(十):URDF XML规程(之五) `_ * SDF规程系列 * `SDF规程系列(一) `_ * `SDF规程系列(二) `_ * `SDF规程系列(三) `_ * `SDF规程系列(四) `_ * `SDF规程系列(五) `_ * `SDF规程系列(六) `_ * `SDF规程系列(七) `_ * `SDF规程系列(八) `_ * `SDF规程系列(九) `_ * `SDF规程系列(十) `_ * `SDF规程系列(十一) `_ * `SDF规程系列(十二) `_ * `SDF规程系列(十三) `_ * `SDF规程系列(十四) `_ * `SDF规程系列(十五)——传感器之一 `_ * `SDF规程系列(十五)——传感器之二 `_ * `SDF规程系列(十五)——传感器之三 `_ * `SDF规程系列(十五)——传感器之四 `_ * `ROS 2 Foxy发行版官方文档体系结构发生了变化 `_ * `ROS 2文档中的术语词汇表 `_ * `机器人操作系统ROS 2系列文档中译版即将陆续发布 `_ * `对第二代机器人操作系统ROS 2 的一些理解小结——五问ROS 2 `_ * Gazebo 11新手课程指南——初级教程 * `Gazebo 11新手课程指南——初级教程(一) `_ * `Gazebo 11新手课程指南——初级教程(二) `_ * `Gazebo 11新手课程指南——初级教程(三) `_ * `Gazebo 11新手课程指南——初级教程(四) `_ * `Gazebo 11新手课程指南——初级教程(五) `_ * `Gazebo 11新手课程指南——初级教程(六) `_ * `Gazebo 11新手课程指南——中级教程(一) `_ * `Gazebo 11新手课程指南——中级教程(二) `_ * `Gazebo 11新手课程指南——中级教程(三) `_ * `Gazebo 11新手课程指南——中级教程(四) `_ * `Gazebo 11新手课程指南——中级教程(五) `_ * `开源机器人:上手Gazebo和ROS 2 `_ * `机器人仿真实战——使用Gazebo11和ROS2进行仓库移动机器人仿真(一) `_ * `机器人仿真实战——使用Gazebo 11和ROS 2进行仓库移动机器人仿真(二) `_ * `机器人仿真实战——使用Gazebo 11和ROS 2进行仓库移动机器人仿真(三) `_ * `机器人仿真实战——使用Gazebo 11和ROS 2进行仓库移动机器人仿真(四) `_ * `机器人仿真实战——使用Gazebo 11和ROS 2进行仓库移动机器人仿真(五) `_ * `Gazebo 11分类教程——开始使用Gazebo(一) `_ * `Gazebo 11分类教程——开始使用Gazebo(二) `_ * `Gazebo 11分类教程——开始使用Gazebo(三) `_ * `Gazebo 11分类教程——构建机器人(一) `_ * `Gazebo 11分类教程——构建机器人(二) `_ * `Gazebo 11分类教程——构建机器人(三) `_ * `Gazebo 11分类教程——构建机器人(四) `_ * `Gazebo 11分类教程——构建机器人(五) `_ * `Gazebo 11分类教程——构建机器人(六) `_ * `Gazebo 11分类教程——构建机器人(七) `_ * `Gazebo 11分类教程——构建机器人(八) `_ * `Gazebo 11分类教程——构建机器人(九) `_ * `Gazebo 11分类教程——构建机器人(十) `_ * `Gazebo 11分类教程——构建机器人(十一) `_ * `Gazebo 11分类教程——构建机器人(十二) `_ * `Gazebo 11分类教程——构建机器人(十三) `_ * `Gazebo 11分类教程——构建机器人(十四) `_ * `Gazebo 11分类教程——构建机器人(十五) `_ * `Gazebo 11分类教程——构建仿真世界(一) `_ * `Gazebo 11分类教程——构建仿真世界(二) `_ * `Gazebo 11分类教程——构建仿真世界(三) `_ * `Gazebo 11分类教程——构建仿真世界(四) `_ * `Gazebo 11分类教程——构建仿真世界(五) `_ * `Gazebo 11分类教程——编写插件(一) `_ * `Gazebo 11分类教程——编写插件(二) `_ * `Gazebo 11分类教程——编写插件(三) `_ * `Gazebo 11分类教程——编写插件(四) `_ * `Gazebo 11分类教程——编写插件(五) `_ * `Gazebo 11分类教程——Gazebo中自带的插件(一) `_ * `Gazebo 11分类教程——Gazebo中自带的插件(二) `_ * `Gazebo 11分类教程——Gazebo中自带的插件(三) `_ * `Gazebo 11分类教程——Gazebo中自带的插件(四) `_ * `Gazebo 11分类教程——Gazebo中自带的插件(五) `_ * `Gazebo 11分类教程——Gazebo中自带的插件(六) `_ * `Gazebo 11分类教程——Gazebo中自带的插件(七) `_ * `Gazebo 11分类教程——Gazebo中自带的插件(八) `_ * `Gazebo 11分类教程——传感器(一) `_ * `Gazebo 11分类教程——传感器(二) `_ * `Gazebo 11分类教程——传感器(三) `_ * `Gazebo 11分类教程——传感器(四) `_ * `Gazebo 11分类教程——传感器(五) `_ * `Gazebo 11分类教程——传感器(六) `_ * `Gazebo 11分类教程——传感器(七) `_ * `Gazebo 11分类教程——工具与实用程序(一) `_ * `Gazebo 11分类教程——工具与实用程序(二) `_ * `Gazebo 11分类教程——工具与实用程序(三) `_ * `Gazebo 11分类教程——工具与实用程序(四) `_ * `Gazebo 11分类教程——工具与实用程序(五) `_ * `Gazebo 11分类教程——工具与实用程序(六) `_ * `Gazebo 11分类教程——使用数学库&模型编辑器 `_ * `Gazebo 11分类教程——传输库(一) `_ * `Gazebo 11分类教程——传输库(二) `_ * `Gazebo 11分类教程——物理库Physics Library(一) `_ * `Gazebo 11分类教程——物理库Physics Library(二) `_ * `Gazebo 11分类教程——物理库Physics Library(三) `_ * `Gazebo 11分类教程——物理库Physics Library(四) `_ * `Gazebo 11分类教程——物理库Physics Library(五) `_ * `Gazebo 11分类教程——物理库Physics Library(六) `_ * `Gazebo 11分类教程——物理库Physics Library(七) `_ * `Gazebo 11分类教程——物理库Physics Library(八) `_ * `Gazebo 11分类教程——渲染库(一) `_ * `Gazebo 11分类教程——渲染库(二) `_ * `Gazebo 11分类教程——渲染库(三) `_ * `Gazebo 11分类教程——连接至ROS 2(一) `_ * `Gazebo 11分类教程——连接至ROS 2(二) `_ * `Gazebo 11分类教程——连接至ROS 2(三) `_ * Navigation 2系列教程 * `(一)——Navigation 2概述 `_ * `(二)——开始使用Nav2 `_ * `(三)——构建和安装Nav2 `_ * `(四)——移动机器人导航概念 `_ * `(五)——机器人首次设置Nav2指南之一:设置TF `_ * `(五)——机器人首次设置Nav2指南之二:设置URDF `_ * `(五)——机器人首次设置Nav2指南之三:设置里程计(Odometry) `_ * `(六)——普通教程之一:使用ROS 2进行相机标定 `_ * `(六)——普通教程之二:在ROS 2/Nav2中获取错误回溯信息 `_ * `(六)——普通教程之三:使用Turtlebot3物理机器人进行导航 `_ * `(六)——普通教程之四:使用SLAM制图的同时进行导航 `_ * `(六)——普通教程之五:使用外部的STVL成本地图插件进行导航 `_ * `(六)——普通教程之六:动态物体跟随 `_ * `(六)——普通教程之七: 使用禁区进行导航 `_ * `(六)——普通教程之八:使用速度限制进行导航 `_ * `(七)——插件教程之一:编写新的Costmap2D插件 `_ * `(七)——插件教程之二:编写新的规划器(Planner)插件 `_ * `(七)——插件教程之三:编写新的控制器(Controller)插件 `_ * `(七)——插件教程之四:编写新的行为树(Behavior Tree)插件 `_ * `(七)——插件教程之五:编写新的恢复器(Recovery)插件 `_ * `(八)——配置指南之一:配置航点跟随者(Waypoint Follower) `_ * `(八)——配置指南之二:配置行为树导航仪(Behavior-Tree Navigator) `_ * `(八)——配置指南之三:配置行为树XML节点(Behavior Tree XML Nodes) `_ * `(八)——配置指南之四:配置Costmap 2D `_ * `(八)——配置指南之五:配置生命周期管理器(Lifecycle Manager) `_ * `(八)——配置指南之六:配置规划器服务器(Planner Server) `_ * `(八)——配置指南之七:配置NavFn规划器 `_ * `(八)——配置指南之八:配置Smac规划器 `_ * `(八)——配置指南之九:配置Theta*规划器(Theta Star Planner) `_ * `(八)——配置指南之十:配置控制器服务器(Controller Server) `_ * `(八)——配置指南之十一:配置DWB控制器(DWB Controller) `_ * `(八)——配置指南之十二:配置地图服务器/保存器(Map Server/Saver) `_ * `(八)——配置指南之十三:配置AMCL `_ * `(八)——配置指南之十四:配置恢复器服务器(Recovery Server) `_ * `(八)——配置指南之十五:配置受管制纯追踪(Regulated Pure Pursuit)控制器 `_ * `(九)——行为树XMLs之一:概述 `_ * `(九)——行为树XMLs之二:导航至某个位姿(Navigate To Pose)行为树 `_ * `(九)——行为树XMLs之三:通过多个位姿导航(Navigate Through Poses)行为树 `_ * `(九)——行为树XMLs之四:跟随动态点(Follow Dynamic Point)行为树 `_ * `(十)——导航插件(Navigation Plugins) `_ * `(十一)——简单指挥官(Simple Commander)API `_