From 1f047b7d221bbc32fbe3593352bccfe97f6086d5 Mon Sep 17 00:00:00 2001 From: SteveMacenski Date: Tue, 25 Aug 2026 13:17:46 -0700 Subject: [PATCH] Adding redirects Signed-off-by: SteveMacenski --- redirects/legacy_map.yml | 300 ++++++++++++++++++++++++++++++ scripts/check_legacy_redirects.py | 99 ++++++++++ scripts/gen_legacy_redirects.py | 217 +++++++++++++++++++++ 3 files changed, 616 insertions(+) create mode 100644 redirects/legacy_map.yml create mode 100644 scripts/check_legacy_redirects.py create mode 100644 scripts/gen_legacy_redirects.py diff --git a/redirects/legacy_map.yml b/redirects/legacy_map.yml new file mode 100644 index 000000000..ff8f1cb79 --- /dev/null +++ b/redirects/legacy_map.yml @@ -0,0 +1,300 @@ +# Redirect map: pre-MkDocs (Sphinx) URLs -> current documentation paths. +# +# Until the MkDocs migration, docs.nav2.org served a flat, unversioned Sphinx +# build at the domain root (e.g. /configuration/packages/configuring-amcl.html). +# The site is now versioned by mike (/rolling/, /lyrical/, /jazzy/) and uses +# directory URLs over a reorganized tree, so every one of those old URLs is dead. +# Years of inbound links -- search results, ROS Discourse threads, source +# comments, third-party tutorials -- still point at them. +# +# scripts/gen_legacy_redirects.py turns this map into static redirect stubs and a +# catch-all 404.html committed to the root of the gh-pages branch. The version +# prefix is NOT stored here; it is added at generation time (default: rolling). +# +# Keys are legacy paths relative to the site root; values are current paths +# relative to the version root. An empty value redirects to the version root. +# +# The legacy root index.html is deliberately absent: mike owns the gh-pages root +# index.html and already redirects / to the default version. +# +# This set is frozen -- the Sphinx site will never gain another page -- so entries +# should only ever be edited when a *target* moves, never added to. +# +2021summerOfCode/Summer_2021_Student_Program.html: community/ +2021summerOfCode/projects/assisted_teleop.html: community/ +2021summerOfCode/projects/create_configuration_assistant.html: community/ +2021summerOfCode/projects/create_plugins.html: community/ +2021summerOfCode/projects/dynamic.html: community/ +2021summerOfCode/projects/grid_maps.html: community/ +2021summerOfCode/projects/localization.html: community/ +2021summerOfCode/projects/multithreading.html: community/ +2021summerOfCode/projects/navigation_rebranding.html: community/ +2021summerOfCode/projects/safety_node.html: community/ +2021summerOfCode/projects/semantics.html: community/ +2021summerOfCode/projects/spinners.html: community/ +2021summerOfCode/projects/testing.html: community/ +2021summerOfCode/projects/twist_n_config.html: community/ +about/index.html: about_and_contact/ +about/related_projects.html: about_and_contact/related_projects/ +about/robots.html: robots_using/ +about/roscon.html: community/roscon_talks/ +behavior_trees/index.html: getting_started/nav2_behavior_trees/ +behavior_trees/overview/detailed_behavior_tree_walkthrough.html: getting_started/nav2_behavior_trees/detailed_behavior_tree_walkthrough/detailed_behavior_tree_walkthrough/ +behavior_trees/overview/nav2_specific_nodes.html: getting_started/nav2_behavior_trees/nav2_specific_nodes/nav2_specific_nodes/ +behavior_trees/trees/follow_point.html: getting_started/nav2_behavior_trees/trees/follow_point/ +behavior_trees/trees/nav_through_poses_recovery.html: getting_started/nav2_behavior_trees/trees/nav_through_poses_recovery/ +behavior_trees/trees/nav_to_pose_and_pause_near_goal_obstacle.html: getting_started/nav2_behavior_trees/trees/nav_to_pose_and_pause_near_goal_obstacle/nav_to_pose_and_pause_near_goal_obstacle/ +behavior_trees/trees/nav_to_pose_recovery.html: getting_started/nav2_behavior_trees/trees/nav_to_pose_recovery/ +behavior_trees/trees/nav_to_pose_with_consistent_replanning_and_if_path_becomes_invalid.html: getting_started/nav2_behavior_trees/trees/nav_to_pose_with_consistent_replanning_and_if_path_becomes_invalid/ +behavior_trees/trees/navigate_on_route_graph_w_recovery.html: getting_started/nav2_behavior_trees/trees/navigate_on_route_graph_w_recovery/ +behavior_trees/trees/odometry_calibration.html: getting_started/nav2_behavior_trees/trees/odometry_calibration/odometry_calibration/ +citations.html: about_and_contact/citations/ +commander_api/index.html: configuration_and_development/simple_commander_api/simple_commander_api/ +concepts/index.html: getting_started/navigation_concepts/ +configuration/index.html: configuration_and_development/configuration_guide/ +configuration/packages/bt-plugins/actions/AppendGoalPoseToGoals.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/AppendGoalPoseToGoals/ +configuration/packages/bt-plugins/actions/AssistedTeleop.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/AssistedTeleop/ +configuration/packages/bt-plugins/actions/BackUp.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/BackUp/ +configuration/packages/bt-plugins/actions/CancelAssistedTeleop.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/CancelAssistedTeleop/ +configuration/packages/bt-plugins/actions/CancelBackUp.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/CancelBackUp/ +configuration/packages/bt-plugins/actions/CancelComputeAndTrackRoute.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/CancelComputeAndTrackRoute/ +configuration/packages/bt-plugins/actions/CancelControl.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/CancelControl/ +# CancelCoverage.md and ComputeCoveragePath.md exist under docs/ but are absent from +# bt_plugins/.nav.yml, so they are not published (on the live site either). These two +# land on the BT plugins index until those pages are added to the nav. +configuration/packages/bt-plugins/actions/CancelCoverage.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/ +configuration/packages/bt-plugins/actions/CancelDriveOnHeading.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/CancelDriveOnHeading/ +configuration/packages/bt-plugins/actions/CancelFollowObject.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/CancelFollowObject/ +configuration/packages/bt-plugins/actions/CancelSpin.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/CancelSpin/ +configuration/packages/bt-plugins/actions/CancelWait.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/CancelWait/ +configuration/packages/bt-plugins/actions/CheckPoseOccupancy.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/CheckPoseOccupancy/ +configuration/packages/bt-plugins/actions/CheckStopStatus.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/CheckStopStatus/ +configuration/packages/bt-plugins/actions/ClearCostmapAroundPose.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ClearCostmapAroundPose/ +configuration/packages/bt-plugins/actions/ClearCostmapAroundRobot.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ClearCostmapAroundRobot/ +configuration/packages/bt-plugins/actions/ClearCostmapExceptRegion.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ClearCostmapExceptRegion/ +configuration/packages/bt-plugins/actions/ClearEntireCostmap.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ClearEntireCostmap/ +configuration/packages/bt-plugins/actions/ComputeAndTrackRoute.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ComputeAndTrackRoute/ +configuration/packages/bt-plugins/actions/ComputeCoveragePath.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/ +configuration/packages/bt-plugins/actions/ComputePathThroughPoses.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ComputePathThroughPoses/ +configuration/packages/bt-plugins/actions/ComputePathToPose.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ComputePathToPose/ +configuration/packages/bt-plugins/actions/ComputeRoute.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ComputeRoute/ +configuration/packages/bt-plugins/actions/ConcatenatePaths.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ConcatenatePaths/ +configuration/packages/bt-plugins/actions/ControllerSelector.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ControllerSelector/ +configuration/packages/bt-plugins/actions/DockRobot.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/DockRobot/ +configuration/packages/bt-plugins/actions/DriveOnHeading.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/DriveOnHeading/ +configuration/packages/bt-plugins/actions/ExtractRouteNodesAsGoals.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ExtractRouteNodesAsGoals/ +configuration/packages/bt-plugins/actions/FollowObject.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/FollowObject/ +configuration/packages/bt-plugins/actions/FollowPath.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/FollowPath/ +configuration/packages/bt-plugins/actions/GetCurrentPose.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/GetCurrentPose/ +configuration/packages/bt-plugins/actions/GetNextFewGoals.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/GetNextFewGoals/ +configuration/packages/bt-plugins/actions/GetPoseFromPath.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/GetPoseFromPath/ +configuration/packages/bt-plugins/actions/GoalCheckerSelector.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/GoalCheckerSelector/ +configuration/packages/bt-plugins/actions/NavigateThroughPoses.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/NavigateThroughPoses/ +configuration/packages/bt-plugins/actions/NavigateToPose.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/NavigateToPose/ +configuration/packages/bt-plugins/actions/PathHandlerSelector.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/PathHandlerSelector/ +configuration/packages/bt-plugins/actions/PlannerSelector.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/PlannerSelector/ +configuration/packages/bt-plugins/actions/ProgressCheckerSelector.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ProgressCheckerSelector/ +configuration/packages/bt-plugins/actions/ReinitializeGlobalLocalization.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ReinitializeGlobalLocalization/ +configuration/packages/bt-plugins/actions/RemoveInCollisionGoals.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/RemoveInCollisionGoals/ +configuration/packages/bt-plugins/actions/RemovePassedGoals.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/RemovePassedGoals/ +configuration/packages/bt-plugins/actions/Smooth.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/Smooth/ +configuration/packages/bt-plugins/actions/SmootherSelector.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/SmootherSelector/ +configuration/packages/bt-plugins/actions/Spin.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/Spin/ +configuration/packages/bt-plugins/actions/ToggleCollisionMonitor.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ToggleCollisionMonitor/ +configuration/packages/bt-plugins/actions/TruncatePath.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/TruncatePath/ +configuration/packages/bt-plugins/actions/TruncatePathLocal.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/TruncatePathLocal/ +configuration/packages/bt-plugins/actions/UndockRobot.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/UndockRobot/ +configuration/packages/bt-plugins/actions/ValidatePath.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/ValidatePath/ +configuration/packages/bt-plugins/actions/Wait.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/actions/Wait/ +configuration/packages/bt-plugins/conditions/AreErrorCodesPresent.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/AreErrorCodesPresent/ +configuration/packages/bt-plugins/conditions/ArePosesNear.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/ArePosesNear/ +configuration/packages/bt-plugins/conditions/DistanceTraveled.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/DistanceTraveled/ +configuration/packages/bt-plugins/conditions/GlobalUpdatedGoal.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/GlobalUpdatedGoal/ +configuration/packages/bt-plugins/conditions/GoalReached.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/GoalReached/ +configuration/packages/bt-plugins/conditions/GoalUpdated.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/GoalUpdated/ +configuration/packages/bt-plugins/conditions/InitialPoseReceived.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/InitialPoseReceived/ +configuration/packages/bt-plugins/conditions/IsBatteryCharging.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/IsBatteryCharging/ +configuration/packages/bt-plugins/conditions/IsBatteryLow.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/IsBatteryLow/ +configuration/packages/bt-plugins/conditions/IsGoalNearby.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/IsGoalNearby/ +configuration/packages/bt-plugins/conditions/IsStuck.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/IsStuck/ +configuration/packages/bt-plugins/conditions/IsWithinPathTrackingBounds.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/IsWithinPathTrackingBounds/ +configuration/packages/bt-plugins/conditions/PathExpiringTimer.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/PathExpiringTimer/ +configuration/packages/bt-plugins/conditions/TimeExpired.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/TimeExpired/ +configuration/packages/bt-plugins/conditions/TransformAvailable.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/TransformAvailable/ +configuration/packages/bt-plugins/conditions/WouldAControllerRecoveryHelp.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/WouldAControllerRecoveryHelp/ +configuration/packages/bt-plugins/conditions/WouldAPlannerRecoveryHelp.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/WouldAPlannerRecoveryHelp/ +configuration/packages/bt-plugins/conditions/WouldARouteRecoveryHelp.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/WouldARouteRecoveryHelp/ +configuration/packages/bt-plugins/conditions/WouldASmootherRecoveryHelp.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/conditions/WouldASmootherRecoveryHelp/ +configuration/packages/bt-plugins/controls/NonblockingSequence.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/controls/NonblockingSequence/ +configuration/packages/bt-plugins/controls/PauseResumeController.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/controls/PauseResumeController/ +configuration/packages/bt-plugins/controls/PersistentSequence.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/controls/PersistentSequence/ +configuration/packages/bt-plugins/controls/PipelineSequence.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/controls/PipelineSequence/ +configuration/packages/bt-plugins/controls/RecoveryNode.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/controls/RecoveryNode/ +configuration/packages/bt-plugins/controls/RoundRobin.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/controls/RoundRobin/ +configuration/packages/bt-plugins/decorators/DistanceController.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/decorators/DistanceController/ +configuration/packages/bt-plugins/decorators/GoalUpdatedController.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/decorators/GoalUpdatedController/ +configuration/packages/bt-plugins/decorators/GoalUpdater.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/decorators/GoalUpdater/ +configuration/packages/bt-plugins/decorators/PathLongerOnApproach.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/decorators/PathLongerOnApproach/ +configuration/packages/bt-plugins/decorators/RateController.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/decorators/RateController/ +configuration/packages/bt-plugins/decorators/SingleTrigger.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/decorators/SingleTrigger/ +configuration/packages/bt-plugins/decorators/SpeedController.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/decorators/SpeedController/ +configuration/packages/collision_monitor/configuring-collision-detector-node.html: configuration_and_development/configuration_guide/core_servers/collision_monitor/configuring_collision_detector_node/ +configuration/packages/collision_monitor/configuring-collision-monitor-node.html: configuration_and_development/configuration_guide/core_servers/collision_monitor/configuring_collision_monitor_node/ +configuration/packages/configuring-amcl.html: configuration_and_development/configuration_guide/others/configuring_amcl/ +configuration/packages/configuring-behavior-server.html: configuration_and_development/configuration_guide/core_servers/configuring_behavior_server/ +configuration/packages/configuring-bt-navigator.html: configuration_and_development/configuration_guide/core_servers/configuring_bt_navigator/ +configuration/packages/configuring-bt-xml.html: configuration_and_development/configuration_guide/core_servers/bt_plugins/ +configuration/packages/configuring-collision-monitor.html: configuration_and_development/configuration_guide/core_servers/collision_monitor/ +configuration/packages/configuring-constrained-smoother.html: configuration_and_development/configuration_guide/smoother_plugins/constrained_smoother/configuring_constrained_smoother/ +configuration/packages/configuring-controller-server.html: configuration_and_development/configuration_guide/core_servers/controller_server/ +configuration/packages/configuring-costmaps.html: configuration_and_development/configuration_guide/core_servers/costmap_2d/ +configuration/packages/configuring-coverage-server.html: configuration_and_development/configuration_guide/others/configuring_coverage_server/ +configuration/packages/configuring-docking-server.html: configuration_and_development/configuration_guide/core_servers/configuring_docking_server/ +configuration/packages/configuring-dwb-controller.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/ +configuration/packages/configuring-following-server.html: configuration_and_development/configuration_guide/others/configuring_following_server/ +configuration/packages/configuring-graceful-motion-controller.html: configuration_and_development/configuration_guide/controller_plugins/configuring_graceful_motion_controller/ +configuration/packages/configuring-lifecycle.html: configuration_and_development/configuration_guide/core_servers/configuring_lifecycle_manager/ +configuration/packages/configuring-loopback-sim.html: configuration_and_development/configuration_guide/others/configuring_loopback_sim/ +configuration/packages/configuring-map-server.html: configuration_and_development/configuration_guide/core_servers/map_server/configuring_map_server/ +configuration/packages/configuring-mppic.html: configuration_and_development/configuration_guide/controller_plugins/mppi_controller/configuring_mppic/ +configuration/packages/configuring-navfn.html: configuration_and_development/configuration_guide/planners_plugins/configuring_navfn/ +configuration/packages/configuring-planner-server.html: configuration_and_development/configuration_guide/core_servers/configuring_planner_server/ +configuration/packages/configuring-regulated-pp.html: configuration_and_development/configuration_guide/controller_plugins/configuring_regulated_pp/ +configuration/packages/configuring-rotation-shim-controller.html: configuration_and_development/configuration_guide/controller_plugins/configuring_rotation_shim_controller/ +configuration/packages/configuring-route-server.html: configuration_and_development/configuration_guide/core_servers/route_server/configuring_route_server/ +configuration/packages/configuring-savitzky-golay-smoother.html: configuration_and_development/configuration_guide/smoother_plugins/savitzky_golay_smoother/configuring_savitzky_golay_smoother/ +configuration/packages/configuring-simple-smoother.html: configuration_and_development/configuration_guide/smoother_plugins/configuring_simple_smoother/ +configuration/packages/configuring-smac-planner.html: configuration_and_development/configuration_guide/planners_plugins/smac/ +configuration/packages/configuring-smoother-server.html: configuration_and_development/configuration_guide/core_servers/configuring_smoother_server/ +configuration/packages/configuring-thetastar.html: configuration_and_development/configuration_guide/planners_plugins/thetastar/configuring_thetastar/ +configuration/packages/configuring-velocity-smoother.html: configuration_and_development/configuration_guide/core_servers/configuring_velocity_smoother/ +configuration/packages/configuring-waypoint-follower.html: configuration_and_development/configuration_guide/core_servers/waypoint_follower/ +configuration/packages/costmap-plugins/asymmetric_inflation.html: configuration_and_development/configuration_guide/core_servers/costmap_2d/costmap_plugins/asymmetric_inflation/asymmetric_inflation/ +configuration/packages/costmap-plugins/binary_filter.html: configuration_and_development/configuration_guide/core_servers/costmap_2d/costmap_filters/binary_filter/binary_filter/ +configuration/packages/costmap-plugins/denoise.html: configuration_and_development/configuration_guide/core_servers/costmap_2d/costmap_plugins/denoise/ +configuration/packages/costmap-plugins/inflation.html: configuration_and_development/configuration_guide/core_servers/costmap_2d/costmap_plugins/inflation/ +configuration/packages/costmap-plugins/inflation_legacy.html: configuration_and_development/configuration_guide/core_servers/costmap_2d/costmap_plugins/inflation_legacy/ +configuration/packages/costmap-plugins/keepout_filter.html: configuration_and_development/configuration_guide/core_servers/costmap_2d/costmap_filters/keepout_filter/ +configuration/packages/costmap-plugins/obstacle.html: configuration_and_development/configuration_guide/core_servers/costmap_2d/costmap_plugins/obstacle/ +configuration/packages/costmap-plugins/plugin_container.html: configuration_and_development/configuration_guide/core_servers/costmap_2d/costmap_plugins/plugin_container/plugin_container/ +configuration/packages/costmap-plugins/range.html: configuration_and_development/configuration_guide/core_servers/costmap_2d/costmap_plugins/range/ +configuration/packages/costmap-plugins/speed_filter.html: configuration_and_development/configuration_guide/core_servers/costmap_2d/costmap_filters/speed_filter/ +configuration/packages/costmap-plugins/static.html: configuration_and_development/configuration_guide/core_servers/costmap_2d/costmap_plugins/static/ +configuration/packages/costmap-plugins/voxel.html: configuration_and_development/configuration_guide/core_servers/costmap_2d/costmap_plugins/voxel/ +configuration/packages/costmap-plugins/zone_parameter_filter.html: configuration_and_development/configuration_guide/core_servers/costmap_2d/costmap_filters/zone_parameter_filter/zone_parameter_filter/ +configuration/packages/dwb-params/controller.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/dwb_params/controller/ +configuration/packages/dwb-params/iterator.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/dwb_params/iterator/ +configuration/packages/dwb-params/kinematic.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/dwb_params/kinematic/ +configuration/packages/dwb-params/visualization.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/dwb_params/visualization/ +configuration/packages/dwb-plugins/limited_accel_generator.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/dwb_plugins/limited_accel_generator/ +configuration/packages/dwb-plugins/standard_traj_generator.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/dwb_plugins/standard_traj_generator/ +configuration/packages/map_server/configuring-costmap-filter-info-server.html: configuration_and_development/configuration_guide/core_servers/map_server/configuring_costmap_filter_info_server/ +configuration/packages/map_server/configuring-map-saver.html: configuration_and_development/configuration_guide/core_servers/map_server/configuring_map_saver/ +configuration/packages/map_server/configuring-map-server.html: configuration_and_development/configuration_guide/core_servers/map_server/configuring_map_server/ +configuration/packages/map_server/configuring-vector-object-server.html: configuration_and_development/configuration_guide/core_servers/map_server/vector_object_server/configuring_vector_object_server/ +configuration/packages/nav2_controller-plugins/adaptive_tolerance_goal_checker.html: configuration_and_development/configuration_guide/core_servers/controller_server/controller_server_plugins/adaptive_tolerance_goal_checker/adaptive_tolerance_goal_checker/ +configuration/packages/nav2_controller-plugins/axis_goal_checker.html: configuration_and_development/configuration_guide/core_servers/controller_server/controller_server_plugins/axis_goal_checker/axis_goal_checker/ +configuration/packages/nav2_controller-plugins/feasible_path_handler.html: configuration_and_development/configuration_guide/core_servers/controller_server/controller_server_plugins/feasible_path_handler/ +configuration/packages/nav2_controller-plugins/pose_progress_checker.html: configuration_and_development/configuration_guide/core_servers/controller_server/controller_server_plugins/pose_progress_checker/ +configuration/packages/nav2_controller-plugins/position_goal_checker.html: configuration_and_development/configuration_guide/core_servers/controller_server/controller_server_plugins/position_goal_checker/ +configuration/packages/nav2_controller-plugins/simple_goal_checker.html: configuration_and_development/configuration_guide/core_servers/controller_server/controller_server_plugins/simple_goal_checker/ +configuration/packages/nav2_controller-plugins/simple_progress_checker.html: configuration_and_development/configuration_guide/core_servers/controller_server/controller_server_plugins/simple_progress_checker/ +configuration/packages/nav2_controller-plugins/stopped_goal_checker.html: configuration_and_development/configuration_guide/core_servers/controller_server/controller_server_plugins/stopped_goal_checker/ +configuration/packages/nav2_waypoint_follower-plugins/input_at_waypoint.html: configuration_and_development/configuration_guide/core_servers/waypoint_follower/waypoint_follower_plugins/input_at_waypoint/ +configuration/packages/nav2_waypoint_follower-plugins/photo_at_waypoint.html: configuration_and_development/configuration_guide/core_servers/waypoint_follower/waypoint_follower_plugins/photo_at_waypoint/ +configuration/packages/nav2_waypoint_follower-plugins/wait_at_waypoint.html: configuration_and_development/configuration_guide/core_servers/waypoint_follower/waypoint_follower_plugins/wait_at_waypoint/ +configuration/packages/smac/configuring-smac-2d.html: configuration_and_development/configuration_guide/planners_plugins/smac/smac_2d/configuring_smac_2d/ +configuration/packages/smac/configuring-smac-hybrid.html: configuration_and_development/configuration_guide/planners_plugins/smac/smac_hybrid/configuring_smac_hybrid/ +configuration/packages/smac/configuring-smac-lattice.html: configuration_and_development/configuration_guide/planners_plugins/smac/smac_lattice/configuring_smac_lattice/ +configuration/packages/trajectory_critics/base_obstacle.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/trajectory_critics/base_obstacle/ +configuration/packages/trajectory_critics/goal_align.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/trajectory_critics/goal_align/ +configuration/packages/trajectory_critics/goal_dist.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/trajectory_critics/goal_dist/ +configuration/packages/trajectory_critics/obstacle_footprint.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/trajectory_critics/obstacle_footprint/ +configuration/packages/trajectory_critics/oscillation.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/trajectory_critics/oscillation/ +configuration/packages/trajectory_critics/path_align.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/trajectory_critics/path_align/ +configuration/packages/trajectory_critics/path_dist.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/trajectory_critics/path_dist/ +configuration/packages/trajectory_critics/prefer_forward.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/trajectory_critics/prefer_forward/ +configuration/packages/trajectory_critics/rotate_to_goal.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/trajectory_critics/rotate_to_goal/ +configuration/packages/trajectory_critics/twirling.html: configuration_and_development/configuration_guide/controller_plugins/dwb_controller/trajectory_critics/twirling/ +development_guides/build_docs/build_troubleshooting_guide.html: getting_started/build_and_install/build_troubleshooting_guide/ +development_guides/build_docs/index.html: getting_started/build_and_install/ +development_guides/devcontainer_docs/devcontainer_guide.html: getting_started/dev_container/devcontainer_guide/ +development_guides/devcontainer_docs/index.html: getting_started/dev_container/ +development_guides/index.html: getting_started/ +development_guides/involvement_docs/index.html: community/getting_involved/ +genindex.html: "" +getting_started/index.html: getting_started/ +maintainer_docs/distribution_release.html: community/maintainer_docs/distribution_release/ +maintainer_docs/distribution_syncs.html: community/maintainer_docs/distribution_syncs/ +maintainer_docs/index.html: community/maintainer_docs/ +migration/Dashing.html: configuration_and_development/migration_guides/Dashing/ +migration/Eloquent.html: configuration_and_development/migration_guides/Eloquent/ +migration/Foxy.html: configuration_and_development/migration_guides/foxy/Foxy/ +migration/Galactic.html: configuration_and_development/migration_guides/galactic/Galactic/ +migration/Humble.html: configuration_and_development/migration_guides/Humble/ +migration/Iron.html: configuration_and_development/migration_guides/iron/Iron/ +migration/Jazzy.html: configuration_and_development/migration_guides/jazzy/Jazzy/ +migration/Kilted.html: configuration_and_development/migration_guides/kilted/Kilted/ +migration/index.html: configuration_and_development/migration_guides/ +plugin_tutorials/docs/writing_new_behavior_plugin.html: tutorials/plugin_tutorials/writing_new_behavior_plugin/ +plugin_tutorials/docs/writing_new_bt_plugin.html: tutorials/plugin_tutorials/writing_new_bt_plugin/ +plugin_tutorials/docs/writing_new_costmap2d_plugin.html: tutorials/plugin_tutorials/writing_new_costmap2d_plugin/writing_new_costmap2d_plugin/ +plugin_tutorials/docs/writing_new_nav2controller_plugin.html: tutorials/plugin_tutorials/writing_new_controller_plugin/writing_new_controller_plugin/ +plugin_tutorials/docs/writing_new_nav2planner_plugin.html: tutorials/plugin_tutorials/writing_new_planner_plugin/writing_new_planner_plugin/ +plugin_tutorials/docs/writing_new_navigator_plugin.html: tutorials/plugin_tutorials/writing_new_navigator_plugin/ +plugin_tutorials/index.html: tutorials/plugin_tutorials/ +plugins/index.html: configuration_and_development/navigation_plugins/ +roadmap/roadmap.html: community/roadmaps/ +search.html: "" +setup_guides/algorithm/select_algorithm.html: configuration_and_development/first_time_robot_setup_guide/navigation_plugins/setup_navigation_plugins/ +setup_guides/footprint/setup_footprint.html: configuration_and_development/first_time_robot_setup_guide/footprint/setup_footprint/ +setup_guides/gazebo.html: configuration_and_development/first_time_robot_setup_guide/sdf/setup_sdf/ +setup_guides/gazebo_classic.html: configuration_and_development/first_time_robot_setup_guide/sdf/setup_sdf/ +setup_guides/index.html: configuration_and_development/first_time_robot_setup_guide/ +setup_guides/odom/setup_odom_gz.html: configuration_and_development/first_time_robot_setup_guide/odom/setup_odom/ +setup_guides/odom/setup_odom_gz_classic.html: configuration_and_development/first_time_robot_setup_guide/odom/setup_odom/ +setup_guides/odom/setup_robot_localization.html: configuration_and_development/first_time_robot_setup_guide/odom/setup_robot_localization/ +setup_guides/sdf/setup_sdf.html: configuration_and_development/first_time_robot_setup_guide/sdf/setup_sdf/ +setup_guides/sensors/mapping_localization.html: configuration_and_development/first_time_robot_setup_guide/sensors/mapping_localization/ +setup_guides/sensors/setup_sensors_gz.html: configuration_and_development/first_time_robot_setup_guide/sensors/setup_sensors/ +setup_guides/sensors/setup_sensors_gz_classic.html: configuration_and_development/first_time_robot_setup_guide/sensors/setup_sensors/ +setup_guides/transformation/setup_transforms.html: configuration_and_development/first_time_robot_setup_guide/transformation/setup_transforms/ +setup_guides/urdf/setup_urdf.html: configuration_and_development/first_time_robot_setup_guide/urdf/setup_urdf/ +tuning/index.html: configuration_and_development/tuning_guide/ +tutorials/docs/adding_a_nav2_task_server.html: tutorials/general_tutorials/adding_a_nav2_task_server/ +tutorials/docs/adding_smoother.html: tutorials/general_tutorials/adding_smoother/adding_smoother/ +tutorials/docs/camera_calibration.html: tutorials/general_tutorials/camera_calibration/camera_calibration/ +tutorials/docs/depth_ai_integration.html: tutorials/general_tutorials/depth_ai_integration/depth_ai_integration/ +tutorials/docs/docker_dev.html: tutorials/general_tutorials/docker_dev/ +tutorials/docs/filtering_of_noise-induced_obstacles.html: tutorials/general_tutorials/filtering_of_noise_induced_obstacles/filtering_of_noise_induced_obstacles/ +tutorials/docs/get_backtrace.html: tutorials/general_tutorials/get_backtrace/ +tutorials/docs/get_profile.html: tutorials/general_tutorials/get_profile/get_profile/ +tutorials/docs/groot.html: tutorials/general_tutorials/groot_tutorials/groot/groot/ +tutorials/docs/groot2.html: tutorials/general_tutorials/groot_tutorials/groot2/groot2/ +tutorials/docs/integrating_vio.html: tutorials/general_tutorials/integrating_vio/integrating_vio/ +tutorials/docs/isaac_perceptor/rebuilding_tensorrt_engine.html: tutorials/general_tutorials/isaac_perceptor/rebuilding_tensorrt_engine/ +tutorials/docs/navigation2_dynamic_point_following.html: tutorials/general_tutorials/navigation2_dynamic_point_following/navigation2_dynamic_point_following/ +tutorials/docs/navigation2_on_real_turtlebot3.html: tutorials/general_tutorials/navigation2_on_real_turtlebot3/navigation2_on_real_turtlebot3/ +tutorials/docs/navigation2_with_gps.html: tutorials/general_tutorials/navigation2_with_gps/navigation2_with_gps/ +tutorials/docs/navigation2_with_ground_consistency_layer.html: tutorials/general_tutorials/navigation2_with_ground_consistency_layer/navigation2_with_ground_consistency_layer/ +tutorials/docs/navigation2_with_keepout_filter.html: tutorials/general_tutorials/navigation2_with_keepout_filter/navigation2_with_keepout_filter/ +tutorials/docs/navigation2_with_sam3_semantic_segmentation.html: tutorials/general_tutorials/navigation2_with_sam3_semantic_segmentation/navigation2_with_sam3_semantic_segmentation/ +tutorials/docs/navigation2_with_semantic_segmentation.html: tutorials/general_tutorials/navigation2_with_semantic_segmentation/navigation2_with_semantic_segmentation/ +tutorials/docs/navigation2_with_slam.html: tutorials/general_tutorials/navigation2_with_slam/navigation2_with_slam/ +tutorials/docs/navigation2_with_speed_filter.html: tutorials/general_tutorials/navigation2_with_speed_filter/navigation2_with_speed_filter/ +tutorials/docs/navigation2_with_stvl.html: tutorials/general_tutorials/navigation2_with_stvl/ +tutorials/docs/navigation2_with_vector_objects.html: tutorials/general_tutorials/navigation2_with_vector_objects/navigation2_with_vector_objects/ +tutorials/docs/navigation2_with_zone_parameter_filter.html: tutorials/general_tutorials/navigation2_with_zone_parameter_filter/ +tutorials/docs/roscon_uk_2025_state_estimation.html: tutorials/general_tutorials/roscon_uk_2025_state_estimation/ +tutorials/docs/route_server_tools.html: tutorials/general_tutorials/route_server_tools/ +tutorials/docs/route_server_tools/navigation2_route_tool.html: tutorials/general_tutorials/route_server_tools/navigation2_route_tool/navigation2_route_tool/ +tutorials/docs/route_server_tools/route_graph_generation.html: tutorials/general_tutorials/route_server_tools/route_graph_generation/route_graph_generation/ +tutorials/docs/route_server_tools/route_graph_generation_lif_editor.html: tutorials/general_tutorials/route_server_tools/route_graph_generation_lif_editor/route_graph_generation_lif_editor/ +tutorials/docs/route_server_tools/swagger_generation.html: tutorials/general_tutorials/route_server_tools/route_graph_generation_swagger/swagger_generation/ +tutorials/docs/using_3laws_supervisor.html: tutorials/general_tutorials/using_3laws_supervisor/using_3laws_supervisor/ +tutorials/docs/using_collision_monitor.html: tutorials/general_tutorials/using_collision_monitor/using_collision_monitor/ +tutorials/docs/using_docking.html: tutorials/general_tutorials/using_docking/ +tutorials/docs/using_groot.html: tutorials/general_tutorials/groot_tutorials/ +tutorials/docs/using_isaac_perceptor.html: tutorials/general_tutorials/isaac_perceptor/ +tutorials/docs/using_shim_controller.html: tutorials/general_tutorials/using_shim_controller/ +tutorials/index.html: tutorials/ diff --git a/scripts/check_legacy_redirects.py b/scripts/check_legacy_redirects.py new file mode 100644 index 000000000..fb76aaf59 --- /dev/null +++ b/scripts/check_legacy_redirects.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 +"""Verify redirects/legacy_map.yml against a built site. + +Checks that every map target resolves to a real page in a `mkdocs build` output, +and -- when a copy of the old Sphinx build is available -- that every legacy page +has an entry and no entry names a page that never existed. + +Usage: + mkdocs build + python3 scripts/check_legacy_redirects.py --site site + python3 scripts/check_legacy_redirects.py --site site --old-build /path/to/sphinx-build +""" +import argparse +import os +import sys + +import yaml + +REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DEFAULT_MAP = os.path.join(REPO_ROOT, "redirects", "legacy_map.yml") + +# Legacy pages that must NOT be in the map: mike owns the gh-pages root +# index.html and already redirects / to the default version. +MIKE_OWNED = {"index.html"} + + +def load_map(path): + with open(path, encoding="utf-8") as fh: + return yaml.safe_load(fh) + + +def target_exists(site_dir, new_path): + """A target resolves if MkDocs emitted an index.html for it.""" + return os.path.isfile(os.path.join(site_dir, new_path, "index.html")) + + +def old_pages(old_build): + pages = set() + for dirpath, dirnames, filenames in os.walk(old_build): + dirnames[:] = [d for d in dirnames + if d not in (".git", "_sources", "_static", "_images")] + for fn in filenames: + if fn.endswith(".html"): + pages.add(os.path.relpath(os.path.join(dirpath, fn), old_build)) + return pages + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--site", default="site", help="mkdocs build output directory") + parser.add_argument("--map", default=DEFAULT_MAP) + parser.add_argument("--old-build", + help="checkout of the pre-migration Sphinx build, for " + "coverage checks against the legacy page set") + args = parser.parse_args() + + if not os.path.isdir(args.site): + raise SystemExit("error: no such build directory: %s (run `mkdocs build`)" + % args.site) + + mapping = load_map(args.map) + failures = [] + + for legacy, new_path in sorted(mapping.items()): + if not target_exists(args.site, new_path): + failures.append("target missing from build: %s -> %s" + % (legacy, new_path or "")) + + checked_coverage = False + if args.old_build: + if not os.path.isdir(args.old_build): + raise SystemExit("error: no such directory: %s" % args.old_build) + checked_coverage = True + legacy_pages = old_pages(args.old_build) + for page in sorted(legacy_pages - set(mapping) - MIKE_OWNED): + failures.append("legacy page has no redirect: %s" % page) + for page in sorted(set(mapping) & MIKE_OWNED): + failures.append("map must not claim a mike-owned file: %s" % page) + for page in sorted(set(mapping) - legacy_pages): + failures.append("map names a page absent from the old build: %s" % page) + + print("map entries : %d" % len(mapping)) + print("targets ok : %d" % (len(mapping) - sum( + 1 for f in failures if f.startswith("target missing")))) + print("coverage : %s" % ("checked against old build" if checked_coverage + else "skipped (--old-build not given)")) + + if failures: + print("\n%d problem(s):" % len(failures)) + for f in failures: + print(" " + f) + return 1 + + print("\nOK") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/gen_legacy_redirects.py b/scripts/gen_legacy_redirects.py new file mode 100644 index 000000000..9517a54fc --- /dev/null +++ b/scripts/gen_legacy_redirects.py @@ -0,0 +1,217 @@ +#!/usr/bin/env python3 +"""Generate redirect stubs for pre-MkDocs URLs into a gh-pages checkout. + +The legacy Sphinx URLs live at the site root, outside every mike version +directory, so nothing in the MkDocs build can produce them -- they have to be +written straight into the gh-pages branch. See redirects/legacy_map.yml. + +Usage: + python3 scripts/gen_legacy_redirects.py --out /path/to/gh-pages-checkout + +The script is strictly additive: it only writes paths named in the map plus +404.html, and refuses to touch the version directories or mike's own files. +""" +import argparse +import json +import os +import sys + +import yaml + +REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DEFAULT_MAP = os.path.join(REPO_ROOT, "redirects", "legacy_map.yml") + +SITE_URL = "https://docs.nav2.org" + +# Never overwrite these: mike owns them, or they configure GitHub Pages itself. +PROTECTED_FILES = {"index.html", "versions.json", "CNAME", ".nojekyll"} + +# Version directories, plus distros that were never published under mike but may +# still appear in hand-built URLs. Used to protect paths and to strip prefixes +# in the 404 handler. +KNOWN_VERSIONS = [ + "rolling", "lyrical", "jazzy", "kilted", "iron", "humble", "galactic", "foxy", +] + +STUB = """ + + + +Redirecting + + + + + + This page has moved to {target}. + + +""" + + +def load_map(path): + with open(path, encoding="utf-8") as fh: + data = yaml.safe_load(fh) + if not isinstance(data, dict) or not data: + raise SystemExit("error: %s did not parse as a non-empty mapping" % path) + return data + + +def target_url(new_path, version): + """Absolute, root-relative URL for a map value.""" + return "/%s/%s" % (version, new_path or "") + + +def check_writable(out_dir, rel_path): + """Refuse to write anywhere that belongs to mike or to a published version.""" + top = rel_path.split("/")[0] + if rel_path in PROTECTED_FILES: + raise SystemExit("refusing to overwrite mike-owned file: %s" % rel_path) + if top in KNOWN_VERSIONS: + raise SystemExit("refusing to write inside version directory: %s" % rel_path) + full = os.path.realpath(os.path.join(out_dir, rel_path)) + if not full.startswith(os.path.realpath(out_dir) + os.sep): + raise SystemExit("refusing to write outside output directory: %s" % rel_path) + return full + + +def write_stubs(mapping, out_dir, version): + written = 0 + for legacy, new_path in sorted(mapping.items()): + full = check_writable(out_dir, legacy) + os.makedirs(os.path.dirname(full), exist_ok=True) + target = target_url(new_path, version) + with open(full, "w", encoding="utf-8") as fh: + fh.write(STUB.format(site=SITE_URL, target=target)) + written += 1 + return written + + +def write_404(mapping, out_dir, version): + """Catch-all for legacy URLs this map does not name. + + GitHub Pages serves the *root* 404.html for any unmatched path sitewide; the + per-version 404.html files MkDocs generates are never reached. + """ + routes = {k: target_url(v, version) for k, v in mapping.items()} + payload = json.dumps(routes, indent=0, sort_keys=True, separators=(",", ":")) + versions = json.dumps(KNOWN_VERSIONS) + + html = """ + + + + +Page moved · Nav2 documentation + + + +

This page moved

+

The Nav2 documentation was reorganized and is now versioned. Looking for +the new location…

+ + + + +""".format(payload=payload, versions=versions, version=version) + + with open(os.path.join(out_dir, "404.html"), "w", encoding="utf-8") as fh: + fh.write(html) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--out", required=True, + help="gh-pages checkout to write the stubs into") + parser.add_argument("--map", default=DEFAULT_MAP, + help="redirect map (default: redirects/legacy_map.yml)") + parser.add_argument("--version", default="rolling", + help="version directory legacy URLs land in (default: rolling)") + args = parser.parse_args() + + if not os.path.isdir(args.out): + raise SystemExit("error: --out is not a directory: %s" % args.out) + + mapping = load_map(args.map) + count = write_stubs(mapping, args.out, args.version) + write_404(mapping, args.out, args.version) + + print("wrote %d redirect stubs + 404.html into %s (version: %s)" + % (count, args.out, args.version)) + return 0 + + +if __name__ == "__main__": + sys.exit(main())