@@ -109,8 +109,7 @@ CONFIG_FLOAT(base_link_offset_x, "NavigationParameters.base_link_offset_x");
109109CONFIG_FLOAT (base_link_offset_y, " NavigationParameters.base_link_offset_y" );
110110CONFIG_FLOAT (max_free_path_length, " NavigationParameters.max_free_path_length" );
111111CONFIG_FLOAT (max_clearance, " NavigationParameters.max_clearance" );
112- CONFIG_FLOAT (local_half_fov, " NavigationParameters.local_half_fov" );
113- CONFIG_FLOAT (center_threshold, " NavigationParameters.center_threshold" );
112+ CONFIG_FLOAT (lidar_fov_half_angle, " NavigationParameters.lidar_fov_half_angle" );
114113CONFIG_BOOL (can_traverse_stairs, " NavigationParameters.can_traverse_stairs" );
115114CONFIG_FLOAT (target_dist_tolerance, " NavigationParameters.target_dist_tolerance" );
116115CONFIG_FLOAT (nudge_dist_tolerance, " NavigationParameters.nudge_dist_tolerance" );
@@ -596,9 +595,9 @@ class NavigationNode : public rclcpp::Node, public std::enable_shared_from_this<
596595 const uint32_t nudge_color = within_nudge ? 0xFF0000 : 0xE0E0E0 ; // red if within, light gray otherwise
597596 visualization::DrawArc (goal_in_local, nudge_dist_tolerance, -M_PI, M_PI, nudge_color, local_viz_msg_);
598597
599- // Draw FOV cone boundaries (dark yellow)
598+ // Draw lidar FOV cone boundaries (dark yellow)
600599 const float fov_length = 2 .0f ; // Length of FOV lines in meters
601- const float fov_half_angle = CONFIG_local_half_fov ;
600+ const float fov_half_angle = CONFIG_lidar_fov_half_angle ;
602601 Eigen::Vector2f fov_left (fov_length * cos (fov_half_angle), fov_length * sin (fov_half_angle));
603602 Eigen::Vector2f fov_right (fov_length * cos (-fov_half_angle), fov_length * sin (-fov_half_angle));
604603 visualization::DrawLine (Eigen::Vector2f (0 , 0 ), fov_left, 0xFFCC00 , local_viz_msg_);
@@ -712,23 +711,24 @@ class NavigationNode : public rclcpp::Node, public std::enable_shared_from_this<
712711 std::vector<std::shared_ptr<motion_primitives::PathRolloutBase>> path_rollouts = navigation_.sampled_paths_ ;
713712 std::shared_ptr<motion_primitives::PathRolloutBase> best_option = navigation_.best_option_ ;
714713
715- // Draw path options that participate in optimization (Length > 0) in blue
714+ // Draw path options that participate in optimization (Length > 0) in light blue
715+ constexpr uint32_t kCandidatePathColor = 0x80A0FF ; // Light blue for non-winning paths
716716 for (const auto & rollout : path_rollouts) {
717717 if (rollout->Length () <= 0 .0f ) continue ; // Skip zero-length paths (not in optimization)
718718
719719 // Handle constant curvature arc paths
720720 const auto * arc = dynamic_cast <const motion_primitives::ConstantCurvatureArcPath*>(rollout.get ());
721721 if (arc) {
722- // Draw arc path (blue: 0x0000FF)
723- visualization::DrawPathOption (arc->curvature , arc->Length (), arc->Clearance (), 0x0000FF , false ,
722+ // Draw arc path
723+ visualization::DrawPathOption (arc->curvature , arc->Length (), arc->Clearance (), kCandidatePathColor , false ,
724724 local_viz_msg_);
725725 }
726726 // Handle omnidirectional straight-line paths
727727 const auto * omni = dynamic_cast <const motion_primitives::OmnidirectionalMovePath*>(rollout.get ());
728728 if (omni) {
729- // Draw straight line from origin to endpoint (blue: 0x0000FF)
729+ // Draw straight line from origin to endpoint
730730 Eigen::Vector2f endpoint = omni->EndPoint ().translation ;
731- visualization::DrawLine (Eigen::Vector2f (0 , 0 ), endpoint, 0x0000FF , local_viz_msg_);
731+ visualization::DrawLine (Eigen::Vector2f (0 , 0 ), endpoint, kCandidatePathColor , local_viz_msg_);
732732 }
733733 }
734734
@@ -745,17 +745,24 @@ class NavigationNode : public rclcpp::Node, public std::enable_shared_from_this<
745745 const auto * best_omni = dynamic_cast <const motion_primitives::OmnidirectionalMovePath*>(best_option.get ());
746746 if (best_omni) {
747747 // Draw selected straight path (red: 0xFF0000)
748- Eigen::Vector2f endpoint = best_omni->EndPoint ().translation ;
748+ const Eigen::Vector2f endpoint = best_omni->EndPoint ().translation ;
749749 visualization::DrawLine (Eigen::Vector2f (0 , 0 ), endpoint, 0xFF0000 , local_viz_msg_);
750750
751- // Draw clearance boundaries showing minimum distance to obstacles (red: 0xFF0000)
751+ // Draw clearance corridor: robot body extent + clearance on each side
752+ // Path centerline is at base_link origin; support() gives distance from base_link to robot edge
753+ const Eigen::Vector2f dir_lateral (-best_omni->direction .y (), best_omni->direction .x ());
754+ const motion_primitives::OffsetRect robot_body = {
755+ Eigen::Vector2f (navigation_.params_ .base_link_offset_x , navigation_.params_ .base_link_offset_y ),
756+ 0 .5f * navigation_.params_ .robot_length ,
757+ 0 .5f * navigation_.params_ .robot_width
758+ };
752759 const float clearance = best_omni->Clearance ();
753- // Calculate perpendicular vector for clearance boundaries
754- Eigen::Vector2f perp (-best_omni-> direction . y (), best_omni-> direction . x ()) ;
755- Eigen::Vector2f clearance_offset = clearance * perp ;
756- // Draw parallel lines showing clearance boundaries
757- visualization::DrawLine (clearance_offset , endpoint + clearance_offset, 0xFF0000 , local_viz_msg_);
758- visualization::DrawLine (-clearance_offset , endpoint - clearance_offset, 0xFF0000 , local_viz_msg_);
760+ // Corridor edge = body extent (from base_link) + clearance
761+ const Eigen::Vector2f offset_left = (clearance + robot_body. support (dir_lateral)) * dir_lateral ;
762+ const Eigen::Vector2f offset_right = ( clearance + robot_body. support (-dir_lateral)) * (-dir_lateral) ;
763+ constexpr uint32_t kCorridorColor = 0xFF8080 ; // Light red
764+ visualization::DrawLine (offset_left , endpoint + offset_left, kCorridorColor , local_viz_msg_);
765+ visualization::DrawLine (offset_right , endpoint + offset_right, kCorridorColor , local_viz_msg_);
759766 }
760767 }
761768 }
@@ -776,8 +783,7 @@ class NavigationNode : public rclcpp::Node, public std::enable_shared_from_this<
776783 params->base_link_offset_y = CONFIG_base_link_offset_y;
777784 params->max_free_path_length = CONFIG_max_free_path_length;
778785 params->max_clearance = CONFIG_max_clearance;
779- params->local_half_fov = CONFIG_local_half_fov;
780- params->center_threshold = CONFIG_center_threshold;
786+ params->lidar_fov_half_angle = CONFIG_lidar_fov_half_angle;
781787 params->can_traverse_stairs = CONFIG_can_traverse_stairs;
782788 params->target_dist_tolerance = CONFIG_target_dist_tolerance;
783789 params->nudge_dist_tolerance = CONFIG_nudge_dist_tolerance;
0 commit comments