机器人ROS自动驾驶【免费下载链接】navigation2ROS 2 Navigation Framework and System项目地址https://gitcode.com/gh_mirrors/na/navigation2点击查看免费下载Nav2ROS 2 Navigation Framework的nav2_system_tests包承载着整套导航框架的组件级、子系统级与全系统级集成测试是导航系统合并大型架构变更前的安全网。本文将围绕该包的设计定位、目录结构、运行方式、测试矩阵与源码实现展开带你掌握如何在本地复现 Gazebo 仿真下的导航验收、如何筛选与循环执行测试、以及如何理解每类测试背后做了什么、验证了什么。一、包定位Nav2 的三层测试体系Nav2 的测试在物理上分层放置每一层的侧重点不同见 nav2_system_tests/README.md组件测试Component-Testing针对单个算法组件进行验证子系统测试Subsystem-Testing验证一组模块协同工作的行为全系统集成测试Full-System Integration把整个导航栈定位、规划、控制、行为树、生命周期管理连同机器人仿真一起拉起做端到端验收。nav2_system_tests的核心目标是提供冒烟测试smoke test与集成测试在高层面上确认导航系统整体工作正常。更精细的单元测试和特定子系统测试则保留在各算法各自的包内例如nav2_controller、nav2_smac_planner、nav2_amcl等包内的单测目录与本包形成互补。本包中的大多数测试会启动 Gazebo 仿真实例让一个机器人模型在某个环境中完成特定任务同时跟踪特定模块的输出结果。README 中列举的典型场景包括机器人在沙盒sandbox环境中执行Navigate to Pose导航到姿态、Navigate Through Poses依次经过多姿态、Waypoint Following航点跟随三类导航任务的系统测试在生成的环境中随机规划数千条路径验证默认规划器工作正常验证系统能够**多次成功完成生命周期启停bringup / shutdown**切换验证keepout禁入区与 speed限速区代价地图过滤器在实际环境中生效——不进入禁入区、进入限速区时减速在沙盒环境中验证**行为Behaviors**能正确触发并完成碰撞检查验证系统故障能被正确记录并可恢复。该包的首要用途是支撑 Nav2 的 CI为合并大型架构变更时提供维护者置信度同时也可用于本地验证 Nav2 安装是否完好或补充排障信息。二、测试包结构总览nav2_system_tests的顶层结构如下详见 nav2_system_tests/CMakeLists.txt 与 nav2_system_tests/package.xml目录/文件内容src/system/顶层全系统测试Gazebo 仿真下导航到姿态、经过多姿态、动态障碍、错误初始位姿、多机器人注释保留src/planning/全局规划器组件测试随机路径规划、代价地图场景、插件测试、路径有效性src/localization/定位测试发布 initialpose 并核对 amcl_posesrc/updown/生命周期启停可靠性测试src/behaviors/各行为插件测试assisted_teleop、backup、spin、wait、drive_on_headingsrc/waypoint_follower/航点跟随测试src/route/路由route测试src/gps_navigation/无地图 GPS 导航测试dual EKF NavSatsrc/costmap_filters/keepout / speed 代价地图过滤器测试src/error_codes/错误码插件controller / planner / smoother与故障注入src/system_failure/高层系统故障测试src/behavior_tree/行为树节点测试与 dummy 服务端src/dummy_planner/、src/dummy_controller/测试用 dummy 规划器与控制器maps/测试地图map.pgm、map_circular、keepout_mask、speed_mask、empty_room 等models/仿真模型如 cardboard_box.sdfscripts/ctest_loop.bash循环测试脚本从 顶层 CMakeLists.txt 可以看到测试仅在BUILD_TESTING开启时编译。它依赖nav2_amcl、nav2_behavior_tree、nav2_lifecycle_manager、nav2_map_server、nav2_minimal_tb3_sim、nav2_planner、navigation2等大量 Nav2 核心包并构建了三个错误码插件库controller / planner / smoother 各一个通过pluginlib_export_plugin_description_file导出插件描述用于故障注入测试。三、全系统测试的运行方式1. 构建与执行全部测试首先必须连同本包一起构建 Nav2colcon build --symlink-install然后运行该包的全部测试colcon test --packages-select nav2_system_tests结果会输出到屏幕同时记录在相对于运行colcon test目录的log/latest_test/nav2_system_tests/路径下详见 src/system/README.md。2. 只运行单个测试正则筛选以只运行 bt_navigator 的 error_msg 测试为例colcon test --packages-select nav2_system_tests --event-handlerconsole_direct --ctest-args --output-on-failure -R _error_msg$--event-handlerconsole_direct让输出直接打印到终端--ctest-args --output-on-failure把参数透传给 ctest失败时输出详细日志-R _error_msg$是 ctest 的正则筛选匹配以_error_msg结尾的测试名即test_nav_through_poses_error_msg。在构建目录中也可以直接使用 ctest例如定位测试cd build/nav2_system_tests ctest -V -R test_localization-V输出详细信息-R正则筛选见 src/localization/README.md。3. 循环执行测试稳定性与可靠性验证针对偶发失败仓库提供了循环脚本 scripts/ctest_loop.bashREADME 示例中写到的脚本名与仓库实际文件名略有出入实际文件为ctest_loop.bash用法nav2_system_tests/scripts/ctest_loop.bash -c # loops -o path/to/summary/filename.txt -l path/to/store/failing/logfiles.log -d dds to use参数含义对应脚本内getopts c:o:l:d:解析-c #循环次数-o file汇总输出文件名记录失败计数-l file失败日志文件名-d dds使用的 DDS 实现名称如rmw_fastrtps_cpp脚本会据此设置RMW_IMPLEMENTATION环境变量。脚本内部逻辑为ctest_loop.bash循环执行ctest -V -R test_bt_navigator每次根据返回码判断失败失败则把日志另存为$logfile.$i.fail并累加失败计数最后输出N FAILURES / M汇总。lifecycle 启停测试updown也有专门的循环与统计工具见 src/updown/README.md./test_updown_reliability | tee /tmp/updown.log ./updownresults.py /tmp/updown.log前者循环运行 updown 测试默认 1000 次并记录日志后者解析日志输出通过/失败统计摘要。四、全系统测试内部实现从 Launch 组装到动作执行1. Launch 文件一次导航栈 仿真的完整装配test_system_launch.py 是顶层系统测试的 Launch 模板它依次完成从nav2_minimal_tb3_sim包取得沙盒世界tb3_sandbox.sdf.xacro、机器人 SDFgz_waffle.sdf.xacro与 URDFturtlebot3_waffle.urdf从nav2_bringup取地图tb3_sandbox.yaml根据环境变量BT_NAVIGATOR_XML选择行为树文件来自nav2_bt_navigator包;用RewrittenYaml对本地参数文件nav2_system_params.yaml做运行时参数重写见下节启动gz sim -r -s仿真服务端、spawn_tb3.launch.py放置机器人初始位置 x-2.0, y-0.5、robot_state_publisher发布 URDF通过nav2_bringup的bringup_launch.py拉起完整导航栈map、use_sim_time、autostartTrue 等。测试主体由LaunchTestService以ExecuteProcess方式启动 tester 节点test_system_launch.py传入机器人起点-2.0 -0.5与终点2.0。2. 参数注入一套参数文件多种测试组合系统测试的核心技巧在于通过环境变量动态改写参数文件test_system_launch.py环境变量作用ASTARTrue改写use_astar: True启用 A* 规划GROOT_MONITORINGTrue改写enable_groot_monitoring: True开启 Groot 行为树监控INFLATION_LAYERplugin改写 local/global costmap 的inflation_layer.plugin如换成nav2_costmap_2d::LegacyInflationLayerPLANNERplugin改写planner_server.ros__parameters.GridBased.plugin选择全局规划器CONTROLLERplugin改写controller_server.ros__parameters.FollowPath.plugin选择局部控制器这样无需维护多份参数文件就能在 CI 中覆盖 A* / Dijkstra、不同控制器DWB、Regulated Pure Pursuit、新旧膨胀层等多种组合。3. 测试器节点机器人如何被测试nav_to_pose_tester_node.py 中的NavTester节点是整个系统测试的考官其工作流run_all_testsL384-L404为通过get_state服务轮询等待 amcl 节点进入 active 生命周期状态wait_for_node_active在initialpose话题发布初始位姿frame_idmap并等待amcl_pose话题反馈超时 15 秒见 wait_for_initial_pose等待bt_navigatoractive然后通过NavigateToPoseaction client发送目标位姿runNavigateAction检查 goal 是否被接受、最终状态是否为SUCCEEDED订阅amcl_pose计算与目标点的距离60 秒内距离小于 0.5 m 判定到达reachesGoal通过lifecycle_manager_nav2/manage_nodes服务发出SHUTDOWN 命令让整个导航栈干净退出shutdown。命令行参数支持单机器人-r init_x init_y final_x final_y与多机器人-rs name init_x init_y final_x final_y可重复以及-e True/False指定是否期望失败expect_failure用于负向用例如错误初始位姿测试main。此外当开启 Groot 监控时tester 还会通过ZeroMQ端口 1667对行为树服务器做三类验证状态查询S请求、树重载T请求验证只能加载一次、断点注入I/ HOOK_INSERT 请求设置一个 PRE 断点并期望 SUCCESSgrootMonitoringGetStatus / ReloadTree / SetBreakpoint。4. 系统参数文件的关键配置src/system/nav2_system_params.yaml 是全系统测试使用的参数集其中几个关键项值得关注amcl使用likelihood_field激光模型、nav2_amcl::DifferentialMotionModel运动模型min/max 粒子数 500/2000tf_broadcast: truescan 话题为scanbt_navigatornavigators注册了navigate_to_pose与navigate_through_poses其中navigate_to_pose开启enable_groot_monitoring: true、groot_server_port: 1667error_code_name_prefixes列出了所有需要按错误码前缀命名的行为节点assisted_teleop、backup、compute_path、spin、wait 等controller_server默认使用dwb_core::DWBLocalPlannerFollowPath配有SimpleProgressCheckerrequired_movement_radius 0.5 m / 10 s、SimpleGoalCheckerxy 0.25 m / yaw 0.25 rad / path_length_tolerance 1.0 m与FeasiblePathHandlerprune_distance 2.0 m 等。五、测试矩阵一套 Launch多种组合src/system/CMakeLists.txt 通过nav2_add_test定义了顶层系统测试矩阵全部使用test_system_launch.py或test_system_with_obstacle_launch.py作为模板仅改变环境变量测试名行为树Tester关键环境变量test_bt_navigatornavigate_to_pose_w_replanning_and_recovery.xmlnav_to_pose_tester_node.pyASTARTrue, ControllerRegulatedPurePursuit, PlannerNavfnPlannertest_bt_navigator_with_wrong_init_pose同上同上使用test_wrong_init_pose_launch.py验证错误初始位姿下的行为test_bt_navigator_with_dijkstra同上同上ASTARFalse, Controllerdwb_core::DWBLocalPlannertest_bt_navigator_with_groot_monitoring同上同上GROOT_MONITORINGTrue DWBtest_bt_navigator_with_legacy_inflation同上同上INFLATION_LAYERnav2_costmap_2d::LegacyInflationLayer DWBtest_dynamic_obstacle同上同上ADD_OBSTACLETrue使用带障碍物的 launchtest_nav_through_posesnavigate_through_poses_w_replanning_and_recovery.xmlnav_through_poses_tester_node.pyADD_OBSTACLETruetest_nav_through_poses_error_msg同上nav_through_poses_tester_error_msg_node.pyADD_OBSTACLETrue校验错误消息每个测试的TIMEOUT 180秒3 分钟。test_multi_robot目前以注释形式保留CMakeLists.txt引用了map_circular.yaml与多机器人 tester可视为未来扩展方向。六、组件级与子系统级测试详解1. 全局规划器组件测试planningsrc/planning/README.md 说明了其设计一个PlannerTester 节点以代价地图costmap作为世界表示向规划服务器发送路径生成请求并检查返回路径的质量——可以连续传入随机起点与目标点并检查路径是否与障碍物碰撞。当前世界模型与代价地图均为简化版本机器人尺寸按 1x1 单元、不做障碍膨胀。上图是随机化测试的输出示例蓝色球体代表起点绿色球体代表目标红色线条是计算出的路径灰色格子是障碍物。该目录下的测试见 planning/CMakeLists.txt包括test_planner_costmaps基于地图的规划场景测试test_planner_random随机起止点的大规模路径生成与碰撞检查test_planner_pluginsgtest规划插件加载与基础行为test_planner_is_path_validgtest路径有效性校验。README 特别指出Navfn 算法有时会无法生成路径对应图中可见的孤儿球体这是测试输出中的正常现象说明随机测试天然覆盖了规划失败场景。2. 定位测试localizationsrc/localization/README.md 说明其目标是确保机器人的位姿与坐标变换可用。当前实现只做了简单的 initialpose 测试test_localization模块在initialpose话题发布一个初始位姿然后监听amcl_pose话题若amcl_pose与初始位姿在预定容差内一致测试通过。构建后在build/nav2_system_tests目录执行ctest -V -R test_localization即可单独运行。未来计划在 rosbag 功能可用后用录制的地图扫描数据轨迹来监控amcl_pose与坐标变换无需再跑 Gazebo 和 map_server。3. 行为插件测试behaviorssrc/behaviors/README.md 描述测试创建一个完整导航栈实例行为服务器加载不同的行为插件验证各行为能成功执行。当前覆盖的行为对应子目录包括assisted_teleop辅助遥控backup后退spin原地旋转wait等待drive_on_heading沿航向行驶每个子目录都配有独立的 tester 与 launch例如spin_tester.pytest_spin_behavior.launch.py。4. 航点跟随测试waypoint_followersrc/waypoint_follower/README.md 说明该测试创建导航栈实例并调用 waypoint follower在 turtlebot 地图上以 4 个预定航点校验导航成功。配套tester.py与test_case_launch.py。5. 路由测试routesrc/route/包含tester_node.py与test_route_launch.py对应 Nav2 的路线图route graph导航能力相关 action 为ComputeRoute/ComputeAndTrackRoute见 nav2_msgs/action。6. GPS 导航测试gps_navigationsrc/gps_navigation/使用双 EKF NavSat 配置dual_ekf_navsat.launch.py、dual_ekf_navsat_params.yaml与无地图参数nav2_no_map_params.yaml在无地图环境下验证 GPS 航点导航。7. keepout / speed 代价地图过滤器测试costmap_filterssrc/costmap_filters/对应 README 中keepout 与 speed 受限区域的验收场景test_keepout_launch.pykeepout_params.yaml验证机器人不会进入禁入区地图见 maps/keepout_mask.pgmtest_speed_launch.pyspeed_global_params.yaml/speed_local_params.yaml验证机器人在限速区降低速度地图见 maps/speed_mask.pgm。这与nav2_costmap_2d的 costmap filters 插件nav2_costmap_2d/plugins/costmap_filters直接对应。8. 生命周期上下电测试updownsrc/updown/README.md 说明这是验证系统生命周期 bringup 与 shutdown的顶层测试。运行ros2 launch nav2_system_tests test_updown_launch.py测试通过时输出中会出现[test_updown-13] [INFO] [test_updown]: **************************************************** TEST PASSED!1000 次循环与结果统计分别使用test_updown_reliability脚本与updownresults.py前一节已述。9. 系统故障测试system_failuresrc/system_failure/README.md 是高层系统故障测试README 正文提及验证系统故障被正确记录并可恢复配套tester_node.py与test_system_failure_launch.py。10. 错误码与故障注入error_codessrc/error_codes/构建了三个注入式插件controller_error_plugins.cpp、planner_error_plugin.cpp、smoother_error_plugin.cpp通过controller_plugins.xml/planner_plugins.xml/smoother_plugins.xml导出。test_error_codes_launch.pytest_error_codes.py用于触发并校验 Nav2 的错误码上报链路对应 nav2_msgs/action 中 action 结果里的error_code与error_msg字段。11. 行为树节点测试behavior_treesrc/behavior_tree/提供行为树节点级测试含dummy_action_server.hpp、dummy_service.hpp与server_handler用于在无完整导航栈的情况下验证行为树插件节点与服务器交互相关逻辑可对照 nav2_behavior_tree 包。七、已知限制与演进方向全系统测试当前使用turtlebot3 机器人模型、世界与地图见 src/system/README.md 的 Notes更新于 2019-08测试通常耗时1-2 分钟超时上限为 2 分钟system 测试矩阵中已放宽至 180 秒planning 测试中机器人尺寸为 1x1 单元且不做障碍膨胀属于简化世界模型Navfn 偶发规划失败属预期现象Future Work源自 src/system/README.md第一个目标点通过后继续追加更多目标姿态移除对 turtlebot3 模型与地图的依赖改用简单/哑机器人并自建世界与地图test_multi_robot已预留但暂以注释形式保留CMakeLists.txt定位测试未来计划引入 rosbag 回放以摆脱对 Gazebo 与 map_server 的依赖src/localization/README.md。八、在 CI 与本地验证中如何使用CI 场景nav2_system_tests是 Nav2 持续集成的关键一环用于在合并大型架构变更前建立维护者置信度——CI 中通过colcon test --packages-select nav2_system_tests跑完整测试矩阵并可用-R正则单独拉出某个易出问题的测试如_error_msg$本地场景安装或编译 Nav2 后用同一命令即可验证安装是否完好遇到偶发失败时用ctest_loop.bash循环复现并收集失败日志用RMW_IMPLEMENTATION切换不同 DDS 实现排查中间件层面的不稳定因素故障定位结合 log 目录 的log/latest_test/nav2_system_tests/输出与 tester 节点打印的距离/状态信息Goal failed with status code / error code / error msg可快速判断是规划、控制、定位还是行为树环节的问题。九、延伸阅读系统测试整体定位nav2_system_tests/README.md、nav2_system_tests/CMakeLists.txt全系统测试实现src/system/test_system_launch.py、src/system/nav_to_pose_tester_node.py、src/system/nav2_system_params.yaml规划器组件测试src/planning/README.md、src/planning/planner_tester.cpp循环测试脚本scripts/ctest_loop.bash被测试对象导航栈主包 navigation2、行为树包 nav2_behavior_tree、地图服务器 nav2_map_server赞分享机器人ROS自动驾驶【免费下载链接】navigation2ROS 2 Navigation Framework and System项目地址https://gitcode.com/gh_mirrors/na/navigation2点击查看免费下载相关推荐使用 Pixi 一键运行 ROS 2 Nav2 仿真Gazebo、RViz2 与 TurtleBot3 导航栈实战使用 Pixi 一键运行 ROS 2 Nav2 仿真Gazebo、RViz2 与 TurtleBot3 导航栈实战 本文以仓库 examples/ros2 n开发工具CLI包管理器任务调度OOMWOO快速上手Docker一键启动Gazebo仿真零硬件体验SLAM建图与Nav2导航OOMWOO快速上手Docker一键启动Gazebo仿真零硬件体验SLAM建图与Nav2导航 OOMWOO 是一款基于树莓派、2D激光雷达和ROS2的 开源机器人ROS智能硬件嵌入式Vibe 本地语音转文字拖进文件就出字幕Vibe 本地语音转文字拖进文件就出字幕 Vibe 是一款完全离线运行的跨平台语音转文字工具。录音、视频甚至网页链接丢进去Whisper 等模型就在本机把它机器人ROS自动驾驶上一篇Zotero插件革命从技术门槛到一键体验的进化之路下一篇Joy-Con Toolkit开源手柄控制解决方案完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考