一键导入
ros2-navigation
ROS2 导航技能。Nav2 栈、SLAM、路径规划、costmap、全局/局部规划器。当用户提到 Nav2、SLAM、slam_toolbox、Cartographer、AMCL、costmap、规划器、navfn 时使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
ROS2 导航技能。Nav2 栈、SLAM、路径规划、costmap、全局/局部规划器。当用户提到 Nav2、SLAM、slam_toolbox、Cartographer、AMCL、costmap、规划器、navfn 时使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
ROS2 上层应用集成域。Launch 编排、参数配置、RViz 可视化、Python 节点、Gazebo/Ignition 仿真。当用户提到 launch 文件、launch.py、参数 YAML、RViz、URDF 显示、Python 节点、rclpy、Gazebo、Ignition 仿真、机器人状态发布时使用。
CCG Skills - Quality gates, documentation generator, and multi-agent orchestration. Auto-installed by CCG workflow system.
开发语言能力索引。Python、Go、Rust、TypeScript、Java、C++、Shell。当用户提到编程、开发、代码、语言时路由到此。
DevOps 能力索引。Git、测试、DevSecOps、数据库。当用户提到 DevOps、CI/CD、Git、测试时路由到此。
协同编排知识域。多Agent协同、任务分解、并行执行、冲突解决。当魔尊需要多Agent协作、任务编排、并行处理时使用。
ROS2 控制技能。PID 控制、轨迹跟踪、电机驱动、ros2_control 框架、生命周期节点。当用户提到控制器、PID、MPC、LQR、轨迹跟踪、ros2_control、电机、伺服时使用。
| name | ros2-navigation |
| description | ROS2 导航技能。Nav2 栈、SLAM、路径规划、costmap、全局/局部规划器。当用户提到 Nav2、SLAM、slam_toolbox、Cartographer、AMCL、costmap、规划器、navfn 时使用。 |
| user-invocable | false |
| category | domain |
机器人自主导航,从 SLAM 建图到 Nav2 路径规划。
[BT Navigator] (行为树)
├── [Planner Server] (NavfnPlanner / SmacPlanner)
├── [Controller Server] (DWBController / RPP / MPPI)
├── [Recovery Server] (Spin / BackUp / Wait)
└── [Costmap 2D] (Global + Local)
ros2 launch nav2_bringup bringup_launch.py \
map:=/path/to/map.yaml \
use_sim_time:=false \
params_file:=/path/to/nav2_params.yaml
amcl:
ros__parameters:
use_sim_time: False
alpha1: 0.2
alpha2: 0.2
base_frame_id: "base_footprint"
odom_frame_id: "odom"
global_frame_id: "map"
laser_model_type: "likelihood_field"
max_particles: 2000
min_particles: 500
global_costmap:
global_costmap:
ros__parameters:
update_frequency: 1.0
publish_frequency: 1.0
global_frame: map
robot_base_frame: base_link
robot_radius: 0.22
resolution: 0.05
plugins: ["static_layer", "obstacle_layer", "inflation_layer"]
obstacle_layer:
plugin: "nav2_costmap_2d::ObstacleLayer"
observation_sources: scan
scan:
topic: /scan
max_obstacle_height: 2.0
clearing: True
marking: True
data_type: "LaserScan"
inflation_layer:
plugin: "nav2_costmap_2d::InflationLayer"
cost_scaling_factor: 3.0
inflation_radius: 0.55
planner_server:
ros__parameters:
planner_plugins: ["GridBased"]
GridBased:
plugin: "nav2_navfn_planner/NavfnPlanner"
tolerance: 0.5
use_astar: false
allow_unknown: true
controller_server:
ros__parameters:
controller_frequency: 20.0
controller_plugins: ["FollowPath"]
FollowPath:
plugin: "dwb_core::DWBLocalPlanner"
min_vel_x: 0.0
max_vel_x: 0.5
max_vel_theta: 1.0
| 工具 | 适用场景 | 特点 |
|---|---|---|
| slam_toolbox | 2D 室内 | 在线建图 + 离线优化,推荐 |
| Cartographer | 2D/3D 室内外 | Google 维护,稳定 |
| RTAB-Map | 3D + 视觉 | 视觉惯性,大场景 |
| LIO-SAM | 3D 户外 | 激光 + IMU 紧耦合 |
ros2 launch slam_toolbox online_async_launch.py \
use_sim_time:=false \
params_file:=/path/to/mapper_params.yaml
ros2 run nav2_map_server map_saver_cli -f my_map
<root main_tree_to_execute="MainTree">
<BehaviorTree ID="MainTree">
<RecoveryNode number_of_retries="6" name="NavigateRecovery">
<PipelineSequence name="NavigateWithReplanning">
<RateController hz="1.0">
<RecoveryNode number_of_retries="1" name="ComputePathToPose">
<ComputePathToPose goal="{goal}" path="{path}" planner_id="GridBased"/>
<ClearEntireCostmap name="ClearGlobalCostmap-Context"
service_name="global_costmap/clear_entirely_global_costmap"/>
</RecoveryNode>
</RateController>
<RecoveryNode number_of_retries="1" name="FollowPath">
<FollowPath path="{path}" controller_id="FollowPath"/>
<ClearEntireCostmap name="ClearLocalCostmap-Context"
service_name="local_costmap/clear_entirely_local_costmap"/>
</RecoveryNode>
</PipelineSequence>
</RecoveryNode>
</BehaviorTree>
</root>
from nav2_simple_commander.robot_navigator import BasicNavigator
from geometry_msgs.msg import PoseStamped
navigator = BasicNavigator()
navigator.waitUntilNav2Active()
goal = PoseStamped()
goal.header.frame_id = 'map'
goal.pose.position.x = 5.0
goal.pose.position.y = 3.0
goal.pose.orientation.w = 1.0
navigator.goToPose(goal)
while not navigator.isTaskComplete():
feedback = navigator.getFeedback()
print(f'Distance remaining: {feedback.distance_remaining}')
# RViz2 with Nav2 plugin
rviz2 -d $(ros2 pkg prefix nav2_bringup)/share/nav2_bringup/rviz/nav2_default_view.rviz
# 查看代价地图
ros2 topic echo /global_costmap/costmap
# 检查 TF 树
ros2 run tf2_tools view_frames